diff options
39 files changed, 707 insertions, 670 deletions
diff --git a/mapbox-gl-js b/mapbox-gl-js -Subproject ed3d0e10ad36050e4ea63deb4c1b0733ac6a0e3 +Subproject f791754ec31a07fcb5ae2c3ca5daa9a0384ae9d diff --git a/package.json b/package.json index 413d1776a9..7b12cdcb79 100644 --- a/package.json +++ b/package.json @@ -18,22 +18,22 @@ "npm-run-all": "^4.0.2" }, "devDependencies": { + "@mapbox/flow-remove-types": "^1.3.0-await.upstream.2", "@octokit/rest": "^16.0.0", "@octokit/plugin-retry": "^2.2.0", "aws-sdk": "^2.285.1", - "csscolorparser": "^1.0.2", - "ejs": "^2.4.1", - "esm": "^3.0.84", + "csscolorparser": "~1.0.2", + "ejs": "^2.5.7", + "esm": "~3.0.84", "express": "^4.11.1", - "flow-remove-types": "^1.2.1", - "json-stringify-pretty-compact": "^1.0.4", + "json-stringify-pretty-compact": "^2.0.0", "jsonwebtoken": "^8.3.0", "lodash": "^4.16.4", "mapbox-gl-styles": "2.0.2", "pixelmatch": "^4.0.2", - "pngjs": "^3.0.0", + "pngjs": "^3.4.0", "pretty-bytes": "^5.1.0", - "request": "^2.72.0", + "request": "^2.88.0", "semver": "^5.5.0", "tape": "^4.5.1", "xcode": "^1.0.0" diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/Property.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/Property.java index 84285a1c54..0a1d1cacbe 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/Property.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/Property.java @@ -111,7 +111,7 @@ public final class Property { // SYMBOL_Z_ORDER: Controls the order in which overlapping symbols in the same layer are rendered /** - * If {@link SYMBOL_SORT_KEY} is set, sort based on that. Otherwise sort symbols by their position relative to the viewport. + * If {@link SYMBOL_SORT_KEY} is set, sort based on that. Otherwise sort symbols by their y-position relative to the viewport. */ public static final String SYMBOL_Z_ORDER_AUTO = "auto"; /** diff --git a/platform/darwin/src/MGLSymbolStyleLayer.h b/platform/darwin/src/MGLSymbolStyleLayer.h index cbe3464346..f0a2472dba 100644 --- a/platform/darwin/src/MGLSymbolStyleLayer.h +++ b/platform/darwin/src/MGLSymbolStyleLayer.h @@ -159,7 +159,7 @@ typedef NS_ENUM(NSUInteger, MGLSymbolPlacement) { typedef NS_ENUM(NSUInteger, MGLSymbolZOrder) { /** If `MGLSymbolStyleLayer.symbolSortKey` is set, sort based on that. - Otherwise sort symbols by their position relative to the viewport. + Otherwise sort symbols by their y-position relative to the viewport. */ MGLSymbolZOrderAuto, /** @@ -1075,7 +1075,7 @@ MGL_EXPORT * Constant `MGLSymbolZOrder` values * Any of the following constant string values: * `auto`: If `symbol-sort-key` is set, sort based on that. Otherwise sort - symbols by their position relative to the viewport. + symbols by their y-position relative to the viewport. * `viewport-y`: Specify this z order if symbols’ appearance relies on lower features overlapping higher features. For example, symbols with a pin-like appearance would require this z order. @@ -1500,6 +1500,9 @@ MGL_EXPORT This property is measured in ems. + The default value of this property is an expression that evaluates to the float + `0`. Set this property to `nil` to reset it to the default value. + This property is only applied to the style if `textOffset` is set to `nil`. Otherwise, it is ignored. diff --git a/platform/node/test/ignores.json b/platform/node/test/ignores.json index 0ffb8f1d6c..acc8724a29 100644 --- a/platform/node/test/ignores.json +++ b/platform/node/test/ignores.json @@ -71,6 +71,7 @@ "query-tests/regressions/mapbox-gl-js#6555": "skip - no querySourceFeatures in mbgl-node; needs issue", "render-tests/background-color/transition": "https://github.com/mapbox/mapbox-gl-native/issues/10619", "render-tests/canvas/default": "skip - js specific", + "render-tests/canvas/update": "skip - js specific", "render-tests/collator/resolved-locale": "Some test platforms don't resolve 'en' locale", "render-tests/collator/default": "Some test platforms don't resolve 'en' locale", "render-tests/custom-layer-js/depth": "skip - js specific", @@ -155,6 +156,8 @@ "render-tests/remove-feature-state/data-expression": "https://github.com/mapbox/mapbox-gl-native/issues/12413", "render-tests/remove-feature-state/default": "https://github.com/mapbox/mapbox-gl-native/issues/12413", "render-tests/remove-feature-state/vector-source": "https://github.com/mapbox/mapbox-gl-native/issues/12413", + "render-tests/regressions/mapbox-gl-js#8026": "skip - js specific", + "render-tests/fill-extrusion-geometry/linestring": "https://github.com/mapbox/mapbox-gl-native/pull/14240", "query-tests/remove-feature-state/default": "https://github.com/mapbox/mapbox-gl-native/issues/12413", "query-tests/fill-extrusion/base-in": "https://github.com/mapbox/mapbox-gl-native/issues/13139", "query-tests/fill-extrusion/box-in": "https://github.com/mapbox/mapbox-gl-native/issues/13139", @@ -164,6 +167,7 @@ "query-tests/fill-extrusion/sort-rotated": "https://github.com/mapbox/mapbox-gl-native/issues/13139", "query-tests/fill-extrusion/sort": "https://github.com/mapbox/mapbox-gl-native/issues/13139", "query-tests/fill-extrusion/top-in": "https://github.com/mapbox/mapbox-gl-native/issues/13139", + "query-tests/regressions/mapbox-gl-js#7883": "https://github.com/mapbox/mapbox-gl-native/issues/14585", "expression-tests/number-format/currency": "https://github.com/mapbox/mapbox-gl-native/issues/13632", "expression-tests/number-format/default": "https://github.com/mapbox/mapbox-gl-native/issues/13632", "expression-tests/number-format/precision": "https://github.com/mapbox/mapbox-gl-native/issues/13632" diff --git a/scripts/generate-shaders.js b/scripts/generate-shaders.js index df01ca4743..3fe6cafaf6 100755 --- a/scripts/generate-shaders.js +++ b/scripts/generate-shaders.js @@ -1,6 +1,6 @@ #!/usr/bin/env node -require('flow-remove-types/register'); +require('@mapbox/flow-remove-types/register'); const path = require('path'); const outputPath = 'src/mbgl/programs'; diff --git a/src/mbgl/programs/circle_program.hpp b/src/mbgl/programs/circle_program.hpp index 2b218d1768..c9e03d05ed 100644 --- a/src/mbgl/programs/circle_program.hpp +++ b/src/mbgl/programs/circle_program.hpp @@ -21,6 +21,7 @@ class CircleProgram : public Program< uniforms::matrix, uniforms::scale_with_map, uniforms::extrude_scale, + uniforms::device_pixel_ratio, uniforms::camera_to_center_distance, uniforms::pitch_with_map>, TypeList<>, diff --git a/src/mbgl/programs/gl/circle.cpp b/src/mbgl/programs/gl/circle.cpp index d1f1e29d33..5cf7eef13c 100644 --- a/src/mbgl/programs/gl/circle.cpp +++ b/src/mbgl/programs/gl/circle.cpp @@ -15,9 +15,9 @@ struct ShaderSource; template <> struct ShaderSource<CircleProgram> { static constexpr const char* name = "circle"; - static constexpr const uint8_t hash[8] = { 0xf0, 0x3e, 0x18, 0xb7, 0x75, 0xb2, 0xde, 0xa9 }; + static constexpr const uint8_t hash[8] = { 0x1d, 0x47, 0x35, 0xbb, 0x94, 0x3d, 0x93, 0xca }; static constexpr const auto vertexOffset = 2927; - static constexpr const auto fragmentOffset = 6093; + static constexpr const auto fragmentOffset = 6135; }; constexpr const char* ShaderSource<CircleProgram>::name; @@ -43,10 +43,13 @@ uniform mat4 u_matrix; uniform bool u_scale_with_map; uniform bool u_pitch_with_map; uniform vec2 u_extrude_scale; +uniform lowp float u_device_pixel_ratio; uniform highp float u_camera_to_center_distance; attribute vec2 a_pos; +varying vec3 v_data; + #ifndef HAS_UNIFORM_u_color uniform lowp float u_color_t; @@ -111,8 +114,6 @@ uniform lowp float u_stroke_opacity; #endif -varying vec3 v_data; - void main(void) { #ifndef HAS_UNIFORM_u_color @@ -196,7 +197,7 @@ void main(void) { // This is a minimum blur distance that serves as a faux-antialiasing for // the circle. since blur is a ratio of the circle's size and the intent is // to keep the blur at roughly 1px, the two are inversely related. - lowp float antialiasblur = 1.0 / DEVICE_PIXEL_RATIO / (radius + stroke_width); + lowp float antialiasblur = 1.0 / u_device_pixel_ratio / (radius + stroke_width); v_data = vec3(extrude.x, extrude.y, antialiasblur); } @@ -205,6 +206,8 @@ void main(void) { // Uncompressed source of circle.fragment.glsl: /* +varying vec3 v_data; + #ifndef HAS_UNIFORM_u_color varying highp vec4 color; @@ -255,8 +258,6 @@ uniform lowp float u_stroke_opacity; #endif -varying vec3 v_data; - void main() { #ifdef HAS_UNIFORM_u_color diff --git a/src/mbgl/programs/gl/clipping_mask.cpp b/src/mbgl/programs/gl/clipping_mask.cpp index 3179ab0c13..1b6c7b51c5 100644 --- a/src/mbgl/programs/gl/clipping_mask.cpp +++ b/src/mbgl/programs/gl/clipping_mask.cpp @@ -16,8 +16,8 @@ template <> struct ShaderSource<ClippingMaskProgram> { static constexpr const char* name = "clipping_mask"; static constexpr const uint8_t hash[8] = { 0x3e, 0x17, 0xc2, 0x3a, 0x1f, 0xf0, 0xa8, 0xa3 }; - static constexpr const auto vertexOffset = 7848; - static constexpr const auto fragmentOffset = 7944; + static constexpr const auto vertexOffset = 7891; + static constexpr const auto fragmentOffset = 7987; }; constexpr const char* ShaderSource<ClippingMaskProgram>::name; diff --git a/src/mbgl/programs/gl/collision_box.cpp b/src/mbgl/programs/gl/collision_box.cpp index f7ac4d4d67..89c4fe81ae 100644 --- a/src/mbgl/programs/gl/collision_box.cpp +++ b/src/mbgl/programs/gl/collision_box.cpp @@ -16,8 +16,8 @@ template <> struct ShaderSource<CollisionBoxProgram> { static constexpr const char* name = "collision_box"; static constexpr const uint8_t hash[8] = { 0xcb, 0x6a, 0x9b, 0xd1, 0x1f, 0x31, 0xf8, 0x5b }; - static constexpr const auto vertexOffset = 9956; - static constexpr const auto fragmentOffset = 10635; + static constexpr const auto vertexOffset = 10000; + static constexpr const auto fragmentOffset = 10679; }; constexpr const char* ShaderSource<CollisionBoxProgram>::name; diff --git a/src/mbgl/programs/gl/collision_circle.cpp b/src/mbgl/programs/gl/collision_circle.cpp index 8f1b5726fe..96f5d68ce5 100644 --- a/src/mbgl/programs/gl/collision_circle.cpp +++ b/src/mbgl/programs/gl/collision_circle.cpp @@ -16,8 +16,8 @@ template <> struct ShaderSource<CollisionCircleProgram> { static constexpr const char* name = "collision_circle"; static constexpr const uint8_t hash[8] = { 0x99, 0x2e, 0xad, 0x8c, 0xd3, 0x88, 0xae, 0x82 }; - static constexpr const auto vertexOffset = 10858; - static constexpr const auto fragmentOffset = 11774; + static constexpr const auto vertexOffset = 10902; + static constexpr const auto fragmentOffset = 11818; }; constexpr const char* ShaderSource<CollisionCircleProgram>::name; diff --git a/src/mbgl/programs/gl/debug.cpp b/src/mbgl/programs/gl/debug.cpp index ad23f420ab..2e5db36dac 100644 --- a/src/mbgl/programs/gl/debug.cpp +++ b/src/mbgl/programs/gl/debug.cpp @@ -16,8 +16,8 @@ template <> struct ShaderSource<DebugProgram> { static constexpr const char* name = "debug"; static constexpr const uint8_t hash[8] = { 0xa8, 0x7d, 0x87, 0x6e, 0x36, 0xa8, 0x81, 0xe3 }; - static constexpr const auto vertexOffset = 12450; - static constexpr const auto fragmentOffset = 12546; + static constexpr const auto vertexOffset = 12494; + static constexpr const auto fragmentOffset = 12590; }; constexpr const char* ShaderSource<DebugProgram>::name; diff --git a/src/mbgl/programs/gl/fill.cpp b/src/mbgl/programs/gl/fill.cpp index a699f82609..7a281c24ba 100644 --- a/src/mbgl/programs/gl/fill.cpp +++ b/src/mbgl/programs/gl/fill.cpp @@ -16,8 +16,8 @@ template <> struct ShaderSource<FillProgram> { static constexpr const char* name = "fill"; static constexpr const uint8_t hash[8] = { 0x87, 0xea, 0x65, 0x7f, 0x0c, 0x9b, 0x97, 0x5d }; - static constexpr const auto vertexOffset = 12610; - static constexpr const auto fragmentOffset = 13254; + static constexpr const auto vertexOffset = 12654; + static constexpr const auto fragmentOffset = 13298; }; constexpr const char* ShaderSource<FillProgram>::name; diff --git a/src/mbgl/programs/gl/fill_extrusion.cpp b/src/mbgl/programs/gl/fill_extrusion.cpp index cd2c63d779..d90988070a 100644 --- a/src/mbgl/programs/gl/fill_extrusion.cpp +++ b/src/mbgl/programs/gl/fill_extrusion.cpp @@ -16,8 +16,8 @@ template <> struct ShaderSource<FillExtrusionProgram> { static constexpr const char* name = "fill_extrusion"; static constexpr const uint8_t hash[8] = { 0x9d, 0x76, 0x7f, 0xaa, 0x86, 0x57, 0x56, 0x96 }; - static constexpr const auto vertexOffset = 21238; - static constexpr const auto fragmentOffset = 23169; + static constexpr const auto vertexOffset = 21283; + static constexpr const auto fragmentOffset = 23214; }; constexpr const char* ShaderSource<FillExtrusionProgram>::name; diff --git a/src/mbgl/programs/gl/fill_extrusion_pattern.cpp b/src/mbgl/programs/gl/fill_extrusion_pattern.cpp index a18140f418..a6292b9fe1 100644 --- a/src/mbgl/programs/gl/fill_extrusion_pattern.cpp +++ b/src/mbgl/programs/gl/fill_extrusion_pattern.cpp @@ -16,8 +16,8 @@ template <> struct ShaderSource<FillExtrusionPatternProgram> { static constexpr const char* name = "fill_extrusion_pattern"; static constexpr const uint8_t hash[8] = { 0x5a, 0x8f, 0x1a, 0xbf, 0x43, 0x62, 0xf0, 0x86 }; - static constexpr const auto vertexOffset = 23285; - static constexpr const auto fragmentOffset = 26256; + static constexpr const auto vertexOffset = 23330; + static constexpr const auto fragmentOffset = 26301; }; constexpr const char* ShaderSource<FillExtrusionPatternProgram>::name; diff --git a/src/mbgl/programs/gl/fill_outline.cpp b/src/mbgl/programs/gl/fill_outline.cpp index e7644468a5..82d56710a7 100644 --- a/src/mbgl/programs/gl/fill_outline.cpp +++ b/src/mbgl/programs/gl/fill_outline.cpp @@ -15,9 +15,9 @@ struct ShaderSource; template <> struct ShaderSource<FillOutlineProgram> { static constexpr const char* name = "fill_outline"; - static constexpr const uint8_t hash[8] = { 0x56, 0x65, 0x69, 0x4b, 0x70, 0x2d, 0x3d, 0xc4 }; - static constexpr const auto vertexOffset = 13678; - static constexpr const auto fragmentOffset = 14503; + static constexpr const uint8_t hash[8] = { 0x51, 0x25, 0x43, 0x9d, 0x41, 0x73, 0xe1, 0xbb }; + static constexpr const auto vertexOffset = 13722; + static constexpr const auto fragmentOffset = 14547; }; constexpr const char* ShaderSource<FillOutlineProgram>::name; @@ -89,6 +89,8 @@ void main() { // Uncompressed source of fill_outline.fragment.glsl: /* +varying vec2 v_pos; + #ifndef HAS_UNIFORM_u_outline_color varying highp vec4 outline_color; @@ -104,8 +106,6 @@ uniform lowp float u_opacity; #endif -varying vec2 v_pos; - void main() { #ifdef HAS_UNIFORM_u_outline_color diff --git a/src/mbgl/programs/gl/fill_outline_pattern.cpp b/src/mbgl/programs/gl/fill_outline_pattern.cpp index 40aa5ea2de..7709991353 100644 --- a/src/mbgl/programs/gl/fill_outline_pattern.cpp +++ b/src/mbgl/programs/gl/fill_outline_pattern.cpp @@ -16,8 +16,8 @@ template <> struct ShaderSource<FillOutlinePatternProgram> { static constexpr const char* name = "fill_outline_pattern"; static constexpr const uint8_t hash[8] = { 0x56, 0x9c, 0x2f, 0x58, 0x6b, 0x31, 0xff, 0x84 }; - static constexpr const auto vertexOffset = 15092; - static constexpr const auto fragmentOffset = 16952; + static constexpr const auto vertexOffset = 15137; + static constexpr const auto fragmentOffset = 16997; }; constexpr const char* ShaderSource<FillOutlinePatternProgram>::name; diff --git a/src/mbgl/programs/gl/fill_pattern.cpp b/src/mbgl/programs/gl/fill_pattern.cpp index fd16d8bfc9..ff4f2045ac 100644 --- a/src/mbgl/programs/gl/fill_pattern.cpp +++ b/src/mbgl/programs/gl/fill_pattern.cpp @@ -16,8 +16,8 @@ template <> struct ShaderSource<FillPatternProgram> { static constexpr const char* name = "fill_pattern"; static constexpr const uint8_t hash[8] = { 0x74, 0xa9, 0x97, 0x01, 0x96, 0xbd, 0x87, 0x36 }; - static constexpr const auto vertexOffset = 18259; - static constexpr const auto fragmentOffset = 20038; + static constexpr const auto vertexOffset = 18304; + static constexpr const auto fragmentOffset = 20083; }; constexpr const char* ShaderSource<FillPatternProgram>::name; diff --git a/src/mbgl/programs/gl/heatmap.cpp b/src/mbgl/programs/gl/heatmap.cpp index 3b960f1bda..7685b568cb 100644 --- a/src/mbgl/programs/gl/heatmap.cpp +++ b/src/mbgl/programs/gl/heatmap.cpp @@ -15,9 +15,9 @@ struct ShaderSource; template <> struct ShaderSource<HeatmapProgram> { static constexpr const char* name = "heatmap"; - static constexpr const uint8_t hash[8] = { 0xab, 0x97, 0x81, 0x5c, 0xa2, 0x88, 0xaa, 0x7e }; - static constexpr const auto vertexOffset = 7983; - static constexpr const auto fragmentOffset = 9030; + static constexpr const uint8_t hash[8] = { 0xe5, 0xa4, 0x9c, 0x31, 0x01, 0xe5, 0x4a, 0xe0 }; + static constexpr const auto vertexOffset = 8026; + static constexpr const auto fragmentOffset = 9074; }; constexpr const char* ShaderSource<HeatmapProgram>::name; @@ -40,6 +40,16 @@ Context::createProgram<gl::Context>(const ProgramParameters& programParameters) // Uncompressed source of heatmap.vertex.glsl: /* +uniform mat4 u_matrix; +uniform float u_extrude_scale; +uniform float u_opacity; +uniform float u_intensity; + +attribute vec2 a_pos; + +varying vec2 v_extrude; + + #ifndef HAS_UNIFORM_u_weight uniform lowp float u_weight_t; attribute highp vec2 a_weight; @@ -57,15 +67,6 @@ uniform mediump float u_radius; #endif -uniform mat4 u_matrix; -uniform float u_extrude_scale; -uniform float u_opacity; -uniform float u_intensity; - -attribute vec2 a_pos; - -varying vec2 v_extrude; - // Effective "0" in the kernel density texture to adjust the kernel size to; // this empirically chosen number minimizes artifacts on overlapping kernels // for typical heatmap cases (assuming clustered source) @@ -124,6 +125,10 @@ void main(void) { // Uncompressed source of heatmap.fragment.glsl: /* +uniform highp float u_intensity; + +varying vec2 v_extrude; + #ifndef HAS_UNIFORM_u_weight varying highp float weight; @@ -132,9 +137,6 @@ uniform highp float u_weight; #endif -uniform highp float u_intensity; -varying vec2 v_extrude; - // Gaussian kernel coefficient: 1 / sqrt(2 * PI) #define GAUSS_COEF 0.3989422804014327 diff --git a/src/mbgl/programs/gl/heatmap_texture.cpp b/src/mbgl/programs/gl/heatmap_texture.cpp index 57b033d55c..60ef68597d 100644 --- a/src/mbgl/programs/gl/heatmap_texture.cpp +++ b/src/mbgl/programs/gl/heatmap_texture.cpp @@ -16,8 +16,8 @@ template <> struct ShaderSource<HeatmapTextureProgram> { static constexpr const char* name = "heatmap_texture"; static constexpr const uint8_t hash[8] = { 0x9f, 0xc7, 0x56, 0xb2, 0x9e, 0x8f, 0x15, 0xff }; - static constexpr const auto vertexOffset = 9491; - static constexpr const auto fragmentOffset = 9671; + static constexpr const auto vertexOffset = 9535; + static constexpr const auto fragmentOffset = 9715; }; constexpr const char* ShaderSource<HeatmapTextureProgram>::name; diff --git a/src/mbgl/programs/gl/hillshade.cpp b/src/mbgl/programs/gl/hillshade.cpp index fcf52e7313..f0579aaf8c 100644 --- a/src/mbgl/programs/gl/hillshade.cpp +++ b/src/mbgl/programs/gl/hillshade.cpp @@ -16,8 +16,8 @@ template <> struct ShaderSource<HillshadeProgram> { static constexpr const char* name = "hillshade"; static constexpr const uint8_t hash[8] = { 0x8a, 0x11, 0x29, 0x18, 0x52, 0x7f, 0x3b, 0xbb }; - static constexpr const auto vertexOffset = 29068; - static constexpr const auto fragmentOffset = 29239; + static constexpr const auto vertexOffset = 29113; + static constexpr const auto fragmentOffset = 29284; }; constexpr const char* ShaderSource<HillshadeProgram>::name; diff --git a/src/mbgl/programs/gl/hillshade_prepare.cpp b/src/mbgl/programs/gl/hillshade_prepare.cpp index 0af87635d3..f9cd84ca73 100644 --- a/src/mbgl/programs/gl/hillshade_prepare.cpp +++ b/src/mbgl/programs/gl/hillshade_prepare.cpp @@ -16,8 +16,8 @@ template <> struct ShaderSource<HillshadePrepareProgram> { static constexpr const char* name = "hillshade_prepare"; static constexpr const uint8_t hash[8] = { 0xe6, 0x01, 0xf2, 0xbb, 0xa0, 0x77, 0x1d, 0xeb }; - static constexpr const auto vertexOffset = 27653; - static constexpr const auto fragmentOffset = 27946; + static constexpr const auto vertexOffset = 27698; + static constexpr const auto fragmentOffset = 27991; }; constexpr const char* ShaderSource<HillshadePrepareProgram>::name; diff --git a/src/mbgl/programs/gl/line.cpp b/src/mbgl/programs/gl/line.cpp index 6b1f8d0e5e..9eea81f69b 100644 --- a/src/mbgl/programs/gl/line.cpp +++ b/src/mbgl/programs/gl/line.cpp @@ -15,9 +15,9 @@ struct ShaderSource; template <> struct ShaderSource<LineProgram> { static constexpr const char* name = "line"; - static constexpr const uint8_t hash[8] = { 0x44, 0x46, 0x9e, 0x59, 0x02, 0xbb, 0xaa, 0xae }; - static constexpr const auto vertexOffset = 30313; - static constexpr const auto fragmentOffset = 33237; + static constexpr const uint8_t hash[8] = { 0x02, 0xe9, 0x14, 0x54, 0x14, 0xe4, 0xbc, 0x11 }; + static constexpr const auto vertexOffset = 30358; + static constexpr const auto fragmentOffset = 33316; }; constexpr const char* ShaderSource<LineProgram>::name; @@ -39,12 +39,6 @@ Context::createProgram<gl::Context>(const ProgramParameters& programParameters) // Uncompressed source of line.vertex.glsl: /* - - -// the distance over which the line edge fades out. -// Retina devices need a smaller distance to avoid aliasing. -#define ANTIALIASING 1.0 / DEVICE_PIXEL_RATIO / 2.0 - // floor(127 / 2) == 63.0 // the maximum allowed miter limit is 2.0 at the moment. the extrude normal is // stored in a byte (-128..127). we scale regular normals up to length 63, but @@ -58,7 +52,8 @@ attribute vec4 a_data; uniform mat4 u_matrix; uniform mediump float u_ratio; -uniform vec2 u_gl_units_to_pixels; +uniform vec2 u_units_to_pixels; +uniform lowp float u_device_pixel_ratio; varying vec2 v_normal; varying vec2 v_width2; @@ -161,6 +156,10 @@ void main() { #endif + // the distance over which the line edge fades out. + // Retina devices need a smaller distance to avoid aliasing. + float ANTIALIASING = 1.0 / u_device_pixel_ratio / 2.0; + vec2 a_extrude = a_data.xy - 128.0; float a_direction = mod(a_data.z, 4.0) - 1.0; @@ -199,7 +198,7 @@ void main() { // calculate how much the perspective view squishes or stretches the extrude float extrude_length_without_perspective = length(dist); - float extrude_length_with_perspective = length(projected_extrude.xy / gl_Position.w * u_gl_units_to_pixels); + float extrude_length_with_perspective = length(projected_extrude.xy / gl_Position.w * u_units_to_pixels); v_gamma_scale = extrude_length_without_perspective / extrude_length_with_perspective; v_width2 = vec2(outset, inset); @@ -209,6 +208,12 @@ void main() { // Uncompressed source of line.fragment.glsl: /* +uniform lowp float u_device_pixel_ratio; + +varying vec2 v_width2; +varying vec2 v_normal; +varying float v_gamma_scale; + #ifndef HAS_UNIFORM_u_color varying highp vec4 color; @@ -231,10 +236,6 @@ uniform lowp float u_opacity; #endif -varying vec2 v_width2; -varying vec2 v_normal; -varying float v_gamma_scale; - void main() { #ifdef HAS_UNIFORM_u_color @@ -258,7 +259,7 @@ void main() { // Calculate the antialiasing fade factor. This is either when fading in // the line in case of an offset line (v_width2.t) or when fading out // (v_width2.s) - float blur2 = (blur + 1.0 / DEVICE_PIXEL_RATIO) * v_gamma_scale; + float blur2 = (blur + 1.0 / u_device_pixel_ratio) * v_gamma_scale; float alpha = clamp(min(dist - (v_width2.t - blur2), v_width2.s - dist) / blur2, 0.0, 1.0); gl_FragColor = color * (alpha * opacity); diff --git a/src/mbgl/programs/gl/line_gradient.cpp b/src/mbgl/programs/gl/line_gradient.cpp index 8a24a43b57..4e7ee93b92 100644 --- a/src/mbgl/programs/gl/line_gradient.cpp +++ b/src/mbgl/programs/gl/line_gradient.cpp @@ -15,9 +15,9 @@ struct ShaderSource; template <> struct ShaderSource<LineGradientProgram> { static constexpr const char* name = "line_gradient"; - static constexpr const uint8_t hash[8] = { 0xee, 0xdd, 0x10, 0x3d, 0x1a, 0x21, 0x26, 0x25 }; - static constexpr const auto vertexOffset = 34063; - static constexpr const auto fragmentOffset = 36782; + static constexpr const uint8_t hash[8] = { 0x0f, 0xa3, 0xae, 0x1c, 0x38, 0xf2, 0x60, 0x54 }; + static constexpr const auto vertexOffset = 34185; + static constexpr const auto fragmentOffset = 36938; }; constexpr const char* ShaderSource<LineGradientProgram>::name; @@ -43,10 +43,6 @@ Context::createProgram<gl::Context>(const ProgramParameters& programParameters) // the attribute conveying progress along a line is scaled to [0, 2^15) #define MAX_LINE_DISTANCE 32767.0 -// the distance over which the line edge fades out. -// Retina devices need a smaller distance to avoid aliasing. -#define ANTIALIASING 1.0 / DEVICE_PIXEL_RATIO / 2.0 - // floor(127 / 2) == 63.0 // the maximum allowed miter limit is 2.0 at the moment. the extrude normal is // stored in a byte (-128..127). we scale regular normals up to length 63, but @@ -60,7 +56,8 @@ attribute vec4 a_data; uniform mat4 u_matrix; uniform mediump float u_ratio; -uniform vec2 u_gl_units_to_pixels; +uniform lowp float u_device_pixel_ratio; +uniform vec2 u_units_to_pixels; varying vec2 v_normal; varying vec2 v_width2; @@ -147,6 +144,10 @@ void main() { #endif + // the distance over which the line edge fades out. + // Retina devices need a smaller distance to avoid aliasing. + float ANTIALIASING = 1.0 / u_device_pixel_ratio / 2.0; + vec2 a_extrude = a_data.xy - 128.0; float a_direction = mod(a_data.z, 4.0) - 1.0; @@ -185,7 +186,7 @@ void main() { // calculate how much the perspective view squishes or stretches the extrude float extrude_length_without_perspective = length(dist); - float extrude_length_with_perspective = length(projected_extrude.xy / gl_Position.w * u_gl_units_to_pixels); + float extrude_length_with_perspective = length(projected_extrude.xy / gl_Position.w * u_units_to_pixels); v_gamma_scale = extrude_length_without_perspective / extrude_length_with_perspective; v_width2 = vec2(outset, inset); @@ -195,6 +196,13 @@ void main() { // Uncompressed source of line_gradient.fragment.glsl: /* +uniform lowp float u_device_pixel_ratio; +uniform sampler2D u_image; + +varying vec2 v_width2; +varying vec2 v_normal; +varying float v_gamma_scale; +varying highp float v_lineprogress; #ifndef HAS_UNIFORM_u_blur @@ -211,13 +219,6 @@ uniform lowp float u_opacity; #endif -uniform sampler2D u_image; - -varying vec2 v_width2; -varying vec2 v_normal; -varying float v_gamma_scale; -varying highp float v_lineprogress; - void main() { #ifdef HAS_UNIFORM_u_blur @@ -236,7 +237,7 @@ void main() { // Calculate the antialiasing fade factor. This is either when fading in // the line in case of an offset line (v_width2.t) or when fading out // (v_width2.s) - float blur2 = (blur + 1.0 / DEVICE_PIXEL_RATIO) * v_gamma_scale; + float blur2 = (blur + 1.0 / u_device_pixel_ratio) * v_gamma_scale; float alpha = clamp(min(dist - (v_width2.t - blur2), v_width2.s - dist) / blur2, 0.0, 1.0); // For gradient lines, v_lineprogress is the ratio along the entire line, diff --git a/src/mbgl/programs/gl/line_pattern.cpp b/src/mbgl/programs/gl/line_pattern.cpp index 0f030b746c..24406abf3b 100644 --- a/src/mbgl/programs/gl/line_pattern.cpp +++ b/src/mbgl/programs/gl/line_pattern.cpp @@ -15,9 +15,9 @@ struct ShaderSource; template <> struct ShaderSource<LinePatternProgram> { static constexpr const char* name = "line_pattern"; - static constexpr const uint8_t hash[8] = { 0x73, 0xa0, 0x59, 0x46, 0x57, 0xa5, 0x60, 0x25 }; - static constexpr const auto vertexOffset = 37569; - static constexpr const auto fragmentOffset = 40890; + static constexpr const uint8_t hash[8] = { 0x14, 0x72, 0xee, 0xac, 0x1f, 0xc7, 0xf6, 0x82 }; + static constexpr const auto vertexOffset = 37768; + static constexpr const auto fragmentOffset = 41123; }; constexpr const char* ShaderSource<LinePatternProgram>::name; @@ -51,16 +51,13 @@ Context::createProgram<gl::Context>(const ProgramParameters& programParameters) // long distances for long segments. Use this value to unscale the distance. #define LINE_DISTANCE_SCALE 2.0 -// the distance over which the line edge fades out. -// Retina devices need a smaller distance to avoid aliasing. -#define ANTIALIASING 1.0 / DEVICE_PIXEL_RATIO / 2.0 - attribute vec4 a_pos_normal; attribute vec4 a_data; uniform mat4 u_matrix; -uniform vec2 u_gl_units_to_pixels; +uniform vec2 u_units_to_pixels; uniform mediump float u_ratio; +uniform lowp float u_device_pixel_ratio; varying vec2 v_normal; varying vec2 v_width2; @@ -179,6 +176,10 @@ void main() { #endif + // the distance over which the line edge fades out. + // Retina devices need a smaller distance to avoid aliasing. + float ANTIALIASING = 1.0 / u_device_pixel_ratio / 2.0; + vec2 a_extrude = a_data.xy - 128.0; float a_direction = mod(a_data.z, 4.0) - 1.0; float a_linesofar = (floor(a_data.z / 4.0) + a_data.w * 64.0) * LINE_DISTANCE_SCALE; @@ -216,7 +217,7 @@ void main() { // calculate how much the perspective view squishes or stretches the extrude float extrude_length_without_perspective = length(dist); - float extrude_length_with_perspective = length(projected_extrude.xy / gl_Position.w * u_gl_units_to_pixels); + float extrude_length_with_perspective = length(projected_extrude.xy / gl_Position.w * u_units_to_pixels); v_gamma_scale = extrude_length_without_perspective / extrude_length_with_perspective; v_linesofar = a_linesofar; @@ -227,6 +228,7 @@ void main() { // Uncompressed source of line_pattern.fragment.glsl: /* +uniform lowp float u_device_pixel_ratio; uniform vec2 u_texsize; uniform float u_fade; uniform mediump vec4 u_scale; @@ -312,7 +314,7 @@ void main() { // Calculate the antialiasing fade factor. This is either when fading in // the line in case of an offset line (v_width2.t) or when fading out // (v_width2.s) - float blur2 = (blur + 1.0 / DEVICE_PIXEL_RATIO) * v_gamma_scale; + float blur2 = (blur + 1.0 / u_device_pixel_ratio) * v_gamma_scale; float alpha = clamp(min(dist - (v_width2.t - blur2), v_width2.s - dist) / blur2, 0.0, 1.0); float x_a = mod(v_linesofar / pattern_size_a.x, 1.0); diff --git a/src/mbgl/programs/gl/line_sdf.cpp b/src/mbgl/programs/gl/line_sdf.cpp index e6241db9c4..aa72823ae7 100644 --- a/src/mbgl/programs/gl/line_sdf.cpp +++ b/src/mbgl/programs/gl/line_sdf.cpp @@ -15,9 +15,9 @@ struct ShaderSource; template <> struct ShaderSource<LineSDFProgram> { static constexpr const char* name = "line_sdf"; - static constexpr const uint8_t hash[8] = { 0x66, 0x20, 0x75, 0x4e, 0xbe, 0x02, 0x9e, 0x67 }; - static constexpr const auto vertexOffset = 43203; - static constexpr const auto fragmentOffset = 46817; + static constexpr const uint8_t hash[8] = { 0x21, 0x0f, 0x62, 0x9d, 0x31, 0x97, 0xad, 0x16 }; + static constexpr const auto vertexOffset = 43478; + static constexpr const auto fragmentOffset = 47126; }; constexpr const char* ShaderSource<LineSDFProgram>::name; @@ -51,20 +51,17 @@ Context::createProgram<gl::Context>(const ProgramParameters& programParameters) // long distances for long segments. Use this value to unscale the distance. #define LINE_DISTANCE_SCALE 2.0 -// the distance over which the line edge fades out. -// Retina devices need a smaller distance to avoid aliasing. -#define ANTIALIASING 1.0 / DEVICE_PIXEL_RATIO / 2.0 - attribute vec4 a_pos_normal; attribute vec4 a_data; uniform mat4 u_matrix; uniform mediump float u_ratio; +uniform lowp float u_device_pixel_ratio; uniform vec2 u_patternscale_a; uniform float u_tex_y_a; uniform vec2 u_patternscale_b; uniform float u_tex_y_b; -uniform vec2 u_gl_units_to_pixels; +uniform vec2 u_units_to_pixels; varying vec2 v_normal; varying vec2 v_width2; @@ -185,6 +182,10 @@ void main() { #endif + // the distance over which the line edge fades out. + // Retina devices need a smaller distance to avoid aliasing. + float ANTIALIASING = 1.0 / u_device_pixel_ratio / 2.0; + vec2 a_extrude = a_data.xy - 128.0; float a_direction = mod(a_data.z, 4.0) - 1.0; float a_linesofar = (floor(a_data.z / 4.0) + a_data.w * 64.0) * LINE_DISTANCE_SCALE; @@ -222,7 +223,7 @@ void main() { // calculate how much the perspective view squishes or stretches the extrude float extrude_length_without_perspective = length(dist); - float extrude_length_with_perspective = length(projected_extrude.xy / gl_Position.w * u_gl_units_to_pixels); + float extrude_length_with_perspective = length(projected_extrude.xy / gl_Position.w * u_units_to_pixels); v_gamma_scale = extrude_length_without_perspective / extrude_length_with_perspective; v_tex_a = vec2(a_linesofar * u_patternscale_a.x / floorwidth, normal.y * u_patternscale_a.y + u_tex_y_a); @@ -236,6 +237,7 @@ void main() { // Uncompressed source of line_sdf.fragment.glsl: /* +uniform lowp float u_device_pixel_ratio; uniform sampler2D u_image; uniform float u_sdfgamma; uniform float u_mix; @@ -315,7 +317,7 @@ void main() { // Calculate the antialiasing fade factor. This is either when fading in // the line in case of an offset line (v_width2.t) or when fading out // (v_width2.s) - float blur2 = (blur + 1.0 / DEVICE_PIXEL_RATIO) * v_gamma_scale; + float blur2 = (blur + 1.0 / u_device_pixel_ratio) * v_gamma_scale; float alpha = clamp(min(dist - (v_width2.t - blur2), v_width2.s - dist) / blur2, 0.0, 1.0); float sdfdist_a = texture2D(u_image, v_tex_a).a; diff --git a/src/mbgl/programs/gl/raster.cpp b/src/mbgl/programs/gl/raster.cpp index c66f796701..98cfade1f5 100644 --- a/src/mbgl/programs/gl/raster.cpp +++ b/src/mbgl/programs/gl/raster.cpp @@ -16,8 +16,8 @@ template <> struct ShaderSource<RasterProgram> { static constexpr const char* name = "raster"; static constexpr const uint8_t hash[8] = { 0x40, 0x3d, 0x6c, 0xf4, 0xd0, 0x41, 0x51, 0x0e }; - static constexpr const auto vertexOffset = 48320; - static constexpr const auto fragmentOffset = 48669; + static constexpr const auto vertexOffset = 48671; + static constexpr const auto fragmentOffset = 49020; }; constexpr const char* ShaderSource<RasterProgram>::name; diff --git a/src/mbgl/programs/gl/shader_source.cpp b/src/mbgl/programs/gl/shader_source.cpp index ae9e517003..13d9cc344a 100644 --- a/src/mbgl/programs/gl/shader_source.cpp +++ b/src/mbgl/programs/gl/shader_source.cpp @@ -11,454 +11,453 @@ namespace gl { constexpr const uint8_t compressedShaderSource[] = { 0x78, 0xda, 0xed, 0x3d, 0xfd, 0x6f, 0xe3, 0x36, 0xb2, 0xf7, 0x73, 0xfe, 0x0a, 0x17, 0x05, 0x0e, - 0x92, 0x2c, 0x5b, 0xb6, 0x93, 0xec, 0x97, 0x4e, 0xaf, 0x08, 0x76, 0xb3, 0x7d, 0x01, 0xda, 0xdd, - 0x60, 0xd3, 0xf6, 0x15, 0x57, 0x2c, 0x0c, 0xc9, 0x56, 0x1c, 0xdf, 0xd9, 0x96, 0x9f, 0xad, 0x24, - 0x76, 0x0e, 0xf9, 0xdf, 0x1f, 0x87, 0xdf, 0xa4, 0x48, 0x59, 0xb6, 0x13, 0xe7, 0xe3, 0x19, 0x45, - 0x37, 0x16, 0x39, 0x1c, 0x0e, 0xc9, 0xe1, 0x70, 0x66, 0x48, 0x0e, 0x7f, 0x1c, 0x5e, 0xf6, 0xd3, - 0xcb, 0xda, 0xcf, 0xbf, 0x74, 0x4f, 0x2f, 0x0e, 0xa6, 0xb3, 0xb4, 0x37, 0x9c, 0x0f, 0xb3, 0x49, - 0xed, 0x6a, 0x38, 0xb8, 0x9a, 0xd6, 0x2e, 0x47, 0x59, 0x9c, 0x87, 0x07, 0x3f, 0xa6, 0xa3, 0x79, - 0x7a, 0xf0, 0xe3, 0xf0, 0xb2, 0xf6, 0x03, 0x82, 0x1d, 0x4e, 0xd2, 0xbe, 0x33, 0xca, 0x6e, 0xa7, - 0xee, 0xc1, 0x8f, 0xe4, 0xb3, 0x06, 0x5f, 0x08, 0x6a, 0xd2, 0x1f, 0x5e, 0xaa, 0x60, 0xe3, 0xb4, - 0x3f, 0xbc, 0x1e, 0x4b, 0x90, 0x34, 0xc1, 0x08, 0x8c, 0xeb, 0x14, 0xa0, 0xf8, 0x93, 0x03, 0x92, - 0x3f, 0x37, 0x69, 0xaf, 0x53, 0xbb, 0x9e, 0x4c, 0xe3, 0xde, 0xbf, 0xbb, 0x98, 0x38, 0xa7, 0x97, - 0x4d, 0xe6, 0x39, 0x21, 0xb4, 0x06, 0xc9, 0x69, 0xff, 0x8f, 0x78, 0x74, 0x9d, 0xba, 0xb5, 0xff, - 0x0c, 0x27, 0x2c, 0xe5, 0x6c, 0x92, 0xe3, 0xc4, 0x08, 0x25, 0x39, 0x32, 0x50, 0x08, 0x30, 0x37, - 0xad, 0x48, 0x05, 0x0b, 0x3a, 0xc7, 0x6f, 0xc2, 0x59, 0x9a, 0x5f, 0xcf, 0x26, 0x35, 0xa8, 0xd0, - 0xb9, 0x69, 0xf9, 0x2a, 0x44, 0xe3, 0xa6, 0xe5, 0x21, 0x20, 0x37, 0xbc, 0x97, 0x09, 0xca, 0xd0, - 0xbf, 0xc3, 0x7c, 0x69, 0x20, 0xe9, 0x2b, 0xc9, 0xa1, 0x44, 0xa1, 0xff, 0x69, 0x82, 0x44, 0x10, - 0x03, 0x09, 0x3a, 0x4a, 0xd5, 0xa4, 0x91, 0xa2, 0x84, 0x1b, 0xb4, 0x3b, 0x6f, 0x9b, 0x2d, 0x7f, - 0x9c, 0xf5, 0xd5, 0x82, 0x7e, 0xa7, 0xd9, 0x72, 0x09, 0x41, 0x47, 0xb5, 0x7e, 0xda, 0xcb, 0xfa, - 0x69, 0xb7, 0x97, 0x8d, 0xb2, 0x19, 0x25, 0x07, 0x13, 0x9a, 0x4e, 0x20, 0xbd, 0xff, 0x11, 0xd2, - 0x11, 0x31, 0xa2, 0xa2, 0x23, 0x47, 0xe9, 0x54, 0x19, 0xee, 0xaf, 0xd6, 0x77, 0x44, 0xd4, 0xf1, - 0x31, 0xaa, 0xd4, 0x0e, 0xd3, 0x66, 0x30, 0x07, 0x88, 0x04, 0xd2, 0x72, 0x0a, 0x3c, 0x1e, 0x2e, - 0xba, 0xb8, 0x25, 0x12, 0x19, 0xd2, 0x10, 0xf8, 0x72, 0x67, 0xe5, 0x82, 0x26, 0x54, 0x4c, 0x1e, - 0x29, 0x44, 0x84, 0x2f, 0x7f, 0xb6, 0xbf, 0xfb, 0x39, 0x6b, 0xac, 0x54, 0x91, 0xd6, 0xe0, 0x23, - 0x5a, 0x13, 0xa6, 0x71, 0x5e, 0xa8, 0x0a, 0x43, 0x8c, 0x87, 0x13, 0x9c, 0x1d, 0x29, 0x7d, 0x86, - 0x29, 0x96, 0x0b, 0x0b, 0x02, 0xe8, 0x37, 0x6a, 0xb1, 0x1b, 0x12, 0x0c, 0xf1, 0xa2, 0x12, 0x86, - 0x8e, 0x86, 0xe1, 0x10, 0x30, 0x48, 0xcd, 0x65, 0x94, 0xf8, 0x0c, 0x21, 0x6b, 0x62, 0xa7, 0x36, - 0x48, 0xf3, 0xee, 0x34, 0xce, 0xf3, 0x74, 0x36, 0xe9, 0x4e, 0xb3, 0xb9, 0xd2, 0x97, 0xc3, 0x45, - 0x3a, 0x42, 0x75, 0x66, 0xb3, 0x7e, 0xf7, 0x7a, 0x3a, 0x4d, 0x67, 0xbe, 0x25, 0x13, 0xcd, 0x51, - 0x2d, 0x93, 0x22, 0x9c, 0x0f, 0xef, 0xb4, 0x61, 0x18, 0x8e, 0xd2, 0xee, 0xf5, 0x64, 0x98, 0xcf, - 0xbb, 0x79, 0xd6, 0xc5, 0x38, 0xe6, 0x4a, 0xc1, 0x6c, 0x4e, 0x7a, 0xaf, 0x53, 0xcb, 0x2e, 0x2f, - 0xe7, 0x69, 0x1e, 0x01, 0x37, 0xb2, 0xff, 0x8b, 0x04, 0xc9, 0x15, 0xb9, 0x30, 0x6f, 0x9a, 0x2d, - 0x53, 0x5a, 0xbd, 0x48, 0xad, 0x02, 0xc5, 0xfa, 0xca, 0x31, 0xd1, 0xe7, 0x21, 0xa2, 0xea, 0x84, - 0x1a, 0x37, 0x90, 0x8b, 0x85, 0xf7, 0x07, 0x7f, 0xfb, 0xd1, 0x2c, 0xe3, 0xa8, 0x2c, 0x7a, 0x7e, - 0x52, 0xee, 0x6f, 0x88, 0xfe, 0xd9, 0x30, 0xb9, 0xce, 0x53, 0xd2, 0xe1, 0x31, 0x0c, 0x7a, 0x88, - 0x5a, 0x7c, 0x99, 0xcd, 0xc6, 0x88, 0xdf, 0x72, 0xc4, 0xf4, 0x5d, 0xf4, 0x67, 0x36, 0x5c, 0x84, - 0x37, 0xd9, 0xb0, 0x8f, 0x92, 0x86, 0x13, 0x07, 0x8d, 0xc9, 0x60, 0xd4, 0x3d, 0xcf, 0xe6, 0xc3, - 0x1c, 0xb5, 0x2e, 0x62, 0x10, 0x1e, 0x9e, 0xde, 0x18, 0x85, 0xdf, 0xf2, 0xdb, 0x2e, 0x74, 0x08, - 0x43, 0x45, 0xe6, 0x0f, 0xe1, 0x58, 0x8e, 0x9f, 0x4e, 0x5f, 0x26, 0xce, 0x0a, 0x35, 0x7c, 0x9e, - 0xc5, 0x03, 0xc2, 0xf0, 0xb4, 0xa4, 0x27, 0x60, 0x0f, 0x68, 0x57, 0x7f, 0xfd, 0xe3, 0xf4, 0xdb, - 0xa7, 0x6f, 0x27, 0xff, 0xd3, 0x3d, 0xfb, 0x72, 0x71, 0x7e, 0xfa, 0xf1, 0xb7, 0xaf, 0xdf, 0x0e, - 0x94, 0x92, 0x98, 0xa6, 0x36, 0x92, 0x58, 0x21, 0x6b, 0xb3, 0x44, 0x95, 0xda, 0x40, 0x89, 0x56, - 0x24, 0x69, 0xbb, 0xf2, 0xd8, 0x76, 0xe3, 0xd2, 0xdc, 0xa4, 0x90, 0xab, 0xb3, 0x66, 0x19, 0x00, - 0xe6, 0xc0, 0x42, 0xa7, 0xcc, 0x7b, 0xf1, 0x48, 0xae, 0x57, 0x4d, 0x4f, 0x0a, 0xe9, 0x26, 0x5e, - 0x0d, 0x8d, 0xc3, 0x7b, 0x13, 0xcf, 0x96, 0xc3, 0xc9, 0x80, 0x24, 0xdd, 0x40, 0x12, 0xaa, 0xc6, - 0x90, 0x98, 0x6c, 0x30, 0xe4, 0x14, 0x5d, 0xa4, 0xcb, 0x11, 0x43, 0x97, 0xf8, 0x86, 0x5e, 0xf0, - 0x79, 0xbb, 0x3d, 0x7d, 0x00, 0x7c, 0x73, 0x13, 0x7d, 0x5c, 0x39, 0xab, 0x38, 0xd9, 0xba, 0xe2, - 0x44, 0xaf, 0x38, 0x59, 0x51, 0xb1, 0xca, 0xe4, 0x32, 0x6b, 0xe4, 0x23, 0x3b, 0xdb, 0x24, 0x33, - 0x7b, 0x1e, 0x2a, 0x97, 0x94, 0x94, 0x2b, 0xe4, 0xe5, 0xe9, 0x02, 0xcb, 0x1f, 0x9d, 0x23, 0xc6, - 0x12, 0x4f, 0xeb, 0x53, 0x8d, 0xa5, 0xcf, 0xe3, 0xf1, 0x74, 0x94, 0xce, 0x3a, 0x9f, 0x50, 0xde, - 0x70, 0x1c, 0x0f, 0xd2, 0x4d, 0xb9, 0x03, 0xe7, 0x60, 0x0c, 0xb8, 0x57, 0xb1, 0xa0, 0xa6, 0xa5, - 0x7d, 0x3c, 0xfd, 0x98, 0x40, 0x8f, 0x60, 0x05, 0x52, 0x3b, 0x29, 0xe0, 0x6d, 0xf0, 0xd5, 0x1e, - 0x92, 0x32, 0x04, 0x6a, 0xba, 0x18, 0x62, 0x81, 0xd0, 0x8e, 0x50, 0x3e, 0x92, 0xd5, 0x69, 0xe7, - 0x93, 0x43, 0x1b, 0xe0, 0x13, 0x76, 0x50, 0xc9, 0x41, 0x8c, 0x21, 0x08, 0x4a, 0x54, 0x82, 0x3a, - 0x45, 0x8a, 0x12, 0x1b, 0x45, 0x89, 0x91, 0xa2, 0x6e, 0x22, 0xd3, 0xd4, 0x31, 0xd3, 0xd4, 0x71, - 0x43, 0x45, 0x30, 0x41, 0xa5, 0xa4, 0x0d, 0x3e, 0x29, 0xe6, 0xe3, 0x11, 0x73, 0x77, 0x23, 0xe3, - 0x92, 0x2c, 0x1b, 0x71, 0x61, 0x72, 0x3b, 0xcc, 0xaf, 0x10, 0xc0, 0x54, 0xcf, 0x9d, 0x0e, 0xf3, - 0xde, 0x55, 0x31, 0x97, 0xb2, 0x1d, 0x6a, 0xe4, 0xec, 0x1a, 0x69, 0x21, 0x18, 0x07, 0xcf, 0x94, - 0xd4, 0x79, 0x90, 0xf7, 0xf1, 0x38, 0x9d, 0xc5, 0x30, 0x69, 0x7a, 0xe9, 0x04, 0x75, 0x62, 0xb7, - 0x3f, 0x9c, 0xe7, 0xf1, 0xa4, 0x97, 0x9a, 0x25, 0x13, 0x34, 0x78, 0x02, 0x2d, 0xfe, 0xef, 0x93, - 0x8b, 0xee, 0xef, 0x5f, 0xce, 0x3e, 0x7f, 0xfd, 0xf6, 0x6b, 0x97, 0xca, 0xfe, 0x03, 0x56, 0x03, - 0x2c, 0x8e, 0xa2, 0x02, 0xc8, 0xea, 0xe6, 0x12, 0x3a, 0x42, 0x00, 0x1e, 0x8e, 0x98, 0xae, 0x37, - 0x8c, 0x7b, 0xa5, 0x2c, 0x92, 0x41, 0x57, 0x62, 0x95, 0x76, 0x65, 0xa9, 0x92, 0x16, 0x56, 0x03, - 0x61, 0xb3, 0x18, 0xad, 0xbe, 0x73, 0x33, 0x65, 0x24, 0x4f, 0x21, 0x8d, 0xa9, 0x01, 0xb4, 0xc5, - 0x04, 0x82, 0x53, 0xa7, 0x28, 0x09, 0x35, 0x9a, 0xa9, 0x51, 0xa8, 0xc2, 0xb0, 0x4a, 0x56, 0x50, - 0x99, 0x8c, 0xae, 0x2d, 0xbd, 0x07, 0x39, 0x0a, 0x85, 0x38, 0x97, 0x92, 0x07, 0x99, 0x9c, 0x38, - 0xa9, 0x18, 0x4e, 0xd7, 0xe8, 0x2a, 0x60, 0x5d, 0x41, 0x12, 0xe5, 0x70, 0x73, 0x79, 0x9a, 0x69, - 0x25, 0x8c, 0xab, 0x0b, 0x45, 0xda, 0xc4, 0xcc, 0xb1, 0x93, 0x27, 0xc1, 0x94, 0x50, 0x38, 0xcf, - 0x67, 0xd9, 0xbf, 0xd3, 0x32, 0xd6, 0x93, 0x21, 0xec, 0x1c, 0x28, 0x43, 0x99, 0x18, 0x51, 0xc9, - 0x2f, 0xe3, 0x47, 0x1d, 0x70, 0x35, 0xed, 0xb7, 0xc3, 0x7e, 0x7e, 0x55, 0x4a, 0x3b, 0x86, 0x28, - 0x63, 0x51, 0x19, 0xce, 0xc2, 0xa8, 0x0a, 0xc8, 0x0a, 0x76, 0xd5, 0x61, 0x57, 0xb7, 0xa1, 0x94, - 0x51, 0x54, 0x18, 0x2b, 0xbf, 0xa8, 0x60, 0x26, 0xb6, 0xd1, 0x20, 0xca, 0xb8, 0xa7, 0x08, 0x4a, - 0xdc, 0x05, 0x62, 0x81, 0x3c, 0x44, 0x0b, 0x64, 0x3f, 0xce, 0x63, 0x69, 0x7d, 0x84, 0x5f, 0x68, - 0x8d, 0x2c, 0x15, 0x6f, 0x3d, 0xa2, 0xe8, 0xea, 0x26, 0x26, 0x95, 0x61, 0x3e, 0x17, 0x75, 0x2e, - 0x23, 0x4f, 0x97, 0x66, 0xd1, 0x5a, 0x32, 0x8b, 0xfc, 0x89, 0x74, 0xdb, 0x99, 0x49, 0x25, 0x5f, - 0x08, 0x30, 0x5e, 0xa1, 0x49, 0x40, 0x45, 0xeb, 0xc8, 0x20, 0xf8, 0xc7, 0x50, 0x23, 0x24, 0xfb, - 0x4c, 0x18, 0xf1, 0xda, 0x34, 0x89, 0x13, 0xad, 0x25, 0x57, 0xe8, 0x5f, 0x43, 0x65, 0x34, 0xc7, - 0x97, 0xc4, 0x8c, 0xa9, 0x4a, 0x8e, 0x60, 0x13, 0x71, 0x21, 0x7f, 0x98, 0x46, 0x54, 0xce, 0xf7, - 0x75, 0x41, 0x62, 0x1a, 0x5f, 0x15, 0xe1, 0xc6, 0xa2, 0x40, 0xfe, 0x30, 0x74, 0x8d, 0x9c, 0xed, - 0xeb, 0x32, 0xc2, 0xc2, 0x05, 0x2a, 0xca, 0x2d, 0x26, 0xb8, 0xfa, 0x69, 0xa7, 0x4e, 0x8c, 0x9f, - 0x3e, 0xfb, 0x4d, 0xc3, 0xa8, 0x63, 0xb5, 0x4e, 0x5f, 0xec, 0xb3, 0x22, 0x0a, 0x4d, 0x84, 0x2b, - 0x04, 0x75, 0x91, 0xd8, 0x35, 0xe0, 0xee, 0xf2, 0xd0, 0x3f, 0x0d, 0xa1, 0x35, 0xf6, 0x86, 0xb3, - 0x1e, 0xd2, 0x9b, 0x88, 0x4e, 0x13, 0xa1, 0xaa, 0xf0, 0xb0, 0x22, 0x60, 0xaf, 0xd5, 0x3c, 0x76, - 0x43, 0x64, 0x84, 0x3b, 0xba, 0xf6, 0xc4, 0x54, 0xe4, 0x5e, 0x36, 0x9b, 0x20, 0x3d, 0x68, 0xca, - 0x2c, 0x29, 0x05, 0x15, 0x2d, 0xa9, 0x6a, 0x65, 0xa8, 0xa4, 0x56, 0xa8, 0x1e, 0x51, 0x52, 0x3d, - 0x87, 0x4c, 0xbe, 0xba, 0xdc, 0xef, 0xa0, 0x41, 0xaa, 0xba, 0xd9, 0x7d, 0x0d, 0xfa, 0x85, 0xba, - 0xa1, 0xa6, 0xb3, 0xec, 0x5f, 0x69, 0x2f, 0x4f, 0xfb, 0x8c, 0x7c, 0xd5, 0x96, 0x53, 0xe8, 0x21, - 0x36, 0xdd, 0x76, 0xb5, 0x7b, 0x8e, 0x5e, 0x63, 0xf3, 0x36, 0x28, 0xd1, 0x0c, 0x91, 0x45, 0x65, - 0xb7, 0x34, 0x35, 0x52, 0xa8, 0x9b, 0x81, 0x36, 0xaf, 0xa4, 0x58, 0xb1, 0x51, 0x96, 0x9e, 0x96, - 0x70, 0x34, 0x17, 0xcb, 0x75, 0x9b, 0x5a, 0xa6, 0xf0, 0x1a, 0xa8, 0xdc, 0xa0, 0x06, 0xb9, 0xf4, - 0x6d, 0x78, 0x7f, 0x2f, 0xf1, 0x7a, 0x3c, 0xc9, 0x87, 0xf1, 0x68, 0x18, 0xcf, 0xb1, 0xb8, 0x44, - 0xcc, 0x1a, 0x7c, 0x3a, 0xfd, 0xe3, 0xec, 0xe3, 0x69, 0xf7, 0xfc, 0xec, 0xcf, 0xd3, 0x5f, 0xba, - 0xdf, 0x4e, 0x7e, 0x3b, 0xfb, 0x1a, 0x18, 0x6b, 0x09, 0xc9, 0x82, 0x05, 0x8c, 0x7f, 0xe8, 0xd0, - 0xfa, 0x9a, 0x0b, 0x9f, 0xfd, 0x5a, 0xfa, 0x0a, 0x6a, 0x97, 0x3a, 0xba, 0xac, 0x2b, 0xd9, 0x63, - 0xab, 0xdb, 0xbb, 0x51, 0x98, 0x1f, 0x59, 0xf3, 0xdd, 0x9d, 0xf2, 0xfa, 0x14, 0x4a, 0xe7, 0x53, - 0xaa, 0x8a, 0x4f, 0xa0, 0xdf, 0x51, 0xdd, 0xce, 0x36, 0x21, 0xaa, 0x68, 0x6a, 0x56, 0x6e, 0xaf, - 0xac, 0x75, 0x59, 0xf8, 0x78, 0xb5, 0x1e, 0x65, 0x67, 0xd2, 0xaa, 0x0a, 0xd1, 0x0a, 0x0e, 0x5c, - 0x5f, 0x93, 0x59, 0xc1, 0x5e, 0x1b, 0xe9, 0x20, 0x2b, 0x19, 0x67, 0x6b, 0xbd, 0x01, 0xb3, 0x05, - 0x12, 0xea, 0x21, 0x41, 0xc2, 0x24, 0xf7, 0x28, 0x9d, 0x0c, 0x10, 0x65, 0xe4, 0x0f, 0x93, 0xaf, - 0x6e, 0x68, 0x15, 0xdd, 0x14, 0xcf, 0x5d, 0xa8, 0x65, 0xa2, 0x05, 0x14, 0xe7, 0x37, 0xc6, 0xf1, - 0xc2, 0xc1, 0x4a, 0xb3, 0x26, 0x97, 0x95, 0x91, 0xea, 0xe6, 0xd1, 0x7c, 0x9c, 0x65, 0xf9, 0xd5, - 0x3c, 0x4f, 0xa7, 0x4e, 0xab, 0xd9, 0xf2, 0x75, 0x44, 0xbe, 0x4a, 0x20, 0xd1, 0x6f, 0x08, 0x0e, - 0xaa, 0x8b, 0x46, 0x72, 0x5f, 0xd6, 0xfe, 0x51, 0x43, 0x58, 0xda, 0xb5, 0x9f, 0xe0, 0x4f, 0xed, - 0x43, 0x4d, 0xc2, 0x5e, 0xc0, 0x0c, 0xd5, 0x69, 0xd8, 0x09, 0xc3, 0x9a, 0x17, 0x20, 0xcd, 0x35, - 0xc6, 0x5b, 0xe0, 0x71, 0x27, 0x99, 0xc7, 0xf4, 0x3e, 0x99, 0x63, 0x3c, 0x4d, 0x27, 0x94, 0x34, - 0xe8, 0x2d, 0x1c, 0x67, 0x8f, 0xbd, 0x25, 0x62, 0xdf, 0xe5, 0x10, 0xe4, 0x58, 0x57, 0xd8, 0xdb, - 0x14, 0xcd, 0xa5, 0xdc, 0x2c, 0xba, 0x48, 0x9e, 0xd9, 0x15, 0x01, 0xed, 0x20, 0xf9, 0x9a, 0x13, - 0x82, 0x14, 0xa6, 0x59, 0xc6, 0xa5, 0x40, 0x45, 0xbf, 0x0b, 0x8f, 0xd8, 0x7a, 0x6b, 0x78, 0xb9, - 0xa3, 0x93, 0x15, 0x32, 0x7b, 0x2b, 0x6d, 0x6e, 0x71, 0x96, 0x3e, 0x44, 0x3a, 0xdc, 0x64, 0x0e, - 0x39, 0x55, 0x76, 0x52, 0x68, 0x1d, 0x21, 0xd9, 0xc1, 0x94, 0x7b, 0xef, 0x9f, 0xa7, 0xdf, 0xbe, - 0x62, 0x95, 0x0c, 0x6f, 0x5d, 0x07, 0xed, 0x37, 0xcd, 0x56, 0xc8, 0x37, 0xe6, 0x7e, 0x3e, 0xf9, - 0xfd, 0xe2, 0xa2, 0xfb, 0xf1, 0xeb, 0xe9, 0x67, 0x34, 0xb3, 0x0e, 0xdf, 0xbf, 0x7b, 0x7f, 0xd4, - 0xe9, 0xbc, 0x6b, 0x1d, 0xb5, 0xda, 0x47, 0x87, 0x9d, 0xb7, 0x07, 0x55, 0xbd, 0x08, 0x94, 0x33, - 0xc8, 0x1f, 0x83, 0xfd, 0x44, 0x32, 0x7c, 0xc1, 0x26, 0x9a, 0xa1, 0x29, 0x33, 0x42, 0xb4, 0xde, - 0x68, 0x9b, 0x97, 0xa8, 0x07, 0xf7, 0x2c, 0xd0, 0x13, 0x10, 0x78, 0x04, 0xfb, 0xdd, 0x4a, 0xd6, - 0x1a, 0x41, 0x78, 0x11, 0xcd, 0xff, 0x77, 0x96, 0x3b, 0x0d, 0x94, 0xec, 0x8d, 0xb2, 0x81, 0x03, - 0xa3, 0x11, 0x90, 0x06, 0x06, 0xd2, 0x18, 0x07, 0x62, 0x20, 0x5c, 0x37, 0x38, 0x44, 0x43, 0xc4, - 0x87, 0x34, 0xba, 0xf0, 0xf4, 0x8a, 0x43, 0x4d, 0xf6, 0x33, 0x3d, 0x9e, 0x10, 0x5d, 0xb0, 0xc1, - 0x88, 0xed, 0x95, 0xcd, 0xc9, 0x24, 0xd7, 0x4d, 0xc6, 0x3a, 0x05, 0x26, 0x42, 0xc2, 0x28, 0x49, - 0x80, 0xdf, 0x56, 0x89, 0x85, 0x07, 0x9a, 0xda, 0x66, 0x20, 0x31, 0x17, 0x2c, 0x6c, 0xbf, 0x36, - 0x43, 0x5b, 0xd5, 0x26, 0xda, 0x9c, 0x2a, 0x8c, 0x49, 0x72, 0xfb, 0x51, 0x03, 0x75, 0xa3, 0x87, - 0xc6, 0x0c, 0xff, 0xdf, 0xcf, 0x72, 0x87, 0xd3, 0xe5, 0xf3, 0x5f, 0x8c, 0x1f, 0x6e, 0xe2, 0x51, - 0x44, 0xd0, 0x78, 0x52, 0xb3, 0x3c, 0x41, 0xb6, 0x97, 0x2e, 0xa6, 0x4e, 0x5f, 0x5b, 0x95, 0xf0, - 0xc0, 0xa1, 0xa2, 0xb0, 0x7b, 0xc4, 0xfe, 0x77, 0x77, 0xb0, 0x0f, 0x7d, 0x9b, 0xcd, 0x46, 0xfd, - 0xaa, 0x3b, 0xb9, 0x6b, 0x2d, 0x49, 0x1e, 0x45, 0x2e, 0x6d, 0xdd, 0x36, 0x17, 0x51, 0x4c, 0xfe, - 0xd2, 0xef, 0x25, 0x88, 0xad, 0x06, 0x49, 0x5b, 0xca, 0x9b, 0x9d, 0xc5, 0x9d, 0x43, 0x53, 0x0e, - 0x59, 0x92, 0x67, 0x28, 0xc5, 0xbe, 0xeb, 0xbf, 0xa2, 0x11, 0xf4, 0xa8, 0x88, 0x61, 0x57, 0x0d, - 0x03, 0xbb, 0xcd, 0x99, 0xb4, 0xf9, 0xa6, 0x40, 0x89, 0xca, 0x7d, 0x2c, 0x25, 0x72, 0x1f, 0xe6, - 0x9a, 0x36, 0xac, 0x5b, 0x1d, 0x2c, 0x68, 0x55, 0xd1, 0x1d, 0x0a, 0x89, 0xf1, 0xa4, 0x77, 0x95, - 0xcd, 0xcc, 0x79, 0x6c, 0x32, 0x15, 0x31, 0x8d, 0xe2, 0x5e, 0x6a, 0xe0, 0x83, 0xf9, 0xd5, 0xf0, - 0x32, 0x0f, 0x2b, 0x71, 0x52, 0xf9, 0x1a, 0x68, 0x77, 0x5d, 0xb0, 0x11, 0xa2, 0xb3, 0x87, 0x91, - 0xa2, 0x27, 0x4f, 0xb2, 0xfc, 0xf7, 0x39, 0xa4, 0x6b, 0xfb, 0xc2, 0x92, 0xcf, 0xe9, 0x3c, 0x43, - 0xd3, 0xad, 0xc0, 0x8a, 0xa2, 0x3f, 0x08, 0x27, 0xca, 0xf3, 0x5e, 0x50, 0x45, 0xa1, 0x18, 0x55, - 0x91, 0x8a, 0xb4, 0x79, 0xab, 0x16, 0xcb, 0x46, 0x23, 0x7c, 0xf6, 0xa6, 0x3b, 0x4d, 0x67, 0xf3, - 0x29, 0x82, 0x1b, 0xde, 0xa4, 0x88, 0x15, 0xd0, 0x54, 0x88, 0x7a, 0x23, 0xc4, 0x11, 0x68, 0xe8, - 0x8e, 0xeb, 0x20, 0x33, 0x9c, 0x92, 0x96, 0x07, 0xd6, 0xda, 0x5d, 0xac, 0xe2, 0x1e, 0xc1, 0xf0, - 0xaf, 0xd4, 0xfb, 0x98, 0xa8, 0xd0, 0x3d, 0x3f, 0x0e, 0x1f, 0xed, 0x3a, 0x1d, 0xc6, 0x15, 0xfe, - 0x1e, 0xaf, 0xa4, 0x55, 0x21, 0x1b, 0x96, 0x88, 0xb1, 0x0a, 0x9e, 0xc2, 0x74, 0x4c, 0x44, 0x22, - 0x9e, 0xc3, 0xdb, 0x0c, 0x28, 0x35, 0x4a, 0x46, 0xd3, 0xab, 0x38, 0x42, 0xfd, 0x17, 0x1a, 0xa5, - 0x1c, 0x6e, 0x34, 0x6b, 0xb8, 0x87, 0x81, 0xb1, 0xc7, 0x8d, 0x55, 0x55, 0xfb, 0xaf, 0x1a, 0x4c, - 0x45, 0x93, 0xfe, 0x2b, 0x95, 0xc4, 0xd3, 0x95, 0x96, 0xbe, 0x27, 0xc5, 0x29, 0x49, 0xc6, 0xf2, - 0x5e, 0xd4, 0x6c, 0x87, 0xf7, 0x3b, 0x99, 0x85, 0xcf, 0x6a, 0xba, 0x69, 0xe9, 0xda, 0xb6, 0xb2, - 0xb6, 0x48, 0x9b, 0x93, 0x99, 0x92, 0xb2, 0x9f, 0xb9, 0xc6, 0x99, 0x2b, 0xd3, 0x37, 0x8d, 0xfb, - 0x7d, 0xd4, 0x81, 0xdd, 0xcb, 0xb8, 0x97, 0x67, 0xe0, 0x67, 0xed, 0x14, 0x26, 0x36, 0xe7, 0x9f, - 0xc2, 0x74, 0x56, 0x0b, 0x3f, 0xc6, 0xec, 0x66, 0xe3, 0x1f, 0xc5, 0xc9, 0x5c, 0x08, 0x98, 0xe6, - 0xd2, 0x95, 0x94, 0x59, 0x41, 0x9f, 0x4a, 0x4f, 0xa8, 0xf1, 0x43, 0xb4, 0x86, 0x7f, 0xbb, 0x94, - 0x7a, 0x49, 0x6d, 0xe0, 0xab, 0xff, 0x0d, 0x82, 0xc2, 0xde, 0x77, 0x56, 0xf7, 0xf3, 0xe0, 0x7a, - 0x5d, 0xbc, 0x49, 0xaa, 0xc5, 0xda, 0xc2, 0xad, 0xb7, 0xa9, 0x54, 0xeb, 0x51, 0x71, 0xd6, 0x61, - 0x47, 0x9c, 0x15, 0x82, 0x35, 0x87, 0x92, 0xd6, 0x1c, 0xb7, 0xd4, 0xfb, 0x24, 0x74, 0x61, 0xcf, - 0x84, 0x33, 0x34, 0x78, 0xd4, 0xda, 0xc8, 0x62, 0x35, 0x02, 0x07, 0x86, 0x51, 0x54, 0x2c, 0x38, - 0x36, 0x2a, 0x65, 0x55, 0x31, 0xfe, 0x01, 0x96, 0x4a, 0xfb, 0x83, 0x14, 0xf3, 0xad, 0xd1, 0x75, - 0x54, 0xea, 0xdf, 0x6a, 0x28, 0x9b, 0x97, 0xd0, 0xd3, 0x0d, 0x1d, 0xb3, 0xd5, 0xc9, 0x44, 0xbc, - 0x8f, 0xf7, 0xbb, 0x3b, 0x0c, 0x6b, 0xd8, 0xf8, 0x58, 0x79, 0xf4, 0x75, 0x4d, 0xfa, 0x5e, 0xda, - 0x49, 0xaa, 0xe7, 0x74, 0x20, 0xa8, 0x60, 0xa0, 0x3e, 0xf9, 0x99, 0x8d, 0x1d, 0x1c, 0x6b, 0xa8, - 0xca, 0xc3, 0x4f, 0xb2, 0xf1, 0xf7, 0xc0, 0x9b, 0x66, 0x8f, 0xbc, 0x71, 0xb3, 0xd6, 0xee, 0x89, - 0xc1, 0x16, 0x7d, 0x90, 0xe3, 0x9f, 0x6b, 0xc8, 0x0a, 0xa3, 0xbf, 0xc1, 0x60, 0x95, 0xdb, 0x06, - 0xe7, 0x3a, 0x1f, 0x0d, 0x27, 0xa5, 0x47, 0xe5, 0x14, 0x10, 0xbb, 0x8c, 0x51, 0xc0, 0x4c, 0xb2, - 0x46, 0x05, 0x28, 0xe3, 0xaa, 0x02, 0xe4, 0x2b, 0x92, 0x3d, 0x6a, 0x87, 0x2b, 0x5f, 0x26, 0x59, - 0xa4, 0x00, 0xf8, 0x85, 0xc1, 0x30, 0xc9, 0x26, 0x0d, 0xe7, 0x46, 0xbd, 0xf9, 0xd4, 0xb2, 0x0a, - 0xf3, 0x6c, 0xe4, 0xa8, 0xba, 0x79, 0xa0, 0x68, 0xdc, 0x75, 0x98, 0x34, 0x01, 0x78, 0x85, 0x19, - 0xd7, 0x5b, 0x05, 0x9c, 0xda, 0xe7, 0x3b, 0x67, 0xcd, 0x87, 0xe2, 0xae, 0x15, 0xae, 0x36, 0x8b, - 0x3c, 0x53, 0xda, 0xbe, 0x09, 0x9b, 0x6c, 0x29, 0x23, 0x85, 0xa6, 0x28, 0xd4, 0x58, 0x44, 0x7b, - 0x83, 0x4b, 0xc1, 0x6c, 0x86, 0xec, 0xa1, 0x25, 0x53, 0x10, 0x89, 0xf2, 0x0e, 0x6e, 0x4b, 0x6d, - 0x03, 0x14, 0x94, 0x6f, 0xc0, 0xa2, 0x6b, 0x82, 0x32, 0xd9, 0x9e, 0x83, 0x8b, 0x33, 0x21, 0xbc, - 0x3b, 0x07, 0xef, 0xc3, 0xdd, 0x20, 0x62, 0x67, 0x37, 0xb0, 0x71, 0xb3, 0xed, 0x0d, 0xa0, 0xea, - 0xcb, 0xc0, 0xb3, 0x3f, 0xd2, 0xcd, 0xee, 0x71, 0x5c, 0xce, 0xb2, 0xb1, 0x19, 0x8f, 0x0c, 0x61, - 0xa4, 0x15, 0x56, 0x29, 0x19, 0x48, 0x25, 0x98, 0x5e, 0x04, 0x95, 0xb2, 0x4d, 0x44, 0xd3, 0xe1, - 0xd1, 0xe1, 0x2a, 0x10, 0x9e, 0x67, 0xe5, 0x64, 0x23, 0x43, 0x67, 0x15, 0xd1, 0x79, 0x56, 0x42, - 0x32, 0xca, 0xac, 0x40, 0x30, 0x81, 0xaa, 0xbe, 0x5a, 0x3d, 0xd5, 0x91, 0x5c, 0x65, 0xb8, 0xe5, - 0x8f, 0x28, 0xee, 0x9a, 0x06, 0x49, 0xda, 0x8b, 0x56, 0x47, 0x31, 0xda, 0x74, 0xb0, 0xc4, 0xcf, - 0x28, 0xee, 0x16, 0x3b, 0xd9, 0x58, 0x21, 0x82, 0x35, 0x77, 0xb5, 0x7c, 0x91, 0x16, 0x2e, 0x4d, - 0x45, 0x32, 0x4d, 0x70, 0xe8, 0x44, 0x81, 0x80, 0xdb, 0x53, 0x2a, 0xc4, 0xdd, 0x6d, 0xa8, 0xe3, - 0x48, 0x22, 0x51, 0x91, 0x09, 0x83, 0x92, 0x8f, 0xca, 0x53, 0x07, 0x18, 0x08, 0x9e, 0x6f, 0xd8, - 0x1f, 0x47, 0x85, 0x4c, 0x73, 0x11, 0x8a, 0xfb, 0xbc, 0x6a, 0x0e, 0x3b, 0x0b, 0x03, 0x24, 0x5c, - 0x50, 0x9f, 0x12, 0xc9, 0x61, 0xc7, 0x5b, 0xf2, 0x4c, 0x4d, 0xbf, 0x0d, 0xab, 0x2d, 0xef, 0x40, - 0x2b, 0x12, 0xe6, 0xd3, 0x51, 0xbc, 0xa4, 0x37, 0x04, 0xc9, 0x56, 0xb0, 0x23, 0x77, 0x41, 0x73, - 0xd1, 0x90, 0xfb, 0xac, 0xb9, 0x70, 0x03, 0x41, 0xbe, 0xaf, 0x82, 0x2e, 0x55, 0xd0, 0xa5, 0x0c, - 0x6a, 0xaa, 0x2f, 0x29, 0xd6, 0x97, 0xa8, 0xf5, 0x25, 0x25, 0xf5, 0x25, 0x6a, 0x7d, 0x49, 0xa1, - 0xbe, 0x2d, 0x2f, 0x52, 0xf2, 0x0e, 0xf7, 0xd4, 0x4e, 0xf2, 0xf9, 0x18, 0x3d, 0xd4, 0xcd, 0x49, - 0x3a, 0x80, 0x6a, 0x3d, 0x89, 0xa5, 0x9e, 0x0d, 0x14, 0xb2, 0x15, 0xb7, 0x1d, 0xed, 0xfb, 0x90, - 0x4c, 0x3c, 0x5e, 0xc6, 0xfd, 0xf4, 0x51, 0x97, 0xbc, 0xdd, 0xad, 0x5a, 0xbb, 0x5e, 0x6e, 0x1e, - 0x73, 0xad, 0x78, 0x8c, 0x63, 0x87, 0x4a, 0x67, 0x6d, 0x22, 0xd0, 0x4b, 0x7b, 0xe3, 0xc5, 0x09, - 0xec, 0xf5, 0x2e, 0xe5, 0x5a, 0xae, 0xe4, 0x3e, 0xd1, 0x85, 0x5c, 0xcb, 0x75, 0xdc, 0x07, 0xbb, - 0x8c, 0xfb, 0xc8, 0x46, 0x85, 0xe9, 0x7a, 0x2f, 0x08, 0x22, 0xea, 0xf9, 0xf7, 0x76, 0x18, 0xc7, - 0xe0, 0x79, 0x58, 0x12, 0x7b, 0xb3, 0x61, 0x6f, 0x36, 0xec, 0xcd, 0x86, 0xbd, 0xd9, 0x60, 0x31, - 0x1b, 0xfe, 0x99, 0x65, 0xe3, 0xed, 0x4d, 0x87, 0xd7, 0x6e, 0x15, 0xec, 0x24, 0x06, 0x4b, 0xa9, - 0xe9, 0xc0, 0xc7, 0x69, 0x07, 0xe6, 0x43, 0xa1, 0xae, 0xd5, 0xd6, 0x80, 0xa2, 0xf3, 0x3f, 0x44, - 0x90, 0x93, 0xbd, 0xea, 0xbf, 0x57, 0xfd, 0xf7, 0xaa, 0xff, 0xeb, 0x52, 0xfd, 0x2b, 0x2a, 0xea, - 0xbb, 0x51, 0xd1, 0x0f, 0x51, 0xea, 0x08, 0xce, 0xa2, 0xab, 0xb1, 0xd1, 0xd8, 0x94, 0xe2, 0xd9, - 0xf2, 0xfe, 0xad, 0x22, 0x4b, 0x70, 0xae, 0x38, 0x9c, 0xaf, 0x4b, 0xc2, 0x9b, 0x74, 0x96, 0x0f, - 0x91, 0x84, 0xed, 0x0e, 0xe0, 0x18, 0x4d, 0x3a, 0xc9, 0xc3, 0x52, 0x89, 0xb4, 0xfa, 0xec, 0x24, - 0xe8, 0x85, 0x13, 0x54, 0x1e, 0xa1, 0x4c, 0x95, 0x7d, 0xe2, 0x23, 0x24, 0x34, 0xd9, 0xd6, 0x8f, - 0xf9, 0x5e, 0x6d, 0x6c, 0xbd, 0x38, 0x8b, 0x72, 0xec, 0x17, 0x97, 0x20, 0xb7, 0xfc, 0x02, 0x03, - 0x83, 0x28, 0x11, 0x6d, 0x57, 0x25, 0x37, 0xa7, 0xae, 0x56, 0xdc, 0x9c, 0xba, 0xaa, 0x70, 0x87, - 0xe2, 0xaa, 0xca, 0x85, 0x99, 0x6d, 0xcf, 0xdf, 0x54, 0x3f, 0x48, 0x51, 0x45, 0xc7, 0xc6, 0xe3, - 0x21, 0xb7, 0x02, 0x12, 0x4c, 0x01, 0x3a, 0x50, 0xb2, 0xcf, 0x06, 0xc9, 0x78, 0x6d, 0x88, 0x14, - 0x5c, 0x63, 0x18, 0xe4, 0xc2, 0x57, 0xb6, 0x2b, 0x4b, 0x57, 0xec, 0xca, 0xd2, 0x55, 0xd9, 0x95, - 0x25, 0x56, 0x7c, 0x9d, 0x11, 0x28, 0x1e, 0xec, 0x78, 0xc0, 0x33, 0x3c, 0x78, 0xd6, 0x92, 0x19, - 0x12, 0x49, 0x53, 0x05, 0x49, 0xed, 0xbb, 0x10, 0x77, 0x14, 0xdc, 0xdf, 0x04, 0xd7, 0x01, 0x7c, - 0xb8, 0x21, 0xa5, 0x9f, 0x25, 0x92, 0x4f, 0xe6, 0x76, 0x20, 0x11, 0x2f, 0x09, 0x8e, 0xe6, 0x02, - 0xdf, 0x6e, 0x5a, 0xa9, 0x04, 0xe6, 0xf8, 0x1c, 0x61, 0xab, 0xf6, 0x13, 0xed, 0x9a, 0xda, 0x07, - 0x3c, 0x3e, 0xa0, 0x1a, 0x4a, 0xb7, 0x3b, 0x6f, 0x70, 0x9c, 0x5a, 0xfc, 0xb3, 0x39, 0xf3, 0x5a, - 0xcd, 0x4e, 0xbb, 0xf3, 0xa6, 0x4e, 0x3e, 0x07, 0xe8, 0xf3, 0x6d, 0xfb, 0xb8, 0x43, 0x3f, 0x13, - 0xf4, 0xd9, 0x7a, 0xdb, 0xe9, 0x84, 0x74, 0x7a, 0xab, 0x27, 0x1a, 0xf9, 0x21, 0x59, 0xc2, 0xa8, - 0xe3, 0x04, 0x64, 0x0c, 0x96, 0x49, 0x1c, 0xee, 0xd0, 0x17, 0xff, 0x60, 0x50, 0x8c, 0xa6, 0x1e, - 0xc9, 0xc0, 0xdc, 0x1f, 0x33, 0x83, 0x93, 0xa3, 0xd9, 0x04, 0xf5, 0x1d, 0x39, 0xed, 0x0b, 0x77, - 0x79, 0x48, 0xfb, 0x83, 0xf6, 0x9b, 0xc3, 0x77, 0x47, 0x10, 0x1d, 0x96, 0x4b, 0x44, 0x57, 0x54, - 0x2f, 0x97, 0x04, 0x99, 0x0e, 0x92, 0xb8, 0xa1, 0x4b, 0x47, 0x17, 0x42, 0x9e, 0x92, 0x2c, 0xd1, - 0x09, 0xf5, 0x22, 0x14, 0x60, 0xf4, 0x25, 0x8c, 0x24, 0x5e, 0x04, 0x1d, 0x86, 0x65, 0xed, 0x87, - 0x08, 0x2e, 0x7e, 0xd4, 0xfe, 0x23, 0x41, 0x78, 0x11, 0xab, 0xb1, 0x20, 0x70, 0xdd, 0xba, 0x63, - 0x48, 0xf5, 0x48, 0xf3, 0x9c, 0xbc, 0x8e, 0xd9, 0xc0, 0x9b, 0x66, 0xb7, 0x0e, 0x19, 0xaf, 0xa0, - 0x7d, 0xdc, 0xa2, 0xc7, 0x44, 0x7d, 0x68, 0x09, 0x1a, 0x0c, 0xf4, 0xf1, 0xfe, 0x9d, 0x6f, 0x6e, - 0x11, 0xd0, 0x8a, 0xe3, 0xf1, 0x76, 0xe9, 0x60, 0xd6, 0x69, 0xcf, 0xb1, 0xb1, 0x95, 0xa9, 0x94, - 0xd7, 0x9a, 0xe6, 0x8c, 0xa2, 0x87, 0xba, 0x0e, 0x65, 0xec, 0x34, 0xdb, 0xa5, 0x03, 0x4b, 0x11, - 0x0f, 0x54, 0xc4, 0x03, 0x3b, 0xe2, 0x41, 0x39, 0xe2, 0x81, 0x86, 0x38, 0x51, 0x11, 0x27, 0x76, - 0xc4, 0x49, 0x39, 0xe2, 0x44, 0x45, 0xec, 0x49, 0xba, 0xa3, 0x74, 0xeb, 0x41, 0x59, 0xaa, 0x4a, - 0x6e, 0xe3, 0x4a, 0x8b, 0xd9, 0xb3, 0xf5, 0xd0, 0x69, 0x2b, 0x18, 0x3d, 0x85, 0x6b, 0xf4, 0xdf, - 0x6d, 0xa9, 0x18, 0x3c, 0xa2, 0xca, 0xb2, 0x85, 0xce, 0x51, 0x7d, 0x2f, 0x07, 0x86, 0x9c, 0xd6, - 0x3b, 0x78, 0x00, 0x05, 0x45, 0x89, 0x94, 0x07, 0xcb, 0x9e, 0x29, 0x5e, 0x88, 0x41, 0x6f, 0x29, - 0x60, 0x7d, 0x58, 0xb5, 0x45, 0x26, 0xeb, 0x4a, 0xbd, 0xef, 0x2d, 0x15, 0x35, 0xeb, 0x33, 0x06, - 0xdc, 0x7b, 0xd7, 0xe8, 0x33, 0x74, 0x8d, 0x62, 0x2e, 0x5d, 0x4b, 0x55, 0xd3, 0x78, 0x72, 0x3d, - 0x4d, 0x6d, 0x7d, 0xed, 0xac, 0xc0, 0x69, 0xd1, 0x26, 0xfc, 0xb4, 0xf7, 0xbd, 0xbe, 0x9c, 0x23, - 0x1b, 0x65, 0x2a, 0x2f, 0xbd, 0x8e, 0xd2, 0x1f, 0xa4, 0xfc, 0x02, 0x98, 0x0c, 0xf2, 0xfa, 0x9d, - 0xb6, 0x0f, 0xa1, 0xf3, 0x93, 0x9c, 0xbb, 0xc8, 0xa2, 0xdb, 0xaf, 0xb4, 0x09, 0xee, 0xf8, 0x99, - 0x19, 0x70, 0xf9, 0x30, 0xdc, 0x11, 0x6c, 0x68, 0xd6, 0xfe, 0xfe, 0xf7, 0x1a, 0xd3, 0x6c, 0x23, - 0x50, 0x6c, 0xa5, 0x84, 0x3b, 0x04, 0x41, 0x94, 0xee, 0x83, 0x9f, 0xc8, 0xba, 0x7c, 0xf0, 0x81, - 0x3c, 0x17, 0x21, 0x8f, 0xa7, 0x7f, 0xe7, 0x69, 0x1a, 0xc8, 0x4e, 0xce, 0xaf, 0xec, 0xe6, 0xf4, - 0x0a, 0xad, 0x85, 0xa9, 0x0e, 0x16, 0xe3, 0xa7, 0xa2, 0xf5, 0x72, 0xf8, 0x10, 0xd6, 0x0b, 0xdc, - 0x7f, 0x7c, 0x2d, 0x26, 0x0b, 0xeb, 0xd6, 0xe6, 0x6c, 0xc0, 0xad, 0x00, 0x9b, 0xf6, 0x8f, 0x31, - 0xe3, 0x18, 0x75, 0xd0, 0x14, 0x9f, 0xfe, 0x3a, 0x74, 0x0b, 0x76, 0x00, 0xcd, 0xc3, 0xb5, 0x48, - 0x43, 0xa7, 0x99, 0x03, 0xbb, 0xde, 0x49, 0xd8, 0x44, 0x17, 0x7d, 0x5c, 0xa5, 0x72, 0x57, 0x9a, - 0xe1, 0xeb, 0xde, 0xba, 0xc0, 0x03, 0xb5, 0x5a, 0xc3, 0xb2, 0x8e, 0x42, 0x35, 0x6d, 0x69, 0xbf, - 0xe1, 0xb1, 0xdf, 0xf0, 0xd8, 0x78, 0xc3, 0x83, 0xbe, 0x3f, 0xb4, 0xa0, 0x2f, 0x02, 0xd9, 0xf7, - 0x3c, 0x0a, 0x5b, 0x23, 0xb4, 0x84, 0xa7, 0xc9, 0xab, 0xc7, 0xf5, 0x87, 0xf4, 0x87, 0x63, 0x58, - 0x29, 0xb2, 0x49, 0x58, 0x2d, 0x92, 0x03, 0x6d, 0xf6, 0x43, 0x84, 0xc4, 0x91, 0xc3, 0x18, 0x90, - 0x00, 0x4f, 0xd3, 0xf9, 0x70, 0x84, 0x60, 0x21, 0x78, 0x97, 0x4c, 0x19, 0xbd, 0x28, 0x8d, 0xf5, - 0x60, 0x47, 0xca, 0x40, 0x6a, 0x23, 0x28, 0x6c, 0x81, 0x92, 0xc4, 0xce, 0xbe, 0x2a, 0xa4, 0x06, - 0xef, 0xda, 0xef, 0x71, 0xb4, 0x2a, 0x8c, 0xa4, 0x4e, 0x2b, 0x2a, 0x79, 0x45, 0x48, 0x7b, 0x29, - 0x4d, 0x09, 0xd5, 0x54, 0x65, 0x61, 0xb2, 0x77, 0xb3, 0xbe, 0xe6, 0xdd, 0x65, 0x48, 0x52, 0x14, - 0x9e, 0x13, 0x89, 0x17, 0x38, 0x9d, 0x7c, 0x23, 0x7d, 0xeb, 0x74, 0x94, 0xde, 0x80, 0x8a, 0x34, - 0x71, 0x68, 0x64, 0x63, 0xc4, 0x91, 0x3e, 0x95, 0x81, 0xc3, 0x78, 0xce, 0x42, 0x48, 0xe0, 0xd0, - 0xb2, 0x45, 0xce, 0x24, 0xd3, 0xc9, 0xc3, 0x01, 0xd1, 0xf8, 0x83, 0x4b, 0x38, 0xf0, 0xe1, 0xac, - 0x8e, 0xff, 0x0c, 0xe8, 0x63, 0x4d, 0xf8, 0x23, 0x21, 0x1f, 0xe4, 0x5f, 0x37, 0x40, 0x0a, 0x29, - 0xd2, 0x1e, 0x0a, 0xef, 0x8f, 0x94, 0x0f, 0x16, 0x56, 0x46, 0x25, 0xa2, 0xa1, 0x4f, 0xea, 0x58, - 0x99, 0x6d, 0xd0, 0x82, 0x48, 0xdb, 0xe6, 0x3f, 0x97, 0x58, 0x3b, 0x63, 0x9a, 0x5d, 0x62, 0x2d, - 0xdb, 0xb2, 0x15, 0xe9, 0x59, 0x8b, 0xac, 0xac, 0xad, 0x5f, 0x85, 0xd2, 0x96, 0x52, 0x24, 0x35, - 0x14, 0x91, 0xf3, 0x2f, 0x2b, 0x50, 0xa3, 0x62, 0x1c, 0x54, 0x21, 0xc2, 0x4c, 0xff, 0x55, 0x49, - 0x6f, 0x99, 0x4b, 0x0c, 0x2b, 0x90, 0x67, 0x2e, 0x99, 0x2e, 0xe2, 0xc1, 0x20, 0xc5, 0x71, 0x26, - 0x60, 0x46, 0x03, 0x8b, 0xd6, 0xfe, 0x51, 0xeb, 0x60, 0x1b, 0xa9, 0xd5, 0x3c, 0x42, 0x06, 0x12, - 0x4f, 0x3c, 0x6a, 0x1e, 0xe3, 0xc4, 0xc3, 0x63, 0x94, 0x8a, 0xfe, 0x50, 0x4b, 0x30, 0x9d, 0x0d, - 0x6f, 0xa8, 0x01, 0xd8, 0xab, 0x5f, 0xa2, 0xff, 0x86, 0x6e, 0xc3, 0x89, 0xeb, 0x7d, 0xf4, 0xdf, - 0xc0, 0xf5, 0x9d, 0x41, 0xfd, 0x0a, 0xfd, 0x47, 0xd2, 0x12, 0xf4, 0x5f, 0xcf, 0x75, 0x83, 0x1a, - 0xa8, 0xbe, 0xa8, 0x0e, 0xdf, 0x21, 0xc8, 0x1b, 0x7c, 0x7a, 0x40, 0x5c, 0x05, 0x41, 0x50, 0xbd, - 0xfd, 0xbe, 0x89, 0x58, 0xb6, 0xd3, 0x20, 0x60, 0x7a, 0xe8, 0x29, 0xac, 0xee, 0x62, 0xe1, 0x83, - 0x89, 0x68, 0x2e, 0xe0, 0xec, 0x3b, 0xc4, 0x36, 0xf1, 0xc9, 0xf7, 0x92, 0x7f, 0xb3, 0x78, 0x63, - 0xc2, 0x62, 0x78, 0x04, 0x31, 0xfc, 0x44, 0xd2, 0x96, 0x08, 0x47, 0x93, 0x6c, 0x2c, 0x8f, 0x37, - 0xb6, 0x5a, 0xc2, 0x8d, 0x50, 0x85, 0xf1, 0x44, 0xba, 0x12, 0xc0, 0xd2, 0xb1, 0x76, 0xa5, 0x7b, - 0xc9, 0xaf, 0xe2, 0x7e, 0x76, 0xab, 0xa7, 0x82, 0xd0, 0x35, 0x82, 0xc7, 0x3d, 0x88, 0x80, 0x22, - 0x82, 0xde, 0x9d, 0x9f, 0xd5, 0x0e, 0x9b, 0xed, 0xa3, 0xf6, 0xf1, 0xfb, 0xce, 0x9b, 0xe3, 0xc3, - 0xe3, 0x77, 0xef, 0xdf, 0xbe, 0x3f, 0x3c, 0x30, 0x04, 0xd4, 0x01, 0x0b, 0xd4, 0x1a, 0xcb, 0x4c, - 0xe6, 0x48, 0x87, 0x3c, 0x70, 0x87, 0x2c, 0x23, 0x88, 0x67, 0xe8, 0xca, 0x01, 0x0d, 0xf1, 0x8a, - 0xf1, 0x99, 0x04, 0xa0, 0xe9, 0x21, 0x63, 0x17, 0xec, 0xb3, 0x78, 0x32, 0x77, 0x1c, 0xd1, 0xe4, - 0xbf, 0x5a, 0xdf, 0x1b, 0xd2, 0x57, 0xfb, 0xbb, 0xeb, 0x61, 0x63, 0x8f, 0x46, 0x75, 0x73, 0xeb, - 0x6a, 0x26, 0xc7, 0x3c, 0xca, 0xa6, 0x69, 0x84, 0x24, 0xee, 0x04, 0x41, 0x77, 0x8e, 0x3d, 0x7a, - 0x34, 0x1a, 0x53, 0xe4, 0x06, 0x52, 0xbd, 0xfc, 0x5c, 0x34, 0x0e, 0xf5, 0x12, 0x51, 0xfe, 0x25, - 0x66, 0x26, 0x9a, 0x64, 0x18, 0x03, 0x65, 0x62, 0xbf, 0x41, 0x73, 0x5d, 0x34, 0xed, 0xce, 0xcf, - 0xf0, 0xfd, 0x0e, 0x96, 0xc7, 0xdd, 0x19, 0xe0, 0x88, 0xf8, 0x20, 0xb7, 0x91, 0x9b, 0x8b, 0x11, - 0x1d, 0x2f, 0xee, 0xb2, 0x8a, 0xef, 0x86, 0xe3, 0x6b, 0x1c, 0xea, 0x97, 0xa4, 0x2f, 0xeb, 0xe7, - 0x67, 0xa1, 0xa4, 0x7b, 0xb7, 0x9b, 0xef, 0xde, 0x1e, 0x37, 0x44, 0x5c, 0xbf, 0x76, 0xf3, 0xed, - 0x31, 0xcd, 0x47, 0x93, 0x94, 0xbc, 0xcf, 0x09, 0xf1, 0x83, 0x78, 0x29, 0x12, 0xd8, 0xf1, 0x02, - 0x37, 0x9d, 0x17, 0xc3, 0x4d, 0x01, 0x79, 0x81, 0xc6, 0x01, 0x4d, 0x76, 0xec, 0x58, 0xc5, 0xbd, - 0x43, 0x46, 0x22, 0x10, 0xa9, 0x0c, 0x29, 0xc9, 0x70, 0x3d, 0xf6, 0x0d, 0x31, 0x72, 0xa1, 0x00, - 0x23, 0x1b, 0x33, 0x0c, 0x1e, 0x2f, 0xa9, 0x42, 0xb6, 0x6f, 0x8a, 0x33, 0xe9, 0xfe, 0x2a, 0x1e, - 0x28, 0x92, 0x02, 0x11, 0xc1, 0xc8, 0x2f, 0x6a, 0x7c, 0x8b, 0x66, 0x75, 0x8a, 0xfe, 0x07, 0x60, - 0x61, 0x12, 0x41, 0x05, 0x14, 0x4e, 0x87, 0x8c, 0x4d, 0x9d, 0xf6, 0x97, 0x1b, 0x9c, 0x9f, 0x61, - 0x59, 0x22, 0xb8, 0x89, 0x84, 0x64, 0x86, 0x42, 0xb4, 0x66, 0xf2, 0x12, 0x16, 0x99, 0x09, 0xbe, - 0xc4, 0xfc, 0x3e, 0x06, 0x42, 0xaa, 0x0a, 0xe2, 0x64, 0x99, 0xf8, 0x72, 0xa2, 0x14, 0x39, 0x24, - 0xb7, 0x90, 0xb0, 0xa2, 0x54, 0x71, 0x33, 0x76, 0xeb, 0xd2, 0xe7, 0x76, 0xc2, 0x8d, 0x4f, 0xc9, - 0x93, 0x2f, 0xbf, 0x9d, 0x9d, 0xfc, 0x72, 0x76, 0x72, 0x71, 0xf6, 0xe5, 0xe7, 0x9a, 0x25, 0x20, - 0x3e, 0x22, 0x98, 0xc3, 0xe3, 0x96, 0xe1, 0x20, 0xc7, 0xc7, 0xef, 0xde, 0x1e, 0xb6, 0xda, 0x6f, - 0x0e, 0x0a, 0x9b, 0x50, 0xa0, 0xc2, 0x13, 0x9f, 0x4a, 0x71, 0x83, 0x0a, 0x07, 0x05, 0x2f, 0x57, - 0x70, 0x8b, 0xa1, 0x6c, 0x21, 0x3c, 0x92, 0x26, 0x9d, 0x50, 0x0b, 0xf5, 0x77, 0xfc, 0x34, 0x51, - 0x47, 0x29, 0xd0, 0x52, 0x71, 0xec, 0x9b, 0x4e, 0x21, 0x32, 0xd2, 0x20, 0x1e, 0x8f, 0x63, 0x16, - 0xea, 0xc8, 0x10, 0x20, 0x14, 0x54, 0xfb, 0x49, 0x3a, 0xcf, 0x2e, 0xe3, 0xd9, 0x8b, 0x0b, 0x1b, - 0xb3, 0x7f, 0xda, 0x6a, 0x83, 0x63, 0xa5, 0x83, 0x78, 0x5a, 0xf2, 0x34, 0x14, 0xcb, 0x2d, 0x8b, - 0xd3, 0xcc, 0x60, 0x56, 0x45, 0x6a, 0x96, 0xe1, 0xca, 0xba, 0x0c, 0xbf, 0xa6, 0x6a, 0x69, 0x12, - 0xce, 0xb3, 0x77, 0x18, 0xce, 0x2e, 0xef, 0x14, 0x0e, 0x52, 0x42, 0x42, 0x49, 0x87, 0xac, 0xec, - 0x8d, 0x4a, 0x5d, 0xa1, 0xf6, 0xc3, 0xf3, 0x0b, 0x31, 0xf4, 0xda, 0x1f, 0x68, 0xe2, 0x4c, 0xaf, - 0x0e, 0x0c, 0x4b, 0x36, 0x10, 0xc2, 0xb2, 0x7c, 0x79, 0x4e, 0x58, 0x42, 0x56, 0x0b, 0x34, 0x6b, - 0xf2, 0xbc, 0xdc, 0x22, 0xf2, 0xc2, 0xb1, 0xa1, 0x47, 0x70, 0x86, 0x2f, 0xe6, 0x82, 0xb1, 0x3f, - 0x68, 0xe9, 0x75, 0xd8, 0x5d, 0x6d, 0x83, 0xad, 0x1f, 0x58, 0x27, 0x94, 0xf7, 0x00, 0x6b, 0xbe, - 0xc6, 0xe7, 0x4a, 0x38, 0xcd, 0x28, 0x66, 0x2f, 0x24, 0x34, 0xda, 0x9d, 0x77, 0x48, 0xbd, 0xa7, - 0x8a, 0x51, 0x97, 0x7b, 0xfc, 0x23, 0x12, 0xc8, 0x9b, 0xbc, 0x7f, 0x80, 0x83, 0x34, 0x82, 0xa2, - 0x12, 0x4a, 0x4b, 0x54, 0xc4, 0x63, 0x67, 0x13, 0x20, 0x70, 0x05, 0xb8, 0x75, 0xfa, 0x75, 0xeb, - 0xbd, 0x39, 0xa2, 0xf1, 0xbf, 0x85, 0xbb, 0x4f, 0x5e, 0xb4, 0xc1, 0x91, 0xa8, 0xcc, 0x5e, 0xbe, - 0x67, 0x29, 0xc1, 0x80, 0x33, 0x91, 0xfe, 0xa6, 0x3b, 0x65, 0x21, 0x1f, 0x5f, 0xf6, 0x03, 0xf4, - 0x06, 0x66, 0xec, 0xc6, 0xa3, 0x4b, 0x92, 0x29, 0x72, 0xe8, 0x68, 0x00, 0xf1, 0x1e, 0x1d, 0x10, - 0xa6, 0xd5, 0x42, 0x3a, 0xc3, 0x52, 0x77, 0xd8, 0x2f, 0xae, 0x07, 0x2b, 0x3a, 0x0b, 0x58, 0xa9, - 0x5c, 0xb9, 0xcb, 0xae, 0x73, 0xa5, 0x2c, 0xaf, 0xd7, 0x2b, 0x62, 0xe9, 0xe0, 0x17, 0x1a, 0x40, - 0x31, 0xaa, 0x3b, 0x82, 0x3e, 0xaa, 0x9b, 0x93, 0xe7, 0x1b, 0xe4, 0x8a, 0x5c, 0xb5, 0x53, 0xf0, - 0xa5, 0x48, 0x52, 0x9d, 0x27, 0x62, 0x45, 0x12, 0x0d, 0x42, 0x93, 0x6b, 0x58, 0x91, 0x96, 0x06, - 0x50, 0xcb, 0xcf, 0x49, 0xf4, 0x68, 0xa4, 0x90, 0x5e, 0x6b, 0x75, 0x90, 0x5e, 0xe9, 0x44, 0xe4, - 0xaf, 0x5e, 0x8d, 0xc7, 0xf6, 0xad, 0x90, 0x32, 0x9d, 0x43, 0xe0, 0xe6, 0xc6, 0xb5, 0x7f, 0x0d, - 0xaf, 0x94, 0x6b, 0x4f, 0x58, 0x31, 0xc6, 0x52, 0x6d, 0x4b, 0xa0, 0x3f, 0xa0, 0xca, 0x15, 0xdb, - 0xa6, 0x2b, 0x3b, 0x36, 0x29, 0x5e, 0xf4, 0xee, 0x28, 0xc5, 0x70, 0xff, 0x15, 0x2a, 0x33, 0xc6, - 0x57, 0xc4, 0x6f, 0x48, 0xa1, 0x2e, 0x93, 0x83, 0x5f, 0xb2, 0x7b, 0xa5, 0xe4, 0x76, 0xa8, 0xb5, - 0x94, 0xa9, 0x48, 0xa1, 0xd2, 0xc2, 0x55, 0x79, 0xcf, 0xa4, 0x27, 0x82, 0x2d, 0x2d, 0xa9, 0x7b, - 0xd1, 0x6a, 0x1a, 0x83, 0x15, 0x04, 0x85, 0x4c, 0xad, 0x24, 0x0e, 0x12, 0xc2, 0x14, 0x3e, 0xe6, - 0xe2, 0xa7, 0x0b, 0x07, 0xf7, 0x82, 0xde, 0x67, 0x2a, 0x57, 0xd1, 0xcd, 0xea, 0xbc, 0x51, 0x71, - 0x7f, 0xdc, 0x90, 0x75, 0xbb, 0x79, 0x29, 0xc8, 0x74, 0xe5, 0x9a, 0xb4, 0xdd, 0xf5, 0x58, 0xdf, - 0x34, 0xe7, 0xa1, 0x20, 0xa1, 0x13, 0xe1, 0x77, 0x6e, 0xea, 0x66, 0xdb, 0x0d, 0x0a, 0xc9, 0x7d, - 0x24, 0x5f, 0xd4, 0x26, 0x76, 0xe9, 0x18, 0xf5, 0x17, 0x54, 0xd7, 0x70, 0x38, 0xfa, 0xbc, 0x81, - 0x11, 0xbb, 0xbe, 0xa8, 0x10, 0x47, 0x0a, 0x75, 0x03, 0x9c, 0x6e, 0x31, 0x5e, 0x1f, 0x21, 0x34, - 0x14, 0xb7, 0x3a, 0x7f, 0x3d, 0xf9, 0xb3, 0xfb, 0xcb, 0xd9, 0x97, 0xd3, 0xee, 0xa7, 0xb3, 0x8b, - 0xdf, 0x4e, 0xbe, 0x7c, 0x3c, 0xad, 0x1d, 0x76, 0xde, 0xbe, 0x79, 0x2b, 0xd9, 0xa5, 0x7b, 0x3b, - 0xb6, 0xba, 0x1d, 0x8b, 0x24, 0xe7, 0x60, 0x96, 0xce, 0xad, 0x31, 0x3b, 0xf6, 0x16, 0xe3, 0xde, - 0x62, 0x7c, 0xad, 0x16, 0xe3, 0xde, 0x86, 0xdb, 0xdb, 0x70, 0xcf, 0xdc, 0x86, 0x63, 0xe2, 0xb9, - 0xaa, 0x19, 0x17, 0x14, 0x56, 0xc7, 0xbd, 0x61, 0xb7, 0x37, 0xec, 0xf6, 0x86, 0xdd, 0x13, 0x19, - 0x76, 0x2f, 0xc8, 0xf2, 0xaa, 0xbc, 0x6f, 0xbc, 0xb9, 0x4d, 0xb6, 0x5a, 0x09, 0xad, 0x72, 0x7c, - 0x70, 0x6f, 0x7a, 0xe9, 0xa6, 0x97, 0xe5, 0x39, 0x2f, 0xba, 0x51, 0x0e, 0xec, 0xaa, 0x76, 0xb3, - 0xfd, 0x59, 0xaf, 0xc7, 0xb1, 0xd8, 0x8a, 0xf6, 0x15, 0xcb, 0x51, 0x56, 0xaa, 0xee, 0xc5, 0xc7, - 0x93, 0x5f, 0x4e, 0x6b, 0x9d, 0x0d, 0x2c, 0xb9, 0x87, 0xb6, 0xd7, 0xec, 0x16, 0x59, 0xb9, 0x45, - 0xb7, 0x8d, 0xbd, 0x26, 0x76, 0x15, 0xcb, 0x26, 0xd1, 0xde, 0x4c, 0x7b, 0x38, 0x33, 0xed, 0x19, - 0x58, 0x45, 0xcf, 0xce, 0x52, 0xdc, 0xb1, 0x99, 0xb6, 0xbf, 0x27, 0xf9, 0x8c, 0xee, 0x49, 0xbe, - 0x72, 0x73, 0xf8, 0x69, 0xcd, 0xcf, 0xe7, 0x66, 0x8c, 0xef, 0xca, 0x1c, 0xfe, 0x7f, 0x73, 0x73, - 0x75, 0x7b, 0x93, 0x9f, 0xc1, 0xad, 0xb7, 0x79, 0x6b, 0xd0, 0xa1, 0xf6, 0x36, 0xff, 0xde, 0xe6, - 0xdf, 0xdb, 0xfc, 0x0f, 0x61, 0xf3, 0x8b, 0xa9, 0x18, 0xcb, 0x0a, 0x7a, 0xb9, 0x2f, 0x60, 0x93, - 0x9b, 0x92, 0x8a, 0xbc, 0xd1, 0x43, 0x90, 0xac, 0xb4, 0xc9, 0x77, 0x67, 0x68, 0xbc, 0x96, 0x8b, - 0x8a, 0x2f, 0x7f, 0xa7, 0x7c, 0xb5, 0xab, 0xe4, 0x19, 0xdd, 0x78, 0x7c, 0x42, 0x57, 0xce, 0x3e, - 0xa4, 0xef, 0xeb, 0x7a, 0xe8, 0x43, 0xee, 0x6a, 0xb9, 0x7d, 0x6a, 0x9b, 0x9b, 0x0b, 0x8f, 0xf7, - 0x5a, 0xa0, 0x06, 0xc7, 0xd5, 0x00, 0x97, 0x26, 0x9c, 0x89, 0x01, 0x27, 0xa2, 0xda, 0xa3, 0xfd, - 0x5d, 0x86, 0x11, 0x28, 0x0e, 0x5f, 0x94, 0xff, 0x90, 0x60, 0x5b, 0xa0, 0x8e, 0x24, 0xf7, 0x6e, - 0xf9, 0x02, 0x11, 0xa8, 0xfd, 0xdc, 0x5c, 0xa8, 0xf0, 0x49, 0x39, 0x7c, 0xa2, 0xc2, 0x2f, 0xbb, - 0xf8, 0x85, 0xe0, 0x3a, 0xef, 0x09, 0xa4, 0xe0, 0xd0, 0x1b, 0x5d, 0x9c, 0x3e, 0x4c, 0x93, 0xa3, - 0xd5, 0xba, 0xac, 0x77, 0xe8, 0x33, 0x27, 0xae, 0x4e, 0xd0, 0x52, 0x20, 0x4f, 0x36, 0x41, 0x9e, - 0xd8, 0x91, 0x27, 0x82, 0x31, 0x70, 0x60, 0x8e, 0xf5, 0x6f, 0x41, 0x63, 0x0e, 0x42, 0xbd, 0xea, - 0xa3, 0x96, 0xbb, 0x12, 0xae, 0x64, 0x83, 0x3b, 0xcc, 0x14, 0x57, 0x82, 0x70, 0x25, 0xae, 0xe2, - 0xf1, 0x05, 0x5c, 0xc6, 0x7b, 0xcc, 0xa8, 0x52, 0xdf, 0x9c, 0x91, 0xb8, 0xe6, 0xfb, 0xcb, 0xc4, - 0x07, 0xfc, 0x80, 0xef, 0x2d, 0xbc, 0x60, 0x0f, 0x70, 0xa5, 0x13, 0x3b, 0x74, 0xb0, 0xc8, 0x33, - 0xcd, 0x71, 0x41, 0xc1, 0x43, 0xbd, 0xdf, 0x5d, 0x4a, 0xe9, 0xa6, 0x52, 0x89, 0xa5, 0x54, 0xf2, - 0x48, 0xa7, 0x83, 0x68, 0x2a, 0x54, 0x12, 0x9b, 0x12, 0x93, 0x4d, 0x94, 0xc2, 0xfd, 0x7d, 0x97, - 0xfd, 0xe9, 0xa5, 0xfd, 0xe9, 0xa5, 0x72, 0xb7, 0x38, 0x1b, 0x32, 0x83, 0xcf, 0xec, 0x21, 0x5c, - 0xe6, 0xd8, 0x51, 0x54, 0x42, 0xa5, 0xc8, 0xb7, 0xf6, 0x95, 0x00, 0x31, 0xf1, 0x97, 0x94, 0x5b, - 0xd6, 0x9b, 0x2a, 0xd8, 0xfe, 0xf2, 0xce, 0xfe, 0xe0, 0xd7, 0x33, 0x39, 0xf8, 0xb5, 0x3b, 0xdf, - 0xb6, 0x34, 0x15, 0xc5, 0x4f, 0x43, 0xcd, 0x22, 0xd3, 0x57, 0xe7, 0xa7, 0xa9, 0xc9, 0x32, 0x26, - 0xe3, 0x24, 0xdb, 0xbb, 0xa0, 0xf7, 0x2e, 0xe8, 0xbd, 0x0b, 0xfa, 0x15, 0xba, 0xa0, 0xb1, 0xaa, - 0x1e, 0x51, 0x99, 0xc1, 0xe7, 0xa5, 0xa7, 0x5b, 0x1f, 0xcd, 0x45, 0x20, 0x09, 0x14, 0x3e, 0x7e, - 0x05, 0xb0, 0x65, 0x9d, 0x1b, 0x26, 0x2e, 0xc5, 0x9e, 0xac, 0xc4, 0x9e, 0x54, 0xc3, 0x9e, 0x48, - 0xd8, 0x21, 0xd4, 0x56, 0x35, 0x37, 0xf9, 0xea, 0x17, 0x49, 0xe7, 0xfd, 0x4b, 0xdc, 0xad, 0xc5, - 0x18, 0x4b, 0xc8, 0x62, 0x7b, 0x66, 0x56, 0xd0, 0xfe, 0x16, 0x57, 0xf9, 0x3a, 0xbc, 0x3b, 0x3d, - 0xf8, 0x71, 0x95, 0xd8, 0x97, 0x78, 0xa1, 0xcc, 0x88, 0xa1, 0xe4, 0x20, 0x40, 0xb1, 0xc7, 0x4b, - 0x3b, 0x7c, 0x0d, 0x75, 0xe5, 0x05, 0xfa, 0x47, 0x91, 0x10, 0x82, 0xdc, 0x6e, 0x6c, 0x8c, 0x46, - 0x84, 0x45, 0x89, 0xdb, 0x8c, 0x35, 0xe0, 0xc4, 0x0a, 0x9c, 0x14, 0x80, 0xb1, 0x2b, 0x8f, 0xd7, - 0xe2, 0x73, 0x14, 0x3e, 0x96, 0x73, 0x6e, 0x48, 0x1c, 0x73, 0x91, 0xf2, 0x9e, 0xea, 0x71, 0x43, - 0x48, 0x47, 0x59, 0x42, 0x93, 0x98, 0xb7, 0xa6, 0x1c, 0x8a, 0xf6, 0xf1, 0x8f, 0x7f, 0x56, 0x3a, - 0x61, 0x99, 0x8f, 0xd0, 0x0a, 0x32, 0x93, 0x1f, 0x53, 0xe0, 0x32, 0x1f, 0xaf, 0x28, 0x96, 0xcc, - 0xe4, 0xfa, 0xf2, 0x32, 0x9d, 0x95, 0x3d, 0xb4, 0xba, 0x66, 0x18, 0xae, 0x96, 0x21, 0xad, 0xbd, - 0x69, 0x6c, 0xae, 0x56, 0xe4, 0x38, 0xe6, 0xd8, 0x85, 0x0d, 0x38, 0x79, 0x1b, 0xa8, 0xf4, 0xd7, - 0x5c, 0x88, 0x32, 0x44, 0x4a, 0xb6, 0x23, 0x12, 0xca, 0x0d, 0x1e, 0xf4, 0x96, 0x3b, 0x00, 0xc2, - 0x4f, 0x89, 0xae, 0x92, 0x3a, 0x57, 0xde, 0x4b, 0xee, 0x16, 0xfb, 0x49, 0x7f, 0x8c, 0xa2, 0xb0, - 0xd4, 0xb6, 0xec, 0x59, 0xed, 0xca, 0xdd, 0x54, 0x18, 0x9d, 0x19, 0xc4, 0x40, 0x42, 0xaa, 0xc4, - 0x1c, 0x82, 0x46, 0x97, 0x65, 0x83, 0xb0, 0x2c, 0x8e, 0x7c, 0x8c, 0xba, 0x0d, 0x87, 0x83, 0xd3, - 0xdf, 0xe7, 0x10, 0x4e, 0xc5, 0x49, 0x3e, 0x8b, 0xe7, 0xa6, 0xf7, 0x3b, 0xe0, 0x31, 0x8d, 0xf9, - 0x74, 0x38, 0xe9, 0xde, 0xe2, 0x90, 0xb0, 0xda, 0x91, 0x72, 0x21, 0x96, 0x5b, 0xc5, 0x89, 0xd9, - 0x22, 0x41, 0xc5, 0x5a, 0x2b, 0x62, 0x96, 0xb6, 0x09, 0x58, 0x9b, 0x04, 0x8c, 0x26, 0xc8, 0x9a, - 0x31, 0x51, 0xfd, 0x51, 0x15, 0x34, 0x61, 0x36, 0x48, 0x22, 0xf1, 0x33, 0x60, 0x60, 0xe1, 0x3d, - 0x2f, 0xd4, 0xd6, 0x0b, 0xb5, 0x45, 0xa1, 0xb6, 0x28, 0xd4, 0x86, 0x42, 0x9a, 0xbf, 0x9f, 0x60, - 0xf3, 0x69, 0x48, 0x52, 0x36, 0xfa, 0xf4, 0x9d, 0xa0, 0x66, 0x2c, 0x07, 0x6e, 0xc6, 0x5d, 0xc2, - 0xf1, 0x02, 0xda, 0x10, 0xbe, 0x70, 0xc0, 0x67, 0x08, 0xb6, 0x8d, 0x3e, 0x7c, 0xb5, 0xc7, 0x20, - 0x08, 0xbd, 0xeb, 0x5b, 0xf2, 0xee, 0x16, 0x4b, 0x6b, 0xde, 0xf2, 0x6e, 0xc1, 0xe3, 0xa2, 0xc5, - 0x37, 0x29, 0x92, 0x0e, 0x69, 0xc4, 0x1e, 0xd5, 0x61, 0x2f, 0x25, 0xb1, 0x27, 0x92, 0xdc, 0xe0, - 0x10, 0xc2, 0x58, 0x42, 0x10, 0x6b, 0x87, 0xc2, 0x36, 0xd0, 0x17, 0x84, 0xef, 0x2a, 0x0e, 0x3f, - 0x10, 0x0c, 0x15, 0xe2, 0xd9, 0xe3, 0x15, 0x86, 0x9f, 0x4c, 0x1f, 0x32, 0xf4, 0xc0, 0x50, 0x60, - 0x5f, 0x93, 0x06, 0xea, 0xac, 0xe8, 0xaf, 0x4c, 0x70, 0x19, 0x22, 0xf4, 0xdb, 0x82, 0x07, 0xaa, - 0xf0, 0x2b, 0xa4, 0x68, 0x12, 0x16, 0x4b, 0x0a, 0x12, 0x2f, 0x8c, 0x11, 0xe9, 0xf3, 0x6a, 0x7c, - 0xdc, 0x76, 0x3a, 0x7c, 0x3e, 0x0b, 0xf1, 0xb5, 0x9d, 0xfc, 0x45, 0xbd, 0x34, 0xcf, 0xe9, 0x94, - 0x39, 0x3f, 0x8b, 0x0a, 0xc1, 0xf6, 0x42, 0xe3, 0x96, 0x09, 0xb5, 0x96, 0xcd, 0x5b, 0x26, 0x4a, - 0xea, 0x21, 0x94, 0xe0, 0x76, 0x92, 0x2a, 0x73, 0x99, 0x1b, 0x01, 0x33, 0xa6, 0x2e, 0x84, 0x92, - 0x2c, 0x1b, 0x81, 0x90, 0x99, 0x93, 0x8d, 0x36, 0x08, 0xf4, 0xd8, 0xc5, 0xc4, 0xc6, 0x92, 0xa4, - 0xd7, 0x80, 0x2e, 0xd3, 0x18, 0xcb, 0xd2, 0x02, 0x9c, 0xfa, 0xa8, 0x1c, 0x86, 0x2d, 0xcb, 0xb4, - 0x64, 0xf5, 0xe2, 0x31, 0xe2, 0x41, 0x30, 0xe4, 0x20, 0xe8, 0x1a, 0x92, 0xcc, 0x2c, 0x54, 0xbf, - 0x05, 0x7e, 0x3a, 0xcc, 0x7b, 0x57, 0x3a, 0xad, 0xb3, 0x2c, 0x8f, 0xf3, 0xb4, 0x3b, 0x5f, 0x8e, - 0x93, 0x6c, 0x64, 0x29, 0x48, 0x42, 0xcc, 0x69, 0xbb, 0x49, 0x8a, 0x10, 0xef, 0x5d, 0xe1, 0x08, - 0x8c, 0x2f, 0x60, 0xf7, 0x60, 0xc5, 0x06, 0x1a, 0x49, 0x1d, 0xc5, 0x49, 0x8a, 0x16, 0xae, 0x51, - 0x3c, 0x49, 0x2d, 0x10, 0x03, 0xf6, 0xc0, 0x80, 0x96, 0x2d, 0x38, 0x00, 0x44, 0xb0, 0x9e, 0x8c, - 0x47, 0x80, 0x98, 0xcb, 0xe3, 0x78, 0x1a, 0x5a, 0x8e, 0x5c, 0x15, 0x4d, 0xbb, 0x82, 0x61, 0xa7, - 0xb0, 0xe8, 0x33, 0x79, 0x69, 0x5b, 0xe8, 0x31, 0x91, 0x3c, 0x2b, 0xf9, 0x49, 0x13, 0xe6, 0x26, - 0x55, 0x73, 0xd9, 0x39, 0x15, 0xac, 0x79, 0x08, 0x0f, 0x20, 0x4b, 0x84, 0x0e, 0x61, 0xa9, 0x08, - 0x54, 0xe6, 0xcb, 0x79, 0x3a, 0x18, 0x43, 0xb0, 0x41, 0xc4, 0x79, 0xa3, 0x34, 0x6a, 0x68, 0xf3, - 0xfa, 0xaf, 0xce, 0x77, 0xa6, 0xa8, 0x42, 0x9f, 0xc2, 0x02, 0xf6, 0x83, 0x65, 0xfa, 0xc2, 0x53, - 0x18, 0x3f, 0xd8, 0x67, 0x2d, 0xea, 0x54, 0x4c, 0x05, 0x88, 0x41, 0x42, 0xd0, 0x5f, 0xad, 0xef, - 0x3e, 0xfd, 0xd5, 0xfe, 0xee, 0xb3, 0x09, 0xec, 0x06, 0x38, 0x6e, 0x71, 0x78, 0x5f, 0x83, 0x3e, - 0xab, 0x41, 0x8d, 0xdb, 0x55, 0xc8, 0x2b, 0x2b, 0x22, 0x2e, 0x6b, 0xca, 0x6a, 0xc4, 0x54, 0xaa, - 0x50, 0x7c, 0x6a, 0x9a, 0xea, 0x2b, 0x3b, 0xcf, 0x86, 0x93, 0x7c, 0x55, 0x08, 0x6d, 0x1a, 0x09, - 0x99, 0x4b, 0x23, 0x24, 0x82, 0xae, 0x32, 0x21, 0x8d, 0x22, 0x15, 0x5b, 0x53, 0x1d, 0x45, 0x06, - 0x45, 0xa4, 0x4b, 0xa4, 0xcf, 0x91, 0xda, 0x4f, 0x07, 0x56, 0xc4, 0x41, 0x89, 0x08, 0xac, 0x7d, - 0x38, 0x28, 0xc9, 0x0d, 0xac, 0x38, 0x15, 0xda, 0x24, 0x97, 0x16, 0x25, 0x8f, 0x98, 0x65, 0x60, - 0xa7, 0x80, 0x0b, 0x53, 0xa5, 0x1d, 0x9b, 0x5e, 0xe0, 0x59, 0x0e, 0xa1, 0x27, 0xbd, 0xa8, 0x50, - 0x9a, 0x9d, 0x8b, 0x42, 0x8a, 0x00, 0x3b, 0xff, 0x44, 0xe5, 0x44, 0xed, 0x27, 0xcc, 0xa5, 0x41, - 0xe7, 0x08, 0x7b, 0x59, 0xf1, 0x48, 0x28, 0xac, 0x8e, 0xa5, 0x33, 0x91, 0xd5, 0xa0, 0xc9, 0xa3, - 0x9a, 0x42, 0xc2, 0x5f, 0x8a, 0xf8, 0x66, 0xba, 0x22, 0x99, 0x5a, 0xe7, 0x2b, 0x07, 0x91, 0xc4, - 0x5e, 0x6e, 0xe3, 0x90, 0xd0, 0xfc, 0xe9, 0x98, 0x58, 0x1f, 0xaf, 0xc5, 0x32, 0x28, 0x8c, 0x20, - 0x86, 0x4c, 0x22, 0x53, 0x45, 0x00, 0x6f, 0x4c, 0xbf, 0x0d, 0xf5, 0x66, 0xe0, 0xf8, 0xb1, 0x0e, - 0x9c, 0x9d, 0xc2, 0x07, 0xb4, 0xd4, 0x85, 0xc6, 0x87, 0xe3, 0x57, 0x70, 0xc6, 0x2b, 0xbc, 0x97, - 0xbb, 0x02, 0xcf, 0x76, 0xc4, 0xab, 0x93, 0x08, 0x87, 0x29, 0x95, 0x65, 0x40, 0x5d, 0xc3, 0xaf, - 0xf2, 0x27, 0x29, 0xd8, 0x43, 0xd2, 0x09, 0x07, 0x67, 0x2d, 0x2f, 0x08, 0x0e, 0xe4, 0x1a, 0xfb, - 0xa4, 0x1d, 0x17, 0x61, 0xaf, 0x32, 0x47, 0xe3, 0x63, 0x3f, 0x3d, 0x27, 0xc7, 0xd7, 0x7f, 0xf5, - 0x68, 0xa4, 0x5f, 0xd9, 0xf3, 0x0c, 0xb2, 0xd1, 0xb4, 0xba, 0xf0, 0x31, 0x91, 0x21, 0x51, 0x47, - 0x2a, 0x81, 0x6a, 0x24, 0x3b, 0x4e, 0x5b, 0x7d, 0xa8, 0x43, 0x5a, 0x2b, 0x1c, 0xa8, 0x09, 0xb7, - 0x75, 0xad, 0x3d, 0x1e, 0xdf, 0xb8, 0x0a, 0x0e, 0x21, 0x5a, 0x2f, 0xe7, 0x4b, 0x29, 0xfe, 0xf4, - 0x0d, 0x95, 0xca, 0xe8, 0xdf, 0x40, 0x5a, 0xa0, 0x60, 0xf4, 0xe5, 0x25, 0x88, 0x2d, 0x27, 0xf4, - 0xd3, 0x51, 0x75, 0x28, 0x1e, 0x9d, 0x5c, 0x68, 0x0a, 0x91, 0x9c, 0x8f, 0x84, 0x28, 0xb6, 0x29, - 0x20, 0x0e, 0xaf, 0xa2, 0x4f, 0xd4, 0x3e, 0x34, 0x54, 0xfd, 0x42, 0x5d, 0xf8, 0xf8, 0xcb, 0x4a, - 0xe0, 0x26, 0x81, 0xd8, 0xd9, 0x0a, 0xd2, 0xd6, 0xf7, 0xba, 0x54, 0xd4, 0xb5, 0x3a, 0x6f, 0xa9, - 0xa9, 0x14, 0x3e, 0x49, 0xa8, 0xa8, 0xf5, 0xd7, 0xf6, 0x2d, 0x9d, 0x69, 0x12, 0x10, 0x71, 0x34, - 0x51, 0x00, 0x4f, 0xab, 0x57, 0xd1, 0xd4, 0x65, 0x6b, 0x92, 0xfe, 0x26, 0xfe, 0x20, 0x97, 0x9c, - 0xbb, 0xda, 0xab, 0xfc, 0x0f, 0xaf, 0xf2, 0xdb, 0x3c, 0xc5, 0xc3, 0xd1, 0xa8, 0xec, 0xe4, 0x92, - 0xc8, 0xb7, 0x1f, 0x5f, 0x12, 0x30, 0xa6, 0x33, 0x4c, 0x52, 0x6e, 0x99, 0xf3, 0x5f, 0x05, 0x2b, - 0x7b, 0x86, 0x28, 0x1e, 0x65, 0x65, 0x14, 0x8b, 0x7c, 0x3b, 0xc5, 0x02, 0xc6, 0x44, 0xb1, 0x94, - 0x5b, 0x46, 0xb1, 0x0a, 0xf6, 0xa2, 0x0f, 0x3b, 0xe1, 0xa6, 0x94, 0x9c, 0x9b, 0x11, 0xf9, 0xf6, - 0x77, 0x43, 0x39, 0x88, 0xf1, 0xed, 0x50, 0x91, 0x5b, 0xfa, 0x4a, 0x94, 0x02, 0xb6, 0x8a, 0x60, - 0xfb, 0xb9, 0x36, 0x9e, 0x5d, 0x4e, 0xae, 0xed, 0x84, 0x9b, 0xc8, 0x5c, 0x49, 0xac, 0xb2, 0x37, - 0xf1, 0x1c, 0x6d, 0xc1, 0xc7, 0x34, 0xd9, 0xd7, 0x75, 0x1f, 0x98, 0x4c, 0xfc, 0x6a, 0x36, 0x2b, - 0x48, 0x61, 0xc5, 0xed, 0x7a, 0x48, 0x13, 0xdb, 0x95, 0xac, 0x55, 0x49, 0xca, 0x89, 0x9f, 0xa6, - 0x23, 0x56, 0x22, 0xd7, 0x57, 0x65, 0x9f, 0xe9, 0xb0, 0x95, 0x8c, 0x6a, 0x23, 0xf9, 0x25, 0x7e, - 0x9a, 0x68, 0x11, 0xb9, 0xbe, 0x2a, 0xd5, 0x4c, 0xb4, 0xc8, 0xa8, 0xd6, 0x97, 0x4c, 0x3b, 0x3f, - 0x9b, 0x25, 0x09, 0x1c, 0xf1, 0xd3, 0xf4, 0x5c, 0x2c, 0xcf, 0xf4, 0x55, 0x29, 0x64, 0x7c, 0x36, - 0x56, 0xc2, 0xb4, 0x89, 0x28, 0xe1, 0xbf, 0x6c, 0x84, 0xd0, 0x53, 0x71, 0x92, 0x74, 0xb1, 0x92, - 0x41, 0xb7, 0x2e, 0x8b, 0x32, 0x62, 0xef, 0xd5, 0xd8, 0x7b, 0x35, 0xf6, 0x5e, 0x8d, 0xbd, 0x57, - 0x63, 0xef, 0xd5, 0x78, 0x3d, 0x5e, 0x0d, 0x76, 0x22, 0x58, 0x9c, 0x79, 0x53, 0x4e, 0xc9, 0x11, - 0x3e, 0x78, 0x56, 0x8e, 0x0f, 0xf1, 0x5a, 0xd2, 0x6c, 0x9a, 0x8d, 0x62, 0x68, 0xfd, 0x16, 0x9e, - 0x10, 0xaa, 0x9f, 0x91, 0x13, 0x6e, 0xa8, 0x6d, 0xcd, 0x05, 0xdc, 0xb9, 0xc2, 0x57, 0xc7, 0x88, - 0x92, 0x46, 0x36, 0x10, 0xa5, 0x0e, 0xf2, 0xc9, 0x9b, 0x94, 0xb6, 0xfa, 0x49, 0x30, 0x39, 0x7a, - 0xf9, 0xe9, 0xe2, 0xd3, 0xe7, 0xee, 0xf9, 0x9f, 0xb5, 0x77, 0xd2, 0x7d, 0xa8, 0xd3, 0x4f, 0x3f, - 0x9f, 0x76, 0x7f, 0x3e, 0xf9, 0xf5, 0xd7, 0x13, 0xd4, 0xda, 0x76, 0xeb, 0xd8, 0x70, 0x18, 0xe6, - 0xa0, 0xa8, 0x35, 0xc3, 0x62, 0x5c, 0xc1, 0x0e, 0xde, 0xad, 0x0d, 0xbb, 0x43, 0xfb, 0x73, 0x57, - 0x26, 0xe4, 0x4e, 0xed, 0xbf, 0x47, 0x30, 0xdf, 0x4c, 0xde, 0x3c, 0xb3, 0xc9, 0x23, 0x9f, 0xb6, - 0xb2, 0x58, 0x69, 0x5b, 0x18, 0x32, 0xa5, 0x5c, 0xba, 0x9e, 0x1d, 0x52, 0x6e, 0x86, 0xac, 0x65, - 0x46, 0x3c, 0xc6, 0xe9, 0x3b, 0x89, 0x79, 0xd6, 0xd3, 0xe7, 0xcb, 0x38, 0x63, 0x3d, 0x95, 0x1c, - 0xc4, 0x33, 0x1d, 0x1e, 0x50, 0xac, 0x8b, 0x22, 0x9d, 0x0e, 0x13, 0xbf, 0xac, 0x8e, 0xf5, 0x41, - 0x96, 0xb8, 0x94, 0x25, 0x33, 0x6b, 0x3c, 0xcd, 0x14, 0x3a, 0x76, 0x45, 0x9d, 0x46, 0x04, 0x6d, - 0x20, 0x23, 0x21, 0x0d, 0xa9, 0xcc, 0x7e, 0x98, 0xb8, 0x48, 0x88, 0xc2, 0xc0, 0xe1, 0xf8, 0x3d, - 0x85, 0x35, 0xdd, 0x50, 0x3e, 0x53, 0x79, 0x7d, 0x79, 0x19, 0x39, 0x58, 0x55, 0x6e, 0xe0, 0x7b, - 0x0b, 0x54, 0x6d, 0xe6, 0x8a, 0x38, 0xf4, 0x0f, 0x3b, 0x8c, 0x13, 0x49, 0x2c, 0x40, 0xaa, 0x73, - 0x78, 0xf7, 0x79, 0xed, 0x66, 0xfb, 0x7d, 0x40, 0x84, 0x73, 0x5d, 0x50, 0xe1, 0x96, 0x90, 0x41, - 0xea, 0x86, 0x9a, 0xc5, 0x68, 0x06, 0x62, 0x41, 0xa5, 0xc8, 0xc2, 0x7b, 0x89, 0x5c, 0x7c, 0x24, - 0xd0, 0xe4, 0x2f, 0x06, 0x6f, 0x71, 0x33, 0x2e, 0x76, 0x08, 0xa9, 0xab, 0x1f, 0xe1, 0x0f, 0x4f, - 0x9e, 0xa0, 0x8a, 0x9a, 0x83, 0x7d, 0xd5, 0xd2, 0x21, 0x42, 0x20, 0xad, 0x21, 0x23, 0xf0, 0x21, - 0xa5, 0xae, 0xa4, 0x54, 0x3c, 0x31, 0xe8, 0xa9, 0x2b, 0xd9, 0x56, 0xbe, 0xec, 0xff, 0x03, 0x24, - 0xfc, 0xa9, 0x11 + 0x92, 0x2c, 0x5b, 0xb6, 0x93, 0xec, 0x47, 0x75, 0x7a, 0xc5, 0xa2, 0xbb, 0xed, 0x0b, 0xd0, 0xee, + 0x2e, 0x36, 0xed, 0xbd, 0xc3, 0x15, 0x0b, 0x43, 0xb2, 0x65, 0x47, 0xef, 0x6c, 0xcb, 0x4f, 0x56, + 0x12, 0x3b, 0x87, 0xfc, 0xef, 0x8f, 0x33, 0xfc, 0x10, 0x49, 0x51, 0xf2, 0x47, 0x62, 0x27, 0x9b, + 0x33, 0x8a, 0x6e, 0x2c, 0x72, 0x38, 0x1c, 0x92, 0xc3, 0xe1, 0xcc, 0x90, 0x1c, 0x7e, 0x9f, 0x8c, + 0x86, 0xf1, 0xa8, 0xf1, 0xcb, 0xaf, 0xfd, 0x0f, 0x97, 0x27, 0xf3, 0x2c, 0x1e, 0x24, 0x8b, 0x24, + 0x9d, 0x35, 0xae, 0x92, 0xf1, 0xd5, 0xbc, 0x31, 0x9a, 0xa4, 0x61, 0xee, 0x9f, 0x7c, 0x1f, 0x4f, + 0x16, 0xf1, 0xc9, 0xf7, 0xc9, 0xa8, 0xf1, 0x1d, 0x81, 0x4d, 0x66, 0xf1, 0xd0, 0x9a, 0xa4, 0xb7, + 0x73, 0xfb, 0xe4, 0x7b, 0xfa, 0xd9, 0x80, 0x2f, 0x02, 0x35, 0x1b, 0x26, 0x23, 0x15, 0x6c, 0x1a, + 0x0f, 0x93, 0xeb, 0xa9, 0x04, 0xc9, 0x12, 0x8c, 0xc0, 0x58, 0x67, 0x01, 0x8a, 0x9f, 0x02, 0x90, + 0xfe, 0xb9, 0x89, 0x07, 0xbd, 0xc6, 0xf5, 0x6c, 0x1e, 0x0e, 0xfe, 0xd5, 0x47, 0xe2, 0xac, 0x41, + 0x3a, 0x5b, 0xe4, 0x94, 0xd0, 0x06, 0x24, 0xc7, 0xc3, 0xbf, 0x87, 0x93, 0xeb, 0xd8, 0x6e, 0xfc, + 0x3b, 0x99, 0xf1, 0x94, 0x8b, 0x59, 0x8e, 0x89, 0x01, 0x49, 0xb2, 0x64, 0x20, 0x1f, 0x60, 0x6e, + 0x3a, 0x81, 0x0a, 0xe6, 0xf5, 0xce, 0x5f, 0xf9, 0x59, 0x9c, 0x5f, 0x67, 0xb3, 0x06, 0x54, 0x68, + 0xdd, 0x74, 0x5c, 0x15, 0xa2, 0x75, 0xd3, 0x71, 0x08, 0x90, 0xed, 0xdf, 0xcb, 0x04, 0xa5, 0xe4, + 0xdf, 0x24, 0x5f, 0x19, 0x48, 0xfa, 0x44, 0x73, 0x18, 0x51, 0xe4, 0x7f, 0x96, 0x20, 0x11, 0xc4, + 0x41, 0xbc, 0x9e, 0x52, 0x35, 0x6d, 0x64, 0x51, 0xc2, 0xf6, 0xba, 0xbd, 0xd7, 0xed, 0x8e, 0x3b, + 0x4d, 0x87, 0x6a, 0x41, 0xb7, 0xd7, 0xee, 0xd8, 0x94, 0xa0, 0xb3, 0xc6, 0x30, 0x1e, 0xa4, 0xc3, + 0xb8, 0x3f, 0x48, 0x27, 0x69, 0xc6, 0xc8, 0x41, 0x42, 0xe3, 0x19, 0xa4, 0x0f, 0x7f, 0x82, 0x74, + 0x42, 0x4c, 0x51, 0xd1, 0x99, 0xa5, 0x74, 0xaa, 0x0c, 0xf7, 0x67, 0xe7, 0x2b, 0x21, 0xea, 0xfc, + 0x9c, 0x54, 0x5a, 0x0d, 0xd3, 0xe5, 0x30, 0x27, 0x84, 0x04, 0xda, 0x72, 0x06, 0x3c, 0x4d, 0x96, + 0x7d, 0x6c, 0x89, 0x44, 0x86, 0x34, 0x04, 0xae, 0xdc, 0x59, 0x79, 0x41, 0x13, 0x29, 0x26, 0x8f, + 0x14, 0x21, 0xc2, 0x95, 0x3f, 0xbb, 0x5f, 0xdd, 0x9c, 0x37, 0x56, 0xaa, 0x48, 0x6b, 0xf0, 0x19, + 0xab, 0x09, 0x69, 0x5c, 0x94, 0xaa, 0x42, 0x88, 0x69, 0x32, 0xc3, 0xec, 0x40, 0xe9, 0x33, 0xa4, + 0x58, 0x2e, 0x5c, 0x10, 0xc0, 0xbe, 0x49, 0x8b, 0x6d, 0x9f, 0x62, 0x08, 0x97, 0x1b, 0x61, 0xe8, + 0x69, 0x18, 0x4e, 0x01, 0x83, 0xd4, 0x5c, 0x4e, 0x89, 0xcb, 0x11, 0xf2, 0x26, 0xf6, 0x1a, 0xe3, + 0x38, 0xef, 0xcf, 0xc3, 0x3c, 0x8f, 0xb3, 0x59, 0x7f, 0x9e, 0x2e, 0x94, 0xbe, 0x4c, 0x96, 0xf1, + 0x84, 0xd4, 0x99, 0x66, 0xc3, 0xfe, 0xf5, 0x7c, 0x1e, 0x67, 0x6e, 0x45, 0x26, 0x99, 0xa3, 0x5a, + 0x26, 0x43, 0xb8, 0x48, 0xee, 0xb4, 0x61, 0x48, 0x26, 0x71, 0xff, 0x7a, 0x96, 0xe4, 0x8b, 0x7e, + 0x9e, 0xf6, 0x11, 0xc7, 0x42, 0x29, 0x98, 0x2e, 0x68, 0xef, 0xf5, 0x1a, 0xe9, 0x68, 0xb4, 0x88, + 0xf3, 0x00, 0xb8, 0x91, 0xff, 0x5f, 0x26, 0x48, 0xae, 0xc8, 0x86, 0x79, 0xd3, 0xee, 0x98, 0xd2, + 0x9a, 0x65, 0x6a, 0x15, 0x28, 0xde, 0x57, 0x96, 0x89, 0x3e, 0x87, 0x10, 0xd5, 0xa4, 0xd4, 0xd8, + 0x9e, 0x5c, 0xcc, 0xbf, 0x3f, 0xf9, 0xcb, 0xf7, 0x66, 0x19, 0xc7, 0x64, 0xd1, 0xf3, 0x93, 0x72, + 0x7f, 0x21, 0xf4, 0x67, 0x49, 0x74, 0x9d, 0xc7, 0xb4, 0xc3, 0x43, 0x18, 0x74, 0x9f, 0xb4, 0x78, + 0x94, 0x66, 0x53, 0xc2, 0x6f, 0x39, 0x61, 0xfa, 0x3e, 0xf9, 0x93, 0x25, 0x4b, 0xff, 0x26, 0x4d, + 0x86, 0x24, 0x29, 0x99, 0x59, 0x64, 0x4c, 0xc6, 0x93, 0xfe, 0xe7, 0x74, 0x91, 0xe4, 0xa4, 0x75, + 0x01, 0x87, 0x70, 0x70, 0x7a, 0x23, 0x0a, 0xb7, 0xe3, 0x76, 0x6d, 0xe8, 0x10, 0x8e, 0x8a, 0xce, + 0x1f, 0xca, 0xb1, 0x02, 0x3f, 0x9b, 0xbe, 0x5c, 0x9c, 0x95, 0x6a, 0xf8, 0x39, 0x0b, 0xc7, 0x94, + 0xe1, 0x59, 0x49, 0xa7, 0x80, 0x3d, 0x61, 0x5d, 0xfd, 0xe9, 0xef, 0x1f, 0xbe, 0xbc, 0xff, 0xf2, + 0xee, 0x7f, 0xfa, 0x17, 0x1f, 0x2f, 0x3f, 0x7f, 0xf8, 0xe9, 0xf7, 0x4f, 0x5f, 0x4e, 0x94, 0x92, + 0x48, 0x53, 0x97, 0x48, 0x2c, 0x9f, 0xb7, 0x59, 0xa2, 0x4a, 0x6d, 0xa0, 0x44, 0x2b, 0x91, 0xb4, + 0x7d, 0x79, 0x6c, 0xfb, 0x61, 0x6d, 0x6e, 0x54, 0xca, 0xd5, 0x59, 0xb3, 0x0e, 0x00, 0x39, 0xb0, + 0xd4, 0x29, 0x8b, 0x41, 0x38, 0x91, 0xeb, 0x55, 0xd3, 0xa3, 0x52, 0xba, 0x89, 0x57, 0x7d, 0xe3, + 0xf0, 0xde, 0x84, 0xd9, 0x2a, 0x99, 0x8d, 0x69, 0xd2, 0x0d, 0x24, 0x91, 0x6a, 0x0c, 0x89, 0xd1, + 0x0e, 0x43, 0xce, 0xd0, 0x05, 0xba, 0x1c, 0x31, 0x74, 0x89, 0x6b, 0xe8, 0x05, 0x57, 0xb4, 0xdb, + 0xd1, 0x07, 0xc0, 0x35, 0x37, 0xd1, 0xc5, 0xca, 0x79, 0xc5, 0xd1, 0x83, 0x2b, 0x8e, 0xf4, 0x8a, + 0xa3, 0x35, 0x15, 0xab, 0x4c, 0x2e, 0xb3, 0x46, 0x3e, 0xa9, 0x66, 0x9b, 0x28, 0xab, 0xce, 0x23, + 0xe5, 0xa2, 0x9a, 0x72, 0xa5, 0xbc, 0x3c, 0x5e, 0xa2, 0xfc, 0xd1, 0x39, 0x62, 0x2a, 0xf1, 0xb4, + 0x3e, 0xd5, 0x78, 0xfa, 0x22, 0x9c, 0xce, 0x27, 0x71, 0xd6, 0x7b, 0x4f, 0xf2, 0x92, 0x69, 0x38, + 0x8e, 0x77, 0xe5, 0x0e, 0xcc, 0x41, 0x0c, 0xd8, 0xab, 0x28, 0xa8, 0x59, 0x69, 0x17, 0xa7, 0x1f, + 0x17, 0xe8, 0x01, 0xac, 0x40, 0x6a, 0x27, 0x79, 0xa2, 0x0d, 0xae, 0xda, 0x43, 0x52, 0x46, 0x81, + 0x9a, 0x2d, 0x86, 0x28, 0x10, 0xba, 0x01, 0xc9, 0x27, 0xb2, 0x3a, 0xee, 0xbd, 0xb7, 0x58, 0x03, + 0x5c, 0xca, 0x0e, 0x2a, 0x39, 0x84, 0x31, 0x0a, 0x82, 0x22, 0x95, 0xa0, 0x5e, 0x99, 0xa2, 0xa8, + 0x8a, 0xa2, 0xc8, 0x48, 0x51, 0x3f, 0x92, 0x69, 0xea, 0x99, 0x69, 0xea, 0xd9, 0xbe, 0x22, 0x98, + 0xa0, 0x52, 0xda, 0x06, 0x97, 0x16, 0x73, 0x71, 0xc4, 0xec, 0xc3, 0xc8, 0xb8, 0x28, 0x4d, 0x27, + 0x42, 0x98, 0xdc, 0x26, 0xf9, 0x15, 0x01, 0x98, 0xeb, 0xb9, 0xf3, 0x24, 0x1f, 0x5c, 0x95, 0x73, + 0x19, 0xdb, 0x91, 0x46, 0x66, 0xd7, 0x44, 0x0b, 0x41, 0x1c, 0x22, 0x13, 0x96, 0x2e, 0xc1, 0x6d, + 0xc3, 0xf8, 0x26, 0x19, 0xc4, 0x6c, 0xb6, 0x65, 0x21, 0x11, 0x1d, 0x02, 0x4e, 0x52, 0xfb, 0x61, + 0x5d, 0x08, 0xa7, 0x71, 0x16, 0xc2, 0xe4, 0x1a, 0xc4, 0x33, 0xd2, 0xd9, 0xfd, 0x61, 0xb2, 0xc8, + 0xc3, 0xd9, 0x20, 0x5e, 0x2b, 0xc1, 0x4e, 0x09, 0x3b, 0x0e, 0xc3, 0x3c, 0xc4, 0xce, 0x9a, 0x41, + 0x6f, 0xfd, 0xf7, 0xbb, 0xcb, 0xfe, 0x1f, 0x1f, 0x2f, 0x7e, 0xfe, 0xf4, 0xe5, 0xb7, 0x3e, 0x5b, + 0x37, 0x4e, 0x8c, 0xd4, 0x61, 0x56, 0x3f, 0x97, 0xaa, 0xa0, 0x44, 0xe1, 0x50, 0x86, 0x6c, 0xad, + 0xe2, 0x55, 0x49, 0x59, 0x34, 0x83, 0xad, 0xe2, 0x6a, 0x7b, 0x94, 0x65, 0x4e, 0x5a, 0x94, 0x0d, + 0x84, 0x65, 0x21, 0x59, 0xb9, 0x17, 0x66, 0xca, 0x68, 0x9e, 0x42, 0x1a, 0x57, 0x21, 0x58, 0x2f, + 0x50, 0x08, 0x41, 0x9d, 0xa2, 0x60, 0x34, 0x58, 0xa6, 0x46, 0xa1, 0x0a, 0xc3, 0x2b, 0x59, 0x43, + 0x65, 0x34, 0xb9, 0xae, 0xe8, 0x3d, 0xc8, 0x51, 0x28, 0xc4, 0x5c, 0x46, 0x1e, 0x64, 0x0a, 0xe2, + 0xa4, 0x62, 0x98, 0xae, 0xd1, 0x55, 0xc2, 0xba, 0x86, 0x24, 0x36, 0x3b, 0xcc, 0xe5, 0x59, 0x66, + 0x25, 0x61, 0x42, 0xd5, 0x28, 0xd3, 0x56, 0xcc, 0xba, 0x6a, 0xf2, 0x24, 0x98, 0x1a, 0x0a, 0x17, + 0x79, 0x96, 0xfe, 0x2b, 0xae, 0x63, 0x3d, 0x19, 0xa2, 0x9a, 0x03, 0x65, 0x28, 0x13, 0x23, 0x2a, + 0xf9, 0x75, 0xfc, 0xa8, 0x03, 0xae, 0xa7, 0xfd, 0x36, 0x19, 0xe6, 0x57, 0xb5, 0xb4, 0x23, 0x44, + 0x1d, 0x8b, 0xca, 0x70, 0x15, 0x8c, 0xaa, 0x80, 0xac, 0x61, 0x57, 0x1d, 0x76, 0x7d, 0x1b, 0x6a, + 0x19, 0x45, 0x85, 0xa9, 0xe4, 0x17, 0x15, 0xcc, 0xc4, 0x36, 0x1a, 0x44, 0x1d, 0xf7, 0x94, 0x41, + 0xa9, 0xab, 0x41, 0xac, 0xa3, 0xf0, 0x8b, 0xac, 0xa5, 0xb5, 0xa2, 0x6c, 0x40, 0x15, 0x62, 0xdd, + 0x14, 0x65, 0xf2, 0xca, 0x15, 0x62, 0xcd, 0xe6, 0xa4, 0xe8, 0x92, 0x2b, 0xd8, 0x4a, 0x3e, 0xd1, + 0x3f, 0x81, 0x6e, 0x63, 0x73, 0x09, 0xe4, 0x16, 0xc2, 0x4a, 0x54, 0x68, 0x12, 0x46, 0xc1, 0x36, + 0xf2, 0x06, 0xfe, 0x31, 0xd4, 0x08, 0xc9, 0x2e, 0x17, 0x3c, 0xa2, 0x36, 0x4d, 0xba, 0x04, 0x5b, + 0xc9, 0x10, 0xf6, 0xd7, 0x50, 0x19, 0xcb, 0x71, 0x25, 0x91, 0x62, 0xaa, 0x52, 0x20, 0xd8, 0x45, + 0x34, 0xc8, 0x1f, 0xa6, 0x11, 0x95, 0xf3, 0x5d, 0x5d, 0x68, 0x98, 0xc6, 0x57, 0x45, 0xb8, 0xf3, + 0xb4, 0x97, 0x3f, 0x0c, 0x5d, 0x23, 0x67, 0xbb, 0xba, 0x3c, 0xa8, 0xe0, 0x02, 0x15, 0xe5, 0x03, + 0x26, 0xb3, 0xfa, 0x59, 0x4d, 0x5d, 0x31, 0x7e, 0xfa, 0x4c, 0x37, 0x0d, 0xa3, 0x8e, 0xb5, 0x72, + 0xaa, 0xa2, 0x6f, 0x8b, 0x2a, 0x3e, 0x01, 0x56, 0x08, 0x6a, 0x25, 0xb5, 0x7f, 0xc0, 0x2d, 0xe6, + 0x90, 0x7f, 0x5a, 0x85, 0x76, 0x39, 0x48, 0xb2, 0x01, 0xd1, 0xaf, 0xa8, 0x4e, 0x13, 0x90, 0xaa, + 0x70, 0x58, 0x09, 0xb0, 0xd3, 0x69, 0x9f, 0xdb, 0x3e, 0x31, 0xd6, 0x2d, 0x5d, 0xcb, 0xe2, 0xaa, + 0xf4, 0x20, 0xcd, 0x66, 0x44, 0x0f, 0x9a, 0x73, 0x8b, 0x4b, 0x41, 0xc5, 0x4a, 0xaa, 0xda, 0x1b, + 0x29, 0xa9, 0x15, 0x6a, 0x06, 0x8c, 0x54, 0xc7, 0xa2, 0x93, 0xaf, 0x29, 0xf7, 0x3b, 0x68, 0x9a, + 0xaa, 0x0e, 0x77, 0xdf, 0x80, 0x7e, 0x61, 0xee, 0xaa, 0x79, 0x96, 0xfe, 0x6f, 0x3c, 0xc8, 0xe3, + 0x21, 0x27, 0x5f, 0xb5, 0xf9, 0x14, 0x7a, 0xa8, 0xed, 0xf7, 0xb0, 0xda, 0x1d, 0x4b, 0xaf, 0xb1, + 0x7d, 0xeb, 0xd5, 0x68, 0x86, 0xc4, 0xf2, 0xaa, 0xb6, 0x48, 0x35, 0x52, 0x98, 0x3b, 0x82, 0x35, + 0xaf, 0xa6, 0x58, 0xb9, 0x51, 0x15, 0x3d, 0x2d, 0xe1, 0x68, 0x2f, 0x57, 0xdb, 0x36, 0xb5, 0x4e, + 0xe1, 0x35, 0x50, 0xb9, 0x43, 0x0d, 0x72, 0xe9, 0x5b, 0xff, 0xfe, 0x5e, 0xe2, 0xf5, 0x70, 0x96, + 0x27, 0xe1, 0x24, 0x09, 0x17, 0x28, 0x2e, 0x09, 0xb3, 0x7a, 0x26, 0x45, 0xdd, 0x33, 0xd6, 0xe3, + 0x53, 0x65, 0x1b, 0x58, 0xff, 0xd4, 0x62, 0x35, 0xb6, 0x97, 0x2e, 0xff, 0xb5, 0x72, 0x15, 0xe4, + 0x68, 0x1c, 0x6f, 0xad, 0xab, 0xef, 0x5b, 0xe3, 0x3e, 0x8c, 0xce, 0xbc, 0x67, 0xe5, 0xf7, 0x70, + 0xfa, 0xeb, 0x53, 0xe8, 0x9d, 0x4f, 0xa9, 0x2d, 0xee, 0x59, 0xc5, 0x63, 0xea, 0x5d, 0x15, 0xf3, + 0x6f, 0xa2, 0xac, 0x55, 0x72, 0xf6, 0xc6, 0x8a, 0x57, 0x05, 0xcf, 0xae, 0x57, 0xa5, 0xaa, 0x19, + 0x72, 0x53, 0x9d, 0x68, 0x0d, 0xb7, 0x6d, 0xaf, 0xcc, 0xac, 0x61, 0xa5, 0x9d, 0xd4, 0x90, 0xb5, + 0x4c, 0xf2, 0x60, 0xd5, 0x01, 0xe5, 0x20, 0x91, 0xeb, 0x3e, 0x45, 0xc2, 0x85, 0xf7, 0x24, 0x9e, + 0x8d, 0x09, 0x65, 0xf4, 0x0f, 0x17, 0xb0, 0xb6, 0x5f, 0x29, 0xbd, 0x19, 0x9e, 0x3b, 0x5f, 0xcb, + 0x24, 0x6b, 0x28, 0xe6, 0xb7, 0xa6, 0xe1, 0xd2, 0x42, 0xbd, 0x59, 0x13, 0xcc, 0xca, 0x48, 0xf5, + 0xf3, 0x60, 0x31, 0x4d, 0xd3, 0xfc, 0x6a, 0x91, 0xc7, 0x73, 0xab, 0xd3, 0xee, 0xb8, 0x3a, 0x22, + 0x57, 0x25, 0x90, 0xaa, 0x38, 0x14, 0x07, 0x53, 0x47, 0x03, 0xb9, 0x2f, 0x1b, 0x7f, 0x6b, 0x10, + 0x2c, 0xdd, 0xc6, 0x8f, 0xf0, 0xa7, 0xf1, 0x43, 0x43, 0xc2, 0x5e, 0xc2, 0x0c, 0xd5, 0x69, 0xd8, + 0x29, 0xc3, 0x9a, 0x57, 0x20, 0xcd, 0x8b, 0x26, 0x5a, 0xe0, 0x08, 0x7f, 0x9a, 0xc3, 0x55, 0x3f, + 0x99, 0x63, 0x1c, 0x4d, 0x2d, 0x94, 0x94, 0xe8, 0x07, 0xf8, 0xd8, 0xf6, 0xbd, 0x7b, 0x52, 0xbd, + 0x21, 0x52, 0x90, 0xb3, 0xd6, 0xd5, 0xc7, 0x45, 0x93, 0xd9, 0x5f, 0x57, 0xe5, 0x18, 0xe6, 0xe9, + 0x09, 0xd1, 0x4e, 0x66, 0x0b, 0xc8, 0xd9, 0x64, 0x2f, 0x81, 0xd5, 0x51, 0xb5, 0xc0, 0xdf, 0xc6, + 0x64, 0x7a, 0xe7, 0x66, 0xc9, 0x49, 0xf3, 0xcc, 0xce, 0x10, 0xa8, 0x8d, 0xe6, 0x6b, 0x6e, 0x10, + 0x5a, 0x98, 0x65, 0x19, 0x57, 0x22, 0x15, 0xfd, 0x21, 0x7c, 0x72, 0xdb, 0xa9, 0x10, 0x74, 0xb7, + 0x53, 0xa6, 0xf5, 0x9f, 0x1f, 0xbe, 0x7c, 0x42, 0xb5, 0x0c, 0xb7, 0xb9, 0xbd, 0xee, 0xab, 0x76, + 0xc7, 0x17, 0x9b, 0x78, 0xbf, 0xbc, 0xfb, 0xe3, 0xf2, 0xb2, 0xff, 0xd3, 0xa7, 0x0f, 0x3f, 0x93, + 0xa9, 0x75, 0xfa, 0xf6, 0xcd, 0xdb, 0xb3, 0x5e, 0xef, 0x4d, 0xe7, 0xac, 0xd3, 0x3d, 0x3b, 0xed, + 0xbd, 0xde, 0xd8, 0x93, 0xc0, 0xc6, 0x81, 0xfe, 0x31, 0xd8, 0x50, 0x34, 0xc3, 0x2d, 0x06, 0x45, + 0x33, 0x36, 0xe5, 0x6e, 0x0f, 0xb6, 0xeb, 0x5b, 0xf3, 0x1a, 0xf5, 0xe8, 0xde, 0x05, 0x76, 0x5a, + 0x02, 0x79, 0x7d, 0xd8, 0xdf, 0xc8, 0x62, 0xa3, 0x08, 0x2f, 0x83, 0xc5, 0xff, 0x65, 0xb9, 0xd5, + 0x22, 0xc9, 0xce, 0x24, 0x1d, 0x5b, 0x30, 0x1a, 0x1e, 0x6d, 0xa0, 0x27, 0xcd, 0x06, 0xaf, 0x18, + 0x08, 0xdb, 0xf6, 0x4e, 0xc9, 0x10, 0x09, 0xe6, 0x0f, 0x2e, 0x1d, 0xbd, 0x62, 0x5f, 0x13, 0xfe, + 0x5c, 0x97, 0xa7, 0x44, 0x97, 0xec, 0x30, 0x6a, 0x7f, 0xa5, 0x0b, 0x3a, 0xcb, 0x75, 0xb3, 0xb1, + 0xc9, 0x80, 0xa9, 0x94, 0x30, 0x8a, 0x12, 0x98, 0x99, 0x92, 0x5c, 0x50, 0x67, 0x42, 0x31, 0xa3, + 0x77, 0x9a, 0xbc, 0x8f, 0x35, 0x01, 0xb7, 0x64, 0xe8, 0x4a, 0xbd, 0x89, 0x91, 0xb5, 0x09, 0x63, + 0xd2, 0xdc, 0x61, 0xd0, 0x22, 0xdd, 0xe8, 0x90, 0x31, 0xc3, 0xff, 0x87, 0x69, 0x6e, 0x89, 0xb6, + 0xbb, 0xe2, 0x17, 0xe7, 0x87, 0x9b, 0x70, 0x12, 0x50, 0x34, 0x8e, 0xd4, 0x75, 0x4e, 0x41, 0xb6, + 0x13, 0x2f, 0xe7, 0xd6, 0x50, 0x5b, 0x96, 0x70, 0xe0, 0x48, 0x51, 0xd8, 0x69, 0xe2, 0xff, 0xdb, + 0x07, 0xd8, 0xb3, 0xbe, 0x4d, 0xb3, 0xc9, 0x70, 0xd3, 0x5d, 0xdf, 0xad, 0xd6, 0x24, 0x87, 0x21, + 0x97, 0xb6, 0x79, 0xdb, 0xcb, 0x20, 0xa4, 0x7f, 0xd9, 0xf7, 0x0a, 0xc4, 0x56, 0x8b, 0xa6, 0xad, + 0x64, 0x06, 0x2c, 0xef, 0x32, 0x9a, 0x72, 0xe8, 0x9a, 0x9c, 0x91, 0x94, 0xea, 0x13, 0x02, 0x6b, + 0x1a, 0xc1, 0x8e, 0x95, 0x18, 0x76, 0xe0, 0x10, 0xd8, 0x6e, 0x67, 0xd2, 0x46, 0x9d, 0x02, 0x55, + 0x54, 0xee, 0xa2, 0x94, 0xc8, 0x5d, 0x98, 0x6b, 0xda, 0xb0, 0x3e, 0xe8, 0x10, 0x42, 0x67, 0x13, + 0xe5, 0xa1, 0x94, 0x18, 0xce, 0x06, 0x57, 0x69, 0x66, 0xce, 0xe3, 0x13, 0xb6, 0x8c, 0x69, 0x12, + 0x0e, 0x62, 0x03, 0x1f, 0x2c, 0xae, 0x92, 0x51, 0xee, 0x6f, 0xc4, 0x49, 0xf5, 0xda, 0x42, 0xb5, + 0xfb, 0x82, 0x8f, 0x10, 0x9b, 0x3d, 0x9c, 0x14, 0x3d, 0x79, 0x96, 0xe6, 0x7f, 0x2c, 0x20, 0x5d, + 0xdb, 0x43, 0x96, 0xfc, 0x4e, 0x9f, 0x53, 0x32, 0xdd, 0x4a, 0xac, 0x58, 0xf4, 0x07, 0xe5, 0x44, + 0x79, 0xde, 0x17, 0x54, 0x31, 0x28, 0x4e, 0x55, 0xa0, 0x22, 0x6d, 0xdf, 0xaa, 0xc5, 0xd2, 0xc9, + 0x04, 0xcf, 0xe9, 0xf4, 0xe7, 0x71, 0xb6, 0x98, 0x13, 0xb8, 0xe4, 0x26, 0xa6, 0x5e, 0x90, 0x60, + 0x30, 0x21, 0x1c, 0x41, 0x86, 0xee, 0xbc, 0x09, 0x32, 0xc3, 0xaa, 0x69, 0xb9, 0x57, 0x59, 0xbb, + 0x8d, 0x3a, 0xee, 0x19, 0x0c, 0xff, 0x5a, 0xc5, 0x8f, 0x8b, 0x0a, 0xdd, 0xfb, 0x63, 0x89, 0xd1, + 0x6e, 0xb2, 0x61, 0x5c, 0xe3, 0xf3, 0x71, 0x6a, 0x5a, 0xe5, 0xf3, 0x61, 0x09, 0x38, 0xab, 0xe0, + 0x14, 0x66, 0x63, 0x52, 0x24, 0xae, 0x64, 0xff, 0xcd, 0x2e, 0x03, 0xca, 0xac, 0x92, 0xc9, 0xfc, + 0x2a, 0x0c, 0x48, 0xff, 0xf9, 0x46, 0x29, 0x87, 0x8d, 0xe6, 0x0d, 0x77, 0x10, 0x18, 0xbd, 0x6e, + 0xbc, 0xaa, 0xc6, 0x7f, 0x35, 0x60, 0x2a, 0x9a, 0x14, 0x60, 0xa9, 0x24, 0x4e, 0x57, 0x56, 0xfa, + 0x9e, 0x16, 0x67, 0x24, 0x19, 0xcb, 0x3b, 0x41, 0xbb, 0xeb, 0xdf, 0x1f, 0x64, 0x16, 0x3e, 0xab, + 0xe9, 0xa6, 0xa5, 0x6b, 0xdb, 0xc8, 0x9a, 0x22, 0x60, 0x4e, 0xe6, 0x4a, 0xca, 0x71, 0xe6, 0x1a, + 0x67, 0xae, 0x4c, 0xdf, 0x3c, 0x1c, 0x0e, 0x49, 0x07, 0xf6, 0x47, 0xe1, 0x20, 0x4f, 0xc1, 0xd7, + 0xda, 0x2b, 0x4d, 0x6c, 0xc1, 0x3f, 0xa5, 0xe9, 0xac, 0x16, 0xde, 0xc7, 0xec, 0xe6, 0xe3, 0x1f, + 0x84, 0xd1, 0xa2, 0x10, 0x30, 0xed, 0x95, 0x2d, 0x29, 0xb3, 0x05, 0x7d, 0x2a, 0x3d, 0xbe, 0xc6, + 0x0f, 0xc1, 0x16, 0x3e, 0xee, 0x5a, 0xea, 0x25, 0xb5, 0x41, 0xac, 0xfe, 0x37, 0x04, 0x0a, 0x3d, + 0xf0, 0xbc, 0xee, 0xe7, 0xc1, 0xf5, 0xba, 0x78, 0x93, 0x54, 0x8b, 0xad, 0x85, 0xdb, 0x60, 0x57, + 0xa9, 0x36, 0x60, 0xe2, 0xac, 0xc7, 0x8f, 0x43, 0x2b, 0x04, 0x6b, 0x1e, 0x25, 0xad, 0x39, 0x76, + 0xad, 0xfb, 0xa9, 0xd0, 0x85, 0x1d, 0x13, 0x4e, 0xdf, 0xe0, 0x52, 0xeb, 0x12, 0x8b, 0xd5, 0x08, + 0xec, 0x19, 0x46, 0x51, 0xb1, 0xe0, 0xf8, 0xa8, 0xd4, 0x55, 0xc5, 0xf9, 0x07, 0x58, 0x2a, 0x1e, + 0x8e, 0x63, 0xe4, 0x5b, 0xa3, 0xef, 0xa8, 0xd6, 0xc1, 0xd5, 0x52, 0x36, 0x30, 0xa1, 0xa7, 0x5b, + 0x3a, 0xe6, 0x4a, 0x2f, 0x13, 0x75, 0x3f, 0xde, 0x1f, 0xee, 0xe0, 0xac, 0x61, 0x97, 0x63, 0xed, + 0x31, 0xd9, 0x2d, 0xe9, 0xfb, 0xd6, 0x4e, 0x4e, 0x3d, 0xa7, 0x03, 0x40, 0x25, 0x03, 0xf5, 0xc9, + 0xcf, 0x6d, 0x1c, 0xe0, 0x68, 0xc3, 0xa6, 0x3c, 0xfc, 0x24, 0xbb, 0x7c, 0x8f, 0xbc, 0x43, 0xb6, + 0xe7, 0x9d, 0x9b, 0xad, 0xb6, 0x4f, 0x0c, 0xb6, 0xe8, 0xa3, 0x1c, 0x15, 0xdd, 0x42, 0x56, 0x18, + 0xfd, 0x0d, 0x06, 0xab, 0xbc, 0x6a, 0x70, 0xae, 0xf3, 0x49, 0x32, 0xab, 0x3d, 0x1a, 0xa7, 0x80, + 0x54, 0xcb, 0x18, 0x05, 0xcc, 0x24, 0x6b, 0x54, 0x80, 0x3a, 0xae, 0x2a, 0x41, 0xbe, 0x20, 0xd9, + 0xa3, 0x76, 0xb8, 0xf2, 0x65, 0x92, 0x45, 0x0a, 0x80, 0x5b, 0x1a, 0x0c, 0x93, 0x6c, 0xd2, 0x70, + 0xee, 0xd4, 0x9b, 0x4f, 0x2d, 0xab, 0x90, 0x67, 0x03, 0x4b, 0xd5, 0xcd, 0x3d, 0x45, 0xe3, 0x6e, + 0xc2, 0xa4, 0xf1, 0xc0, 0x2b, 0xcc, 0xb9, 0x5e, 0x3d, 0xdb, 0xb0, 0x15, 0xe3, 0x1f, 0x9c, 0x5d, + 0x0f, 0x27, 0x0c, 0xd5, 0x86, 0xee, 0xc2, 0x27, 0x0f, 0x14, 0x92, 0x85, 0xaa, 0x58, 0xe8, 0xb1, + 0x64, 0x60, 0x5a, 0x42, 0x0c, 0xa6, 0x19, 0x31, 0x88, 0x56, 0x5c, 0x43, 0xa4, 0xda, 0x3b, 0xf8, + 0x2d, 0xb5, 0x2d, 0x50, 0xd0, 0xbe, 0x01, 0x8b, 0xae, 0x0a, 0xca, 0x64, 0x3b, 0x16, 0x16, 0xe7, + 0x52, 0xf8, 0x70, 0x1e, 0xde, 0xc7, 0xbb, 0x6e, 0xc4, 0x4f, 0x6a, 0xa0, 0x75, 0xf3, 0xd0, 0xeb, + 0x42, 0x9b, 0x4f, 0x87, 0x67, 0x7f, 0x86, 0x9b, 0x5f, 0xfa, 0x18, 0x65, 0xe9, 0xd4, 0x8c, 0x47, + 0x86, 0x30, 0xd2, 0x0a, 0xcb, 0x94, 0x0c, 0xa4, 0x12, 0xcc, 0x6e, 0x8d, 0x4a, 0xd9, 0x26, 0xa2, + 0xd9, 0xf0, 0xe8, 0x70, 0x1b, 0x10, 0x9e, 0xa7, 0xf5, 0x64, 0x13, 0x4b, 0x67, 0x1d, 0xd1, 0x79, + 0x5a, 0x43, 0x32, 0xc9, 0xdc, 0x80, 0x60, 0x0a, 0xb5, 0xf9, 0x72, 0xf5, 0x54, 0xe7, 0x72, 0x95, + 0xe1, 0x96, 0x3f, 0x82, 0xb0, 0x6f, 0x1a, 0x24, 0x69, 0xeb, 0x57, 0x1d, 0xc5, 0x60, 0xd7, 0xc1, + 0x2a, 0x7e, 0x06, 0x61, 0xbf, 0xdc, 0xc9, 0xc6, 0x0a, 0x09, 0xac, 0xb9, 0xab, 0xe5, 0x5b, 0xb7, + 0x70, 0xc3, 0x2a, 0x90, 0x69, 0x82, 0x63, 0x27, 0x0a, 0x04, 0x5c, 0xb5, 0x52, 0x21, 0xee, 0x6e, + 0x7d, 0x1d, 0x47, 0x14, 0x14, 0x15, 0x99, 0x30, 0x28, 0xf9, 0xa4, 0x3c, 0xf3, 0x80, 0x81, 0xe0, + 0xf9, 0x82, 0x0e, 0x39, 0x26, 0x64, 0xda, 0x4b, 0xbf, 0xb8, 0xfc, 0xab, 0xe6, 0xf0, 0xd3, 0x30, + 0x40, 0xc2, 0x25, 0x73, 0x2a, 0xd1, 0x1c, 0x7e, 0xc0, 0x25, 0x4f, 0xd5, 0xf4, 0x5b, 0x7f, 0xb3, + 0xf5, 0x1d, 0x68, 0x25, 0xc2, 0x7c, 0x3e, 0x09, 0x57, 0xec, 0x3a, 0x21, 0xdd, 0x0b, 0xb6, 0xe4, + 0x2e, 0x68, 0x2f, 0x5b, 0x72, 0x9f, 0xb5, 0x97, 0xb6, 0x57, 0x90, 0xef, 0xaa, 0xa0, 0x2b, 0x15, + 0x74, 0x25, 0x83, 0x9a, 0xea, 0x8b, 0xca, 0xf5, 0x45, 0x6a, 0x7d, 0x51, 0x4d, 0x7d, 0x91, 0x5a, + 0x5f, 0x54, 0xaa, 0xef, 0x81, 0xb7, 0x2e, 0x45, 0x87, 0x3b, 0x6a, 0x27, 0xb9, 0x62, 0x8c, 0x1e, + 0xeb, 0x9a, 0x25, 0x1b, 0x40, 0xb5, 0x9e, 0xa8, 0xa2, 0x9e, 0x1d, 0x34, 0xb2, 0x35, 0x57, 0x23, + 0xab, 0x37, 0x22, 0xb9, 0x78, 0x1c, 0x85, 0xc3, 0x78, 0xaf, 0x4b, 0xde, 0xe1, 0x56, 0xad, 0x43, + 0x2f, 0x37, 0xfb, 0x5c, 0x2b, 0xf6, 0x71, 0xf0, 0x50, 0xe9, 0xac, 0x5d, 0x04, 0x7a, 0x6d, 0x6f, + 0x7c, 0x73, 0x02, 0x7b, 0xbb, 0x1b, 0xbc, 0x15, 0xf7, 0x77, 0x9f, 0xe8, 0xf6, 0x6e, 0xc5, 0xdd, + 0xdd, 0x47, 0xbb, 0xb9, 0xbb, 0x67, 0xa3, 0xc2, 0x74, 0x17, 0x18, 0x04, 0x11, 0x73, 0xfd, 0x3b, + 0x07, 0x0c, 0x7a, 0xf0, 0x3c, 0x2c, 0x89, 0xa3, 0xd9, 0x70, 0x34, 0x1b, 0x8e, 0x66, 0xc3, 0xd1, + 0x6c, 0xa8, 0x30, 0x1b, 0xfe, 0x99, 0xa6, 0xd3, 0x87, 0x9b, 0x0e, 0x2f, 0xdd, 0x2a, 0x38, 0x48, + 0xc0, 0x96, 0x5a, 0xd3, 0x41, 0x8c, 0xd3, 0x01, 0xcc, 0x87, 0x52, 0x5d, 0xeb, 0xad, 0x01, 0x45, + 0xe7, 0x7f, 0x8c, 0x88, 0x28, 0x47, 0xd5, 0xff, 0xa8, 0xfa, 0x1f, 0x55, 0xff, 0x97, 0xa5, 0xfa, + 0x6f, 0xa8, 0xa8, 0x1f, 0x46, 0x45, 0x3f, 0x25, 0xa9, 0x13, 0x38, 0x8c, 0xae, 0x06, 0x52, 0xe3, + 0x53, 0x4a, 0x64, 0xcb, 0x1b, 0xb8, 0x8a, 0x2c, 0xc1, 0xdc, 0xe2, 0x06, 0x80, 0x2e, 0x09, 0x6f, + 0xe2, 0x2c, 0x4f, 0x88, 0x84, 0xed, 0x8f, 0xe1, 0x1c, 0x4d, 0x3c, 0xcb, 0xfd, 0x5a, 0x89, 0xb4, + 0xfe, 0xf0, 0x24, 0xe8, 0x85, 0x33, 0x52, 0x9e, 0xa0, 0x8c, 0x95, 0x8d, 0xe2, 0x33, 0x22, 0x34, + 0xf9, 0xd6, 0x8f, 0xf9, 0x16, 0x6d, 0x58, 0x79, 0x4d, 0x96, 0xe4, 0x54, 0xdf, 0x13, 0x82, 0xdc, + 0xfa, 0x9b, 0x08, 0x1c, 0xa2, 0x46, 0xb4, 0x5d, 0xd5, 0x5c, 0x54, 0xba, 0x5a, 0x73, 0x51, 0xe9, + 0x6a, 0x83, 0xcb, 0x10, 0x57, 0x9b, 0xdc, 0x98, 0x79, 0xe8, 0x01, 0x9c, 0xcd, 0x4f, 0x52, 0x6c, + 0xa2, 0x63, 0xe3, 0x78, 0xc8, 0xad, 0x80, 0x04, 0x53, 0x94, 0x0e, 0x92, 0xec, 0xf2, 0x41, 0x32, + 0xde, 0x1b, 0xa2, 0x05, 0xb7, 0x18, 0x06, 0xb9, 0xf0, 0x55, 0xd5, 0x9d, 0xa5, 0x2b, 0x7e, 0x67, + 0xe9, 0xaa, 0xee, 0xce, 0x12, 0x2f, 0xbe, 0xcd, 0x08, 0x94, 0x4f, 0x76, 0x3c, 0xe2, 0x21, 0x1e, + 0x9c, 0xb5, 0x74, 0x86, 0x04, 0xd2, 0x54, 0x21, 0x52, 0xfb, 0xce, 0xc7, 0x8e, 0x82, 0x1b, 0x9c, + 0xe0, 0x3a, 0x80, 0x0f, 0xdb, 0x67, 0xf4, 0xf3, 0x44, 0xfa, 0xc9, 0xdd, 0x0e, 0x34, 0x3c, 0x26, + 0xc5, 0xd1, 0x5e, 0xe2, 0xf5, 0xa6, 0xb5, 0x4a, 0x60, 0x8e, 0x07, 0x09, 0x3b, 0x8d, 0x1f, 0x59, + 0xd7, 0x34, 0x7e, 0xc0, 0xf1, 0x01, 0xd5, 0x50, 0xba, 0xdf, 0x79, 0x83, 0x41, 0x6d, 0xf1, 0x67, + 0x3b, 0x73, 0x3a, 0xed, 0x5e, 0xb7, 0xf7, 0xaa, 0x49, 0x3f, 0xc7, 0xe4, 0xf3, 0x75, 0xf7, 0xbc, + 0xc7, 0x3e, 0x23, 0xf2, 0xd9, 0x79, 0xdd, 0xeb, 0xf9, 0x6c, 0x7a, 0xab, 0x47, 0x1a, 0xc5, 0x29, + 0x59, 0xca, 0xa8, 0xd3, 0x08, 0x64, 0x0c, 0xca, 0x24, 0x01, 0x77, 0xea, 0x16, 0xff, 0x20, 0x28, + 0xa2, 0x69, 0x06, 0x32, 0xb0, 0xf0, 0xc7, 0x64, 0x70, 0x74, 0x34, 0x9d, 0x91, 0xbe, 0xa3, 0xc7, + 0x7d, 0xe1, 0x32, 0x0f, 0x6d, 0xbf, 0xd7, 0x7d, 0x75, 0xfa, 0xe6, 0x0c, 0x42, 0xc9, 0x0a, 0x89, + 0x68, 0x17, 0xd5, 0xcb, 0x25, 0x41, 0xa6, 0x83, 0x24, 0x6e, 0xe9, 0xd2, 0xd1, 0x86, 0xf8, 0xa8, + 0x34, 0xab, 0xe8, 0x84, 0x66, 0x19, 0x0a, 0x30, 0xba, 0x12, 0x46, 0x1a, 0x34, 0x82, 0x0d, 0xc3, + 0xaa, 0xf1, 0x5d, 0x00, 0x37, 0x3f, 0x1a, 0xff, 0x96, 0x20, 0x9c, 0x80, 0xd7, 0x58, 0x12, 0xb8, + 0x76, 0xd3, 0x32, 0xa4, 0x3a, 0xb4, 0x79, 0x56, 0xde, 0x44, 0x36, 0x70, 0xe6, 0xe9, 0xad, 0x45, + 0xc7, 0xcb, 0xeb, 0x9e, 0x77, 0xd8, 0x39, 0x51, 0x17, 0x5a, 0x42, 0x06, 0x83, 0x7c, 0xbc, 0x7d, + 0xe3, 0x9a, 0x5b, 0x04, 0xb4, 0x62, 0xf0, 0xde, 0x3e, 0x1b, 0xcc, 0x26, 0xeb, 0x39, 0x3e, 0xb6, + 0x32, 0x95, 0xf2, 0x5a, 0xd3, 0xce, 0x18, 0x7a, 0xa8, 0xeb, 0x54, 0xc6, 0xce, 0xb2, 0x6d, 0x36, + 0xb0, 0x0c, 0xf1, 0x58, 0x45, 0x3c, 0xae, 0x46, 0x3c, 0xae, 0x47, 0x3c, 0xd6, 0x10, 0x47, 0x2a, + 0xe2, 0xa8, 0x1a, 0x71, 0x54, 0x8f, 0x38, 0x52, 0x11, 0x3b, 0x92, 0xee, 0xa8, 0x1e, 0xed, 0x28, + 0x96, 0xaa, 0x9a, 0xfb, 0xb8, 0xd2, 0x62, 0xf6, 0x6c, 0x3d, 0x74, 0xda, 0x0a, 0xc6, 0x8e, 0xe1, + 0x1a, 0xfd, 0x77, 0x0f, 0x54, 0x0c, 0xf6, 0xa8, 0xb2, 0x3c, 0x40, 0xe7, 0xd8, 0x7c, 0x2f, 0x07, + 0x86, 0x9c, 0xd5, 0x3b, 0x7e, 0x04, 0x05, 0x45, 0x09, 0x8d, 0x07, 0xcb, 0x9e, 0x29, 0x3a, 0x88, + 0x41, 0x6f, 0x29, 0x61, 0x7d, 0x5c, 0xb5, 0x45, 0x26, 0xeb, 0x4a, 0xbd, 0x5e, 0x2d, 0x15, 0x35, + 0xeb, 0x33, 0x06, 0xdc, 0x47, 0xd7, 0xe8, 0x33, 0x74, 0x8d, 0x22, 0x97, 0x6e, 0xa5, 0xaa, 0x69, + 0x3c, 0xb9, 0x9d, 0xa6, 0xb6, 0xbd, 0x76, 0x56, 0xe2, 0xb4, 0x60, 0x17, 0x7e, 0x3a, 0xfa, 0x5e, + 0xbf, 0x9d, 0x23, 0x1b, 0x75, 0x2a, 0x2f, 0xbb, 0x8f, 0x32, 0x1c, 0xc7, 0xe2, 0x06, 0x98, 0x0c, + 0xf2, 0xf2, 0x9d, 0xb6, 0x8f, 0xa1, 0xf3, 0xd3, 0x9c, 0xbb, 0xa0, 0x42, 0xb7, 0x5f, 0x6b, 0x13, + 0xdc, 0x89, 0x33, 0x33, 0xe0, 0xf2, 0xe1, 0xb8, 0x03, 0xd8, 0xd0, 0x6c, 0xfc, 0xf5, 0xaf, 0x0d, + 0xae, 0xd9, 0x06, 0xa0, 0xd8, 0x4a, 0x09, 0x77, 0x04, 0x82, 0x2a, 0xdd, 0x27, 0x3f, 0xd2, 0x75, + 0xf9, 0xe4, 0x07, 0xfa, 0xb6, 0x84, 0x3c, 0x9e, 0xee, 0x9d, 0xa3, 0x69, 0x20, 0x07, 0x39, 0xbf, + 0x72, 0x98, 0xd3, 0x2b, 0xac, 0x16, 0xae, 0x3a, 0x54, 0x18, 0x3f, 0x1b, 0x5a, 0x2f, 0xa7, 0x8f, + 0x61, 0xbd, 0xc0, 0x05, 0xc8, 0x97, 0x62, 0xb2, 0xf0, 0x6e, 0x6d, 0x67, 0x63, 0x61, 0x05, 0x54, + 0x69, 0xff, 0x88, 0x19, 0xc3, 0xd4, 0x41, 0x53, 0x5c, 0xf6, 0xeb, 0xd4, 0x2e, 0xd9, 0x01, 0x2c, + 0x0f, 0x6b, 0x91, 0x86, 0x4e, 0x33, 0x07, 0x0e, 0xbd, 0x93, 0xb0, 0x8b, 0x2e, 0xba, 0x5f, 0xa5, + 0xf2, 0x50, 0x9a, 0xe1, 0xcb, 0xde, 0xba, 0xc0, 0x81, 0x5a, 0xaf, 0x61, 0x55, 0x8e, 0xc2, 0x66, + 0xda, 0xd2, 0x71, 0xc3, 0xe3, 0xb8, 0xe1, 0xb1, 0xf3, 0x86, 0x07, 0x7b, 0xac, 0x68, 0xc9, 0x9e, + 0x0f, 0xaa, 0xde, 0xf3, 0x28, 0x6d, 0x8d, 0xb0, 0x12, 0x8e, 0x26, 0xaf, 0xf6, 0xeb, 0x0f, 0x19, + 0x26, 0x53, 0x58, 0x29, 0xd2, 0x99, 0xbf, 0x59, 0x28, 0x07, 0xd6, 0xec, 0xc7, 0x88, 0x89, 0x23, + 0xc7, 0x31, 0xa0, 0x11, 0x9e, 0xe6, 0x8b, 0x64, 0x42, 0x60, 0x59, 0x50, 0x55, 0x41, 0x19, 0xbb, + 0x29, 0x8d, 0x7a, 0xb0, 0x25, 0x65, 0x10, 0xb5, 0x11, 0x14, 0x36, 0x4f, 0x49, 0xe2, 0x67, 0x5f, + 0x15, 0x52, 0xbd, 0x37, 0xdd, 0xb7, 0x18, 0xae, 0x0a, 0x91, 0x34, 0x59, 0x45, 0x35, 0x4f, 0x0e, + 0x69, 0xcf, 0xaa, 0x61, 0x97, 0x6e, 0xb3, 0x30, 0x55, 0x77, 0xb3, 0xbe, 0xe6, 0xdd, 0xa5, 0x44, + 0x52, 0x94, 0xde, 0x1e, 0x09, 0x97, 0x98, 0x4e, 0xbf, 0x89, 0xbe, 0xf5, 0x61, 0x12, 0xdf, 0x80, + 0x8a, 0x34, 0xb3, 0x58, 0x78, 0x63, 0xc2, 0x91, 0x2e, 0x93, 0x81, 0x49, 0xb8, 0xe0, 0x31, 0x24, + 0x30, 0xba, 0x6c, 0x99, 0x33, 0xe9, 0x74, 0x72, 0x30, 0x22, 0x9a, 0x78, 0x9d, 0x09, 0x43, 0x1f, + 0x66, 0x4d, 0xfc, 0x33, 0x66, 0x2f, 0x3b, 0xe1, 0x47, 0x44, 0x3f, 0xe8, 0xbf, 0xb6, 0x47, 0x14, + 0x52, 0xa2, 0x3d, 0x94, 0x1e, 0x2b, 0xa9, 0x1f, 0x2c, 0x54, 0x46, 0x25, 0xa2, 0xa1, 0x4f, 0x9a, + 0xa8, 0xcc, 0xb6, 0x58, 0x41, 0xa2, 0x6d, 0x8b, 0x9f, 0x2b, 0xd4, 0xce, 0xb8, 0x66, 0x17, 0x55, + 0x96, 0xed, 0x54, 0x15, 0x19, 0x54, 0x16, 0x59, 0x5b, 0xdb, 0x70, 0x13, 0x4a, 0x3b, 0x4a, 0x91, + 0xd8, 0x50, 0x44, 0xce, 0x1f, 0x6d, 0x40, 0x8d, 0x8a, 0x71, 0xbc, 0x09, 0x11, 0x66, 0xfa, 0xaf, + 0x6a, 0x7a, 0xcb, 0x5c, 0x22, 0xd9, 0x80, 0x3c, 0x73, 0xc9, 0x78, 0x19, 0x8e, 0xc7, 0x31, 0x06, + 0x9a, 0x80, 0x19, 0x0d, 0x2c, 0xda, 0xf8, 0x5b, 0xa3, 0x87, 0x36, 0x52, 0xa7, 0x7d, 0x46, 0x0c, + 0x24, 0x91, 0x78, 0xd6, 0x3e, 0xc7, 0xc4, 0xd3, 0x73, 0x92, 0x4a, 0xfe, 0x30, 0x4b, 0x30, 0xce, + 0x92, 0x1b, 0x66, 0x00, 0x0e, 0x9a, 0x23, 0xf2, 0x5f, 0x62, 0xb7, 0xac, 0xb0, 0x39, 0x24, 0xff, + 0x8d, 0x6d, 0xd7, 0x1a, 0x37, 0xaf, 0xc8, 0x7f, 0x34, 0x2d, 0x22, 0xff, 0x0d, 0x6c, 0xdb, 0x6b, + 0x80, 0xea, 0x4b, 0xea, 0x70, 0x2d, 0x8a, 0xbc, 0x25, 0xa6, 0x07, 0x04, 0x56, 0x28, 0x08, 0x6a, + 0x76, 0xdf, 0xb6, 0x09, 0xcb, 0xf6, 0x5a, 0x14, 0x4c, 0x8f, 0x3d, 0x85, 0xea, 0x2e, 0x0a, 0x1f, + 0x24, 0xa2, 0xbd, 0x84, 0xb3, 0xef, 0x10, 0xdc, 0xc4, 0xa5, 0xdf, 0x2b, 0xf1, 0xcd, 0x03, 0x8e, + 0x15, 0x16, 0xc3, 0x1e, 0xc4, 0xf0, 0x13, 0x49, 0x5b, 0x2a, 0x1c, 0x4d, 0xb2, 0xb1, 0x3e, 0xe0, + 0xd8, 0x7a, 0x09, 0x37, 0x21, 0x15, 0x86, 0x33, 0xe9, 0x4a, 0x00, 0x4f, 0x47, 0xed, 0x4a, 0xf7, + 0x92, 0x5f, 0x85, 0xc3, 0xf4, 0x56, 0x4f, 0x05, 0xa1, 0x6b, 0x04, 0x0f, 0x07, 0x10, 0x02, 0xa5, + 0x08, 0xe3, 0xf8, 0xf9, 0xa2, 0x71, 0xda, 0xee, 0x9e, 0x75, 0xcf, 0xdf, 0xf6, 0x5e, 0x9d, 0x9f, + 0x9e, 0xbf, 0x79, 0xfb, 0xfa, 0xed, 0xe9, 0x89, 0x21, 0xa2, 0x0e, 0x58, 0xa0, 0x95, 0xc1, 0xcc, + 0x64, 0x8e, 0xb4, 0xe8, 0x6b, 0x78, 0xc4, 0x32, 0x82, 0x80, 0x86, 0xb6, 0x1c, 0xd1, 0x10, 0x57, + 0x8c, 0x9f, 0x69, 0x04, 0x9a, 0x01, 0x31, 0x76, 0xc1, 0x3e, 0x0b, 0x67, 0x0b, 0xcb, 0x2a, 0x9a, + 0xfc, 0x67, 0xe7, 0x6b, 0x4b, 0xfa, 0xea, 0x7e, 0xb5, 0x1d, 0x34, 0xf6, 0x58, 0x58, 0x37, 0xbb, + 0xa9, 0x66, 0x0a, 0xcc, 0x93, 0x74, 0x1e, 0x07, 0x44, 0xe2, 0xce, 0x08, 0x74, 0xef, 0xdc, 0x61, + 0x47, 0xa3, 0x91, 0x22, 0xdb, 0x93, 0xea, 0x15, 0xe7, 0xa2, 0x31, 0xd6, 0x4b, 0xc0, 0xf8, 0x97, + 0x9a, 0x99, 0x64, 0x92, 0x21, 0x06, 0xc6, 0xc4, 0x6e, 0x8b, 0xe5, 0xda, 0x64, 0xda, 0x7d, 0xbe, + 0xc0, 0xfb, 0x1d, 0x3c, 0x4f, 0xb8, 0x33, 0xc0, 0x11, 0xf1, 0x83, 0xdc, 0x46, 0x61, 0x2e, 0x06, + 0x6c, 0xbc, 0x84, 0xcb, 0x2a, 0xbc, 0x4b, 0xa6, 0xd7, 0x18, 0xec, 0x97, 0xa6, 0xaf, 0x9a, 0x9f, + 0x2f, 0x7c, 0x49, 0xf7, 0xee, 0xb6, 0xdf, 0xbc, 0x3e, 0x6f, 0x15, 0x81, 0xfd, 0xba, 0xed, 0xd7, + 0xe7, 0x2c, 0x9f, 0x4c, 0x52, 0xfa, 0x98, 0x27, 0x04, 0x10, 0x12, 0xa5, 0x68, 0x64, 0xc7, 0x4b, + 0x6c, 0xba, 0x28, 0x86, 0x4d, 0x01, 0x79, 0x41, 0xc6, 0x81, 0x4c, 0x76, 0x74, 0xac, 0x62, 0xef, + 0xd0, 0x91, 0xf0, 0x8a, 0x54, 0x8e, 0x94, 0x66, 0xd8, 0x0e, 0xff, 0x86, 0x28, 0xb9, 0x50, 0x80, + 0x93, 0x8d, 0x0c, 0x83, 0xe3, 0x25, 0x55, 0xc8, 0xf7, 0x4d, 0x31, 0x93, 0xed, 0xaf, 0xe2, 0x40, + 0xd1, 0x14, 0x08, 0x09, 0x46, 0x7f, 0x31, 0xe3, 0xbb, 0x68, 0x56, 0xaf, 0xec, 0x7f, 0x00, 0x16, + 0xa6, 0x21, 0x54, 0x40, 0xe1, 0xb4, 0xe8, 0xd8, 0x34, 0x59, 0x7f, 0xd9, 0xde, 0xe7, 0x0b, 0x94, + 0x25, 0x05, 0x37, 0xd1, 0xa0, 0xcc, 0x50, 0x88, 0xd5, 0x4c, 0x9f, 0xcd, 0xa2, 0x33, 0xc1, 0x95, + 0x98, 0xdf, 0x45, 0x20, 0xa2, 0xaa, 0x10, 0x4e, 0x96, 0x89, 0xaf, 0x27, 0x4a, 0x91, 0x43, 0x72, + 0x0b, 0x29, 0x2b, 0x4a, 0x15, 0xb7, 0x43, 0xbb, 0x29, 0x7d, 0x3e, 0x4c, 0xb8, 0x89, 0x29, 0x89, + 0x94, 0x62, 0xd8, 0xe2, 0xf3, 0x37, 0xaf, 0x4f, 0x3b, 0xdd, 0x57, 0x27, 0xa5, 0x4d, 0x25, 0x50, + 0xc9, 0xa9, 0x8f, 0xa4, 0xbc, 0xe1, 0x84, 0x71, 0xed, 0xeb, 0x15, 0xd6, 0x72, 0x24, 0x58, 0xf9, + 0x41, 0x2c, 0x26, 0x6d, 0xf4, 0x17, 0xfc, 0x36, 0x7d, 0x57, 0x4b, 0x93, 0x6f, 0x8c, 0x4c, 0x2d, + 0x15, 0x23, 0xde, 0xf4, 0x4a, 0xf1, 0x90, 0xc6, 0xe1, 0x74, 0x1a, 0xf2, 0x00, 0x47, 0x86, 0xf0, + 0x9e, 0xa0, 0xcf, 0xcf, 0xe2, 0x45, 0x3a, 0x0a, 0xb3, 0x6f, 0x2e, 0x58, 0xcc, 0xf1, 0x01, 0xab, + 0x1d, 0xce, 0x92, 0x8e, 0xc3, 0x79, 0xcd, 0x03, 0x50, 0x3c, 0xb7, 0x2e, 0x16, 0x32, 0x87, 0x59, + 0x17, 0x0d, 0x59, 0x86, 0xab, 0xeb, 0x32, 0x7c, 0x6f, 0xb5, 0xa2, 0x49, 0x98, 0x57, 0xdd, 0x61, + 0x98, 0x5d, 0xdf, 0x29, 0x02, 0xa4, 0x86, 0x84, 0x9a, 0x0e, 0x59, 0xdb, 0x1b, 0x1b, 0x75, 0x85, + 0xda, 0x0f, 0xcf, 0x2f, 0xb0, 0xd0, 0x4b, 0x7f, 0x9a, 0x49, 0x30, 0xbd, 0x3a, 0x30, 0x3c, 0xd9, + 0x40, 0x08, 0xcf, 0x72, 0xe5, 0x39, 0x51, 0x11, 0xa8, 0xba, 0x40, 0xb3, 0x25, 0xcf, 0xcb, 0x2d, + 0xa2, 0x6f, 0x20, 0x1b, 0x7a, 0x04, 0x33, 0xdc, 0x62, 0x2e, 0x18, 0xfb, 0x83, 0x95, 0xde, 0x86, + 0xdd, 0xd5, 0x36, 0x54, 0xf5, 0x03, 0xef, 0x84, 0xfa, 0x1e, 0xe0, 0xcd, 0x57, 0xdb, 0x4e, 0xf3, + 0xde, 0x7d, 0xfc, 0xfd, 0xe2, 0xdd, 0xaf, 0x17, 0xef, 0x2e, 0x2f, 0x3e, 0xfe, 0x52, 0xfd, 0x24, + 0x0d, 0x28, 0xf9, 0x6a, 0xd0, 0xcd, 0x20, 0xe4, 0x0f, 0x29, 0xb4, 0xba, 0xbd, 0x37, 0x24, 0x9b, + 0x69, 0x4f, 0x7d, 0xb1, 0x2d, 0x10, 0xd0, 0x70, 0xdf, 0xf4, 0x99, 0x04, 0x0c, 0xe5, 0x08, 0xda, + 0x8c, 0x2f, 0x2d, 0x69, 0x81, 0x88, 0xb0, 0x4d, 0x81, 0xc0, 0x5f, 0x60, 0x37, 0xd9, 0xd7, 0xad, + 0xf3, 0xea, 0x8c, 0x45, 0x09, 0x2f, 0x7c, 0x82, 0xb2, 0x26, 0x00, 0xde, 0x46, 0x65, 0xb6, 0x8b, + 0x8d, 0x4d, 0x09, 0x06, 0x3c, 0x8e, 0xec, 0x37, 0xdb, 0x4e, 0xf3, 0x05, 0x3f, 0xf0, 0x1f, 0xd8, + 0x3a, 0x66, 0x11, 0x87, 0x93, 0x11, 0xcd, 0x2c, 0x72, 0xd8, 0xe8, 0x01, 0xf1, 0x0e, 0x1b, 0x40, + 0xae, 0xfa, 0x42, 0x3a, 0xc7, 0xd2, 0xb4, 0xf8, 0x2f, 0xa1, 0x2c, 0xcb, 0x7d, 0x8b, 0xa6, 0xac, + 0xd0, 0x00, 0xd3, 0xeb, 0x5c, 0x29, 0x2b, 0xea, 0x75, 0xca, 0x58, 0x7a, 0xf8, 0x90, 0x03, 0x68, + 0x4f, 0x4d, 0xab, 0xa0, 0x8f, 0x29, 0xf0, 0xf4, 0x95, 0x07, 0xb9, 0x22, 0x5b, 0xed, 0x14, 0xbc, + 0x39, 0x49, 0xab, 0x73, 0x8a, 0x88, 0x92, 0x54, 0xe3, 0xd0, 0xe4, 0x20, 0x6a, 0xdb, 0xd2, 0x00, + 0x6a, 0xf9, 0x39, 0x8d, 0x31, 0x4d, 0xb4, 0xd6, 0x6b, 0xad, 0x0e, 0xda, 0x2b, 0xbd, 0x80, 0xfe, + 0xd5, 0xab, 0x71, 0xf8, 0xe6, 0x16, 0xd1, 0xb8, 0x73, 0x08, 0xef, 0xdc, 0xba, 0x76, 0xaf, 0xe1, + 0xdd, 0x73, 0xed, 0xb1, 0x2b, 0xce, 0x58, 0xaa, 0x01, 0x0a, 0xf4, 0x7b, 0x4c, 0x63, 0xe3, 0x7b, + 0x79, 0x75, 0x67, 0x2b, 0x8b, 0x37, 0xc2, 0x7b, 0x4a, 0x31, 0xec, 0xbf, 0x52, 0x65, 0xc6, 0x28, + 0x8c, 0xf8, 0xda, 0x14, 0xe9, 0x32, 0x39, 0x44, 0x26, 0xbf, 0x7c, 0x4a, 0xaf, 0x90, 0x56, 0x96, + 0x32, 0x15, 0x29, 0x55, 0x5a, 0xba, 0x4f, 0xef, 0x94, 0x94, 0x4f, 0xb0, 0xb6, 0x25, 0xdd, 0x30, + 0x58, 0x4f, 0xa0, 0xb7, 0x86, 0x1a, 0x9f, 0xeb, 0xa0, 0xd4, 0x85, 0x42, 0x39, 0xc2, 0x45, 0x16, + 0x56, 0x2e, 0xec, 0x6c, 0xa9, 0xed, 0x6a, 0x7a, 0xad, 0x59, 0x07, 0x36, 0x69, 0xbb, 0x4f, 0xf3, + 0x10, 0xd5, 0x37, 0xf4, 0x40, 0xd4, 0x9e, 0xc3, 0xdf, 0x1d, 0xe6, 0xd9, 0x21, 0xd3, 0xed, 0x6d, + 0xca, 0x1c, 0xb6, 0xc3, 0x99, 0xa7, 0xbd, 0xf0, 0x0b, 0x12, 0x7a, 0x01, 0x3e, 0x9a, 0xd3, 0xac, + 0x5a, 0x89, 0xa0, 0x98, 0xcc, 0x46, 0xf2, 0xad, 0x6f, 0x6a, 0xe4, 0x4e, 0x49, 0x8f, 0x41, 0x85, + 0x2d, 0x4b, 0x54, 0x90, 0xb7, 0x10, 0xb5, 0xed, 0x16, 0x55, 0x62, 0xdc, 0x51, 0xdb, 0xc3, 0xf4, + 0x0a, 0x4b, 0x78, 0x0f, 0x71, 0xa6, 0x84, 0xc9, 0xfb, 0xdb, 0xbb, 0x7f, 0xf4, 0x7f, 0xbd, 0xf8, + 0xf8, 0xa1, 0xff, 0xfe, 0xe2, 0xf2, 0xf7, 0x77, 0x1f, 0x7f, 0xfa, 0xd0, 0x38, 0xed, 0xbd, 0x7e, + 0xf5, 0xba, 0xdd, 0x79, 0x36, 0x46, 0xf1, 0xa6, 0xaf, 0x49, 0x57, 0x18, 0xcf, 0xfb, 0x37, 0x8a, + 0x89, 0x58, 0x1d, 0x67, 0xf1, 0xa2, 0x32, 0xea, 0xc7, 0xd1, 0xfc, 0x3c, 0x9a, 0x9f, 0x2f, 0xd5, + 0xfc, 0x3c, 0x1a, 0x84, 0x47, 0x83, 0xf0, 0x85, 0x19, 0x84, 0x5c, 0x9c, 0x6f, 0x6a, 0x13, 0x7a, + 0xa5, 0x25, 0xf4, 0x68, 0x25, 0x1e, 0xad, 0xc4, 0xa3, 0x95, 0xf8, 0x3c, 0xac, 0xc4, 0x8d, 0x77, + 0x83, 0x77, 0xb6, 0x1f, 0x1f, 0xa8, 0x18, 0xbe, 0x18, 0x1b, 0xf0, 0x68, 0xc7, 0x19, 0xec, 0xb8, + 0x8a, 0x97, 0xc6, 0xd8, 0x16, 0x3e, 0x70, 0xb6, 0xca, 0x2a, 0xd5, 0x2f, 0x8e, 0xed, 0xc7, 0xfc, + 0x2b, 0x1b, 0x77, 0x3c, 0x47, 0x59, 0xd1, 0xfa, 0x97, 0x3f, 0xbd, 0xfb, 0xf5, 0x03, 0x88, 0xf6, + 0x47, 0x37, 0xfe, 0xd6, 0xec, 0x79, 0x3e, 0xcc, 0x36, 0x7c, 0x88, 0xf1, 0x57, 0xec, 0x77, 0xee, + 0xe0, 0x3d, 0x3a, 0xda, 0x7c, 0x3b, 0xd8, 0x7c, 0xcf, 0xc0, 0xc4, 0x7a, 0x76, 0x66, 0xe7, 0x81, + 0x6d, 0xbe, 0xe3, 0xb5, 0xcd, 0x67, 0x74, 0x6d, 0xf3, 0x85, 0xdb, 0xd6, 0x4f, 0x6b, 0xcb, 0x3e, + 0x37, 0xcb, 0xfe, 0x50, 0xb6, 0xf5, 0x7f, 0xc2, 0x45, 0xda, 0x27, 0xf2, 0x1f, 0x70, 0xb8, 0xed, + 0xb6, 0x95, 0x0d, 0x8a, 0xd6, 0xd1, 0x81, 0x70, 0x74, 0x20, 0x1c, 0x1d, 0x08, 0x0f, 0x76, 0x20, + 0x14, 0xf3, 0x30, 0x94, 0xb5, 0xf9, 0xc7, 0x75, 0x2c, 0x6c, 0x73, 0x1b, 0x54, 0x11, 0x62, 0x7a, + 0x98, 0x95, 0xb5, 0x1e, 0x8a, 0xc3, 0x59, 0x2f, 0x2f, 0xe5, 0x32, 0xe6, 0x7f, 0x82, 0xdb, 0xe5, + 0x19, 0xdd, 0xea, 0x7c, 0x42, 0xb7, 0xd0, 0x31, 0x6c, 0xf1, 0xcb, 0x7a, 0xcc, 0x44, 0xee, 0x6a, + 0xb9, 0x7d, 0x6a, 0x9b, 0xdb, 0x4b, 0x47, 0xf4, 0x9a, 0xa7, 0x06, 0x00, 0xd6, 0x00, 0x57, 0x26, + 0x9c, 0x91, 0x01, 0x27, 0xa1, 0xda, 0x61, 0xfd, 0x5d, 0x87, 0x11, 0x28, 0xf6, 0xbf, 0x31, 0x5f, + 0x24, 0xc5, 0xb6, 0x24, 0x5d, 0x49, 0x6f, 0x17, 0x8b, 0x25, 0xc2, 0x53, 0x7b, 0xba, 0xbd, 0x54, + 0xe1, 0xa3, 0x7a, 0xf8, 0x48, 0x85, 0x5f, 0xf5, 0xf1, 0x21, 0xe4, 0xa6, 0xe8, 0x0b, 0xa2, 0x07, + 0xb1, 0x7b, 0x6b, 0x82, 0x3e, 0xa4, 0xc9, 0xd2, 0x6a, 0x5d, 0x35, 0x7b, 0xec, 0x31, 0x17, 0x5b, + 0x27, 0x68, 0x55, 0x20, 0x8f, 0x76, 0x41, 0x1e, 0x55, 0x23, 0x8f, 0x0a, 0xd6, 0xc0, 0xf0, 0x23, + 0xdb, 0xdf, 0xf5, 0x46, 0x1e, 0x22, 0xbd, 0xea, 0x92, 0x96, 0xdb, 0x12, 0xae, 0x68, 0x87, 0x9b, + 0xda, 0x0c, 0x57, 0x44, 0x70, 0x45, 0xb6, 0xe2, 0x3d, 0x06, 0x5c, 0xc6, 0xdb, 0xda, 0xa4, 0x52, + 0xd7, 0x9c, 0x11, 0xd9, 0xe6, 0x5b, 0xda, 0xd4, 0x9f, 0xfc, 0x88, 0xaf, 0x4a, 0x3c, 0x23, 0x6f, + 0xf2, 0xa3, 0x1e, 0x25, 0x62, 0x83, 0x44, 0x5f, 0xa1, 0x0e, 0x4b, 0xaa, 0x1d, 0xe9, 0xf5, 0xfe, + 0x4a, 0x4a, 0x37, 0x95, 0x8a, 0x2a, 0x4a, 0x45, 0xfb, 0x38, 0xb6, 0xc4, 0x52, 0xa1, 0x86, 0xd0, + 0x94, 0x18, 0xed, 0x7e, 0x0e, 0xf2, 0x78, 0xab, 0xe7, 0x78, 0xac, 0xea, 0x78, 0xac, 0xaa, 0xca, + 0xc5, 0xce, 0x87, 0xcc, 0xe0, 0x7f, 0x7b, 0x0c, 0xf7, 0x3b, 0x3a, 0x91, 0x6a, 0xa8, 0x2c, 0xf2, + 0x2b, 0xfb, 0xaa, 0x00, 0x31, 0xf1, 0x97, 0x94, 0x5b, 0xd7, 0x9b, 0x2a, 0xd8, 0xf1, 0x8a, 0xd2, + 0xf1, 0x44, 0xda, 0x33, 0x39, 0x91, 0x76, 0x38, 0x3f, 0xb9, 0x34, 0x15, 0x8b, 0x9f, 0x86, 0x9a, + 0x8b, 0x4c, 0x57, 0x9d, 0x9f, 0xa6, 0x26, 0xcb, 0x98, 0x4c, 0x93, 0xec, 0xe8, 0xce, 0x3e, 0xba, + 0xb3, 0x8f, 0xee, 0xec, 0xff, 0x78, 0x77, 0x36, 0xea, 0xf5, 0x01, 0x13, 0x30, 0x62, 0x52, 0x3a, + 0xba, 0x9d, 0xd2, 0x5e, 0x7a, 0x92, 0xf4, 0x11, 0x83, 0x57, 0x02, 0x5b, 0x35, 0x85, 0x09, 0x63, + 0x33, 0xec, 0xd1, 0x5a, 0xec, 0xd1, 0x66, 0xd8, 0x23, 0x09, 0x3b, 0x84, 0x1c, 0xdb, 0xf7, 0x59, + 0x3e, 0xdd, 0xc8, 0x5a, 0x0c, 0x47, 0xd8, 0xfd, 0xe5, 0x98, 0x54, 0xc4, 0x56, 0x7c, 0x66, 0xa6, + 0xd5, 0xf1, 0x8a, 0x59, 0xfd, 0xe2, 0x7e, 0x38, 0xe5, 0x7a, 0xbf, 0x9a, 0xf1, 0xb7, 0x78, 0x6b, + 0xce, 0x88, 0xa1, 0xe6, 0xa4, 0x42, 0xb9, 0xc7, 0x6b, 0x3b, 0x7c, 0x6b, 0x1d, 0xe8, 0x1b, 0xf3, + 0xb5, 0x12, 0x31, 0x04, 0xb9, 0xfd, 0xd0, 0x18, 0xbf, 0x09, 0x85, 0x89, 0xdd, 0x0e, 0x35, 0xe0, + 0xa8, 0x12, 0x38, 0x2a, 0x01, 0xa3, 0x5b, 0x50, 0xd4, 0xe2, 0x0a, 0x14, 0x2e, 0x4a, 0x3a, 0xdb, + 0xa7, 0x4e, 0xbe, 0x40, 0x79, 0x81, 0xf6, 0xbc, 0x55, 0xc8, 0x47, 0x59, 0x96, 0xd3, 0x28, 0xc1, + 0xa6, 0x1c, 0x86, 0x76, 0xff, 0xc7, 0x52, 0x37, 0x3a, 0x29, 0x9a, 0x4f, 0xc8, 0x5a, 0x93, 0xc9, + 0xcf, 0x4f, 0x08, 0xa9, 0x8f, 0x6b, 0x4f, 0x45, 0x66, 0x74, 0x3d, 0x1a, 0xc5, 0x59, 0xdd, 0xd3, + 0xb4, 0x5b, 0x06, 0x2e, 0xeb, 0x18, 0xd2, 0xba, 0xbb, 0x46, 0x33, 0xeb, 0x04, 0x96, 0x65, 0x8e, + 0xf6, 0xd8, 0x82, 0x13, 0xc1, 0x9e, 0x4a, 0x7f, 0xc3, 0x86, 0xb8, 0x4c, 0xb4, 0x64, 0x37, 0xa0, + 0xc1, 0xef, 0xe0, 0x09, 0x74, 0xb9, 0x03, 0x20, 0x60, 0x57, 0xd1, 0x55, 0x52, 0xe7, 0xca, 0x3b, + 0xd3, 0xfd, 0x72, 0x3f, 0xe9, 0xcf, 0x77, 0x94, 0x16, 0xdb, 0x4e, 0x75, 0x56, 0x77, 0xe3, 0x6e, + 0x2a, 0x8d, 0x4e, 0x06, 0x51, 0xa3, 0x88, 0xd2, 0xb1, 0x80, 0x30, 0xdb, 0x75, 0xd9, 0x20, 0x2e, + 0xcb, 0x23, 0x1f, 0x92, 0x6e, 0xc3, 0x00, 0x7a, 0xfa, 0x8b, 0x26, 0x85, 0xaf, 0x72, 0x96, 0x67, + 0xe1, 0xc2, 0xf4, 0xe2, 0x09, 0x3c, 0x3f, 0xb2, 0x98, 0x27, 0xb3, 0xfe, 0x2d, 0x06, 0xd1, 0xd5, + 0x22, 0xd2, 0x15, 0x82, 0xb9, 0x53, 0x9e, 0x98, 0x1d, 0x1a, 0x86, 0xad, 0xb3, 0x26, 0xca, 0x6b, + 0x97, 0x82, 0x75, 0x69, 0x88, 0x6d, 0x8a, 0xac, 0x1d, 0x52, 0x0b, 0x81, 0x54, 0xc1, 0x12, 0xb2, + 0x71, 0x14, 0x14, 0x3f, 0x3d, 0x0e, 0xe6, 0xdf, 0x8b, 0x42, 0x5d, 0xbd, 0x50, 0xb7, 0x28, 0xd4, + 0x2d, 0x0a, 0x75, 0xa1, 0x90, 0xb6, 0x77, 0x40, 0xb1, 0xb9, 0x2c, 0x88, 0x2b, 0x1f, 0x7d, 0xf6, + 0xb2, 0x52, 0x3b, 0x94, 0x43, 0x5d, 0x63, 0x97, 0x08, 0xbc, 0x80, 0xd6, 0x87, 0x2f, 0x0c, 0x91, + 0x0d, 0xe1, 0xc9, 0xc9, 0x87, 0xab, 0xf6, 0x18, 0x84, 0xed, 0xb7, 0xdd, 0x8a, 0xbc, 0xbb, 0xe5, + 0xaa, 0x32, 0x6f, 0x75, 0xb7, 0x14, 0x91, 0xe4, 0xc2, 0x9b, 0x98, 0x48, 0x87, 0x38, 0xe0, 0xcf, + 0x10, 0xf1, 0xb7, 0xa5, 0xf8, 0xa3, 0x52, 0xb6, 0x77, 0x0a, 0x81, 0x3f, 0x21, 0xec, 0xb7, 0xc5, + 0x60, 0x5b, 0xe4, 0x0b, 0x02, 0x9e, 0x95, 0x87, 0x1f, 0x08, 0x86, 0x0a, 0x71, 0xf6, 0x38, 0xa5, + 0xe1, 0xa7, 0xd3, 0x87, 0x0e, 0x3d, 0x30, 0x14, 0x98, 0xed, 0xb4, 0x81, 0x3a, 0x2b, 0xba, 0x6b, + 0x13, 0x6c, 0x8e, 0x88, 0xfc, 0xae, 0xc0, 0x03, 0x55, 0xb8, 0x1b, 0xa4, 0x68, 0x12, 0x16, 0x25, + 0x05, 0x8d, 0xb0, 0xc6, 0x89, 0x74, 0x45, 0x35, 0x2e, 0xb6, 0x9d, 0x0d, 0x9f, 0xcb, 0x83, 0xa2, + 0x3d, 0x4c, 0xfe, 0x92, 0x5e, 0x5a, 0xe4, 0x6c, 0xca, 0x7c, 0xbe, 0x08, 0x4a, 0xe1, 0x09, 0x7d, + 0xe3, 0x76, 0x0d, 0x33, 0xaa, 0xcd, 0xdb, 0x35, 0x4a, 0xea, 0x29, 0x94, 0x10, 0xe6, 0x94, 0x2a, + 0x73, 0xb9, 0xb7, 0x01, 0x19, 0x53, 0x17, 0x42, 0x51, 0x9a, 0x4e, 0x40, 0xc8, 0x2c, 0xe8, 0xa6, + 0x1d, 0x84, 0xc6, 0xec, 0x23, 0xb1, 0xa1, 0x24, 0xe9, 0x35, 0xa0, 0x51, 0x1c, 0xa2, 0x2c, 0x2d, + 0xc1, 0xa9, 0xcf, 0xf0, 0x21, 0x6c, 0x5d, 0x66, 0x45, 0xd6, 0x20, 0x9c, 0x12, 0x1e, 0x04, 0x93, + 0x0f, 0xc2, 0xd4, 0x11, 0xc9, 0xcc, 0x1f, 0x37, 0xa8, 0x80, 0x9f, 0x27, 0xf9, 0xe0, 0x4a, 0xa7, + 0x35, 0x4b, 0xf3, 0x30, 0x8f, 0xfb, 0x8b, 0xd5, 0x34, 0x4a, 0x27, 0x15, 0x05, 0x69, 0x50, 0x3e, + 0xcd, 0x04, 0x52, 0x84, 0xf8, 0xe0, 0x4a, 0x89, 0x59, 0x59, 0xb1, 0x33, 0x46, 0x53, 0x27, 0x61, + 0x44, 0x34, 0xa0, 0xf9, 0x24, 0x9c, 0xc5, 0x15, 0x10, 0x34, 0x50, 0xb4, 0x96, 0x57, 0xf4, 0x2d, + 0x08, 0x37, 0x3d, 0x19, 0xdb, 0x46, 0x4d, 0xd6, 0x69, 0x38, 0xaf, 0x3a, 0x1a, 0x55, 0x36, 0x9b, + 0x4a, 0x46, 0x93, 0x32, 0xf8, 0xdf, 0xc0, 0x26, 0xcb, 0x33, 0x79, 0x98, 0xbc, 0x50, 0x62, 0x02, + 0x79, 0x4a, 0x8a, 0x43, 0x2b, 0xdc, 0xf5, 0xaa, 0xe6, 0xf2, 0x23, 0x2f, 0xa8, 0x76, 0x14, 0x5e, + 0x42, 0x9e, 0x08, 0x63, 0xc6, 0x53, 0x09, 0xa8, 0xcc, 0x94, 0x8b, 0x78, 0x3c, 0x85, 0xd8, 0x8c, + 0x84, 0xed, 0x26, 0x71, 0xd0, 0xd2, 0x26, 0xf5, 0x9f, 0xbd, 0xaf, 0x5c, 0x4b, 0x85, 0x61, 0x87, + 0xd5, 0xeb, 0xbb, 0x8a, 0xb9, 0x0b, 0x2f, 0x87, 0x7c, 0x57, 0x3d, 0x65, 0x49, 0xa7, 0x22, 0x15, + 0x20, 0x03, 0x29, 0x41, 0x7f, 0x76, 0xbe, 0xba, 0xec, 0x57, 0xf7, 0xab, 0xcb, 0x67, 0xaf, 0xed, + 0x61, 0x98, 0x67, 0xff, 0xbe, 0x01, 0x7d, 0xd6, 0x80, 0x1a, 0x1f, 0x56, 0xa1, 0xa8, 0xac, 0x8c, + 0xb8, 0xae, 0x29, 0xeb, 0x11, 0x33, 0x91, 0xc2, 0xf0, 0xa9, 0x69, 0xaa, 0x3f, 0xed, 0x73, 0x9a, + 0xcc, 0xf2, 0x75, 0x11, 0xc7, 0x59, 0xe0, 0x68, 0x21, 0x8a, 0x88, 0xfc, 0xb9, 0x4a, 0x0b, 0x51, + 0x14, 0xa8, 0xd8, 0xda, 0xea, 0x28, 0x72, 0x28, 0x2a, 0x5a, 0x02, 0x7d, 0x1a, 0x37, 0x7e, 0x3c, + 0xa9, 0x44, 0xec, 0xd5, 0xc8, 0xbf, 0xc6, 0x0f, 0x27, 0x35, 0xb9, 0x5e, 0x25, 0x4e, 0x85, 0x36, + 0xc9, 0xf3, 0xc5, 0xc8, 0xa3, 0x36, 0x19, 0x18, 0x29, 0xe0, 0xe6, 0x54, 0x69, 0x47, 0xbb, 0x0b, + 0xbc, 0xcf, 0x3e, 0xf4, 0xa4, 0x13, 0x94, 0x4a, 0xf3, 0x23, 0x56, 0x44, 0x0b, 0xe0, 0x47, 0xa9, + 0x98, 0x28, 0x6b, 0xfc, 0x88, 0x5c, 0xea, 0xf5, 0xce, 0xd0, 0x13, 0x8b, 0x23, 0xa1, 0xb0, 0x3a, + 0x8a, 0x66, 0x2a, 0xa8, 0x41, 0x8d, 0x27, 0x35, 0xf9, 0x94, 0xbf, 0x14, 0xd9, 0xcd, 0x15, 0x45, + 0x3a, 0xb5, 0x3e, 0xaf, 0x1d, 0x44, 0x1a, 0xaa, 0xba, 0x8b, 0x11, 0xb4, 0xc5, 0x4b, 0x3b, 0xa1, + 0x3e, 0x5e, 0xcb, 0x95, 0x57, 0x1a, 0x41, 0x84, 0x8c, 0x02, 0x53, 0x45, 0x00, 0x6f, 0x4c, 0xbf, + 0xf5, 0xf5, 0x66, 0x60, 0xb8, 0x5d, 0x0b, 0x8e, 0x61, 0xe1, 0x59, 0x2f, 0x75, 0x95, 0x71, 0xe1, + 0x24, 0x17, 0x1c, 0x17, 0xf3, 0xef, 0xe5, 0xae, 0xc0, 0xd9, 0x4e, 0x78, 0x75, 0x16, 0x60, 0x54, + 0x57, 0x59, 0x06, 0x34, 0x35, 0xfc, 0x2a, 0x7f, 0xd2, 0x82, 0x03, 0x22, 0x9d, 0x30, 0x96, 0x6d, + 0x7d, 0x41, 0x70, 0x32, 0x37, 0xf8, 0x27, 0xeb, 0xb8, 0x00, 0x3d, 0xcf, 0x02, 0x8d, 0x8b, 0xbe, + 0x7c, 0x41, 0x8e, 0xab, 0xff, 0x1a, 0xb0, 0xc0, 0xc8, 0xb2, 0x77, 0x1a, 0x64, 0xa3, 0x69, 0xf5, + 0x13, 0x63, 0x22, 0x43, 0x92, 0x8e, 0x54, 0x42, 0xf1, 0x48, 0x46, 0x9c, 0xbc, 0x3a, 0x32, 0x8f, + 0xb5, 0x56, 0xd2, 0x53, 0x13, 0x6e, 0x9b, 0x5a, 0x63, 0x1c, 0xb1, 0x13, 0xe6, 0x9d, 0x42, 0x64, + 0x63, 0xc1, 0x94, 0x52, 0xac, 0xee, 0x1b, 0x26, 0x92, 0xc9, 0xbf, 0x9e, 0xb4, 0x80, 0xc2, 0xd0, + 0xcb, 0x4b, 0x24, 0x5f, 0x4b, 0xd8, 0xa7, 0xa5, 0x6a, 0x4f, 0x22, 0x92, 0x7b, 0xa1, 0x23, 0x04, + 0x72, 0x3e, 0x91, 0xa0, 0x68, 0x4d, 0x40, 0xcc, 0x62, 0x45, 0x93, 0x68, 0xfc, 0xd0, 0x52, 0x35, + 0x0b, 0x75, 0x61, 0x16, 0xaf, 0x50, 0x81, 0x83, 0x04, 0xe2, 0x8c, 0x2b, 0x48, 0x3b, 0x5f, 0x9b, + 0x52, 0x51, 0xdb, 0xae, 0x0a, 0xc9, 0xcd, 0x8c, 0xa4, 0xc7, 0xd6, 0x0a, 0x0e, 0x77, 0xf0, 0x76, + 0x2b, 0x47, 0x9a, 0x04, 0x44, 0x5d, 0x4c, 0x0c, 0xc0, 0xd1, 0x5a, 0xa7, 0xe8, 0xe8, 0xb2, 0x1d, + 0xc9, 0x7e, 0x53, 0x4f, 0x90, 0x4d, 0x4f, 0x6f, 0x1d, 0x95, 0xfd, 0xfd, 0x29, 0xfb, 0xcf, 0x46, + 0x89, 0xde, 0xa7, 0x15, 0xb1, 0xad, 0x45, 0x53, 0x67, 0x75, 0xd4, 0x2b, 0xfb, 0xc0, 0x1e, 0x8a, + 0x27, 0xe8, 0x94, 0x25, 0x76, 0xab, 0x26, 0xf4, 0x28, 0x99, 0x4c, 0xea, 0x0e, 0x9f, 0x15, 0xf9, + 0xd5, 0x27, 0xd0, 0x0a, 0x18, 0xd3, 0x31, 0x34, 0x29, 0xb7, 0x6e, 0xab, 0x45, 0x05, 0xab, 0x7b, + 0x24, 0x2b, 0x9c, 0xa4, 0x75, 0x14, 0x17, 0xf9, 0xd5, 0x14, 0x17, 0x30, 0x26, 0x8a, 0xa5, 0xdc, + 0x3a, 0x8a, 0x55, 0xb0, 0x6f, 0xfa, 0xbc, 0x1a, 0x36, 0xa5, 0xe6, 0xe8, 0x53, 0x91, 0x5f, 0xfd, + 0xaa, 0xad, 0x00, 0x31, 0xbe, 0x6c, 0x5b, 0xe4, 0xd6, 0xbe, 0x61, 0xa6, 0x80, 0xad, 0x23, 0xb8, + 0xfa, 0x68, 0xa2, 0xc8, 0xae, 0x27, 0xb7, 0xea, 0x90, 0x62, 0x91, 0xb9, 0x96, 0x58, 0x65, 0x27, + 0x68, 0x13, 0x3b, 0x55, 0x9a, 0x70, 0xc5, 0x4f, 0xd3, 0x81, 0xad, 0x22, 0xd7, 0x55, 0xa7, 0xa1, + 0xe9, 0xe8, 0x96, 0x8c, 0x6a, 0xa7, 0xa9, 0x54, 0xfc, 0x34, 0xd1, 0x52, 0xe4, 0xba, 0xea, 0x04, + 0x33, 0xd1, 0x22, 0xa3, 0xda, 0x7e, 0x92, 0x1c, 0xfc, 0xa4, 0x97, 0xc4, 0xfb, 0xc5, 0x4f, 0xd3, + 0xbb, 0xba, 0x22, 0xd3, 0x55, 0x27, 0x84, 0xf1, 0x7d, 0x5d, 0x09, 0xd3, 0x2e, 0x5c, 0x2d, 0x7e, + 0x55, 0x11, 0xc2, 0xce, 0xd8, 0x49, 0x8c, 0x5e, 0x49, 0x06, 0xdb, 0xb3, 0x34, 0xb0, 0xeb, 0xd1, + 0x9f, 0x71, 0xf4, 0x67, 0x1c, 0xfd, 0x19, 0x47, 0x7f, 0xc6, 0xd1, 0x9f, 0xf1, 0x32, 0xfc, 0x19, + 0xfc, 0x70, 0x71, 0x71, 0x22, 0x4e, 0x39, 0x40, 0x47, 0x99, 0xe0, 0x59, 0xb9, 0x3c, 0x8a, 0x37, + 0xa5, 0xb2, 0x79, 0x3a, 0x09, 0xa1, 0xf5, 0x0f, 0xf0, 0x81, 0x30, 0x03, 0x88, 0x9e, 0x7f, 0x23, + 0x6d, 0x6b, 0x2f, 0xe1, 0xce, 0x16, 0x5e, 0x3d, 0xa3, 0x56, 0x10, 0xdd, 0x34, 0x94, 0x3a, 0xc8, + 0xa5, 0x2f, 0x77, 0x56, 0xd5, 0x8f, 0x6e, 0x15, 0x7e, 0xb9, 0xea, 0xf2, 0xfd, 0xcf, 0xfd, 0xcf, + 0xff, 0x68, 0xbc, 0x69, 0x77, 0x4e, 0xca, 0xa6, 0x26, 0xac, 0xae, 0x7e, 0x9d, 0x03, 0xc6, 0x6c, + 0x0c, 0xca, 0x47, 0x63, 0xb6, 0x3d, 0x9f, 0xa7, 0xd9, 0xb9, 0x8f, 0x69, 0x0a, 0x1e, 0xd6, 0x8c, + 0x3b, 0xa0, 0x09, 0x76, 0x28, 0x2b, 0xea, 0xa0, 0x26, 0xd0, 0x3e, 0x2d, 0x98, 0x5a, 0x36, 0xd9, + 0xce, 0x00, 0xa9, 0xb7, 0x3f, 0xb6, 0xb2, 0x1f, 0xf6, 0x71, 0xde, 0x4e, 0x1a, 0xbd, 0xed, 0x14, + 0xf9, 0xba, 0xa1, 0xd9, 0x58, 0x17, 0xa7, 0x30, 0x1f, 0xde, 0xff, 0xf2, 0xa1, 0xff, 0xcb, 0xbb, + 0xdf, 0x7e, 0x7b, 0x47, 0x34, 0x86, 0x6e, 0xe7, 0xdc, 0x33, 0x87, 0xdb, 0xe3, 0x62, 0x9c, 0xcd, + 0x72, 0xd0, 0xbe, 0xcb, 0xa2, 0x9f, 0xcd, 0x76, 0x71, 0x2d, 0x1e, 0x95, 0x46, 0x9e, 0xb8, 0x92, + 0x25, 0x38, 0xef, 0x28, 0x96, 0x59, 0x28, 0xe2, 0x1b, 0x2a, 0x3e, 0x45, 0x78, 0x08, 0x3a, 0x6a, + 0xd2, 0xf0, 0xcb, 0xd2, 0x0e, 0x89, 0x0b, 0x8a, 0x26, 0x7a, 0x96, 0xc0, 0xef, 0x28, 0x92, 0xd0, + 0xf6, 0xe5, 0x13, 0x97, 0xd7, 0xa3, 0x51, 0x60, 0xa1, 0x3e, 0xdd, 0xc2, 0xab, 0x0f, 0x4c, 0xb7, + 0x16, 0xda, 0x3a, 0xf4, 0x25, 0x3f, 0xa8, 0x13, 0x48, 0xec, 0x42, 0xab, 0xb3, 0x44, 0x57, 0x3b, + 0xdd, 0x76, 0xf7, 0xad, 0x47, 0x85, 0x78, 0xb3, 0xa0, 0xc2, 0xae, 0x21, 0x83, 0xd6, 0x0d, 0x35, + 0x17, 0x23, 0xef, 0x15, 0x0b, 0x2f, 0x43, 0xe6, 0xdf, 0x4b, 0xe4, 0xe2, 0x71, 0x41, 0x93, 0x47, + 0x19, 0xfc, 0xc9, 0xed, 0xb0, 0xdc, 0x21, 0xb4, 0xae, 0x61, 0x80, 0x1f, 0x8e, 0xbc, 0x1e, 0x28, + 0xba, 0x10, 0x7a, 0xb3, 0xa5, 0x03, 0x86, 0x40, 0x5a, 0x4b, 0x46, 0xe0, 0x42, 0x4a, 0x53, 0x49, + 0xd9, 0xf0, 0x34, 0xa1, 0xa3, 0xae, 0x78, 0x0f, 0xf2, 0x76, 0xff, 0x3f, 0x5e, 0x36, 0x53, 0x8c }; const char* shaderSource() { diff --git a/src/mbgl/programs/gl/symbol_icon.cpp b/src/mbgl/programs/gl/symbol_icon.cpp index 52defc84e9..cb896b4160 100644 --- a/src/mbgl/programs/gl/symbol_icon.cpp +++ b/src/mbgl/programs/gl/symbol_icon.cpp @@ -15,9 +15,9 @@ struct ShaderSource; template <> struct ShaderSource<SymbolIconProgram> { static constexpr const char* name = "symbol_icon"; - static constexpr const uint8_t hash[8] = { 0x96, 0x0c, 0xef, 0xec, 0x37, 0x23, 0xf9, 0xb1 }; - static constexpr const auto vertexOffset = 49728; - static constexpr const auto fragmentOffset = 52382; + static constexpr const uint8_t hash[8] = { 0xf3, 0x81, 0x62, 0xe8, 0x24, 0x49, 0xc6, 0x8f }; + static constexpr const auto vertexOffset = 50079; + static constexpr const auto fragmentOffset = 52727; }; constexpr const char* ShaderSource<SymbolIconProgram>::name; @@ -56,19 +56,9 @@ uniform bool u_rotate_symbol; uniform highp float u_aspect_ratio; uniform float u_fade_change; - -#ifndef HAS_UNIFORM_u_opacity -uniform lowp float u_opacity_t; -attribute lowp vec2 a_opacity; -varying lowp float opacity; -#else -uniform lowp float u_opacity; -#endif - - uniform mat4 u_matrix; uniform mat4 u_label_plane_matrix; -uniform mat4 u_gl_coord_matrix; +uniform mat4 u_coord_matrix; uniform bool u_is_text; uniform bool u_pitch_with_map; @@ -78,6 +68,16 @@ uniform vec2 u_texsize; varying vec2 v_tex; varying float v_fade_opacity; + +#ifndef HAS_UNIFORM_u_opacity +uniform lowp float u_opacity_t; +attribute lowp vec2 a_opacity; +varying lowp float opacity; +#else +uniform lowp float u_opacity; +#endif + + void main() { #ifndef HAS_UNIFORM_u_opacity @@ -137,7 +137,7 @@ void main() { mat2 rotation_matrix = mat2(angle_cos, -1.0 * angle_sin, angle_sin, angle_cos); vec4 projected_pos = u_label_plane_matrix * vec4(a_projected_pos.xy, 0.0, 1.0); - gl_Position = u_gl_coord_matrix * vec4(projected_pos.xy / projected_pos.w + rotation_matrix * (a_offset / 32.0 * fontScale), 0.0, 1.0); + gl_Position = u_coord_matrix * vec4(projected_pos.xy / projected_pos.w + rotation_matrix * (a_offset / 32.0 * fontScale), 0.0, 1.0); v_tex = a_tex / u_texsize; vec2 fade_opacity = unpack_opacity(a_fade_opacity); @@ -151,6 +151,9 @@ void main() { /* uniform sampler2D u_texture; +varying vec2 v_tex; +varying float v_fade_opacity; + #ifndef HAS_UNIFORM_u_opacity varying lowp float opacity; @@ -159,9 +162,6 @@ uniform lowp float u_opacity; #endif -varying vec2 v_tex; -varying float v_fade_opacity; - void main() { #ifdef HAS_UNIFORM_u_opacity diff --git a/src/mbgl/programs/gl/symbol_sdf_icon.cpp b/src/mbgl/programs/gl/symbol_sdf_icon.cpp index aca8e6aba1..a25754ffad 100644 --- a/src/mbgl/programs/gl/symbol_sdf_icon.cpp +++ b/src/mbgl/programs/gl/symbol_sdf_icon.cpp @@ -15,9 +15,9 @@ struct ShaderSource; template <> struct ShaderSource<SymbolSDFIconProgram> { static constexpr const char* name = "symbol_sdf_icon"; - static constexpr const uint8_t hash[8] = { 0x13, 0xfc, 0x05, 0x2a, 0xd1, 0x93, 0xfb, 0x7d }; - static constexpr const auto vertexOffset = 52787; - static constexpr const auto fragmentOffset = 56827; + static constexpr const uint8_t hash[8] = { 0x4b, 0x0b, 0x5f, 0x6b, 0xa9, 0xec, 0x84, 0x19 }; + static constexpr const auto vertexOffset = 53132; + static constexpr const auto fragmentOffset = 57166; }; constexpr const char* ShaderSource<SymbolSDFIconProgram>::name; @@ -57,6 +57,20 @@ uniform bool u_is_size_zoom_constant; uniform bool u_is_size_feature_constant; uniform highp float u_size_t; // used to interpolate between zoom stops when size is a composite function uniform highp float u_size; // used when size is both zoom and feature constant +uniform mat4 u_matrix; +uniform mat4 u_label_plane_matrix; +uniform mat4 u_coord_matrix; +uniform bool u_is_text; +uniform bool u_pitch_with_map; +uniform highp float u_pitch; +uniform bool u_rotate_symbol; +uniform highp float u_aspect_ratio; +uniform highp float u_camera_to_center_distance; +uniform float u_fade_change; +uniform vec2 u_texsize; + +varying vec2 v_data0; +varying vec3 v_data1; #ifndef HAS_UNIFORM_u_fill_color @@ -104,23 +118,6 @@ uniform lowp float u_halo_blur; #endif -uniform mat4 u_matrix; -uniform mat4 u_label_plane_matrix; -uniform mat4 u_gl_coord_matrix; - -uniform bool u_is_text; -uniform bool u_pitch_with_map; -uniform highp float u_pitch; -uniform bool u_rotate_symbol; -uniform highp float u_aspect_ratio; -uniform highp float u_camera_to_center_distance; -uniform float u_fade_change; - -uniform vec2 u_texsize; - -varying vec2 v_data0; -varying vec3 v_data1; - void main() { #ifndef HAS_UNIFORM_u_fill_color @@ -215,7 +212,7 @@ void main() { mat2 rotation_matrix = mat2(angle_cos, -1.0 * angle_sin, angle_sin, angle_cos); vec4 projected_pos = u_label_plane_matrix * vec4(a_projected_pos.xy, 0.0, 1.0); - gl_Position = u_gl_coord_matrix * vec4(projected_pos.xy / projected_pos.w + rotation_matrix * (a_offset / 32.0 * fontScale), 0.0, 1.0); + gl_Position = u_coord_matrix * vec4(projected_pos.xy / projected_pos.w + rotation_matrix * (a_offset / 32.0 * fontScale), 0.0, 1.0); float gamma_scale = gl_Position.w; vec2 tex = a_tex / u_texsize; @@ -232,9 +229,16 @@ void main() { // Uncompressed source of symbol_sdf_icon.fragment.glsl: /* #define SDF_PX 8.0 -#define EDGE_GAMMA 0.105/DEVICE_PIXEL_RATIO uniform bool u_is_halo; +uniform sampler2D u_texture; +uniform highp float u_gamma_scale; +uniform lowp float u_device_pixel_ratio; +uniform bool u_is_text; + +varying vec2 v_data0; +varying vec3 v_data1; + #ifndef HAS_UNIFORM_u_fill_color varying highp vec4 fill_color; @@ -271,13 +275,6 @@ uniform lowp float u_halo_blur; #endif -uniform sampler2D u_texture; -uniform highp float u_gamma_scale; -uniform bool u_is_text; - -varying vec2 v_data0; -varying vec3 v_data1; - void main() { #ifdef HAS_UNIFORM_u_fill_color @@ -305,6 +302,8 @@ void main() { #endif + float EDGE_GAMMA = 0.105 / u_device_pixel_ratio; + vec2 tex = v_data0.xy; float gamma_scale = v_data1.x; float size = v_data1.y; diff --git a/src/mbgl/programs/gl/symbol_sdf_text.cpp b/src/mbgl/programs/gl/symbol_sdf_text.cpp index f059f074b9..9aec77043b 100644 --- a/src/mbgl/programs/gl/symbol_sdf_text.cpp +++ b/src/mbgl/programs/gl/symbol_sdf_text.cpp @@ -15,9 +15,9 @@ struct ShaderSource; template <> struct ShaderSource<SymbolSDFTextProgram> { static constexpr const char* name = "symbol_sdf_text"; - static constexpr const uint8_t hash[8] = { 0x13, 0xfc, 0x05, 0x2a, 0xd1, 0x93, 0xfb, 0x7d }; - static constexpr const auto vertexOffset = 52787; - static constexpr const auto fragmentOffset = 56827; + static constexpr const uint8_t hash[8] = { 0x4b, 0x0b, 0x5f, 0x6b, 0xa9, 0xec, 0x84, 0x19 }; + static constexpr const auto vertexOffset = 53132; + static constexpr const auto fragmentOffset = 57166; }; constexpr const char* ShaderSource<SymbolSDFTextProgram>::name; @@ -57,6 +57,20 @@ uniform bool u_is_size_zoom_constant; uniform bool u_is_size_feature_constant; uniform highp float u_size_t; // used to interpolate between zoom stops when size is a composite function uniform highp float u_size; // used when size is both zoom and feature constant +uniform mat4 u_matrix; +uniform mat4 u_label_plane_matrix; +uniform mat4 u_coord_matrix; +uniform bool u_is_text; +uniform bool u_pitch_with_map; +uniform highp float u_pitch; +uniform bool u_rotate_symbol; +uniform highp float u_aspect_ratio; +uniform highp float u_camera_to_center_distance; +uniform float u_fade_change; +uniform vec2 u_texsize; + +varying vec2 v_data0; +varying vec3 v_data1; #ifndef HAS_UNIFORM_u_fill_color @@ -104,23 +118,6 @@ uniform lowp float u_halo_blur; #endif -uniform mat4 u_matrix; -uniform mat4 u_label_plane_matrix; -uniform mat4 u_gl_coord_matrix; - -uniform bool u_is_text; -uniform bool u_pitch_with_map; -uniform highp float u_pitch; -uniform bool u_rotate_symbol; -uniform highp float u_aspect_ratio; -uniform highp float u_camera_to_center_distance; -uniform float u_fade_change; - -uniform vec2 u_texsize; - -varying vec2 v_data0; -varying vec3 v_data1; - void main() { #ifndef HAS_UNIFORM_u_fill_color @@ -215,7 +212,7 @@ void main() { mat2 rotation_matrix = mat2(angle_cos, -1.0 * angle_sin, angle_sin, angle_cos); vec4 projected_pos = u_label_plane_matrix * vec4(a_projected_pos.xy, 0.0, 1.0); - gl_Position = u_gl_coord_matrix * vec4(projected_pos.xy / projected_pos.w + rotation_matrix * (a_offset / 32.0 * fontScale), 0.0, 1.0); + gl_Position = u_coord_matrix * vec4(projected_pos.xy / projected_pos.w + rotation_matrix * (a_offset / 32.0 * fontScale), 0.0, 1.0); float gamma_scale = gl_Position.w; vec2 tex = a_tex / u_texsize; @@ -232,9 +229,16 @@ void main() { // Uncompressed source of symbol_sdf_text.fragment.glsl: /* #define SDF_PX 8.0 -#define EDGE_GAMMA 0.105/DEVICE_PIXEL_RATIO uniform bool u_is_halo; +uniform sampler2D u_texture; +uniform highp float u_gamma_scale; +uniform lowp float u_device_pixel_ratio; +uniform bool u_is_text; + +varying vec2 v_data0; +varying vec3 v_data1; + #ifndef HAS_UNIFORM_u_fill_color varying highp vec4 fill_color; @@ -271,13 +275,6 @@ uniform lowp float u_halo_blur; #endif -uniform sampler2D u_texture; -uniform highp float u_gamma_scale; -uniform bool u_is_text; - -varying vec2 v_data0; -varying vec3 v_data1; - void main() { #ifdef HAS_UNIFORM_u_fill_color @@ -305,6 +302,8 @@ void main() { #endif + float EDGE_GAMMA = 0.105 / u_device_pixel_ratio; + vec2 tex = v_data0.xy; float gamma_scale = v_data1.x; float size = v_data1.y; diff --git a/src/mbgl/programs/line_program.cpp b/src/mbgl/programs/line_program.cpp index 9428b5d9d6..cab1e7e6fd 100644 --- a/src/mbgl/programs/line_program.cpp +++ b/src/mbgl/programs/line_program.cpp @@ -23,6 +23,7 @@ Values makeValues(const style::LinePaintProperties::PossiblyEvaluated& propertie const RenderTile& tile, const TransformState& state, const std::array<float, 2>& pixelsToGLUnits, + const float pixelRatio, Args&&... args) { return Values { @@ -32,7 +33,8 @@ Values makeValues(const style::LinePaintProperties::PossiblyEvaluated& propertie state) ), uniforms::ratio::Value( 1.0f / tile.id.pixelsToTileUnits(1.0, state.getZoom()) ), - uniforms::gl_units_to_pixels::Value({ {1.0f / pixelsToGLUnits[0], 1.0f / pixelsToGLUnits[1]} }), + uniforms::units_to_pixels::Value({ {1.0f / pixelsToGLUnits[0], 1.0f / pixelsToGLUnits[1]} }), + uniforms::device_pixel_ratio::Value( pixelRatio ), std::forward<Args>(args)... }; } @@ -41,12 +43,14 @@ LineProgram::LayoutUniformValues LineProgram::layoutUniformValues(const style::LinePaintProperties::PossiblyEvaluated& properties, const RenderTile& tile, const TransformState& state, - const std::array<float, 2>& pixelsToGLUnits) { + const std::array<float, 2>& pixelsToGLUnits, + const float pixelRatio) { return makeValues<LineProgram::LayoutUniformValues>( properties, tile, state, - pixelsToGLUnits + pixelsToGLUnits, + pixelRatio ); } @@ -78,6 +82,7 @@ LineSDFProgram::layoutUniformValues(const style::LinePaintProperties::PossiblyEv tile, state, pixelsToGLUnits, + pixelRatio, uniforms::patternscale_a::Value( scaleA ), uniforms::patternscale_b::Value( scaleB ), uniforms::tex_y_a::Value( posA.y ), @@ -92,9 +97,9 @@ LinePatternProgram::LayoutUniformValues LinePatternProgram::layoutUniformValues( const RenderTile& tile, const TransformState& state, const std::array<float, 2>& pixelsToGLUnits, + const float pixelRatio, const Size atlasSize, - const CrossfadeParameters& crossfade, - const float pixelRatio) { + const CrossfadeParameters& crossfade) { const auto tileRatio = 1 / tile.id.pixelsToTileUnits(1, state.getIntegerZoom()); @@ -103,6 +108,7 @@ LinePatternProgram::LayoutUniformValues LinePatternProgram::layoutUniformValues( tile, state, pixelsToGLUnits, + pixelRatio, uniforms::scale::Value ({ {pixelRatio, tileRatio, crossfade.fromScale, crossfade.toScale} }), uniforms::texsize::Value( atlasSize ), uniforms::fade::Value( crossfade.t ) @@ -113,12 +119,14 @@ LineGradientProgram::LayoutUniformValues LineGradientProgram::layoutUniformValue const style::LinePaintProperties::PossiblyEvaluated& properties, const RenderTile& tile, const TransformState& state, - const std::array<float, 2>& pixelsToGLUnits) { + const std::array<float, 2>& pixelsToGLUnits, + const float pixelRatio) { return makeValues<LineGradientProgram::LayoutUniformValues>( properties, tile, state, - pixelsToGLUnits + pixelsToGLUnits, + pixelRatio ); } diff --git a/src/mbgl/programs/line_program.hpp b/src/mbgl/programs/line_program.hpp index ed149abb33..c27f2975b5 100644 --- a/src/mbgl/programs/line_program.hpp +++ b/src/mbgl/programs/line_program.hpp @@ -23,7 +23,7 @@ MBGL_DEFINE_UNIFORM_SCALAR(float, tex_y_b); MBGL_DEFINE_UNIFORM_SCALAR(float, sdfgamma); MBGL_DEFINE_UNIFORM_VECTOR(float, 2, patternscale_a); MBGL_DEFINE_UNIFORM_VECTOR(float, 2, patternscale_b); -MBGL_DEFINE_UNIFORM_VECTOR(float, 2, gl_units_to_pixels); +MBGL_DEFINE_UNIFORM_VECTOR(float, 2, units_to_pixels); } // namespace uniforms using LineLayoutAttributes = TypeList< @@ -37,7 +37,8 @@ class LineProgram : public Program< TypeList< uniforms::matrix, uniforms::ratio, - uniforms::gl_units_to_pixels>, + uniforms::units_to_pixels, + uniforms::device_pixel_ratio>, TypeList<>, style::LinePaintProperties> { @@ -93,7 +94,8 @@ public: layoutUniformValues(const style::LinePaintProperties::PossiblyEvaluated&, const RenderTile&, const TransformState&, - const std::array<float, 2>& pixelsToGLUnits); + const std::array<float, 2>& pixelsToGLUnits, + const float pixelRatio); }; class LinePatternProgram : public Program< @@ -103,7 +105,8 @@ class LinePatternProgram : public Program< TypeList< uniforms::matrix, uniforms::ratio, - uniforms::gl_units_to_pixels, + uniforms::units_to_pixels, + uniforms::device_pixel_ratio, uniforms::scale, uniforms::texsize, uniforms::fade>, @@ -119,9 +122,9 @@ public: const RenderTile&, const TransformState&, const std::array<float, 2>& pixelsToGLUnits, + const float pixelRatio, Size atlasSize, - const CrossfadeParameters& crossfade, - const float pixelRatio); + const CrossfadeParameters& crossfade); }; class LineSDFProgram : public Program< @@ -131,7 +134,8 @@ class LineSDFProgram : public Program< TypeList< uniforms::matrix, uniforms::ratio, - uniforms::gl_units_to_pixels, + uniforms::units_to_pixels, + uniforms::device_pixel_ratio, uniforms::patternscale_a, uniforms::patternscale_b, uniforms::tex_y_a, @@ -164,7 +168,8 @@ class LineGradientProgram : public Program< TypeList< uniforms::matrix, uniforms::ratio, - uniforms::gl_units_to_pixels>, + uniforms::units_to_pixels, + uniforms::device_pixel_ratio>, TypeList< textures::image>, style::LinePaintProperties> @@ -176,7 +181,8 @@ public: layoutUniformValues(const style::LinePaintProperties::PossiblyEvaluated&, const RenderTile&, const TransformState&, - const std::array<float, 2>& pixelsToGLUnits); + const std::array<float, 2>& pixelsToGLUnits, + const float pixelRatio); }; using LineLayoutVertex = LineProgram::LayoutVertex; diff --git a/src/mbgl/programs/symbol_program.cpp b/src/mbgl/programs/symbol_program.cpp index d6a7a10368..b538a23331 100644 --- a/src/mbgl/programs/symbol_program.cpp +++ b/src/mbgl/programs/symbol_program.cpp @@ -87,7 +87,7 @@ Values makeValues(const bool isText, values.translateAnchor, state) ), uniforms::label_plane_matrix::Value(labelPlaneMatrix), - uniforms::gl_coord_matrix::Value( tile.translateVtxMatrix(glCoordMatrix, + uniforms::coord_matrix::Value( tile.translateVtxMatrix(glCoordMatrix, values.translate, values.translateAnchor, state, @@ -135,6 +135,7 @@ SymbolSDFProgram<Name, PaintProperties>::layoutUniformValues(const bool isText, const style::SymbolPropertyValues& values, const Size& texsize, const std::array<float, 2>& pixelsToGLUnits, + const float pixelRatio, const bool alongLine, const RenderTile& tile, const TransformState& state, @@ -155,6 +156,7 @@ SymbolSDFProgram<Name, PaintProperties>::layoutUniformValues(const bool isText, state, symbolFadeChange, uniforms::gamma_scale::Value( gammaScale ), + uniforms::device_pixel_ratio::Value( pixelRatio ), uniforms::is_halo::Value( part == SymbolSDFPart::Halo ) ); } diff --git a/src/mbgl/programs/symbol_program.hpp b/src/mbgl/programs/symbol_program.hpp index 2ad446ae2a..158dee3013 100644 --- a/src/mbgl/programs/symbol_program.hpp +++ b/src/mbgl/programs/symbol_program.hpp @@ -28,7 +28,7 @@ class RenderTile; class TransformState; namespace uniforms { -MBGL_DEFINE_UNIFORM_MATRIX(double, 4, gl_coord_matrix); +MBGL_DEFINE_UNIFORM_MATRIX(double, 4, coord_matrix); MBGL_DEFINE_UNIFORM_MATRIX(double, 4, label_plane_matrix); MBGL_DEFINE_UNIFORM_SCALAR(bool, is_halo); MBGL_DEFINE_UNIFORM_SCALAR(float, gamma_scale); @@ -385,7 +385,7 @@ class SymbolIconProgram : public SymbolProgram< TypeList< uniforms::matrix, uniforms::label_plane_matrix, - uniforms::gl_coord_matrix, + uniforms::coord_matrix, uniforms::extrude_scale, uniforms::texsize, uniforms::fade_change, @@ -426,7 +426,7 @@ class SymbolSDFProgram : public SymbolProgram< TypeList< uniforms::matrix, uniforms::label_plane_matrix, - uniforms::gl_coord_matrix, + uniforms::coord_matrix, uniforms::extrude_scale, uniforms::texsize, uniforms::fade_change, @@ -437,6 +437,7 @@ class SymbolSDFProgram : public SymbolProgram< uniforms::rotate_symbol, uniforms::aspect_ratio, uniforms::gamma_scale, + uniforms::device_pixel_ratio, uniforms::is_halo>, TypeList< textures::texture>, @@ -450,7 +451,7 @@ public: TypeList< uniforms::matrix, uniforms::label_plane_matrix, - uniforms::gl_coord_matrix, + uniforms::coord_matrix, uniforms::extrude_scale, uniforms::texsize, uniforms::fade_change, @@ -461,6 +462,7 @@ public: uniforms::rotate_symbol, uniforms::aspect_ratio, uniforms::gamma_scale, + uniforms::device_pixel_ratio, uniforms::is_halo>, TypeList< textures::texture>, @@ -477,6 +479,7 @@ public: const style::SymbolPropertyValues&, const Size& texsize, const std::array<float, 2>& pixelsToGLUnits, + const float pixelRatio, const bool alongLine, const RenderTile&, const TransformState&, diff --git a/src/mbgl/programs/uniforms.hpp b/src/mbgl/programs/uniforms.hpp index 702b21def9..79dcfa56fb 100644 --- a/src/mbgl/programs/uniforms.hpp +++ b/src/mbgl/programs/uniforms.hpp @@ -37,6 +37,7 @@ MBGL_DEFINE_UNIFORM_SCALAR(Size, world); MBGL_DEFINE_UNIFORM_SCALAR(Size, texsize); MBGL_DEFINE_UNIFORM_SCALAR(bool, pitch_with_map); MBGL_DEFINE_UNIFORM_SCALAR(float, camera_to_center_distance); +MBGL_DEFINE_UNIFORM_SCALAR(float, device_pixel_ratio); MBGL_DEFINE_UNIFORM_SCALAR(float, fade); MBGL_DEFINE_UNIFORM_SCALAR(float, fade_change); MBGL_DEFINE_UNIFORM_SCALAR(float, weight); diff --git a/src/mbgl/renderer/layers/render_circle_layer.cpp b/src/mbgl/renderer/layers/render_circle_layer.cpp index e96dee0cf5..7c922c51ad 100644 --- a/src/mbgl/renderer/layers/render_circle_layer.cpp +++ b/src/mbgl/renderer/layers/render_circle_layer.cpp @@ -83,6 +83,7 @@ void RenderCircleLayer::render(PaintParameters& parameters, RenderSource*) { tile.id.pixelsToTileUnits(1, parameters.state.getZoom()), tile.id.pixelsToTileUnits(1, parameters.state.getZoom()) }} : parameters.pixelsToGLUnits ), + uniforms::device_pixel_ratio::Value( parameters.pixelRatio ), uniforms::camera_to_center_distance::Value( parameters.state.getCameraToCenterDistance() ), uniforms::pitch_with_map::Value( pitchWithMap ) }, diff --git a/src/mbgl/renderer/layers/render_line_layer.cpp b/src/mbgl/renderer/layers/render_line_layer.cpp index 596a121249..a34c634f58 100644 --- a/src/mbgl/renderer/layers/render_line_layer.cpp +++ b/src/mbgl/renderer/layers/render_line_layer.cpp @@ -150,9 +150,9 @@ void RenderLineLayer::render(PaintParameters& parameters, RenderSource*) { tile, parameters.state, parameters.pixelsToGLUnits, + parameters.pixelRatio, texsize, - crossfade, - parameters.pixelRatio), + crossfade), posA, posB, LinePatternProgram::TextureBindings{ @@ -168,7 +168,8 @@ void RenderLineLayer::render(PaintParameters& parameters, RenderSource*) { evaluated, tile, parameters.state, - parameters.pixelsToGLUnits), + parameters.pixelsToGLUnits, + parameters.pixelRatio), {}, {}, LineGradientProgram::TextureBindings{ @@ -180,7 +181,8 @@ void RenderLineLayer::render(PaintParameters& parameters, RenderSource*) { evaluated, tile, parameters.state, - parameters.pixelsToGLUnits), + parameters.pixelsToGLUnits, + parameters.pixelRatio), {}, {}, LineProgram::TextureBindings{}); diff --git a/src/mbgl/renderer/layers/render_symbol_layer.cpp b/src/mbgl/renderer/layers/render_symbol_layer.cpp index 696220662d..37c33844ac 100644 --- a/src/mbgl/renderer/layers/render_symbol_layer.cpp +++ b/src/mbgl/renderer/layers/render_symbol_layer.cpp @@ -157,7 +157,7 @@ void drawIcon(const DrawFn& draw, if (bucket.sdfIcons) { if (values.hasHalo) { draw(parameters.programs.getSymbolLayerPrograms().symbolIconSDF, - SymbolSDFIconProgram::layoutUniformValues(false, false, values, iconSize, parameters.pixelsToGLUnits, alongLine, tile, parameters.state, parameters.symbolFadeChange, SymbolSDFPart::Halo), + SymbolSDFIconProgram::layoutUniformValues(false, false, values, iconSize, parameters.pixelsToGLUnits, parameters.pixelRatio, alongLine, tile, parameters.state, parameters.symbolFadeChange, SymbolSDFPart::Halo), bucket.icon, iconSegments, bucket.iconSizeBinder, @@ -171,7 +171,7 @@ void drawIcon(const DrawFn& draw, if (values.hasFill) { draw(parameters.programs.getSymbolLayerPrograms().symbolIconSDF, - SymbolSDFIconProgram::layoutUniformValues(false, false, values, iconSize, parameters.pixelsToGLUnits, alongLine, tile, parameters.state, parameters.symbolFadeChange, SymbolSDFPart::Fill), + SymbolSDFIconProgram::layoutUniformValues(false, false, values, iconSize, parameters.pixelsToGLUnits, parameters.pixelRatio, alongLine, tile, parameters.state, parameters.symbolFadeChange, SymbolSDFPart::Fill), bucket.icon, iconSegments, bucket.iconSizeBinder, @@ -302,7 +302,7 @@ void drawText(const DrawFn& draw, if (values.hasHalo) { draw(parameters.programs.getSymbolLayerPrograms().symbolGlyph, - SymbolSDFTextProgram::layoutUniformValues(true, hasVariablePacement, values, texsize, parameters.pixelsToGLUnits, alongLine, tile, parameters.state, parameters.symbolFadeChange, SymbolSDFPart::Halo), + SymbolSDFTextProgram::layoutUniformValues(true, hasVariablePacement, values, texsize, parameters.pixelsToGLUnits, parameters.pixelRatio, alongLine, tile, parameters.state, parameters.symbolFadeChange, SymbolSDFPart::Halo), bucket.text, textSegments, bucket.textSizeBinder, @@ -316,7 +316,7 @@ void drawText(const DrawFn& draw, if (values.hasFill) { draw(parameters.programs.getSymbolLayerPrograms().symbolGlyph, - SymbolSDFTextProgram::layoutUniformValues(true, hasVariablePacement, values, texsize, parameters.pixelsToGLUnits, alongLine, tile, parameters.state, parameters.symbolFadeChange, SymbolSDFPart::Fill), + SymbolSDFTextProgram::layoutUniformValues(true, hasVariablePacement, values, texsize, parameters.pixelsToGLUnits, parameters.pixelRatio, alongLine, tile, parameters.state, parameters.symbolFadeChange, SymbolSDFPart::Fill), bucket.text, textSegments, bucket.textSizeBinder, |