├── shot.jpg ├── .gitignore ├── gfx_ui_config.h ├── LICENSE ├── example ├── Makefile ├── imgui_impl_glfw.h ├── main.cpp └── imgui_impl_glfw.cpp ├── README.md ├── gfx_ui.h └── gfx_ui.cpp /shot.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/colormotor/gfx_ui/HEAD/shot.jpg -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Compiled Object files 2 | *.slo 3 | *.lo 4 | *.o 5 | *.obj 6 | 7 | # Precompiled Headers 8 | *.gch 9 | *.pch 10 | 11 | # Compiled Dynamic libraries 12 | *.so 13 | *.dylib 14 | *.dll 15 | 16 | # Fortran module files 17 | *.mod 18 | *.smod 19 | 20 | # Compiled Static libraries 21 | *.lai 22 | *.la 23 | *.a 24 | *.lib 25 | 26 | # Executables 27 | *.exe 28 | *.out 29 | *.app 30 | -------------------------------------------------------------------------------- /gfx_ui_config.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | /* 4 | // Use this for custom type mappings for Trans2d type 5 | #define UI_TRANS2D_CLASS_EXTRA \ 6 | Trans2d(const cm::M33& f) { x.x=f[0].x; x.y=f[0].y; \ 7 | y.x=f[1].x; y.y=f[1].y; \ 8 | pos.x=f[2].x; pos.y=f[2].y; } \ 9 | y.x=rot.col(1)[0]; y.y=rot.col(1)[1]; \ 10 | pos.x=p.x; pos.y=p.y; } \ 11 | operator cm::M33() const { cm::M33 f; \ 12 | f[0] = cm::V3(x.x, x.y, 0.0); \ 13 | f[1] = cm::V3(y.x, y.y, 0.0); \ 14 | f[2] = cm::V3(pos.x, pos.y, 1.); return f; } 15 | */ 16 | 17 | /* 18 | // Use this for custom type mappings for the rect type 19 | #define UI_RECT_CLASS_EXTRA \ 20 | Rect( const cm::Box& r ) { min = r.min(); max = r.max(); } \ 21 | operator cm::Box() const { return cm::Box((cm::V2)min, (cm::V2)max); } 22 | */ -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 colormotor 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /example/Makefile: -------------------------------------------------------------------------------- 1 | # 2 | # Cross Platform Makefile 3 | # Compatible with Ubuntu 14.04.1 and Mac OS X 4 | # 5 | # 6 | # if you using Mac OS X: 7 | # You'll need glfw 8 | # http://www.glfw.org 9 | # 10 | 11 | #CXX = g++ 12 | 13 | EXE = opengl_example 14 | OBJS = main.o imgui_impl_glfw.o ../gfx_ui.o 15 | OBJS += ../../../imgui.o ../../../imgui_demo.o ../../../imgui_draw.o 16 | 17 | UNAME_S := $(shell uname -s) 18 | 19 | 20 | ifeq ($(UNAME_S), Linux) #LINUX 21 | ECHO_MESSAGE = "Linux" 22 | LIBS = -lGL `pkg-config --static --libs glfw3` 23 | 24 | CXXFLAGS = -I../../../ `pkg-config --cflags glfw3` -I../ 25 | CXXFLAGS += -Wall -Wformat 26 | CFLAGS = $(CXXFLAGS) 27 | endif 28 | 29 | ifeq ($(UNAME_S), Darwin) #APPLE 30 | ECHO_MESSAGE = "Mac OS X" 31 | LIBS = -framework OpenGL -framework Cocoa -framework IOKit -framework CoreVideo 32 | LIBS += -L/usr/local/lib -lglfw 33 | 34 | CXXFLAGS = -I../../../ -I/usr/local/include -I../ 35 | CXXFLAGS += -Wall -Wformat 36 | # CXXFLAGS += -D__APPLE__ 37 | CFLAGS = $(CXXFLAGS) 38 | endif 39 | 40 | ifeq ($(UNAME_S), MINGW64_NT-6.3) 41 | ECHO_MESSAGE = "Windows" 42 | LIBS = -lglfw3 -lgdi32 -lopengl32 -limm32 43 | 44 | CXXFLAGS = -I../../../ -I../../libs/gl3w `pkg-config --cflags glfw3` -I../ 45 | CXXFLAGS += -Wall -Wformat 46 | CFLAGS = $(CXXFLAGS) 47 | endif 48 | 49 | .cpp.o: 50 | $(CXX) $(CXXFLAGS) -c -o $@ $< 51 | 52 | all: $(EXE) 53 | @echo Build complete for $(ECHO_MESSAGE) 54 | 55 | $(EXE): $(OBJS) 56 | $(CXX) -o $(EXE) $(OBJS) $(CXXFLAGS) $(LIBS) 57 | 58 | clean: 59 | rm $(EXE) $(OBJS) 60 | 61 | -------------------------------------------------------------------------------- /example/imgui_impl_glfw.h: -------------------------------------------------------------------------------- 1 | // ImGui GLFW binding with OpenGL 2 | // In this binding, ImTextureID is used to store an OpenGL 'GLuint' texture identifier. Read the FAQ about ImTextureID in imgui.cpp. 3 | 4 | // If your context is GL3/GL3 then prefer using the code in opengl3_example. 5 | // You *might* use this code with a GL3/GL4 context but make sure you disable the programmable pipeline by calling "glUseProgram(0)" before ImGui::Render(). 6 | // We cannot do that from GL2 code because the function doesn't exist. 7 | 8 | // You can copy and use unmodified imgui_impl_* files in your project. See main.cpp for an example of using this. 9 | // If you use this binding you'll need to call 4 functions: ImGui_ImplXXXX_Init(), ImGui_ImplXXXX_NewFrame(), ImGui::Render() and ImGui_ImplXXXX_Shutdown(). 10 | // If you are new to ImGui, see examples/README.txt and documentation at the top of imgui.cpp. 11 | // https://github.com/ocornut/imgui 12 | 13 | struct GLFWwindow; 14 | 15 | IMGUI_API bool ImGui_ImplGlfw_Init(GLFWwindow* window, bool install_callbacks); 16 | IMGUI_API void ImGui_ImplGlfw_Shutdown(); 17 | IMGUI_API void ImGui_ImplGlfw_NewFrame(); 18 | 19 | // Use if you want to reset your rendering device without losing ImGui state. 20 | IMGUI_API void ImGui_ImplGlfw_InvalidateDeviceObjects(); 21 | IMGUI_API bool ImGui_ImplGlfw_CreateDeviceObjects(); 22 | 23 | // GLFW callbacks (installed by default if you enable 'install_callbacks' during initialization) 24 | // Provided here if you want to chain callbacks. 25 | // You can also handle inputs yourself and use those as a reference. 26 | IMGUI_API void ImGui_ImplGlfw_MouseButtonCallback(GLFWwindow* window, int button, int action, int mods); 27 | IMGUI_API void ImGui_ImplGlfw_ScrollCallback(GLFWwindow* window, double xoffset, double yoffset); 28 | IMGUI_API void ImGui_ImplGlFw_KeyCallback(GLFWwindow* window, int key, int scancode, int action, int mods); 29 | IMGUI_API void ImGui_ImplGlfw_CharCallback(GLFWwindow* window, unsigned int c); 30 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # gfx_ui 2 | A minimal geometry editing UI based on [IMGUI] (https://github.com/ocornut/imgui). I started this project out of frustration after rewriting yet another retained mode geometry manipulation UI for a personal project. 3 | 4 | Currently handles these features: 5 | 6 | * Basic point and handle dragging 7 | * Manipulating affine transforms 8 | * Rect selection 9 | * Icon toolbars 10 | 11 | ![alt tag](https://raw.githubusercontent.com/colormotor/gfx_ui/master/shot.jpg) 12 | 13 | ## Basic Usage 14 | ### Initialization 15 | Call ```ui::init()``` **after** the main IMGUI font has been loaded and **before** the texture atlas has been created (refer to the IMGUI instructions for more details), for example: 16 | 17 | ``` 18 | ImGuiIO& io = ImGui::GetIO(); 19 | io.Fonts->AddFontDefault(); 20 | ui::init(); // Init here 21 | ... 22 | unsigned char* pixels; 23 | int width, height; 24 | io.Fonts->GetTexDataAsAlpha8(&pixels, &width, &height); 25 | ... 26 | ``` 27 | ### UI 28 | The widget calls are slightly different from the usual IMGUI calls: 29 | 30 | * Widget IDs are specified as an *index* rather than a string. This is convenient when creating many widgets, for example when editing a poly-line in a loop. Eg: 31 | 32 | ``` 33 | ui::begin("Some widgets"); 34 | for(int i=0; i 5 | #include "imgui_impl_glfw.h" 6 | #include 7 | #include 8 | #include "gfx_ui.h" 9 | 10 | static void error_callback(int error, const char* description) 11 | { 12 | fprintf(stderr, "Error %d: %s\n", error, description); 13 | } 14 | 15 | int main(int, char**) 16 | { 17 | // Setup window 18 | glfwSetErrorCallback(error_callback); 19 | if (!glfwInit()) 20 | return 1; 21 | GLFWwindow* window = glfwCreateWindow(1280, 720, "ImGui OpenGL2 example", NULL, NULL); 22 | glfwMakeContextCurrent(window); 23 | 24 | // Setup ImGui binding 25 | ImGui::CreateContext(); 26 | ImGui_ImplGlfw_Init(window, true); 27 | 28 | // Load Fonts 29 | // (there is a default font, this is only if you want to change it. see extra_fonts/README.txt for more details) 30 | ImGuiIO& io = ImGui::GetIO(); 31 | io.Fonts->AddFontDefault(); 32 | ui::init(20.); 33 | 34 | //io.Fonts->AddFontFromFileTTF("../../extra_fonts/Cousine-Regular.ttf", 15.0f); 35 | //io.Fonts->AddFontFromFileTTF("../../extra_fonts/DroidSans.ttf", 16.0f); 36 | //io.Fonts->AddFontFromFileTTF("../../extra_fonts/ProggyClean.ttf", 13.0f); 37 | //io.Fonts->AddFontFromFileTTF("../../extra_fonts/ProggyTiny.ttf", 10.0f); 38 | //io.Fonts->AddFontFromFileTTF("c:\\Windows\\Fonts\\ArialUni.ttf", 18.0f, NULL, io.Fonts->GetGlyphRangesJapanese()); 39 | 40 | bool show_test_window = true; 41 | bool show_another_window = false; 42 | ImVec4 clear_color = ImColor(114, 144, 154); 43 | 44 | // Main loop 45 | while (!glfwWindowShouldClose(window)) 46 | { 47 | glfwPollEvents(); 48 | ImGui_ImplGlfw_NewFrame(); 49 | 50 | ui::demo(); 51 | 52 | // 1. Show a simple window 53 | // Tip: if we don't call ImGui::Begin()/ImGui::End() the widgets appears in a window automatically called "Debug" 54 | { 55 | static float f = 0.0f; 56 | ImGui::Text("Hello, world!"); 57 | ImGui::SliderFloat("Dragger size", &ui::config.draggerSize, 3.0f, 10.0f); 58 | ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / ImGui::GetIO().Framerate, ImGui::GetIO().Framerate); 59 | ImGui::Text("Drag the points and widgets around"); 60 | ImGui::Text("To add points use the pencil tool"); 61 | 62 | } 63 | 64 | /* 65 | // 2. Show another simple window, this time using an explicit Begin/End pair 66 | if (show_another_window) 67 | { 68 | ImGui::SetNextWindowSize(ImVec2(200,100), ImGuiSetCond_FirstUseEver); 69 | ImGui::Begin("Another Window", &show_another_window); 70 | ImGui::Text("Hello"); 71 | ImGui::End(); 72 | } 73 | 74 | // 3. Show the ImGui test window. Most of the sample code is in ImGui::ShowTestWindow() 75 | if (show_test_window) 76 | { 77 | ImGui::SetNextWindowPos(ImVec2(650, 20), ImGuiSetCond_FirstUseEver); 78 | ImGui::ShowTestWindow(&show_test_window); 79 | }*/ 80 | 81 | // Rendering 82 | int display_w, display_h; 83 | glfwGetFramebufferSize(window, &display_w, &display_h); 84 | glViewport(0, 0, display_w, display_h); 85 | glClearColor(1,1,1,1);//clear_color.x, clear_color.y, clear_color.z, clear_color.w); 86 | glClear(GL_COLOR_BUFFER_BIT); 87 | ImGui::Render(); 88 | glfwSwapBuffers(window); 89 | } 90 | 91 | // Cleanup 92 | ImGui_ImplGlfw_Shutdown(); 93 | ImGui::DestroyContext(); 94 | glfwTerminate(); 95 | 96 | return 0; 97 | } 98 | -------------------------------------------------------------------------------- /gfx_ui.h: -------------------------------------------------------------------------------- 1 | /******************************************************************** 2 | -------------------------------------------------------------------- 3 | -- _,(_)._ 4 | -- ___,(_______). ____ 5 | -- ,'__. \ /\___\-. 6 | -- /,' / \ / / \ 7 | -- | | | |,' / \ 8 | -- \`.| / ___|________ 9 | -- `. : : / gfx_ui 10 | -- `. :.,' A immediate mode 2d graphics manipulation UI 11 | -- `-.________,-' Built on top of IMGUI 12 | -- © Daniel Berio 13 | -- http://www.enist.org 14 | -- drand48@gmail.com 15 | -- 16 | -------------------------------------------------------------------- 17 | ********************************************************************/ 18 | 19 | 20 | #pragma once 21 | #include "imgui.h" 22 | #include "gfx_ui_config.h" 23 | #include 24 | #include 25 | #include 26 | #include 27 | 28 | namespace ui 29 | { 30 | enum 31 | { 32 | DRAGGER_CIRCLE = 0, 33 | DRAGGER_SQUARE = 1 34 | }; 35 | 36 | 37 | struct Trans2d 38 | { 39 | Trans2d() {} 40 | Trans2d( const ImVec2& x, const ImVec2& y, const ImVec2& pos) 41 | : x(x), y(y), pos(pos) {} 42 | 43 | #ifdef UI_TRANS2D_CLASS_EXTRA 44 | UI_TRANS2D_CLASS_EXTRA 45 | #endif 46 | 47 | ImVec2 x; 48 | ImVec2 y; 49 | ImVec2 pos; 50 | }; 51 | 52 | struct Rect 53 | { 54 | Rect() {} 55 | Rect( const ImVec2& min, const ImVec2& max ) 56 | : min(min), max(max) {} 57 | 58 | #ifdef UI_RECT_CLASS_EXTRA 59 | UI_RECT_CLASS_EXTRA 60 | #endif 61 | 62 | bool contains( const ImVec2& p ) const { return ( p.x >= min.x && p.y >= min.y 63 | && p.x <= max.x && p.y <= max.y ); } 64 | 65 | ImVec2 min; 66 | ImVec2 max; 67 | }; 68 | 69 | struct Config 70 | { 71 | Config() 72 | { 73 | rounding = 2.0; 74 | draggerSize = 4.0; 75 | lineColor = 0xff666666; 76 | hoverColor = 0xff0000ff; 77 | selectedColor = 0xff0044ff; 78 | color=0xff666666; 79 | textColor=0xff333333; 80 | } 81 | 82 | float rounding; 83 | float draggerSize; 84 | ImU32 lineColor; 85 | ImU32 hoverColor; 86 | ImU32 selectedColor; 87 | ImU32 color; 88 | ImU32 textColor; 89 | }; 90 | 91 | extern Config config; 92 | 93 | /// Returns true if the IMGUI/gfx_ui have focus 94 | /// Since gfx_ui creates a "full screen" window to handle interactions through IMGUI, 95 | /// you should use this rather than ImGui::GetIO().WantCaptureMouse to check weather 96 | /// your application should handle mouse events 97 | bool hasFocus(); 98 | 99 | /// Initialization, starts up the font 100 | /// This function should be called BEFORE the IMGUI texture atlas is created 101 | /// And AFTER the default IMGUI texture has been loaded. 102 | /// Should find a less restrictive way to handle this. 103 | void init( float iconSize=20.0, const std::string& iconFontPath=""); 104 | 105 | /// The UI should be called withing these begin end blocks 106 | void begin( const std::string& name="gfx_ui" ); 107 | void end(); 108 | 109 | /// Will return true if the previous widget call has caught an interaction 110 | bool modified(); 111 | 112 | bool modifierShift(); 113 | bool modifierAlt(); 114 | 115 | /// Dragger widget 116 | ImVec2 dragger( int index, ImVec2 pos, bool selected=false, float size=-1. ); 117 | 118 | /// Highlights a dragger 119 | void highlightDragger( const ImVec2& pos, float size=-1. ); 120 | 121 | /// Draw a line from a to b 122 | void line( const ImVec2& a, const ImVec2& b, ImColor clr=ImColor(ImVec4(-1,-1,-1,1)) ); 123 | 124 | // Draw text string 125 | void text( ImVec2 pos, const std::string& str, ImColor clr=ImColor(ImVec4(-1,-1,-1,1)) ); 126 | 127 | /// Angle and length handle widget 128 | ImVec2 lengthHandle( int index, ImVec2 thetaLen, float startTheta, const ImVec2& pos, const ImVec2& minThetaLen, const ImVec2& maxThetaLen, bool selected=false ); 129 | 130 | /// Angle handle widget 131 | float handle( int index, float ang, const ImVec2& pos, float length, float startTheta=0.0f, float minTheta=0.0f, float maxTheta=0.0f, bool selected=false ); 132 | 133 | /// Simple affine transform widget (two axes, centered) 134 | Trans2d affineSimple( int index, Trans2d m, bool selected=false, float scale=1. ); 135 | 136 | /// Creates a draggable rect for selection, see demo() for example usage 137 | Rect selector(); 138 | 139 | /// Returns current mouse delta 140 | ImVec2 dragDelta(); 141 | 142 | /// Creates a font-icon toolbar (not necessary to call between begin and end) 143 | int toolbar( const std::string& title, const std::string& items, int selectedItem, bool horizontal=false, bool showAscii=false ); 144 | 145 | void demo(); 146 | } 147 | -------------------------------------------------------------------------------- /example/imgui_impl_glfw.cpp: -------------------------------------------------------------------------------- 1 | // ImGui GLFW binding with OpenGL 2 | // In this binding, ImTextureID is used to store an OpenGL 'GLuint' texture identifier. Read the FAQ about ImTextureID in imgui.cpp. 3 | 4 | // If your context is GL3/GL3 then prefer using the code in opengl3_example. 5 | // You *might* use this code with a GL3/GL4 context but make sure you disable the programmable pipeline by calling "glUseProgram(0)" before ImGui::Render(). 6 | // We cannot do that from GL2 code because the function doesn't exist. 7 | 8 | // You can copy and use unmodified imgui_impl_* files in your project. See main.cpp for an example of using this. 9 | // If you use this binding you'll need to call 4 functions: ImGui_ImplXXXX_Init(), ImGui_ImplXXXX_NewFrame(), ImGui::Render() and ImGui_ImplXXXX_Shutdown(). 10 | // If you are new to ImGui, see examples/README.txt and documentation at the top of imgui.cpp. 11 | // https://github.com/ocornut/imgui 12 | 13 | #include 14 | #include "imgui_impl_glfw.h" 15 | 16 | // GLFW 17 | #include 18 | #ifdef _WIN32 19 | #undef APIENTRY 20 | #define GLFW_EXPOSE_NATIVE_WIN32 21 | #define GLFW_EXPOSE_NATIVE_WGL 22 | #include 23 | #endif 24 | 25 | // Data 26 | static GLFWwindow* g_Window = NULL; 27 | static double g_Time = 0.0f; 28 | static bool g_MousePressed[3] = { false, false, false }; 29 | static float g_MouseWheel = 0.0f; 30 | static GLuint g_FontTexture = 0; 31 | 32 | // This is the main rendering function that you have to implement and provide to ImGui (via setting up 'RenderDrawListsFn' in the ImGuiIO structure) 33 | // If text or lines are blurry when integrating ImGui in your engine: 34 | // - in your Render function, try translating your projection matrix by (0.5f,0.5f) or (0.375f,0.375f) 35 | void ImGui_ImplGlfw_RenderDrawLists(ImDrawData* draw_data) 36 | { 37 | // Avoid rendering when minimized, scale coordinates for retina displays (screen coordinates != framebuffer coordinates) 38 | ImGuiIO& io = ImGui::GetIO(); 39 | int fb_width = (int)(io.DisplaySize.x * io.DisplayFramebufferScale.x); 40 | int fb_height = (int)(io.DisplaySize.y * io.DisplayFramebufferScale.y); 41 | if (fb_width == 0 || fb_height == 0) 42 | return; 43 | draw_data->ScaleClipRects(io.DisplayFramebufferScale); 44 | 45 | // We are using the OpenGL fixed pipeline to make the example code simpler to read! 46 | // Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled, vertex/texcoord/color pointers. 47 | GLint last_texture; glGetIntegerv(GL_TEXTURE_BINDING_2D, &last_texture); 48 | GLint last_viewport[4]; glGetIntegerv(GL_VIEWPORT, last_viewport); 49 | glPushAttrib(GL_ENABLE_BIT | GL_COLOR_BUFFER_BIT | GL_TRANSFORM_BIT); 50 | glEnable(GL_BLEND); 51 | glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 52 | glDisable(GL_CULL_FACE); 53 | glDisable(GL_DEPTH_TEST); 54 | glEnable(GL_SCISSOR_TEST); 55 | glEnableClientState(GL_VERTEX_ARRAY); 56 | glEnableClientState(GL_TEXTURE_COORD_ARRAY); 57 | glEnableClientState(GL_COLOR_ARRAY); 58 | glEnable(GL_TEXTURE_2D); 59 | //glUseProgram(0); // You may want this if using this code in an OpenGL 3+ context 60 | 61 | // Setup viewport, orthographic projection matrix 62 | glViewport(0, 0, (GLsizei)fb_width, (GLsizei)fb_height); 63 | glMatrixMode(GL_PROJECTION); 64 | glPushMatrix(); 65 | glLoadIdentity(); 66 | glOrtho(0.0f, io.DisplaySize.x, io.DisplaySize.y, 0.0f, -1.0f, +1.0f); 67 | glMatrixMode(GL_MODELVIEW); 68 | glPushMatrix(); 69 | glLoadIdentity(); 70 | 71 | // Render command lists 72 | #define OFFSETOF(TYPE, ELEMENT) ((size_t)&(((TYPE *)0)->ELEMENT)) 73 | for (int n = 0; n < draw_data->CmdListsCount; n++) 74 | { 75 | const ImDrawList* cmd_list = draw_data->CmdLists[n]; 76 | const unsigned char* vtx_buffer = (const unsigned char*)&cmd_list->VtxBuffer.front(); 77 | const ImDrawIdx* idx_buffer = &cmd_list->IdxBuffer.front(); 78 | glVertexPointer(2, GL_FLOAT, sizeof(ImDrawVert), (void*)(vtx_buffer + OFFSETOF(ImDrawVert, pos))); 79 | glTexCoordPointer(2, GL_FLOAT, sizeof(ImDrawVert), (void*)(vtx_buffer + OFFSETOF(ImDrawVert, uv))); 80 | glColorPointer(4, GL_UNSIGNED_BYTE, sizeof(ImDrawVert), (void*)(vtx_buffer + OFFSETOF(ImDrawVert, col))); 81 | 82 | for (int cmd_i = 0; cmd_i < cmd_list->CmdBuffer.size(); cmd_i++) 83 | { 84 | const ImDrawCmd* pcmd = &cmd_list->CmdBuffer[cmd_i]; 85 | if (pcmd->UserCallback) 86 | { 87 | pcmd->UserCallback(cmd_list, pcmd); 88 | } 89 | else 90 | { 91 | glBindTexture(GL_TEXTURE_2D, (GLuint)(intptr_t)pcmd->TextureId); 92 | glScissor((int)pcmd->ClipRect.x, (int)(fb_height - pcmd->ClipRect.w), (int)(pcmd->ClipRect.z - pcmd->ClipRect.x), (int)(pcmd->ClipRect.w - pcmd->ClipRect.y)); 93 | glDrawElements(GL_TRIANGLES, (GLsizei)pcmd->ElemCount, sizeof(ImDrawIdx) == 2 ? GL_UNSIGNED_SHORT : GL_UNSIGNED_INT, idx_buffer); 94 | } 95 | idx_buffer += pcmd->ElemCount; 96 | } 97 | } 98 | #undef OFFSETOF 99 | 100 | // Restore modified state 101 | glDisableClientState(GL_COLOR_ARRAY); 102 | glDisableClientState(GL_TEXTURE_COORD_ARRAY); 103 | glDisableClientState(GL_VERTEX_ARRAY); 104 | glBindTexture(GL_TEXTURE_2D, (GLuint)last_texture); 105 | glMatrixMode(GL_MODELVIEW); 106 | glPopMatrix(); 107 | glMatrixMode(GL_PROJECTION); 108 | glPopMatrix(); 109 | glPopAttrib(); 110 | glViewport(last_viewport[0], last_viewport[1], (GLsizei)last_viewport[2], (GLsizei)last_viewport[3]); 111 | } 112 | 113 | 114 | static const char* ImGui_ImplGlfw_GetClipboardText(void* userData) 115 | { 116 | return glfwGetClipboardString(g_Window); 117 | } 118 | 119 | static void ImGui_ImplGlfw_SetClipboardText(void* userData, const char* text) 120 | { 121 | glfwSetClipboardString(g_Window, text); 122 | } 123 | 124 | void ImGui_ImplGlfw_MouseButtonCallback(GLFWwindow*, int button, int action, int /*mods*/) 125 | { 126 | if (action == GLFW_PRESS && button >= 0 && button < 3) 127 | g_MousePressed[button] = true; 128 | } 129 | 130 | void ImGui_ImplGlfw_ScrollCallback(GLFWwindow*, double /*xoffset*/, double yoffset) 131 | { 132 | g_MouseWheel += (float)yoffset; // Use fractional mouse wheel, 1.0 unit 5 lines. 133 | } 134 | 135 | void ImGui_ImplGlFw_KeyCallback(GLFWwindow*, int key, int, int action, int mods) 136 | { 137 | ImGuiIO& io = ImGui::GetIO(); 138 | if (action == GLFW_PRESS) 139 | io.KeysDown[key] = true; 140 | if (action == GLFW_RELEASE) 141 | io.KeysDown[key] = false; 142 | 143 | (void)mods; // Modifiers are not reliable across systems 144 | io.KeyCtrl = io.KeysDown[GLFW_KEY_LEFT_CONTROL] || io.KeysDown[GLFW_KEY_RIGHT_CONTROL]; 145 | io.KeyShift = io.KeysDown[GLFW_KEY_LEFT_SHIFT] || io.KeysDown[GLFW_KEY_RIGHT_SHIFT]; 146 | io.KeyAlt = io.KeysDown[GLFW_KEY_LEFT_ALT] || io.KeysDown[GLFW_KEY_RIGHT_ALT]; 147 | io.KeySuper = io.KeysDown[GLFW_KEY_LEFT_SUPER] || io.KeysDown[GLFW_KEY_RIGHT_SUPER]; 148 | } 149 | 150 | void ImGui_ImplGlfw_CharCallback(GLFWwindow*, unsigned int c) 151 | { 152 | ImGuiIO& io = ImGui::GetIO(); 153 | if (c > 0 && c < 0x10000) 154 | io.AddInputCharacter((unsigned short)c); 155 | } 156 | 157 | bool ImGui_ImplGlfw_CreateDeviceObjects() 158 | { 159 | // Build texture atlas 160 | ImGuiIO& io = ImGui::GetIO(); 161 | unsigned char* pixels; 162 | int width, height; 163 | io.Fonts->GetTexDataAsAlpha8(&pixels, &width, &height); 164 | 165 | // Upload texture to graphics system 166 | GLint last_texture; 167 | glGetIntegerv(GL_TEXTURE_BINDING_2D, &last_texture); 168 | glGenTextures(1, &g_FontTexture); 169 | glBindTexture(GL_TEXTURE_2D, g_FontTexture); 170 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 171 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 172 | glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, width, height, 0, GL_ALPHA, GL_UNSIGNED_BYTE, pixels); 173 | 174 | // Store our identifier 175 | io.Fonts->TexID = (void *)(intptr_t)g_FontTexture; 176 | 177 | // Restore state 178 | glBindTexture(GL_TEXTURE_2D, last_texture); 179 | 180 | return true; 181 | } 182 | 183 | void ImGui_ImplGlfw_InvalidateDeviceObjects() 184 | { 185 | if (g_FontTexture) 186 | { 187 | glDeleteTextures(1, &g_FontTexture); 188 | ImGui::GetIO().Fonts->TexID = 0; 189 | g_FontTexture = 0; 190 | } 191 | } 192 | 193 | bool ImGui_ImplGlfw_Init(GLFWwindow* window, bool install_callbacks) 194 | { 195 | g_Window = window; 196 | 197 | ImGuiIO& io = ImGui::GetIO(); 198 | io.KeyMap[ImGuiKey_Tab] = GLFW_KEY_TAB; // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array. 199 | io.KeyMap[ImGuiKey_LeftArrow] = GLFW_KEY_LEFT; 200 | io.KeyMap[ImGuiKey_RightArrow] = GLFW_KEY_RIGHT; 201 | io.KeyMap[ImGuiKey_UpArrow] = GLFW_KEY_UP; 202 | io.KeyMap[ImGuiKey_DownArrow] = GLFW_KEY_DOWN; 203 | io.KeyMap[ImGuiKey_PageUp] = GLFW_KEY_PAGE_UP; 204 | io.KeyMap[ImGuiKey_PageDown] = GLFW_KEY_PAGE_DOWN; 205 | io.KeyMap[ImGuiKey_Home] = GLFW_KEY_HOME; 206 | io.KeyMap[ImGuiKey_End] = GLFW_KEY_END; 207 | io.KeyMap[ImGuiKey_Delete] = GLFW_KEY_DELETE; 208 | io.KeyMap[ImGuiKey_Backspace] = GLFW_KEY_BACKSPACE; 209 | io.KeyMap[ImGuiKey_Enter] = GLFW_KEY_ENTER; 210 | io.KeyMap[ImGuiKey_Escape] = GLFW_KEY_ESCAPE; 211 | io.KeyMap[ImGuiKey_A] = GLFW_KEY_A; 212 | io.KeyMap[ImGuiKey_C] = GLFW_KEY_C; 213 | io.KeyMap[ImGuiKey_V] = GLFW_KEY_V; 214 | io.KeyMap[ImGuiKey_X] = GLFW_KEY_X; 215 | io.KeyMap[ImGuiKey_Y] = GLFW_KEY_Y; 216 | io.KeyMap[ImGuiKey_Z] = GLFW_KEY_Z; 217 | 218 | io.RenderDrawListsFn = ImGui_ImplGlfw_RenderDrawLists; // Alternatively you can set this to NULL and call ImGui::GetDrawData() after ImGui::Render() to get the same ImDrawData pointer. 219 | io.SetClipboardTextFn = ImGui_ImplGlfw_SetClipboardText; 220 | io.GetClipboardTextFn = ImGui_ImplGlfw_GetClipboardText; 221 | #ifdef _WIN32 222 | io.ImeWindowHandle = glfwGetWin32Window(g_Window); 223 | #endif 224 | 225 | if (install_callbacks) 226 | { 227 | glfwSetMouseButtonCallback(window, ImGui_ImplGlfw_MouseButtonCallback); 228 | glfwSetScrollCallback(window, ImGui_ImplGlfw_ScrollCallback); 229 | glfwSetKeyCallback(window, ImGui_ImplGlFw_KeyCallback); 230 | glfwSetCharCallback(window, ImGui_ImplGlfw_CharCallback); 231 | } 232 | 233 | return true; 234 | } 235 | 236 | void ImGui_ImplGlfw_Shutdown() 237 | { 238 | ImGui_ImplGlfw_InvalidateDeviceObjects(); 239 | } 240 | 241 | void ImGui_ImplGlfw_NewFrame() 242 | { 243 | if (!g_FontTexture) 244 | ImGui_ImplGlfw_CreateDeviceObjects(); 245 | 246 | ImGuiIO& io = ImGui::GetIO(); 247 | 248 | // Setup display size (every frame to accommodate for window resizing) 249 | int w, h; 250 | int display_w, display_h; 251 | glfwGetWindowSize(g_Window, &w, &h); 252 | glfwGetFramebufferSize(g_Window, &display_w, &display_h); 253 | io.DisplaySize = ImVec2((float)w, (float)h); 254 | io.DisplayFramebufferScale = ImVec2(w > 0 ? ((float)display_w / w) : 0, h > 0 ? ((float)display_h / h) : 0); 255 | 256 | // Setup time step 257 | double current_time = glfwGetTime(); 258 | io.DeltaTime = g_Time > 0.0 ? (float)(current_time - g_Time) : (float)(1.0f/60.0f); 259 | g_Time = current_time; 260 | 261 | // Setup inputs 262 | // (we already got mouse wheel, keyboard keys & characters from glfw callbacks polled in glfwPollEvents()) 263 | if (glfwGetWindowAttrib(g_Window, GLFW_FOCUSED)) 264 | { 265 | double mouse_x, mouse_y; 266 | glfwGetCursorPos(g_Window, &mouse_x, &mouse_y); 267 | io.MousePos = ImVec2((float)mouse_x, (float)mouse_y); // Mouse position in screen coordinates (set to -1,-1 if no mouse / on another screen, etc.) 268 | } 269 | else 270 | { 271 | io.MousePos = ImVec2(-1,-1); 272 | } 273 | 274 | for (int i = 0; i < 3; i++) 275 | { 276 | io.MouseDown[i] = g_MousePressed[i] || glfwGetMouseButton(g_Window, i) != 0; // If a mouse press event came, always pass it as "mouse held this frame", so we don't miss click-release events that are shorter than 1 frame. 277 | g_MousePressed[i] = false; 278 | } 279 | 280 | io.MouseWheel = g_MouseWheel; 281 | g_MouseWheel = 0.0f; 282 | 283 | // Hide OS mouse cursor if ImGui is drawing it 284 | glfwSetInputMode(g_Window, GLFW_CURSOR, io.MouseDrawCursor ? GLFW_CURSOR_HIDDEN : GLFW_CURSOR_NORMAL); 285 | 286 | // Start the frame 287 | ImGui::NewFrame(); 288 | } 289 | -------------------------------------------------------------------------------- /gfx_ui.cpp: -------------------------------------------------------------------------------- 1 | /******************************************************************** 2 | -------------------------------------------------------------------- 3 | -- _,(_)._ 4 | -- ___,(_______). ____ 5 | -- ,'__. \ /\___\-. 6 | -- /,' / \ / / \ 7 | -- | | | |,' / \ 8 | -- \`.| / ___|________ 9 | -- `. : : / gfx_ui 10 | -- `. :.,' A immediate mode graphics manipulation UI 11 | -- `-.________,-' Built on top of IMGUI 12 | -- © Daniel Berio 13 | -- http://www.enist.org 14 | -- drand48@gmail.com 15 | -- 16 | -------------------------------------------------------------------- 17 | ********************************************************************/ 18 | 19 | 20 | #include "imgui.h" 21 | #include "imgui_internal.h" 22 | #include "gfx_ui.h" 23 | 24 | // IM dragger interface 25 | 26 | namespace ui 27 | { 28 | Config config; 29 | 30 | static ImGuiWindow* uiWindow=NULL; 31 | static std::string groupId = ""; 32 | static bool mod=false; 33 | static ImFont* iconFont; 34 | static float iconSize=20.; 35 | 36 | void init( float iconSize_, const std::string& iconFontPath) 37 | { 38 | iconSize = iconSize_; 39 | ImGuiIO& io = ImGui::GetIO(); 40 | if(iconFontPath!="") 41 | { 42 | iconFont = io.Fonts->AddFontFromFileTTF(iconFontPath.c_str(), iconSize); 43 | }else{ 44 | extern size_t gfx_font_size; 45 | extern unsigned char gfx_font[]; 46 | unsigned char * mem = new unsigned char[gfx_font_size]; 47 | memcpy(mem, gfx_font, gfx_font_size); 48 | iconFont = io.Fonts->AddFontFromMemoryTTF(mem, gfx_font_size, iconSize); 49 | } 50 | 51 | //config.colors.push_back(config.color); 52 | } 53 | 54 | bool hasFocus() 55 | { 56 | ImGuiContext& g = *GImGui; 57 | 58 | // maintains cross compatibility with ImGui 59 | if(!g.IO.WantCaptureMouse){ 60 | return false; 61 | } 62 | 63 | // Allow mouse interaction if over background window 64 | if( g.HoveredWindow == uiWindow && g.ActiveId==0 ) //g.HoveredIdPreviousFrame == 0 && g.HoveredId==0 && g.ActiveId==0 ) 65 | { 66 | return false; 67 | } 68 | 69 | return true; 70 | } 71 | 72 | void begin( const std::string& name ) 73 | { 74 | static bool show=true; 75 | ImGui::PushID(name.c_str()); 76 | ImGui::SetNextWindowPos(ImVec2(0,0), ImGuiCond_Always); 77 | ImGui::SetNextWindowSize(ImGui::GetIO().DisplaySize, ImGuiCond_Always); //, ImGuiCond_FirstUseEver);// ImGui::GetIO().DisplaySize); 78 | ImGui::SetNextWindowBgAlpha(0.0); //, ImGuiCond_Always); 79 | ImGui::Begin(name.c_str(), &show, ImGuiWindowFlags_NoTitleBar|ImGuiWindowFlags_NoResize|ImGuiWindowFlags_NoMove|ImGuiWindowFlags_NoSavedSettings|ImGuiWindowFlags_NoBringToFrontOnFocus); 80 | 81 | uiWindow = ImGui::GetCurrentWindow(); 82 | 83 | // Ok, something wrong here because ImGui::SetNextWindowBgAlpha is setting alpha=0 for all windows... 84 | ImGui::SetNextWindowBgAlpha(1.0); 85 | } 86 | 87 | void end() 88 | { 89 | ImGui::End(); 90 | ImGui::PopID(); 91 | } 92 | 93 | void text( ImVec2 pos, const std::string& str, ImColor clr ) 94 | { 95 | ImU32 color=clr.Value.x>-1?(ImU32)clr:config.textColor; 96 | ImGui::PushStyleColor(ImGuiCol_Text, color); 97 | ImGui::SetCursorPos(pos); 98 | ImGui::Text(str.c_str()); 99 | ImGui::PopStyleColor(); 100 | } 101 | 102 | static ImRect rectFromCircle( const ImVec2& p, float r ) 103 | { 104 | float rd = sqrt(2)*r; 105 | return ImRect( ImVec2(p.x-rd, p.y-rd), ImVec2(p.x+rd, p.y+rd)); 106 | } 107 | 108 | bool modified() { return mod; } 109 | bool modifierShift() { return ImGui::GetIO().KeyShift; } 110 | bool modifierAlt() { return ImGui::GetIO().KeyAlt; } 111 | 112 | static ImU32 getColor( bool hovered, bool selected ) 113 | { 114 | if(hovered) 115 | return config.hoverColor; 116 | if(selected) 117 | return config.selectedColor; 118 | return config.color; 119 | } 120 | 121 | static void drawDragger( ImGuiWindow*win, const ImRect& r, ImU32 clr ) 122 | { 123 | win->DrawList->AddRectFilled(r.Min, r.Max, (clr&0x00FFFFFF) | 0x77000000, config.rounding); 124 | win->DrawList->AddRect(r.Min, r.Max, clr, config.rounding, 0x0F, 2.0); 125 | } 126 | 127 | ImVec2 dragger( int index, ImVec2 pos, bool selected, float size ) 128 | { 129 | if(size < 0.) 130 | size = config.draggerSize; 131 | 132 | mod = false; 133 | 134 | std::stringstream idstr; 135 | idstr << groupId << "drag" << index; 136 | 137 | ImGuiWindow* window = ImGui::GetCurrentWindow(); 138 | if (window->SkipItems) 139 | return pos; 140 | 141 | ImGuiContext& g = *GImGui; 142 | const ImGuiStyle& style = g.Style; 143 | const ImGuiID id = window->GetID(idstr.str().c_str()); 144 | const float w = ImGui::CalcItemWidth(); 145 | 146 | bool res = false; 147 | if(g.ActiveId == id) 148 | { 149 | if (g.IO.MouseDown[0]) 150 | { 151 | pos.x = ImGui::GetMousePos().x; 152 | pos.y = ImGui::GetMousePos().y; 153 | res=mod=true; 154 | } 155 | else 156 | { 157 | ImGui::SetActiveID(0, window); 158 | } 159 | } 160 | 161 | // Specify object 162 | ImRect rect = rectFromCircle(pos, size); 163 | 164 | ImGui::ItemSize(rect); 165 | if(!ImGui::ItemAdd(rect, id)) 166 | return pos; 167 | 168 | // Check hovered 169 | const bool hovered = ImGui::IsItemHovered(ImGuiHoveredFlags_RectOnly); //rect, id); 170 | if (hovered) 171 | { 172 | ImGui::SetHoveredID(id); 173 | if(g.IO.MouseClicked[0]) 174 | { 175 | ImGui::SetActiveID(id, window); 176 | ImGui::FocusWindow(window); 177 | } 178 | } 179 | 180 | // Draw 181 | ImU32 clr = getColor(hovered, selected); 182 | drawDragger(window, rect, clr); 183 | 184 | return pos; 185 | } 186 | 187 | void highlightDragger( const ImVec2& pos, float size ) 188 | { 189 | if(size < 0.) 190 | size = config.draggerSize; 191 | 192 | ImGuiWindow* window = ImGui::GetCurrentWindow(); 193 | if (window->SkipItems) 194 | return; 195 | 196 | ImRect rect = rectFromCircle(pos, config.draggerSize); 197 | drawDragger(window, rect, config.selectedColor); 198 | //window->DrawList->AddRectFilled(rect.Min, rect.Max, config.selectedColor, config.rounding); //, rounding); 199 | } 200 | 201 | void line( const ImVec2& a, const ImVec2& b, ImColor clr ) 202 | { 203 | ImU32 color=clr.Value.x>-1?(ImU32)clr:config.lineColor; 204 | ImGui::GetCurrentWindow()->DrawList->AddLine(a, b, color); 205 | } 206 | 207 | static ImVec2 handlePos( const ImVec2& pos, float theta, float length ) 208 | { 209 | return ImVec2(pos.x + cos(theta)*length, pos.y + sin(theta)*length); 210 | } 211 | 212 | 213 | static float norm( const ImVec2& v ) 214 | { 215 | return ::sqrt( v.x*v.x + v.y*v.y ); 216 | } 217 | 218 | static float length( const ImVec2& a, const ImVec2& b ) 219 | { 220 | return ::sqrt( (b.x-a.x)*(b.x-a.x) + (b.y-a.y)*(b.y-a.y) ); 221 | } 222 | 223 | static float angleBetween( const ImVec2& a, const ImVec2& b ) 224 | { 225 | return ::atan2( a.x*b.y - a.y*b.x, a.x*b.x + a.y*b.y ); 226 | } 227 | 228 | 229 | ImVec2 lengthHandle( int index, ImVec2 thetaLen, float startTheta, const ImVec2& pos, const ImVec2& minThetaLen, const ImVec2& maxThetaLen, bool selected ) 230 | { 231 | using namespace ui; 232 | mod = false; 233 | 234 | std::stringstream idstr; 235 | idstr << groupId << "handle" << index; 236 | 237 | ImGuiWindow* window = ImGui::GetCurrentWindow(); 238 | if (window->SkipItems) 239 | return thetaLen; 240 | 241 | ImGuiContext& g = *GImGui; 242 | const ImGuiStyle& style = g.Style; 243 | const ImGuiID id = window->GetID(idstr.str().c_str()); 244 | const float w = ImGui::CalcItemWidth(); 245 | 246 | ImVec2 vbase = ImVec2(::cos(startTheta), ::sin(startTheta)); 247 | 248 | bool res = false; 249 | if(g.ActiveId == id) 250 | { 251 | if (g.IO.MouseDown[0]) 252 | { 253 | ImVec2 vmouse = ImVec2(ImGui::GetMousePos().x - pos.x, ImGui::GetMousePos().y - pos.y); 254 | thetaLen.x = (float)angleBetween(vbase, vmouse); //::atan2( ImGui::GetMousePos().y - pos.y, ImGui::GetMousePos().x - pos.x ); 255 | 256 | if(maxThetaLen.x != 0) 257 | thetaLen.x = std::max( std::min(thetaLen.x, maxThetaLen.x), minThetaLen.x); 258 | 259 | thetaLen.y = std::max( std::min( length(ImGui::GetMousePos(), pos), maxThetaLen.y ), minThetaLen.y ); 260 | res=mod=true; 261 | } 262 | else 263 | { 264 | ImGui::SetActiveID(0, window); 265 | } 266 | } 267 | 268 | // Specify object 269 | ImVec2 hp = handlePos(pos, thetaLen.x+startTheta, thetaLen.y); 270 | ImRect rect = rectFromCircle(hp, config.draggerSize*0.8); 271 | 272 | ImGui::ItemSize(rect); 273 | if(!ImGui::ItemAdd(rect, id)) 274 | return thetaLen; 275 | 276 | // Check hovered 277 | const bool hovered = ImGui::IsItemHovered(ImGuiHoveredFlags_RectOnly); //rect, id); 278 | if (hovered) 279 | { 280 | ImGui::SetHoveredID(id); 281 | if(g.IO.MouseClicked[0]) 282 | { 283 | ImGui::SetActiveID(id, window); 284 | ImGui::FocusWindow(window); 285 | } 286 | } 287 | 288 | // Draw 289 | ImU32 clr = getColor(hovered, selected); //ImU32 clr = (g.ActiveId==id)?config.hoverColor:config.color; // ImGui::GetColorU32(g.ActiveId == id ? ImGuiCol_SliderGrabActive : ImGuiCol_SliderGrab); 290 | window->DrawList->AddLine(pos, hp, config.lineColor); 291 | drawDragger(window, rect, clr); 292 | //window->DrawList->AddRectFilled(rect.Min, rect.Max, clr, config.rounding); //, rounding); 293 | 294 | return thetaLen; 295 | } 296 | 297 | float handle( int index, float ang, const ImVec2& pos, float length, float startTheta, float minTheta, float maxTheta, bool selected ) 298 | { 299 | ImVec2 thetaLen=ImVec2(ang, length); 300 | thetaLen = lengthHandle(index, thetaLen, startTheta, pos, ImVec2(minTheta, length), ImVec2(maxTheta, length), selected); 301 | return thetaLen.x; 302 | } 303 | 304 | static ImVec2 operator *( float s, const ImVec2 &v ) { return ImVec2( v.x * s, v.y * s ); } 305 | static ImVec2 operator *( const ImVec2 &v, float s ) { return ImVec2( v.x * s, v.y * s ); } 306 | static ImVec2 operator /( const ImVec2 &v, float s ) { return ImVec2( v.x / s, v.y / s ); } 307 | 308 | static ImVec2 operator +( const ImVec2 &a, const ImVec2 &b ) { return ImVec2( a.x + b.x, a.y + b.y ); } 309 | static ImVec2 operator -( const ImVec2 &a, const ImVec2 &b ) { return ImVec2( a.x - b.x, a.y - b.y ); } 310 | 311 | ImVec2 forceOrtho( ImVec2 v, ImVec2 to, bool sameScale ) 312 | { 313 | // Todo store old norm for when alt is released 314 | float nv = sqrt(v.x*v.x + v.y*v.y); 315 | float nto = sqrt(to.x*to.x + to.y*to.y); 316 | 317 | v = v/nv; 318 | to = to/nto; 319 | ImVec2 p = ImVec2(-to.y, to.x); 320 | v = (p.x*v.x + p.y*v.y) * p; 321 | v = v / sqrt(v.x*v.x + v.y*v.y); 322 | 323 | if(sameScale) 324 | v = v*nto; 325 | else 326 | v = v*nv; 327 | return v; 328 | } 329 | 330 | /// Affine transform widget 331 | ui::Trans2d affineSimple( int index, ui::Trans2d t, bool selected, float scale ) 332 | { 333 | mod = false; 334 | 335 | std::stringstream idstr; 336 | idstr << groupId << "affine" << index; 337 | 338 | ImGuiWindow* window = ImGui::GetCurrentWindow(); 339 | if (window->SkipItems) 340 | return t; 341 | 342 | bool pmod=false, xmod=false, ymod=false; 343 | ImVec2 px, py; 344 | 345 | ImGui::PushID(idstr.str().c_str()); 346 | 347 | // position 348 | t.pos = dragger(0, t.pos, selected, config.draggerSize ); pmod = modified(); 349 | 350 | bool shift = ImGui::GetIO().KeyShift; 351 | bool alt = ImGui::GetIO().KeyAlt; 352 | 353 | // x axis 354 | px = t.pos + t.x*scale; 355 | px = dragger(1, px, false, config.draggerSize*0.7 ); xmod = modified(); 356 | 357 | ImVec2 tx = (px - t.pos)/scale; 358 | float rx = norm(tx) / norm(t.x); 359 | 360 | if(xmod) 361 | { 362 | t.x = (px - t.pos)/scale; 363 | t.y = forceOrtho(t.y, t.x, ImGui::GetIO().KeyAlt); 364 | if(shift) 365 | t.y = t.y * rx; 366 | if(alt) 367 | t.y = (t.y / norm(t.y))*norm(tx); 368 | } 369 | 370 | // y axis 371 | py = t.pos + t.y*scale; 372 | py = dragger(2, py, false, config.draggerSize*0.7 ); ymod = modified(); 373 | 374 | ImVec2 ty = (py - t.pos)/scale; 375 | float ry = norm(ty) / norm(t.y); 376 | 377 | if(ymod) 378 | { 379 | t.y = (py - t.pos)/scale; 380 | t.x = forceOrtho(t.x, t.y, ImGui::GetIO().KeyAlt); 381 | 382 | if(shift) 383 | t.x = t.x * ry; 384 | if(alt) 385 | t.x = (t.x / norm(t.x))*norm(t.y); 386 | } 387 | 388 | window->DrawList->AddLine(t.pos, px, config.lineColor); 389 | window->DrawList->AddLine(t.pos, py, config.lineColor); 390 | 391 | ImGui::PopID(); 392 | 393 | mod = pmod | xmod | ymod; 394 | 395 | return t; 396 | } 397 | 398 | static Rect makeFlipRect( const ImVec2& a, const ImVec2& b ) 399 | { 400 | return Rect( ImVec2(std::min(a.x, b.x), std::min(a.y, b.y)), 401 | ImVec2(std::max(a.x, b.x), std::max(a.y, b.y)) ); 402 | } 403 | 404 | Rect selector() 405 | { 406 | mod = false; 407 | static Rect none = Rect(ImVec2(-100,-100),ImVec2(-100,-100)); 408 | 409 | static ImVec2 clickp; 410 | static bool dragging=false; 411 | if(ImGui::IsMouseClicked(0) && !hasFocus()) 412 | { 413 | clickp = ImGui::GetMousePos(); 414 | dragging = true; 415 | mod = true; 416 | } 417 | 418 | if(ImGui::IsMouseDragging() && dragging) 419 | { 420 | mod = true; 421 | return makeFlipRect(clickp, ImGui::GetMousePos()); 422 | } 423 | 424 | if(ImGui::IsMouseReleased(0)) 425 | dragging = false; 426 | 427 | return none; 428 | } 429 | 430 | ImVec2 dragDelta() 431 | { 432 | return ImGui::GetIO().MouseDelta; 433 | } 434 | 435 | int toolbar( const std::string& title, const std::string& items, int selectedItem, bool horizontal, bool showAscii ) 436 | { 437 | ImVec2 size; 438 | 439 | 440 | int flags = ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoCollapse; 441 | //ImGui::PushID(title.c_str()); 442 | //ImGui::SetNextWindowSize(size, ImGuiCond_Always); 443 | if(horizontal) 444 | ImGui::Begin(title.c_str(), NULL, flags); 445 | else 446 | ImGui::Begin(" ", NULL, flags); 447 | 448 | 449 | ImVec2 padding = ImGui::GetStyle().FramePadding; 450 | ImGuiWindow* win = ImGui::GetCurrentWindow(); 451 | if(horizontal) 452 | size = ImVec2((iconSize+padding.x)*items.length(), iconSize + win->TitleBarHeight()); 453 | else 454 | size = ImVec2(iconSize+padding.x*2,(iconSize+padding.y)*items.length()); 455 | ImGui::SetWindowSize(size, ImGuiCond_Always); 456 | 457 | ImGui::PushFont(iconFont); 458 | 459 | int sel = selectedItem; 460 | for( int i = 0; i < items.length(); i++ ) 461 | { 462 | std::stringstream ss; 463 | ss << items[i]; 464 | ImVec2 size(0,0); 465 | if(horizontal) 466 | size.x = iconSize; 467 | if( ImGui::Selectable(ss.str().c_str(),i==selectedItem, 0, size) ) 468 | { 469 | sel = i; 470 | } 471 | if( showAscii && ImGui::IsItemHovered() ) 472 | ImGui::SetTooltip("%c",items[i]); 473 | 474 | if( horizontal && i < items.length()-1 ) 475 | ImGui::SameLine(); 476 | } 477 | 478 | ImGui::PopFont(); 479 | ImGui::End(); 480 | //ImGui::PopID(); 481 | 482 | return sel; 483 | } 484 | 485 | static float frand() { return (float)rand() / RAND_MAX; } 486 | static float frand( float lo, float hi ) { return lo + frand()*(hi-lo); } 487 | 488 | void demo() 489 | { 490 | static int state = 0; 491 | static bool first = true; 492 | static std::vector pts; 493 | static std::vector selected; 494 | static float angle=IM_PI/2; 495 | static ImVec2 arcPos=ImVec2(600,400); 496 | static ui::Trans2d trans(ImVec2(200,0), // X axis 497 | ImVec2(0,100), // Y axis (expected orthogonal) 498 | ImVec2(200,500)); // position 499 | 500 | static ImVec2 p1(300,300), p2(500,300), c1(350,200), c2(450,200); 501 | 502 | if(first) 503 | { 504 | for( int i = 0; i < 7; i++ ) 505 | { 506 | pts.push_back(ImVec2(frand(50,500), frand(50,500))); 507 | } 508 | 509 | first = false; 510 | } 511 | ui::begin("demo"); 512 | ImGuiWindow *win= ImGui::GetCurrentWindow(); 513 | 514 | // Edit bezier curve 515 | p1 = ui::dragger( -100, p1); 516 | p2 = ui::dragger( -101, p2); 517 | c1 = ui::dragger( -102, c1); 518 | c2 = ui::dragger( -103, c2); 519 | ui::line(p1, c1); 520 | ui::line(p2, c2); 521 | win->DrawList->AddBezierCurve(p1, c1, c2, p2, 0xffff0000, 2.); 522 | 523 | // Edit an angle (arc test) 524 | arcPos = ui::dragger(pts.size(), /*numeric id starts at pts.size so we don't conflict with next ones*/ 525 | arcPos, false, 10.); 526 | 527 | angle = ui::handle(0, angle, arcPos, 100.0 /*handle len*/); 528 | 529 | win->DrawList->PathClear(); 530 | win->DrawList->PathArcTo(arcPos, 100.0, 0.0, angle, 100); 531 | win->DrawList->PathLineTo(arcPos); 532 | //win->DrawList->PathLineTo(ui::handlePos(arcPos, angle, 100.)); 533 | 534 | win->DrawList->PathFillConvex(0x66ff0000); 535 | 536 | // Affine transform test 537 | trans = ui::affineSimple(0, trans); 538 | 539 | win->DrawList->PathClear(); 540 | win->DrawList->PathLineTo(trans.pos); 541 | win->DrawList->PathLineTo(trans.pos+trans.x); 542 | win->DrawList->PathLineTo(trans.pos+trans.x+trans.y); 543 | win->DrawList->PathLineTo(trans.pos+trans.y); 544 | win->DrawList->PathFillConvex(0x66ff0000); 545 | 546 | // Edit polyline 547 | bool dragging = false; 548 | for( int i = 0; i < pts.size(); i++ ) 549 | { 550 | pts[i] = ui::dragger(i, pts[i]); 551 | if(ui::modified()) 552 | dragging = true; 553 | } 554 | 555 | // do selection 556 | if( state == 0 ) 557 | { 558 | ui::Rect r = ui::selector(); 559 | bool selecting = ui::modified(); 560 | if(selecting) 561 | { 562 | win->DrawList->AddRectFilled(r.min, r.max, 0x44555555); 563 | 564 | selected.clear(); 565 | for( int i = 0; i < pts.size(); i++ ) 566 | { 567 | if( r.contains(pts[i])) 568 | selected.push_back(i); 569 | } 570 | } 571 | 572 | // highlight selected 573 | for( int i = 0; i < selected.size(); i++ ) 574 | { 575 | ui::highlightDragger(pts[selected[i]]); 576 | } 577 | 578 | // move selected if dragging 579 | if(dragging && selected.size() && !selecting) 580 | { 581 | for( int i = 0; i < selected.size(); i++ ) 582 | { 583 | ImVec2 d = ui::dragDelta(); 584 | pts[selected[i]] = pts[selected[i]] + d; 585 | } 586 | } 587 | } 588 | else if(state==1) 589 | { 590 | if(ImGui::IsMouseClicked(0) && !ui::hasFocus()) 591 | { 592 | pts.push_back(ImGui::GetMousePos()); 593 | } 594 | } 595 | 596 | // Draw 597 | for( int i = 0; i < pts.size()-1; i++ ) 598 | { 599 | win->DrawList->AddLine(pts[i], pts[i+1], 0xff555555); 600 | } 601 | 602 | // A toolbar can be used to switch states, 603 | // the letters in the second parameter correspond with the ascii codes 604 | // for symbols in the loaded font (iconFont), which is set when calling ui::init 605 | state = ui::toolbar("state","ab",state); 606 | 607 | // This shows characters corresponding to each icon in the font 608 | static int foo = 0; 609 | foo = ui::toolbar("Default icons, hover to view the corresponding character","abcdefg123456789",foo, true, true); 610 | 611 | ui::end(); 612 | 613 | 614 | } 615 | 616 | size_t gfx_font_size=9464; 617 | unsigned char gfx_font[] = 618 | {0x00, 0x01, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x80, 0x00, 0x03, 619 | 0x00, 0x70, 0x47, 0x53, 0x55, 0x42, 0xB0, 0xFE, 0xB3, 0xED, 620 | 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x42, 0x4F, 0x53, 621 | 0x2F, 0x32, 0x56, 0x50, 0x61, 0x68, 0x00, 0x00, 0x01, 0x40, 622 | 0x00, 0x00, 0x00, 0x56, 0x63, 0x6D, 0x61, 0x70, 0x2D, 0xF2, 623 | 0x1F, 0x15, 0x00, 0x00, 0x01, 0x98, 0x00, 0x00, 0x02, 0x4A, 624 | 0x63, 0x76, 0x74, 0x20, 0x0C, 0x58, 0x05, 0x4A, 0x00, 0x00, 625 | 0x18, 0xD0, 0x00, 0x00, 0x00, 0x30, 0x66, 0x70, 0x67, 0x6D, 626 | 0x8A, 0x91, 0x90, 0x59, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 627 | 0x0B, 0x70, 0x67, 0x61, 0x73, 0x70, 0x00, 0x00, 0x00, 0x10, 628 | 0x00, 0x00, 0x18, 0xC8, 0x00, 0x00, 0x00, 0x08, 0x67, 0x6C, 629 | 0x79, 0x66, 0xDA, 0x7B, 0x80, 0x51, 0x00, 0x00, 0x03, 0xE4, 630 | 0x00, 0x00, 0x10, 0x6A, 0x68, 0x65, 0x61, 0x64, 0x0A, 0x54, 631 | 0x0E, 0x6B, 0x00, 0x00, 0x14, 0x50, 0x00, 0x00, 0x00, 0x36, 632 | 0x68, 0x68, 0x65, 0x61, 0x07, 0x81, 0x03, 0xA9, 0x00, 0x00, 633 | 0x14, 0x88, 0x00, 0x00, 0x00, 0x24, 0x68, 0x6D, 0x74, 0x78, 634 | 0x3A, 0x96, 0xFF, 0xFA, 0x00, 0x00, 0x14, 0xAC, 0x00, 0x00, 635 | 0x00, 0x44, 0x6C, 0x6F, 0x63, 0x61, 0x16, 0xF2, 0x1B, 0x99, 636 | 0x00, 0x00, 0x14, 0xF0, 0x00, 0x00, 0x00, 0x24, 0x6D, 0x61, 637 | 0x78, 0x70, 0x01, 0x55, 0x0C, 0x94, 0x00, 0x00, 0x15, 0x14, 638 | 0x00, 0x00, 0x00, 0x20, 0x6E, 0x61, 0x6D, 0x65, 0x17, 0xED, 639 | 0x88, 0x3D, 0x00, 0x00, 0x15, 0x34, 0x00, 0x00, 0x02, 0xB5, 640 | 0x70, 0x6F, 0x73, 0x74, 0x5E, 0x21, 0x67, 0xDD, 0x00, 0x00, 641 | 0x17, 0xEC, 0x00, 0x00, 0x00, 0xDC, 0x70, 0x72, 0x65, 0x70, 642 | 0xE9, 0x45, 0x42, 0xC0, 0x00, 0x00, 0x24, 0x70, 0x00, 0x00, 643 | 0x00, 0x86, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x1E, 644 | 0x00, 0x2C, 0x00, 0x01, 0x44, 0x46, 0x4C, 0x54, 0x00, 0x08, 645 | 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 646 | 0x00, 0x00, 0x00, 0x01, 0x6C, 0x69, 0x67, 0x61, 0x00, 0x08, 647 | 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x04, 648 | 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 649 | 0x00, 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 650 | 0x00, 0x01, 0x03, 0x72, 0x01, 0x90, 0x00, 0x05, 0x00, 0x00, 651 | 0x02, 0x7A, 0x02, 0xBC, 0x00, 0x00, 0x00, 0x8C, 0x02, 0x7A, 652 | 0x02, 0xBC, 0x00, 0x00, 0x01, 0xE0, 0x00, 0x31, 0x01, 0x02, 653 | 0x00, 0x00, 0x02, 0x00, 0x05, 0x03, 0x00, 0x00, 0x00, 0x00, 654 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 655 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50, 0x66, 656 | 0x45, 0x64, 0x00, 0x40, 0x00, 0x31, 0x00, 0x67, 0x03, 0x52, 657 | 0xFF, 0x6A, 0x00, 0x5A, 0x03, 0x52, 0x00, 0x96, 0x00, 0x00, 658 | 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 659 | 0x00, 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x2C, 660 | 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x7A, 0x00, 0x01, 661 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x00, 0x03, 0x00, 0x01, 662 | 0x00, 0x00, 0x00, 0x2C, 0x00, 0x03, 0x00, 0x0A, 0x00, 0x00, 663 | 0x01, 0x7A, 0x00, 0x04, 0x00, 0x48, 0x00, 0x00, 0x00, 0x06, 664 | 0x00, 0x04, 0x00, 0x01, 0x00, 0x02, 0x00, 0x39, 0x00, 0x67, 665 | 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x31, 0x00, 0x61, 0xFF, 0xFF, 666 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x06, 0x00, 0x16, 667 | 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x03, 0x00, 0x04, 668 | 0x00, 0x05, 0x00, 0x06, 0x00, 0x07, 0x00, 0x08, 0x00, 0x09, 669 | 0x00, 0x0A, 0x00, 0x0B, 0x00, 0x0C, 0x00, 0x0D, 0x00, 0x0E, 670 | 0x00, 0x0F, 0x00, 0x10, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 671 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 672 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 673 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 674 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 675 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 676 | 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x00, 0x00, 677 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 678 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 679 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 680 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x0B, 0x0C, 681 | 0x0D, 0x0E, 0x0F, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 682 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 683 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 684 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 685 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 686 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 687 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 688 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 689 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 690 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 691 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 692 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 693 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 694 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 695 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 696 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 697 | 0x00, 0x00, 0x00, 0xD0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 698 | 0x00, 0x10, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x31, 699 | 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 700 | 0x00, 0x32, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x33, 701 | 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 702 | 0x00, 0x34, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x04, 703 | 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 704 | 0x00, 0x05, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x36, 705 | 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 706 | 0x00, 0x37, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x38, 707 | 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 708 | 0x00, 0x39, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x09, 709 | 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 710 | 0x00, 0x0A, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x62, 711 | 0x00, 0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 712 | 0x00, 0x63, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x64, 713 | 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 714 | 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x0E, 715 | 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 716 | 0x00, 0x0F, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, 0x67, 717 | 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 718 | 0xFF, 0xAA, 0x03, 0x11, 0x03, 0x13, 0x00, 0x0B, 0x00, 0x06, 719 | 0xB3, 0x07, 0x02, 0x01, 0x2D, 0x2B, 0x09, 0x01, 0x06, 0x26, 720 | 0x35, 0x11, 0x34, 0x36, 0x17, 0x01, 0x16, 0x14, 0x03, 0x04, 721 | 0xFD, 0x1B, 0x0D, 0x12, 0x12, 0x0D, 0x02, 0xE5, 0x0D, 0x01, 722 | 0x4D, 0xFE, 0x64, 0x07, 0x0A, 0x0F, 0x03, 0x36, 0x0E, 0x0C, 723 | 0x08, 0xFE, 0x64, 0x07, 0x14, 0x00, 0x00, 0x01, 0x00, 0x00, 724 | 0xFF, 0xB1, 0x03, 0x5A, 0x03, 0x0B, 0x00, 0x0F, 0x00, 0x42, 725 | 0xB6, 0x08, 0x00, 0x02, 0x00, 0x01, 0x01, 0x47, 0x4B, 0xB0, 726 | 0x0A, 0x50, 0x58, 0x40, 0x0B, 0x00, 0x01, 0x01, 0x0C, 0x48, 727 | 0x00, 0x00, 0x00, 0x0E, 0x00, 0x49, 0x1B, 0x4B, 0xB0, 0x0D, 728 | 0x50, 0x58, 0x40, 0x0B, 0x00, 0x01, 0x01, 0x0D, 0x48, 0x00, 729 | 0x00, 0x00, 0x0E, 0x00, 0x49, 0x1B, 0x40, 0x09, 0x00, 0x01, 730 | 0x00, 0x01, 0x6F, 0x00, 0x00, 0x00, 0x66, 0x59, 0x59, 0xB4, 731 | 0x35, 0x33, 0x02, 0x05, 0x16, 0x2B, 0x01, 0x11, 0x14, 0x06, 732 | 0x23, 0x21, 0x22, 0x26, 0x27, 0x11, 0x34, 0x36, 0x33, 0x21, 733 | 0x32, 0x16, 0x03, 0x59, 0x14, 0x10, 0xFC, 0xEF, 0x0F, 0x14, 734 | 0x01, 0x16, 0x0E, 0x03, 0x11, 0x0F, 0x16, 0x02, 0xE7, 0xFC, 735 | 0xEE, 0x0E, 0x16, 0x16, 0x0E, 0x03, 0x12, 0x0E, 0x16, 0x16, 736 | 0x00, 0x02, 0x00, 0x00, 0xFF, 0xB1, 0x03, 0x5A, 0x03, 0x0B, 737 | 0x00, 0x0F, 0x00, 0x1F, 0x00, 0x4D, 0x40, 0x09, 0x18, 0x10, 738 | 0x08, 0x00, 0x04, 0x00, 0x01, 0x01, 0x47, 0x4B, 0xB0, 0x0A, 739 | 0x50, 0x58, 0x40, 0x0D, 0x03, 0x01, 0x01, 0x01, 0x0C, 0x48, 740 | 0x02, 0x01, 0x00, 0x00, 0x0E, 0x00, 0x49, 0x1B, 0x4B, 0xB0, 741 | 0x0D, 0x50, 0x58, 0x40, 0x0D, 0x03, 0x01, 0x01, 0x01, 0x0D, 742 | 0x48, 0x02, 0x01, 0x00, 0x00, 0x0E, 0x00, 0x49, 0x1B, 0x40, 743 | 0x0B, 0x03, 0x01, 0x01, 0x00, 0x01, 0x6F, 0x02, 0x01, 0x00, 744 | 0x00, 0x66, 0x59, 0x59, 0xB6, 0x35, 0x35, 0x35, 0x33, 0x04, 745 | 0x05, 0x18, 0x2B, 0x01, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 746 | 0x26, 0x27, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x05, 747 | 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 0x26, 0x27, 0x11, 0x34, 748 | 0x36, 0x33, 0x21, 0x32, 0x16, 0x03, 0x59, 0x14, 0x10, 0xFE, 749 | 0xE3, 0x0F, 0x14, 0x01, 0x16, 0x0E, 0x01, 0x1D, 0x0F, 0x16, 750 | 0xFE, 0x0B, 0x14, 0x10, 0xFE, 0xE3, 0x0F, 0x14, 0x01, 0x16, 751 | 0x0E, 0x01, 0x1D, 0x0F, 0x16, 0x02, 0xE7, 0xFC, 0xEE, 0x0E, 752 | 0x16, 0x16, 0x0E, 0x03, 0x12, 0x0E, 0x16, 0x16, 0x0E, 0xFC, 753 | 0xEE, 0x0E, 0x16, 0x16, 0x0E, 0x03, 0x12, 0x0E, 0x16, 0x16, 754 | 0x00, 0x01, 0xFF, 0xFF, 0xFF, 0xAE, 0x02, 0x3C, 0x03, 0x0F, 755 | 0x00, 0x1D, 0x00, 0x45, 0x40, 0x09, 0x1B, 0x1A, 0x12, 0x0A, 756 | 0x04, 0x01, 0x00, 0x01, 0x47, 0x4B, 0xB0, 0x0A, 0x50, 0x58, 757 | 0x40, 0x0B, 0x00, 0x00, 0x00, 0x0C, 0x48, 0x00, 0x01, 0x01, 758 | 0x0E, 0x01, 0x49, 0x1B, 0x4B, 0xB0, 0x0D, 0x50, 0x58, 0x40, 759 | 0x0B, 0x00, 0x00, 0x00, 0x0D, 0x48, 0x00, 0x01, 0x01, 0x0E, 760 | 0x01, 0x49, 0x1B, 0x40, 0x09, 0x00, 0x00, 0x01, 0x00, 0x6F, 761 | 0x00, 0x01, 0x01, 0x66, 0x59, 0x59, 0xB4, 0x35, 0x3D, 0x02, 762 | 0x05, 0x16, 0x2B, 0x17, 0x06, 0x26, 0x37, 0x11, 0x34, 0x36, 763 | 0x17, 0x01, 0x16, 0x17, 0x11, 0x34, 0x36, 0x3B, 0x01, 0x32, 764 | 0x16, 0x07, 0x11, 0x14, 0x06, 0x2B, 0x01, 0x22, 0x26, 0x37, 765 | 0x11, 0x06, 0x07, 0x19, 0x0A, 0x10, 0x01, 0x0E, 0x0B, 0x01, 766 | 0x8C, 0x05, 0x03, 0x14, 0x0F, 0x48, 0x0E, 0x16, 0x01, 0x14, 767 | 0x0F, 0x48, 0x0E, 0x16, 0x01, 0x03, 0x05, 0x47, 0x0B, 0x06, 768 | 0x0F, 0x03, 0x36, 0x0E, 0x08, 0x0C, 0xFE, 0x74, 0x04, 0x06, 769 | 0x01, 0x7A, 0x0E, 0x16, 0x16, 0x0E, 0xFC, 0xEE, 0x0E, 0x16, 770 | 0x16, 0x0E, 0x01, 0x7B, 0x06, 0x05, 0x00, 0x00, 0x00, 0x01, 771 | 0xFF, 0xFF, 0xFF, 0xAE, 0x03, 0xE8, 0x03, 0x0F, 0x00, 0x2B, 772 | 0x00, 0x49, 0x40, 0x0B, 0x29, 0x22, 0x21, 0x19, 0x11, 0x0A, 773 | 0x06, 0x01, 0x00, 0x01, 0x47, 0x4B, 0xB0, 0x0A, 0x50, 0x58, 774 | 0x40, 0x0B, 0x00, 0x00, 0x00, 0x0C, 0x48, 0x00, 0x01, 0x01, 775 | 0x0E, 0x01, 0x49, 0x1B, 0x4B, 0xB0, 0x0D, 0x50, 0x58, 0x40, 776 | 0x0B, 0x00, 0x00, 0x00, 0x0D, 0x48, 0x00, 0x01, 0x01, 0x0E, 777 | 0x01, 0x49, 0x1B, 0x40, 0x09, 0x00, 0x00, 0x01, 0x00, 0x6F, 778 | 0x00, 0x01, 0x01, 0x66, 0x59, 0x59, 0xB6, 0x1F, 0x1C, 0x17, 779 | 0x14, 0x02, 0x05, 0x14, 0x2B, 0x17, 0x06, 0x26, 0x37, 0x11, 780 | 0x34, 0x36, 0x17, 0x01, 0x16, 0x17, 0x11, 0x34, 0x36, 0x17, 781 | 0x01, 0x16, 0x17, 0x11, 0x34, 0x36, 0x3B, 0x01, 0x32, 0x16, 782 | 0x17, 0x11, 0x14, 0x06, 0x2B, 0x01, 0x22, 0x26, 0x27, 0x11, 783 | 0x06, 0x07, 0x01, 0x06, 0x26, 0x35, 0x11, 0x06, 0x07, 0x19, 784 | 0x0A, 0x10, 0x01, 0x0E, 0x0B, 0x01, 0x8C, 0x05, 0x03, 0x0E, 785 | 0x0B, 0x01, 0x8C, 0x04, 0x03, 0x16, 0x0E, 0x47, 0x0F, 0x14, 786 | 0x01, 0x16, 0x0E, 0x47, 0x0F, 0x14, 0x01, 0x03, 0x04, 0xFE, 787 | 0x74, 0x0B, 0x0E, 0x03, 0x05, 0x47, 0x0B, 0x06, 0x0F, 0x03, 788 | 0x36, 0x0E, 0x08, 0x0C, 0xFE, 0x74, 0x04, 0x06, 0x01, 0x8C, 789 | 0x0E, 0x08, 0x0C, 0xFE, 0x74, 0x04, 0x06, 0x01, 0x7A, 0x0E, 790 | 0x16, 0x16, 0x0E, 0xFC, 0xEE, 0x0E, 0x16, 0x16, 0x0E, 0x01, 791 | 0x7B, 0x06, 0x05, 0xFE, 0x74, 0x0B, 0x06, 0x0F, 0x01, 0x8D, 792 | 0x06, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0xFF, 0xAD, 793 | 0x02, 0x3B, 0x03, 0x0E, 0x00, 0x1D, 0x00, 0x43, 0xB7, 0x1B, 794 | 0x1A, 0x12, 0x03, 0x00, 0x01, 0x01, 0x47, 0x4B, 0xB0, 0x0A, 795 | 0x50, 0x58, 0x40, 0x0B, 0x00, 0x01, 0x01, 0x0C, 0x48, 0x00, 796 | 0x00, 0x00, 0x0E, 0x00, 0x49, 0x1B, 0x4B, 0xB0, 0x0D, 0x50, 797 | 0x58, 0x40, 0x0B, 0x00, 0x01, 0x01, 0x0D, 0x48, 0x00, 0x00, 798 | 0x00, 0x0E, 0x00, 0x49, 0x1B, 0x40, 0x09, 0x00, 0x01, 0x00, 799 | 0x01, 0x6F, 0x00, 0x00, 0x00, 0x66, 0x59, 0x59, 0xB4, 0x35, 800 | 0x3D, 0x02, 0x05, 0x16, 0x2B, 0x01, 0x36, 0x16, 0x15, 0x11, 801 | 0x14, 0x06, 0x27, 0x01, 0x26, 0x27, 0x11, 0x14, 0x06, 0x2B, 802 | 0x01, 0x22, 0x26, 0x27, 0x11, 0x34, 0x36, 0x3B, 0x01, 0x32, 803 | 0x16, 0x17, 0x11, 0x36, 0x37, 0x02, 0x22, 0x0B, 0x0E, 0x0E, 804 | 0x0B, 0xFE, 0x74, 0x05, 0x02, 0x16, 0x0E, 0x47, 0x0F, 0x14, 805 | 0x01, 0x16, 0x0E, 0x47, 0x0F, 0x14, 0x01, 0x02, 0x05, 0x03, 806 | 0x03, 0x0B, 0x06, 0x0F, 0xFC, 0xCA, 0x0E, 0x08, 0x0C, 0x01, 807 | 0x8C, 0x05, 0x06, 0xFE, 0x85, 0x0E, 0x16, 0x16, 0x0E, 0x03, 808 | 0x12, 0x0E, 0x16, 0x16, 0x0E, 0xFE, 0x86, 0x06, 0x04, 0x00, 809 | 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0xFF, 0xAD, 0x03, 0xE9, 810 | 0x03, 0x0E, 0x00, 0x2B, 0x00, 0x48, 0x40, 0x0A, 0x29, 0x22, 811 | 0x21, 0x19, 0x0A, 0x05, 0x00, 0x01, 0x01, 0x47, 0x4B, 0xB0, 812 | 0x0A, 0x50, 0x58, 0x40, 0x0B, 0x00, 0x01, 0x01, 0x0C, 0x48, 813 | 0x00, 0x00, 0x00, 0x0E, 0x00, 0x49, 0x1B, 0x4B, 0xB0, 0x0D, 814 | 0x50, 0x58, 0x40, 0x0B, 0x00, 0x01, 0x01, 0x0D, 0x48, 0x00, 815 | 0x00, 0x00, 0x0E, 0x00, 0x49, 0x1B, 0x40, 0x09, 0x00, 0x01, 816 | 0x00, 0x01, 0x6F, 0x00, 0x00, 0x00, 0x66, 0x59, 0x59, 0xB6, 817 | 0x1F, 0x1C, 0x17, 0x14, 0x02, 0x05, 0x14, 0x2B, 0x01, 0x36, 818 | 0x16, 0x07, 0x11, 0x14, 0x06, 0x27, 0x01, 0x26, 0x27, 0x11, 819 | 0x14, 0x06, 0x27, 0x01, 0x26, 0x27, 0x11, 0x14, 0x06, 0x2B, 820 | 0x01, 0x22, 0x26, 0x27, 0x11, 0x34, 0x36, 0x3B, 0x01, 0x32, 821 | 0x16, 0x17, 0x11, 0x36, 0x37, 0x01, 0x36, 0x16, 0x15, 0x11, 822 | 0x36, 0x37, 0x03, 0xCF, 0x0A, 0x10, 0x01, 0x0E, 0x0B, 0xFE, 823 | 0x74, 0x05, 0x03, 0x0E, 0x0B, 0xFE, 0x74, 0x05, 0x02, 0x16, 824 | 0x0E, 0x47, 0x0F, 0x14, 0x01, 0x16, 0x0E, 0x47, 0x0F, 0x14, 825 | 0x01, 0x02, 0x05, 0x01, 0x8C, 0x0B, 0x0E, 0x03, 0x05, 0x03, 826 | 0x03, 0x0B, 0x06, 0x0F, 0xFC, 0xCA, 0x0E, 0x08, 0x0C, 0x01, 827 | 0x8C, 0x05, 0x06, 0xFE, 0x73, 0x0E, 0x08, 0x0C, 0x01, 0x8C, 828 | 0x05, 0x06, 0xFE, 0x85, 0x0E, 0x16, 0x16, 0x0E, 0x03, 0x12, 829 | 0x0E, 0x16, 0x16, 0x0E, 0xFE, 0x86, 0x06, 0x04, 0x01, 0x8C, 830 | 0x0B, 0x06, 0x0F, 0xFE, 0x74, 0x06, 0x04, 0x00, 0x00, 0x01, 831 | 0xFF, 0xFF, 0xFF, 0xAE, 0x03, 0x5C, 0x03, 0x0F, 0x00, 0x19, 832 | 0x00, 0x06, 0xB3, 0x06, 0x01, 0x01, 0x2D, 0x2B, 0x17, 0x06, 833 | 0x26, 0x37, 0x11, 0x34, 0x36, 0x17, 0x01, 0x16, 0x17, 0x11, 834 | 0x34, 0x36, 0x17, 0x01, 0x16, 0x14, 0x07, 0x01, 0x06, 0x26, 835 | 0x35, 0x11, 0x06, 0x07, 0x19, 0x0A, 0x10, 0x01, 0x0E, 0x0B, 836 | 0x01, 0x8C, 0x05, 0x03, 0x0E, 0x0B, 0x01, 0x8C, 0x0A, 0x0A, 837 | 0xFE, 0x74, 0x0B, 0x0E, 0x03, 0x05, 0x47, 0x0B, 0x06, 0x0F, 838 | 0x03, 0x36, 0x0E, 0x08, 0x0C, 0xFE, 0x74, 0x04, 0x06, 0x01, 839 | 0x8C, 0x0E, 0x08, 0x0C, 0xFE, 0x74, 0x0A, 0x1E, 0x0A, 0xFE, 840 | 0x74, 0x0B, 0x06, 0x0F, 0x01, 0x8D, 0x06, 0x05, 0x00, 0x01, 841 | 0x00, 0x00, 0xFF, 0xAD, 0x03, 0xA1, 0x03, 0x0E, 0x00, 0x19, 842 | 0x00, 0x06, 0xB3, 0x06, 0x01, 0x01, 0x2D, 0x2B, 0x01, 0x36, 843 | 0x16, 0x17, 0x11, 0x14, 0x06, 0x27, 0x01, 0x26, 0x27, 0x11, 844 | 0x14, 0x06, 0x27, 0x01, 0x26, 0x34, 0x37, 0x01, 0x36, 0x16, 845 | 0x15, 0x11, 0x36, 0x37, 0x03, 0x87, 0x0B, 0x0E, 0x01, 0x10, 846 | 0x0A, 0xFE, 0x74, 0x04, 0x03, 0x0E, 0x0B, 0xFE, 0x74, 0x0B, 847 | 0x0B, 0x01, 0x8C, 0x0B, 0x0E, 0x03, 0x04, 0x03, 0x03, 0x0B, 848 | 0x06, 0x0F, 0xFC, 0xCA, 0x0E, 0x08, 0x0C, 0x01, 0x8C, 0x05, 849 | 0x06, 0xFE, 0x73, 0x0E, 0x08, 0x0C, 0x01, 0x8C, 0x0B, 0x1C, 850 | 0x0B, 0x01, 0x8C, 0x0B, 0x06, 0x0F, 0xFE, 0x74, 0x06, 0x04, 851 | 0x00, 0x00, 0x00, 0x01, 0xFF, 0xFD, 0xFF, 0xB1, 0x03, 0x13, 852 | 0x02, 0xC3, 0x00, 0x16, 0x00, 0x38, 0xB5, 0x08, 0x01, 0x00, 853 | 0x01, 0x01, 0x47, 0x4B, 0xB0, 0x0D, 0x50, 0x58, 0x40, 0x10, 854 | 0x00, 0x02, 0x01, 0x02, 0x6F, 0x00, 0x01, 0x00, 0x01, 0x6F, 855 | 0x00, 0x00, 0x00, 0x0E, 0x00, 0x49, 0x1B, 0x40, 0x0E, 0x00, 856 | 0x02, 0x01, 0x02, 0x6F, 0x00, 0x01, 0x00, 0x01, 0x6F, 0x00, 857 | 0x00, 0x00, 0x66, 0x59, 0xB5, 0x26, 0x26, 0x12, 0x03, 0x05, 858 | 0x17, 0x2B, 0x09, 0x01, 0x06, 0x23, 0x22, 0x27, 0x2E, 0x01, 859 | 0x27, 0x11, 0x21, 0x22, 0x2E, 0x01, 0x36, 0x37, 0x01, 0x36, 860 | 0x33, 0x32, 0x17, 0x1E, 0x01, 0x03, 0x0E, 0xFE, 0x9B, 0x0A, 861 | 0x16, 0x03, 0x05, 0x0D, 0x0E, 0x01, 0xFE, 0xBF, 0x0D, 0x12, 862 | 0x08, 0x0C, 0x0B, 0x02, 0xCA, 0x07, 0x09, 0x0F, 0x0A, 0x08, 863 | 0x04, 0x02, 0x8F, 0xFD, 0x36, 0x14, 0x01, 0x03, 0x14, 0x0C, 864 | 0x01, 0x42, 0x0E, 0x1A, 0x14, 0x07, 0x01, 0x65, 0x04, 0x0A, 865 | 0x08, 0x18, 0x00, 0x04, 0x00, 0x00, 0xFF, 0xB1, 0x03, 0x4D, 866 | 0x02, 0xFF, 0x00, 0x06, 0x00, 0x14, 0x00, 0x19, 0x00, 0x24, 867 | 0x00, 0xE4, 0x40, 0x17, 0x1E, 0x01, 0x02, 0x05, 0x1D, 0x16, 868 | 0x0E, 0x07, 0x04, 0x03, 0x02, 0x19, 0x03, 0x02, 0x03, 0x00, 869 | 0x03, 0x01, 0x01, 0x01, 0x00, 0x04, 0x47, 0x4B, 0xB0, 0x0A, 870 | 0x50, 0x58, 0x40, 0x26, 0x00, 0x02, 0x05, 0x03, 0x05, 0x02, 871 | 0x03, 0x6D, 0x00, 0x03, 0x00, 0x05, 0x03, 0x00, 0x6B, 0x00, 872 | 0x00, 0x01, 0x01, 0x00, 0x63, 0x00, 0x05, 0x05, 0x0C, 0x48, 873 | 0x06, 0x01, 0x01, 0x01, 0x04, 0x57, 0x00, 0x04, 0x04, 0x0E, 874 | 0x04, 0x49, 0x1B, 0x4B, 0xB0, 0x0D, 0x50, 0x58, 0x40, 0x26, 875 | 0x00, 0x02, 0x05, 0x03, 0x05, 0x02, 0x03, 0x6D, 0x00, 0x03, 876 | 0x00, 0x05, 0x03, 0x00, 0x6B, 0x00, 0x00, 0x01, 0x01, 0x00, 877 | 0x63, 0x00, 0x05, 0x05, 0x0D, 0x48, 0x06, 0x01, 0x01, 0x01, 878 | 0x04, 0x57, 0x00, 0x04, 0x04, 0x0E, 0x04, 0x49, 0x1B, 0x4B, 879 | 0xB0, 0x12, 0x50, 0x58, 0x40, 0x27, 0x00, 0x05, 0x02, 0x05, 880 | 0x6F, 0x00, 0x02, 0x03, 0x02, 0x6F, 0x00, 0x03, 0x00, 0x03, 881 | 0x6F, 0x00, 0x00, 0x01, 0x01, 0x00, 0x63, 0x06, 0x01, 0x01, 882 | 0x04, 0x04, 0x01, 0x52, 0x06, 0x01, 0x01, 0x01, 0x04, 0x57, 883 | 0x00, 0x04, 0x01, 0x04, 0x4B, 0x1B, 0x40, 0x26, 0x00, 0x05, 884 | 0x02, 0x05, 0x6F, 0x00, 0x02, 0x03, 0x02, 0x6F, 0x00, 0x03, 885 | 0x00, 0x03, 0x6F, 0x00, 0x00, 0x01, 0x00, 0x6F, 0x06, 0x01, 886 | 0x01, 0x04, 0x04, 0x01, 0x52, 0x06, 0x01, 0x01, 0x01, 0x04, 887 | 0x57, 0x00, 0x04, 0x01, 0x04, 0x4B, 0x59, 0x59, 0x59, 0x40, 888 | 0x12, 0x00, 0x00, 0x21, 0x20, 0x18, 0x17, 0x10, 0x0F, 0x09, 889 | 0x08, 0x00, 0x06, 0x00, 0x06, 0x14, 0x07, 0x05, 0x15, 0x2B, 890 | 0x17, 0x37, 0x27, 0x07, 0x15, 0x33, 0x15, 0x01, 0x34, 0x23, 891 | 0x22, 0x07, 0x01, 0x06, 0x15, 0x14, 0x33, 0x32, 0x37, 0x01, 892 | 0x36, 0x27, 0x17, 0x01, 0x23, 0x35, 0x01, 0x14, 0x0F, 0x01, 893 | 0x27, 0x37, 0x36, 0x32, 0x1F, 0x01, 0x16, 0xCB, 0x32, 0x83, 894 | 0x33, 0x48, 0x01, 0x5F, 0x0C, 0x05, 0x04, 0xFE, 0xD1, 0x04, 895 | 0x0D, 0x05, 0x04, 0x01, 0x2F, 0x03, 0x1E, 0xE8, 0xFE, 0x30, 896 | 0xE8, 0x03, 0x4D, 0x14, 0x5D, 0xE8, 0x5D, 0x14, 0x3B, 0x16, 897 | 0x83, 0x14, 0x07, 0x33, 0x83, 0x33, 0x3C, 0x47, 0x02, 0x06, 898 | 0x0C, 0x04, 0xFE, 0xD2, 0x04, 0x06, 0x0C, 0x04, 0x01, 0x2E, 899 | 0x04, 0x71, 0xE8, 0xFE, 0x2F, 0xE9, 0x01, 0x9A, 0x1D, 0x15, 900 | 0x5D, 0xE9, 0x5C, 0x15, 0x15, 0x83, 0x16, 0x00, 0x00, 0x01, 901 | 0x00, 0x00, 0xFF, 0xB1, 0x03, 0x5A, 0x03, 0x0B, 0x00, 0x43, 902 | 0x00, 0x74, 0x40, 0x15, 0x3C, 0x34, 0x32, 0x22, 0x04, 0x02, 903 | 0x03, 0x33, 0x21, 0x20, 0x1B, 0x12, 0x11, 0x10, 0x02, 0x01, 904 | 0x09, 0x00, 0x02, 0x02, 0x47, 0x4B, 0xB0, 0x0A, 0x50, 0x58, 905 | 0x40, 0x16, 0x05, 0x01, 0x02, 0x03, 0x00, 0x03, 0x02, 0x00, 906 | 0x6D, 0x04, 0x01, 0x03, 0x03, 0x0C, 0x48, 0x01, 0x01, 0x00, 907 | 0x00, 0x0E, 0x00, 0x49, 0x1B, 0x4B, 0xB0, 0x0D, 0x50, 0x58, 908 | 0x40, 0x16, 0x05, 0x01, 0x02, 0x03, 0x00, 0x03, 0x02, 0x00, 909 | 0x6D, 0x04, 0x01, 0x03, 0x03, 0x0D, 0x48, 0x01, 0x01, 0x00, 910 | 0x00, 0x0E, 0x00, 0x49, 0x1B, 0x40, 0x11, 0x04, 0x01, 0x03, 911 | 0x02, 0x03, 0x6F, 0x05, 0x01, 0x02, 0x00, 0x02, 0x6F, 0x01, 912 | 0x01, 0x00, 0x00, 0x66, 0x59, 0x59, 0x40, 0x09, 0x26, 0x38, 913 | 0x37, 0x1B, 0x3A, 0x39, 0x06, 0x05, 0x1A, 0x2B, 0x01, 0x07, 914 | 0x17, 0x37, 0x36, 0x16, 0x1D, 0x01, 0x14, 0x06, 0x2B, 0x01, 915 | 0x22, 0x27, 0x26, 0x3F, 0x01, 0x27, 0x07, 0x17, 0x16, 0x07, 916 | 0x06, 0x2B, 0x01, 0x22, 0x26, 0x27, 0x35, 0x34, 0x36, 0x1F, 917 | 0x01, 0x37, 0x27, 0x07, 0x06, 0x23, 0x22, 0x27, 0x26, 0x3D, 918 | 0x01, 0x34, 0x36, 0x3B, 0x01, 0x32, 0x16, 0x0F, 0x01, 0x17, 919 | 0x37, 0x27, 0x26, 0x36, 0x3B, 0x01, 0x32, 0x16, 0x07, 0x15, 920 | 0x14, 0x07, 0x06, 0x23, 0x22, 0x27, 0x02, 0xCC, 0xC6, 0xC6, 921 | 0x50, 0x10, 0x2D, 0x14, 0x10, 0xFA, 0x17, 0x09, 0x0A, 0x11, 922 | 0x51, 0xC6, 0xC6, 0x50, 0x11, 0x09, 0x0A, 0x17, 0xFA, 0x0F, 923 | 0x14, 0x01, 0x2C, 0x11, 0x50, 0xC6, 0xC6, 0x50, 0x0B, 0x0E, 924 | 0x07, 0x07, 0x16, 0x16, 0x0E, 0xFA, 0x17, 0x13, 0x11, 0x50, 925 | 0xC6, 0xC6, 0x51, 0x11, 0x13, 0x17, 0xFA, 0x0F, 0x16, 0x01, 926 | 0x16, 0x07, 0x07, 0x0E, 0x0B, 0x02, 0x24, 0xC6, 0xC6, 0x50, 927 | 0x12, 0x13, 0x18, 0xFA, 0x0E, 0x16, 0x17, 0x15, 0x11, 0x51, 928 | 0xC6, 0xC6, 0x51, 0x11, 0x15, 0x17, 0x16, 0x0E, 0xFA, 0x18, 929 | 0x13, 0x12, 0x50, 0xC6, 0xC6, 0x50, 0x0B, 0x03, 0x09, 0x18, 930 | 0xFA, 0x0E, 0x16, 0x2D, 0x10, 0x51, 0xC6, 0xC6, 0x51, 0x10, 931 | 0x2D, 0x16, 0x0E, 0xFA, 0x18, 0x09, 0x03, 0x0B, 0x00, 0x00, 932 | 0x00, 0x02, 0x00, 0x00, 0xFF, 0x6A, 0x03, 0xE8, 0x03, 0x52, 933 | 0x00, 0x24, 0x00, 0x29, 0x00, 0x9C, 0x40, 0x19, 0x27, 0x26, 934 | 0x21, 0x18, 0x0D, 0x04, 0x06, 0x00, 0x02, 0x28, 0x01, 0x04, 935 | 0x00, 0x02, 0x47, 0x14, 0x01, 0x04, 0x01, 0x46, 0x13, 0x12, 936 | 0x02, 0x01, 0x44, 0x4B, 0xB0, 0x0A, 0x50, 0x58, 0x40, 0x20, 937 | 0x00, 0x02, 0x03, 0x00, 0x03, 0x02, 0x00, 0x6D, 0x00, 0x00, 938 | 0x04, 0x03, 0x00, 0x04, 0x6B, 0x00, 0x03, 0x03, 0x12, 0x48, 939 | 0x05, 0x01, 0x04, 0x04, 0x01, 0x58, 0x00, 0x01, 0x01, 0x0E, 940 | 0x01, 0x49, 0x1B, 0x4B, 0xB0, 0x0D, 0x50, 0x58, 0x40, 0x20, 941 | 0x00, 0x02, 0x03, 0x00, 0x03, 0x02, 0x00, 0x6D, 0x00, 0x00, 942 | 0x04, 0x03, 0x00, 0x04, 0x6B, 0x00, 0x03, 0x03, 0x10, 0x48, 943 | 0x05, 0x01, 0x04, 0x04, 0x01, 0x58, 0x00, 0x01, 0x01, 0x0E, 944 | 0x01, 0x49, 0x1B, 0x40, 0x1D, 0x00, 0x02, 0x03, 0x00, 0x03, 945 | 0x02, 0x00, 0x6D, 0x00, 0x00, 0x04, 0x03, 0x00, 0x04, 0x6B, 946 | 0x05, 0x01, 0x04, 0x00, 0x01, 0x04, 0x01, 0x5C, 0x00, 0x03, 947 | 0x03, 0x10, 0x03, 0x49, 0x59, 0x59, 0x40, 0x0D, 0x25, 0x25, 948 | 0x25, 0x29, 0x25, 0x29, 0x14, 0x1D, 0x24, 0x1A, 0x06, 0x05, 949 | 0x18, 0x2B, 0x01, 0x16, 0x14, 0x0F, 0x01, 0x17, 0x16, 0x14, 950 | 0x0F, 0x01, 0x06, 0x22, 0x2F, 0x01, 0x01, 0x06, 0x2B, 0x01, 951 | 0x07, 0x27, 0x37, 0x35, 0x34, 0x37, 0x01, 0x27, 0x26, 0x34, 952 | 0x3F, 0x01, 0x36, 0x32, 0x1F, 0x01, 0x37, 0x36, 0x32, 0x09, 953 | 0x01, 0x27, 0x01, 0x15, 0x03, 0xB4, 0x34, 0x34, 0x7E, 0x3A, 954 | 0x06, 0x06, 0x75, 0x06, 0x0E, 0x06, 0x3A, 0xFE, 0xAF, 0x15, 955 | 0x1D, 0x71, 0x8F, 0x24, 0x47, 0x15, 0x01, 0x51, 0x3B, 0x06, 956 | 0x06, 0x75, 0x06, 0x0E, 0x06, 0x3A, 0x7C, 0x34, 0x94, 0xFD, 957 | 0x9F, 0x01, 0x41, 0x6B, 0xFE, 0xBF, 0x03, 0x1E, 0x35, 0x94, 958 | 0x34, 0x7C, 0x3A, 0x06, 0x0E, 0x06, 0x75, 0x06, 0x06, 0x3B, 959 | 0xFE, 0xAF, 0x15, 0x47, 0x24, 0x8F, 0x71, 0x1D, 0x15, 0x01, 960 | 0x51, 0x3A, 0x06, 0x0E, 0x06, 0x75, 0x06, 0x06, 0x3A, 0x7E, 961 | 0x34, 0xFC, 0xCB, 0x01, 0x41, 0x6B, 0xFE, 0xBF, 0x6B, 0x00, 962 | 0x00, 0x06, 0x00, 0x00, 0xFF, 0x72, 0x04, 0x2F, 0x03, 0x49, 963 | 0x00, 0x08, 0x00, 0x12, 0x00, 0x1B, 0x00, 0x7B, 0x00, 0xB7, 964 | 0x00, 0xF3, 0x01, 0x38, 0x40, 0x37, 0xF0, 0xDA, 0x02, 0x04, 965 | 0x0E, 0x6B, 0x5E, 0x02, 0x05, 0x08, 0xD1, 0xBD, 0x71, 0x03, 966 | 0x00, 0x05, 0xBF, 0xAD, 0xA1, 0x76, 0x53, 0x4D, 0x46, 0x23, 967 | 0x1D, 0x09, 0x01, 0x00, 0xB4, 0x9F, 0x41, 0x03, 0x02, 0x01, 968 | 0x3B, 0x2E, 0x02, 0x06, 0x02, 0x96, 0x81, 0x02, 0x0B, 0x03, 969 | 0x07, 0x47, 0xE9, 0xDC, 0x02, 0x0E, 0x45, 0x83, 0x01, 0x0B, 970 | 0x44, 0x4B, 0xB0, 0x0A, 0x50, 0x58, 0x40, 0x46, 0x0A, 0x01, 971 | 0x08, 0x09, 0x05, 0x09, 0x08, 0x05, 0x6D, 0x00, 0x06, 0x02, 972 | 0x07, 0x02, 0x06, 0x07, 0x6D, 0x00, 0x09, 0x08, 0x00, 0x09, 973 | 0x54, 0x00, 0x05, 0x0D, 0x01, 0x00, 0x01, 0x05, 0x00, 0x60, 974 | 0x00, 0x02, 0x06, 0x01, 0x02, 0x54, 0x00, 0x04, 0x04, 0x0E, 975 | 0x58, 0x00, 0x0E, 0x0E, 0x0C, 0x48, 0x0C, 0x01, 0x01, 0x01, 976 | 0x07, 0x58, 0x00, 0x07, 0x07, 0x0F, 0x48, 0x00, 0x03, 0x03, 977 | 0x0B, 0x58, 0x00, 0x0B, 0x0B, 0x0E, 0x0B, 0x49, 0x1B, 0x4B, 978 | 0xB0, 0x0D, 0x50, 0x58, 0x40, 0x46, 0x0A, 0x01, 0x08, 0x09, 979 | 0x05, 0x09, 0x08, 0x05, 0x6D, 0x00, 0x06, 0x02, 0x07, 0x02, 980 | 0x06, 0x07, 0x6D, 0x00, 0x09, 0x08, 0x00, 0x09, 0x54, 0x00, 981 | 0x05, 0x0D, 0x01, 0x00, 0x01, 0x05, 0x00, 0x60, 0x00, 0x02, 982 | 0x06, 0x01, 0x02, 0x54, 0x00, 0x04, 0x04, 0x0E, 0x58, 0x00, 983 | 0x0E, 0x0E, 0x0D, 0x48, 0x0C, 0x01, 0x01, 0x01, 0x07, 0x58, 984 | 0x00, 0x07, 0x07, 0x0F, 0x48, 0x00, 0x03, 0x03, 0x0B, 0x58, 985 | 0x00, 0x0B, 0x0B, 0x0E, 0x0B, 0x49, 0x1B, 0x40, 0x41, 0x0A, 986 | 0x01, 0x08, 0x09, 0x05, 0x09, 0x08, 0x05, 0x6D, 0x00, 0x06, 987 | 0x02, 0x07, 0x02, 0x06, 0x07, 0x6D, 0x00, 0x0E, 0x00, 0x04, 988 | 0x09, 0x0E, 0x04, 0x60, 0x00, 0x09, 0x08, 0x00, 0x09, 0x54, 989 | 0x00, 0x05, 0x0D, 0x01, 0x00, 0x01, 0x05, 0x00, 0x60, 0x00, 990 | 0x02, 0x06, 0x01, 0x02, 0x54, 0x00, 0x03, 0x00, 0x0B, 0x03, 991 | 0x0B, 0x5C, 0x0C, 0x01, 0x01, 0x01, 0x07, 0x58, 0x00, 0x07, 992 | 0x07, 0x0F, 0x07, 0x49, 0x59, 0x59, 0x40, 0x1B, 0xE6, 0xE5, 993 | 0xC8, 0xC7, 0xAB, 0xA9, 0x8C, 0x8B, 0x6E, 0x6D, 0x65, 0x63, 994 | 0x5B, 0x5A, 0x35, 0x33, 0x2B, 0x2A, 0x13, 0x14, 0x14, 0x14, 995 | 0x13, 0x12, 0x0F, 0x05, 0x1A, 0x2B, 0x01, 0x34, 0x26, 0x22, 996 | 0x06, 0x14, 0x16, 0x32, 0x36, 0x05, 0x34, 0x26, 0x0E, 0x01, 997 | 0x17, 0x14, 0x16, 0x32, 0x36, 0x03, 0x34, 0x26, 0x22, 0x06, 998 | 0x1E, 0x01, 0x32, 0x36, 0x07, 0x15, 0x14, 0x06, 0x0F, 0x01, 999 | 0x06, 0x07, 0x16, 0x17, 0x16, 0x14, 0x07, 0x0E, 0x01, 0x23, 1000 | 0x22, 0x2F, 0x01, 0x06, 0x07, 0x06, 0x07, 0x06, 0x2B, 0x01, 1001 | 0x22, 0x26, 0x35, 0x27, 0x26, 0x27, 0x07, 0x06, 0x22, 0x27, 1002 | 0x26, 0x35, 0x34, 0x37, 0x3E, 0x01, 0x37, 0x26, 0x2F, 0x01, 1003 | 0x2E, 0x01, 0x3D, 0x01, 0x34, 0x36, 0x3F, 0x01, 0x36, 0x37, 1004 | 0x26, 0x27, 0x26, 0x34, 0x37, 0x3E, 0x01, 0x33, 0x32, 0x1F, 1005 | 0x01, 0x36, 0x37, 0x36, 0x37, 0x36, 0x3B, 0x01, 0x32, 0x16, 1006 | 0x1F, 0x01, 0x16, 0x17, 0x37, 0x36, 0x32, 0x17, 0x16, 0x15, 1007 | 0x14, 0x0F, 0x01, 0x06, 0x07, 0x16, 0x1F, 0x01, 0x1E, 0x01, 1008 | 0x01, 0x15, 0x14, 0x07, 0x06, 0x07, 0x16, 0x15, 0x14, 0x07, 1009 | 0x06, 0x23, 0x22, 0x2F, 0x01, 0x06, 0x22, 0x27, 0x0E, 0x01, 1010 | 0x07, 0x22, 0x27, 0x26, 0x35, 0x34, 0x37, 0x26, 0x27, 0x26, 1011 | 0x3D, 0x01, 0x34, 0x37, 0x36, 0x37, 0x26, 0x35, 0x34, 0x3F, 1012 | 0x01, 0x36, 0x33, 0x32, 0x16, 0x17, 0x37, 0x17, 0x36, 0x3F, 1013 | 0x01, 0x32, 0x17, 0x16, 0x15, 0x14, 0x07, 0x16, 0x17, 0x16, 1014 | 0x11, 0x15, 0x14, 0x07, 0x06, 0x07, 0x16, 0x15, 0x14, 0x07, 1015 | 0x06, 0x23, 0x22, 0x26, 0x27, 0x06, 0x22, 0x27, 0x0E, 0x01, 1016 | 0x22, 0x27, 0x26, 0x35, 0x34, 0x37, 0x26, 0x27, 0x26, 0x3D, 1017 | 0x01, 0x34, 0x37, 0x36, 0x37, 0x26, 0x35, 0x34, 0x3F, 0x01, 1018 | 0x36, 0x33, 0x32, 0x16, 0x17, 0x36, 0x32, 0x17, 0x36, 0x3F, 1019 | 0x01, 0x32, 0x17, 0x16, 0x15, 0x14, 0x07, 0x16, 0x17, 0x16, 1020 | 0x01, 0xF4, 0x54, 0x76, 0x54, 0x54, 0x76, 0x54, 0x01, 0xAD, 1021 | 0x2C, 0x38, 0x2C, 0x01, 0x2A, 0x3A, 0x2C, 0x01, 0x2C, 0x38, 1022 | 0x2C, 0x01, 0x2A, 0x3A, 0x2C, 0xD8, 0x08, 0x05, 0x56, 0x06, 1023 | 0x0C, 0x13, 0x1F, 0x04, 0x04, 0x0D, 0x42, 0x0B, 0x06, 0x05, 1024 | 0x40, 0x15, 0x16, 0x06, 0x07, 0x04, 0x0D, 0x68, 0x06, 0x0A, 1025 | 0x0D, 0x13, 0x17, 0x42, 0x04, 0x0D, 0x06, 0x50, 0x04, 0x05, 1026 | 0x24, 0x08, 0x0D, 0x07, 0x55, 0x05, 0x08, 0x08, 0x05, 0x56, 1027 | 0x07, 0x0B, 0x13, 0x1F, 0x04, 0x04, 0x0C, 0x44, 0x0A, 0x06, 1028 | 0x06, 0x40, 0x13, 0x18, 0x06, 0x07, 0x03, 0x0D, 0x68, 0x06, 1029 | 0x0A, 0x01, 0x0D, 0x13, 0x16, 0x42, 0x05, 0x0D, 0x05, 0x51, 1030 | 0x04, 0x18, 0x11, 0x08, 0x0D, 0x06, 0x55, 0x05, 0x08, 0x01, 1031 | 0x65, 0x53, 0x06, 0x0A, 0x1C, 0x02, 0x44, 0x01, 0x05, 0x15, 1032 | 0x1D, 0x0B, 0x0C, 0x0B, 0x07, 0x2C, 0x03, 0x01, 0x44, 0x03, 1033 | 0x1D, 0x0A, 0x07, 0x53, 0x53, 0x07, 0x0A, 0x1D, 0x03, 0x34, 1034 | 0x10, 0x01, 0x04, 0x2A, 0x08, 0x11, 0x11, 0x1C, 0x17, 0x04, 1035 | 0x02, 0x43, 0x02, 0x1C, 0x09, 0x07, 0x53, 0x53, 0x06, 0x0A, 1036 | 0x1C, 0x02, 0x44, 0x01, 0x05, 0x2A, 0x08, 0x0B, 0x0C, 0x0B, 1037 | 0x07, 0x2C, 0x04, 0x44, 0x03, 0x1D, 0x0A, 0x07, 0x53, 0x53, 1038 | 0x07, 0x0A, 0x1D, 0x03, 0x34, 0x10, 0x01, 0x04, 0x2A, 0x08, 1039 | 0x0C, 0x0A, 0x0C, 0x1C, 0x17, 0x04, 0x02, 0x43, 0x02, 0x1C, 1040 | 0x09, 0x07, 0x53, 0x01, 0x5E, 0x3B, 0x54, 0x54, 0x76, 0x54, 1041 | 0x54, 0xE3, 0x1D, 0x2C, 0x02, 0x28, 0x1F, 0x1D, 0x2A, 0x2A, 1042 | 0x02, 0x59, 0x1D, 0x2A, 0x2A, 0x3B, 0x2A, 0x2A, 0xCD, 0x67, 1043 | 0x06, 0x0A, 0x01, 0x0E, 0x13, 0x17, 0x1B, 0x25, 0x06, 0x0C, 1044 | 0x04, 0x11, 0x42, 0x04, 0x32, 0x0B, 0x06, 0x3C, 0x1B, 0x0D, 1045 | 0x08, 0x06, 0x55, 0x06, 0x0C, 0x32, 0x04, 0x04, 0x4B, 0x0F, 1046 | 0x05, 0x05, 0x08, 0x2C, 0x0C, 0x18, 0x16, 0x0D, 0x01, 0x08, 1047 | 0x07, 0x67, 0x06, 0x0A, 0x01, 0x0E, 0x13, 0x17, 0x1B, 0x25, 1048 | 0x06, 0x0C, 0x04, 0x11, 0x42, 0x04, 0x32, 0x0A, 0x08, 0x3C, 1049 | 0x1A, 0x0D, 0x08, 0x06, 0x55, 0x06, 0x0B, 0x31, 0x04, 0x04, 1050 | 0x4B, 0x0F, 0x05, 0x05, 0x1E, 0x15, 0x0D, 0x1B, 0x13, 0x0C, 1051 | 0x02, 0x08, 0xFE, 0xCF, 0x4E, 0x09, 0x08, 0x0F, 0x0E, 0x3F, 1052 | 0x0E, 0x02, 0x02, 0x28, 0x1B, 0x25, 0x01, 0x01, 0x0B, 0x34, 1053 | 0x01, 0x28, 0x02, 0x02, 0x0E, 0x3F, 0x0E, 0x0F, 0x08, 0x09, 1054 | 0x4E, 0x09, 0x09, 0x10, 0x0D, 0x3F, 0x0E, 0x02, 0x02, 0x1E, 1055 | 0x09, 0x34, 0x0C, 0x01, 0x01, 0x28, 0x17, 0x01, 0x27, 0x02, 1056 | 0x02, 0x0E, 0x3F, 0x0D, 0x10, 0x09, 0x02, 0x33, 0x4E, 0x09, 1057 | 0x09, 0x0F, 0x0E, 0x3F, 0x0E, 0x02, 0x02, 0x27, 0x34, 0x0C, 1058 | 0x01, 0x01, 0x0C, 0x34, 0x27, 0x02, 0x02, 0x0E, 0x3F, 0x0E, 1059 | 0x0F, 0x09, 0x09, 0x4E, 0x09, 0x08, 0x10, 0x0D, 0x3F, 0x0E, 1060 | 0x02, 0x02, 0x1E, 0x09, 0x34, 0x0C, 0x02, 0x02, 0x28, 0x17, 1061 | 0x01, 0x27, 0x02, 0x02, 0x0E, 0x3F, 0x0D, 0x10, 0x08, 0x00, 1062 | 0x00, 0x04, 0x00, 0x00, 0xFF, 0xB1, 0x03, 0x59, 0x03, 0x0B, 1063 | 0x00, 0x03, 0x00, 0x21, 0x00, 0x31, 0x00, 0x45, 0x00, 0xB7, 1064 | 0x40, 0x11, 0x2B, 0x2A, 0x23, 0x22, 0x04, 0x08, 0x04, 0x01, 1065 | 0x47, 0x0D, 0x01, 0x04, 0x06, 0x01, 0x08, 0x02, 0x46, 0x4B, 1066 | 0xB0, 0x0A, 0x50, 0x58, 0x40, 0x28, 0x00, 0x08, 0x00, 0x03, 1067 | 0x06, 0x08, 0x03, 0x60, 0x00, 0x06, 0x00, 0x01, 0x00, 0x06, 1068 | 0x01, 0x5E, 0x07, 0x01, 0x04, 0x04, 0x0A, 0x58, 0x00, 0x0A, 1069 | 0x0A, 0x0C, 0x48, 0x05, 0x02, 0x02, 0x00, 0x00, 0x09, 0x58, 1070 | 0x00, 0x09, 0x09, 0x0E, 0x09, 0x49, 0x1B, 0x4B, 0xB0, 0x0D, 1071 | 0x50, 0x58, 0x40, 0x28, 0x00, 0x08, 0x00, 0x03, 0x06, 0x08, 1072 | 0x03, 0x60, 0x00, 0x06, 0x00, 0x01, 0x00, 0x06, 0x01, 0x5E, 1073 | 0x07, 0x01, 0x04, 0x04, 0x0A, 0x58, 0x00, 0x0A, 0x0A, 0x0D, 1074 | 0x48, 0x05, 0x02, 0x02, 0x00, 0x00, 0x09, 0x58, 0x00, 0x09, 1075 | 0x09, 0x0E, 0x09, 0x49, 0x1B, 0x40, 0x2D, 0x00, 0x0A, 0x07, 1076 | 0x01, 0x04, 0x08, 0x0A, 0x04, 0x60, 0x00, 0x08, 0x00, 0x03, 1077 | 0x06, 0x08, 0x03, 0x60, 0x00, 0x06, 0x00, 0x01, 0x00, 0x06, 1078 | 0x01, 0x5E, 0x05, 0x02, 0x02, 0x00, 0x09, 0x09, 0x00, 0x52, 1079 | 0x05, 0x02, 0x02, 0x00, 0x00, 0x09, 0x58, 0x00, 0x09, 0x00, 1080 | 0x09, 0x4C, 0x59, 0x59, 0x40, 0x10, 0x40, 0x3D, 0x38, 0x35, 1081 | 0x26, 0x26, 0x33, 0x11, 0x13, 0x3B, 0x11, 0x11, 0x10, 0x0B, 1082 | 0x05, 0x1D, 0x2B, 0x17, 0x21, 0x35, 0x21, 0x05, 0x33, 0x11, 1083 | 0x34, 0x26, 0x2F, 0x01, 0x2E, 0x01, 0x07, 0x15, 0x14, 0x06, 1084 | 0x23, 0x21, 0x22, 0x26, 0x27, 0x35, 0x23, 0x11, 0x33, 0x35, 1085 | 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x07, 0x03, 0x35, 0x34, 1086 | 0x26, 0x2B, 0x01, 0x22, 0x06, 0x17, 0x15, 0x14, 0x16, 0x3B, 1087 | 0x01, 0x32, 0x36, 0x05, 0x11, 0x14, 0x06, 0x23, 0x21, 0x22, 1088 | 0x26, 0x27, 0x11, 0x34, 0x36, 0x33, 0x21, 0x32, 0x16, 0x1F, 1089 | 0x01, 0x1E, 0x01, 0xD6, 0x01, 0xAD, 0xFE, 0x53, 0x01, 0xF4, 1090 | 0x48, 0x0C, 0x05, 0x9D, 0x05, 0x1C, 0x08, 0x1E, 0x17, 0xFE, 1091 | 0xBE, 0x16, 0x1E, 0x01, 0x48, 0x48, 0x20, 0x15, 0x01, 0xD1, 1092 | 0x16, 0x20, 0x01, 0xD6, 0x0A, 0x08, 0x6B, 0x07, 0x0C, 0x01, 1093 | 0x0A, 0x08, 0x6B, 0x07, 0x0C, 0x01, 0x64, 0x1E, 0x17, 0xFD, 1094 | 0x12, 0x17, 0x1E, 0x01, 0x20, 0x16, 0x02, 0x05, 0x17, 0x36, 1095 | 0x0F, 0x9C, 0x10, 0x16, 0x07, 0xD6, 0xD6, 0x01, 0xF4, 0x08, 1096 | 0x1A, 0x07, 0x9C, 0x06, 0x0C, 0x01, 0xE8, 0x16, 0x20, 0x20, 1097 | 0x16, 0xE8, 0xFD, 0x36, 0xE8, 0x16, 0x20, 0x20, 0x16, 0x01, 1098 | 0x1E, 0xB2, 0x08, 0x0A, 0x0A, 0x08, 0xB2, 0x08, 0x0A, 0x0A, 1099 | 0x0A, 0xFD, 0xFA, 0x16, 0x20, 0x20, 0x16, 0x02, 0xEE, 0x16, 1100 | 0x20, 0x18, 0x0E, 0x9D, 0x0F, 0x36, 0x00, 0x00, 0x00, 0x03, 1101 | 0x00, 0x00, 0xFF, 0xF9, 0x04, 0x29, 0x03, 0x0B, 0x00, 0x11, 1102 | 0x00, 0x27, 0x00, 0x45, 0x00, 0xA8, 0xB5, 0x24, 0x01, 0x01, 1103 | 0x00, 0x01, 0x47, 0x4B, 0xB0, 0x0A, 0x50, 0x58, 0x40, 0x27, 1104 | 0x00, 0x07, 0x00, 0x03, 0x02, 0x07, 0x03, 0x60, 0x08, 0x09, 1105 | 0x02, 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x60, 0x00, 0x04, 1106 | 0x04, 0x06, 0x58, 0x00, 0x06, 0x06, 0x0C, 0x48, 0x00, 0x01, 1107 | 0x01, 0x05, 0x58, 0x00, 0x05, 0x05, 0x0F, 0x05, 0x49, 0x1B, 1108 | 0x4B, 0xB0, 0x0D, 0x50, 0x58, 0x40, 0x27, 0x00, 0x07, 0x00, 1109 | 0x03, 0x02, 0x07, 0x03, 0x60, 0x08, 0x09, 0x02, 0x02, 0x00, 1110 | 0x00, 0x01, 0x02, 0x00, 0x60, 0x00, 0x04, 0x04, 0x06, 0x58, 1111 | 0x00, 0x06, 0x06, 0x0D, 0x48, 0x00, 0x01, 0x01, 0x05, 0x58, 1112 | 0x00, 0x05, 0x05, 0x0F, 0x05, 0x49, 0x1B, 0x40, 0x25, 0x00, 1113 | 0x06, 0x00, 0x04, 0x07, 0x06, 0x04, 0x60, 0x00, 0x07, 0x00, 1114 | 0x03, 0x02, 0x07, 0x03, 0x60, 0x08, 0x09, 0x02, 0x02, 0x00, 1115 | 0x00, 0x01, 0x02, 0x00, 0x60, 0x00, 0x01, 0x01, 0x05, 0x58, 1116 | 0x00, 0x05, 0x05, 0x0F, 0x05, 0x49, 0x59, 0x59, 0x40, 0x17, 1117 | 0x13, 0x12, 0x42, 0x40, 0x3D, 0x3B, 0x38, 0x35, 0x30, 0x2D, 1118 | 0x21, 0x1E, 0x19, 0x16, 0x12, 0x27, 0x13, 0x27, 0x36, 0x31, 1119 | 0x0A, 0x05, 0x16, 0x2B, 0x01, 0x34, 0x23, 0x21, 0x22, 0x06, 1120 | 0x0F, 0x01, 0x06, 0x15, 0x14, 0x33, 0x21, 0x32, 0x36, 0x3F, 1121 | 0x01, 0x36, 0x25, 0x21, 0x35, 0x34, 0x26, 0x07, 0x21, 0x22, 1122 | 0x26, 0x27, 0x35, 0x34, 0x26, 0x07, 0x23, 0x22, 0x06, 0x15, 1123 | 0x11, 0x37, 0x3E, 0x01, 0x05, 0x14, 0x0F, 0x01, 0x0E, 0x01, 1124 | 0x23, 0x21, 0x22, 0x26, 0x35, 0x11, 0x34, 0x36, 0x3B, 0x01, 1125 | 0x32, 0x16, 0x1D, 0x01, 0x21, 0x32, 0x16, 0x1D, 0x01, 0x33, 1126 | 0x32, 0x16, 0x17, 0x16, 0x03, 0xE2, 0x1E, 0xFD, 0xA1, 0x16, 1127 | 0x34, 0x0D, 0xA4, 0x0B, 0x1E, 0x02, 0x5F, 0x16, 0x34, 0x0E, 1128 | 0xA4, 0x0A, 0xFD, 0x83, 0x01, 0xAD, 0x20, 0x16, 0xFE, 0xBF, 1129 | 0x17, 0x1E, 0x01, 0x1E, 0x17, 0xB3, 0x16, 0x20, 0x8F, 0x19, 1130 | 0x50, 0x02, 0xEA, 0x19, 0xA5, 0x18, 0x52, 0x25, 0xFD, 0xA1, 1131 | 0x33, 0x4A, 0x4A, 0x33, 0xB3, 0x33, 0x4A, 0x01, 0x2F, 0x33, 1132 | 0x4A, 0x6B, 0x1E, 0x34, 0x0B, 0x08, 0x01, 0x4A, 0x14, 0x18, 1133 | 0x11, 0xCB, 0x0D, 0x09, 0x14, 0x1A, 0x10, 0xCB, 0x0C, 0x64, 1134 | 0x5A, 0x16, 0x20, 0x01, 0x20, 0x16, 0x24, 0x16, 0x20, 0x01, 1135 | 0x1E, 0x17, 0xFE, 0x24, 0xAF, 0x1E, 0x26, 0x5B, 0x22, 0x20, 1136 | 0xCB, 0x1E, 0x26, 0x4A, 0x33, 0x02, 0x18, 0x33, 0x4A, 0x4A, 1137 | 0x33, 0x12, 0x4A, 0x33, 0x5A, 0x1A, 0x1B, 0x11, 0x00, 0x00, 1138 | 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0xE7, 0x29, 1139 | 0x04, 0xD1, 0x5F, 0x0F, 0x3C, 0xF5, 0x00, 0x0B, 0x03, 0xE8, 1140 | 0x00, 0x00, 0x00, 0x00, 0xD3, 0x84, 0x65, 0x65, 0x00, 0x00, 1141 | 0x00, 0x00, 0xD3, 0x84, 0x65, 0x65, 0xFF, 0xFD, 0xFF, 0x6A, 1142 | 0x04, 0x2F, 0x03, 0x52, 0x00, 0x00, 0x00, 0x08, 0x00, 0x02, 1143 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 1144 | 0x03, 0x52, 0xFF, 0x6A, 0x00, 0x00, 0x04, 0x2F, 0xFF, 0xFD, 1145 | 0xFF, 0xFE, 0x04, 0x2F, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 1146 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1147 | 0x00, 0x11, 0x03, 0xE8, 0x00, 0x00, 0x03, 0x11, 0x00, 0x00, 1148 | 0x03, 0x59, 0x00, 0x00, 0x03, 0x59, 0x00, 0x00, 0x02, 0x3B, 1149 | 0xFF, 0xFF, 0x03, 0xE8, 0xFF, 0xFF, 0x02, 0x3B, 0x00, 0x00, 1150 | 0x03, 0xE8, 0x00, 0x00, 0x03, 0xA0, 0xFF, 0xFF, 0x03, 0xA0, 1151 | 0x00, 0x00, 0x03, 0x11, 0xFF, 0xFD, 0x03, 0x59, 0x00, 0x00, 1152 | 0x03, 0x59, 0x00, 0x00, 0x03, 0xE8, 0x00, 0x00, 0x04, 0x2F, 1153 | 0x00, 0x00, 0x03, 0x59, 0x00, 0x00, 0x04, 0x2F, 0x00, 0x00, 1154 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x5C, 0x00, 0xB6, 1155 | 0x01, 0x0A, 0x01, 0x76, 0x01, 0xCA, 0x02, 0x36, 0x02, 0x68, 1156 | 0x02, 0x9C, 0x02, 0xE2, 0x03, 0x94, 0x04, 0x30, 0x04, 0xC6, 1157 | 0x06, 0xBA, 0x07, 0x7C, 0x08, 0x35, 0x00, 0x01, 0x00, 0x00, 1158 | 0x00, 0x11, 0x00, 0xF4, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 1159 | 0x00, 0x02, 0x00, 0x1E, 0x00, 0x2E, 0x00, 0x73, 0x00, 0x00, 1160 | 0x00, 0xAC, 0x0B, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1161 | 0x00, 0x12, 0x00, 0xDE, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 1162 | 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 1163 | 0x00, 0x00, 0x00, 0x01, 0x00, 0x06, 0x00, 0x35, 0x00, 0x01, 1164 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x07, 0x00, 0x3B, 1165 | 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x06, 1166 | 0x00, 0x42, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 1167 | 0x00, 0x06, 0x00, 0x48, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 1168 | 0x00, 0x05, 0x00, 0x0B, 0x00, 0x4E, 0x00, 0x01, 0x00, 0x00, 1169 | 0x00, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x59, 0x00, 0x01, 1170 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x2B, 0x00, 0x5F, 1171 | 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0B, 0x00, 0x13, 1172 | 0x00, 0x8A, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, 0x00, 0x00, 1173 | 0x00, 0x6A, 0x00, 0x9D, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, 1174 | 0x00, 0x01, 0x00, 0x0C, 0x01, 0x07, 0x00, 0x03, 0x00, 0x01, 1175 | 0x04, 0x09, 0x00, 0x02, 0x00, 0x0E, 0x01, 0x13, 0x00, 0x03, 1176 | 0x00, 0x01, 0x04, 0x09, 0x00, 0x03, 0x00, 0x0C, 0x01, 0x21, 1177 | 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, 0x00, 0x04, 0x00, 0x0C, 1178 | 0x01, 0x2D, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, 0x00, 0x05, 1179 | 0x00, 0x16, 0x01, 0x39, 0x00, 0x03, 0x00, 0x01, 0x04, 0x09, 1180 | 0x00, 0x06, 0x00, 0x0C, 0x01, 0x4F, 0x00, 0x03, 0x00, 0x01, 1181 | 0x04, 0x09, 0x00, 0x0A, 0x00, 0x56, 0x01, 0x5B, 0x00, 0x03, 1182 | 0x00, 0x01, 0x04, 0x09, 0x00, 0x0B, 0x00, 0x26, 0x01, 0xB1, 1183 | 0x43, 0x6F, 0x70, 0x79, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 1184 | 0x28, 0x43, 0x29, 0x20, 0x32, 0x30, 0x31, 0x36, 0x20, 0x62, 1185 | 0x79, 0x20, 0x6F, 0x72, 0x69, 0x67, 0x69, 0x6E, 0x61, 0x6C, 1186 | 0x20, 0x61, 0x75, 0x74, 0x68, 0x6F, 0x72, 0x73, 0x20, 0x40, 1187 | 0x20, 0x66, 0x6F, 0x6E, 0x74, 0x65, 0x6C, 0x6C, 0x6F, 0x2E, 1188 | 0x63, 0x6F, 0x6D, 0x67, 0x66, 0x78, 0x5F, 0x75, 0x69, 0x52, 1189 | 0x65, 0x67, 0x75, 0x6C, 0x61, 0x72, 0x67, 0x66, 0x78, 0x5F, 1190 | 0x75, 0x69, 0x67, 0x66, 0x78, 0x5F, 0x75, 0x69, 0x56, 0x65, 1191 | 0x72, 0x73, 0x69, 0x6F, 0x6E, 0x20, 0x31, 0x2E, 0x30, 0x67, 1192 | 0x66, 0x78, 0x5F, 0x75, 0x69, 0x47, 0x65, 0x6E, 0x65, 0x72, 1193 | 0x61, 0x74, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x73, 0x76, 1194 | 0x67, 0x32, 0x74, 0x74, 0x66, 0x20, 0x66, 0x72, 0x6F, 0x6D, 1195 | 0x20, 0x46, 0x6F, 0x6E, 0x74, 0x65, 0x6C, 0x6C, 0x6F, 0x20, 1196 | 0x70, 0x72, 0x6F, 0x6A, 0x65, 0x63, 0x74, 0x2E, 0x68, 0x74, 1197 | 0x74, 0x70, 0x3A, 0x2F, 0x2F, 0x66, 0x6F, 0x6E, 0x74, 0x65, 1198 | 0x6C, 0x6C, 0x6F, 0x2E, 0x63, 0x6F, 0x6D, 0x00, 0x43, 0x00, 1199 | 0x6F, 0x00, 0x70, 0x00, 0x79, 0x00, 0x72, 0x00, 0x69, 0x00, 1200 | 0x67, 0x00, 0x68, 0x00, 0x74, 0x00, 0x20, 0x00, 0x28, 0x00, 1201 | 0x43, 0x00, 0x29, 0x00, 0x20, 0x00, 0x32, 0x00, 0x30, 0x00, 1202 | 0x31, 0x00, 0x36, 0x00, 0x20, 0x00, 0x62, 0x00, 0x79, 0x00, 1203 | 0x20, 0x00, 0x6F, 0x00, 0x72, 0x00, 0x69, 0x00, 0x67, 0x00, 1204 | 0x69, 0x00, 0x6E, 0x00, 0x61, 0x00, 0x6C, 0x00, 0x20, 0x00, 1205 | 0x61, 0x00, 0x75, 0x00, 0x74, 0x00, 0x68, 0x00, 0x6F, 0x00, 1206 | 0x72, 0x00, 0x73, 0x00, 0x20, 0x00, 0x40, 0x00, 0x20, 0x00, 1207 | 0x66, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x65, 0x00, 1208 | 0x6C, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x2E, 0x00, 0x63, 0x00, 1209 | 0x6F, 0x00, 0x6D, 0x00, 0x67, 0x00, 0x66, 0x00, 0x78, 0x00, 1210 | 0x5F, 0x00, 0x75, 0x00, 0x69, 0x00, 0x52, 0x00, 0x65, 0x00, 1211 | 0x67, 0x00, 0x75, 0x00, 0x6C, 0x00, 0x61, 0x00, 0x72, 0x00, 1212 | 0x67, 0x00, 0x66, 0x00, 0x78, 0x00, 0x5F, 0x00, 0x75, 0x00, 1213 | 0x69, 0x00, 0x67, 0x00, 0x66, 0x00, 0x78, 0x00, 0x5F, 0x00, 1214 | 0x75, 0x00, 0x69, 0x00, 0x56, 0x00, 0x65, 0x00, 0x72, 0x00, 1215 | 0x73, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x20, 0x00, 1216 | 0x31, 0x00, 0x2E, 0x00, 0x30, 0x00, 0x67, 0x00, 0x66, 0x00, 1217 | 0x78, 0x00, 0x5F, 0x00, 0x75, 0x00, 0x69, 0x00, 0x47, 0x00, 1218 | 0x65, 0x00, 0x6E, 0x00, 0x65, 0x00, 0x72, 0x00, 0x61, 0x00, 1219 | 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x20, 0x00, 0x62, 0x00, 1220 | 0x79, 0x00, 0x20, 0x00, 0x73, 0x00, 0x76, 0x00, 0x67, 0x00, 1221 | 0x32, 0x00, 0x74, 0x00, 0x74, 0x00, 0x66, 0x00, 0x20, 0x00, 1222 | 0x66, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x6D, 0x00, 0x20, 0x00, 1223 | 0x46, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x65, 0x00, 1224 | 0x6C, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x20, 0x00, 0x70, 0x00, 1225 | 0x72, 0x00, 0x6F, 0x00, 0x6A, 0x00, 0x65, 0x00, 0x63, 0x00, 1226 | 0x74, 0x00, 0x2E, 0x00, 0x68, 0x00, 0x74, 0x00, 0x74, 0x00, 1227 | 0x70, 0x00, 0x3A, 0x00, 0x2F, 0x00, 0x2F, 0x00, 0x66, 0x00, 1228 | 0x6F, 0x00, 0x6E, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6C, 0x00, 1229 | 0x6C, 0x00, 0x6F, 0x00, 0x2E, 0x00, 0x63, 0x00, 0x6F, 0x00, 1230 | 0x6D, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 1231 | 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1232 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1233 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x01, 0x02, 1234 | 0x01, 0x03, 0x01, 0x04, 0x01, 0x05, 0x01, 0x06, 0x01, 0x07, 1235 | 0x01, 0x08, 0x01, 0x09, 0x01, 0x0A, 0x01, 0x0B, 0x01, 0x0C, 1236 | 0x01, 0x0D, 0x01, 0x0E, 0x01, 0x0F, 0x01, 0x10, 0x01, 0x11, 1237 | 0x01, 0x12, 0x00, 0x04, 0x70, 0x6C, 0x61, 0x79, 0x04, 0x73, 1238 | 0x74, 0x6F, 0x70, 0x05, 0x70, 0x61, 0x75, 0x73, 0x65, 0x06, 1239 | 0x74, 0x6F, 0x2D, 0x65, 0x6E, 0x64, 0x0A, 0x74, 0x6F, 0x2D, 1240 | 0x65, 0x6E, 0x64, 0x2D, 0x61, 0x6C, 0x74, 0x08, 0x74, 0x6F, 1241 | 0x2D, 0x73, 0x74, 0x61, 0x72, 0x74, 0x0C, 0x74, 0x6F, 0x2D, 1242 | 0x73, 0x74, 0x61, 0x72, 0x74, 0x2D, 0x61, 0x6C, 0x74, 0x07, 1243 | 0x66, 0x61, 0x73, 0x74, 0x2D, 0x66, 0x77, 0x07, 0x66, 0x61, 1244 | 0x73, 0x74, 0x2D, 0x62, 0x77, 0x09, 0x64, 0x69, 0x72, 0x65, 1245 | 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x06, 0x70, 0x65, 0x6E, 0x63, 1246 | 0x69, 0x6C, 0x0F, 0x72, 0x65, 0x73, 0x69, 0x7A, 0x65, 0x2D, 1247 | 0x66, 0x75, 0x6C, 0x6C, 0x2D, 0x61, 0x6C, 0x74, 0x0A, 0x65, 1248 | 0x79, 0x65, 0x64, 0x72, 0x6F, 0x70, 0x70, 0x65, 0x72, 0x07, 1249 | 0x63, 0x6F, 0x67, 0x2D, 0x61, 0x6C, 0x74, 0x06, 0x66, 0x6C, 1250 | 0x6F, 0x70, 0x70, 0x79, 0x11, 0x66, 0x6F, 0x6C, 0x64, 0x65, 1251 | 0x72, 0x2D, 0x6F, 0x70, 0x65, 0x6E, 0x2D, 0x65, 0x6D, 0x70, 1252 | 0x74, 0x79, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0xFF, 0xFF, 1253 | 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 1254 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 1255 | 0x00, 0x18, 0x00, 0x18, 0x00, 0x18, 0x03, 0x0B, 0x03, 0x0B, 1256 | 0xFF, 0xB1, 0xFF, 0xF9, 0x03, 0x52, 0xFF, 0x6A, 0x03, 0x52, 1257 | 0x03, 0x49, 0xFF, 0x72, 0xFF, 0xF9, 0x03, 0x52, 0xFF, 0x6A, 1258 | 0xB0, 0x00, 0x2C, 0x20, 0xB0, 0x00, 0x55, 0x58, 0x45, 0x59, 1259 | 0x20, 0x20, 0x4B, 0xB8, 0x00, 0x0E, 0x51, 0x4B, 0xB0, 0x06, 1260 | 0x53, 0x5A, 0x58, 0xB0, 0x34, 0x1B, 0xB0, 0x28, 0x59, 0x60, 1261 | 0x66, 0x20, 0x8A, 0x55, 0x58, 0xB0, 0x02, 0x25, 0x61, 0xB9, 1262 | 0x08, 0x00, 0x08, 0x00, 0x63, 0x63, 0x23, 0x62, 0x1B, 0x21, 1263 | 0x21, 0xB0, 0x00, 0x59, 0xB0, 0x00, 0x43, 0x23, 0x44, 0xB2, 1264 | 0x00, 0x01, 0x00, 0x43, 0x60, 0x42, 0x2D, 0xB0, 0x01, 0x2C, 1265 | 0xB0, 0x20, 0x60, 0x66, 0x2D, 0xB0, 0x02, 0x2C, 0x20, 0x64, 1266 | 0x20, 0xB0, 0xC0, 0x50, 0xB0, 0x04, 0x26, 0x5A, 0xB2, 0x28, 1267 | 0x01, 0x0A, 0x43, 0x45, 0x63, 0x45, 0x52, 0x5B, 0x58, 0x21, 1268 | 0x23, 0x21, 0x1B, 0x8A, 0x58, 0x20, 0xB0, 0x50, 0x50, 0x58, 1269 | 0x21, 0xB0, 0x40, 0x59, 0x1B, 0x20, 0xB0, 0x38, 0x50, 0x58, 1270 | 0x21, 0xB0, 0x38, 0x59, 0x59, 0x20, 0xB1, 0x01, 0x0A, 0x43, 1271 | 0x45, 0x63, 0x45, 0x61, 0x64, 0xB0, 0x28, 0x50, 0x58, 0x21, 1272 | 0xB1, 0x01, 0x0A, 0x43, 0x45, 0x63, 0x45, 0x20, 0xB0, 0x30, 1273 | 0x50, 0x58, 0x21, 0xB0, 0x30, 0x59, 0x1B, 0x20, 0xB0, 0xC0, 1274 | 0x50, 0x58, 0x20, 0x66, 0x20, 0x8A, 0x8A, 0x61, 0x20, 0xB0, 1275 | 0x0A, 0x50, 0x58, 0x60, 0x1B, 0x20, 0xB0, 0x20, 0x50, 0x58, 1276 | 0x21, 0xB0, 0x0A, 0x60, 0x1B, 0x20, 0xB0, 0x36, 0x50, 0x58, 1277 | 0x21, 0xB0, 0x36, 0x60, 0x1B, 0x60, 0x59, 0x59, 0x59, 0x1B, 1278 | 0xB0, 0x01, 0x2B, 0x59, 0x59, 0x23, 0xB0, 0x00, 0x50, 0x58, 1279 | 0x65, 0x59, 0x59, 0x2D, 0xB0, 0x03, 0x2C, 0x20, 0x45, 0x20, 1280 | 0xB0, 0x04, 0x25, 0x61, 0x64, 0x20, 0xB0, 0x05, 0x43, 0x50, 1281 | 0x58, 0xB0, 0x05, 0x23, 0x42, 0xB0, 0x06, 0x23, 0x42, 0x1B, 1282 | 0x21, 0x21, 0x59, 0xB0, 0x01, 0x60, 0x2D, 0xB0, 0x04, 0x2C, 1283 | 0x23, 0x21, 0x23, 0x21, 0x20, 0x64, 0xB1, 0x05, 0x62, 0x42, 1284 | 0x20, 0xB0, 0x06, 0x23, 0x42, 0xB1, 0x01, 0x0A, 0x43, 0x45, 1285 | 0x63, 0xB1, 0x01, 0x0A, 0x43, 0xB0, 0x01, 0x60, 0x45, 0x63, 1286 | 0xB0, 0x03, 0x2A, 0x21, 0x20, 0xB0, 0x06, 0x43, 0x20, 0x8A, 1287 | 0x20, 0x8A, 0xB0, 0x01, 0x2B, 0xB1, 0x30, 0x05, 0x25, 0xB0, 1288 | 0x04, 0x26, 0x51, 0x58, 0x60, 0x50, 0x1B, 0x61, 0x52, 0x59, 1289 | 0x58, 0x23, 0x59, 0x21, 0x20, 0xB0, 0x40, 0x53, 0x58, 0xB0, 1290 | 0x01, 0x2B, 0x1B, 0x21, 0xB0, 0x40, 0x59, 0x23, 0xB0, 0x00, 1291 | 0x50, 0x58, 0x65, 0x59, 0x2D, 0xB0, 0x05, 0x2C, 0xB0, 0x07, 1292 | 0x43, 0x2B, 0xB2, 0x00, 0x02, 0x00, 0x43, 0x60, 0x42, 0x2D, 1293 | 0xB0, 0x06, 0x2C, 0xB0, 0x07, 0x23, 0x42, 0x23, 0x20, 0xB0, 1294 | 0x00, 0x23, 0x42, 0x61, 0xB0, 0x02, 0x62, 0x66, 0xB0, 0x01, 1295 | 0x63, 0xB0, 0x01, 0x60, 0xB0, 0x05, 0x2A, 0x2D, 0xB0, 0x07, 1296 | 0x2C, 0x20, 0x20, 0x45, 0x20, 0xB0, 0x0B, 0x43, 0x63, 0xB8, 1297 | 0x04, 0x00, 0x62, 0x20, 0xB0, 0x00, 0x50, 0x58, 0xB0, 0x40, 1298 | 0x60, 0x59, 0x66, 0xB0, 0x01, 0x63, 0x60, 0x44, 0xB0, 0x01, 1299 | 0x60, 0x2D, 0xB0, 0x08, 0x2C, 0xB2, 0x07, 0x0B, 0x00, 0x43, 1300 | 0x45, 0x42, 0x2A, 0x21, 0xB2, 0x00, 0x01, 0x00, 0x43, 0x60, 1301 | 0x42, 0x2D, 0xB0, 0x09, 0x2C, 0xB0, 0x00, 0x43, 0x23, 0x44, 1302 | 0xB2, 0x00, 0x01, 0x00, 0x43, 0x60, 0x42, 0x2D, 0xB0, 0x0A, 1303 | 0x2C, 0x20, 0x20, 0x45, 0x20, 0xB0, 0x01, 0x2B, 0x23, 0xB0, 1304 | 0x00, 0x43, 0xB0, 0x04, 0x25, 0x60, 0x20, 0x45, 0x8A, 0x23, 1305 | 0x61, 0x20, 0x64, 0x20, 0xB0, 0x20, 0x50, 0x58, 0x21, 0xB0, 1306 | 0x00, 0x1B, 0xB0, 0x30, 0x50, 0x58, 0xB0, 0x20, 0x1B, 0xB0, 1307 | 0x40, 0x59, 0x59, 0x23, 0xB0, 0x00, 0x50, 0x58, 0x65, 0x59, 1308 | 0xB0, 0x03, 0x25, 0x23, 0x61, 0x44, 0x44, 0xB0, 0x01, 0x60, 1309 | 0x2D, 0xB0, 0x0B, 0x2C, 0x20, 0x20, 0x45, 0x20, 0xB0, 0x01, 1310 | 0x2B, 0x23, 0xB0, 0x00, 0x43, 0xB0, 0x04, 0x25, 0x60, 0x20, 1311 | 0x45, 0x8A, 0x23, 0x61, 0x20, 0x64, 0xB0, 0x24, 0x50, 0x58, 1312 | 0xB0, 0x00, 0x1B, 0xB0, 0x40, 0x59, 0x23, 0xB0, 0x00, 0x50, 1313 | 0x58, 0x65, 0x59, 0xB0, 0x03, 0x25, 0x23, 0x61, 0x44, 0x44, 1314 | 0xB0, 0x01, 0x60, 0x2D, 0xB0, 0x0C, 0x2C, 0x20, 0xB0, 0x00, 1315 | 0x23, 0x42, 0xB2, 0x0B, 0x0A, 0x03, 0x45, 0x58, 0x21, 0x1B, 1316 | 0x23, 0x21, 0x59, 0x2A, 0x21, 0x2D, 0xB0, 0x0D, 0x2C, 0xB1, 1317 | 0x02, 0x02, 0x45, 0xB0, 0x64, 0x61, 0x44, 0x2D, 0xB0, 0x0E, 1318 | 0x2C, 0xB0, 0x01, 0x60, 0x20, 0x20, 0xB0, 0x0C, 0x43, 0x4A, 1319 | 0xB0, 0x00, 0x50, 0x58, 0x20, 0xB0, 0x0C, 0x23, 0x42, 0x59, 1320 | 0xB0, 0x0D, 0x43, 0x4A, 0xB0, 0x00, 0x52, 0x58, 0x20, 0xB0, 1321 | 0x0D, 0x23, 0x42, 0x59, 0x2D, 0xB0, 0x0F, 0x2C, 0x20, 0xB0, 1322 | 0x10, 0x62, 0x66, 0xB0, 0x01, 0x63, 0x20, 0xB8, 0x04, 0x00, 1323 | 0x63, 0x8A, 0x23, 0x61, 0xB0, 0x0E, 0x43, 0x60, 0x20, 0x8A, 1324 | 0x60, 0x20, 0xB0, 0x0E, 0x23, 0x42, 0x23, 0x2D, 0xB0, 0x10, 1325 | 0x2C, 0x4B, 0x54, 0x58, 0xB1, 0x04, 0x64, 0x44, 0x59, 0x24, 1326 | 0xB0, 0x0D, 0x65, 0x23, 0x78, 0x2D, 0xB0, 0x11, 0x2C, 0x4B, 1327 | 0x51, 0x58, 0x4B, 0x53, 0x58, 0xB1, 0x04, 0x64, 0x44, 0x59, 1328 | 0x1B, 0x21, 0x59, 0x24, 0xB0, 0x13, 0x65, 0x23, 0x78, 0x2D, 1329 | 0xB0, 0x12, 0x2C, 0xB1, 0x00, 0x0F, 0x43, 0x55, 0x58, 0xB1, 1330 | 0x0F, 0x0F, 0x43, 0xB0, 0x01, 0x61, 0x42, 0xB0, 0x0F, 0x2B, 1331 | 0x59, 0xB0, 0x00, 0x43, 0xB0, 0x02, 0x25, 0x42, 0xB1, 0x0C, 1332 | 0x02, 0x25, 0x42, 0xB1, 0x0D, 0x02, 0x25, 0x42, 0xB0, 0x01, 1333 | 0x16, 0x23, 0x20, 0xB0, 0x03, 0x25, 0x50, 0x58, 0xB1, 0x01, 1334 | 0x00, 0x43, 0x60, 0xB0, 0x04, 0x25, 0x42, 0x8A, 0x8A, 0x20, 1335 | 0x8A, 0x23, 0x61, 0xB0, 0x0E, 0x2A, 0x21, 0x23, 0xB0, 0x01, 1336 | 0x61, 0x20, 0x8A, 0x23, 0x61, 0xB0, 0x0E, 0x2A, 0x21, 0x1B, 1337 | 0xB1, 0x01, 0x00, 0x43, 0x60, 0xB0, 0x02, 0x25, 0x42, 0xB0, 1338 | 0x02, 0x25, 0x61, 0xB0, 0x0E, 0x2A, 0x21, 0x59, 0xB0, 0x0C, 1339 | 0x43, 0x47, 0xB0, 0x0D, 0x43, 0x47, 0x60, 0xB0, 0x02, 0x62, 1340 | 0x20, 0xB0, 0x00, 0x50, 0x58, 0xB0, 0x40, 0x60, 0x59, 0x66, 1341 | 0xB0, 0x01, 0x63, 0x20, 0xB0, 0x0B, 0x43, 0x63, 0xB8, 0x04, 1342 | 0x00, 0x62, 0x20, 0xB0, 0x00, 0x50, 0x58, 0xB0, 0x40, 0x60, 1343 | 0x59, 0x66, 0xB0, 0x01, 0x63, 0x60, 0xB1, 0x00, 0x00, 0x13, 1344 | 0x23, 0x44, 0xB0, 0x01, 0x43, 0xB0, 0x00, 0x3E, 0xB2, 0x01, 1345 | 0x01, 0x01, 0x43, 0x60, 0x42, 0x2D, 0xB0, 0x13, 0x2C, 0x00, 1346 | 0xB1, 0x00, 0x02, 0x45, 0x54, 0x58, 0xB0, 0x0F, 0x23, 0x42, 1347 | 0x20, 0x45, 0xB0, 0x0B, 0x23, 0x42, 0xB0, 0x0A, 0x23, 0xB0, 1348 | 0x01, 0x60, 0x42, 0x20, 0x60, 0xB0, 0x01, 0x61, 0xB5, 0x10, 1349 | 0x10, 0x01, 0x00, 0x0E, 0x00, 0x42, 0x42, 0x8A, 0x60, 0xB1, 1350 | 0x12, 0x06, 0x2B, 0xB0, 0x72, 0x2B, 0x1B, 0x22, 0x59, 0x2D, 1351 | 0xB0, 0x14, 0x2C, 0xB1, 0x00, 0x13, 0x2B, 0x2D, 0xB0, 0x15, 1352 | 0x2C, 0xB1, 0x01, 0x13, 0x2B, 0x2D, 0xB0, 0x16, 0x2C, 0xB1, 1353 | 0x02, 0x13, 0x2B, 0x2D, 0xB0, 0x17, 0x2C, 0xB1, 0x03, 0x13, 1354 | 0x2B, 0x2D, 0xB0, 0x18, 0x2C, 0xB1, 0x04, 0x13, 0x2B, 0x2D, 1355 | 0xB0, 0x19, 0x2C, 0xB1, 0x05, 0x13, 0x2B, 0x2D, 0xB0, 0x1A, 1356 | 0x2C, 0xB1, 0x06, 0x13, 0x2B, 0x2D, 0xB0, 0x1B, 0x2C, 0xB1, 1357 | 0x07, 0x13, 0x2B, 0x2D, 0xB0, 0x1C, 0x2C, 0xB1, 0x08, 0x13, 1358 | 0x2B, 0x2D, 0xB0, 0x1D, 0x2C, 0xB1, 0x09, 0x13, 0x2B, 0x2D, 1359 | 0xB0, 0x1E, 0x2C, 0x00, 0xB0, 0x0D, 0x2B, 0xB1, 0x00, 0x02, 1360 | 0x45, 0x54, 0x58, 0xB0, 0x0F, 0x23, 0x42, 0x20, 0x45, 0xB0, 1361 | 0x0B, 0x23, 0x42, 0xB0, 0x0A, 0x23, 0xB0, 0x01, 0x60, 0x42, 1362 | 0x20, 0x60, 0xB0, 0x01, 0x61, 0xB5, 0x10, 0x10, 0x01, 0x00, 1363 | 0x0E, 0x00, 0x42, 0x42, 0x8A, 0x60, 0xB1, 0x12, 0x06, 0x2B, 1364 | 0xB0, 0x72, 0x2B, 0x1B, 0x22, 0x59, 0x2D, 0xB0, 0x1F, 0x2C, 1365 | 0xB1, 0x00, 0x1E, 0x2B, 0x2D, 0xB0, 0x20, 0x2C, 0xB1, 0x01, 1366 | 0x1E, 0x2B, 0x2D, 0xB0, 0x21, 0x2C, 0xB1, 0x02, 0x1E, 0x2B, 1367 | 0x2D, 0xB0, 0x22, 0x2C, 0xB1, 0x03, 0x1E, 0x2B, 0x2D, 0xB0, 1368 | 0x23, 0x2C, 0xB1, 0x04, 0x1E, 0x2B, 0x2D, 0xB0, 0x24, 0x2C, 1369 | 0xB1, 0x05, 0x1E, 0x2B, 0x2D, 0xB0, 0x25, 0x2C, 0xB1, 0x06, 1370 | 0x1E, 0x2B, 0x2D, 0xB0, 0x26, 0x2C, 0xB1, 0x07, 0x1E, 0x2B, 1371 | 0x2D, 0xB0, 0x27, 0x2C, 0xB1, 0x08, 0x1E, 0x2B, 0x2D, 0xB0, 1372 | 0x28, 0x2C, 0xB1, 0x09, 0x1E, 0x2B, 0x2D, 0xB0, 0x29, 0x2C, 1373 | 0x20, 0x3C, 0xB0, 0x01, 0x60, 0x2D, 0xB0, 0x2A, 0x2C, 0x20, 1374 | 0x60, 0xB0, 0x10, 0x60, 0x20, 0x43, 0x23, 0xB0, 0x01, 0x60, 1375 | 0x43, 0xB0, 0x02, 0x25, 0x61, 0xB0, 0x01, 0x60, 0xB0, 0x29, 1376 | 0x2A, 0x21, 0x2D, 0xB0, 0x2B, 0x2C, 0xB0, 0x2A, 0x2B, 0xB0, 1377 | 0x2A, 0x2A, 0x2D, 0xB0, 0x2C, 0x2C, 0x20, 0x20, 0x47, 0x20, 1378 | 0x20, 0xB0, 0x0B, 0x43, 0x63, 0xB8, 0x04, 0x00, 0x62, 0x20, 1379 | 0xB0, 0x00, 0x50, 0x58, 0xB0, 0x40, 0x60, 0x59, 0x66, 0xB0, 1380 | 0x01, 0x63, 0x60, 0x23, 0x61, 0x38, 0x23, 0x20, 0x8A, 0x55, 1381 | 0x58, 0x20, 0x47, 0x20, 0x20, 0xB0, 0x0B, 0x43, 0x63, 0xB8, 1382 | 0x04, 0x00, 0x62, 0x20, 0xB0, 0x00, 0x50, 0x58, 0xB0, 0x40, 1383 | 0x60, 0x59, 0x66, 0xB0, 0x01, 0x63, 0x60, 0x23, 0x61, 0x38, 1384 | 0x1B, 0x21, 0x59, 0x2D, 0xB0, 0x2D, 0x2C, 0x00, 0xB1, 0x00, 1385 | 0x02, 0x45, 0x54, 0x58, 0xB0, 0x01, 0x16, 0xB0, 0x2C, 0x2A, 1386 | 0xB0, 0x01, 0x15, 0x30, 0x1B, 0x22, 0x59, 0x2D, 0xB0, 0x2E, 1387 | 0x2C, 0x00, 0xB0, 0x0D, 0x2B, 0xB1, 0x00, 0x02, 0x45, 0x54, 1388 | 0x58, 0xB0, 0x01, 0x16, 0xB0, 0x2C, 0x2A, 0xB0, 0x01, 0x15, 1389 | 0x30, 0x1B, 0x22, 0x59, 0x2D, 0xB0, 0x2F, 0x2C, 0x20, 0x35, 1390 | 0xB0, 0x01, 0x60, 0x2D, 0xB0, 0x30, 0x2C, 0x00, 0xB0, 0x01, 1391 | 0x45, 0x63, 0xB8, 0x04, 0x00, 0x62, 0x20, 0xB0, 0x00, 0x50, 1392 | 0x58, 0xB0, 0x40, 0x60, 0x59, 0x66, 0xB0, 0x01, 0x63, 0xB0, 1393 | 0x01, 0x2B, 0xB0, 0x0B, 0x43, 0x63, 0xB8, 0x04, 0x00, 0x62, 1394 | 0x20, 0xB0, 0x00, 0x50, 0x58, 0xB0, 0x40, 0x60, 0x59, 0x66, 1395 | 0xB0, 0x01, 0x63, 0xB0, 0x01, 0x2B, 0xB0, 0x00, 0x16, 0xB4, 1396 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x3E, 0x23, 0x38, 0xB1, 1397 | 0x2F, 0x01, 0x15, 0x2A, 0x2D, 0xB0, 0x31, 0x2C, 0x20, 0x3C, 1398 | 0x20, 0x47, 0x20, 0xB0, 0x0B, 0x43, 0x63, 0xB8, 0x04, 0x00, 1399 | 0x62, 0x20, 0xB0, 0x00, 0x50, 0x58, 0xB0, 0x40, 0x60, 0x59, 1400 | 0x66, 0xB0, 0x01, 0x63, 0x60, 0xB0, 0x00, 0x43, 0x61, 0x38, 1401 | 0x2D, 0xB0, 0x32, 0x2C, 0x2E, 0x17, 0x3C, 0x2D, 0xB0, 0x33, 1402 | 0x2C, 0x20, 0x3C, 0x20, 0x47, 0x20, 0xB0, 0x0B, 0x43, 0x63, 1403 | 0xB8, 0x04, 0x00, 0x62, 0x20, 0xB0, 0x00, 0x50, 0x58, 0xB0, 1404 | 0x40, 0x60, 0x59, 0x66, 0xB0, 0x01, 0x63, 0x60, 0xB0, 0x00, 1405 | 0x43, 0x61, 0xB0, 0x01, 0x43, 0x63, 0x38, 0x2D, 0xB0, 0x34, 1406 | 0x2C, 0xB1, 0x02, 0x00, 0x16, 0x25, 0x20, 0x2E, 0x20, 0x47, 1407 | 0xB0, 0x00, 0x23, 0x42, 0xB0, 0x02, 0x25, 0x49, 0x8A, 0x8A, 1408 | 0x47, 0x23, 0x47, 0x23, 0x61, 0x20, 0x58, 0x62, 0x1B, 0x21, 1409 | 0x59, 0xB0, 0x01, 0x23, 0x42, 0xB2, 0x33, 0x01, 0x01, 0x15, 1410 | 0x14, 0x2A, 0x2D, 0xB0, 0x35, 0x2C, 0xB0, 0x00, 0x16, 0xB0, 1411 | 0x04, 0x25, 0xB0, 0x04, 0x25, 0x47, 0x23, 0x47, 0x23, 0x61, 1412 | 0xB0, 0x09, 0x43, 0x2B, 0x65, 0x8A, 0x2E, 0x23, 0x20, 0x20, 1413 | 0x3C, 0x8A, 0x38, 0x2D, 0xB0, 0x36, 0x2C, 0xB0, 0x00, 0x16, 1414 | 0xB0, 0x04, 0x25, 0xB0, 0x04, 0x25, 0x20, 0x2E, 0x47, 0x23, 1415 | 0x47, 0x23, 0x61, 0x20, 0xB0, 0x04, 0x23, 0x42, 0xB0, 0x09, 1416 | 0x43, 0x2B, 0x20, 0xB0, 0x60, 0x50, 0x58, 0x20, 0xB0, 0x40, 1417 | 0x51, 0x58, 0xB3, 0x02, 0x20, 0x03, 0x20, 0x1B, 0xB3, 0x02, 1418 | 0x26, 0x03, 0x1A, 0x59, 0x42, 0x42, 0x23, 0x20, 0xB0, 0x08, 1419 | 0x43, 0x20, 0x8A, 0x23, 0x47, 0x23, 0x47, 0x23, 0x61, 0x23, 1420 | 0x46, 0x60, 0xB0, 0x04, 0x43, 0xB0, 0x02, 0x62, 0x20, 0xB0, 1421 | 0x00, 0x50, 0x58, 0xB0, 0x40, 0x60, 0x59, 0x66, 0xB0, 0x01, 1422 | 0x63, 0x60, 0x20, 0xB0, 0x01, 0x2B, 0x20, 0x8A, 0x8A, 0x61, 1423 | 0x20, 0xB0, 0x02, 0x43, 0x60, 0x64, 0x23, 0xB0, 0x03, 0x43, 1424 | 0x61, 0x64, 0x50, 0x58, 0xB0, 0x02, 0x43, 0x61, 0x1B, 0xB0, 1425 | 0x03, 0x43, 0x60, 0x59, 0xB0, 0x03, 0x25, 0xB0, 0x02, 0x62, 1426 | 0x20, 0xB0, 0x00, 0x50, 0x58, 0xB0, 0x40, 0x60, 0x59, 0x66, 1427 | 0xB0, 0x01, 0x63, 0x61, 0x23, 0x20, 0x20, 0xB0, 0x04, 0x26, 1428 | 0x23, 0x46, 0x61, 0x38, 0x1B, 0x23, 0xB0, 0x08, 0x43, 0x46, 1429 | 0xB0, 0x02, 0x25, 0xB0, 0x08, 0x43, 0x47, 0x23, 0x47, 0x23, 1430 | 0x61, 0x60, 0x20, 0xB0, 0x04, 0x43, 0xB0, 0x02, 0x62, 0x20, 1431 | 0xB0, 0x00, 0x50, 0x58, 0xB0, 0x40, 0x60, 0x59, 0x66, 0xB0, 1432 | 0x01, 0x63, 0x60, 0x23, 0x20, 0xB0, 0x01, 0x2B, 0x23, 0xB0, 1433 | 0x04, 0x43, 0x60, 0xB0, 0x01, 0x2B, 0xB0, 0x05, 0x25, 0x61, 1434 | 0xB0, 0x05, 0x25, 0xB0, 0x02, 0x62, 0x20, 0xB0, 0x00, 0x50, 1435 | 0x58, 0xB0, 0x40, 0x60, 0x59, 0x66, 0xB0, 0x01, 0x63, 0xB0, 1436 | 0x04, 0x26, 0x61, 0x20, 0xB0, 0x04, 0x25, 0x60, 0x64, 0x23, 1437 | 0xB0, 0x03, 0x25, 0x60, 0x64, 0x50, 0x58, 0x21, 0x1B, 0x23, 1438 | 0x21, 0x59, 0x23, 0x20, 0x20, 0xB0, 0x04, 0x26, 0x23, 0x46, 1439 | 0x61, 0x38, 0x59, 0x2D, 0xB0, 0x37, 0x2C, 0xB0, 0x00, 0x16, 1440 | 0x20, 0x20, 0x20, 0xB0, 0x05, 0x26, 0x20, 0x2E, 0x47, 0x23, 1441 | 0x47, 0x23, 0x61, 0x23, 0x3C, 0x38, 0x2D, 0xB0, 0x38, 0x2C, 1442 | 0xB0, 0x00, 0x16, 0x20, 0xB0, 0x08, 0x23, 0x42, 0x20, 0x20, 1443 | 0x20, 0x46, 0x23, 0x47, 0xB0, 0x01, 0x2B, 0x23, 0x61, 0x38, 1444 | 0x2D, 0xB0, 0x39, 0x2C, 0xB0, 0x00, 0x16, 0xB0, 0x03, 0x25, 1445 | 0xB0, 0x02, 0x25, 0x47, 0x23, 0x47, 0x23, 0x61, 0xB0, 0x00, 1446 | 0x54, 0x58, 0x2E, 0x20, 0x3C, 0x23, 0x21, 0x1B, 0xB0, 0x02, 1447 | 0x25, 0xB0, 0x02, 0x25, 0x47, 0x23, 0x47, 0x23, 0x61, 0x20, 1448 | 0xB0, 0x05, 0x25, 0xB0, 0x04, 0x25, 0x47, 0x23, 0x47, 0x23, 1449 | 0x61, 0xB0, 0x06, 0x25, 0xB0, 0x05, 0x25, 0x49, 0xB0, 0x02, 1450 | 0x25, 0x61, 0xB9, 0x08, 0x00, 0x08, 0x00, 0x63, 0x63, 0x23, 1451 | 0x20, 0x58, 0x62, 0x1B, 0x21, 0x59, 0x63, 0xB8, 0x04, 0x00, 1452 | 0x62, 0x20, 0xB0, 0x00, 0x50, 0x58, 0xB0, 0x40, 0x60, 0x59, 1453 | 0x66, 0xB0, 0x01, 0x63, 0x60, 0x23, 0x2E, 0x23, 0x20, 0x20, 1454 | 0x3C, 0x8A, 0x38, 0x23, 0x21, 0x59, 0x2D, 0xB0, 0x3A, 0x2C, 1455 | 0xB0, 0x00, 0x16, 0x20, 0xB0, 0x08, 0x43, 0x20, 0x2E, 0x47, 1456 | 0x23, 0x47, 0x23, 0x61, 0x20, 0x60, 0xB0, 0x20, 0x60, 0x66, 1457 | 0xB0, 0x02, 0x62, 0x20, 0xB0, 0x00, 0x50, 0x58, 0xB0, 0x40, 1458 | 0x60, 0x59, 0x66, 0xB0, 0x01, 0x63, 0x23, 0x20, 0x20, 0x3C, 1459 | 0x8A, 0x38, 0x2D, 0xB0, 0x3B, 0x2C, 0x23, 0x20, 0x2E, 0x46, 1460 | 0xB0, 0x02, 0x25, 0x46, 0x52, 0x58, 0x20, 0x3C, 0x59, 0x2E, 1461 | 0xB1, 0x2B, 0x01, 0x14, 0x2B, 0x2D, 0xB0, 0x3C, 0x2C, 0x23, 1462 | 0x20, 0x2E, 0x46, 0xB0, 0x02, 0x25, 0x46, 0x50, 0x58, 0x20, 1463 | 0x3C, 0x59, 0x2E, 0xB1, 0x2B, 0x01, 0x14, 0x2B, 0x2D, 0xB0, 1464 | 0x3D, 0x2C, 0x23, 0x20, 0x2E, 0x46, 0xB0, 0x02, 0x25, 0x46, 1465 | 0x52, 0x58, 0x20, 0x3C, 0x59, 0x23, 0x20, 0x2E, 0x46, 0xB0, 1466 | 0x02, 0x25, 0x46, 0x50, 0x58, 0x20, 0x3C, 0x59, 0x2E, 0xB1, 1467 | 0x2B, 0x01, 0x14, 0x2B, 0x2D, 0xB0, 0x3E, 0x2C, 0xB0, 0x35, 1468 | 0x2B, 0x23, 0x20, 0x2E, 0x46, 0xB0, 0x02, 0x25, 0x46, 0x52, 1469 | 0x58, 0x20, 0x3C, 0x59, 0x2E, 0xB1, 0x2B, 0x01, 0x14, 0x2B, 1470 | 0x2D, 0xB0, 0x3F, 0x2C, 0xB0, 0x36, 0x2B, 0x8A, 0x20, 0x20, 1471 | 0x3C, 0xB0, 0x04, 0x23, 0x42, 0x8A, 0x38, 0x23, 0x20, 0x2E, 1472 | 0x46, 0xB0, 0x02, 0x25, 0x46, 0x52, 0x58, 0x20, 0x3C, 0x59, 1473 | 0x2E, 0xB1, 0x2B, 0x01, 0x14, 0x2B, 0xB0, 0x04, 0x43, 0x2E, 1474 | 0xB0, 0x2B, 0x2B, 0x2D, 0xB0, 0x40, 0x2C, 0xB0, 0x00, 0x16, 1475 | 0xB0, 0x04, 0x25, 0xB0, 0x04, 0x26, 0x20, 0x2E, 0x47, 0x23, 1476 | 0x47, 0x23, 0x61, 0xB0, 0x09, 0x43, 0x2B, 0x23, 0x20, 0x3C, 1477 | 0x20, 0x2E, 0x23, 0x38, 0xB1, 0x2B, 0x01, 0x14, 0x2B, 0x2D, 1478 | 0xB0, 0x41, 0x2C, 0xB1, 0x08, 0x04, 0x25, 0x42, 0xB0, 0x00, 1479 | 0x16, 0xB0, 0x04, 0x25, 0xB0, 0x04, 0x25, 0x20, 0x2E, 0x47, 1480 | 0x23, 0x47, 0x23, 0x61, 0x20, 0xB0, 0x04, 0x23, 0x42, 0xB0, 1481 | 0x09, 0x43, 0x2B, 0x20, 0xB0, 0x60, 0x50, 0x58, 0x20, 0xB0, 1482 | 0x40, 0x51, 0x58, 0xB3, 0x02, 0x20, 0x03, 0x20, 0x1B, 0xB3, 1483 | 0x02, 0x26, 0x03, 0x1A, 0x59, 0x42, 0x42, 0x23, 0x20, 0x47, 1484 | 0xB0, 0x04, 0x43, 0xB0, 0x02, 0x62, 0x20, 0xB0, 0x00, 0x50, 1485 | 0x58, 0xB0, 0x40, 0x60, 0x59, 0x66, 0xB0, 0x01, 0x63, 0x60, 1486 | 0x20, 0xB0, 0x01, 0x2B, 0x20, 0x8A, 0x8A, 0x61, 0x20, 0xB0, 1487 | 0x02, 0x43, 0x60, 0x64, 0x23, 0xB0, 0x03, 0x43, 0x61, 0x64, 1488 | 0x50, 0x58, 0xB0, 0x02, 0x43, 0x61, 0x1B, 0xB0, 0x03, 0x43, 1489 | 0x60, 0x59, 0xB0, 0x03, 0x25, 0xB0, 0x02, 0x62, 0x20, 0xB0, 1490 | 0x00, 0x50, 0x58, 0xB0, 0x40, 0x60, 0x59, 0x66, 0xB0, 0x01, 1491 | 0x63, 0x61, 0xB0, 0x02, 0x25, 0x46, 0x61, 0x38, 0x23, 0x20, 1492 | 0x3C, 0x23, 0x38, 0x1B, 0x21, 0x20, 0x20, 0x46, 0x23, 0x47, 1493 | 0xB0, 0x01, 0x2B, 0x23, 0x61, 0x38, 0x21, 0x59, 0xB1, 0x2B, 1494 | 0x01, 0x14, 0x2B, 0x2D, 0xB0, 0x42, 0x2C, 0xB0, 0x35, 0x2B, 1495 | 0x2E, 0xB1, 0x2B, 0x01, 0x14, 0x2B, 0x2D, 0xB0, 0x43, 0x2C, 1496 | 0xB0, 0x36, 0x2B, 0x21, 0x23, 0x20, 0x20, 0x3C, 0xB0, 0x04, 1497 | 0x23, 0x42, 0x23, 0x38, 0xB1, 0x2B, 0x01, 0x14, 0x2B, 0xB0, 1498 | 0x04, 0x43, 0x2E, 0xB0, 0x2B, 0x2B, 0x2D, 0xB0, 0x44, 0x2C, 1499 | 0xB0, 0x00, 0x15, 0x20, 0x47, 0xB0, 0x00, 0x23, 0x42, 0xB2, 1500 | 0x00, 0x01, 0x01, 0x15, 0x14, 0x13, 0x2E, 0xB0, 0x31, 0x2A, 1501 | 0x2D, 0xB0, 0x45, 0x2C, 0xB0, 0x00, 0x15, 0x20, 0x47, 0xB0, 1502 | 0x00, 0x23, 0x42, 0xB2, 0x00, 0x01, 0x01, 0x15, 0x14, 0x13, 1503 | 0x2E, 0xB0, 0x31, 0x2A, 0x2D, 0xB0, 0x46, 0x2C, 0xB1, 0x00, 1504 | 0x01, 0x14, 0x13, 0xB0, 0x32, 0x2A, 0x2D, 0xB0, 0x47, 0x2C, 1505 | 0xB0, 0x34, 0x2A, 0x2D, 0xB0, 0x48, 0x2C, 0xB0, 0x00, 0x16, 1506 | 0x45, 0x23, 0x20, 0x2E, 0x20, 0x46, 0x8A, 0x23, 0x61, 0x38, 1507 | 0xB1, 0x2B, 0x01, 0x14, 0x2B, 0x2D, 0xB0, 0x49, 0x2C, 0xB0, 1508 | 0x08, 0x23, 0x42, 0xB0, 0x48, 0x2B, 0x2D, 0xB0, 0x4A, 0x2C, 1509 | 0xB2, 0x00, 0x00, 0x41, 0x2B, 0x2D, 0xB0, 0x4B, 0x2C, 0xB2, 1510 | 0x00, 0x01, 0x41, 0x2B, 0x2D, 0xB0, 0x4C, 0x2C, 0xB2, 0x01, 1511 | 0x00, 0x41, 0x2B, 0x2D, 0xB0, 0x4D, 0x2C, 0xB2, 0x01, 0x01, 1512 | 0x41, 0x2B, 0x2D, 0xB0, 0x4E, 0x2C, 0xB2, 0x00, 0x00, 0x42, 1513 | 0x2B, 0x2D, 0xB0, 0x4F, 0x2C, 0xB2, 0x00, 0x01, 0x42, 0x2B, 1514 | 0x2D, 0xB0, 0x50, 0x2C, 0xB2, 0x01, 0x00, 0x42, 0x2B, 0x2D, 1515 | 0xB0, 0x51, 0x2C, 0xB2, 0x01, 0x01, 0x42, 0x2B, 0x2D, 0xB0, 1516 | 0x52, 0x2C, 0xB2, 0x00, 0x00, 0x3E, 0x2B, 0x2D, 0xB0, 0x53, 1517 | 0x2C, 0xB2, 0x00, 0x01, 0x3E, 0x2B, 0x2D, 0xB0, 0x54, 0x2C, 1518 | 0xB2, 0x01, 0x00, 0x3E, 0x2B, 0x2D, 0xB0, 0x55, 0x2C, 0xB2, 1519 | 0x01, 0x01, 0x3E, 0x2B, 0x2D, 0xB0, 0x56, 0x2C, 0xB2, 0x00, 1520 | 0x00, 0x40, 0x2B, 0x2D, 0xB0, 0x57, 0x2C, 0xB2, 0x00, 0x01, 1521 | 0x40, 0x2B, 0x2D, 0xB0, 0x58, 0x2C, 0xB2, 0x01, 0x00, 0x40, 1522 | 0x2B, 0x2D, 0xB0, 0x59, 0x2C, 0xB2, 0x01, 0x01, 0x40, 0x2B, 1523 | 0x2D, 0xB0, 0x5A, 0x2C, 0xB2, 0x00, 0x00, 0x43, 0x2B, 0x2D, 1524 | 0xB0, 0x5B, 0x2C, 0xB2, 0x00, 0x01, 0x43, 0x2B, 0x2D, 0xB0, 1525 | 0x5C, 0x2C, 0xB2, 0x01, 0x00, 0x43, 0x2B, 0x2D, 0xB0, 0x5D, 1526 | 0x2C, 0xB2, 0x01, 0x01, 0x43, 0x2B, 0x2D, 0xB0, 0x5E, 0x2C, 1527 | 0xB2, 0x00, 0x00, 0x3F, 0x2B, 0x2D, 0xB0, 0x5F, 0x2C, 0xB2, 1528 | 0x00, 0x01, 0x3F, 0x2B, 0x2D, 0xB0, 0x60, 0x2C, 0xB2, 0x01, 1529 | 0x00, 0x3F, 0x2B, 0x2D, 0xB0, 0x61, 0x2C, 0xB2, 0x01, 0x01, 1530 | 0x3F, 0x2B, 0x2D, 0xB0, 0x62, 0x2C, 0xB0, 0x37, 0x2B, 0x2E, 1531 | 0xB1, 0x2B, 0x01, 0x14, 0x2B, 0x2D, 0xB0, 0x63, 0x2C, 0xB0, 1532 | 0x37, 0x2B, 0xB0, 0x3B, 0x2B, 0x2D, 0xB0, 0x64, 0x2C, 0xB0, 1533 | 0x37, 0x2B, 0xB0, 0x3C, 0x2B, 0x2D, 0xB0, 0x65, 0x2C, 0xB0, 1534 | 0x00, 0x16, 0xB0, 0x37, 0x2B, 0xB0, 0x3D, 0x2B, 0x2D, 0xB0, 1535 | 0x66, 0x2C, 0xB0, 0x38, 0x2B, 0x2E, 0xB1, 0x2B, 0x01, 0x14, 1536 | 0x2B, 0x2D, 0xB0, 0x67, 0x2C, 0xB0, 0x38, 0x2B, 0xB0, 0x3B, 1537 | 0x2B, 0x2D, 0xB0, 0x68, 0x2C, 0xB0, 0x38, 0x2B, 0xB0, 0x3C, 1538 | 0x2B, 0x2D, 0xB0, 0x69, 0x2C, 0xB0, 0x38, 0x2B, 0xB0, 0x3D, 1539 | 0x2B, 0x2D, 0xB0, 0x6A, 0x2C, 0xB0, 0x39, 0x2B, 0x2E, 0xB1, 1540 | 0x2B, 0x01, 0x14, 0x2B, 0x2D, 0xB0, 0x6B, 0x2C, 0xB0, 0x39, 1541 | 0x2B, 0xB0, 0x3B, 0x2B, 0x2D, 0xB0, 0x6C, 0x2C, 0xB0, 0x39, 1542 | 0x2B, 0xB0, 0x3C, 0x2B, 0x2D, 0xB0, 0x6D, 0x2C, 0xB0, 0x39, 1543 | 0x2B, 0xB0, 0x3D, 0x2B, 0x2D, 0xB0, 0x6E, 0x2C, 0xB0, 0x3A, 1544 | 0x2B, 0x2E, 0xB1, 0x2B, 0x01, 0x14, 0x2B, 0x2D, 0xB0, 0x6F, 1545 | 0x2C, 0xB0, 0x3A, 0x2B, 0xB0, 0x3B, 0x2B, 0x2D, 0xB0, 0x70, 1546 | 0x2C, 0xB0, 0x3A, 0x2B, 0xB0, 0x3C, 0x2B, 0x2D, 0xB0, 0x71, 1547 | 0x2C, 0xB0, 0x3A, 0x2B, 0xB0, 0x3D, 0x2B, 0x2D, 0xB0, 0x72, 1548 | 0x2C, 0xB3, 0x09, 0x04, 0x02, 0x03, 0x45, 0x58, 0x21, 0x1B, 1549 | 0x23, 0x21, 0x59, 0x42, 0x2B, 0xB0, 0x08, 0x65, 0xB0, 0x03, 1550 | 0x24, 0x50, 0x78, 0xB0, 0x01, 0x15, 0x30, 0x2D, 0x00, 0x4B, 1551 | 0xB8, 0x00, 0xC8, 0x52, 0x58, 0xB1, 0x01, 0x01, 0x8E, 0x59, 1552 | 0xB0, 0x01, 0xB9, 0x08, 0x00, 0x08, 0x00, 0x63, 0x70, 0xB1, 1553 | 0x00, 0x05, 0x42, 0xB2, 0x13, 0x01, 0x00, 0x2A, 0xB1, 0x00, 1554 | 0x05, 0x42, 0xB3, 0x0A, 0x06, 0x01, 0x08, 0x2A, 0xB1, 0x00, 1555 | 0x05, 0x42, 0xB3, 0x12, 0x04, 0x01, 0x08, 0x2A, 0xB1, 0x00, 1556 | 0x06, 0x42, 0xBA, 0x02, 0xC0, 0x00, 0x01, 0x00, 0x09, 0x2A, 1557 | 0xB1, 0x00, 0x07, 0x42, 0xBA, 0x00, 0x40, 0x00, 0x01, 0x00, 1558 | 0x09, 0x2A, 0xB1, 0x03, 0x00, 0x44, 0xB1, 0x24, 0x01, 0x88, 1559 | 0x51, 0x58, 0xB0, 0x40, 0x88, 0x58, 0xB1, 0x03, 0x64, 0x44, 1560 | 0xB1, 0x26, 0x01, 0x88, 0x51, 0x58, 0xBA, 0x08, 0x80, 0x00, 1561 | 0x01, 0x04, 0x40, 0x88, 0x63, 0x54, 0x58, 0xB1, 0x03, 0x00, 1562 | 0x44, 0x59, 0x59, 0x59, 0x59, 0xB3, 0x0C, 0x06, 0x01, 0x0C, 1563 | 0x2A, 0xB8, 0x01, 0xFF, 0x85, 0xB0, 0x04, 0x8D, 0xB1, 0x02, 1564 | 0x00, 0x44, 0x00, 0x00 1565 | }; 1566 | 1567 | 1568 | 1569 | } 1570 | --------------------------------------------------------------------------------