summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Android.bp2
-rw-r--r--copy.bara.sky6
-rw-r--r--ui/events/ozone/evdev/touch_evdev_types.cc24
-rw-r--r--ui/events/ozone/evdev/touch_evdev_types.h20
-rw-r--r--ui/events/ozone/evdev/touch_filter/neural_stylus_palm_detection_filter.cc59
-rw-r--r--ui/events/ozone/evdev/touch_filter/neural_stylus_palm_detection_filter.h32
-rw-r--r--ui/events/ozone/evdev/touch_filter/neural_stylus_palm_detection_filter_model.h18
-rw-r--r--ui/events/ozone/evdev/touch_filter/neural_stylus_palm_detection_filter_util.cc117
-rw-r--r--ui/events/ozone/evdev/touch_filter/neural_stylus_palm_detection_filter_util.h38
-rw-r--r--ui/events/ozone/evdev/touch_filter/neural_stylus_palm_detection_filter_util_unittest.cc121
-rw-r--r--ui/events/ozone/evdev/touch_filter/palm_model/onedevice_train_palm_detection_filter_inference_beta.cc3936
-rw-r--r--ui/events/ozone/evdev/touch_filter/palm_model/onedevice_train_palm_detection_filter_inference_beta.h40
-rw-r--r--ui/events/ozone/evdev/touch_filter/palm_model/onedevice_train_palm_detection_filter_model.cc82
-rw-r--r--ui/events/ozone/evdev/touch_filter/palm_model/onedevice_train_palm_detection_filter_model.h5
-rw-r--r--ui/events/ozone/evdev/touch_filter/shared_palm_detection_filter_state.cc25
-rw-r--r--ui/events/ozone/evdev/touch_filter/shared_palm_detection_filter_state.h3
16 files changed, 4390 insertions, 138 deletions
diff --git a/Android.bp b/Android.bp
index 2ba0d36..7211fd9 100644
--- a/Android.bp
+++ b/Android.bp
@@ -24,8 +24,10 @@ cc_library_static {
"ui/events/ozone/evdev/touch_filter/neural_stylus_palm_detection_filter_model.cc",
"ui/events/ozone/evdev/touch_filter/neural_stylus_palm_detection_filter_util.cc",
"ui/events/ozone/evdev/touch_filter/palm_detection_filter.cc",
+ "ui/events/ozone/evdev/touch_filter/shared_palm_detection_filter_state.cc",
"ui/events/ozone/evdev/touch_filter/palm_model/onedevice_train_palm_detection_filter_model.cc",
"ui/events/ozone/evdev/touch_filter/palm_model/onedevice_train_palm_detection_filter_inference.cc",
+ "ui/events/ozone/evdev/touch_filter/palm_model/onedevice_train_palm_detection_filter_inference_beta.cc",
"ui/events/ozone/evdev/touch_filter/palm_model/onedevice_train_palm_detection_filter_inference_v2.cc",
],
visibility: [
diff --git a/copy.bara.sky b/copy.bara.sky
index e307a40..c270d38 100644
--- a/copy.bara.sky
+++ b/copy.bara.sky
@@ -19,6 +19,7 @@ core.workflow(
"ui/events/ozone/evdev/touch_filter/palm_detection_filter.cc",
"ui/events/ozone/evdev/touch_filter/palm_model/**",
"ui/events/ozone/evdev/touch_filter/shared_palm_detection_filter_state.h",
+ "ui/events/ozone/evdev/touch_filter/shared_palm_detection_filter_state.cc",
"ui/events/ozone/evdev/touch_filter/neural_stylus_palm_detection_filter.h",
"ui/events/ozone/evdev/touch_filter/neural_stylus_palm_detection_filter_model.cc",
"ui/events/ozone/evdev/touch_filter/neural_stylus_palm_detection_filter_model.h",
@@ -30,6 +31,8 @@ core.workflow(
"ui/events/ozone/evdev/touch_filter/palm_detection_filter.h",
"ui/events/ozone/evdev/touch_filter/palm_model/onedevice_train_palm_detection_filter_inference.cc",
"ui/events/ozone/evdev/touch_filter/palm_model/onedevice_train_palm_detection_filter_inference.h",
+ "ui/events/ozone/evdev/touch_filter/palm_model/onedevice_train_palm_detection_filter_inference_beta.cc",
+ "ui/events/ozone/evdev/touch_filter/palm_model/onedevice_train_palm_detection_filter_inference_beta.h",
"ui/events/ozone/evdev/touch_filter/palm_model/onedevice_train_palm_detection_filter_inference_v2.cc",
"ui/events/ozone/evdev/touch_filter/palm_model/onedevice_train_palm_detection_filter_inference_v2.h",
"ui/events/ozone/evdev/touch_filter/palm_model/onedevice_train_palm_detection_filter_model.cc",
@@ -59,6 +62,7 @@ core.workflow(
"ui/events/ozone/evdev/touch_filter/palm_detection_filter.cc",
"ui/events/ozone/evdev/touch_filter/palm_model/**",
"ui/events/ozone/evdev/touch_filter/shared_palm_detection_filter_state.h",
+ "ui/events/ozone/evdev/touch_filter/shared_palm_detection_filter_state.cc",
"ui/events/ozone/evdev/touch_filter/neural_stylus_palm_detection_filter.h",
"ui/events/ozone/evdev/touch_filter/neural_stylus_palm_detection_filter_model.cc",
"ui/events/ozone/evdev/touch_filter/neural_stylus_palm_detection_filter_model.h",
@@ -70,6 +74,8 @@ core.workflow(
"ui/events/ozone/evdev/touch_filter/palm_detection_filter.h",
"ui/events/ozone/evdev/touch_filter/palm_model/onedevice_train_palm_detection_filter_inference.cc",
"ui/events/ozone/evdev/touch_filter/palm_model/onedevice_train_palm_detection_filter_inference.h",
+ "ui/events/ozone/evdev/touch_filter/palm_model/onedevice_train_palm_detection_filter_inference_beta.cc",
+ "ui/events/ozone/evdev/touch_filter/palm_model/onedevice_train_palm_detection_filter_inference_beta.h",
"ui/events/ozone/evdev/touch_filter/palm_model/onedevice_train_palm_detection_filter_inference_v2.cc",
"ui/events/ozone/evdev/touch_filter/palm_model/onedevice_train_palm_detection_filter_inference_v2.h",
"ui/events/ozone/evdev/touch_filter/palm_model/onedevice_train_palm_detection_filter_model.cc",
diff --git a/ui/events/ozone/evdev/touch_evdev_types.cc b/ui/events/ozone/evdev/touch_evdev_types.cc
index 4b20d99..83ee59a 100644
--- a/ui/events/ozone/evdev/touch_evdev_types.cc
+++ b/ui/events/ozone/evdev/touch_evdev_types.cc
@@ -6,12 +6,28 @@
namespace ui {
-InProgressTouchEvdev::InProgressTouchEvdev() {
-}
+InProgressTouchEvdev::InProgressTouchEvdev() = default;
InProgressTouchEvdev::InProgressTouchEvdev(const InProgressTouchEvdev& other) =
default;
-InProgressTouchEvdev::~InProgressTouchEvdev() {}
+InProgressTouchEvdev::~InProgressTouchEvdev() = default;
+
+std::ostream& operator<<(std::ostream& out, const InProgressTouchEvdev& touch) {
+ out << "InProgressTouchEvdev(x=" << touch.x << ", y=" << touch.y
+ << ", tracking_id=" << touch.tracking_id << ", slot=" << touch.slot
+ << ", pressure=" << touch.pressure << ", major=" << touch.major
+ << ", minor=" << touch.minor << ", tool_type=" << touch.tool_type
+ << ", altered=" << touch.altered << "was_touching=" << touch.was_touching
+ << ", touching=" << touch.touching << ")";
+ return out;
+}
+
+InProgressStylusState::InProgressStylusState() = default;
+
+InProgressStylusState::InProgressStylusState(
+ const InProgressStylusState& other) = default;
+
+InProgressStylusState::~InProgressStylusState() = default;
-} // namespace ui \ No newline at end of file
+} // namespace ui
diff --git a/ui/events/ozone/evdev/touch_evdev_types.h b/ui/events/ozone/evdev/touch_evdev_types.h
index 9ad9a29..37e0e0a 100644
--- a/ui/events/ozone/evdev/touch_evdev_types.h
+++ b/ui/events/ozone/evdev/touch_evdev_types.h
@@ -11,6 +11,7 @@
#include <stddef.h>
#include "base/component_export.h"
+#include "base/time/time.h"
#include "ui/events/event_constants.h"
namespace ui {
@@ -77,6 +78,23 @@ struct COMPONENT_EXPORT(EVDEV) InProgressTouchEvdev {
bool stylus_button = false;
};
+std::ostream& operator<<(std::ostream& out, const InProgressTouchEvdev& touch);
+
+// Contains information about stylus event, the useful relate ddevice info and
+// the timestamp.
+struct COMPONENT_EXPORT(EVDEV) InProgressStylusState {
+ InProgressStylusState();
+ InProgressStylusState(const InProgressStylusState& other);
+ ~InProgressStylusState();
+
+ InProgressTouchEvdev stylus_event;
+ // Stylus x and y resolution, used for normalization.
+ int x_res = 1;
+ int y_res = 1;
+
+ base::TimeTicks timestamp = base::TimeTicks();
+};
+
} // namespace ui
-#endif // UI_EVENTS_OZONE_EVDEV_TOUCH_EVDEV_TYPES_H_ \ No newline at end of file
+#endif // UI_EVENTS_OZONE_EVDEV_TOUCH_EVDEV_TYPES_H_
diff --git a/ui/events/ozone/evdev/touch_filter/neural_stylus_palm_detection_filter.cc b/ui/events/ozone/evdev/touch_filter/neural_stylus_palm_detection_filter.cc
index d799fd9..1e5724c 100644
--- a/ui/events/ozone/evdev/touch_filter/neural_stylus_palm_detection_filter.cc
+++ b/ui/events/ozone/evdev/touch_filter/neural_stylus_palm_detection_filter.cc
@@ -161,9 +161,8 @@ void NeuralStylusPalmDetectionFilter::Filter(
DCHECK(strokes_.count(tracking_id) == 0)
<< " Tracking id " << tracking_id;
- strokes_.emplace(
- std::make_pair(tracking_id, PalmFilterStroke(model_->config())));
- strokes_.find(tracking_id)->second.SetTrackingId(tracking_id);
+ strokes_.emplace(tracking_id,
+ PalmFilterStroke(model_->config(), tracking_id));
tracking_ids_[slot] = tracking_id;
is_palm_.set(slot, false);
is_delay_.set(slot, false);
@@ -228,7 +227,7 @@ void NeuralStylusPalmDetectionFilter::Filter(
config.early_stage_sample_counts.find(stroke.samples_seen()) !=
config.early_stage_sample_counts.end()) {
VLOG(1) << "About to run a early_stage prediction.";
- if (DetectSpuriousStroke(ExtractFeatures(tracking_id), tracking_id,
+ if (DetectSpuriousStroke(ExtractFeatures(tracking_id),
model_->config().output_threshold)) {
VLOG(1) << "hold detected.";
is_delay_.set(slot, true);
@@ -245,15 +244,14 @@ void NeuralStylusPalmDetectionFilter::Filter(
LOG(DFATAL) << "Unable to find marked stroke.";
continue;
}
- auto& stroke = lookup->second;
+ const auto& stroke = lookup->second;
if (stroke.samples_seen() < model_->config().min_sample_count) {
// in very short strokes: we use a heuristic.
is_palm_.set(slot, IsHeuristicPalmStroke(stroke));
continue;
}
- is_palm_.set(slot,
- DetectSpuriousStroke(ExtractFeatures(tracking_id), tracking_id,
- model_->config().output_threshold));
+ is_palm_.set(slot, DetectSpuriousStroke(ExtractFeatures(tracking_id),
+ model_->config().output_threshold));
if (is_palm_.test(slot)) {
shared_palm_state_->latest_palm_touch_time = time;
}
@@ -320,7 +318,6 @@ bool NeuralStylusPalmDetectionFilter::IsHeuristicPalmStroke(
bool NeuralStylusPalmDetectionFilter::DetectSpuriousStroke(
const std::vector<float>& features,
- int tracking_id,
float threshold) const {
auto inference_value = model_->Inference(features);
if (VLOG_IS_ON(1)) {
@@ -534,4 +531,46 @@ void NeuralStylusPalmDetectionFilter::EraseOldStrokes(base::TimeTicks time) {
}
previous_report_time_ = time;
}
-} // namespace ui \ No newline at end of file
+
+static std::string addLinePrefix(std::string str, const std::string& prefix) {
+ std::stringstream ss;
+ bool newLineStarted = true;
+ for (const auto& ch : str) {
+ if (newLineStarted) {
+ ss << prefix;
+ newLineStarted = false;
+ }
+ if (ch == '\n') {
+ newLineStarted = true;
+ }
+ ss << ch;
+ }
+ return ss.str();
+}
+
+std::ostream& operator<<(std::ostream& out,
+ const NeuralStylusPalmDetectionFilter& filter) {
+ out << "NeuralStylusPalmDetectionFilter(\n";
+ out << " is_palm_ = " << filter.is_palm_ << "\n";
+ out << " is_delay_ = " << filter.is_delay_ << "\n";
+ out << " strokes_ =\n";
+ std::stringstream strokes;
+ strokes << filter.strokes_;
+ out << addLinePrefix(strokes.str(), " ") << "\n";
+ out << " previous_report_time_ = " << filter.previous_report_time_ << "\n";
+ out << " active_tracking_ids_ = " << filter.active_tracking_ids_ << "\n";
+ out << " tracking_ids_count_within_session_ = "
+ << filter.tracking_ids_count_within_session_ << "\n";
+ out << " tracking_ids = [";
+ for (int i = 0; i < kNumTouchEvdevSlots; i++) {
+ out << filter.tracking_ids_[i] << ", ";
+ }
+ out << "]\n";
+
+ out << " palm_filter_dev_info_ = " << filter.palm_filter_dev_info_ << "\n";
+ out << ")\n";
+
+ return out;
+}
+
+} // namespace ui
diff --git a/ui/events/ozone/evdev/touch_filter/neural_stylus_palm_detection_filter.h b/ui/events/ozone/evdev/touch_filter/neural_stylus_palm_detection_filter.h
index 027daea..bab332e 100644
--- a/ui/events/ozone/evdev/touch_filter/neural_stylus_palm_detection_filter.h
+++ b/ui/events/ozone/evdev/touch_filter/neural_stylus_palm_detection_filter.h
@@ -27,6 +27,28 @@
namespace ui {
+#if defined(__ANDROID__) || defined(__ANDROID_HOST__)
+const base::TimeDelta kResamplePeriod = base::Milliseconds(8);
+#endif
+
+template <typename K, typename V>
+std::ostream& operator<<(std::ostream& out, const std::map<K, V>& map) {
+ for (const auto& [k, v] : map) {
+ out << k << " : " << v << "\n";
+ }
+ return out;
+}
+
+template <typename T>
+std::ostream& operator<<(std::ostream& out, const std::unordered_set<T>& set) {
+ out << "{";
+ for (const auto& entry : set) {
+ out << entry << ", ";
+ }
+ out << "}";
+ return out;
+}
+
// An implementation of PalmDetectionFilter that relies on a DNN implementation
// to decide on palm detection. Requires a configured model as an argument.
// Heuristics are added for handling short strokes
@@ -82,7 +104,6 @@ class COMPONENT_EXPORT(EVDEV) NeuralStylusPalmDetectionFilter
std::vector<std::pair<float, int>>* biggest_strokes) const;
bool DetectSpuriousStroke(const std::vector<float>& features,
- int tracking_id,
float threshold) const;
// Extracts the feature vector for the specified stroke.
std::vector<float> ExtractFeatures(int tracking_id) const;
@@ -105,8 +126,15 @@ class COMPONENT_EXPORT(EVDEV) NeuralStylusPalmDetectionFilter
int tracking_ids_[kNumTouchEvdevSlots];
const PalmFilterDeviceInfo palm_filter_dev_info_;
std::unique_ptr<NeuralStylusPalmDetectionFilterModel> model_;
+
+ friend std::ostream& operator<<(
+ std::ostream& out,
+ const NeuralStylusPalmDetectionFilter& filter);
};
+std::ostream& operator<<(std::ostream& out,
+ const NeuralStylusPalmDetectionFilter& filter);
+
} // namespace ui
-#endif // UI_EVENTS_OZONE_EVDEV_TOUCH_FILTER_NEURAL_STYLUS_PALM_DETECTION_FILTER_H_ \ No newline at end of file
+#endif // UI_EVENTS_OZONE_EVDEV_TOUCH_FILTER_NEURAL_STYLUS_PALM_DETECTION_FILTER_H_
diff --git a/ui/events/ozone/evdev/touch_filter/neural_stylus_palm_detection_filter_model.h b/ui/events/ozone/evdev/touch_filter/neural_stylus_palm_detection_filter_model.h
index f40c36d..c2f4863 100644
--- a/ui/events/ozone/evdev/touch_filter/neural_stylus_palm_detection_filter_model.h
+++ b/ui/events/ozone/evdev/touch_filter/neural_stylus_palm_detection_filter_model.h
@@ -14,6 +14,7 @@
#include <vector>
#include "base/component_export.h"
+#include "base/optional.h"
#include "base/time/time.h"
namespace ui {
@@ -95,16 +96,11 @@ struct COMPONENT_EXPORT(EVDEV) NeuralStylusPalmDetectionFilterModelConfig {
// check if it's spurious and mark it held if so.
std::unordered_set<uint32_t> early_stage_sample_counts;
- // True if the touch data should be resampled. Enable this if your device
- // has a non-120 Hz touchscreen. Since the model is hardcoded to assume 8 ms
- // between samples, non-120Hz touchscreens will not work correctly without
- // resampling.
- bool resample_touch = false;
-
- // Time between resampled values. This must match the period hardcoded
- // into the model, so it's made const. It can only be updated at compile
- // time, together with the model.
- const base::TimeDelta resample_period = base::Milliseconds(8.0);
+ // If set, time between values to resample. Must match the value coded into
+ // model. Currently the model is developed for 120Hz touch devices, so this
+ // value must be set to "8 ms" if your device has a different refresh rate.
+ // If not set, no resampling is done.
+ base::Optional<base::TimeDelta> resample_period;
};
// An abstract model utilized by NueralStylusPalmDetectionFilter.
@@ -123,4 +119,4 @@ class COMPONENT_EXPORT(EVDEV) NeuralStylusPalmDetectionFilterModel {
} // namespace ui
-#endif // UI_EVENTS_OZONE_EVDEV_TOUCH_FILTER_NEURAL_STYLUS_PALM_DETECTION_FILTER_MODEL_H_ \ No newline at end of file
+#endif // UI_EVENTS_OZONE_EVDEV_TOUCH_FILTER_NEURAL_STYLUS_PALM_DETECTION_FILTER_MODEL_H_
diff --git a/ui/events/ozone/evdev/touch_filter/neural_stylus_palm_detection_filter_util.cc b/ui/events/ozone/evdev/touch_filter/neural_stylus_palm_detection_filter_util.cc
index b369ece..d1813ef 100644
--- a/ui/events/ozone/evdev/touch_filter/neural_stylus_palm_detection_filter_util.cc
+++ b/ui/events/ozone/evdev/touch_filter/neural_stylus_palm_detection_filter_util.cc
@@ -65,13 +65,28 @@ float interpolate(float start_value, float end_value, float proportion) {
return start_value + (end_value - start_value) * proportion;
}
+/**
+ * During resampling, the later events are used as a basis to populate
+ * non-resampled fields like major and minor. However, if the requested time is
+ * within this delay of the earlier event, the earlier event will be used as a
+ * basis instead.
+ */
+const static auto kPreferInitialEventDelay =
+ base::TimeDelta::FromMicroseconds(1);
+
+/**
+ * Interpolate between the "before" and "after" events to get a resampled value
+ * at the timestamp 'time'. Not all fields are interpolated. For fields that are
+ * not interpolated, the values are taken from the 'after' sample unless the
+ * requested time is very close to the 'before' sample.
+ */
PalmFilterSample getSampleAtTime(base::TimeTicks time,
const PalmFilterSample& before,
const PalmFilterSample& after) {
// Use the newest sample as the base, except when the requested time is very
// close to the 'before' sample.
PalmFilterSample result = after;
- if (time - before.time < base::TimeDelta::FromMicroseconds(1)) {
+ if (time - before.time < kPreferInitialEventDelay) {
result = before;
}
// Only the x and y values are interpolated. We could also interpolate the
@@ -127,24 +142,25 @@ PalmFilterSample CreatePalmFilterSample(
}
PalmFilterStroke::PalmFilterStroke(
- const NeuralStylusPalmDetectionFilterModelConfig& model_config)
- : model_config_(model_config) {}
+ const NeuralStylusPalmDetectionFilterModelConfig& model_config,
+ int tracking_id)
+ : tracking_id_(tracking_id),
+ max_sample_count_(model_config.max_sample_count),
+ resample_period_(model_config.resample_period) {}
PalmFilterStroke::PalmFilterStroke(const PalmFilterStroke& other) = default;
PalmFilterStroke::PalmFilterStroke(PalmFilterStroke&& other) = default;
+PalmFilterStroke::~PalmFilterStroke() {}
void PalmFilterStroke::ProcessSample(const PalmFilterSample& sample) {
- if (samples_seen_ == 0) {
- tracking_id_ = sample.tracking_id;
- }
DCHECK_EQ(tracking_id_, sample.tracking_id);
- if (model_config_.resample_touch) {
+ if (resample_period_.has_value()) {
Resample(sample);
return;
}
AddSample(sample);
- while (samples_.size() > model_config_.max_sample_count) {
+ while (samples_.size() > max_sample_count_) {
AddToUnscaledCentroid(-samples_.front().point.OffsetFromOrigin());
samples_.pop_front();
}
@@ -171,17 +187,16 @@ void PalmFilterStroke::Resample(const PalmFilterSample& sample) {
// We already have a valid last sample here.
DCHECK_LE(last_sample_.time, sample.time);
// Generate resampled values
- base::TimeTicks next_sample_time =
- samples_.back().time + model_config_.resample_period;
+ base::TimeTicks next_sample_time = samples_.back().time + *resample_period_;
while (next_sample_time <= sample.time) {
AddSample(getSampleAtTime(next_sample_time, last_sample_, sample));
- next_sample_time = samples_.back().time + model_config_.resample_period;
+ next_sample_time = samples_.back().time + (*resample_period_);
}
last_sample_ = sample;
// Prune the resampled collection
while ((samples_.back().time - samples_.front().time) >=
- model_config_.resample_period * model_config_.max_sample_count) {
+ (*resample_period_) * max_sample_count_) {
AddToUnscaledCentroid(-samples_.front().point.OffsetFromOrigin());
samples_.pop_front();
}
@@ -215,10 +230,6 @@ uint64_t PalmFilterStroke::samples_seen() const {
return samples_seen_;
}
-void PalmFilterStroke::SetTrackingId(int tracking_id) {
- tracking_id_ = tracking_id;
-}
-
float PalmFilterStroke::MaxMajorRadius() const {
float maximum = 0.0;
for (const auto& sample : samples_) {
@@ -241,4 +252,76 @@ float PalmFilterStroke::BiggestSize() const {
return biggest;
}
-} // namespace ui \ No newline at end of file
+static std::string addLinePrefix(std::string str, const std::string& prefix) {
+ std::stringstream ss;
+ bool newLineStarted = true;
+ for (const auto& ch : str) {
+ if (newLineStarted) {
+ ss << prefix;
+ newLineStarted = false;
+ }
+ if (ch == '\n') {
+ newLineStarted = true;
+ }
+ ss << ch;
+ }
+ return ss.str();
+}
+
+std::ostream& operator<<(std::ostream& out, const gfx::PointF& point) {
+ out << "PointF(" << point.x() << ", " << point.y() << ")";
+ return out;
+}
+
+std::ostream& operator<<(std::ostream& out, const gfx::Vector2dF& vec) {
+ out << "Vector2dF(" << vec.x() << ", " << vec.y() << ")";
+ return out;
+}
+
+std::ostream& operator<<(std::ostream& out, const PalmFilterDeviceInfo& info) {
+ out << "PalmFilterDeviceInfo(max_x=" << info.max_x;
+ out << ", max_y=" << info.max_y;
+ out << ", x_res=" << info.x_res;
+ out << ", y_res=" << info.y_res;
+ out << ", major_radius_res=" << info.major_radius_res;
+ out << ", minor_radius_res=" << info.minor_radius_res;
+ out << ", minor_radius_supported=" << info.minor_radius_supported;
+ out << ")";
+ return out;
+}
+
+std::ostream& operator<<(std::ostream& out, const PalmFilterSample& sample) {
+ out << "PalmFilterSample(major=" << sample.major_radius
+ << ", minor=" << sample.minor_radius << ", pressure=" << sample.pressure
+ << ", edge=" << sample.edge << ", tracking_id=" << sample.tracking_id
+ << ", point=" << sample.point << ", time=" << sample.time << ")";
+ return out;
+}
+
+std::ostream& operator<<(std::ostream& out, const PalmFilterStroke& stroke) {
+ out << "PalmFilterStroke(\n";
+ out << " GetCentroid() = " << stroke.GetCentroid() << "\n";
+ out << " BiggestSize() = " << stroke.BiggestSize() << "\n";
+ out << " MaxMajorRadius() = " << stroke.MaxMajorRadius() << "\n";
+ std::stringstream stream;
+ stream << stroke.samples();
+ out << " samples (" << stroke.samples().size() << " total): \n"
+ << addLinePrefix(stream.str(), " ") << "\n";
+ out << " samples_seen() = " << stroke.samples_seen() << "\n";
+ out << " tracking_id() = " << stroke.tracking_id() << "\n";
+ out << " max_sample_count_ = " << stroke.max_sample_count_ << "\n";
+ if (stroke.resample_period_) {
+ out << " resample_period_ = " << *(stroke.resample_period_) << "\n";
+ out << " last_sample_ = " << stroke.last_sample_ << "\n";
+ } else {
+ out << " resample_period_ = <not set>\n";
+ out << " last_sample_ = <not valid b/c resampling is off>\n";
+ }
+ out << " unscaled_centroid_ = " << stroke.unscaled_centroid_ << "\n";
+ out << " unscaled_centroid_sum_error_ = "
+ << stroke.unscaled_centroid_sum_error_ << "\n";
+ out << ")\n";
+ return out;
+}
+
+} // namespace ui
diff --git a/ui/events/ozone/evdev/touch_filter/neural_stylus_palm_detection_filter_util.h b/ui/events/ozone/evdev/touch_filter/neural_stylus_palm_detection_filter_util.h
index 0052364..47f0c33 100644
--- a/ui/events/ozone/evdev/touch_filter/neural_stylus_palm_detection_filter_util.h
+++ b/ui/events/ozone/evdev/touch_filter/neural_stylus_palm_detection_filter_util.h
@@ -12,6 +12,7 @@
#if defined(__ANDROID__) || defined(__ANDROID_HOST__)
#undef LOG_INFO
#undef LOG_WARNING
+#include <chrome_to_android_compatibility_test_support.h>
#endif
#include "base/time/time.h"
#if !defined(__ANDROID__) && !defined(__ANDROID_HOST__)
@@ -36,6 +37,8 @@ struct COMPONENT_EXPORT(EVDEV) PalmFilterDeviceInfo {
#endif
};
+std::ostream& operator<<(std::ostream& out, const PalmFilterDeviceInfo& info);
+
#if !defined(__ANDROID__) && !defined(__ANDROID_HOST__)
COMPONENT_EXPORT(EVDEV)
PalmFilterDeviceInfo CreatePalmFilterDeviceInfo(const EventDeviceInfo& devinfo);
@@ -50,8 +53,17 @@ struct COMPONENT_EXPORT(EVDEV) PalmFilterSample {
int tracking_id = 0;
gfx::PointF point;
base::TimeTicks time;
+
+ bool operator==(const PalmFilterSample& other) const {
+ return major_radius == other.major_radius &&
+ minor_radius == other.minor_radius && pressure == other.pressure &&
+ edge == other.edge && tracking_id == other.tracking_id &&
+ point == other.point && time == other.time;
+ }
};
+std::ostream& operator<<(std::ostream& out, const PalmFilterSample& sample);
+
COMPONENT_EXPORT(EVDEV)
PalmFilterSample CreatePalmFilterSample(
const InProgressTouchEvdev& touch,
@@ -62,16 +74,17 @@ PalmFilterSample CreatePalmFilterSample(
class COMPONENT_EXPORT(EVDEV) PalmFilterStroke {
public:
explicit PalmFilterStroke(
- const NeuralStylusPalmDetectionFilterModelConfig& model_config);
+ const NeuralStylusPalmDetectionFilterModelConfig& model_config,
+ int tracking_id);
PalmFilterStroke(const PalmFilterStroke& other);
PalmFilterStroke(PalmFilterStroke&& other);
+ ~PalmFilterStroke();
void ProcessSample(const PalmFilterSample& sample);
gfx::PointF GetCentroid() const;
float BiggestSize() const;
// If no elements in stroke, returns 0.0;
float MaxMajorRadius() const;
- void SetTrackingId(int tracking_id);
const std::deque<PalmFilterSample>& samples() const;
uint64_t samples_seen() const;
int tracking_id() const;
@@ -85,7 +98,7 @@ class COMPONENT_EXPORT(EVDEV) PalmFilterStroke {
void Resample(const PalmFilterSample& sample);
std::deque<PalmFilterSample> samples_;
- int tracking_id_ = 0;
+ const int tracking_id_;
/**
* How many total samples have been reported for this stroke. This is
* different from samples_.size() because samples_ will get pruned to only
@@ -100,13 +113,28 @@ class COMPONENT_EXPORT(EVDEV) PalmFilterStroke {
* to compute the resampled value.
*/
PalmFilterSample last_sample_;
- const NeuralStylusPalmDetectionFilterModelConfig& model_config_;
+
+ const uint64_t max_sample_count_;
+ const base::Optional<base::TimeDelta> resample_period_;
+
gfx::PointF unscaled_centroid_ = gfx::PointF(0., 0.);
// Used in part of the kahan summation.
gfx::Vector2dF unscaled_centroid_sum_error_ =
gfx::PointF(0., 0.).OffsetFromOrigin();
+ friend std::ostream& operator<<(std::ostream& out,
+ const PalmFilterStroke& stroke);
};
+template <typename T>
+std::ostream& operator<<(std::ostream& out, const std::deque<T>& queue) {
+ for (const auto& entry : queue) {
+ out << entry << "\n";
+ }
+ return out;
+}
+
+std::ostream& operator<<(std::ostream& out, const PalmFilterStroke& filter);
+
} // namespace ui
-#endif // UI_EVENTS_OZONE_EVDEV_TOUCH_FILTER_NEURAL_STYLUS_PALM_DETECTION_FILTER_UTIL_H_ \ No newline at end of file
+#endif // UI_EVENTS_OZONE_EVDEV_TOUCH_FILTER_NEURAL_STYLUS_PALM_DETECTION_FILTER_UTIL_H_
diff --git a/ui/events/ozone/evdev/touch_filter/neural_stylus_palm_detection_filter_util_unittest.cc b/ui/events/ozone/evdev/touch_filter/neural_stylus_palm_detection_filter_util_unittest.cc
index 18b4d15..ac3c841 100644
--- a/ui/events/ozone/evdev/touch_filter/neural_stylus_palm_detection_filter_util_unittest.cc
+++ b/ui/events/ozone/evdev/touch_filter/neural_stylus_palm_detection_filter_util_unittest.cc
@@ -9,6 +9,7 @@
#include <utility>
#include <vector>
+#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
#if defined(__ANDROID__) || defined(__ANDROID_HOST__)
#include <linux/input-event-codes.h>
@@ -20,6 +21,9 @@
#include "ui/events/ozone/evdev/touch_filter/palm_detection_filter.h"
#include "ui/events/ozone/evdev/touch_filter/shared_palm_detection_filter_state.h"
+using ::testing::ElementsAre;
+using ::testing::IsEmpty;
+
namespace ui {
#if defined(__ANDROID__) || defined(__ANDROID_HOST__)
@@ -83,6 +87,11 @@ bool CapabilitiesToDeviceInfo(DeviceType, EventDeviceInfo*) {
}
#endif
+MATCHER_P(SampleTime, time, "Does the sample have given time.") {
+ *result_listener << "Sample time" << arg.time << " is not " << time;
+ return time == arg.time;
+}
+
class NeuralStylusPalmDetectionFilterUtilTest
: public testing::TestWithParam<bool> {
public:
@@ -103,7 +112,10 @@ class NeuralStylusPalmDetectionFilterUtilTest
touch_.x = 21;
touch_.y = 20;
model_config_.max_sample_count = 3;
- model_config_.resample_touch = GetParam();
+ const bool resample_touch = GetParam();
+ if (resample_touch) {
+ model_config_.resample_period = base::Milliseconds(8);
+ }
}
protected:
@@ -140,8 +152,8 @@ TEST_P(NeuralStylusPalmDetectionFilterUtilTest, DistilledNocturneTest) {
}
TEST_P(NeuralStylusPalmDetectionFilterUtilTest, NoMinorResTest) {
- // Nocturne has minor resolution: but lets pretend it didnt. we should recover
- // "1" as the resolution.
+ // Nocturne has minor resolution, but let's pretend it doesn't. we should
+ // recover "1" as the resolution.
auto abs_info = nocturne_touchscreen_.GetAbsInfoByCode(ABS_MT_TOUCH_MINOR);
abs_info.resolution = 0;
nocturne_touchscreen_.SetAbsInfo(ABS_MT_TOUCH_MINOR, abs_info);
@@ -222,8 +234,8 @@ TEST_P(NeuralStylusPalmDetectionFilterUtilTest, LinkTouchscreenSampleTest) {
}
TEST_P(NeuralStylusPalmDetectionFilterUtilTest, PalmFilterStrokeTest) {
- PalmFilterStroke stroke(model_config_);
- EXPECT_EQ(0, stroke.tracking_id());
+ PalmFilterStroke stroke(model_config_, /*tracking_id*/ 55);
+ touch_.tracking_id = 55;
// With no points, center is 0.
EXPECT_EQ(gfx::PointF(0., 0.), stroke.GetCentroid());
@@ -239,7 +251,7 @@ TEST_P(NeuralStylusPalmDetectionFilterUtilTest, PalmFilterStrokeTest) {
touch_.x = 15 + i;
PalmFilterSample sample =
CreatePalmFilterSample(touch_, time, model_config_, nocturne_distilled);
- time += model_config_.resample_period;
+ time += base::Milliseconds(8);
stroke.ProcessSample(std::move(sample));
EXPECT_EQ(touch_.tracking_id, stroke.tracking_id());
if (i < 3) {
@@ -260,14 +272,13 @@ TEST_P(NeuralStylusPalmDetectionFilterUtilTest, PalmFilterStrokeTest) {
ASSERT_FLOAT_EQ(expected_centroid.x(), stroke.GetCentroid().x())
<< "failed at i " << i;
}
- stroke.SetTrackingId(55);
- EXPECT_EQ(55, stroke.tracking_id());
}
TEST_P(NeuralStylusPalmDetectionFilterUtilTest,
PalmFilterStrokeBiggestSizeTest) {
- PalmFilterStroke stroke(model_config_);
- PalmFilterStroke no_minor_stroke(model_config_);
+ PalmFilterStroke stroke(model_config_, /*tracking_id*/ 0);
+ PalmFilterStroke no_minor_stroke(model_config_, /*tracking_id*/ 0);
+ touch_.tracking_id = stroke.tracking_id();
EXPECT_EQ(0, stroke.BiggestSize());
base::TimeTicks time = base::TimeTicks() + base::Seconds(30);
@@ -292,7 +303,7 @@ TEST_P(NeuralStylusPalmDetectionFilterUtilTest,
no_minor_stroke.ProcessSample(std::move(second_sample));
EXPECT_FLOAT_EQ((2 + i) * (2 + i), no_minor_stroke.BiggestSize());
ASSERT_EQ(std::min(3ul, 1ul + i), stroke.samples().size());
- time += model_config_.resample_period;
+ time += base::Milliseconds(8);
}
}
@@ -315,7 +326,8 @@ TEST_P(NeuralStylusPalmDetectionFilterUtilTest, UnscaledMajorMinorResolution) {
}
TEST_P(NeuralStylusPalmDetectionFilterUtilTest, StrokeGetMaxMajorTest) {
- PalmFilterStroke stroke(model_config_);
+ PalmFilterStroke stroke(model_config_, /*tracking_id*/ 0);
+ touch_.tracking_id = stroke.tracking_id();
EXPECT_FLOAT_EQ(0, stroke.MaxMajorRadius());
base::TimeTicks time = base::TimeTicks::UnixEpoch() + base::Seconds(30);
const PalmFilterDeviceInfo nocturne_distilled =
@@ -362,70 +374,66 @@ TEST_P(NeuralStylusPalmDetectionFilterUtilTest, SampleRadiusConversion) {
TEST(PalmFilterStrokeTest, NumberOfResampledValues) {
NeuralStylusPalmDetectionFilterModelConfig model_config_;
model_config_.max_sample_count = 3;
- model_config_.resample_touch = true;
+ model_config_.resample_period = base::Milliseconds(8);
base::TimeTicks down_time = base::TimeTicks::UnixEpoch() + base::Seconds(30);
- PalmFilterStroke stroke(model_config_);
+ PalmFilterStroke stroke(model_config_, /*tracking_id*/ 0);
const PalmFilterDeviceInfo device_info;
// Initially, no samples
- ASSERT_EQ(0u, stroke.samples().size());
+ ASSERT_THAT(stroke.samples(), IsEmpty());
ASSERT_EQ(0u, stroke.samples_seen());
// Add first sample at time = T
InProgressTouchEvdev touch_;
+ touch_.tracking_id = stroke.tracking_id();
PalmFilterSample sample =
CreatePalmFilterSample(touch_, down_time, model_config_, device_info);
stroke.ProcessSample(sample);
- ASSERT_EQ(1u, stroke.samples().size());
+ ASSERT_THAT(stroke.samples(), ElementsAre(SampleTime(down_time)));
ASSERT_EQ(1u, stroke.samples_seen());
- ASSERT_EQ(down_time, stroke.samples().back().time);
// Add second sample at time = T + 2ms. It's not yet time for the new frame,
// so no new sample should be generated.
base::TimeTicks time = down_time + base::Milliseconds(4);
sample = CreatePalmFilterSample(touch_, time, model_config_, device_info);
stroke.ProcessSample(sample);
- ASSERT_EQ(1u, stroke.samples().size());
+ ASSERT_THAT(stroke.samples(), ElementsAre(SampleTime(down_time)));
ASSERT_EQ(1u, stroke.samples_seen());
- ASSERT_EQ(down_time, stroke.samples().back().time);
// Add third sample at time = T + 10ms. An event at time = T + 8ms should be
// generated.
time = down_time + base::Milliseconds(10);
sample = CreatePalmFilterSample(touch_, time, model_config_, device_info);
stroke.ProcessSample(sample);
- ASSERT_EQ(2u, stroke.samples().size());
+ ASSERT_THAT(stroke.samples(),
+ ElementsAre(SampleTime(down_time),
+ SampleTime(down_time + base::Milliseconds(8))));
ASSERT_EQ(2u, stroke.samples_seen());
- ASSERT_EQ(down_time + base::Milliseconds(8), stroke.samples().back().time);
}
TEST(PalmFilterStrokeTest, ResamplingTest) {
NeuralStylusPalmDetectionFilterModelConfig model_config_;
model_config_.max_sample_count = 3;
- model_config_.resample_touch = true;
+ model_config_.resample_period = base::Milliseconds(8);
- PalmFilterStroke stroke(model_config_);
+ PalmFilterStroke stroke(model_config_, /*tracking_id*/ 0);
PalmFilterDeviceInfo device_info;
device_info.minor_radius_supported = true;
// Add first sample at time = T
InProgressTouchEvdev touch_;
+ touch_.tracking_id = stroke.tracking_id();
touch_.x = 1;
touch_.y = 2;
touch_.major = 4;
touch_.minor = 3;
base::TimeTicks down_time = base::TimeTicks::UnixEpoch() + base::Seconds(30);
- PalmFilterSample sample =
+ PalmFilterSample sample1 =
CreatePalmFilterSample(touch_, down_time, model_config_, device_info);
- stroke.ProcessSample(sample);
+ stroke.ProcessSample(sample1);
// First sample should not be modified
- ASSERT_EQ(1u, stroke.samples().size());
- EXPECT_EQ(1, stroke.samples().back().point.x());
- EXPECT_EQ(2, stroke.samples().back().point.y());
- EXPECT_EQ(4, stroke.samples().back().major_radius);
- EXPECT_EQ(3, stroke.samples().back().minor_radius);
- EXPECT_EQ(down_time, stroke.samples().back().time);
+ ASSERT_THAT(stroke.samples(), ElementsAre(sample1));
// Add second sample at time = T + 2ms. It's not yet time for the new frame,
// so no new sample should be generated.
@@ -434,9 +442,11 @@ TEST(PalmFilterStrokeTest, ResamplingTest) {
touch_.y = 20;
touch_.major = 12;
touch_.minor = 11;
- sample = CreatePalmFilterSample(touch_, time, model_config_, device_info);
- stroke.ProcessSample(sample);
- ASSERT_EQ(1u, stroke.samples().size());
+ PalmFilterSample sample2 =
+ CreatePalmFilterSample(touch_, time, model_config_, device_info);
+ stroke.ProcessSample(sample2);
+ // The samples should remain unchanged
+ ASSERT_THAT(stroke.samples(), ElementsAre(sample1));
// Add third sample at time = T + 12ms. A resampled event at time = T + 8ms
// should be generated.
@@ -445,42 +455,41 @@ TEST(PalmFilterStrokeTest, ResamplingTest) {
touch_.y = 24;
touch_.major = 14;
touch_.minor = 13;
- sample = CreatePalmFilterSample(touch_, time, model_config_, device_info);
- stroke.ProcessSample(sample);
- ASSERT_EQ(2u, stroke.samples().size());
+ PalmFilterSample sample3 =
+ CreatePalmFilterSample(touch_, time, model_config_, device_info);
+ stroke.ProcessSample(sample3);
+ ASSERT_THAT(
+ stroke.samples(),
+ ElementsAre(sample1, SampleTime(down_time + base::Milliseconds(8))));
+
EXPECT_EQ(150, stroke.samples().back().point.x());
EXPECT_EQ(22, stroke.samples().back().point.y());
EXPECT_EQ(14, stroke.samples().back().major_radius);
EXPECT_EQ(13, stroke.samples().back().minor_radius);
- EXPECT_EQ(down_time + base::Milliseconds(8), stroke.samples().back().time);
}
TEST(PalmFilterStrokeTest, MultipleResampledValues) {
NeuralStylusPalmDetectionFilterModelConfig model_config_;
model_config_.max_sample_count = 3;
- model_config_.resample_touch = true;
+ model_config_.resample_period = base::Milliseconds(8);
- PalmFilterStroke stroke(model_config_);
+ PalmFilterStroke stroke(model_config_, /*tracking_id*/ 0);
PalmFilterDeviceInfo device_info;
device_info.minor_radius_supported = true;
// Add first sample at time = T
InProgressTouchEvdev touch_;
+ touch_.tracking_id = stroke.tracking_id();
touch_.x = 0;
touch_.y = 10;
touch_.major = 200;
touch_.minor = 100;
base::TimeTicks down_time = base::TimeTicks::UnixEpoch() + base::Seconds(30);
- PalmFilterSample sample =
+ PalmFilterSample sample1 =
CreatePalmFilterSample(touch_, down_time, model_config_, device_info);
- stroke.ProcessSample(sample);
- // First sample should not be modified
- ASSERT_EQ(1u, stroke.samples().size());
- EXPECT_EQ(0, stroke.samples().back().point.x());
- EXPECT_EQ(10, stroke.samples().back().point.y());
- EXPECT_EQ(200, stroke.samples().back().major_radius);
- EXPECT_EQ(100, stroke.samples().back().minor_radius);
- EXPECT_EQ(down_time, stroke.samples().back().time);
+ stroke.ProcessSample(sample1);
+ // First sample should go in as is
+ ASSERT_THAT(stroke.samples(), ElementsAre(sample1));
// Add second sample at time = T + 20ms. Two resampled values should be
// generated: 1) at time = T+8ms 2) at time = T+16ms
@@ -489,23 +498,25 @@ TEST(PalmFilterStrokeTest, MultipleResampledValues) {
touch_.y = 30;
touch_.major = 220;
touch_.minor = 120;
- sample = CreatePalmFilterSample(touch_, time, model_config_, device_info);
- stroke.ProcessSample(sample);
- ASSERT_EQ(3u, stroke.samples().size());
+ PalmFilterSample sample2 =
+ CreatePalmFilterSample(touch_, time, model_config_, device_info);
+ stroke.ProcessSample(sample2);
+ ASSERT_THAT(stroke.samples(),
+ ElementsAre(SampleTime(down_time),
+ SampleTime(down_time + base::Milliseconds(8)),
+ SampleTime(down_time + base::Milliseconds(16))));
// First sample : time = T + 8ms
EXPECT_EQ(8, stroke.samples()[1].point.x());
EXPECT_EQ(18, stroke.samples()[1].point.y());
EXPECT_EQ(220, stroke.samples()[1].major_radius);
EXPECT_EQ(120, stroke.samples()[1].minor_radius);
- EXPECT_EQ(down_time + base::Milliseconds(8), stroke.samples()[1].time);
// Second sample : time = T + 16ms
EXPECT_EQ(16, stroke.samples().back().point.x());
EXPECT_EQ(26, stroke.samples().back().point.y());
EXPECT_EQ(220, stroke.samples().back().major_radius);
EXPECT_EQ(120, stroke.samples().back().minor_radius);
- EXPECT_EQ(down_time + base::Milliseconds(16), stroke.samples().back().time);
}
-} // namespace ui \ No newline at end of file
+} // namespace ui
diff --git a/ui/events/ozone/evdev/touch_filter/palm_model/onedevice_train_palm_detection_filter_inference_beta.cc b/ui/events/ozone/evdev/touch_filter/palm_model/onedevice_train_palm_detection_filter_inference_beta.cc
new file mode 100644
index 0000000..8edd15b
--- /dev/null
+++ b/ui/events/ozone/evdev/touch_filter/palm_model/onedevice_train_palm_detection_filter_inference_beta.cc
@@ -0,0 +1,3936 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+#include "ui/events/ozone/evdev/touch_filter/palm_model/onedevice_train_palm_detection_filter_inference_beta.h"
+#include <algorithm>
+#include <cassert>
+#include <cmath>
+#include <cstdint>
+#include <cstring>
+#include <limits>
+#include <tuple>
+
+#ifndef USE_EIGEN
+#define USE_EIGEN 0
+#endif
+
+namespace ui::internal_onedevice::beta_model {
+namespace {
+
+// -----------------------------------------------------------------------------
+// OP LIBRARY
+// Copied here to make sure that the inference code always stays in sync with
+// the lib that it was generated for.
+// -----------------------------------------------------------------------------
+
+// Default to using std::copy and std::fill over memcpy and memset as they
+// are usually faster, thanks to the compiler getting stricter alignment
+// guarantees.
+#ifndef USE_TYPED_MEMSETMEMCPY
+#define USE_TYPED_MEMSETMEMCPY 1
+#endif
+#ifndef USE_EIGEN
+#error Please define USE_EIGEN to either 0 or 1
+#endif
+
+// Helper to reinterpret memory as Eigen matrices.
+#if USE_EIGEN
+template <typename Scalar>
+using ConstMatrixMap = typename Eigen::Map<
+ const Eigen::Matrix<Scalar, Eigen::Dynamic, Eigen::Dynamic>>;
+template <typename Scalar>
+using ConstRowVectorMap =
+ typename Eigen::Map<const Eigen::Matrix<Scalar, Eigen::Dynamic, 1>>;
+template <typename Scalar>
+using RowVectorMap =
+ typename Eigen::Map<Eigen::Matrix<Scalar, Eigen::Dynamic, 1>>;
+template <typename Scalar>
+using MatrixMap =
+ typename Eigen::Map<Eigen::Matrix<Scalar, Eigen::Dynamic, Eigen::Dynamic>>;
+template <typename Scalar, typename StorageIndex>
+using SparseMatrix = Eigen::SparseMatrix<Scalar, Eigen::RowMajor, StorageIndex>;
+#endif
+
+#if OP_LIB_BENCHMARK
+class PerOpTimings {
+ public:
+ void Add(const std::string& op, absl::Duration time) {
+ time_per_op_[op] += time;
+ }
+
+ void Reset() { time_per_op_.clear(); }
+
+ void WriteTimingsToInfoLog() {
+ std::string message = "Per op totals:\n";
+ absl::Duration total;
+ for (auto& entry : time_per_op_) {
+ total += entry.second;
+ absl::StrAppend(
+ &message, entry.first, ": ",
+ absl::LegacyPrecision(absl::ToDoubleMilliseconds(entry.second)),
+ " ms\n");
+ }
+ absl::StrAppend(&message, "Total: ",
+ absl::LegacyPrecision(absl::ToDoubleMilliseconds(total)),
+ " ms\n");
+ VLOG(1) << message;
+ }
+
+ private:
+ std::map<std::string, absl::Duration> time_per_op_;
+};
+
+// Timer for individual operations. For each operation, add a statement like
+// BENCHMARK_TIMER(name_part1, name_part2, ...);
+// to the beginning of the code. All name parts will be concatenated together
+// and a line will be logged after executing the operation showing the name and
+// the elapsed time.
+class BenchmarkTimer {
+ public:
+ explicit BenchmarkTimer(std::string name)
+ : name_(std::move(name)), start_(absl::Now()) {}
+
+ ~BenchmarkTimer() {
+ const absl::Duration elapsed = absl::Now() - start_;
+ Singleton<PerOpTimings>::get()->Add(name_, elapsed);
+ VLOG(1) << "Time for " << name_ << ": "
+ << absl::ToDoubleMilliseconds(elapsed) << " ms";
+ }
+
+ private:
+ const std::string name_;
+ const absl::Time start_;
+};
+
+#define BENCHMARK_TIMER(...) BenchmarkTimer timer(absl::StrCat(__VA_ARGS__));
+
+#else // OP_LIB_BENCHMARK
+#define BENCHMARK_TIMER(...)
+#endif // OP_LIB_BENCHMARK
+
+// The size of a shape in terms of number of coefficients.
+inline int32_t ShapeSize(const int32_t rank, const int32_t* shape) {
+ int32_t size = 1;
+ for (int32_t i = 0; i < rank; ++i)
+ size *= shape[i];
+ return size;
+}
+
+// For convolutional operations, calculates the output size with VALID padding.
+// Returns (height, width).
+inline std::tuple<int, int> GetConvOutputSizeVALID(const int32_t* input_shape,
+ const int32_t* kernel_shape,
+ int32_t stride_y,
+ int32_t stride_x) {
+ return std::make_tuple(
+ (input_shape[1] + stride_y - kernel_shape[0]) / stride_y,
+ (input_shape[2] + stride_x - kernel_shape[1]) / stride_x);
+}
+
+// For convolutional operations, calculates the output size with SAME padding.
+// Returns (height, width).
+inline std::tuple<int, int> GetConvOutputSizeSAME(const int32_t* input_shape,
+ int32_t stride_y,
+ int32_t stride_x) {
+ return std::make_tuple((input_shape[1] + stride_y - 1) / stride_y,
+ (input_shape[2] + stride_x - 1) / stride_x);
+}
+
+// Helper to compute the size of the inner loop for an op that uses indices to
+// specify which axes are reduced.
+template <typename Tidx>
+int32_t GetReduceInnerSize(int32_t input_tensor_rank,
+ const int32_t* __restrict input_shape,
+ int32_t index_tensor_rank,
+ const int32_t* __restrict index_shape,
+ const Tidx* __restrict index_values) {
+ assert(index_tensor_rank <= 1);
+ const int32_t num_indices = index_tensor_rank > 0 ? index_shape[0] : 1;
+ int32_t inner_size = 1;
+ for (int32_t i = 0; i < num_indices; ++i) {
+ Tidx index_value = index_values[i];
+ if (index_value < 0) {
+ index_value = input_tensor_rank + index_value;
+ }
+ inner_size *= input_shape[index_value];
+ }
+ return inner_size;
+}
+
+template <typename T>
+void ConcatV2Args2(int32_t arg0_rank,
+ const int32_t* __restrict arg0_shape,
+ const T* __restrict arg0_values,
+ int32_t arg1_rank,
+ const int32_t* __restrict arg1_shape,
+ const T* __restrict arg1_values,
+ const int32_t* __restrict axis_value,
+ T* __restrict output_values) {
+ BENCHMARK_TIMER("ConcatV2Args2");
+ const int32_t axis = axis_value[0];
+ const int32_t num_lines = ShapeSize(axis, arg0_shape);
+ const int32_t arg0_line_size = ShapeSize(arg0_rank - axis, arg0_shape + axis);
+ const int32_t arg1_line_size = ShapeSize(arg1_rank - axis, arg1_shape + axis);
+ for (int32_t line = 0; line < num_lines; ++line) {
+ std::copy(arg0_values, arg0_values + arg0_line_size, output_values);
+ arg0_values += arg0_line_size;
+ output_values += arg0_line_size;
+ std::copy(arg1_values, arg1_values + arg1_line_size, output_values);
+ arg1_values += arg1_line_size;
+ output_values += arg1_line_size;
+ }
+}
+
+template <typename T>
+void MatMul(const int32_t* __restrict input_shape,
+ const T* __restrict input_values,
+ const int32_t* __restrict weight_shape,
+ const T* __restrict weight_values,
+ T* __restrict output_values) {
+ BENCHMARK_TIMER("MatMul");
+#if USE_EIGEN
+ const auto in =
+ ConstMatrixMap<T>(input_values, input_shape[1], input_shape[0]);
+ const auto weight =
+ ConstMatrixMap<T>(weight_values, weight_shape[1], weight_shape[0]);
+ auto result = MatrixMap<T>(output_values, weight_shape[1], input_shape[0]);
+ result.noalias() = weight * in;
+#else
+ const int32_t batch_size = input_shape[0];
+ const int32_t num_inputs = weight_shape[0];
+ const int32_t num_outputs = weight_shape[1];
+ assert(input_shape[1] == num_inputs);
+ for (int32_t batch = 0; batch < batch_size; ++batch) {
+ for (int32_t out_i = 0; out_i < num_outputs; ++out_i) {
+ T value = 0;
+ for (int32_t in_i = 0; in_i < num_inputs; ++in_i) {
+ value += input_values[batch * num_inputs + in_i] *
+ weight_values[in_i * num_outputs + out_i];
+ }
+ *output_values++ = value;
+ }
+ }
+#endif
+}
+
+template <typename T>
+void DepthwiseConv2dNative(const int32_t* __restrict input_shape,
+ const T* __restrict input_values,
+ const int32_t* __restrict kernel_shape,
+ const T* __restrict kernel_values,
+ int32_t stride_y,
+ int32_t stride_x,
+ int32_t out_height,
+ int32_t out_width,
+ T* __restrict output_values) {
+ BENCHMARK_TIMER("DepthwiseConv2dNative");
+ // Give the shape values nicer names.
+ assert(input_shape[3] == kernel_shape[2]);
+ const int32_t batch_size = input_shape[0];
+ const int32_t kernel_height = kernel_shape[0];
+ const int32_t kernel_width = kernel_shape[1];
+ const int32_t in_depth = kernel_shape[2];
+ const int32_t depth_mul = kernel_shape[3];
+ const int32_t in_height = input_shape[1];
+ const int32_t in_width = input_shape[2];
+
+ // Compute the amount of padding needed to get the desired output size.
+ const int32_t pad_height =
+ ((out_height - 1) * stride_y + kernel_height - in_height) / 2;
+ const int32_t pad_width =
+ ((out_width - 1) * stride_x + kernel_width - in_width) / 2;
+
+ // Cache the strides for address computations.
+ const int32_t in_strides[4] = {
+ input_shape[1] * input_shape[2] * input_shape[3], // batch
+ input_shape[2] * input_shape[3], // y
+ input_shape[3], // x
+ 1, // channel
+ };
+ const int32_t kernel_strides[4] = {
+ kernel_shape[1] * kernel_shape[2] * kernel_shape[3], // y
+ kernel_shape[2] * kernel_shape[3], // x
+ kernel_shape[3], // in channels
+ 1, // channel mult
+ };
+
+ T* out_write_ptr = output_values;
+ for (int32_t batch = 0; batch < batch_size; ++batch) {
+ for (int32_t out_y = 0; out_y < out_height; ++out_y) {
+ for (int32_t out_x = 0; out_x < out_width; ++out_x) {
+ // Compute the input read offsets.
+ const int32_t in_y_origin = (out_y * stride_y) - pad_height;
+ const int32_t in_x_origin = (out_x * stride_x) - pad_width;
+
+ // Compute the range of the kernel to be applied (we may need to clip
+ // when we'd read outside of the valid input region - for SAME).
+ const int32_t kernel_y_start =
+ std::max(static_cast<int32_t>(0), -in_y_origin);
+ const int32_t kernel_y_end =
+ std::min(kernel_height, in_height - in_y_origin);
+ const int32_t kernel_x_start =
+ std::max(static_cast<int32_t>(0), -in_x_origin);
+ const int32_t kernel_x_end =
+ std::min(kernel_width, in_width - in_x_origin);
+
+ for (int32_t in_c = 0; in_c < in_depth; ++in_c) {
+ for (int32_t mul_c = 0; mul_c < depth_mul; ++mul_c, ++out_write_ptr) {
+ // Convolve.
+ T sum = 0;
+ for (int32_t k_y = kernel_y_start; k_y < kernel_y_end; ++k_y) {
+ const int32_t in_y = in_y_origin + k_y;
+ assert(in_y >= 0 && in_y < in_height);
+ for (int32_t k_x = kernel_x_start; k_x < kernel_x_end; ++k_x) {
+ const int32_t in_x = in_x_origin + k_x;
+ assert(in_x >= 0 && in_x < in_width);
+ const T input_value =
+ input_values[batch * in_strides[0] + // batch
+ in_y * in_strides[1] + // y
+ in_x * in_strides[2] + // x
+ in_c]; // in chan
+ const T kernel_value =
+ kernel_values[k_y * kernel_strides[0] + // y
+ k_x * kernel_strides[1] + // x
+ in_c * kernel_strides[2] + // in chan
+ mul_c]; // chan mult
+ sum += input_value * kernel_value;
+ }
+ }
+ *out_write_ptr = sum;
+ } // mul_c
+ } // in_c
+ } // out_x
+ } // out_y
+ } // batch
+}
+
+template <typename T>
+void DepthwiseConv2dNativeVALID(const int32_t* __restrict input_shape,
+ const T* __restrict input_values,
+ const int32_t* __restrict kernel_shape,
+ const T* __restrict kernel_values,
+ int32_t stride_y,
+ int32_t stride_x,
+ T* __restrict output_values) {
+ const auto out_size =
+ GetConvOutputSizeVALID(input_shape, kernel_shape, stride_y, stride_x);
+ DepthwiseConv2dNative<T>(
+ input_shape, input_values, kernel_shape, kernel_values, stride_y,
+ stride_x, std::get<0>(out_size), std::get<1>(out_size), output_values);
+}
+
+template <typename T>
+void DepthwiseConv2dNativeSAME(const int32_t* __restrict input_shape,
+ const T* __restrict input_values,
+ const int32_t* __restrict kernel_shape,
+ const T* __restrict kernel_values,
+ int32_t stride_y,
+ int32_t stride_x,
+ T* __restrict output_values) {
+ const auto out_size = GetConvOutputSizeSAME(input_shape, stride_y, stride_x);
+ DepthwiseConv2dNative<T>(
+ input_shape, input_values, kernel_shape, kernel_values, stride_y,
+ stride_x, std::get<0>(out_size), std::get<1>(out_size), output_values);
+}
+
+template <typename T>
+void FullyConnected(const int32_t* __restrict input_shape,
+ const T* __restrict input_values,
+ const int32_t* __restrict weight_shape,
+ const T* __restrict weight_values,
+ const int32_t* __restrict bias_shape,
+ const T* __restrict bias_values,
+ T* __restrict output_values) {
+ BENCHMARK_TIMER("FullyConnected");
+#if USE_EIGEN
+ const auto in =
+ ConstMatrixMap<T>(input_values, input_shape[1], input_shape[0]);
+ const auto weight =
+ ConstMatrixMap<T>(weight_values, weight_shape[1], weight_shape[0]);
+ const auto bias = ConstRowVectorMap<T>(bias_values, bias_shape[0]);
+ auto result = MatrixMap<T>(output_values, weight_shape[1], input_shape[0]);
+ result.noalias() = (weight * in).colwise() + bias;
+#else
+ const int32_t batch_size = input_shape[0];
+ const int32_t num_inputs = weight_shape[0];
+ const int32_t num_outputs = weight_shape[1];
+ assert(input_shape[1] == num_inputs);
+ assert(bias_shape[0] == num_outputs);
+ for (int32_t batch = 0; batch < batch_size; ++batch) {
+ for (int32_t out_i = 0; out_i < num_outputs; ++out_i) {
+ T value = bias_values[out_i];
+ for (int32_t in_i = 0; in_i < num_inputs; ++in_i) {
+ value += input_values[batch * num_inputs + in_i] *
+ weight_values[in_i * num_outputs + out_i];
+ }
+ output_values[batch * num_outputs + out_i] = value;
+ }
+ }
+#endif
+}
+
+template <typename T, typename TBlocks, typename TPaddings>
+void SpaceToBatchNDRank4(const int32_t* __restrict input_shape,
+ const T* __restrict input_values,
+ const TBlocks* __restrict block_shape_values,
+ const TPaddings* __restrict padding_values,
+ T* __restrict output_values) {
+ BENCHMARK_TIMER("SpaceToBatchNDRank4");
+ const int32_t input_batch_size = input_shape[0];
+ const int32_t input_height = input_shape[1];
+ const int32_t input_width = input_shape[2];
+ const int32_t input_depth = input_shape[3];
+
+ const TBlocks block_shape_height = block_shape_values[0];
+ const TBlocks block_shape_width = block_shape_values[1];
+ const TPaddings padding_top = padding_values[0];
+ const TPaddings padding_bottom = padding_values[1];
+ const TPaddings padding_left = padding_values[2];
+ const TPaddings padding_right = padding_values[3];
+
+ const int32_t block_size = block_shape_height * block_shape_width;
+ const int32_t output_depth = input_depth;
+ const int32_t output_batch_size = input_batch_size * block_size;
+ const int32_t output_height =
+ (padding_top + padding_bottom + input_height) / block_shape_height;
+ const int32_t output_width =
+ (padding_left + padding_right + input_width) / block_shape_width;
+
+ const T pad_value = 0;
+
+ for (int32_t out_b = 0; out_b < output_batch_size; ++out_b) {
+ const int32_t input_batch = out_b % input_batch_size;
+ const int32_t shift_w = (out_b / input_batch_size) % block_shape_width;
+ const int32_t shift_h = (out_b / input_batch_size) / block_shape_width;
+ for (int32_t out_h = 0; out_h < output_height; ++out_h) {
+ for (int32_t out_w = 0; out_w < output_width; ++out_w) {
+ T* out = output_values +
+ (((out_b * output_height + out_h) * output_width + out_w) *
+ output_depth +
+ 0);
+ // Check if padding cell are being handled.
+ if (out_h * block_shape_height + shift_h < padding_top ||
+ out_h * block_shape_height + shift_h >=
+ padding_top + input_height ||
+ out_w * block_shape_width + shift_w < padding_left ||
+ out_w * block_shape_width + shift_w >= padding_left + input_width) {
+// This may not execute correctly when pad_value != 0 and T != uint8.
+#if USE_TYPED_MEMSETMEMCPY
+ std::fill(out, out + input_depth, pad_value);
+#else
+ std::memset(out, pad_value, input_depth * sizeof(T));
+#endif
+ } else {
+ const int32_t i0 = input_batch;
+ const int32_t i1 =
+ (out_h * block_shape_height + shift_h) - padding_top;
+ const int32_t i2 =
+ (out_w * block_shape_width + shift_w) - padding_left;
+ const T* in =
+ input_values +
+ (((i0 * input_height + i1) * input_width + i2) * input_depth + 0);
+#if USE_TYPED_MEMSETMEMCPY
+ std::copy(in, in + input_depth, out);
+#else
+ std::memcpy(out, in, input_depth * sizeof(T));
+#endif
+ }
+ }
+ }
+ }
+}
+
+template <typename T, typename TBlocks, typename TCrops>
+void BatchToSpaceNDRank4(const int32_t* __restrict input_shape,
+ const T* __restrict input_values,
+ const TBlocks* __restrict block_shape_values,
+ const TCrops* __restrict crops_values,
+ T* __restrict output_values) {
+ BENCHMARK_TIMER("BatchToSpaceNDRank4");
+ const int32_t input_batch_size = input_shape[0];
+ const int32_t input_height = input_shape[1];
+ const int32_t input_width = input_shape[2];
+ const int32_t input_depth = input_shape[3];
+ const TBlocks block_shape_height = block_shape_values[0];
+ const TBlocks block_shape_width = block_shape_values[1];
+ const TCrops crops_top = crops_values[0];
+ const TCrops crops_bottom = crops_values[1];
+ const TCrops crops_left = crops_values[2];
+ const TCrops crops_right = crops_values[3];
+
+ const int32_t output_depth = input_depth;
+ const int32_t output_batch_size =
+ input_batch_size / (block_shape_width * block_shape_height);
+ const int32_t output_height =
+ input_height * block_shape_height - crops_top - crops_bottom;
+ const int32_t output_width =
+ input_width * block_shape_width - crops_left - crops_right;
+
+ for (int32_t in_batch = 0; in_batch < input_batch_size; ++in_batch) {
+ const int32_t out_batch = in_batch % output_batch_size;
+ const int32_t spatial_offset = in_batch / output_batch_size;
+ for (int32_t in_h = 0; in_h < input_height; ++in_h) {
+ const int32_t out_h = in_h * block_shape_height +
+ spatial_offset / block_shape_width - crops_top;
+ if (out_h < 0 || out_h >= output_height) {
+ continue;
+ }
+ for (int32_t in_w = 0; in_w < input_width; ++in_w) {
+ const int32_t out_w = in_w * block_shape_width +
+ spatial_offset % block_shape_width - crops_left;
+
+ if (out_w < 0 || out_w >= output_width) {
+ continue;
+ }
+ T* out = output_values +
+ (((out_batch * output_height + out_h) * output_width + out_w) *
+ output_depth +
+ 0);
+ const T* in = input_values +
+ (((in_batch * input_height + in_h) * input_width + in_w) *
+ input_depth +
+ 0);
+#if USE_TYPED_MEMSETMEMCPY
+ std::copy(in, in + input_depth, out);
+#else
+ std::memcpy(out, in, input_depth * sizeof(T));
+#endif
+ }
+ }
+ }
+}
+
+#if USE_EIGEN
+template <typename T, typename Tidx>
+void SparseDenseMatMulCSR(const int32_t* __restrict input_shape,
+ const T* __restrict input_values,
+ const int32_t num_rows,
+ const int32_t* __restrict nnz_shape,
+ const T* __restrict nnz_values,
+ const Tidx* __restrict outer_index,
+ const Tidx* __restrict cols,
+ T* __restrict output_values) {
+ BENCHMARK_TIMER("SparseDenseMatMulCSR");
+ const int32_t num_cols = input_shape[1];
+ const auto in =
+ ConstMatrixMap<T>(input_values, input_shape[1], input_shape[0]);
+ const Eigen::Map<const SparseMatrix<T, Tidx>> weight(
+ num_rows, num_cols, nnz_shape[0], outer_index, cols, nnz_values);
+ auto result = MatrixMap<T>(output_values, num_rows, input_shape[0]);
+ result.noalias() = weight * in;
+}
+
+template <typename T, typename Tidx>
+void SparseFullyConnectedCSR(const int32_t* __restrict input_shape,
+ const T* __restrict input_values,
+ const int32_t num_rows,
+ const int32_t* __restrict nnz_shape,
+ const T* __restrict nnz_values,
+ const Tidx* __restrict outer_index,
+ const Tidx* __restrict cols,
+ const int32_t* __restrict bias_shape,
+ const T* __restrict bias_values,
+ T* __restrict output_values) {
+ BENCHMARK_TIMER("SparseFullyConnectedCSR");
+ const int32_t num_cols = input_shape[1];
+ const auto in =
+ ConstMatrixMap<T>(input_values, input_shape[1], input_shape[0]);
+ const auto bias = ConstRowVectorMap<T>(bias_values, bias_shape[0]);
+ const Eigen::Map<const SparseMatrix<T, Tidx>> weight(
+ num_rows, num_cols, nnz_shape[0], outer_index, cols, nnz_values);
+ auto result = MatrixMap<T>(output_values, num_rows, input_shape[0]);
+ result.noalias() = (weight * in).colwise() + bias;
+}
+#endif
+
+template <typename T, typename TIndex>
+void Gather(int32_t params_rank,
+ const int32_t* __restrict params_shape,
+ const T* __restrict params_values,
+ int32_t indices_rank,
+ const int32_t* __restrict indices_shape,
+ const TIndex* __restrict indices_values,
+ T* __restrict output_values) {
+ BENCHMARK_TIMER("Gather");
+ const int32_t num_indices = ShapeSize(indices_rank, indices_shape);
+ const int32_t num_params = params_shape[0];
+ const int32_t slice_size = ShapeSize(params_rank - 1, params_shape + 1);
+ for (int32_t i = 0; i < num_indices; ++i) {
+ const int32_t index = indices_values[i];
+ if (index < 0 || index >= num_params) {
+ std::fill(output_values, output_values + slice_size, 0);
+ } else {
+ std::copy(params_values + index * slice_size,
+ params_values + index * slice_size + slice_size, output_values);
+ }
+ output_values += slice_size;
+ }
+}
+
+template <typename T>
+void Im2Row(const int32_t* __restrict input_shape,
+ const T* __restrict input_values,
+ const int32_t* __restrict kernel_shape,
+ int32_t stride_y,
+ int32_t stride_x,
+ int32_t out_height,
+ int32_t out_width,
+ T* __restrict output_values) {
+ BENCHMARK_TIMER("Im2Row");
+ // Give the shape values nicer names.
+ assert(input_shape[3] == kernel_shape[2]);
+ const int32_t batch_size = input_shape[0];
+ const int32_t kernel_height = kernel_shape[0];
+ const int32_t kernel_width = kernel_shape[1];
+ const int32_t in_depth = kernel_shape[2];
+ const int32_t in_height = input_shape[1];
+ const int32_t in_width = input_shape[2];
+
+ // Compute the amount of padding needed to get the desired output size.
+ const int32_t pad_height =
+ ((out_height - 1) * stride_y + kernel_height - in_height) / 2;
+ const int32_t pad_width =
+ ((out_width - 1) * stride_x + kernel_width - in_width) / 2;
+
+ // Cache the strides for address computations.
+ const int32_t x_stride = input_shape[3];
+ const int32_t y_stride = input_shape[2] * x_stride;
+ const int32_t batch_stride = input_shape[1] * y_stride;
+
+ for (int32_t batch = 0; batch < batch_size; ++batch) {
+ for (int32_t out_y = 0; out_y < out_height; ++out_y) {
+ for (int32_t out_x = 0; out_x < out_width; ++out_x) {
+ // Compute the input read offsets.
+ const int32_t in_y_origin = (out_y * stride_y) - pad_height;
+ const int32_t in_x_origin = (out_x * stride_x) - pad_width;
+
+ // Compute the range of the kernel to be applied (we may need to clip
+ // when we'd read outside of the valid input region - for SAME).
+ const int32_t kernel_y_start =
+ std::max(static_cast<int32_t>(0), -in_y_origin);
+ const int32_t kernel_y_end =
+ std::min(kernel_height, in_height - in_y_origin);
+ const int32_t kernel_x_start =
+ std::max(static_cast<int32_t>(0), -in_x_origin);
+ const int32_t kernel_x_end =
+ std::min(kernel_width, in_width - in_x_origin);
+
+ // Padding top.
+ if (kernel_y_start != 0) {
+ const int32_t num_lines = kernel_y_start;
+ const int32_t num_coeffs = num_lines * kernel_width * in_depth;
+#if USE_TYPED_MEMSETMEMCPY
+ std::fill(output_values, output_values + num_coeffs, 0);
+#else
+ std::memset(output_values, 0, num_coeffs * sizeof(T));
+#endif
+ output_values += num_coeffs;
+ }
+ for (int32_t k_y = kernel_y_start; k_y < kernel_y_end; ++k_y) {
+ // Padding left.
+ if (kernel_x_start != 0) {
+ const int32_t num_coeffs = kernel_x_start * in_depth;
+#if USE_TYPED_MEMSETMEMCPY
+ std::fill(output_values, output_values + num_coeffs, 0);
+#else
+ std::memset(output_values, 0, num_coeffs * sizeof(T));
+#endif
+ output_values += num_coeffs;
+ }
+ // Valid values.
+ {
+ const int32_t in_y = in_y_origin + k_y;
+ const int32_t in_x = in_x_origin + kernel_x_start;
+ const int32_t num_coeffs =
+ (kernel_x_end - kernel_x_start) * in_depth;
+#if USE_TYPED_MEMSETMEMCPY
+ const int32_t offset =
+ batch * batch_stride + in_y * y_stride + in_x * x_stride;
+ std::copy(input_values + offset, input_values + offset + num_coeffs,
+ output_values);
+#else
+ std::memcpy(output_values,
+ input_values // Reusing the restricted pointer.
+ + batch * batch_stride // batch
+ + in_y * y_stride // y
+ + in_x * x_stride, // x
+ num_coeffs * sizeof(T));
+#endif
+ output_values += num_coeffs;
+ }
+ // Padding right.
+ if (kernel_x_end != kernel_width) {
+ const int32_t num_coeffs = (kernel_width - kernel_x_end) * in_depth;
+#if USE_TYPED_MEMSETMEMCPY
+ std::fill(output_values, output_values + num_coeffs, 0);
+#else
+ std::memset(output_values, 0, num_coeffs * sizeof(T));
+#endif
+ output_values += num_coeffs;
+ }
+ }
+ // Padding bottom.
+ if (kernel_y_end != kernel_height) {
+ const int32_t num_lines = kernel_height - kernel_y_end;
+ const int32_t num_coeffs = num_lines * kernel_width * in_depth;
+#if USE_TYPED_MEMSETMEMCPY
+ std::fill(output_values, output_values + num_coeffs, 0);
+#else
+ std::memset(output_values, 0, num_coeffs * sizeof(T));
+#endif
+ output_values += num_coeffs;
+ }
+ }
+ }
+ }
+}
+
+template <typename T>
+void Im2RowVALID(const int32_t* __restrict input_shape,
+ const T* __restrict input_values,
+ const int32_t* __restrict kernel_shape,
+ int32_t stride_y,
+ int32_t stride_x,
+ T* __restrict output_values) {
+ const auto out_size =
+ GetConvOutputSizeVALID(input_shape, kernel_shape, stride_y, stride_x);
+ Im2Row<T>(input_shape, input_values, kernel_shape, stride_y, stride_x,
+ std::get<0>(out_size), std::get<1>(out_size), output_values);
+}
+
+template <typename T>
+void Im2RowSAME(const int32_t* __restrict input_shape,
+ const T* __restrict input_values,
+ const int32_t* __restrict kernel_shape,
+ int32_t stride_y,
+ int32_t stride_x,
+ T* __restrict output_values) {
+ const auto out_size = GetConvOutputSizeSAME(input_shape, stride_y, stride_x);
+ Im2Row<T>(input_shape, input_values, kernel_shape, stride_y, stride_x,
+ std::get<0>(out_size), std::get<1>(out_size), output_values);
+}
+
+// We use macros instead of template functions with templated functors here
+// because it's a lot less verbose and easier for the compiler to optimize.
+#define POOL_OP(OP_NAME, DEFAULT_VALUE, UPDATE_EXPR, RESULT_EXPR) \
+ template <typename T> \
+ void OP_NAME##Pool(const int32_t* __restrict input_shape, \
+ const T* __restrict input_values, int32_t stride_y, \
+ int32_t stride_x, int32_t kernel_height, \
+ int32_t kernel_width, int32_t out_height, \
+ int32_t out_width, T* __restrict output_values) { \
+ BENCHMARK_TIMER(#OP_NAME, "Pool"); \
+ const int32_t batch_size = input_shape[0]; \
+ const int32_t in_height = input_shape[1]; \
+ const int32_t in_width = input_shape[2]; \
+ const int32_t depth = input_shape[3]; \
+ \
+ const int32_t pad_height = \
+ ((out_height - 1) * stride_y + kernel_height - in_height) / 2; \
+ const int32_t pad_width = \
+ ((out_width - 1) * stride_x + kernel_width - in_width) / 2; \
+ \
+ const int32_t in_strides[4] = { \
+ input_shape[1] * input_shape[2] * input_shape[3], \
+ input_shape[2] * input_shape[3], \
+ input_shape[3], \
+ 1, \
+ }; \
+ \
+ T* out_write_ptr = output_values; \
+ for (int32_t batch = 0; batch < batch_size; ++batch) { \
+ for (int32_t out_y = 0; out_y < out_height; ++out_y) { \
+ for (int32_t out_x = 0; out_x < out_width; ++out_x) { \
+ const int32_t in_y_origin = (out_y * stride_y) - pad_height; \
+ const int32_t in_x_origin = (out_x * stride_x) - pad_width; \
+ const int32_t kernel_y_start = \
+ std::max(static_cast<int32_t>(0), -in_y_origin); \
+ const int32_t kernel_y_end = \
+ std::min(kernel_height, in_height - in_y_origin); \
+ const int32_t kernel_x_start = \
+ std::max(static_cast<int32_t>(0), -in_x_origin); \
+ const int32_t kernel_x_end = \
+ std::min(kernel_width, in_width - in_x_origin); \
+ const int32_t count = (kernel_y_end - kernel_y_start) * \
+ (kernel_x_end - kernel_x_start); \
+ (void)sizeof(count); \
+ \
+ for (int32_t chan = 0; chan < depth; ++chan, ++out_write_ptr) { \
+ T value = DEFAULT_VALUE; \
+ for (int32_t k_y = kernel_y_start; k_y < kernel_y_end; ++k_y) { \
+ const int32_t in_y = in_y_origin + k_y; \
+ assert(in_y >= 0 && in_y < in_height); \
+ for (int32_t k_x = kernel_x_start; k_x < kernel_x_end; ++k_x) { \
+ const int32_t in_x = in_x_origin + k_x; \
+ assert(in_x >= 0 && in_x < in_width); \
+ const T next = input_values[batch * in_strides[0] + \
+ in_y * in_strides[1] + \
+ in_x * in_strides[2] + chan]; \
+ value = UPDATE_EXPR; \
+ } \
+ } \
+ *out_write_ptr = RESULT_EXPR; \
+ } \
+ } \
+ } \
+ } \
+ } \
+ \
+ template <typename T> \
+ void OP_NAME##PoolVALID(const int32_t* __restrict input_shape, \
+ const T* __restrict input_values, int32_t stride_y, \
+ int32_t stride_x, int32_t kernel_height, \
+ int32_t kernel_width, T* __restrict output_values) { \
+ const int32_t kernel_shape[4] = {kernel_height, kernel_width, 1, 1}; \
+ const auto out_size = \
+ GetConvOutputSizeVALID(input_shape, kernel_shape, stride_y, stride_x); \
+ OP_NAME##Pool<T>(input_shape, input_values, stride_y, stride_x, \
+ kernel_height, kernel_width, std::get<0>(out_size), \
+ std::get<1>(out_size), output_values); \
+ } \
+ \
+ template <typename T> \
+ void OP_NAME##PoolSAME(const int32_t* __restrict input_shape, \
+ const T* __restrict input_values, int32_t stride_y, \
+ int32_t stride_x, int32_t kernel_height, \
+ int32_t kernel_width, T* __restrict output_values) { \
+ const auto out_size = \
+ GetConvOutputSizeSAME(input_shape, stride_y, stride_x); \
+ OP_NAME##Pool<T>(input_shape, input_values, stride_y, stride_x, \
+ kernel_height, kernel_width, std::get<0>(out_size), \
+ std::get<1>(out_size), output_values); \
+ }
+
+POOL_OP(Max, std::numeric_limits<T>::lowest(), std::max(value, next), value)
+POOL_OP(Avg, 0, value + next, value / count)
+
+template <typename T>
+void Memcpy(const int32_t rank,
+ const int32_t* __restrict input_shape,
+ const T* __restrict input_values,
+ T* __restrict output_values) {
+ BENCHMARK_TIMER("Memcpy");
+ const int32_t size = ShapeSize(rank, input_shape);
+ for (int32_t i = 0; i < size; ++i) {
+ output_values[i] = input_values[i];
+ }
+}
+
+template <typename T>
+void Softmax(const int32_t rank,
+ const int32_t* __restrict input_shape,
+ const T* __restrict input_values,
+ const int32_t reduce_dim,
+ T* __restrict output_values,
+ T* __restrict scratch_values) {
+ BENCHMARK_TIMER("Softmax");
+ const int32_t size = ShapeSize(rank, input_shape);
+ if (rank == 2 && reduce_dim == 1) {
+ T logits_max = std::numeric_limits<T>::lowest();
+
+ // Max.
+ for (int32_t i = 0; i < size; ++i) {
+ logits_max = std::max(logits_max, input_values[i]);
+ }
+
+ // Pre-compute exp.
+ for (int32_t i = 0; i < size; ++i) {
+ scratch_values[i] = std::exp(input_values[i] - logits_max);
+ }
+
+ // Sum over the last dimension, then divide the exps and write out.
+ for (int32_t offset = 0; offset < size; offset += input_shape[1]) {
+ const int32_t end_offset = offset + input_shape[1];
+ T sum = 0;
+ for (int32_t i = offset; i < end_offset; ++i) {
+ sum += scratch_values[i];
+ }
+ const T rcp_denom = static_cast<T>(1) / sum;
+ for (int32_t i = 0; i < input_shape[1]; ++i) {
+ output_values[offset + i] = scratch_values[offset + i] * rcp_denom;
+ }
+ }
+ } else {
+ assert(false && "Generic Softmax not yet supported.");
+ }
+}
+
+// Returns the start position for a slice in a single dimension.
+template <typename T>
+int32_t StridedSliceBegin(int32_t range_mask,
+ const T* __restrict range_values,
+ const T* __restrict strides,
+ const int32_t* __restrict input_shape,
+ int32_t dim) {
+ const bool is_explicit = 0 == (range_mask & (1 << dim));
+ if (is_explicit) {
+ const T range_value = range_values[dim];
+ return (range_value < 0 ? range_value + input_shape[dim] : range_value);
+ } else {
+ const bool is_reverse = strides[dim] < 0;
+ return is_reverse ? input_shape[dim] - 1 : 0;
+ }
+}
+
+// Returns the end position for a slice in a single dimension.
+template <typename T>
+int32_t StridedSliceEnd(int32_t range_mask,
+ const T* __restrict range_values,
+ const T* __restrict strides,
+ const int32_t* __restrict input_shape,
+ int32_t dim) {
+ const bool is_explicit = 0 == (range_mask & (1 << dim));
+ if (is_explicit) {
+ const T range_value = range_values[dim];
+ return (range_value < 0 ? range_value + input_shape[dim] : range_value);
+ } else {
+ const bool is_reverse = strides[dim] < 0;
+ return is_reverse ? -1 : input_shape[dim];
+ }
+}
+
+template <typename T, typename TIdx>
+void StridedSlice(const int32_t input_rank,
+ const int32_t* __restrict input_shape,
+ const T* __restrict input_values,
+ const TIdx* __restrict begin,
+ const TIdx* __restrict end,
+ const TIdx* __restrict strides,
+ int32_t begin_mask,
+ int32_t end_mask,
+ T* __restrict output_values) {
+ BENCHMARK_TIMER("StridedSlice");
+ const int32_t MAX_RANK = 8;
+ assert(input_rank < MAX_RANK);
+
+ // Compute the address strides for each dimension.
+ int32_t dim_addr_strides[MAX_RANK] = {0};
+ dim_addr_strides[input_rank - 1] = 1;
+ for (int32_t dim = input_rank - 2; dim >= 0; --dim) {
+ dim_addr_strides[dim] = dim_addr_strides[dim + 1] * input_shape[dim + 1];
+ }
+
+ // Resolve the masks and get explicit ranges for each dimension.
+ int32_t dim_begin[MAX_RANK];
+ int32_t dim_end[MAX_RANK];
+ bool dim_is_full_range[MAX_RANK];
+ for (int32_t dim = 0; dim < input_rank; ++dim) {
+ const int32_t stride = strides[dim];
+ dim_begin[dim] =
+ StridedSliceBegin(begin_mask, begin, strides, input_shape, dim);
+ dim_end[dim] = StridedSliceEnd(end_mask, end, strides, input_shape, dim);
+ dim_is_full_range[dim] =
+ dim_begin[dim] == 0 && dim_end[dim] == input_shape[dim] && stride == 1;
+ // Make sure that the dim_end is always bigger than dim_begin, this
+ // simplifies the boundary checks below.
+ if (stride > 0 && dim_begin[dim] > dim_end[dim]) {
+ dim_end[dim] += input_shape[dim];
+ }
+
+ // Our termination criteria for loops is that we hit the end exactly, so
+ // we need to ensure that we don't step over the end with stride != 1.
+ const int32_t length_mod = (dim_end[dim] - dim_begin[dim]) % stride;
+ if (length_mod != 0) {
+ dim_end[dim] += stride - length_mod;
+ }
+ }
+
+ // Find out how large the blocks are that we can copy contiguously. (All
+ // dimensions on the right for which we fetch the full range)
+ int32_t last_sliced_dim = input_rank - 1;
+ int32_t block_size = 1;
+ for (int32_t dim = input_rank - 1; dim >= 0 && dim_is_full_range[dim];
+ --dim) {
+ block_size *= input_shape[dim];
+ last_sliced_dim--;
+ }
+
+ // Initialize the read pos for each dimension according to the begin offsets.
+ int32_t read_pos[MAX_RANK] = {0};
+ for (int32_t dim = 0; dim < input_rank; ++dim) {
+ read_pos[dim] = dim_begin[dim];
+ }
+
+ while (read_pos[0] != dim_end[0]) {
+ // Compute the read offset for the current position.
+ int32_t read_offset = 0;
+ for (int32_t dim = 0; dim <= last_sliced_dim; ++dim) {
+ read_offset += (read_pos[dim] % input_shape[dim]) * dim_addr_strides[dim];
+ }
+
+#if USE_TYPED_MEMSETMEMCPY
+ std::copy(input_values + read_offset,
+ input_values + read_offset + block_size, output_values);
+#else
+ std::memcpy(output_values, input_values + read_offset,
+ block_size * sizeof(T));
+#endif
+ output_values += block_size;
+
+ // Advance the read position.
+ for (int32_t dim = last_sliced_dim; dim >= 0; --dim) {
+ read_pos[dim] += strides[dim];
+ if (dim == 0 || read_pos[dim] != dim_end[dim])
+ break;
+ read_pos[dim] = dim_begin[dim];
+ }
+ }
+}
+
+template <typename T>
+void TransposeRank3(const int32_t* __restrict input_shape,
+ const T* __restrict input_values,
+ const int32_t* __restrict perm,
+ T* __restrict output_values) {
+ BENCHMARK_TIMER("TransposeRank3");
+ const int32_t in_strides[3] = {
+ input_shape[1] * input_shape[2],
+ input_shape[2],
+ 1,
+ };
+ const int32_t out_strides[3] = {in_strides[perm[0]], in_strides[perm[1]],
+ in_strides[perm[2]]};
+ const int32_t out_shape[3] = {input_shape[perm[0]], input_shape[perm[1]],
+ input_shape[perm[2]]};
+
+ int32_t write_offset = 0;
+ for (int32_t it0 = 0; it0 < out_shape[0]; ++it0) {
+ const int32_t read_offset0 = it0 * out_strides[0];
+ for (int32_t it1 = 0; it1 < out_shape[1]; ++it1) {
+ const int32_t read_offset01 = read_offset0 + it1 * out_strides[1];
+ for (int32_t it2 = 0; it2 < out_shape[2]; ++it2, ++write_offset) {
+ const int32_t read_offset = read_offset01 + it2 * out_strides[2];
+ output_values[write_offset] = input_values[read_offset];
+ }
+ }
+ }
+}
+
+template <typename T>
+void TransposeRank4(const int32_t* __restrict input_shape,
+ const T* __restrict input_values,
+ const int32_t* __restrict perm,
+ T* __restrict output_values) {
+ BENCHMARK_TIMER("TransposeRank4");
+ const int32_t in_strides[4] = {
+ input_shape[1] * input_shape[2] * input_shape[3],
+ input_shape[2] * input_shape[3],
+ input_shape[3],
+ 1,
+ };
+ const int32_t out_strides[4] = {in_strides[perm[0]], in_strides[perm[1]],
+ in_strides[perm[2]], in_strides[perm[3]]};
+ const int32_t out_shape[4] = {input_shape[perm[0]], input_shape[perm[1]],
+ input_shape[perm[2]], input_shape[perm[3]]};
+
+ int32_t write_offset = 0;
+ for (int32_t it0 = 0; it0 < out_shape[0]; ++it0) {
+ const int32_t read_offset0 = it0 * out_strides[0];
+ for (int32_t it1 = 0; it1 < out_shape[1]; ++it1) {
+ const int32_t read_offset01 = read_offset0 + it1 * out_strides[1];
+ for (int32_t it2 = 0; it2 < out_shape[2]; ++it2) {
+ const int32_t read_offset012 = read_offset01 + it2 * out_strides[2];
+ for (int32_t it3 = 0; it3 < out_shape[3]; ++it3, ++write_offset) {
+ const int32_t read_offset = read_offset012 + it3 * out_strides[3];
+ output_values[write_offset] = input_values[read_offset];
+ }
+ }
+ }
+ }
+}
+
+template <typename T, typename TIdx, typename TDepth>
+void OneHot(const int32_t input_rank,
+ const int32_t* __restrict input_shape,
+ const TIdx* __restrict input_values,
+ const TDepth* __restrict depth,
+ const T* __restrict on_value,
+ const T* __restrict off_value,
+ const int32_t axis,
+ T* __restrict output_values) {
+ BENCHMARK_TIMER("OneHot");
+ const int32_t num_elements = ShapeSize(input_rank, input_shape);
+ // We can assume axis >= 0 in this implementation.
+ const int32_t prefix_dim_size = ShapeSize(axis, input_shape);
+ const int32_t suffix_dim_size = num_elements / prefix_dim_size;
+ int32_t write_offset = 0;
+ for (int32_t i = 0; i < prefix_dim_size; ++i) {
+ const int32_t read_offset_pre = i * suffix_dim_size;
+ for (TDepth d = 0; d < *depth; ++d) {
+ for (int32_t j = 0; j < suffix_dim_size; ++j, ++write_offset) {
+ const int32_t read_offset = read_offset_pre + j;
+ output_values[write_offset] =
+ (input_values[read_offset] == d) ? *on_value : *off_value;
+ }
+ }
+ }
+}
+
+template <typename T, typename TIdx, typename TDepth>
+void OneHotLastDim(const int32_t input_rank,
+ const int32_t* __restrict input_shape,
+ const TIdx* __restrict input_values,
+ const TDepth* __restrict depth,
+ const T* __restrict on_value,
+ const T* __restrict off_value,
+ T* __restrict output_values) {
+ BENCHMARK_TIMER("OneHotLastDim");
+ const int32_t num_elements = ShapeSize(input_rank, input_shape);
+ int32_t write_offset = 0;
+ for (int32_t i = 0; i < num_elements; ++i) {
+ for (TDepth d = 0; d < *depth; ++d, ++write_offset) {
+ output_values[write_offset] =
+ (input_values[i] == d) ? *on_value : *off_value;
+ }
+ }
+}
+
+// -----------------------------------------------------------------------------
+// Simple unary ops
+// -----------------------------------------------------------------------------
+
+// We use macros instead of template functions with templated functors here
+// because it's a lot less verbose and easier for the compiler to optimize.
+
+#if USE_EIGEN
+
+#define SIMPLE_UNARY_OP(OP_NAME, _, EXPR_EIGEN) \
+ template <typename T> \
+ void OP_NAME(const int32_t rank, const int32_t* __restrict input_shape, \
+ const T* __restrict input_values, \
+ T* __restrict output_values) { \
+ BENCHMARK_TIMER(#OP_NAME); \
+ const int32_t size = ShapeSize(rank, input_shape); \
+ auto values = ConstRowVectorMap<T>(input_values, size).array(); \
+ auto output = RowVectorMap<T>(output_values, size).array(); \
+ output = EXPR_EIGEN; \
+ }
+
+#else
+
+#define SIMPLE_UNARY_OP(OP_NAME, EXPR, _) \
+ template <typename T> \
+ void OP_NAME(const int32_t rank, const int32_t* __restrict input_shape, \
+ const T* __restrict input_values, \
+ T* __restrict output_values) { \
+ BENCHMARK_TIMER(#OP_NAME); \
+ const int32_t size = ShapeSize(rank, input_shape); \
+ for (int32_t i = 0; i < size; ++i) { \
+ const T value = input_values[i]; \
+ output_values[i] = EXPR; \
+ } \
+ }
+
+#endif
+
+// Second macro param is value expression, third entry is Eigen vector
+// expression.
+SIMPLE_UNARY_OP(Abs, std::abs(value), values.abs())
+SIMPLE_UNARY_OP(Acos, std::acos(value), values.acos())
+SIMPLE_UNARY_OP(Asin, std::asin(value), values.asin())
+SIMPLE_UNARY_OP(Atan, std::atan(value), values.atan())
+SIMPLE_UNARY_OP(Cos, std::cos(value), values.cos())
+SIMPLE_UNARY_OP(Cosh, std::cosh(value), values.cosh())
+SIMPLE_UNARY_OP(Exp, std::exp(value), values.exp())
+SIMPLE_UNARY_OP(Elu,
+ value < 0 ? std::expm1(value) : value,
+ // Use branchless version of Elu: min(ReLU, e^x - 1)
+ values.max(0).min(values.exp() - 1))
+SIMPLE_UNARY_OP(HardSigmoid,
+ std::min(std::max((static_cast<T>(0.2) * value +
+ static_cast<T>(0.5)),
+ static_cast<T>(0)),
+ static_cast<T>(1)),
+ (0.2 * values + 0.5).max(0).min(1))
+SIMPLE_UNARY_OP(Log, std::log(value), values.log())
+SIMPLE_UNARY_OP(Log1p, std::log1p(value), values.log1p())
+SIMPLE_UNARY_OP(Neg, -value, -values)
+SIMPLE_UNARY_OP(Reciprocal, static_cast<T>(1) / value, values.cwiseInverse())
+SIMPLE_UNARY_OP(Relu, std::max(value, static_cast<T>(0)), values.max(0))
+SIMPLE_UNARY_OP(Relu6,
+ std::min(std::max(value, static_cast<T>(0)), static_cast<T>(6)),
+ values.max(0).min(6))
+SIMPLE_UNARY_OP(Rsqrt, static_cast<T>(1) / std::sqrt(value), values.rsqrt())
+SIMPLE_UNARY_OP(Sigmoid,
+ static_cast<T>(1) / (1 + std::exp(-value)),
+ ((-values).exp() + 1).cwiseInverse())
+SIMPLE_UNARY_OP(Sin, std::sin(value), values.sin())
+SIMPLE_UNARY_OP(Sinh, std::sinh(value), values.sinh())
+SIMPLE_UNARY_OP(Sqrt, std::sqrt(value), values.sqrt())
+SIMPLE_UNARY_OP(Square, value* value, values.square())
+SIMPLE_UNARY_OP(Tan, std::tan(value), values.tan())
+SIMPLE_UNARY_OP(Tanh, std::tanh(value), values.tanh())
+
+// -----------------------------------------------------------------------------
+// Broadcasting binary ops
+// -----------------------------------------------------------------------------
+
+template <typename T, typename OP>
+void OpNoBroadcast(const int32_t left_rank,
+ const int32_t* __restrict left_shape,
+ const T* __restrict left_values,
+ const int32_t right_rank,
+ const int32_t* __restrict right_shape,
+ const T* __restrict right_values,
+ T* __restrict output_values,
+ OP op) {
+ BENCHMARK_TIMER(op.name, "NoBroadcast");
+ const int32_t size = ShapeSize(left_rank, left_shape);
+#if USE_EIGEN
+ auto lhs = ConstRowVectorMap<T>(left_values, size).array();
+ auto rhs = ConstRowVectorMap<T>(right_values, size).array();
+ auto output = RowVectorMap<T>(output_values, size).array();
+ op.apply(lhs, rhs, output);
+#else
+ for (int32_t i = 0; i < size; ++i) {
+ output_values[i] = op(left_values[i], right_values[i]);
+ }
+#endif
+}
+
+template <typename T, typename OP>
+void OpInnerBroadcast(int32_t left_rank,
+ const int32_t* __restrict left_shape,
+ const T* __restrict left_values,
+ int32_t right_rank,
+ const int32_t* __restrict right_shape,
+ const T* __restrict right_values,
+ T* __restrict output_values,
+ OP op) {
+ BENCHMARK_TIMER(op.name, "InnerBroadcast");
+ const int32_t output_size = ShapeSize(left_rank, left_shape);
+ const int32_t inner_size = ShapeSize(right_rank, right_shape);
+ const int32_t outer_size = output_size / inner_size;
+#if USE_EIGEN
+ if (inner_size == 1) {
+ // Apply the same value to all elements.
+ auto left = ConstMatrixMap<T>(left_values, inner_size, outer_size);
+ auto output = MatrixMap<T>(output_values, inner_size, outer_size);
+ op.apply(left.array(), right_values[0], output.array());
+ } else {
+ auto left = ConstMatrixMap<T>(left_values, inner_size, outer_size);
+ auto right = ConstRowVectorMap<T>(right_values, inner_size);
+ auto output = MatrixMap<T>(output_values, inner_size, outer_size);
+ for (int32_t col = 0; col < outer_size; col++) {
+ op.apply(left.col(col).array(), right.array(), output.col(col).array());
+ }
+ }
+#else
+ for (int32_t idx_out = 0; idx_out < outer_size; ++idx_out) {
+ for (int32_t idx_in = 0; idx_in < inner_size; ++idx_in) {
+ const int32_t offset = idx_out * inner_size + idx_in;
+ output_values[offset] = op(left_values[offset], right_values[idx_in]);
+ }
+ }
+#endif
+}
+
+// Increments indices according to a shape.
+// Returns false if indices can't be incremented because they point to the last
+// element.
+//
+// E.g. if shape is (2, 3) and indices is [1, 2], indices is incremented to [2,
+// 0].
+inline bool IncrementIndices(int32_t rank,
+ const int32_t* shape,
+ int32_t* indices) {
+ int32_t i = rank - 1;
+ while (i >= 0 && indices[i] == shape[i] - 1) {
+ --i;
+ }
+ if (i < 0) {
+ return false;
+ }
+ indices[i] += 1;
+ for (++i; i < rank; ++i) {
+ indices[i] = 0;
+ }
+ return true;
+}
+
+// Returns the offset in a values array given its shape and indices.
+// E.g. if the shape is (2, 3) and indices are [1, 2] the offset is 1*3 + 2.
+inline int32_t Offset(int32_t rank,
+ const int32_t* shape,
+ const int32_t* indices) {
+ int32_t offset = 0;
+ int32_t mul = 1;
+ for (int32_t i = rank - 1; i >= 0; --i) {
+ offset += mul * indices[i];
+ mul *= shape[i];
+ }
+ return offset;
+}
+
+// Like Offset() but with broadcasting.
+// E.g. if the input_shape is (2, 1, 3) and indices are [1, 2, 2] the offset is
+// 1*1*3 + 2*0 + 2.
+// The indices_rank can be greater than the input_rank and then the first
+// indices_rank - input_rank indices are ignored.
+// E.g. if the input_shape is (4) and indices are [2, 3, 1] the offset is 1.
+inline int32_t BroadcastOffset(int32_t input_rank,
+ const int32_t* input_shape,
+ int32_t indices_rank,
+ const int32_t* indices) {
+ int32_t offset = 0;
+ int32_t mul = 1;
+ for (int32_t i = input_rank - 1; i >= 0; --i) {
+ int32_t index =
+ input_shape[i] == 1 ? 0 : indices[i + indices_rank - input_rank];
+ offset += mul * index;
+ mul *= input_shape[i];
+ }
+ return offset;
+}
+
+template <typename T, typename OP>
+void OpGenericBroadcast(int32_t left_rank,
+ const int32_t* __restrict left_shape,
+ const T* __restrict left_values,
+ int32_t right_rank,
+ const int32_t* __restrict right_shape,
+ const T* __restrict right_values,
+ T* __restrict output_values,
+ OP op) {
+ BENCHMARK_TIMER(op.name, "GenericBroadcast");
+ const int32_t output_rank = std::max(left_rank, right_rank);
+ const int32_t kMaxRank = 8;
+ assert(output_rank <= kMaxRank);
+
+ int32_t output_shape[kMaxRank];
+ for (int32_t i = 0; i < output_rank; ++i) {
+ int32_t left_i = i - output_rank + left_rank;
+ int32_t right_i = i - output_rank + right_rank;
+ output_shape[i] = std::max(left_i >= 0 ? left_shape[left_i] : 0,
+ right_i >= 0 ? right_shape[right_i] : 0);
+ }
+
+ int32_t output_indices[kMaxRank]{};
+ do {
+ output_values[Offset(output_rank, output_shape, output_indices)] =
+ op(left_values[BroadcastOffset(left_rank, left_shape, output_rank,
+ output_indices)],
+ right_values[BroadcastOffset(right_rank, right_shape, output_rank,
+ output_indices)]);
+ } while (IncrementIndices(output_rank, output_shape, output_indices));
+}
+
+#define BROADCAST_BINARY_OP(OP_NAME, EXPR, EXPR_EIGEN) \
+ template <typename T> \
+ struct Op##OP_NAME { \
+ const char* name = #OP_NAME; \
+ T operator()(const T lhs, const T rhs) { return EXPR; } \
+ template <typename X, typename Y, typename Z> \
+ void apply(const X& lhs, const Y& rhs, Z out) { \
+ out = EXPR_EIGEN; \
+ } \
+ }; \
+ template <typename T> \
+ void OP_NAME##NoBroadcast( \
+ const int32_t left_rank, const int32_t* __restrict left_shape, \
+ const T* __restrict left_values, const int32_t right_rank, \
+ const int32_t* __restrict right_shape, const T* __restrict right_values, \
+ T* __restrict output_values) { \
+ OpNoBroadcast(left_rank, left_shape, left_values, right_rank, right_shape, \
+ right_values, output_values, Op##OP_NAME<T>()); \
+ } \
+ template <typename T> \
+ void OP_NAME##InnerBroadcast( \
+ const int32_t left_rank, const int32_t* __restrict left_shape, \
+ const T* __restrict left_values, const int32_t right_rank, \
+ const int32_t* __restrict right_shape, const T* __restrict right_values, \
+ T* __restrict output_values) { \
+ OpInnerBroadcast(left_rank, left_shape, left_values, right_rank, \
+ right_shape, right_values, output_values, \
+ Op##OP_NAME<T>()); \
+ } \
+ template <typename T> \
+ void OP_NAME(const int32_t left_rank, const int32_t* __restrict left_shape, \
+ const T* __restrict left_values, const int32_t right_rank, \
+ const int32_t* __restrict right_shape, \
+ const T* __restrict right_values, \
+ T* __restrict output_values) { \
+ OpGenericBroadcast(left_rank, left_shape, left_values, right_rank, \
+ right_shape, right_values, output_values, \
+ Op##OP_NAME<T>()); \
+ }
+
+// Second macro param is value expression, third entry is Eigen vector
+// expression.
+BROADCAST_BINARY_OP(Add, lhs + rhs, lhs + rhs)
+BROADCAST_BINARY_OP(Maximum, std::max(lhs, rhs), lhs.max(rhs))
+BROADCAST_BINARY_OP(Minimum, std::min(lhs, rhs), lhs.min(rhs))
+BROADCAST_BINARY_OP(Mul, lhs* rhs, lhs* rhs)
+BROADCAST_BINARY_OP(Sub, lhs - rhs, lhs - rhs)
+BROADCAST_BINARY_OP(SquaredDifference,
+ (lhs - rhs) * (lhs - rhs),
+ (lhs - rhs).square())
+
+// -----------------------------------------------------------------------------
+// Reduce ops
+// -----------------------------------------------------------------------------
+
+// We use macros instead of template functions with templated functors here
+// because it's a lot less verbose and easier for the compiler to optimize.
+#define REDUCE_OP(OP_NAME, DEFAULT_VALUE, UPDATE_EXPR, RESULT_EXPR) \
+ template <typename T, typename Tidx> \
+ void OP_NAME##InnerReduce( \
+ int32_t input_rank, const int32_t* __restrict input_shape, \
+ const T* __restrict input_values, int32_t index_tensor_rank, \
+ const int32_t* __restrict index_shape, \
+ const Tidx* __restrict index_values, T* __restrict output_values) { \
+ BENCHMARK_TIMER(#OP_NAME, "InnerReduce"); \
+ const int32_t inner_size = \
+ GetReduceInnerSize(input_rank, input_shape, index_tensor_rank, \
+ index_shape, index_values); \
+ const int32_t input_size = ShapeSize(input_rank, input_shape); \
+ const int32_t outer_size = input_size / inner_size; \
+ for (int32_t idx_out = 0; idx_out < outer_size; ++idx_out) { \
+ T value = DEFAULT_VALUE; \
+ for (int32_t idx_in = 0; idx_in < inner_size; ++idx_in) { \
+ const T prev = value; \
+ const T next = input_values[idx_out * inner_size + idx_in]; \
+ value = UPDATE_EXPR; \
+ } \
+ const T count = inner_size; \
+ /* Used by mean reduce. */ \
+ (void)sizeof(count); \
+ output_values[idx_out] = RESULT_EXPR; \
+ } \
+ } \
+ template <typename T, typename Tidx> \
+ void OP_NAME##GenericReduceRank2( \
+ int32_t input_rank, const int32_t* __restrict input_shape, \
+ const T* __restrict input_values, int32_t index_tensor_rank, \
+ const int32_t* __restrict index_shape, \
+ const Tidx* __restrict index_values, T* __restrict output_values) { \
+ assert(input_rank == 2); \
+ assert(index_tensor_rank <= 1); \
+ BENCHMARK_TIMER(#OP_NAME, "GenericReduceRank2"); \
+ const int32_t output_size = input_shape[1]; \
+ std::fill_n(output_values, output_size, DEFAULT_VALUE); \
+ for (int32_t dim0 = 0; dim0 < input_shape[0]; ++dim0) { \
+ for (int32_t dim1 = 0; dim1 < input_shape[1]; ++dim1, ++input_values) { \
+ T* out_ptr = output_values + dim1; \
+ const T prev = *out_ptr; \
+ const T next = *input_values; \
+ *out_ptr = UPDATE_EXPR; \
+ } \
+ } \
+ const T count = input_shape[0]; \
+ /* Used by mean reduce. */ \
+ (void)sizeof(count); \
+ for (int32_t i = 0; i < output_size; ++i) { \
+ const T value = output_values[i]; \
+ output_values[i] = RESULT_EXPR; \
+ } \
+ } \
+ template <typename T, typename Tidx> \
+ void OP_NAME##GenericReduceRank3( \
+ int32_t input_rank, const int32_t* __restrict input_shape, \
+ const T* __restrict input_values, int32_t index_tensor_rank, \
+ const int32_t* __restrict index_shape, \
+ const Tidx* __restrict index_values, T* __restrict output_values) { \
+ assert(input_rank == 3); \
+ assert(index_tensor_rank <= 1); \
+ BENCHMARK_TIMER(#OP_NAME, "GenericReduceRank3"); \
+ int32_t out_shape[3] = {input_shape[0], input_shape[1], input_shape[2]}; \
+ bool reduce_mask[3] = {false, false, false}; \
+ const int32_t num_indices = index_tensor_rank > 0 ? index_shape[0] : 1; \
+ for (int32_t i = 0; i < num_indices; ++i) { \
+ reduce_mask[index_values[i]] = true; \
+ out_shape[index_values[i]] = 1; \
+ } \
+ const int32_t out_strides[3] = { \
+ reduce_mask[0] ? 0 : out_shape[1] * out_shape[2], \
+ reduce_mask[1] ? 0 : out_shape[2], \
+ reduce_mask[2] ? 0 : 1, \
+ }; \
+ const int32_t output_size = ShapeSize(input_rank, out_shape); \
+ std::fill_n(output_values, output_size, DEFAULT_VALUE); \
+ for (int32_t dim0 = 0; dim0 < input_shape[0]; ++dim0) { \
+ for (int32_t dim1 = 0; dim1 < input_shape[1]; ++dim1) { \
+ for (int32_t dim2 = 0; dim2 < input_shape[2]; \
+ ++dim2, ++input_values) { \
+ T* out_ptr = output_values + out_strides[0] * dim0 + \
+ out_strides[1] * dim1 + out_strides[2] * dim2; \
+ const T prev = *out_ptr; \
+ const T next = *input_values; \
+ *out_ptr = UPDATE_EXPR; \
+ } \
+ } \
+ } \
+ const T count = (reduce_mask[0] ? input_shape[0] : 1) * \
+ (reduce_mask[1] ? input_shape[1] : 1) * \
+ (reduce_mask[2] ? input_shape[2] : 1); \
+ /* Used by mean reduce. */ \
+ (void)sizeof(count); \
+ for (int32_t i = 0; i < output_size; ++i) { \
+ const T value = output_values[i]; \
+ output_values[i] = RESULT_EXPR; \
+ } \
+ } \
+ template <typename T, typename Tidx> \
+ void OP_NAME##GenericReduceRank4( \
+ int32_t input_rank, const int32_t* __restrict input_shape, \
+ const T* __restrict input_values, int32_t index_tensor_rank, \
+ const int32_t* __restrict index_shape, \
+ const Tidx* __restrict index_values, T* __restrict output_values) { \
+ assert(input_rank == 4); \
+ assert(index_tensor_rank <= 1); \
+ BENCHMARK_TIMER(#OP_NAME, "GenericReduceRank4"); \
+ int32_t out_shape[4] = {input_shape[0], input_shape[1], input_shape[2], \
+ input_shape[3]}; \
+ bool reduce_mask[4] = {false, false, false, false}; \
+ const int32_t num_indices = index_tensor_rank > 0 ? index_shape[0] : 1; \
+ for (int32_t i = 0; i < num_indices; ++i) { \
+ reduce_mask[index_values[i]] = true; \
+ out_shape[index_values[i]] = 1; \
+ } \
+ const int32_t out_strides[4] = { \
+ reduce_mask[0] ? 0 : out_shape[1] * out_shape[2] * out_shape[3], \
+ reduce_mask[1] ? 0 : out_shape[2] * out_shape[3], \
+ reduce_mask[2] ? 0 : out_shape[3], \
+ reduce_mask[3] ? 0 : 1, \
+ }; \
+ const int32_t output_size = ShapeSize(input_rank, out_shape); \
+ std::fill_n(output_values, output_size, DEFAULT_VALUE); \
+ for (int32_t dim0 = 0; dim0 < input_shape[0]; ++dim0) { \
+ for (int32_t dim1 = 0; dim1 < input_shape[1]; ++dim1) { \
+ for (int32_t dim2 = 0; dim2 < input_shape[2]; ++dim2) { \
+ for (int32_t dim3 = 0; dim3 < input_shape[3]; \
+ ++dim3, ++input_values) { \
+ T* out_ptr = output_values + out_strides[0] * dim0 + \
+ out_strides[1] * dim1 + out_strides[2] * dim2 + \
+ out_strides[3] * dim3; \
+ const T prev = *out_ptr; \
+ const T next = *input_values; \
+ *out_ptr = UPDATE_EXPR; \
+ } \
+ } \
+ } \
+ } \
+ const T count = (reduce_mask[0] ? input_shape[0] : 1) * \
+ (reduce_mask[1] ? input_shape[1] : 1) * \
+ (reduce_mask[2] ? input_shape[2] : 1) * \
+ (reduce_mask[3] ? input_shape[3] : 1); \
+ /* Used by mean reduce. */ \
+ (void)sizeof(count); \
+ for (int32_t i = 0; i < output_size; ++i) { \
+ const T value = output_values[i]; \
+ output_values[i] = RESULT_EXPR; \
+ } \
+ } \
+ template <typename T, typename Tidx> \
+ void OP_NAME##GenericReduceRank5( \
+ int32_t input_rank, const int32_t* __restrict input_shape, \
+ const T* __restrict input_values, int32_t index_tensor_rank, \
+ const int32_t* __restrict index_shape, \
+ const Tidx* __restrict index_values, T* __restrict output_values) { \
+ assert(input_rank == 5); \
+ assert(index_tensor_rank <= 1); \
+ BENCHMARK_TIMER(#OP_NAME, "GenericReduceRank5"); \
+ int32_t out_shape[5] = {input_shape[0], input_shape[1], input_shape[2], \
+ input_shape[3], input_shape[4]}; \
+ /* If true, reduce the input across that dimension. */ \
+ bool reduce_mask[5] = {false, false, false, false, false}; \
+ const int32_t num_indices = index_tensor_rank > 0 ? index_shape[0] : 1; \
+ for (int32_t i = 0; i < num_indices; ++i) { \
+ reduce_mask[index_values[i]] = true; \
+ out_shape[index_values[i]] = 1; \
+ } \
+ const int32_t out_strides[5] = { \
+ reduce_mask[0] \
+ ? 0 \
+ : out_shape[1] * out_shape[2] * out_shape[3] * out_shape[4], \
+ reduce_mask[1] ? 0 : out_shape[2] * out_shape[3] * out_shape[4], \
+ reduce_mask[2] ? 0 : out_shape[3] * out_shape[4], \
+ reduce_mask[3] ? 0 : out_shape[4], \
+ reduce_mask[4] ? 0 : 1, \
+ }; \
+ const int32_t output_size = ShapeSize(input_rank, out_shape); \
+ std::fill_n(output_values, output_size, DEFAULT_VALUE); \
+ for (int32_t dim0 = 0; dim0 < input_shape[0]; ++dim0) { \
+ for (int32_t dim1 = 0; dim1 < input_shape[1]; ++dim1) { \
+ for (int32_t dim2 = 0; dim2 < input_shape[2]; ++dim2) { \
+ for (int32_t dim3 = 0; dim3 < input_shape[3]; ++dim3) { \
+ for (int32_t dim4 = 0; dim4 < input_shape[4]; \
+ ++dim4, ++input_values) { \
+ T* out_ptr = output_values + out_strides[0] * dim0 + \
+ out_strides[1] * dim1 + out_strides[2] * dim2 + \
+ out_strides[3] * dim3 + out_strides[4] * dim4; \
+ const T prev = *out_ptr; \
+ const T next = *input_values; \
+ *out_ptr = UPDATE_EXPR; \
+ } \
+ } \
+ } \
+ } \
+ } \
+ const T count = (reduce_mask[0] ? input_shape[0] : 1) * \
+ (reduce_mask[1] ? input_shape[1] : 1) * \
+ (reduce_mask[2] ? input_shape[2] : 1) * \
+ (reduce_mask[3] ? input_shape[3] : 1) * \
+ (reduce_mask[4] ? input_shape[4] : 1); \
+ /* Used by mean reduce. */ \
+ (void)sizeof(count); \
+ for (int32_t i = 0; i < output_size; ++i) { \
+ const T value = output_values[i]; \
+ output_values[i] = RESULT_EXPR; \
+ } \
+ }
+
+REDUCE_OP(Max, std::numeric_limits<T>::lowest(), std::max(prev, next), value)
+REDUCE_OP(Min, std::numeric_limits<T>::infinity(), std::min(prev, next), value)
+REDUCE_OP(Sum, 0, prev + next, value)
+REDUCE_OP(Mean, 0, prev + next, value / count)
+
+// -----------------------------------------------------------------------------
+// Dequantize ops
+// -----------------------------------------------------------------------------
+
+template <typename T>
+void DequantizeMinCombined(const int32_t rank,
+ const int32_t* __restrict input_shape,
+ const T* __restrict input_values,
+ const float* __restrict min_range,
+ const float* __restrict max_range,
+ float* __restrict output_values) {
+ BENCHMARK_TIMER("DequantizeMinCombined");
+ const int32_t size = ShapeSize(rank, input_shape);
+ const float offset =
+ std::is_signed<T>::value
+ ? (static_cast<float>(std::numeric_limits<T>::max()) -
+ std::numeric_limits<T>::min() + 1) /
+ 2.0f
+ : 0.0f;
+ const float range_scale = (max_range[0] - min_range[0]) /
+ (static_cast<float>(std::numeric_limits<T>::max()) -
+ std::numeric_limits<T>::min());
+ for (int32_t i = 0; i < size; ++i) {
+ output_values[i] =
+ ((static_cast<int32_t>(input_values[i]) + offset) * range_scale) +
+ min_range[0];
+ }
+}
+
+template <typename T>
+void DequantizeMinFirst(const int32_t rank,
+ const int32_t* __restrict input_shape,
+ const T* __restrict input_values,
+ const float* __restrict min_range,
+ const float* __restrict max_range,
+ float* __restrict output_values) {
+ BENCHMARK_TIMER("DequantizeMinFirst");
+ const int32_t size = ShapeSize(rank, input_shape);
+ const float range_scale = (max_range[0] - min_range[0]) /
+ (static_cast<float>(std::numeric_limits<T>::max()) -
+ std::numeric_limits<T>::min());
+ const float range_min_rounded =
+ (max_range[0] == min_range[0]
+ ? min_range[0]
+ : std::round(min_range[0] / range_scale) * range_scale);
+ for (int32_t i = 0; i < size; ++i) {
+ output_values[i] = ((static_cast<int32_t>(input_values[i]) -
+ std::numeric_limits<T>::min()) *
+ range_scale) +
+ range_min_rounded;
+ }
+}
+
+// -----------------------------------------------------------------------------
+// AddN op
+// -----------------------------------------------------------------------------
+
+template <typename T>
+void AddN(const int32_t rank,
+ const int32_t* __restrict shape,
+ std::initializer_list<const T* __restrict> input_values,
+ T* __restrict output_values) {
+ BENCHMARK_TIMER("AddN");
+ const int32_t size = ShapeSize(rank, shape);
+#if USE_EIGEN
+ auto output = RowVectorMap<T>(output_values, size).array();
+ std::fill_n(output_values, size, 0);
+ for (const auto input_value : input_values) {
+ output += ConstRowVectorMap<T>(input_value, size).array();
+ }
+#else
+ for (int32_t i = 0; i < size; ++i) {
+ T output_value = 0;
+ for (auto input_value : input_values) {
+ output_value += input_value[i];
+ }
+ output_values[i] = output_value;
+ }
+#endif
+}
+
+// -----------------------------------------------------------------------------
+// CONSTANTS
+// Note that for now, endianness of the target machine needs to match that of
+// the one training was performed on.
+// -----------------------------------------------------------------------------
+const int32_t dnn_hiddenlayer_0_bias__0__cf__0_shape[1] = {20};
+const union {
+ uint8_t bytes[80];
+ float values[20];
+} dnn_hiddenlayer_0_bias__0__cf__0 = {{
+ 0x93, 0xa2, 0x71, 0x3e, 0x73, 0xa8, 0x38, 0xbf, 0x57, 0xda, 0x8d, 0xbf,
+ 0x99, 0x04, 0x97, 0x3f, 0xed, 0xf1, 0xef, 0xbf, 0x0f, 0x0f, 0xa0, 0xbf,
+ 0x44, 0xad, 0x97, 0x3f, 0x4f, 0x01, 0xd0, 0x3f, 0x1a, 0xab, 0x30, 0xbf,
+ 0x26, 0xec, 0x01, 0x3e, 0x2b, 0x49, 0xfb, 0xbf, 0x01, 0xc6, 0x57, 0x3e,
+ 0x84, 0xf7, 0x8d, 0x3f, 0xaf, 0x32, 0xd1, 0xbe, 0x95, 0x54, 0xc9, 0x3f,
+ 0x3c, 0x57, 0x30, 0xc0, 0x90, 0x1a, 0xc9, 0x3f, 0x38, 0x7f, 0xb7, 0x3f,
+ 0x5d, 0xf7, 0x2a, 0x3c, 0x53, 0x6b, 0x0b, 0xc0,
+}};
+const int32_t dnn_hiddenlayer_0_kernel__1__cf__1_shape[2] = {325, 20};
+const union {
+ uint8_t bytes[26000];
+ float values[6500];
+} dnn_hiddenlayer_0_kernel__1__cf__1 = {{
+ 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x8a, 0xbd, 0x70, 0x5c, 0x2d, 0xbf,
+ 0x80, 0x08, 0x50, 0x3e, 0x80, 0x08, 0x50, 0x3e, 0x80, 0x5c, 0xad, 0x3e,
+ 0x80, 0x08, 0x50, 0x3e, 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x60, 0x5c, 0xad, 0xbe, 0x00, 0x00, 0x00, 0x00,
+ 0xa0, 0xb4, 0x72, 0xbf, 0x60, 0xb0, 0x8a, 0x3f, 0x70, 0xb1, 0xa4, 0xbf,
+ 0x80, 0xb2, 0x3e, 0x3f, 0xa0, 0xb4, 0xf2, 0x3e, 0x78, 0x07, 0xb6, 0xbf,
+ 0x70, 0x5c, 0xad, 0xbf, 0x60, 0x06, 0x1c, 0xbf, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x70, 0x5c, 0x2d, 0xbf, 0x80, 0x08, 0x50, 0x3e,
+ 0x80, 0x08, 0x50, 0x3e, 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0x5c, 0xad, 0x3e,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x60, 0xb0, 0x0a, 0xbf, 0x80, 0xb0, 0x8a, 0x3d, 0x58, 0xb0, 0x8a, 0xbf,
+ 0x90, 0x5e, 0x61, 0x3f, 0x70, 0x5c, 0xad, 0xbf, 0x70, 0x06, 0x1c, 0x3f,
+ 0x80, 0x5c, 0xad, 0x3e, 0x68, 0x06, 0x9c, 0xbf, 0x78, 0x07, 0xb6, 0xbf,
+ 0x60, 0x06, 0x1c, 0xbf, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x8a, 0xbd, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0x3d, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x60, 0xb0, 0x0a, 0xbf, 0x80, 0xb0, 0x8a, 0xbd, 0x00, 0x00, 0x00, 0x00,
+ 0x60, 0xb0, 0x8a, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0x50, 0x3e,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0x50, 0x3e, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0x50, 0x3e,
+ 0x80, 0x08, 0x50, 0xbf, 0x58, 0x05, 0x82, 0xbf, 0x70, 0xb1, 0xa4, 0x3f,
+ 0xa0, 0xb4, 0xf2, 0xbf, 0x70, 0x5c, 0xad, 0xbf, 0x60, 0xb0, 0x8a, 0x3f,
+ 0x90, 0xb3, 0xd8, 0x3f, 0x60, 0x06, 0x1c, 0xbf, 0x80, 0xb0, 0x8a, 0x3d,
+ 0xa0, 0xb4, 0xf2, 0xbf, 0x60, 0xb0, 0x8a, 0x3e, 0x58, 0x05, 0x82, 0x3f,
+ 0x60, 0x5c, 0xad, 0xbe, 0x90, 0xb3, 0xd8, 0x3f, 0x72, 0x5c, 0x2d, 0xc0,
+ 0x80, 0xb2, 0xbe, 0x3f, 0x88, 0x5d, 0xc7, 0x3f, 0x00, 0x00, 0x00, 0x00,
+ 0xe0, 0x05, 0x0f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x60, 0xb0, 0x8a, 0xbe,
+ 0x60, 0x5c, 0xad, 0xbe, 0x60, 0xb0, 0x8a, 0xbe, 0x60, 0xb0, 0x8a, 0x3e,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0x3d, 0x00, 0x00, 0x00, 0x00,
+ 0x70, 0x5c, 0x2d, 0xbf, 0x80, 0x08, 0x50, 0xbe, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0x5c, 0xad, 0x3e, 0x58, 0xb0, 0x8a, 0xbf, 0x70, 0x06, 0x1c, 0x3f,
+ 0x80, 0xb2, 0xbe, 0xbf, 0x80, 0x08, 0xd0, 0x3e, 0x60, 0xb0, 0x8a, 0x3e,
+ 0xa0, 0xb4, 0xf2, 0xbe, 0x68, 0x06, 0x9c, 0xbf, 0x60, 0xb0, 0x8a, 0xbe,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x60, 0x5c, 0xad, 0xbe, 0x60, 0xb0, 0x8a, 0xbe,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x60, 0xb0, 0x8a, 0x3e, 0x60, 0xb0, 0x8a, 0x3e,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb2, 0x3e, 0xbf,
+ 0x60, 0x5c, 0xad, 0xbe, 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0x08, 0x50, 0x3e,
+ 0x58, 0x05, 0x82, 0xbf, 0x90, 0x08, 0x50, 0x3f, 0x80, 0xb2, 0xbe, 0xbf,
+ 0xa0, 0xb4, 0xf2, 0x3e, 0x60, 0xb0, 0x8a, 0x3e, 0x60, 0xb0, 0x8a, 0xbe,
+ 0x68, 0x06, 0x9c, 0xbf, 0x60, 0xb0, 0x8a, 0xbe, 0x60, 0xb0, 0x8a, 0xbe,
+ 0x80, 0x5d, 0xc7, 0xbf, 0xa0, 0xb4, 0xf2, 0xbf, 0x60, 0xb0, 0x8a, 0xbe,
+ 0x60, 0xb0, 0x8a, 0x3f, 0x84, 0x5d, 0xc7, 0x40, 0x18, 0xb4, 0x65, 0xc0,
+ 0x80, 0x08, 0xd0, 0x3e, 0xa0, 0xb4, 0xf2, 0x3e, 0x68, 0x06, 0x1c, 0xc0,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x70, 0x5c, 0x2d, 0x3f, 0x80, 0xb0, 0x8a, 0x3d,
+ 0xe0, 0x05, 0x0f, 0x40, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0x5c, 0xad, 0x3e,
+ 0x80, 0xb0, 0x8a, 0x3d, 0xa8, 0x5f, 0xfb, 0x3f, 0xe0, 0x05, 0x0f, 0x40,
+ 0x80, 0xb2, 0x3e, 0x3f, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x60, 0xb0, 0x8a, 0x3e, 0x60, 0xb0, 0x0a, 0xbf, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0xbd, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0xbd, 0x00, 0x00, 0x00, 0x00,
+ 0x60, 0xb0, 0x8a, 0x3e, 0x70, 0x5c, 0x2d, 0xbf, 0x60, 0x5b, 0x93, 0xbf,
+ 0x70, 0xb1, 0xa4, 0x3f, 0x98, 0x09, 0xea, 0xbf, 0x68, 0x06, 0x9c, 0xbf,
+ 0x60, 0x5b, 0x93, 0x3f, 0x80, 0xb2, 0xbe, 0x3f, 0x80, 0xb2, 0x3e, 0xbf,
+ 0x80, 0xb0, 0x8a, 0x3d, 0xa8, 0x5f, 0xfb, 0xbf, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x68, 0x06, 0x9c, 0x3f, 0x60, 0x5c, 0xad, 0xbe, 0x88, 0x08, 0xd0, 0x3f,
+ 0xf0, 0x06, 0x29, 0xc0, 0x88, 0x5d, 0xc7, 0x3f, 0x70, 0xb1, 0xa4, 0x3f,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x5c, 0xb0, 0x0a, 0xc0, 0x80, 0x08, 0x50, 0xbe,
+ 0x80, 0x08, 0x50, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0x50, 0x3e,
+ 0x80, 0x08, 0x50, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x60, 0x06, 0x1c, 0xbf, 0xa0, 0xb4, 0xf2, 0xbe, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0x3d, 0x58, 0xb0, 0x8a, 0xbf,
+ 0x80, 0x08, 0x50, 0x3e, 0x80, 0x5d, 0xc7, 0xbf, 0x80, 0x08, 0xd0, 0x3e,
+ 0x00, 0x00, 0x00, 0x00, 0xa0, 0xb4, 0xf2, 0xbe, 0x78, 0x07, 0xb6, 0xbf,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x60, 0xb0, 0x8a, 0xbe, 0x80, 0x08, 0x50, 0xbe,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0x08, 0x50, 0x3e, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x0a, 0x3e, 0xa0, 0xb4, 0xf2, 0xbe,
+ 0x60, 0xb0, 0x0a, 0xbf, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0x08, 0x50, 0x3e,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x58, 0xb0, 0x8a, 0xbf, 0x60, 0xb0, 0x8a, 0x3e,
+ 0x90, 0xb3, 0xd8, 0xbf, 0x60, 0xb0, 0x8a, 0x3e, 0x00, 0x00, 0x00, 0x00,
+ 0x60, 0x5c, 0xad, 0xbe, 0x68, 0x06, 0x9c, 0xbf, 0x00, 0x00, 0x00, 0x00,
+ 0x68, 0x06, 0x9c, 0xbf, 0xa0, 0xb4, 0xf2, 0x3e, 0x90, 0x08, 0x50, 0x3f,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x5c, 0xb0, 0x0a, 0x40, 0x70, 0x5c, 0xad, 0x3f,
+ 0x54, 0x05, 0x02, 0xc0, 0x58, 0x05, 0x82, 0x3f, 0x80, 0xb2, 0x3e, 0x3f,
+ 0x90, 0x5e, 0x61, 0xbf, 0x60, 0xb0, 0x8a, 0x3f, 0x70, 0x5c, 0x2d, 0xbf,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb2, 0x3e, 0xbf, 0xa0, 0xb4, 0xf2, 0x3e,
+ 0x60, 0x5c, 0xad, 0xbe, 0x70, 0x5c, 0xad, 0x3f, 0x5c, 0xb0, 0x0a, 0x40,
+ 0xa0, 0xb4, 0xf2, 0x3e, 0x58, 0x05, 0x82, 0x3f, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0x08, 0x50, 0xbe,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x40, 0xb0, 0x0a, 0xbe, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0x50, 0xbe,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x60, 0x5c, 0xad, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x60, 0xb0, 0x8a, 0xbe, 0x80, 0xb0, 0x8a, 0x3d, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x60, 0xb0, 0x8a, 0x3e, 0x60, 0x06, 0x1c, 0xbf,
+ 0x58, 0xb0, 0x8a, 0xbf, 0x68, 0x06, 0x9c, 0x3f, 0x98, 0x5e, 0xe1, 0xbf,
+ 0x68, 0x06, 0x9c, 0xbf, 0x68, 0x06, 0x9c, 0x3f, 0x90, 0xb3, 0xd8, 0x3f,
+ 0x80, 0xb2, 0x3e, 0xbf, 0x80, 0x08, 0x50, 0x3e, 0xd8, 0x5a, 0x06, 0xc0,
+ 0x80, 0x5c, 0xad, 0x3e, 0x60, 0xb0, 0x8a, 0x3f, 0x80, 0x08, 0xd0, 0xbe,
+ 0x80, 0xb2, 0xbe, 0x3f, 0xf6, 0xb1, 0x31, 0xc0, 0x88, 0x08, 0xd0, 0x3f,
+ 0x78, 0x07, 0xb6, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x05, 0x0f, 0xc0,
+ 0xa0, 0xb4, 0xf2, 0xbe, 0x80, 0x08, 0x50, 0xbe, 0x60, 0xb0, 0x0a, 0x3f,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0x50, 0x3e, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0x50, 0xbf,
+ 0x60, 0xb0, 0x8a, 0x3e, 0x70, 0x06, 0x1c, 0x3f, 0x40, 0xb0, 0x0a, 0xbe,
+ 0xa0, 0xb4, 0x72, 0xbf, 0x80, 0xb0, 0x8a, 0x3d, 0x98, 0x5e, 0xe1, 0xbf,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x60, 0xb0, 0x8a, 0xbe, 0x80, 0x08, 0x50, 0xbe,
+ 0xa0, 0xb4, 0xf2, 0xbe, 0x60, 0xb0, 0x0a, 0x3f, 0xa0, 0xb4, 0xf2, 0xbe,
+ 0x60, 0xb0, 0x8a, 0xbe, 0x60, 0xb0, 0x0a, 0x3f, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0x5c, 0xad, 0x3e, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x90, 0x5e, 0x61, 0xbf, 0x80, 0x08, 0x50, 0x3e,
+ 0x70, 0x5c, 0x2d, 0x3f, 0x80, 0xb0, 0x8a, 0xbd, 0x90, 0x5e, 0x61, 0xbf,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x90, 0xb3, 0xd8, 0xbf, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x60, 0xb0, 0x8a, 0xbe, 0x80, 0x08, 0x50, 0xbe, 0x60, 0xb0, 0x0a, 0xbf,
+ 0x80, 0x08, 0xd0, 0x3e, 0x60, 0x06, 0x1c, 0xbf, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x68, 0x06, 0x9c, 0x3f, 0x68, 0x06, 0x9c, 0x3f, 0xa0, 0x09, 0xea, 0x3f,
+ 0x24, 0x0a, 0x77, 0xc0, 0x40, 0xb0, 0x0a, 0xbe, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xb2, 0x3e, 0x3f, 0x60, 0x5b, 0x93, 0xbf, 0x80, 0xb0, 0x8a, 0x3d,
+ 0xa0, 0xb4, 0x72, 0x3f, 0x80, 0xb0, 0x8a, 0x3d, 0xa0, 0xb4, 0xf2, 0x3e,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x70, 0x5c, 0x2d, 0xbf, 0x90, 0x5e, 0x61, 0x3f,
+ 0x60, 0xb0, 0x0a, 0xbf, 0x80, 0x08, 0x50, 0xbe, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x00, 0x00, 0x00, 0x00, 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0x08, 0x50, 0xbe,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x60, 0xb0, 0x0a, 0xbf, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x60, 0x06, 0x1c, 0xbf, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x00, 0x00, 0x00, 0x00, 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0x5c, 0xad, 0x3e,
+ 0x80, 0xb2, 0x3e, 0xbf, 0x58, 0xb0, 0x8a, 0xbf, 0x60, 0xb0, 0x8a, 0x3f,
+ 0xa8, 0x5f, 0xfb, 0xbf, 0x60, 0x5b, 0x93, 0xbf, 0x60, 0x5b, 0x93, 0x3f,
+ 0x88, 0x5d, 0xc7, 0x3f, 0x80, 0x08, 0x50, 0xbf, 0x80, 0x08, 0x50, 0x3e,
+ 0xa0, 0xb4, 0xf2, 0xbf, 0x80, 0x5c, 0xad, 0x3e, 0x60, 0x5b, 0x93, 0x3f,
+ 0xa0, 0xb4, 0xf2, 0xbe, 0x80, 0xb2, 0xbe, 0x3f, 0xf6, 0xb1, 0x31, 0xc0,
+ 0x80, 0xb2, 0xbe, 0x3f, 0x78, 0x07, 0xb6, 0x3f, 0x80, 0xb0, 0x8a, 0xbd,
+ 0xe0, 0x05, 0x0f, 0xc0, 0x80, 0x08, 0xd0, 0xbe, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x60, 0xb0, 0x8a, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x40, 0xb0, 0x0a, 0xbe, 0x70, 0x06, 0x1c, 0x3f,
+ 0x80, 0x08, 0x50, 0x3e, 0x80, 0xb0, 0x8a, 0x3d, 0x70, 0xb1, 0xa4, 0x3f,
+ 0x70, 0x5c, 0x2d, 0xbf, 0x60, 0x5b, 0x93, 0xbf, 0x80, 0x08, 0x50, 0xbe,
+ 0xe4, 0xb0, 0x17, 0xc0, 0x60, 0x5c, 0xad, 0xbe, 0x60, 0x5c, 0xad, 0xbe,
+ 0x80, 0x5c, 0xad, 0x3e, 0x80, 0x08, 0x50, 0xbf, 0x80, 0xb2, 0xbe, 0x3f,
+ 0x80, 0x08, 0xd0, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x60, 0xb0, 0x8a, 0x3f,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0xb0, 0x8a, 0xbe,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x60, 0xb0, 0x0a, 0x3f, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x00, 0x00, 0x00, 0x00, 0x68, 0x06, 0x9c, 0x3f, 0x70, 0x5c, 0x2d, 0xbf,
+ 0x60, 0x5b, 0x93, 0xbf, 0x60, 0xb0, 0x8a, 0xbe, 0x60, 0x5b, 0x13, 0xc0,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x60, 0xb0, 0x0a, 0xbf, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x90, 0x5e, 0x61, 0xbf, 0x80, 0xb2, 0xbe, 0x3f, 0x70, 0xb1, 0xa4, 0xbf,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x60, 0x06, 0x1c, 0xbf, 0x70, 0x5c, 0x2d, 0xbf,
+ 0x58, 0x05, 0x82, 0x3f, 0xa6, 0xdb, 0x99, 0xc0, 0x80, 0xb2, 0xbe, 0xbf,
+ 0x98, 0x5e, 0xe1, 0x3f, 0x80, 0xb2, 0x3e, 0x3f, 0x90, 0x5e, 0x61, 0x3f,
+ 0xf0, 0x06, 0x29, 0x40, 0x78, 0x07, 0xb6, 0xbf, 0x00, 0x00, 0x00, 0x00,
+ 0xe0, 0x05, 0x0f, 0x40, 0x80, 0xb2, 0x3e, 0xbf, 0x70, 0x5c, 0xad, 0x3f,
+ 0x60, 0x5c, 0xad, 0xbe, 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x88, 0x5d, 0xc7, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0x08, 0xd0, 0x3e, 0x80, 0x08, 0x50, 0xbe,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0x08, 0x50, 0x3e, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x60, 0x5c, 0xad, 0xbe, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0x08, 0x50, 0x3e, 0x80, 0xb2, 0x3e, 0xbf,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x40, 0xb0, 0x0a, 0xbe, 0x58, 0x05, 0x82, 0xbf,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0x08, 0x50, 0x3e, 0x80, 0xb2, 0x3e, 0xbf, 0x60, 0x5b, 0x93, 0xbf,
+ 0x60, 0xb0, 0x8a, 0x3f, 0x98, 0x5e, 0xe1, 0xbf, 0x60, 0x5b, 0x93, 0xbf,
+ 0x68, 0x06, 0x9c, 0x3f, 0x88, 0x08, 0xd0, 0x3f, 0x80, 0x08, 0x50, 0xbf,
+ 0x80, 0x08, 0x50, 0x3e, 0x98, 0x09, 0xea, 0xbf, 0x80, 0x08, 0x50, 0x3e,
+ 0x58, 0x05, 0x82, 0x3f, 0x60, 0x5c, 0xad, 0xbe, 0x88, 0x08, 0xd0, 0x3f,
+ 0x72, 0x5c, 0x2d, 0xc0, 0x88, 0x5d, 0xc7, 0x3f, 0x78, 0x07, 0xb6, 0x3f,
+ 0x00, 0x00, 0x00, 0x00, 0x54, 0x05, 0x02, 0xc0, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x00, 0x00, 0x00, 0x00, 0x60, 0xb0, 0x8a, 0x3e, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0xb0, 0x8a, 0xbd, 0xa0, 0xb4, 0xf2, 0xbe, 0x60, 0xb0, 0x8a, 0x3e,
+ 0x80, 0x08, 0x50, 0x3e, 0x80, 0xb0, 0x8a, 0x3d, 0x60, 0x06, 0x1c, 0xbf,
+ 0x60, 0x5c, 0xad, 0xbe, 0x80, 0x08, 0x50, 0xbf, 0x60, 0xb0, 0x8a, 0xbe,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb2, 0x3e, 0x3f, 0x80, 0x5c, 0xad, 0x3e,
+ 0xa0, 0xb4, 0xf2, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x60, 0xb0, 0x8a, 0xbe,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x8a, 0xbd, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x60, 0xb0, 0x8a, 0xbe, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0x08, 0xd0, 0xbe, 0x80, 0x08, 0x50, 0x3e, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x00, 0x00, 0x00, 0x00, 0x60, 0xb0, 0x0a, 0xbf, 0x80, 0x08, 0x50, 0xbe,
+ 0x80, 0xb2, 0x3e, 0xbf, 0x60, 0xb0, 0x8a, 0xbe, 0x00, 0x00, 0x00, 0x00,
+ 0x90, 0x08, 0x50, 0x3f, 0x60, 0xb0, 0x8a, 0x3e, 0x70, 0x06, 0x1c, 0x3f,
+ 0x70, 0x5c, 0x2d, 0xbf, 0x5c, 0xb0, 0x0a, 0x40, 0x80, 0xb0, 0x8a, 0xbd,
+ 0xa0, 0xb4, 0xf2, 0x3e, 0x80, 0xb2, 0x3e, 0x3f, 0x51, 0xde, 0xda, 0xc0,
+ 0x80, 0xb2, 0xbe, 0xbf, 0xa0, 0xb4, 0xf2, 0x3f, 0x78, 0x07, 0xb6, 0x3f,
+ 0xf0, 0x06, 0x29, 0x40, 0x60, 0x5b, 0x93, 0x3f, 0x70, 0x5c, 0x2d, 0xbf,
+ 0x80, 0x08, 0xd0, 0xbe, 0x80, 0x5c, 0xad, 0x3e, 0x70, 0x5c, 0x2d, 0xbf,
+ 0x70, 0x5c, 0x2d, 0x3f, 0x70, 0x5c, 0x2d, 0xbf, 0xa8, 0x5f, 0xfb, 0xbf,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb0, 0x0a, 0x3e, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0xbd, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0x3d, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0xb4, 0xf2, 0xbe,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0x3d, 0x00, 0x00, 0x00, 0x00,
+ 0xa0, 0xb4, 0xf2, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0x50, 0x3e, 0x60, 0x5b, 0x93, 0xbf,
+ 0xa0, 0xb4, 0xf2, 0xbf, 0x70, 0x5c, 0xad, 0x3f, 0x58, 0xb0, 0x8a, 0xbf,
+ 0x58, 0x05, 0x82, 0xbf, 0x70, 0xb1, 0xa4, 0x3f, 0x70, 0x5c, 0x2d, 0x3f,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0x5c, 0xad, 0x3e, 0x5c, 0xb0, 0x0a, 0xc0,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x60, 0xb0, 0x0a, 0x3f, 0x80, 0x08, 0xd0, 0xbe,
+ 0x74, 0x5c, 0x2d, 0x40, 0x60, 0x5b, 0x13, 0xc0, 0x60, 0xb0, 0x8a, 0x3f,
+ 0x80, 0x5c, 0xad, 0x3e, 0xa0, 0xb4, 0xf2, 0x3e, 0x7e, 0xb2, 0x3e, 0xc0,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0x50, 0x3e,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0x50, 0x3e, 0x60, 0xb0, 0x8a, 0x3e,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x0a, 0x3e, 0x60, 0xb0, 0x8a, 0xbe,
+ 0x80, 0x08, 0x50, 0x3e, 0x60, 0xb0, 0x8a, 0x3e, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x80, 0x08, 0x50, 0xbf, 0x80, 0xb0, 0x8a, 0xbd, 0x60, 0x06, 0x1c, 0xbf,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0x08, 0x50, 0x3e, 0x80, 0xb0, 0x8a, 0xbd, 0x60, 0xb0, 0x8a, 0xbe,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0x08, 0x50, 0x3e, 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x60, 0x5c, 0xad, 0xbe, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0x08, 0x50, 0x3e, 0xa0, 0xb4, 0x72, 0xbf,
+ 0x80, 0x08, 0x50, 0xbe, 0x70, 0x5c, 0x2d, 0xbf, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x60, 0xb0, 0x8a, 0x3e, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x60, 0xb0, 0x0a, 0xbf, 0x80, 0x5c, 0xad, 0x3e,
+ 0x80, 0x08, 0x50, 0x3e, 0x60, 0x06, 0x1c, 0xbf, 0x90, 0x5e, 0x61, 0xbf,
+ 0x07, 0xb3, 0xcb, 0xc0, 0xa0, 0xb4, 0x72, 0xbf, 0x60, 0x06, 0x1c, 0xbf,
+ 0x68, 0x06, 0x9c, 0x3f, 0xa0, 0xb4, 0xf2, 0x3e, 0x14, 0x09, 0x5d, 0x40,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x88, 0x08, 0xd0, 0xbf,
+ 0xa8, 0x5f, 0xfb, 0xbf, 0xa8, 0x5f, 0xfb, 0x3f, 0x60, 0xb0, 0x0a, 0xbf,
+ 0x54, 0x05, 0x02, 0xc0, 0x98, 0x5e, 0xe1, 0x3f, 0x80, 0xb2, 0x3e, 0x3f,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x00, 0x00, 0x00, 0x00, 0x40, 0xb0, 0x0a, 0xbe, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0xbd, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0x08, 0x50, 0xbe, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0x50, 0xbe, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0x5d, 0xc7, 0xbf, 0x68, 0x06, 0x9c, 0xbf, 0x80, 0x08, 0xd0, 0x3e,
+ 0x90, 0x5e, 0x61, 0xbf, 0x60, 0xb0, 0x8a, 0xbe, 0x60, 0xb0, 0x8a, 0x3f,
+ 0x90, 0x08, 0x50, 0x3f, 0x60, 0x06, 0x1c, 0xbf, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x80, 0xb2, 0xbe, 0xbf, 0x80, 0x08, 0xd0, 0xbe, 0x60, 0xb0, 0x8a, 0x3e,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x78, 0x07, 0x36, 0x40, 0x88, 0x08, 0xd0, 0xbf,
+ 0x58, 0x05, 0x82, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xa0, 0xb4, 0xf2, 0x3e,
+ 0x84, 0x5d, 0x47, 0xc0, 0x80, 0x08, 0xd0, 0xbe, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x60, 0xb0, 0x8a, 0xbe, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0x50, 0xbe, 0x00, 0x00, 0x00, 0x00,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb0, 0x0a, 0x3e, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x70, 0x5c, 0x2d, 0xbf, 0x60, 0xb0, 0x8a, 0xbe,
+ 0x60, 0x5c, 0xad, 0xbe, 0x80, 0xb0, 0x8a, 0xbd, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x60, 0xb0, 0x8a, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb0, 0x8a, 0x3d, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0x08, 0x50, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x70, 0x5c, 0x2d, 0xbf, 0x60, 0xb0, 0x8a, 0xbe, 0x60, 0x5c, 0xad, 0xbe,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0x50, 0x3e, 0x70, 0x5c, 0xad, 0xbf,
+ 0x60, 0xb0, 0x8a, 0xbe, 0x60, 0xb0, 0x8a, 0xbe, 0x58, 0x05, 0x82, 0x3f,
+ 0x40, 0xb0, 0x0a, 0xbe, 0xce, 0x88, 0xd6, 0xc0, 0x80, 0x08, 0xd0, 0x3e,
+ 0x70, 0x5c, 0x2d, 0x3f, 0x60, 0xb0, 0x0a, 0x3f, 0x60, 0x5c, 0xad, 0xbe,
+ 0x64, 0x5b, 0x13, 0x40, 0x60, 0xb0, 0x8a, 0xbe, 0x00, 0x00, 0x00, 0x00,
+ 0x58, 0x05, 0x82, 0xbf, 0x60, 0x5c, 0xad, 0xbe, 0x90, 0x5e, 0x61, 0xbf,
+ 0x90, 0xb3, 0xd8, 0xbf, 0x60, 0xb0, 0x8a, 0x3e, 0x18, 0x30, 0x84, 0x40,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0x3d, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0xbd, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0xbd, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x60, 0xb0, 0x8a, 0xbe, 0x98, 0x09, 0xea, 0xbf, 0x70, 0xb1, 0xa4, 0xbf,
+ 0x80, 0x08, 0xd0, 0x3e, 0x60, 0x5c, 0xad, 0xbe, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0xb2, 0x3e, 0x3f, 0x60, 0xb0, 0x8a, 0x3e, 0x60, 0x06, 0x1c, 0xbf,
+ 0x00, 0x00, 0x00, 0x00, 0x70, 0x5c, 0xad, 0xbf, 0x70, 0x5c, 0x2d, 0xbf,
+ 0x80, 0x08, 0x50, 0x3e, 0x80, 0x5c, 0xad, 0x3e, 0x74, 0x5c, 0x2d, 0x40,
+ 0x80, 0x08, 0x50, 0xbf, 0xa0, 0xb4, 0x72, 0x3f, 0xa0, 0xb4, 0xf2, 0xbe,
+ 0x70, 0x5c, 0x2d, 0x3f, 0x00, 0x08, 0x43, 0xc0, 0x60, 0x5c, 0xad, 0xbe,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0x08, 0x50, 0xbe, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0xbd, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0x08, 0x50, 0xbe, 0x60, 0x5c, 0xad, 0xbe,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x60, 0x5c, 0xad, 0xbe, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x40, 0xb0, 0x0a, 0xbe, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x0a, 0x3e, 0x00, 0x00, 0x00, 0x00,
+ 0x60, 0xb0, 0x8a, 0xbe, 0x80, 0x08, 0x50, 0xbe, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x60, 0x5c, 0xad, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0x08, 0x50, 0x3e, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x60, 0x06, 0x1c, 0xbf, 0x60, 0xb0, 0x0a, 0xbf, 0x80, 0x08, 0xd0, 0x3e,
+ 0x40, 0xb0, 0x0a, 0xbe, 0xe0, 0x05, 0x0f, 0xc0, 0x01, 0x08, 0xc3, 0xc0,
+ 0x70, 0x5c, 0x2d, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x68, 0x06, 0x9c, 0x3f,
+ 0x80, 0xb0, 0x8a, 0xbd, 0xa0, 0xb4, 0x72, 0x3f, 0x60, 0x06, 0x1c, 0xbf,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0x08, 0xd0, 0xbe, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x70, 0x06, 0x1c, 0x3f, 0x60, 0xb0, 0x0a, 0xbf, 0x80, 0xb2, 0x3e, 0x3f,
+ 0xf8, 0xb1, 0x31, 0x40, 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0x3d, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0x50, 0x3e,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb2, 0x3e, 0xbf, 0x98, 0x09, 0xea, 0xbf,
+ 0x70, 0x5c, 0x2d, 0xbf, 0x80, 0x08, 0x50, 0x3e, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x00, 0x00, 0x00, 0x00, 0x60, 0xb0, 0x0a, 0x3f, 0xa0, 0xb4, 0xf2, 0x3e,
+ 0x60, 0x5b, 0x93, 0xbf, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0x08, 0x50, 0xbf,
+ 0x80, 0xb2, 0x3e, 0xbf, 0xa0, 0xb4, 0xf2, 0x3e, 0x80, 0xb2, 0x3e, 0x3f,
+ 0x74, 0x5c, 0x2d, 0x40, 0x80, 0xb2, 0x3e, 0xbf, 0x70, 0xb1, 0xa4, 0x3f,
+ 0x90, 0x5e, 0x61, 0xbf, 0x80, 0xb2, 0x3e, 0x3f, 0xf6, 0xb1, 0x31, 0xc0,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb0, 0x8a, 0x3d, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x60, 0x5c, 0xad, 0xbe, 0x80, 0xb0, 0x0a, 0x3e, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0x08, 0x50, 0xbe,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0x08, 0x50, 0xbe,
+ 0xa0, 0xb4, 0xf2, 0xbe, 0x80, 0x08, 0x50, 0x3e, 0x80, 0x08, 0xd0, 0xbe,
+ 0x80, 0x08, 0x50, 0xbe, 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0x08, 0x50, 0x3e, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0x08, 0x50, 0xbe, 0x60, 0x5c, 0xad, 0xbe,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0xbd, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x60, 0xb0, 0x8a, 0xbe, 0x60, 0x06, 0x1c, 0xbf,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x60, 0xb0, 0x0a, 0xbf, 0x80, 0x08, 0x50, 0xbe,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0x08, 0x50, 0x3e, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0x5c, 0xad, 0x3e, 0x80, 0xb2, 0x3e, 0x3f, 0x70, 0x5c, 0x2d, 0x3f,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0xd0, 0xbe, 0x9a, 0x09, 0x6a, 0xc0,
+ 0x80, 0x08, 0x50, 0xbf, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0x08, 0x50, 0xbe,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x60, 0x5c, 0xad, 0xbe, 0xa8, 0x5f, 0xfb, 0x3f,
+ 0x80, 0xb2, 0xbe, 0xbf, 0x80, 0xb0, 0x8a, 0xbd, 0x70, 0x5c, 0x2d, 0x3f,
+ 0xa0, 0xb4, 0xf2, 0x3e, 0x90, 0x5e, 0x61, 0x3f, 0xa0, 0xb4, 0xf2, 0x3e,
+ 0x80, 0xb2, 0x3e, 0xbf, 0x90, 0xb3, 0xd8, 0xbf, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0x08, 0x50, 0xbe, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0xd0, 0xbe, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xa0, 0xb4, 0xf2, 0xbe,
+ 0x58, 0xb0, 0x8a, 0xbf, 0x60, 0xb0, 0x8a, 0xbe, 0x80, 0x5c, 0xad, 0x3e,
+ 0x80, 0x08, 0x50, 0x3e, 0x60, 0xb0, 0x8a, 0xbe, 0x60, 0xb0, 0x0a, 0x3f,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x58, 0x05, 0x82, 0xbf, 0x80, 0xb2, 0x3e, 0xbf,
+ 0x60, 0x06, 0x1c, 0xbf, 0xa0, 0xb4, 0x72, 0xbf, 0x80, 0x08, 0x50, 0x3e,
+ 0x60, 0xb0, 0x0a, 0x3f, 0xe0, 0x05, 0x0f, 0x40, 0x58, 0x05, 0x82, 0xbf,
+ 0x90, 0xb3, 0xd8, 0x3f, 0x58, 0xb0, 0x8a, 0xbf, 0xa0, 0xb4, 0x72, 0x3f,
+ 0x7e, 0xb2, 0x3e, 0xc0, 0x60, 0xb0, 0x8a, 0xbe, 0x00, 0x00, 0x00, 0x00,
+ 0x60, 0xb0, 0x8a, 0xbe, 0x40, 0xb0, 0x0a, 0xbe, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x00, 0x00, 0x00, 0x00, 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x60, 0xb0, 0x8a, 0xbe, 0x80, 0x08, 0x50, 0x3e,
+ 0xa0, 0xb4, 0xf2, 0xbe, 0x80, 0xb0, 0x8a, 0x3d, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0x08, 0x50, 0xbe, 0x60, 0xb0, 0x8a, 0x3e,
+ 0x60, 0x5c, 0xad, 0xbe, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0x08, 0x50, 0xbe,
+ 0x60, 0xb0, 0x8a, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x60, 0x5c, 0xad, 0xbe, 0x80, 0xb0, 0x0a, 0x3e, 0x60, 0xb0, 0x8a, 0xbe,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x0a, 0x3e, 0x70, 0x06, 0x1c, 0x3f,
+ 0x80, 0x08, 0x50, 0xbf, 0x80, 0xb0, 0x8a, 0xbd, 0x58, 0x05, 0x82, 0xbf,
+ 0xa0, 0xb4, 0x72, 0xc0, 0x20, 0x5f, 0x6e, 0x40, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x60, 0xb0, 0x8a, 0xbe, 0x60, 0xb0, 0x8a, 0x3e, 0x00, 0x00, 0x00, 0x00,
+ 0x70, 0x5c, 0xad, 0x3f, 0xe4, 0xb0, 0x17, 0xc0, 0x80, 0x08, 0x50, 0x3e,
+ 0x58, 0x05, 0x82, 0x3f, 0x90, 0x08, 0x50, 0x3f, 0x80, 0x08, 0xd0, 0x3e,
+ 0x80, 0x08, 0xd0, 0xbe, 0x60, 0xb0, 0x8a, 0xbe, 0xac, 0x86, 0xa2, 0xc0,
+ 0x70, 0x5c, 0xad, 0x3f, 0x60, 0xb0, 0x8a, 0x3e, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0x08, 0x50, 0xbe,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0xd0, 0xbe,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x60, 0xb0, 0x0a, 0xbf, 0x60, 0x06, 0x1c, 0xbf, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0x5c, 0xad, 0x3e, 0x80, 0x5c, 0xad, 0x3e, 0x80, 0xb2, 0x3e, 0xbf,
+ 0xa0, 0xb4, 0xf2, 0x3e, 0x80, 0xb0, 0x8a, 0x3d, 0xa0, 0xb4, 0x72, 0xbf,
+ 0x80, 0x08, 0xd0, 0xbe, 0x60, 0xb0, 0x0a, 0xbf, 0x80, 0xb2, 0x3e, 0xbf,
+ 0x80, 0x08, 0x50, 0x3e, 0x60, 0xb0, 0x0a, 0x3f, 0xa8, 0x5f, 0xfb, 0x3f,
+ 0x60, 0xb0, 0x0a, 0xbf, 0x80, 0xb2, 0xbe, 0x3f, 0x68, 0x06, 0x9c, 0xbf,
+ 0xa0, 0xb4, 0x72, 0x3f, 0xf6, 0xb1, 0x31, 0xc0, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x60, 0xb0, 0x8a, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x60, 0xb0, 0x8a, 0xbe,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x60, 0xb0, 0x8a, 0xbe, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0x3d, 0x60, 0xb0, 0x8a, 0xbe,
+ 0x70, 0x5c, 0x2d, 0xbf, 0x80, 0x08, 0xd0, 0xbe, 0x60, 0x5c, 0xad, 0xbe,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x40, 0xb0, 0x0a, 0xbe, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0x08, 0x50, 0xbe, 0x80, 0x5c, 0xad, 0x3e,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x60, 0xb0, 0x8a, 0xbe, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x60, 0xb0, 0x8a, 0xbe, 0x80, 0x08, 0x50, 0xbe, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x60, 0xb0, 0x8a, 0xbe, 0x60, 0xb0, 0x0a, 0xbf,
+ 0x60, 0x5c, 0xad, 0xbe, 0x80, 0x08, 0x50, 0xbe, 0x60, 0xb0, 0x8a, 0x3e,
+ 0x80, 0x08, 0x50, 0xbe, 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x00, 0x00, 0x00, 0x00, 0x60, 0xb0, 0x8a, 0xbe, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x78, 0x07, 0xb6, 0x3f, 0x80, 0x08, 0xd0, 0xbe, 0x58, 0xb0, 0x8a, 0xbf,
+ 0x80, 0x08, 0x50, 0xbe, 0x90, 0x5e, 0x61, 0xbf, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x60, 0xb0, 0x8a, 0xbe, 0x80, 0xb0, 0x8a, 0x3d, 0x90, 0x5e, 0x61, 0x3f,
+ 0x58, 0x05, 0x82, 0xbf, 0x60, 0xb0, 0x8a, 0x3e, 0x90, 0x5e, 0x61, 0x3f,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x90, 0x5e, 0x61, 0x3f, 0x60, 0xb0, 0x8a, 0x3e,
+ 0x60, 0xb0, 0x8a, 0x3e, 0xa0, 0xb4, 0xf2, 0xbe, 0x80, 0xb0, 0x8a, 0x3d,
+ 0xa0, 0xb4, 0xf2, 0xbe, 0xa0, 0xb4, 0x72, 0x3f, 0x80, 0x08, 0x50, 0x3e,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0x08, 0x50, 0x3e, 0x80, 0xb0, 0x8a, 0x3d, 0x00, 0x00, 0x00, 0x00,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb0, 0x8a, 0xbd, 0x60, 0xb0, 0x8a, 0xbe,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0x08, 0xd0, 0xbe, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0x08, 0x50, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0xd0, 0xbe, 0x60, 0x5c, 0xad, 0xbe,
+ 0x80, 0x08, 0x50, 0x3e, 0x80, 0x08, 0x50, 0x3e, 0xa0, 0xb4, 0xf2, 0x3e,
+ 0x60, 0x06, 0x1c, 0xbf, 0x80, 0x08, 0x50, 0x3e, 0x80, 0x08, 0xd0, 0xbe,
+ 0x80, 0x08, 0xd0, 0xbe, 0x80, 0x08, 0xd0, 0xbe, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x90, 0x5e, 0x61, 0xbf, 0x80, 0x08, 0x50, 0x3e, 0x80, 0xb2, 0x3e, 0x3f,
+ 0x70, 0xb1, 0xa4, 0x3f, 0x80, 0x08, 0x50, 0x3e, 0x70, 0xb1, 0xa4, 0x3f,
+ 0x80, 0xb2, 0xbe, 0xbf, 0x80, 0xb2, 0x3e, 0x3f, 0xe4, 0xb0, 0x17, 0xc0,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x58, 0xb0, 0x8a, 0xbf, 0x60, 0x5b, 0x93, 0xbf,
+ 0xa0, 0xb4, 0x72, 0x3f, 0x70, 0x5c, 0xad, 0xbf, 0x58, 0x05, 0x82, 0xbf,
+ 0x58, 0x05, 0x82, 0x3f, 0x68, 0x06, 0x9c, 0x3f, 0x80, 0x08, 0x50, 0xbf,
+ 0x80, 0xb0, 0x8a, 0x3d, 0xa0, 0xb4, 0xf2, 0xbf, 0x00, 0x00, 0x00, 0x00,
+ 0xa0, 0xb4, 0x72, 0x3f, 0x80, 0x08, 0x50, 0xbe, 0x5c, 0xb0, 0x0a, 0x40,
+ 0xf0, 0x06, 0x29, 0xc0, 0x78, 0x07, 0xb6, 0x3f, 0x60, 0xb0, 0x0a, 0x3f,
+ 0x80, 0x5c, 0xad, 0x3e, 0x6c, 0xb1, 0x24, 0xc0, 0x40, 0xb0, 0x0a, 0xbe,
+ 0xa0, 0xb4, 0xf2, 0xbe, 0x80, 0xb0, 0x8a, 0xbd, 0x68, 0x06, 0x9c, 0x3f,
+ 0x80, 0x08, 0x50, 0xbf, 0xf0, 0x06, 0xa9, 0xc0, 0xa0, 0xb4, 0xf2, 0x3e,
+ 0xa0, 0xb4, 0xf2, 0xbe, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0x08, 0x50, 0xbe,
+ 0x90, 0x08, 0x50, 0x3f, 0x60, 0xb0, 0x0a, 0x3f, 0x80, 0x08, 0x50, 0x3e,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0x08, 0x50, 0xbe, 0x80, 0x08, 0x50, 0x3e,
+ 0xa0, 0xb4, 0x72, 0xbf, 0x80, 0x08, 0x50, 0xbf, 0x80, 0x5c, 0xad, 0x3e,
+ 0x60, 0x06, 0x1c, 0xbf, 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0x3d, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0xbd, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0x3d, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xb2, 0x3e, 0x3f, 0x98, 0x09, 0xea, 0xbf, 0x00, 0x00, 0x00, 0x00,
+ 0x70, 0xb1, 0xa4, 0xbf, 0x68, 0x06, 0x9c, 0xbf, 0x80, 0x5c, 0xad, 0x3e,
+ 0x80, 0xb2, 0x3e, 0x3f, 0x98, 0x5e, 0x61, 0x40, 0x70, 0x5c, 0x2d, 0xbf,
+ 0x60, 0xb0, 0x0a, 0xbf, 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0x08, 0x50, 0x3e,
+ 0x80, 0x08, 0x50, 0x3e, 0x60, 0x5c, 0xad, 0xbe, 0x60, 0xb0, 0x8a, 0x3f,
+ 0xa0, 0xb4, 0xf2, 0xbe, 0x58, 0x05, 0x82, 0x3f, 0xfc, 0x5c, 0x3a, 0x40,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x70, 0x5c, 0x2d, 0x3f, 0x70, 0x5c, 0x2d, 0x3f,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x60, 0xb0, 0x8a, 0xbe, 0x80, 0x08, 0x50, 0xbe,
+ 0x80, 0x08, 0x50, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x60, 0xb0, 0x8a, 0xbe, 0x70, 0x5c, 0x2d, 0xbf,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x40, 0xb0, 0x0a, 0xbe, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0x08, 0x50, 0xbe, 0x80, 0xb0, 0x8a, 0xbd, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x60, 0x5c, 0xad, 0xbe, 0x80, 0x5c, 0xad, 0x3e, 0x60, 0xb0, 0x8a, 0xbe,
+ 0x60, 0xb0, 0x8a, 0xbe, 0x80, 0xb0, 0x8a, 0x3d, 0x70, 0x06, 0x1c, 0x3f,
+ 0x80, 0x08, 0xd0, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x60, 0xb0, 0x8a, 0xbe,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0x08, 0xd0, 0x3e, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0x08, 0xd0, 0x3e, 0x80, 0x08, 0x50, 0x3e, 0x60, 0xb0, 0x8a, 0x3e,
+ 0x70, 0x06, 0x1c, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0x08, 0xd0, 0x3e, 0x80, 0xb2, 0x3e, 0x3f, 0x60, 0x06, 0x1c, 0xbf,
+ 0x80, 0x08, 0xd0, 0x3e, 0x60, 0x5c, 0xad, 0xbe, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb2, 0x3e, 0x3f, 0xa0, 0xb4, 0xf2, 0xbe,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x60, 0xb0, 0x8a, 0x3e, 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0x08, 0xd0, 0x3e,
+ 0x80, 0x08, 0x50, 0x3e, 0x60, 0xb0, 0x8a, 0x3e, 0x70, 0x06, 0x1c, 0x3f,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0x5c, 0xad, 0x3e,
+ 0x80, 0xb2, 0x3e, 0x3f, 0x80, 0xb2, 0x3e, 0xbf, 0xe8, 0x5b, 0x20, 0xc0,
+ 0x60, 0xb0, 0x0a, 0x3f, 0x84, 0x5d, 0x47, 0xc0, 0x70, 0x5c, 0x2d, 0xbf,
+ 0x60, 0x5b, 0x93, 0xbf, 0x88, 0x5d, 0xc7, 0x3f, 0x90, 0x5e, 0x61, 0x3f,
+ 0x70, 0x06, 0x1c, 0x3f, 0x68, 0x06, 0x9c, 0x3f, 0x80, 0xb2, 0x3e, 0x40,
+ 0x98, 0x5e, 0x61, 0x40, 0x80, 0xb2, 0x3e, 0x3f, 0x80, 0x08, 0x50, 0xbe,
+ 0x90, 0xb3, 0xd8, 0xbf, 0x80, 0xb2, 0xbe, 0x3f, 0xe8, 0x5b, 0x20, 0xc0,
+ 0xa0, 0xb4, 0x72, 0xbf, 0x80, 0x08, 0x50, 0xbf, 0x80, 0x08, 0xd0, 0xbe,
+ 0x60, 0xb0, 0x0a, 0x3f, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0xb0, 0x8a, 0xbd, 0xa0, 0xb4, 0xf2, 0xbe, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x60, 0xb0, 0x8a, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x70, 0x5c, 0x2d, 0xbf, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x70, 0x5c, 0x2d, 0x3f, 0xa8, 0x5f, 0xfb, 0xbf, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x68, 0x06, 0x9c, 0xbf, 0x70, 0x5c, 0xad, 0xbf, 0x80, 0x08, 0x50, 0x3e,
+ 0x90, 0x5e, 0x61, 0x3f, 0x9c, 0x09, 0x6a, 0x40, 0x80, 0x08, 0x50, 0xbf,
+ 0xa0, 0xb4, 0xf2, 0xbe, 0x80, 0xb0, 0x8a, 0xbd, 0x60, 0xb0, 0x8a, 0x3e,
+ 0x80, 0xb0, 0x0a, 0x3e, 0xa0, 0xb4, 0xf2, 0xbe, 0x60, 0xb0, 0x8a, 0x3f,
+ 0x60, 0xb0, 0x0a, 0xbf, 0x90, 0x5e, 0x61, 0x3f, 0xf8, 0xb1, 0x31, 0x40,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb2, 0x3e, 0x3f, 0x80, 0x08, 0xd0, 0x3e,
+ 0x60, 0xb0, 0x8a, 0xbe, 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb2, 0x3e, 0xbf,
+ 0x60, 0xb0, 0x0a, 0x3f, 0x80, 0x08, 0xd0, 0xbe, 0x80, 0x08, 0x50, 0x3e,
+ 0xa0, 0xb4, 0xf2, 0xbe, 0x60, 0xb0, 0x0a, 0xbf, 0x60, 0xb0, 0x8a, 0x3e,
+ 0x80, 0x08, 0x50, 0x3e, 0xa0, 0xb4, 0xf2, 0x3e, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x60, 0xb0, 0x8a, 0x3e, 0x60, 0xb0, 0x0a, 0x3f, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x60, 0xb0, 0x8a, 0xbe, 0x80, 0x08, 0xd0, 0x3e, 0x90, 0x5e, 0x61, 0x3f,
+ 0xa0, 0xb4, 0xf2, 0xbe, 0xa0, 0xb4, 0xf2, 0x3e, 0x60, 0xb0, 0x8a, 0xbe,
+ 0x00, 0x00, 0x00, 0x00, 0x70, 0x5c, 0x2d, 0xbf, 0x60, 0xb0, 0x0a, 0x3f,
+ 0xa0, 0xb4, 0xf2, 0xbe, 0x80, 0xb0, 0x0a, 0x3e, 0x60, 0xb0, 0x0a, 0xbf,
+ 0x60, 0x06, 0x1c, 0xbf, 0x80, 0x5c, 0xad, 0x3e, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x70, 0x06, 0x1c, 0x3f, 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0x08, 0x50, 0x3e,
+ 0x70, 0x06, 0x1c, 0x3f, 0x80, 0xb0, 0x8a, 0x3d, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0x5c, 0xad, 0x3e, 0xa0, 0xb4, 0x72, 0x3f, 0x80, 0x08, 0xd0, 0xbe,
+ 0x80, 0xb2, 0xbe, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0xd0, 0xbe,
+ 0xe4, 0xb0, 0x17, 0x40, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0x08, 0x50, 0x3e,
+ 0x98, 0x5e, 0xe1, 0xbf, 0x80, 0x5d, 0xc7, 0xbf, 0x60, 0xb0, 0x8a, 0x3e,
+ 0x90, 0x08, 0x50, 0x3f, 0x60, 0xb0, 0x8a, 0x3f, 0x90, 0x5e, 0x61, 0x3f,
+ 0x80, 0x08, 0x50, 0xbe, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x84, 0x5d, 0x47, 0x40, 0x40, 0xb0, 0x0a, 0xbe, 0x0c, 0x5e, 0x54, 0x40,
+ 0x74, 0x5c, 0x2d, 0x40, 0x60, 0x06, 0x1c, 0xbf, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x40, 0xb0, 0x0a, 0xbe, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0xbd, 0x60, 0x5c, 0xad, 0xbe,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x60, 0xb0, 0x0a, 0xbf, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x70, 0x5c, 0x2d, 0x3f, 0xa8, 0x5f, 0xfb, 0xbf,
+ 0x00, 0x00, 0x00, 0x00, 0x60, 0x5b, 0x93, 0xbf, 0x68, 0x06, 0x9c, 0xbf,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x70, 0x5c, 0x2d, 0x3f, 0x9c, 0x09, 0x6a, 0x40,
+ 0x70, 0x5c, 0x2d, 0xbf, 0x60, 0x5c, 0xad, 0xbe, 0x80, 0x08, 0x50, 0xbe,
+ 0x80, 0x5c, 0xad, 0x3e, 0x80, 0x08, 0x50, 0x3e, 0xa0, 0xb4, 0xf2, 0xbe,
+ 0x68, 0x06, 0x9c, 0x3f, 0x60, 0xb0, 0x0a, 0xbf, 0x60, 0xb0, 0x8a, 0x3f,
+ 0xf8, 0xb1, 0x31, 0x40, 0x40, 0xb0, 0x0a, 0xbe, 0x90, 0x08, 0x50, 0x3f,
+ 0x60, 0xb0, 0x8a, 0x3e, 0x40, 0xb0, 0x0a, 0xbe, 0x60, 0xb0, 0x8a, 0x3e,
+ 0x80, 0x08, 0x50, 0xbf, 0xa0, 0xb4, 0xf2, 0x3e, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x40, 0xb0, 0x0a, 0xbe, 0xa0, 0xb4, 0xf2, 0xbe, 0xa0, 0xb4, 0xf2, 0xbe,
+ 0x80, 0x5c, 0xad, 0x3e, 0x80, 0x08, 0xd0, 0x3e, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0x08, 0xd0, 0x3e, 0x90, 0x08, 0x50, 0x3f,
+ 0x80, 0x5c, 0xad, 0x3e, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0x08, 0x50, 0x3e,
+ 0x90, 0x5e, 0x61, 0x3f, 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0x5c, 0xad, 0x3e, 0x90, 0x5e, 0x61, 0xbf,
+ 0xa0, 0xb4, 0xf2, 0x3e, 0x80, 0x08, 0x50, 0xbe, 0x00, 0x00, 0x00, 0x00,
+ 0x60, 0x06, 0x1c, 0xbf, 0x60, 0x06, 0x1c, 0xbf, 0x80, 0x08, 0xd0, 0x3e,
+ 0x80, 0x08, 0xd0, 0x3e, 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0x5c, 0xad, 0x3e, 0x80, 0xb2, 0x3e, 0x3f, 0x80, 0x5c, 0xad, 0x3e,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0x50, 0x3e, 0x60, 0xb0, 0x8a, 0x3f,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x60, 0x5b, 0x93, 0xbf, 0x60, 0x5b, 0x93, 0x3f,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x70, 0x5c, 0x2d, 0x3f, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x60, 0xb0, 0x0a, 0x3f, 0xe8, 0x5b, 0x20, 0xc0, 0xa0, 0xb4, 0xf2, 0xbf,
+ 0x00, 0x00, 0x00, 0x00, 0xa0, 0xb4, 0x72, 0x3f, 0x64, 0x5b, 0x13, 0x40,
+ 0x60, 0x06, 0x1c, 0xbf, 0x60, 0xb0, 0x8a, 0xbe, 0xa0, 0xb4, 0xf2, 0x3e,
+ 0x90, 0x5e, 0x61, 0xbf, 0xa0, 0xb4, 0xf2, 0x3e, 0x70, 0x06, 0x1c, 0x3f,
+ 0x80, 0xb2, 0xbe, 0x3f, 0x80, 0xb2, 0xbe, 0x3f, 0x60, 0x5b, 0x93, 0x3f,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x60, 0xb0, 0x8a, 0xbe, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0xbd, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0x08, 0x50, 0xbe,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0x3d, 0xa0, 0xb4, 0xf2, 0xbe,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x0a, 0x3e, 0x70, 0x06, 0x1c, 0x3f,
+ 0xa8, 0x5f, 0xfb, 0xbf, 0x80, 0xb0, 0x0a, 0x3e, 0x60, 0x5b, 0x93, 0xbf,
+ 0x70, 0xb1, 0xa4, 0xbf, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb2, 0x3e, 0x3f,
+ 0x98, 0x5e, 0x61, 0x40, 0x80, 0xb2, 0x3e, 0xbf, 0x80, 0x08, 0xd0, 0xbe,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0x08, 0xd0, 0x3e, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x60, 0xb0, 0x0a, 0xbf, 0x68, 0x06, 0x9c, 0x3f, 0x60, 0xb0, 0x0a, 0xbf,
+ 0x90, 0x08, 0x50, 0x3f, 0xfc, 0x5c, 0x3a, 0x40, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0xb2, 0x3e, 0x3f, 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0x5c, 0xad, 0x3e, 0xa0, 0xb4, 0xf2, 0xbe, 0x60, 0xb0, 0x8a, 0x3e,
+ 0xa0, 0xb4, 0xf2, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x70, 0x5c, 0x2d, 0xbf,
+ 0x80, 0xb2, 0x3e, 0xbf, 0x60, 0xb0, 0x8a, 0x3e, 0x80, 0x08, 0x50, 0x3e,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0xb2, 0x3e, 0x3f, 0x80, 0x08, 0x50, 0x3e, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x90, 0x08, 0x50, 0x3f, 0x70, 0x5c, 0x2d, 0xbf,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0x08, 0x50, 0xbe, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x80, 0x08, 0xd0, 0xbe, 0x80, 0x08, 0xd0, 0x3e, 0x80, 0x5c, 0xad, 0x3e,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x60, 0xb0, 0x0a, 0xbf, 0x90, 0x5e, 0x61, 0xbf,
+ 0x60, 0xb0, 0x8a, 0x3e, 0x80, 0x08, 0x50, 0x3e, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0x3d, 0x70, 0x5c, 0x2d, 0x3f,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x80, 0xb2, 0x3e, 0x3f, 0x60, 0xb0, 0x0a, 0xbf, 0x80, 0x08, 0x50, 0x3e,
+ 0x80, 0x08, 0x50, 0xbe, 0x60, 0xb0, 0x8a, 0x3e, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x90, 0xb3, 0xd8, 0x3f, 0x68, 0x06, 0x9c, 0x3f, 0x58, 0xb0, 0x8a, 0xbf,
+ 0x62, 0x5b, 0x93, 0xc0, 0x60, 0x5c, 0xad, 0xbe, 0x70, 0x5c, 0xad, 0x3f,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0xbd, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x70, 0xb1, 0xa4, 0x3f, 0x60, 0x5c, 0xad, 0xbe, 0x29, 0x31, 0x9e, 0xc0,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x60, 0x5b, 0x13, 0xc0, 0x90, 0x08, 0x50, 0x3f,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0x08, 0x50, 0xbe,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0xbd, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0x3d, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0x08, 0x50, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0x50, 0x3e,
+ 0x80, 0x08, 0xd0, 0xbe, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x70, 0x5c, 0x2d, 0x3f, 0xa8, 0x5f, 0xfb, 0xbf, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x68, 0x06, 0x9c, 0xbf, 0x68, 0x06, 0x9c, 0xbf, 0x80, 0x08, 0x50, 0x3e,
+ 0x90, 0x5e, 0x61, 0x3f, 0x98, 0x5e, 0x61, 0x40, 0x80, 0x08, 0x50, 0xbf,
+ 0x60, 0xb0, 0x0a, 0xbf, 0x60, 0xb0, 0x8a, 0xbe, 0x80, 0x08, 0x50, 0x3e,
+ 0x80, 0xb0, 0x0a, 0x3e, 0xa0, 0xb4, 0xf2, 0xbe, 0x60, 0x5b, 0x93, 0x3f,
+ 0x80, 0x08, 0xd0, 0xbe, 0xa0, 0xb4, 0x72, 0x3f, 0xfc, 0x5c, 0x3a, 0x40,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x90, 0x08, 0x50, 0x3f, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x80, 0x08, 0xd0, 0xbe, 0x60, 0xb0, 0x0a, 0x3f, 0x90, 0x5e, 0x61, 0xbf,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0x08, 0xd0, 0x3e, 0x80, 0xb0, 0x8a, 0x3d,
+ 0xa0, 0xb4, 0x72, 0xbf, 0x80, 0xb2, 0x3e, 0xbf, 0x80, 0x08, 0x50, 0x3e,
+ 0xa0, 0xb4, 0xf2, 0x3e, 0xa0, 0xb4, 0xf2, 0xbe, 0x00, 0x00, 0x00, 0x00,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb2, 0x3e, 0x3f, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0x08, 0x50, 0xbe, 0x60, 0xb0, 0x8a, 0x3e, 0x80, 0xb2, 0x3e, 0x3f,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0x08, 0xd0, 0xbe,
+ 0x80, 0x08, 0xd0, 0x3e, 0x90, 0x5e, 0x61, 0xbf, 0x80, 0x08, 0x50, 0x3e,
+ 0xa0, 0xb4, 0xf2, 0x3e, 0x00, 0x00, 0x00, 0x00, 0xa0, 0xb4, 0x72, 0xbf,
+ 0x70, 0x5c, 0x2d, 0xbf, 0x80, 0x5c, 0xad, 0x3e, 0x60, 0xb0, 0x8a, 0x3e,
+ 0xa0, 0xb4, 0xf2, 0xbe, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x70, 0x5c, 0x2d, 0x3f, 0x80, 0x08, 0x50, 0xbe, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0x5c, 0xad, 0x3e, 0x80, 0xb2, 0x3e, 0x3f, 0x80, 0x08, 0x50, 0xbe,
+ 0x58, 0xb0, 0x8a, 0xbf, 0xa0, 0xb4, 0x72, 0xbf, 0x60, 0xb0, 0x8a, 0xbe,
+ 0xa0, 0xb4, 0xf2, 0xbe, 0x74, 0x5c, 0x2d, 0x40, 0x90, 0xb3, 0xd8, 0x3f,
+ 0x60, 0x5b, 0x13, 0xc0, 0x6c, 0xb1, 0x24, 0xc0, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x00, 0x00, 0x00, 0x00, 0x88, 0x5d, 0xc7, 0x3f, 0x58, 0xb0, 0x8a, 0xbf,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x98, 0x5e, 0xe1, 0x3f, 0x80, 0xb0, 0x8a, 0x3d,
+ 0xdf, 0x05, 0x0f, 0xc1, 0x60, 0xb0, 0x8a, 0x3e, 0xa6, 0x5f, 0x7b, 0xc0,
+ 0x90, 0x08, 0x50, 0x3f, 0x90, 0xb3, 0xd8, 0x3f, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0x08, 0x50, 0xbe, 0x80, 0xb0, 0x8a, 0xbd, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0x08, 0x50, 0x3e,
+ 0x00, 0x00, 0x00, 0x00, 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x60, 0xb0, 0x8a, 0xbe, 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0x08, 0x50, 0x3e, 0xa0, 0xb4, 0xf2, 0xbe, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x70, 0x5c, 0x2d, 0x3f, 0xa8, 0x5f, 0xfb, 0xbf,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x70, 0xb1, 0xa4, 0xbf, 0x70, 0x5c, 0xad, 0xbf,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x90, 0x5e, 0x61, 0x3f, 0x98, 0x5e, 0x61, 0x40,
+ 0x90, 0x5e, 0x61, 0xbf, 0xa0, 0xb4, 0xf2, 0xbe, 0x60, 0xb0, 0x8a, 0xbe,
+ 0x60, 0xb0, 0x8a, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0xd0, 0xbe,
+ 0x70, 0xb1, 0xa4, 0x3f, 0x80, 0x08, 0xd0, 0xbe, 0x58, 0x05, 0x82, 0x3f,
+ 0x74, 0x5c, 0x2d, 0x40, 0x40, 0xb0, 0x0a, 0xbe, 0x90, 0x5e, 0x61, 0x3f,
+ 0x00, 0x00, 0x00, 0x00, 0x60, 0xb0, 0x8a, 0x3e, 0x80, 0x5c, 0xad, 0x3e,
+ 0x80, 0xb2, 0xbe, 0xbf, 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0x5c, 0xad, 0x3e,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x90, 0x5e, 0x61, 0xbf, 0x80, 0xb2, 0x3e, 0xbf,
+ 0x60, 0xb0, 0x8a, 0x3e, 0x60, 0x5c, 0xad, 0xbe, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0x08, 0x50, 0xbf, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0x08, 0x50, 0xbe,
+ 0x80, 0xb0, 0x8a, 0xbd, 0xa0, 0xb4, 0x72, 0x3f, 0x80, 0x08, 0x50, 0x3e,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x0a, 0x3e, 0x70, 0xb1, 0xa4, 0xbf,
+ 0x80, 0xb0, 0x8a, 0x3d, 0xa0, 0xb4, 0xf2, 0x3e, 0x80, 0x08, 0x50, 0xbe,
+ 0x80, 0xb2, 0x3e, 0xbf, 0x70, 0x5c, 0x2d, 0xbf, 0x80, 0x08, 0xd0, 0x3e,
+ 0x60, 0xb0, 0x8a, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x60, 0x06, 0x1c, 0xbf, 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0x08, 0x50, 0xbe,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x90, 0x08, 0x50, 0x3f, 0x80, 0xb0, 0x0a, 0x3e, 0xa0, 0xb4, 0x72, 0x3f,
+ 0x80, 0x08, 0xd0, 0xbe, 0xec, 0x5b, 0x20, 0x40, 0x80, 0xb2, 0x3e, 0xbf,
+ 0x58, 0x05, 0x02, 0x40, 0x60, 0x06, 0x1c, 0xbf, 0xa0, 0xb4, 0xf2, 0x3e,
+ 0x00, 0x00, 0x00, 0x00, 0x5c, 0xb0, 0x0a, 0x40, 0xa0, 0xb4, 0xf2, 0x3f,
+ 0x70, 0x5c, 0x2d, 0xbf, 0x40, 0xb0, 0x0a, 0xbe, 0x74, 0x5c, 0x2d, 0x40,
+ 0x80, 0xb2, 0xbe, 0xbf, 0x40, 0xdd, 0xc0, 0xc0, 0x80, 0x08, 0x50, 0x3e,
+ 0xfc, 0x5c, 0x3a, 0xc0, 0x80, 0xb0, 0x8a, 0xbd, 0x60, 0xb0, 0x0a, 0x3f,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x40, 0xb0, 0x0a, 0xbe, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0x5c, 0xad, 0x3e,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0x08, 0x50, 0x3e,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0x50, 0x3e, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0x3d, 0x60, 0xb0, 0x0a, 0xbf,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x5c, 0x2d, 0x3f,
+ 0x90, 0xb3, 0xd8, 0xbf, 0x80, 0x08, 0x50, 0x3e, 0x70, 0x5c, 0xad, 0xbf,
+ 0x60, 0x5b, 0x93, 0xbf, 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb2, 0x3e, 0x3f,
+ 0x84, 0x5d, 0x47, 0x40, 0x80, 0x5c, 0xad, 0x3e, 0x60, 0xb0, 0x0a, 0xbf,
+ 0x80, 0x08, 0x50, 0xbe, 0x80, 0xb0, 0x0a, 0x3e, 0x60, 0xb0, 0x8a, 0x3e,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x60, 0x5b, 0x93, 0x3f, 0x70, 0x5c, 0x2d, 0xbf,
+ 0x68, 0x06, 0x9c, 0x3f, 0xe4, 0xb0, 0x17, 0x40, 0x80, 0x08, 0x50, 0x3e,
+ 0x60, 0xb0, 0x0a, 0x3f, 0x80, 0x08, 0x50, 0xbe, 0x80, 0x08, 0x50, 0xbe,
+ 0x00, 0x00, 0x00, 0x00, 0x58, 0x05, 0x82, 0xbf, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x60, 0xb0, 0x8a, 0xbe, 0x40, 0xb0, 0x0a, 0xbe, 0xa0, 0xb4, 0x72, 0xbf,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0x5c, 0xad, 0x3e, 0x80, 0xb0, 0x8a, 0xbd, 0x60, 0x06, 0x1c, 0xbf,
+ 0x80, 0x08, 0x50, 0xbe, 0x80, 0x08, 0x50, 0x3e, 0x80, 0x08, 0x50, 0x3e,
+ 0x80, 0x08, 0x50, 0xbe, 0x80, 0x08, 0xd0, 0x3e, 0x90, 0x5e, 0x61, 0x3f,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x60, 0xb0, 0x8a, 0xbe, 0x40, 0xb0, 0x0a, 0xbe,
+ 0xa0, 0xb4, 0x72, 0xbf, 0x80, 0xb0, 0x0a, 0x3e, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0x08, 0x50, 0xbe, 0xa0, 0xb4, 0x72, 0xbf, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0x08, 0x50, 0x3e, 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0x5c, 0xad, 0x3e,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x60, 0xb0, 0x0a, 0xbf, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0x08, 0xd0, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0x50, 0xbe,
+ 0x80, 0x5c, 0xad, 0x3e, 0xa0, 0xb4, 0x72, 0x3f, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x80, 0x08, 0x50, 0xbe, 0x70, 0x5c, 0xad, 0x3f, 0xd8, 0x5a, 0x06, 0x40,
+ 0x60, 0x5b, 0x93, 0x3f, 0x90, 0xb3, 0x58, 0x40, 0x80, 0xb2, 0x3e, 0xbf,
+ 0xa0, 0xb4, 0x72, 0xbf, 0x60, 0x5c, 0xad, 0xbe, 0x90, 0xb3, 0xd8, 0x3f,
+ 0x60, 0xb0, 0x0a, 0x3f, 0x70, 0x06, 0x1c, 0x3f, 0x60, 0x5c, 0xad, 0xbe,
+ 0xd8, 0x5a, 0x06, 0x40, 0x60, 0xb0, 0x0a, 0x3f, 0xa1, 0xb4, 0xf2, 0xc0,
+ 0x70, 0x06, 0x1c, 0x3f, 0x68, 0x06, 0x1c, 0xc0, 0x68, 0x06, 0x1c, 0xc0,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0x50, 0xbe,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x60, 0xb0, 0x8a, 0xbe, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0xbd, 0x00, 0x00, 0x00, 0x00,
+ 0x60, 0x5c, 0xad, 0xbe, 0x80, 0xb0, 0x8a, 0x3d, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x60, 0xb0, 0x8a, 0x3e, 0x70, 0x5c, 0xad, 0xbf, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x58, 0x05, 0x82, 0xbf, 0x90, 0x5e, 0x61, 0xbf, 0xa0, 0xb4, 0xf2, 0x3e,
+ 0x70, 0x5c, 0x2d, 0x3f, 0xf0, 0x06, 0x29, 0x40, 0x60, 0xb0, 0x8a, 0x3e,
+ 0x60, 0x06, 0x1c, 0xbf, 0x80, 0xb0, 0x0a, 0x3e, 0xa0, 0xb4, 0xf2, 0xbe,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0x5c, 0xad, 0x3e, 0x80, 0xb2, 0x3e, 0x3f,
+ 0x60, 0xb0, 0x8a, 0xbe, 0x60, 0xb0, 0x8a, 0x3f, 0x68, 0x06, 0x1c, 0x40,
+ 0x80, 0x08, 0xd0, 0x3e, 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0x08, 0xd0, 0x3e, 0x80, 0xb2, 0x3e, 0xbf,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0x08, 0x50, 0xbe, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0x08, 0xd0, 0xbe, 0x80, 0x08, 0x50, 0xbe, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0x3d, 0x00, 0x00, 0x00, 0x00,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x60, 0xb0, 0x8a, 0x3e,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0xbd, 0x00, 0x00, 0x00, 0x00,
+ 0x60, 0xb0, 0x0a, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x60, 0xb0, 0x8a, 0x3e, 0xa0, 0xb4, 0x72, 0xbf, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x60, 0xb0, 0x8a, 0xbe, 0x80, 0xb0, 0x8a, 0xbd, 0xa0, 0xb4, 0xf2, 0xbe,
+ 0x80, 0x08, 0x50, 0xbe, 0x80, 0xb0, 0x8a, 0x3d, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x0a, 0x3e, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x0a, 0x3e, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x8a, 0x3d, 0x60, 0xb0, 0x0a, 0x3f,
+ 0x60, 0x5c, 0xad, 0xbe, 0x60, 0xb0, 0x8a, 0x3e, 0x70, 0xb1, 0xa4, 0xbf,
+ 0xa0, 0xb4, 0xf2, 0x3f, 0x68, 0x06, 0x1c, 0x40, 0x80, 0xb2, 0x3e, 0x3f,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0x08, 0xd0, 0x3e, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x78, 0x07, 0xb6, 0x3f, 0x60, 0x5b, 0x93, 0xbf, 0x70, 0x5c, 0x2d, 0x3f,
+ 0x80, 0x08, 0xd0, 0xbe, 0x60, 0x5b, 0x93, 0x3f, 0x60, 0xb0, 0x0a, 0x3f,
+ 0x5c, 0x34, 0xec, 0xc0, 0x80, 0x08, 0xd0, 0xbe, 0xe0, 0x05, 0x0f, 0xc0,
+ 0x56, 0x05, 0x82, 0xc0, 0x58, 0x05, 0x82, 0x3f, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0xbd, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x40, 0xb0, 0x0a, 0xbe, 0x60, 0x5c, 0xad, 0xbe,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x8a, 0xbd, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0x50, 0xbf, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x40, 0xb0, 0x0a, 0xbe, 0x68, 0x06, 0x9c, 0xbf,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x70, 0xb1, 0xa4, 0xbf, 0x80, 0x08, 0xd0, 0xbe,
+ 0x80, 0x08, 0xd0, 0x3e, 0x80, 0x08, 0xd0, 0x3e, 0xe0, 0x05, 0x0f, 0x40,
+ 0x40, 0xb0, 0x0a, 0xbe, 0xa0, 0xb4, 0x72, 0xbf, 0x80, 0x08, 0x50, 0x3e,
+ 0x60, 0xb0, 0x8a, 0xbe, 0x80, 0xb0, 0x8a, 0xbd, 0x70, 0x06, 0x1c, 0x3f,
+ 0x70, 0x06, 0x1c, 0x3f, 0x80, 0x08, 0xd0, 0xbe, 0x58, 0x05, 0x82, 0x3f,
+ 0x64, 0x5b, 0x13, 0x40, 0xa0, 0xb4, 0xf2, 0x3e, 0x60, 0x5c, 0xad, 0xbe,
+ 0x80, 0x08, 0x50, 0xbe, 0x40, 0xb0, 0x0a, 0xbe, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xb2, 0x3e, 0xbf, 0x80, 0x08, 0x50, 0xbe, 0x60, 0xb0, 0x8a, 0xbe,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x60, 0xb0, 0x8a, 0xbe, 0x80, 0x08, 0x50, 0xbe,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x60, 0xb0, 0x8a, 0xbe, 0x60, 0xb0, 0x8a, 0x3e,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x60, 0xb0, 0x8a, 0xbe, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0x08, 0xd0, 0x3e, 0x80, 0x08, 0x50, 0xbe, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0x08, 0xd0, 0x3e, 0x80, 0x08, 0x50, 0xbe,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xa0, 0xb4, 0xf2, 0xbe,
+ 0x80, 0x08, 0x50, 0xbe, 0x80, 0x08, 0x50, 0xbe, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0x08, 0xd0, 0xbe, 0x60, 0xb0, 0x8a, 0xbe, 0x80, 0x08, 0x50, 0xbe,
+ 0xa0, 0xb4, 0xf2, 0xbe, 0x80, 0x08, 0x50, 0x3e, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0x5c, 0xad, 0x3e,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x60, 0xb0, 0x8a, 0x3e, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0x08, 0x50, 0x3e, 0x54, 0x05, 0x02, 0xc0, 0x60, 0x5b, 0x93, 0xbf,
+ 0x80, 0x08, 0x50, 0xbe, 0x90, 0xb3, 0xd8, 0x3f, 0x20, 0x5f, 0x6e, 0x40,
+ 0x88, 0x5d, 0xc7, 0x3f, 0x78, 0x07, 0xb6, 0xbf, 0xa0, 0xb4, 0xf2, 0xbe,
+ 0x60, 0xb0, 0x8a, 0x3e, 0x70, 0x5c, 0x2d, 0x3f, 0x90, 0xb3, 0xd8, 0xbf,
+ 0x60, 0x5c, 0xad, 0xbe, 0x60, 0xb0, 0x8a, 0xbe, 0xa0, 0xb4, 0x72, 0x3f,
+ 0xa0, 0xb4, 0x72, 0x3f, 0xc3, 0x32, 0xc5, 0xc0, 0x80, 0x08, 0x50, 0x3e,
+ 0x80, 0xb2, 0xbe, 0xbf, 0x6c, 0xb1, 0x24, 0xc0, 0x60, 0x5b, 0x93, 0x3f,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0x3d, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0x3d, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x60, 0xb0, 0x8a, 0xbe, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0x08, 0x50, 0xbe,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x90, 0x5e, 0x61, 0xbf,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x70, 0xb1, 0xa4, 0xbf, 0x40, 0xb0, 0x0a, 0xbe, 0x70, 0xb1, 0xa4, 0xbf,
+ 0x60, 0x5c, 0xad, 0xbe, 0x60, 0xb0, 0x8a, 0x3e, 0x70, 0x5c, 0x2d, 0x3f,
+ 0x88, 0x5d, 0xc7, 0x3f, 0x60, 0x5c, 0xad, 0xbe, 0xa0, 0xb4, 0x72, 0xbf,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0x08, 0x50, 0x3e, 0x70, 0x5c, 0x2d, 0x3f, 0x60, 0xb0, 0x8a, 0xbe,
+ 0x80, 0x08, 0x50, 0x3e, 0xd8, 0x5a, 0x06, 0x40, 0x60, 0xb0, 0x0a, 0x3f,
+ 0x80, 0x08, 0x50, 0xbf, 0x60, 0xb0, 0x8a, 0xbe, 0xa0, 0xb4, 0xf2, 0xbe,
+ 0x80, 0x08, 0x50, 0xbe, 0xa0, 0xb4, 0x72, 0xbf, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0x08, 0x50, 0xbe, 0x80, 0xb0, 0x8a, 0xbd, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0x08, 0xd0, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0x50, 0xbe,
+ 0x60, 0xb0, 0x8a, 0xbe, 0x80, 0x08, 0x50, 0x3e, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xb0, 0x0a, 0x3e, 0xa0, 0xb4, 0xf2, 0x3e, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x60, 0xb0, 0x8a, 0x3e, 0x80, 0xb0, 0x8a, 0x3d, 0x60, 0xb0, 0x8a, 0x3e,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x60, 0xb0, 0x8a, 0xbe, 0x00, 0x00, 0x00, 0x00,
+ 0x60, 0x5b, 0x93, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0x08, 0x50, 0xbe, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0xbd, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0x08, 0x50, 0x3e,
+ 0xa0, 0xb4, 0xf2, 0x3e, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0x5c, 0xad, 0x3e,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x0a, 0x3e, 0x58, 0x05, 0x82, 0xbf,
+ 0x90, 0x08, 0x50, 0x3f, 0x60, 0x5b, 0x93, 0x3f, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x58, 0x05, 0x82, 0x3f, 0x58, 0xb0, 0x8a, 0xbf, 0x60, 0x06, 0x1c, 0xbf,
+ 0x70, 0x5c, 0x2d, 0x3f, 0x60, 0xb0, 0x0a, 0x3f, 0x80, 0xb2, 0x3e, 0x3f,
+ 0x58, 0xb0, 0x8a, 0xbf, 0x60, 0x5c, 0xad, 0xbe, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x70, 0xb1, 0xa4, 0xbf, 0x80, 0x5c, 0xad, 0x3e, 0xac, 0x86, 0xa2, 0xc0,
+ 0x90, 0x5e, 0x61, 0xbf, 0xa0, 0xb4, 0xf2, 0xbe, 0x23, 0x86, 0x95, 0xc0,
+ 0x60, 0xb0, 0x8a, 0x3f, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0x08, 0x50, 0xbe, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x60, 0xb0, 0x8a, 0xbe, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x40, 0xb0, 0x0a, 0xbe, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x60, 0xb0, 0x8a, 0xbe, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x60, 0x5b, 0x93, 0xbf, 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x70, 0xb1, 0xa4, 0xbf, 0x80, 0x08, 0xd0, 0x3e,
+ 0xa0, 0xb4, 0x72, 0xbf, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0x08, 0xd0, 0x3e,
+ 0x60, 0xb0, 0x0a, 0x3f, 0x70, 0x5c, 0xad, 0x3f, 0x80, 0x08, 0xd0, 0xbe,
+ 0x80, 0xb2, 0x3e, 0xbf, 0x60, 0xb0, 0x8a, 0x3e, 0x60, 0x5c, 0xad, 0xbe,
+ 0x80, 0x08, 0x50, 0x3e, 0x80, 0x08, 0x50, 0x3e, 0xa0, 0xb4, 0xf2, 0x3e,
+ 0x60, 0x5c, 0xad, 0xbe, 0x80, 0x08, 0xd0, 0x3e, 0x98, 0x5e, 0xe1, 0x3f,
+ 0x70, 0x06, 0x1c, 0x3f, 0x80, 0xb2, 0x3e, 0xbf, 0x60, 0x5c, 0xad, 0xbe,
+ 0xa0, 0xb4, 0xf2, 0xbe, 0x80, 0x08, 0x50, 0xbe, 0x70, 0xb1, 0xa4, 0xbf,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x0a, 0x3e, 0x00, 0x00, 0x00, 0x00,
+ 0x60, 0xb0, 0x8a, 0x3e, 0x80, 0x08, 0x50, 0xbe, 0x80, 0x08, 0x50, 0xbe,
+ 0x80, 0xb0, 0x8a, 0xbd, 0xa0, 0xb4, 0xf2, 0xbe, 0x80, 0x08, 0x50, 0x3e,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x0a, 0x3e, 0x60, 0xb0, 0x0a, 0x3f,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0x08, 0x50, 0x3e, 0x60, 0xb0, 0x8a, 0xbe, 0xa0, 0xb4, 0xf2, 0xbe,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x70, 0xb1, 0xa4, 0xbf, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x60, 0xb0, 0x8a, 0x3e,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x40, 0xb0, 0x0a, 0xbe, 0x00, 0x00, 0x00, 0x00,
+ 0xa0, 0xb4, 0xf2, 0xbe, 0x80, 0x08, 0x50, 0x3e, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x60, 0xb0, 0x8a, 0x3e, 0x70, 0x5c, 0x2d, 0x3f, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x60, 0xb0, 0x8a, 0x3e, 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0x5c, 0xad, 0x3e,
+ 0x80, 0xb2, 0x3e, 0xbf, 0xa0, 0xb4, 0xf2, 0x3f, 0x80, 0xb2, 0xbe, 0x3f,
+ 0x90, 0x08, 0x50, 0x3f, 0x80, 0x08, 0xd0, 0x3e, 0x88, 0x08, 0xd0, 0xbf,
+ 0xa0, 0xb4, 0x72, 0xbf, 0x5c, 0xb0, 0x0a, 0x40, 0x68, 0x06, 0x9c, 0x3f,
+ 0x80, 0xb2, 0x3e, 0x3f, 0x80, 0xb2, 0xbe, 0xbf, 0xa0, 0xb4, 0x72, 0x3f,
+ 0x80, 0x08, 0x50, 0xbe, 0xf0, 0x06, 0x29, 0xc0, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x5c, 0xb0, 0x0a, 0xc0, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x8a, 0x08, 0x50, 0xc0, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0x08, 0x50, 0x3e, 0x60, 0xb0, 0x8a, 0xbe, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0x50, 0x3e, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0x08, 0x50, 0xbe, 0x80, 0xb0, 0x8a, 0xbd, 0x60, 0x5c, 0xad, 0xbe,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x58, 0xb0, 0x8a, 0xbf, 0x60, 0xb0, 0x8a, 0x3e,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb2, 0xbe, 0xbf,
+ 0x80, 0x08, 0x50, 0x3e, 0x58, 0x05, 0x82, 0xbf, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x60, 0xb0, 0x8a, 0x3e, 0x70, 0x5c, 0x2d, 0x3f, 0x70, 0xb1, 0xa4, 0x3f,
+ 0x60, 0xb0, 0x8a, 0xbe, 0x90, 0x5e, 0x61, 0xbf, 0x80, 0x08, 0xd0, 0x3e,
+ 0x80, 0x08, 0xd0, 0xbe, 0x80, 0xb0, 0x8a, 0x3d, 0x00, 0x00, 0x00, 0x00,
+ 0xa0, 0xb4, 0x72, 0x3f, 0x80, 0xb0, 0x0a, 0x3e, 0x70, 0x06, 0x1c, 0x3f,
+ 0x88, 0x08, 0xd0, 0x3f, 0x80, 0xb2, 0x3e, 0x3f, 0x58, 0x05, 0x82, 0xbf,
+ 0x60, 0x5c, 0xad, 0xbe, 0x80, 0x08, 0xd0, 0xbe, 0x00, 0x00, 0x00, 0x00,
+ 0x88, 0x08, 0xd0, 0xbf, 0xa0, 0xb4, 0xf2, 0xbe, 0x90, 0x5e, 0x61, 0xbf,
+ 0x80, 0xb0, 0x0a, 0x3e, 0xa0, 0xb4, 0xf2, 0x3e, 0x80, 0x08, 0xd0, 0xbe,
+ 0x80, 0xb0, 0x8a, 0x3d, 0xa0, 0xb4, 0xf2, 0x3e, 0x70, 0xb1, 0xa4, 0xbf,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0x08, 0x50, 0x3e,
+ 0xa0, 0xb4, 0xf2, 0x3e, 0x80, 0x08, 0xd0, 0x3e, 0x80, 0xb2, 0x3e, 0x3f,
+ 0x80, 0x08, 0x50, 0xbe, 0x80, 0x5c, 0xad, 0x3e, 0x60, 0x5c, 0xad, 0xbe,
+ 0x60, 0x06, 0x1c, 0xbf, 0x80, 0xb0, 0x0a, 0x3e, 0x88, 0x08, 0xd0, 0xbf,
+ 0x80, 0x08, 0xd0, 0xbe, 0x58, 0x05, 0x82, 0xbf, 0x00, 0x00, 0x00, 0x00,
+ 0x70, 0x06, 0x1c, 0x3f, 0x60, 0x06, 0x1c, 0xbf, 0x80, 0x08, 0x50, 0x3e,
+ 0x80, 0x5c, 0xad, 0x3e, 0x78, 0x07, 0xb6, 0xbf, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0xb0, 0x8a, 0x3d, 0xa0, 0xb4, 0xf2, 0x3e, 0x70, 0x06, 0x1c, 0x3f,
+ 0x60, 0xb0, 0x8a, 0x3e, 0x90, 0x5e, 0x61, 0x3f, 0x80, 0x08, 0x50, 0xbe,
+ 0x80, 0x5c, 0xad, 0x3e, 0x78, 0x07, 0xb6, 0xbf, 0xe0, 0x05, 0x0f, 0xc0,
+ 0x80, 0xb2, 0x3e, 0x3f, 0x90, 0x08, 0x50, 0x3f, 0x80, 0x08, 0xd0, 0xbe,
+ 0x60, 0xb0, 0x0a, 0x3f, 0xa0, 0xb4, 0xf2, 0xbe, 0x78, 0x07, 0x36, 0x40,
+ 0x80, 0x5c, 0xad, 0x3e, 0xec, 0x5b, 0x20, 0x40, 0x60, 0x5c, 0xad, 0xbe,
+ 0x78, 0x07, 0xb6, 0xbf, 0x80, 0xb0, 0x8a, 0xbd, 0x8a, 0x08, 0x50, 0xc0,
+ 0x60, 0xb0, 0x8a, 0x3e, 0xa0, 0xb4, 0x72, 0xbf, 0x60, 0xb0, 0x0a, 0xbf,
+ 0xe0, 0x05, 0x0f, 0xc0, 0x70, 0xb1, 0xa4, 0xbf, 0x78, 0x07, 0xb6, 0x3f,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0x3d, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x60, 0xb0, 0x8a, 0x3e, 0x60, 0xb0, 0x8a, 0x3e, 0x78, 0x07, 0xb6, 0xbf,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0x08, 0x50, 0xbe,
+ 0x60, 0xb0, 0x8a, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x90, 0x5e, 0x61, 0xbf,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0x08, 0x50, 0xbe,
+ 0x90, 0x5e, 0x61, 0xbf, 0xa0, 0xb4, 0xf2, 0xbe, 0x70, 0xb1, 0xa4, 0xbf,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0x08, 0x50, 0xbf, 0x90, 0x08, 0x50, 0x3f, 0x80, 0xb2, 0x3e, 0xbf,
+ 0x60, 0xb0, 0x8a, 0xbe, 0x80, 0xb2, 0x3e, 0xbf, 0x60, 0xb0, 0x8a, 0x3e,
+ 0x90, 0x5e, 0x61, 0x3f, 0x70, 0x5c, 0x2d, 0xbf, 0xa0, 0xb4, 0x72, 0xbf,
+ 0x90, 0x5e, 0x61, 0x3f, 0x90, 0x5e, 0x61, 0xbf, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x80, 0x08, 0xd0, 0xbe, 0x90, 0x08, 0x50, 0x3f, 0x80, 0xb0, 0x0a, 0x3e,
+ 0xa0, 0xb4, 0x72, 0x3f, 0x58, 0x05, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0x08, 0x50, 0xbf, 0xa0, 0xb4, 0xf2, 0x3e, 0x98, 0x5e, 0xe1, 0xbf,
+ 0x80, 0x08, 0x50, 0x3e, 0x70, 0x5c, 0xad, 0xbf, 0x80, 0x08, 0x50, 0xbf,
+ 0x60, 0xb0, 0x8a, 0x3e, 0x70, 0x5c, 0x2d, 0x3f, 0x78, 0x07, 0x36, 0x40,
+ 0x60, 0x06, 0x1c, 0xbf, 0x80, 0xb2, 0x3e, 0xbf, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x8a, 0xbd, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x58, 0x05, 0x82, 0x3f, 0x60, 0xb0, 0x8a, 0xbe, 0xa0, 0xb4, 0x72, 0x3f,
+ 0xfc, 0x5c, 0x3a, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0x3d,
+ 0xa0, 0xb4, 0x72, 0x3f, 0x60, 0xb0, 0x8a, 0x3e, 0x80, 0x5c, 0xad, 0x3e,
+ 0x70, 0x06, 0x1c, 0x3f, 0x60, 0xb0, 0x0a, 0xbf, 0x78, 0x07, 0xb6, 0x3f,
+ 0x90, 0x08, 0x50, 0x3f, 0x80, 0x08, 0xd0, 0x3e, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x70, 0xb1, 0xa4, 0x3f, 0x90, 0x5e, 0x61, 0xbf, 0xa0, 0xb4, 0x72, 0x3f,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x90, 0x5e, 0x61, 0x3f, 0x90, 0x5e, 0x61, 0x3f,
+ 0xa1, 0xb4, 0xf2, 0xc0, 0x40, 0xb0, 0x0a, 0xbe, 0x5c, 0xb0, 0x0a, 0xc0,
+ 0x5c, 0xb0, 0x0a, 0xc0, 0x90, 0x5e, 0x61, 0xbf, 0x60, 0x5c, 0xad, 0xbe,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0x08, 0x50, 0x3e,
+ 0x80, 0x08, 0x50, 0xbe, 0x80, 0xb0, 0x0a, 0x3e, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0xb2, 0xbe, 0xbf, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x0a, 0x3e, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x0a, 0x3e, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x74, 0x5c, 0x2d, 0x40, 0x60, 0xb0, 0x8a, 0x3e, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x60, 0xb0, 0x0a, 0xbf, 0x68, 0x06, 0x9c, 0x3f, 0x70, 0x06, 0x1c, 0x3f,
+ 0x70, 0x5c, 0x2d, 0xbf, 0x90, 0x5e, 0x61, 0xbf, 0x78, 0x07, 0xb6, 0x3f,
+ 0x80, 0x08, 0x50, 0xbe, 0x40, 0xb0, 0x0a, 0xbe, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0x08, 0xd0, 0xbe, 0x80, 0x5c, 0xad, 0x3e,
+ 0x70, 0x5c, 0x2d, 0x3f, 0x70, 0x5c, 0x2d, 0xbf, 0x80, 0x08, 0xd0, 0xbe,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0x5c, 0xad, 0x3e,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x0a, 0x3e, 0x60, 0x5b, 0x93, 0x3f,
+ 0x90, 0x5e, 0x61, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0x50, 0x3e, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0x50, 0xbe, 0x60, 0x5c, 0xad, 0xbe,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0x08, 0x50, 0xbe, 0x70, 0x5c, 0xad, 0xbf, 0x60, 0x5c, 0xad, 0xbe,
+ 0x60, 0xb0, 0x8a, 0x3e, 0x80, 0xb0, 0x0a, 0x3e, 0x60, 0xb0, 0x8a, 0xbe,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0xbd, 0x60, 0x06, 0x1c, 0xbf,
+ 0x80, 0x08, 0x50, 0xbe, 0xa0, 0xb4, 0xf2, 0x3e, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x80, 0x08, 0x50, 0x3e, 0x80, 0x08, 0x50, 0x3e, 0x80, 0x5c, 0xad, 0x3e,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x60, 0x5c, 0xad, 0xbe, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x60, 0x5c, 0xad, 0xbe, 0x80, 0xb0, 0x8a, 0xbd, 0x60, 0x5c, 0xad, 0xbe,
+ 0x70, 0x5c, 0xad, 0xbf, 0x60, 0x5c, 0xad, 0xbe, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x80, 0x5c, 0xad, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0x50, 0x3e,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x60, 0xb0, 0x0a, 0xbf, 0x80, 0x08, 0x50, 0xbe,
+ 0x60, 0xb0, 0x8a, 0x3e, 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0x08, 0x50, 0x3e,
+ 0x60, 0xb0, 0x8a, 0x3e, 0x60, 0xb0, 0x8a, 0x3e, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x60, 0x5c, 0xad, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0x50, 0xbe,
+ 0xa8, 0x5f, 0xfb, 0xbf, 0x58, 0x05, 0x82, 0xbf, 0x98, 0x09, 0xea, 0xbf,
+ 0x70, 0x5c, 0x2d, 0xbf, 0x60, 0xb0, 0x8a, 0x3f, 0xa0, 0xb4, 0xf2, 0xbf,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0x5c, 0xad, 0x3e, 0x80, 0x08, 0xd0, 0xbe,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x8a, 0x08, 0x50, 0xc0, 0xfc, 0x5c, 0x3a, 0x40,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb2, 0x3e, 0x40, 0x58, 0x05, 0x82, 0x3f,
+ 0x80, 0x08, 0x50, 0xbf, 0x80, 0x08, 0x50, 0xbf, 0xa0, 0xb4, 0x72, 0xbf,
+ 0x68, 0x06, 0x1c, 0x40, 0xe4, 0xb0, 0x97, 0xc0, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0x08, 0x50, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0x08, 0x50, 0xbe, 0x80, 0xb0, 0x8a, 0x3d, 0x60, 0x06, 0x1c, 0xbf,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0xbd, 0x60, 0xb0, 0x8a, 0xbe,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0x08, 0x50, 0x3e,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x0a, 0x3e, 0x40, 0xb0, 0x0a, 0xbe,
+ 0xf8, 0xb1, 0x31, 0x40, 0x80, 0x08, 0xd0, 0x3e, 0x60, 0xb0, 0x8a, 0x3e,
+ 0x60, 0xb0, 0x0a, 0xbf, 0x60, 0xb0, 0x8a, 0x3f, 0x60, 0xb0, 0x0a, 0x3f,
+ 0x80, 0xb2, 0x3e, 0xbf, 0x80, 0x08, 0x50, 0xbf, 0x78, 0x07, 0xb6, 0x3f,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0x08, 0x50, 0xbe,
+ 0x80, 0xb0, 0x8a, 0xbd, 0xa0, 0xb4, 0xf2, 0xbe, 0x80, 0x5c, 0xad, 0x3e,
+ 0x90, 0x08, 0x50, 0x3f, 0xa0, 0xb4, 0xf2, 0xbe, 0x60, 0xb0, 0x0a, 0xbf,
+ 0x80, 0x08, 0x50, 0xbe, 0x60, 0x5c, 0xad, 0xbe, 0x58, 0x05, 0x82, 0xbf,
+ 0x60, 0x06, 0x1c, 0xbf, 0x60, 0xb0, 0x8a, 0x3e, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0x08, 0x50, 0x3e, 0x60, 0x5c, 0xad, 0xbe,
+ 0x70, 0x5c, 0x2d, 0xbf, 0x80, 0x08, 0xd0, 0xbe, 0x80, 0x08, 0x50, 0x3e,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0x08, 0x50, 0xbe, 0x80, 0x08, 0xd0, 0x3e,
+ 0x60, 0xb0, 0x8a, 0x3e, 0x80, 0xb0, 0x8a, 0xbd, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x0a, 0x3e, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0x08, 0x50, 0xbe, 0x58, 0xb0, 0x8a, 0xbf, 0x60, 0xb0, 0x0a, 0xbf,
+ 0x60, 0xb0, 0x8a, 0x3e, 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0x08, 0x50, 0x3e, 0x40, 0xb0, 0x0a, 0xbe, 0x60, 0xb0, 0x0a, 0xbf,
+ 0x60, 0x5c, 0xad, 0xbe, 0x80, 0x08, 0x50, 0x3e, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0x08, 0x50, 0xbe, 0x80, 0x5c, 0xad, 0x3e, 0x80, 0x5c, 0xad, 0x3e,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0x08, 0x50, 0xbe, 0x60, 0xb0, 0x8a, 0x3e,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x60, 0x5b, 0x13, 0xc0, 0x70, 0x5c, 0xad, 0xbf,
+ 0x88, 0x08, 0xd0, 0x3f, 0x60, 0xb0, 0x8a, 0x3f, 0xa0, 0x09, 0xea, 0x3f,
+ 0xd0, 0x88, 0xd6, 0x40, 0x70, 0x06, 0x1c, 0x3f, 0xa0, 0xb4, 0xf2, 0x3e,
+ 0x58, 0x05, 0x82, 0xbf, 0x40, 0xb0, 0x0a, 0xbe, 0x98, 0x5e, 0xe1, 0xbf,
+ 0x80, 0x5c, 0xad, 0x3e, 0x40, 0xb0, 0x0a, 0xbe, 0x58, 0x05, 0x82, 0x3f,
+ 0x90, 0x5e, 0x61, 0x3f, 0x6c, 0xb1, 0x24, 0x40, 0x70, 0x5c, 0x2d, 0xbf,
+ 0x88, 0x08, 0xd0, 0xbf, 0x88, 0x5d, 0xc7, 0x3f, 0x78, 0x07, 0x36, 0xc0,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0x08, 0x50, 0xbe, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x60, 0xb0, 0x8a, 0xbe, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x70, 0x5c, 0x2d, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0x50, 0xbe,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0x50, 0xbe, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0x08, 0x50, 0xbe, 0xf8, 0xb1, 0x31, 0x40, 0x80, 0x08, 0xd0, 0x3e,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x60, 0xb0, 0x0a, 0xbf, 0x60, 0x5b, 0x93, 0x3f,
+ 0xa0, 0xb4, 0xf2, 0x3e, 0x80, 0x08, 0x50, 0xbf, 0xa0, 0xb4, 0x72, 0xbf,
+ 0x78, 0x07, 0xb6, 0x3f, 0x40, 0xb0, 0x0a, 0xbe, 0x00, 0x00, 0x00, 0x00,
+ 0x60, 0xb0, 0x8a, 0xbe, 0x80, 0xb0, 0x8a, 0xbd, 0x60, 0x5c, 0xad, 0xbe,
+ 0x60, 0xb0, 0x8a, 0x3e, 0x70, 0x5c, 0x2d, 0x3f, 0x80, 0x08, 0xd0, 0xbe,
+ 0xa0, 0xb4, 0xf2, 0xbe, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0xb2, 0x3e, 0xbf, 0xa0, 0xb4, 0xf2, 0xbe, 0x60, 0xb0, 0x8a, 0x3e,
+ 0x80, 0x08, 0x50, 0xbe, 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x0a, 0x3e,
+ 0xa0, 0xb4, 0xf2, 0xbe, 0x60, 0x06, 0x1c, 0xbf, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb0, 0x8a, 0xbd, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0x08, 0xd0, 0x3e, 0x80, 0xb0, 0x8a, 0x3d, 0x60, 0xb0, 0x8a, 0x3e,
+ 0x00, 0x00, 0x00, 0x00, 0x60, 0xb0, 0x8a, 0xbe, 0x70, 0x06, 0x1c, 0x3f,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0x3d, 0x60, 0x06, 0x1c, 0xbf,
+ 0xa0, 0xb4, 0xf2, 0xbe, 0x80, 0xb0, 0x8a, 0x3d, 0x60, 0xb0, 0x8a, 0xbe,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x0a, 0x3e, 0x60, 0xb0, 0x8a, 0xbe,
+ 0x80, 0xb2, 0x3e, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0x50, 0x3e,
+ 0x80, 0x08, 0x50, 0x3e, 0x80, 0x08, 0x50, 0x3e, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x60, 0x5c, 0xad, 0xbe, 0xa0, 0xb4, 0xf2, 0x3e, 0x68, 0x06, 0x1c, 0xc0,
+ 0x90, 0x5e, 0x61, 0xbf, 0x70, 0x5c, 0x2d, 0xbf, 0x70, 0x5c, 0x2d, 0x3f,
+ 0xa8, 0x5f, 0xfb, 0x3f, 0x9a, 0x85, 0x88, 0x40, 0xd8, 0x5a, 0x06, 0xc0,
+ 0x90, 0xb3, 0xd8, 0x3f, 0x70, 0x5c, 0xad, 0x3f, 0x60, 0xb0, 0x0a, 0xbf,
+ 0x60, 0x5b, 0x93, 0x3f, 0x80, 0x5c, 0xad, 0x3e, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0x08, 0x50, 0x3e, 0xa0, 0xb4, 0xf2, 0x3e, 0x90, 0x5e, 0x61, 0x3f,
+ 0x70, 0x5c, 0x2d, 0xbf, 0x88, 0x08, 0xd0, 0xbf, 0x80, 0x08, 0x50, 0xbe,
+ 0x88, 0x08, 0xd0, 0x3f, 0x80, 0xb0, 0x8a, 0x3d, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0xbd, 0x60, 0x5c, 0xad, 0xbe,
+ 0x00, 0x00, 0x00, 0x00, 0x60, 0xb0, 0x0a, 0xbf, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0x50, 0xbe, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0xbd, 0x78, 0x07, 0x36, 0x40,
+ 0x80, 0x08, 0x50, 0x3e, 0x60, 0xb0, 0x8a, 0x3e, 0x60, 0x06, 0x1c, 0xbf,
+ 0x60, 0xb0, 0x8a, 0x3f, 0x70, 0x06, 0x1c, 0x3f, 0x60, 0x06, 0x1c, 0xbf,
+ 0x80, 0x08, 0x50, 0xbf, 0x70, 0xb1, 0xa4, 0x3f, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x60, 0xb0, 0x8a, 0xbe, 0x00, 0x00, 0x00, 0x00,
+ 0x60, 0x5c, 0xad, 0xbe, 0x80, 0x5c, 0xad, 0x3e, 0x70, 0x5c, 0x2d, 0x3f,
+ 0xa0, 0xb4, 0xf2, 0xbe, 0x60, 0x06, 0x1c, 0xbf, 0x80, 0x08, 0x50, 0xbe,
+ 0x60, 0xb0, 0x8a, 0xbe, 0x58, 0x05, 0x82, 0xbf, 0x60, 0x06, 0x1c, 0xbf,
+ 0x60, 0xb0, 0x8a, 0x3e, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x00, 0x00, 0x00, 0x00, 0x60, 0xb0, 0x0a, 0xbf, 0x60, 0x06, 0x1c, 0xbf,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x60, 0xb0, 0x8a, 0x3e, 0x80, 0x08, 0x50, 0x3e, 0xa0, 0xb4, 0xf2, 0x3e,
+ 0x60, 0xb0, 0x8a, 0x3e, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x70, 0x5c, 0x2d, 0x3f, 0x80, 0x08, 0x50, 0xbe, 0x80, 0x08, 0xd0, 0xbe,
+ 0x60, 0x5b, 0x93, 0xbf, 0xa0, 0xb4, 0xf2, 0xbe, 0x80, 0x5c, 0xad, 0x3e,
+ 0x80, 0x08, 0x50, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x60, 0xb0, 0x0a, 0xbf, 0x70, 0x5c, 0x2d, 0xbf, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0x08, 0x50, 0xbe, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0x5c, 0xad, 0x3e,
+ 0x60, 0xb0, 0x8a, 0x3e, 0x60, 0xb0, 0x8a, 0x3e, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x70, 0x5c, 0x2d, 0x3f,
+ 0x90, 0x5e, 0x61, 0xbf, 0x70, 0x5c, 0xad, 0x3f, 0x60, 0x06, 0x1c, 0xbf,
+ 0x58, 0x05, 0x82, 0x3f, 0xa8, 0x5f, 0xfb, 0x3f, 0xa0, 0x09, 0xea, 0x3f,
+ 0x60, 0x5c, 0xad, 0xbe, 0x90, 0x08, 0x50, 0x3f, 0x58, 0x05, 0x82, 0x3f,
+ 0xa0, 0xb4, 0xf2, 0xbe, 0x60, 0x5c, 0xad, 0xbe, 0x80, 0x08, 0xd0, 0x3e,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x88, 0x08, 0xd0, 0x3f, 0x80, 0x08, 0x50, 0xbe,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb2, 0x3e, 0xbf, 0x88, 0x08, 0xd0, 0xbf,
+ 0x60, 0x06, 0x1c, 0xbf, 0x60, 0xb0, 0x0a, 0x3f, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0x50, 0xbe,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x60, 0x5c, 0xad, 0xbe, 0x80, 0xb0, 0x8a, 0x3d, 0x60, 0x06, 0x1c, 0xbf,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0x08, 0x50, 0xbe,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0xbd, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb0, 0x8a, 0x3d, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0x50, 0xbe,
+ 0x78, 0x07, 0x36, 0x40, 0x80, 0x08, 0x50, 0x3e, 0x60, 0xb0, 0x8a, 0x3e,
+ 0x60, 0x06, 0x1c, 0xbf, 0x68, 0x06, 0x9c, 0x3f, 0xa0, 0xb4, 0xf2, 0x3e,
+ 0x80, 0x08, 0x50, 0xbf, 0x90, 0x5e, 0x61, 0xbf, 0x78, 0x07, 0xb6, 0x3f,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0x08, 0xd0, 0xbe, 0x80, 0x5c, 0xad, 0x3e,
+ 0x80, 0xb2, 0x3e, 0x3f, 0x60, 0x06, 0x1c, 0xbf, 0xa0, 0xb4, 0xf2, 0xbe,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0xd0, 0xbe, 0x60, 0x5b, 0x93, 0xbf,
+ 0x60, 0x06, 0x1c, 0xbf, 0x80, 0xb0, 0x0a, 0x3e, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x60, 0xb0, 0x8a, 0x3e, 0x60, 0xb0, 0x0a, 0xbf,
+ 0x60, 0xb0, 0x0a, 0xbf, 0x60, 0x5c, 0xad, 0xbe, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0x08, 0x50, 0xbe, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0x08, 0xd0, 0x3e, 0x00, 0x00, 0x00, 0x00,
+ 0x60, 0x5c, 0xad, 0xbe, 0x80, 0xb2, 0x3e, 0x3f, 0x00, 0x00, 0x00, 0x00,
+ 0xa0, 0xb4, 0xf2, 0xbe, 0x70, 0xb1, 0xa4, 0xbf, 0x70, 0x5c, 0x2d, 0xbf,
+ 0x60, 0xb0, 0x8a, 0x3e, 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0x08, 0xd0, 0xbe, 0x70, 0x5c, 0x2d, 0xbf,
+ 0x60, 0x5c, 0xad, 0xbe, 0x80, 0xb0, 0x8a, 0x3d, 0x00, 0x00, 0x00, 0x00,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0x08, 0x50, 0x3e, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0x08, 0x50, 0x3e, 0x80, 0x08, 0x50, 0xbe, 0x80, 0x08, 0x50, 0xbe,
+ 0x70, 0x5c, 0x2d, 0x3f, 0x70, 0x5c, 0xad, 0xbf, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x60, 0xb0, 0x0a, 0x3f, 0x80, 0xb2, 0xbe, 0x3f, 0xa0, 0x09, 0xea, 0x3f,
+ 0x78, 0x07, 0xb6, 0xbf, 0x70, 0x5c, 0xad, 0xbf, 0x58, 0x05, 0x82, 0x3f,
+ 0x00, 0x00, 0x00, 0x00, 0xa0, 0xb4, 0xf2, 0xbe, 0x78, 0x07, 0xb6, 0x3f,
+ 0x90, 0x5e, 0x61, 0xbf, 0x80, 0xb0, 0x8a, 0xbd, 0x78, 0x07, 0x36, 0x40,
+ 0x58, 0x05, 0x82, 0x3f, 0x80, 0xb2, 0x3e, 0x3f, 0x70, 0x5c, 0x2d, 0xbf,
+ 0x80, 0x5d, 0xc7, 0xbf, 0x90, 0x08, 0x50, 0x3f, 0x70, 0x5c, 0xad, 0x3f,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x60, 0xb0, 0x8a, 0x3e, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0x08, 0x50, 0x3e, 0x80, 0x08, 0x50, 0xbe, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x80, 0xb2, 0x3e, 0xbf, 0x40, 0xb0, 0x0a, 0xbe, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x00, 0x00, 0x00, 0x00, 0x40, 0xb0, 0x0a, 0xbe, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x60, 0x5c, 0xad, 0xbe, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x60, 0x5c, 0xad, 0xbe, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x74, 0x5c, 0x2d, 0x40, 0x80, 0x08, 0xd0, 0x3e,
+ 0x60, 0xb0, 0x8a, 0x3e, 0x60, 0x5c, 0xad, 0xbe, 0x68, 0x06, 0x9c, 0x3f,
+ 0x60, 0xb0, 0x0a, 0x3f, 0x70, 0x5c, 0x2d, 0xbf, 0x90, 0x5e, 0x61, 0xbf,
+ 0x80, 0xb2, 0xbe, 0x3f, 0x80, 0xb0, 0x8a, 0xbd, 0x00, 0x00, 0x00, 0x00,
+ 0x60, 0x5c, 0xad, 0xbe, 0x00, 0x00, 0x00, 0x00, 0xa0, 0xb4, 0xf2, 0xbe,
+ 0x60, 0xb0, 0x8a, 0x3e, 0x90, 0x5e, 0x61, 0x3f, 0x60, 0x06, 0x1c, 0xbf,
+ 0xa0, 0xb4, 0xf2, 0xbe, 0xa0, 0xb4, 0xf2, 0xbe, 0x80, 0xb0, 0x8a, 0xbd,
+ 0xa0, 0xb4, 0x72, 0xbf, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0x08, 0x50, 0x3e,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x8a, 0xbd, 0xa0, 0xb4, 0xf2, 0x3e,
+ 0x60, 0xb0, 0x8a, 0x3e, 0xa0, 0xb4, 0xf2, 0xbe, 0x60, 0xb0, 0x8a, 0xbe,
+ 0xa0, 0xb4, 0xf2, 0x3e, 0x80, 0x08, 0x50, 0x3e, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x0a, 0x3e, 0xa0, 0xb4, 0xf2, 0x3e,
+ 0x60, 0x5c, 0xad, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x60, 0xb0, 0x8a, 0x3e,
+ 0xa0, 0xb4, 0xf2, 0xbe, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb2, 0x3e, 0xbf,
+ 0x80, 0x08, 0x50, 0xbe, 0x80, 0x08, 0x50, 0x3e, 0x80, 0x5c, 0xad, 0x3e,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x60, 0xb0, 0x8a, 0x3e, 0xa0, 0xb4, 0xf2, 0x3e,
+ 0x80, 0x08, 0xd0, 0xbe, 0x60, 0x5c, 0xad, 0xbe, 0x70, 0x06, 0x1c, 0x3f,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0x08, 0x50, 0x3e, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0x5c, 0xad, 0x3e, 0x60, 0xb0, 0x8a, 0xbe,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x60, 0xb0, 0x8a, 0x3e, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0x08, 0x50, 0xbe, 0x78, 0x07, 0xb6, 0xbf, 0xa0, 0xb4, 0x72, 0x3f,
+ 0x80, 0xb0, 0x0a, 0x3e, 0xc8, 0xdd, 0xcd, 0xc0, 0x00, 0x00, 0x00, 0x00,
+ 0x58, 0x05, 0x82, 0x3f, 0x90, 0x5e, 0x61, 0x3f, 0xa0, 0xb4, 0xf2, 0xbe,
+ 0x70, 0xb1, 0xa4, 0xbf, 0x80, 0x08, 0x50, 0xbe, 0x00, 0x00, 0x00, 0x00,
+ 0x78, 0x07, 0xb6, 0x3f, 0x90, 0x08, 0x50, 0x3f, 0x60, 0xb0, 0x8a, 0xbe,
+ 0x70, 0x5c, 0x2d, 0xbf, 0x80, 0xb0, 0x8a, 0x3d, 0x88, 0x08, 0xd0, 0x3f,
+ 0x70, 0x5c, 0xad, 0x3f, 0x80, 0xb0, 0x8a, 0xbd, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0x5c, 0xad, 0x3e, 0x80, 0x08, 0x50, 0xbe, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0x08, 0xd0, 0x3e, 0x80, 0x08, 0xd0, 0xbe, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x60, 0xb0, 0x8a, 0x3e, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0x3d, 0x60, 0x5c, 0xad, 0xbe,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0x5b, 0x20, 0x40,
+ 0xa0, 0xb4, 0xf2, 0xbe, 0x80, 0xb0, 0x0a, 0x3e, 0x60, 0xb0, 0x8a, 0xbe,
+ 0x60, 0xb0, 0x8a, 0x3f, 0x70, 0x06, 0x1c, 0x3f, 0x00, 0x00, 0x00, 0x00,
+ 0xa0, 0xb4, 0xf2, 0xbe, 0x60, 0xb0, 0x8a, 0x3f, 0x90, 0x5e, 0x61, 0x3f,
+ 0x60, 0xb0, 0x8a, 0x3e, 0x60, 0xb0, 0x0a, 0xbf, 0x60, 0x5c, 0xad, 0xbe,
+ 0x80, 0xb2, 0x3e, 0xbf, 0x60, 0xb0, 0x0a, 0x3f, 0x70, 0x06, 0x1c, 0x3f,
+ 0x60, 0x06, 0x1c, 0xbf, 0x70, 0x5c, 0x2d, 0xbf, 0x60, 0x5c, 0xad, 0xbe,
+ 0x60, 0x5c, 0xad, 0xbe, 0x60, 0x5b, 0x93, 0xbf, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb2, 0x3e, 0x3f, 0x60, 0xb0, 0x8a, 0xbe,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x70, 0x5c, 0x2d, 0x3f, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x80, 0x08, 0xd0, 0x3e, 0x80, 0x08, 0x50, 0xbe, 0x80, 0x08, 0x50, 0x3e,
+ 0x80, 0x08, 0xd0, 0x3e, 0x40, 0xb0, 0x0a, 0xbe, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0x08, 0x50, 0x3e, 0x60, 0x5c, 0xad, 0xbe, 0x60, 0x5c, 0xad, 0xbe,
+ 0x68, 0x06, 0x9c, 0xbf, 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x70, 0x5c, 0x2d, 0x3f, 0x80, 0x08, 0xd0, 0xbe, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x70, 0x5c, 0x2d, 0x3f, 0x80, 0xb0, 0x8a, 0x3d, 0xa0, 0xb4, 0xf2, 0x3e,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0x50, 0x3e, 0xa0, 0xb4, 0xf2, 0x3e,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0x3d, 0x60, 0xb0, 0x8a, 0x3e,
+ 0x60, 0x5b, 0x93, 0xbf, 0xa0, 0xb4, 0xf2, 0xbe, 0xe4, 0xb0, 0x17, 0xc0,
+ 0x80, 0xb2, 0xbe, 0x3f, 0xa0, 0xb4, 0xf2, 0x3f, 0x54, 0x05, 0x02, 0xc0,
+ 0x60, 0x06, 0x1c, 0xbf, 0x9a, 0x09, 0x6a, 0xc0, 0x70, 0x5c, 0x2d, 0xbf,
+ 0x60, 0x5c, 0xad, 0xbe, 0x90, 0x5e, 0x61, 0xbf, 0x68, 0x06, 0x9c, 0xbf,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x60, 0xb0, 0x8a, 0x3f, 0x90, 0x5e, 0x61, 0xbf,
+ 0xd8, 0x5a, 0x06, 0x40, 0x80, 0xb0, 0x0a, 0x3e, 0x88, 0x08, 0xd0, 0x3f,
+ 0x70, 0xb1, 0xa4, 0x3f, 0xa0, 0xb4, 0xf2, 0x3f, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0x08, 0x50, 0x3e, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0x08, 0x50, 0xbe, 0x80, 0xb0, 0x8a, 0x3d, 0x60, 0x5c, 0xad, 0xbe,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x60, 0xb0, 0x8a, 0x3e, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x00, 0x00, 0x00, 0x00, 0x60, 0xb0, 0x8a, 0xbe, 0x80, 0x08, 0x50, 0xbe,
+ 0x5c, 0xb0, 0x0a, 0x40, 0x80, 0xb2, 0x3e, 0xbf, 0x60, 0xb0, 0x8a, 0x3e,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x90, 0x08, 0x50, 0x3f, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x60, 0x5c, 0xad, 0xbe, 0x70, 0xb1, 0xa4, 0x3f,
+ 0x70, 0xb1, 0xa4, 0x3f, 0x80, 0xb0, 0x0a, 0x3e, 0x60, 0xb0, 0x0a, 0xbf,
+ 0x60, 0x06, 0x1c, 0xbf, 0x60, 0xb0, 0x8a, 0xbe, 0x80, 0x08, 0xd0, 0x3e,
+ 0x60, 0xb0, 0x8a, 0x3f, 0x80, 0x08, 0xd0, 0xbe, 0x60, 0x06, 0x1c, 0xbf,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x40, 0xb0, 0x0a, 0xbe, 0xa0, 0xb4, 0x72, 0xbf,
+ 0x80, 0x08, 0xd0, 0xbe, 0x80, 0xb0, 0x0a, 0x3e, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x0a, 0x3e, 0xa0, 0xb4, 0xf2, 0x3e,
+ 0x80, 0x08, 0xd0, 0xbe, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb2, 0x3e, 0x3f,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0xbd, 0x60, 0xb0, 0x8a, 0x3e,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x60, 0xb0, 0x8a, 0x3e, 0x80, 0xb0, 0x8a, 0x3d, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x58, 0xb0, 0x8a, 0xbf, 0x80, 0x08, 0xd0, 0xbe,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x80, 0x08, 0x50, 0x3e, 0xa0, 0xb4, 0xf2, 0x3e, 0x80, 0x08, 0xd0, 0xbe,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb2, 0x3e, 0x3f, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0x08, 0xd0, 0x3e, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0x08, 0x50, 0x3e, 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0x08, 0xd0, 0x3e,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x5c, 0xad, 0x3e, 0x60, 0xb0, 0x8a, 0x3e,
+ 0x70, 0xb1, 0xa4, 0xbf, 0x80, 0x08, 0x50, 0x3e, 0x70, 0x06, 0x1c, 0x3f,
+ 0xa0, 0x30, 0x11, 0xc1, 0x60, 0xb0, 0x8a, 0x3e, 0x1e, 0x5f, 0x6e, 0xc0,
+ 0x80, 0x08, 0x50, 0xbf, 0x60, 0x5c, 0xad, 0xbe, 0xa8, 0x5f, 0xfb, 0xbf,
+ 0x80, 0x08, 0xd0, 0x3e, 0x40, 0xb0, 0x0a, 0xbe, 0xe8, 0x5b, 0x20, 0xc0,
+ 0x80, 0xb0, 0x0a, 0x3e, 0xa0, 0xb4, 0x72, 0xbf, 0x80, 0x08, 0xd0, 0xbe,
+ 0xec, 0x5b, 0x20, 0x40, 0x80, 0xb0, 0x0a, 0x3e, 0x70, 0x5c, 0x2d, 0x3f,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0xbd, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x0a, 0x3e, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0x50, 0xbe,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0x08, 0xd0, 0xbe,
+ 0x80, 0x08, 0x50, 0xbe, 0xe4, 0xb0, 0x17, 0x40, 0x70, 0x5c, 0xad, 0xbf,
+ 0x70, 0x06, 0x1c, 0x3f, 0x80, 0x08, 0x50, 0x3e, 0x60, 0xb0, 0x0a, 0x3f,
+ 0x80, 0x08, 0x50, 0x3e, 0x60, 0xb0, 0x8a, 0xbe, 0x80, 0x08, 0x50, 0xbe,
+ 0x70, 0xb1, 0xa4, 0x3f, 0x90, 0x08, 0x50, 0x3f, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0x08, 0xd0, 0xbe, 0x80, 0x08, 0x50, 0x3e,
+ 0x60, 0xb0, 0x8a, 0x3e, 0x88, 0x5d, 0xc7, 0x3f, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0x08, 0x50, 0xbf, 0x80, 0xb0, 0x8a, 0xbd, 0x60, 0xb0, 0x0a, 0xbf,
+ 0x58, 0xb0, 0x8a, 0xbf, 0x80, 0x08, 0x50, 0xbe, 0x80, 0x08, 0x50, 0x3e,
+ 0x00, 0x00, 0x00, 0x00, 0x60, 0xb0, 0x8a, 0x3e, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x80, 0x08, 0x50, 0x3e, 0x60, 0xb0, 0x8a, 0xbe, 0x60, 0xb0, 0x8a, 0x3e,
+ 0x60, 0x5b, 0x93, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xa0, 0xb4, 0xf2, 0x3e,
+ 0x80, 0xb0, 0x8a, 0x3d, 0xa0, 0xb4, 0xf2, 0x3e, 0x60, 0xb0, 0x8a, 0x3e,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0x08, 0x50, 0x3e,
+ 0x00, 0x00, 0x00, 0x00, 0x70, 0x5c, 0x2d, 0xbf, 0x58, 0xb0, 0x8a, 0xbf,
+ 0x80, 0x08, 0xd0, 0xbe, 0x60, 0xb0, 0x8a, 0x3e, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0x08, 0x50, 0x3e, 0x60, 0xb0, 0x8a, 0x3e,
+ 0x60, 0x5c, 0xad, 0xbe, 0x80, 0xb0, 0x0a, 0x3e, 0x60, 0xb0, 0x8a, 0x3f,
+ 0x80, 0xb0, 0x8a, 0x3d, 0xa0, 0xb4, 0xf2, 0x3e, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x80, 0x08, 0xd0, 0x3e, 0x80, 0x08, 0x50, 0x3e, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x00, 0x00, 0x00, 0x00, 0x60, 0xb0, 0x8a, 0x3e, 0x80, 0x08, 0xd0, 0xbe,
+ 0x80, 0x08, 0x50, 0xbe, 0x60, 0x5b, 0x13, 0xc0, 0x70, 0x06, 0x1c, 0x3f,
+ 0x90, 0x08, 0x50, 0x3f, 0xf6, 0xef, 0x00, 0xc1, 0x70, 0xb1, 0xa4, 0xbf,
+ 0x94, 0x5e, 0x61, 0xc0, 0x80, 0x08, 0xd0, 0x3e, 0x80, 0x08, 0x50, 0xbe,
+ 0x72, 0x5c, 0x2d, 0xc0, 0x60, 0x06, 0x1c, 0xbf, 0x80, 0x08, 0x50, 0xbe,
+ 0x72, 0x5c, 0x2d, 0xc0, 0x60, 0x5c, 0xad, 0xbe, 0x68, 0x06, 0x9c, 0x3f,
+ 0x80, 0x08, 0xd0, 0xbe, 0x88, 0x5d, 0xc7, 0x3f, 0x68, 0x06, 0x1c, 0x40,
+ 0x78, 0x07, 0xb6, 0x3f, 0x80, 0x08, 0x50, 0x3e, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0x08, 0x50, 0xbe,
+ 0x00, 0x00, 0x00, 0x00, 0x60, 0xb0, 0x8a, 0xbe, 0x80, 0x08, 0x50, 0x3e,
+ 0x60, 0x5c, 0xad, 0xbe, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x60, 0x5c, 0xad, 0xbe, 0x68, 0x06, 0x1c, 0x40,
+ 0x90, 0xb3, 0xd8, 0xbf, 0x70, 0x06, 0x1c, 0x3f, 0x00, 0x00, 0x00, 0x00,
+ 0x70, 0x5c, 0x2d, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x60, 0x5c, 0xad, 0xbe,
+ 0x80, 0x08, 0xd0, 0xbe, 0x80, 0xb2, 0xbe, 0x3f, 0xa0, 0xb4, 0x72, 0x3f,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x40, 0xb0, 0x0a, 0xbe, 0x60, 0xb0, 0x8a, 0xbe,
+ 0xa0, 0xb4, 0xf2, 0x3e, 0x80, 0x5c, 0xad, 0x3e, 0x70, 0x5c, 0xad, 0x3f,
+ 0x60, 0x5c, 0xad, 0xbe, 0x90, 0x5e, 0x61, 0xbf, 0x60, 0xb0, 0x8a, 0xbe,
+ 0x80, 0x08, 0x50, 0xbe, 0x70, 0x5c, 0x2d, 0xbf, 0x00, 0x00, 0x00, 0x00,
+ 0xa0, 0xb4, 0xf2, 0x3e, 0x80, 0xb0, 0x8a, 0xbd, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0x5c, 0xad, 0x3e, 0x60, 0x5c, 0xad, 0xbe, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x58, 0x05, 0x82, 0x3f, 0x00, 0x00, 0x00, 0x00,
+ 0xa0, 0xb4, 0xf2, 0x3e, 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0x08, 0x50, 0x3e,
+ 0x60, 0xb0, 0x8a, 0x3e, 0x80, 0x08, 0x50, 0xbe, 0x60, 0x5c, 0xad, 0xbe,
+ 0x00, 0x00, 0x00, 0x00, 0x60, 0xb0, 0x8a, 0xbe, 0x60, 0xb0, 0x8a, 0xbe,
+ 0x70, 0x5c, 0x2d, 0xbf, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0x08, 0xd0, 0x3e,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x8a, 0xbd, 0x60, 0xb0, 0x0a, 0x3f,
+ 0x60, 0xb0, 0x8a, 0xbe, 0x80, 0x08, 0x50, 0xbe, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x58, 0x05, 0x82, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x80, 0x5c, 0xad, 0x3e,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0x5c, 0xad, 0x3e, 0x80, 0x5c, 0xad, 0x3e,
+ 0x60, 0xb0, 0x8a, 0xbe, 0x60, 0xb0, 0x8a, 0xbe, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x60, 0x5c, 0xad, 0xbe, 0x78, 0x07, 0xb6, 0xbf,
+ 0x80, 0x5c, 0xad, 0x3e, 0xe0, 0x05, 0x0f, 0xc0, 0xb1, 0x31, 0xab, 0xc0,
+ 0x00, 0x00, 0x00, 0x00, 0xf6, 0xb1, 0x31, 0xc0, 0xa0, 0xb4, 0xf2, 0x3e,
+ 0x00, 0x00, 0x00, 0x00, 0xa0, 0xb4, 0xf2, 0xbf, 0x60, 0x5c, 0xad, 0xbe,
+ 0x60, 0xb0, 0x8a, 0xbe, 0xfb, 0x5c, 0xba, 0xc0, 0x70, 0x5c, 0xad, 0xbf,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0x5d, 0xc7, 0xbf,
+ 0xe0, 0x05, 0x0f, 0x40, 0x80, 0xb2, 0xbe, 0x3f, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0x08, 0x50, 0x3e,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0x3d, 0x00, 0x00, 0x00, 0x00,
+ 0x60, 0xb0, 0x8a, 0xbe, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x00, 0x00, 0x00, 0x00, 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x40, 0xb0, 0x0a, 0xbe, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0x08, 0xd0, 0x3e, 0x80, 0xb0, 0x8a, 0xbd,
+ 0xa0, 0x09, 0xea, 0x3f, 0x68, 0x06, 0x9c, 0xbf, 0x80, 0x5c, 0xad, 0x3e,
+ 0x60, 0xb0, 0x0a, 0xbf, 0x70, 0xb1, 0xa4, 0x3f, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0x08, 0x50, 0xbe, 0x80, 0xb0, 0x8a, 0xbd, 0x60, 0x5b, 0x93, 0x3f,
+ 0x90, 0x5e, 0x61, 0x3f, 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb2, 0x3e, 0xbf,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0x08, 0x50, 0x3e, 0x80, 0x5c, 0xad, 0x3e,
+ 0x60, 0xb0, 0x8a, 0x3f, 0x90, 0x5e, 0x61, 0xbf, 0x58, 0xb0, 0x8a, 0xbf,
+ 0x60, 0xb0, 0x0a, 0xbf, 0x60, 0xb0, 0x8a, 0xbe, 0x60, 0x5c, 0xad, 0xbe,
+ 0x58, 0xb0, 0x8a, 0xbf, 0x80, 0x08, 0xd0, 0x3e, 0x60, 0x06, 0x1c, 0xbf,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb2, 0x3e, 0x3f, 0x80, 0x08, 0x50, 0xbf,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb2, 0x3e, 0x3f,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x70, 0x06, 0x1c, 0x3f, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0x08, 0x50, 0x3e, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x0a, 0x3e, 0xa0, 0xb4, 0xf2, 0xbe,
+ 0x60, 0x5c, 0xad, 0xbe, 0x60, 0xb0, 0x8a, 0xbe, 0x58, 0x05, 0x82, 0xbf,
+ 0x70, 0x06, 0x1c, 0x3f, 0x60, 0xb0, 0x0a, 0xbf, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x70, 0x5c, 0x2d, 0x3f, 0x80, 0x08, 0x50, 0xbf, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x70, 0x5c, 0x2d, 0x3f, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x80, 0x08, 0xd0, 0x3e, 0x40, 0xb0, 0x0a, 0xbe, 0x60, 0xb0, 0x8a, 0x3e,
+ 0x80, 0x5c, 0xad, 0x3e, 0x60, 0xb0, 0x8a, 0xbe, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0x08, 0x50, 0x3e, 0x80, 0x08, 0xd0, 0x3e, 0x58, 0x05, 0x82, 0x3f,
+ 0x58, 0xb0, 0x8a, 0xbf, 0x80, 0xb0, 0x8a, 0x3d, 0xe0, 0x05, 0x0f, 0xc0,
+ 0xa0, 0xb4, 0x72, 0xbf, 0x60, 0x06, 0x1c, 0xbf, 0x5c, 0xb0, 0x0a, 0xc0,
+ 0x80, 0x08, 0x50, 0x3e, 0x40, 0xb0, 0x0a, 0xbe, 0x60, 0x5b, 0x93, 0xbf,
+ 0x60, 0xb0, 0x8a, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x94, 0x5e, 0x61, 0xc0,
+ 0x70, 0x5c, 0x2d, 0xbf, 0x60, 0x5b, 0x13, 0xc0, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x78, 0x07, 0xb6, 0xbf, 0x88, 0x5d, 0xc7, 0x3f, 0x80, 0x08, 0x50, 0x3e,
+ 0x60, 0xb0, 0x8a, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x00, 0x00, 0x00, 0x00, 0x60, 0xb0, 0x0a, 0xbf, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xa0, 0xb4, 0x72, 0xbf,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0xbd, 0x00, 0x00, 0x00, 0x00,
+ 0x70, 0x5c, 0x2d, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x40, 0xb0, 0x0a, 0xbe, 0x60, 0xb0, 0x8a, 0x3e,
+ 0x00, 0x00, 0x00, 0x00, 0x90, 0xb3, 0xd8, 0x3f, 0x78, 0x07, 0xb6, 0xbf,
+ 0x60, 0xb0, 0x0a, 0x3f, 0x80, 0x08, 0xd0, 0xbe, 0x60, 0xb0, 0x8a, 0x3f,
+ 0x80, 0x08, 0x50, 0x3e, 0x80, 0x08, 0xd0, 0xbe, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x60, 0x5b, 0x93, 0x3f, 0x70, 0x06, 0x1c, 0x3f, 0x80, 0xb0, 0x8a, 0xbd,
+ 0xa0, 0xb4, 0xf2, 0xbe, 0x60, 0xb0, 0x8a, 0xbe, 0xa0, 0xb4, 0xf2, 0x3e,
+ 0x80, 0x5c, 0xad, 0x3e, 0x80, 0xb2, 0x3e, 0x3f, 0xa0, 0xb4, 0xf2, 0xbe,
+ 0xa0, 0xb4, 0x72, 0xbf, 0x80, 0x08, 0xd0, 0xbe, 0x80, 0x08, 0x50, 0x3e,
+ 0xd8, 0x5a, 0x06, 0xc0, 0x60, 0x5c, 0xad, 0xbe, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x90, 0x5e, 0x61, 0xbf, 0x80, 0x08, 0x50, 0x3e, 0x70, 0x5c, 0xad, 0x3f,
+ 0x60, 0xb0, 0x8a, 0x3e, 0x40, 0xb0, 0x0a, 0xbe, 0x60, 0xb0, 0x8a, 0x3e,
+ 0x60, 0xb0, 0x8a, 0x3f, 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0x08, 0xd0, 0xbe,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x68, 0x06, 0x9c, 0x3f, 0x80, 0x5c, 0xad, 0x3e,
+ 0x80, 0x08, 0x50, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x60, 0x5c, 0xad, 0xbe, 0x80, 0xb0, 0x0a, 0x3e, 0x54, 0x05, 0x02, 0xc0,
+ 0x60, 0x5c, 0xad, 0xbe, 0x80, 0xb0, 0x0a, 0x3e, 0x90, 0x5e, 0x61, 0xbf,
+ 0x60, 0xb0, 0x8a, 0x3e, 0x78, 0x07, 0xb6, 0x3f, 0x80, 0x08, 0x50, 0x3e,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x0a, 0x3e, 0x70, 0xb1, 0xa4, 0x3f,
+ 0x00, 0x00, 0x00, 0x00, 0xa0, 0xb4, 0xf2, 0xbe, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x70, 0x5c, 0xad, 0x3f, 0x80, 0x08, 0xd0, 0x3e, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0x08, 0x50, 0xbe, 0xa0, 0xb4, 0x72, 0xbf,
+ 0x58, 0x05, 0x82, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x60, 0xb0, 0x0a, 0x3f,
+ 0x90, 0xb3, 0xd8, 0xbf, 0x58, 0x05, 0x02, 0x40, 0x60, 0x06, 0x1c, 0xbf,
+ 0xe4, 0xb0, 0x17, 0xc0, 0x80, 0x08, 0xd0, 0x3e, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x90, 0xb3, 0x58, 0xc0, 0x80, 0xb2, 0x3e, 0x3f, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x29, 0x31, 0x9e, 0xc0, 0x80, 0xb0, 0x8a, 0xbd, 0x8a, 0x08, 0x50, 0xc0,
+ 0xa0, 0xb4, 0xf2, 0xbe, 0x80, 0xb2, 0xbe, 0xbf, 0xa0, 0x09, 0xea, 0x3f,
+ 0x60, 0xb0, 0x0a, 0x3f, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x60, 0x5c, 0xad, 0xbe, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0x08, 0x50, 0xbf,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x90, 0x5e, 0x61, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x60, 0xb0, 0x8a, 0x3e,
+ 0x60, 0xb0, 0x0a, 0xbf, 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0x08, 0x50, 0x3e,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0x08, 0x50, 0xbe, 0x58, 0x05, 0x02, 0x40,
+ 0x80, 0x5d, 0xc7, 0xbf, 0x80, 0x5c, 0xad, 0x3e, 0x90, 0x5e, 0x61, 0x3f,
+ 0x90, 0x08, 0x50, 0x3f, 0xa0, 0xb4, 0xf2, 0x3e, 0x90, 0x5e, 0x61, 0xbf,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x68, 0x06, 0x9c, 0x3f, 0x70, 0x5c, 0x2d, 0x3f,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x0a, 0x3e,
+ 0xa0, 0xb4, 0x72, 0x3f, 0x80, 0x5c, 0xad, 0x3e, 0xa0, 0xb4, 0xf2, 0x3e,
+ 0x80, 0x08, 0xd0, 0xbe, 0x90, 0x5e, 0x61, 0xbf, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x60, 0xb0, 0x8a, 0xbe, 0x80, 0xb2, 0x3e, 0x40, 0x60, 0x5c, 0xad, 0xbe,
+ 0x80, 0x08, 0xd0, 0x3e, 0x80, 0x08, 0xd0, 0xbe, 0x58, 0x05, 0x82, 0x3f,
+ 0x80, 0x08, 0xd0, 0x3e, 0x80, 0x08, 0xd0, 0xbe, 0x80, 0xb2, 0x3e, 0xbf,
+ 0x88, 0x5d, 0xc7, 0x3f, 0x60, 0xb0, 0x8a, 0x3e, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0x08, 0x50, 0xbe, 0x60, 0xb0, 0x8a, 0xbe, 0x60, 0xb0, 0x8a, 0xbe,
+ 0x60, 0xb0, 0x8a, 0x3e, 0xa0, 0xb4, 0x72, 0x3f, 0x80, 0x08, 0xd0, 0xbe,
+ 0x70, 0x5c, 0x2d, 0xbf, 0xa0, 0xb4, 0xf2, 0x3e, 0x80, 0x08, 0xd0, 0x3e,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x5c, 0xad, 0x3e, 0x98, 0x09, 0xea, 0xbf,
+ 0xe4, 0xb0, 0x17, 0xc0, 0x90, 0x08, 0x50, 0x3f, 0x78, 0x07, 0xb6, 0xbf,
+ 0x80, 0x5c, 0xad, 0x3e, 0x60, 0x06, 0x1c, 0xbf, 0x60, 0x5b, 0x13, 0xc0,
+ 0x60, 0x5b, 0x93, 0x3f, 0x80, 0xb0, 0x8a, 0xbd, 0x70, 0x5c, 0xad, 0xbf,
+ 0x60, 0xb0, 0x8a, 0x3e, 0xa0, 0xb4, 0xf2, 0x3e, 0xa0, 0xb4, 0xf2, 0xbe,
+ 0x80, 0x08, 0x50, 0xbe, 0x90, 0x5e, 0x61, 0x3f, 0x90, 0x08, 0x50, 0x3f,
+ 0x80, 0x5c, 0xad, 0x3e, 0x80, 0x5c, 0xad, 0x3e, 0x80, 0x5c, 0xad, 0x3e,
+ 0x70, 0x06, 0x1c, 0x3f, 0x80, 0xb0, 0x0a, 0x3e, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0x08, 0xd0, 0x3e, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0x50, 0xbe, 0x80, 0x08, 0x50, 0xbe,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x60, 0xb0, 0x8a, 0x3e, 0x60, 0xb0, 0x0a, 0x3f,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0xbd, 0x60, 0xb0, 0x0a, 0xbf,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x64, 0x5b, 0x13, 0x40, 0xa0, 0xb4, 0xf2, 0x3e,
+ 0xa0, 0xb4, 0x72, 0x3f, 0x60, 0x5c, 0xad, 0xbe, 0x60, 0xb0, 0x8a, 0x3e,
+ 0x70, 0x5c, 0x2d, 0x3f, 0xa0, 0xb4, 0xf2, 0x3e, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0x08, 0x50, 0xbf, 0x00, 0x00, 0x00, 0x00,
+ 0x60, 0xb0, 0x8a, 0x3f, 0x60, 0xb0, 0x0a, 0xbf, 0x60, 0xb0, 0x8a, 0x3e,
+ 0x80, 0x5c, 0xad, 0x3e, 0xa0, 0xb4, 0x72, 0x3f, 0x80, 0x08, 0x50, 0x3e,
+ 0x70, 0x06, 0x1c, 0x3f, 0x60, 0xb0, 0x8a, 0xbe, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x80, 0x08, 0x50, 0x3e, 0x80, 0xb0, 0x0a, 0x3e, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x60, 0xb0, 0x8a, 0xbe,
+ 0x60, 0xb0, 0x8a, 0x3e, 0x40, 0xb0, 0x0a, 0xbe, 0x00, 0x00, 0x00, 0x00,
+ 0x60, 0x5c, 0xad, 0xbe, 0x80, 0xb0, 0x8a, 0x3d, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x60, 0xb0, 0x8a, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x60, 0xb0, 0x8a, 0xbe,
+ 0x80, 0x08, 0x50, 0x3e, 0x80, 0x08, 0xd0, 0xbe, 0x90, 0xb3, 0xd8, 0xbf,
+ 0xa0, 0xb4, 0xf2, 0x3e, 0x60, 0xb0, 0x8a, 0xbe, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0x08, 0xd0, 0x3e, 0x90, 0x5e, 0x61, 0xbf, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x60, 0xb0, 0x8a, 0xbe, 0x90, 0x5e, 0x61, 0xbf,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0x08, 0x50, 0xbf, 0x60, 0xb0, 0x8a, 0xbe,
+ 0x60, 0x5c, 0xad, 0xbe, 0x80, 0x08, 0x50, 0x3e, 0x80, 0x08, 0xd0, 0xbe,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x90, 0x5e, 0x61, 0xbf, 0x80, 0xb0, 0x0a, 0x3e,
+ 0xa0, 0xb4, 0xf2, 0xbe, 0x90, 0xb3, 0xd8, 0xbf, 0x60, 0xb0, 0x8a, 0x3e,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x80, 0x5c, 0xad, 0x3e,
+ 0xa0, 0xb4, 0x72, 0xbf, 0x80, 0x08, 0x50, 0x3e, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x00, 0x00, 0x00, 0x00, 0x70, 0x5c, 0x2d, 0xbf, 0x60, 0xb0, 0x8a, 0xbe,
+ 0x90, 0x5e, 0x61, 0xbf, 0x80, 0x08, 0x50, 0xbe, 0x60, 0xb0, 0x8a, 0xbe,
+ 0x80, 0x08, 0x50, 0x3e, 0x60, 0xb0, 0x8a, 0xbe, 0x60, 0x5c, 0xad, 0xbe,
+ 0xa0, 0xb4, 0x72, 0xbf, 0x60, 0xb0, 0x8a, 0x3f, 0x60, 0xb0, 0x0a, 0x3f,
+ 0x84, 0x5d, 0x47, 0xc0, 0x6c, 0xb1, 0x24, 0xc0, 0xa8, 0x5f, 0xfb, 0xbf,
+ 0xa0, 0xb4, 0x72, 0xbf, 0x80, 0xb2, 0x3e, 0x3f, 0x80, 0x5d, 0xc7, 0xbf,
+ 0x60, 0x06, 0x1c, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x17, 0x30, 0x84, 0xc0,
+ 0x60, 0x5b, 0x93, 0x3f, 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb2, 0x3e, 0xbf,
+ 0xa0, 0xb4, 0xf2, 0xbe, 0x88, 0x08, 0xd0, 0xbf, 0x80, 0x08, 0xd0, 0xbe,
+ 0x80, 0x08, 0xd0, 0x3e, 0x70, 0xb1, 0xa4, 0x3f, 0x80, 0x5c, 0xad, 0x3e,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x00, 0x00, 0x00, 0x00, 0x40, 0xb0, 0x0a, 0xbe, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x60, 0xb0, 0x8a, 0xbe, 0x80, 0x08, 0x50, 0x3e,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x0a, 0x3e, 0x60, 0x06, 0x1c, 0xbf,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x64, 0x5b, 0x13, 0x40, 0x60, 0xb0, 0x8a, 0x3e,
+ 0x58, 0x05, 0x82, 0x3f, 0xa0, 0xb4, 0xf2, 0xbe, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x70, 0x5c, 0x2d, 0x3f, 0x80, 0x5c, 0xad, 0x3e, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x70, 0x5c, 0x2d, 0xbf, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x60, 0xb0, 0x8a, 0x3f, 0x60, 0xb0, 0x0a, 0xbf, 0x60, 0xb0, 0x8a, 0x3e,
+ 0xa0, 0xb4, 0xf2, 0x3e, 0x60, 0x5b, 0x93, 0x3f, 0x80, 0x08, 0x50, 0x3e,
+ 0x60, 0xb0, 0x0a, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x60, 0x06, 0x1c, 0xbf,
+ 0x70, 0xb1, 0xa4, 0xbf, 0x60, 0xb0, 0x8a, 0x3e, 0x80, 0x08, 0x50, 0x3e,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0xbd, 0x60, 0x06, 0x1c, 0xbf,
+ 0x80, 0x08, 0x50, 0xbe, 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0x5c, 0xad, 0x3e,
+ 0x80, 0xb2, 0x3e, 0xbf, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb2, 0x3e, 0xbf,
+ 0x80, 0x08, 0x50, 0xbe, 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x40, 0xb0, 0x0a, 0xbe, 0x70, 0x5c, 0x2d, 0xbf,
+ 0x80, 0x08, 0x50, 0xbe, 0x60, 0xb0, 0x0a, 0xbf, 0x60, 0x5b, 0x93, 0xbf,
+ 0x80, 0x5c, 0xad, 0x3e, 0x80, 0x08, 0x50, 0x3e, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x00, 0x00, 0x00, 0x00, 0x70, 0x5c, 0x2d, 0xbf, 0x80, 0x08, 0x50, 0xbe,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x5c, 0xad, 0x3e, 0x80, 0x08, 0x50, 0xbf,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0x08, 0x50, 0xbf, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0x5c, 0xad, 0x3e, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x60, 0x06, 0x1c, 0xbf, 0x80, 0x5d, 0xc7, 0xbf,
+ 0x80, 0xb0, 0x8a, 0x3d, 0xfc, 0x5c, 0x3a, 0xc0, 0x90, 0x5e, 0x61, 0xbf,
+ 0x68, 0x06, 0x9c, 0x3f, 0xea, 0x5b, 0xa0, 0x40, 0x80, 0x5d, 0xc7, 0xbf,
+ 0x58, 0x05, 0x82, 0xbf, 0x60, 0x06, 0x1c, 0xbf, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x5c, 0xb0, 0x0a, 0x40, 0x60, 0x5b, 0x93, 0x3f, 0x78, 0x07, 0xb6, 0x3f,
+ 0x00, 0x00, 0x00, 0x00, 0x74, 0x5c, 0x2d, 0x40, 0x64, 0x5b, 0x13, 0x40,
+ 0xa0, 0xb4, 0xf2, 0xbe, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x60, 0xb0, 0x8a, 0xbe,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0xbd, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x60, 0xb0, 0x8a, 0xbe,
+ 0x80, 0x08, 0x50, 0x3e, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x60, 0xb0, 0x0a, 0xbf, 0x80, 0xb0, 0x0a, 0x3e, 0xe4, 0xb0, 0x17, 0x40,
+ 0x60, 0xb0, 0x8a, 0x3e, 0x90, 0x5e, 0x61, 0x3f, 0x80, 0x08, 0xd0, 0xbe,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x70, 0x06, 0x1c, 0x3f, 0x80, 0x08, 0xd0, 0x3e,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0x08, 0x50, 0x3e, 0x80, 0x08, 0x50, 0xbf,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x60, 0xb0, 0x8a, 0x3f, 0x60, 0xb0, 0x0a, 0xbf,
+ 0x80, 0x08, 0x50, 0x3e, 0x80, 0x08, 0xd0, 0x3e, 0x58, 0x05, 0x82, 0x3f,
+ 0x80, 0x5c, 0xad, 0x3e, 0x70, 0x06, 0x1c, 0x3f, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0x08, 0xd0, 0xbe, 0x68, 0x06, 0x9c, 0xbf, 0x60, 0xb0, 0x8a, 0x3e,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x70, 0x5c, 0x2d, 0xbf, 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x60, 0xb0, 0x0a, 0x3f, 0x70, 0x5c, 0x2d, 0xbf, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x60, 0x06, 0x1c, 0xbf, 0x40, 0xb0, 0x0a, 0xbe, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0x50, 0xbe,
+ 0x60, 0x5c, 0xad, 0xbe, 0x60, 0x5c, 0xad, 0xbe, 0x60, 0x5c, 0xad, 0xbe,
+ 0x70, 0xb1, 0xa4, 0xbf, 0x60, 0xb0, 0x8a, 0x3e, 0x80, 0x08, 0x50, 0x3e,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x8a, 0xbd, 0x70, 0x5c, 0x2d, 0xbf,
+ 0x80, 0x08, 0x50, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0xd0, 0x3e,
+ 0x80, 0x08, 0x50, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb2, 0x3e, 0xbf,
+ 0x60, 0xb0, 0x8a, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x60, 0xb0, 0x8a, 0x3e,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0x08, 0x50, 0xbe, 0xa0, 0xb4, 0xf2, 0xbe,
+ 0xa0, 0xb4, 0xf2, 0xbf, 0xa0, 0xb4, 0x72, 0xbf, 0x98, 0x09, 0xea, 0xbf,
+ 0x58, 0x05, 0x82, 0x3f, 0x78, 0x07, 0xb6, 0x3f, 0x9c, 0x09, 0x6a, 0x40,
+ 0x70, 0x5c, 0xad, 0xbf, 0x60, 0x5b, 0x93, 0xbf, 0x80, 0xb2, 0x3e, 0xbf,
+ 0x00, 0x00, 0x00, 0x00, 0x60, 0xb0, 0x0a, 0x3f, 0x60, 0xb0, 0x0a, 0xbf,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x90, 0x5e, 0x61, 0x3f, 0x80, 0x08, 0xd0, 0xbe,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x90, 0x5e, 0x61, 0x3f, 0x58, 0x05, 0x82, 0x3f,
+ 0x98, 0x5e, 0xe1, 0x3f, 0x60, 0x5c, 0xad, 0xbe, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0xbd, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x40, 0xb0, 0x0a, 0xbe, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0x08, 0x50, 0xbe,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x60, 0x5c, 0xad, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x00, 0x00, 0x00, 0x00, 0x60, 0x5c, 0xad, 0xbe, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x64, 0x5b, 0x13, 0x40, 0x60, 0xb0, 0x8a, 0x3e, 0xa0, 0xb4, 0x72, 0x3f,
+ 0x80, 0x08, 0xd0, 0xbe, 0x80, 0xb0, 0x8a, 0x3d, 0x70, 0x06, 0x1c, 0x3f,
+ 0x60, 0xb0, 0x8a, 0x3e, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0x08, 0x50, 0xbf, 0x80, 0xb0, 0x8a, 0x3d, 0x60, 0xb0, 0x8a, 0x3f,
+ 0x80, 0x08, 0xd0, 0xbe, 0x60, 0xb0, 0x8a, 0x3e, 0xa0, 0xb4, 0xf2, 0x3e,
+ 0x58, 0x05, 0x82, 0x3f, 0x60, 0xb0, 0x8a, 0x3e, 0xa0, 0xb4, 0xf2, 0x3e,
+ 0x80, 0x08, 0x50, 0xbe, 0xa0, 0xb4, 0xf2, 0xbe, 0x70, 0xb1, 0xa4, 0xbf,
+ 0x80, 0x08, 0xd0, 0x3e, 0x60, 0xb0, 0x8a, 0x3e, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb2, 0x3e, 0xbf, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb2, 0x3e, 0x3f, 0x90, 0x5e, 0x61, 0xbf,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0x08, 0xd0, 0xbe, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x00, 0x00, 0x00, 0x00, 0x60, 0xb0, 0x8a, 0x3e, 0x80, 0x08, 0xd0, 0xbe,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x60, 0xb0, 0x8a, 0xbe, 0x60, 0x5c, 0xad, 0xbe,
+ 0x60, 0x06, 0x1c, 0xbf, 0x60, 0x5b, 0x93, 0xbf, 0x80, 0x08, 0xd0, 0x3e,
+ 0x80, 0x08, 0x50, 0x3e, 0x80, 0xb0, 0x0a, 0x3e, 0x60, 0xb0, 0x8a, 0xbe,
+ 0x80, 0xb2, 0x3e, 0xbf, 0x60, 0x5c, 0xad, 0xbe, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x90, 0x5e, 0x61, 0x3f, 0x90, 0x5e, 0x61, 0xbf, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x60, 0xb0, 0x0a, 0xbf, 0x60, 0xb0, 0x8a, 0xbe, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0x5c, 0xad, 0x3e, 0x60, 0x5c, 0xad, 0xbe, 0x60, 0x5c, 0xad, 0xbe,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x90, 0xb3, 0x58, 0xc0, 0x68, 0x06, 0x9c, 0xbf,
+ 0x68, 0x06, 0x9c, 0xbf, 0x70, 0x5c, 0xad, 0x3f, 0xe4, 0xb0, 0x17, 0x40,
+ 0x18, 0xb4, 0x65, 0x40, 0x60, 0x5b, 0x93, 0xbf, 0xe0, 0x05, 0x0f, 0xc0,
+ 0x60, 0x06, 0x1c, 0xbf, 0x80, 0xb0, 0x8a, 0xbd, 0x60, 0xb0, 0x8a, 0x3f,
+ 0x90, 0x5e, 0x61, 0xbf, 0x80, 0xb0, 0x8a, 0xbd, 0x60, 0xb0, 0x8a, 0x3f,
+ 0x90, 0x08, 0x50, 0x3f, 0x60, 0xb0, 0x8a, 0xbe, 0x70, 0x5c, 0x2d, 0x3f,
+ 0x80, 0xb2, 0x3e, 0x3f, 0x5c, 0xb0, 0x0a, 0x40, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0x08, 0x50, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0x3d, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0x08, 0x50, 0x3e, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x00, 0x00, 0x00, 0x00, 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x0a, 0x3e, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x60, 0xb0, 0x8a, 0xbe, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0x08, 0xd0, 0xbe,
+ 0x00, 0x00, 0x00, 0x00, 0xe4, 0xb0, 0x17, 0x40, 0x80, 0x08, 0xd0, 0x3e,
+ 0x58, 0x05, 0x82, 0x3f, 0x60, 0xb0, 0x0a, 0xbf, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x70, 0x5c, 0x2d, 0x3f, 0x80, 0x08, 0x50, 0x3e, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x90, 0x5e, 0x61, 0xbf, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x68, 0x06, 0x9c, 0x3f, 0x60, 0xb0, 0x0a, 0xbf, 0x60, 0xb0, 0x8a, 0x3e,
+ 0x60, 0xb0, 0x0a, 0x3f, 0x60, 0x5b, 0x93, 0x3f, 0x60, 0xb0, 0x8a, 0x3e,
+ 0xa0, 0xb4, 0xf2, 0x3e, 0x60, 0xb0, 0x8a, 0xbe, 0x60, 0x06, 0x1c, 0xbf,
+ 0x80, 0xb2, 0xbe, 0xbf, 0x70, 0x06, 0x1c, 0x3f, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0x5c, 0xad, 0x3e, 0x80, 0xb0, 0x8a, 0xbd, 0x70, 0x5c, 0x2d, 0xbf,
+ 0x80, 0x08, 0x50, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb2, 0x3e, 0x3f,
+ 0x90, 0x5e, 0x61, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0x08, 0x50, 0xbe, 0xa0, 0xb4, 0xf2, 0xbe, 0x80, 0x08, 0x50, 0x3e,
+ 0xa0, 0xb4, 0xf2, 0xbe, 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0x08, 0x50, 0x3e,
+ 0x80, 0x08, 0x50, 0xbe, 0x80, 0x08, 0xd0, 0xbe, 0x90, 0xb3, 0xd8, 0xbf,
+ 0x80, 0x08, 0xd0, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0x50, 0x3e,
+ 0x00, 0x00, 0x00, 0x00, 0x70, 0x5c, 0x2d, 0xbf, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x90, 0x08, 0x50, 0x3f, 0x90, 0x5e, 0x61, 0xbf,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0x08, 0x50, 0xbe, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0x08, 0xd0, 0xbe, 0x80, 0x08, 0x50, 0x3e, 0x60, 0xb0, 0x0a, 0xbf,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x0a, 0x3e, 0x60, 0x5b, 0x13, 0xc0,
+ 0x70, 0xb1, 0xa4, 0xbf, 0x00, 0x08, 0x43, 0xc0, 0x58, 0x05, 0x82, 0x3f,
+ 0xfc, 0x5c, 0x3a, 0x40, 0xa0, 0xb4, 0x72, 0xbf, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x54, 0x05, 0x02, 0xc0, 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb0, 0x8a, 0x3d,
+ 0xd8, 0x5a, 0x06, 0x40, 0x80, 0x08, 0x50, 0xbe, 0x00, 0x00, 0x00, 0x00,
+ 0x60, 0x5b, 0x93, 0x3f, 0x80, 0x5c, 0xad, 0x3e, 0x60, 0xb0, 0x0a, 0x3f,
+ 0xa0, 0xb4, 0x72, 0x3f, 0x60, 0xb0, 0x8a, 0x3f, 0x78, 0x07, 0xb6, 0x3f,
+ 0x70, 0x06, 0x1c, 0x3f, 0x80, 0xb0, 0x8a, 0x3d, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0x08, 0x50, 0x3e, 0x00, 0x00, 0x00, 0x00,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb0, 0x8a, 0x3d, 0x60, 0xb0, 0x8a, 0x3e,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0x08, 0x50, 0xbe, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0x08, 0x50, 0xbe,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb0, 0x8a, 0x3d,
+ 0xa0, 0xb4, 0xf2, 0xbe, 0x80, 0xb0, 0x8a, 0xbd, 0xe0, 0x05, 0x0f, 0x40,
+ 0x80, 0x5c, 0xad, 0x3e, 0xa0, 0xb4, 0x72, 0x3f, 0x80, 0x08, 0xd0, 0xbe,
+ 0x80, 0x08, 0x50, 0x3e, 0x60, 0xb0, 0x0a, 0x3f, 0x60, 0xb0, 0x8a, 0x3e,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0x08, 0x50, 0x3e, 0x70, 0x5c, 0x2d, 0xbf,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x60, 0x5b, 0x93, 0x3f, 0xa0, 0xb4, 0xf2, 0xbe,
+ 0x80, 0xb0, 0x0a, 0x3e, 0xa0, 0xb4, 0xf2, 0x3e, 0x60, 0x5b, 0x93, 0x3f,
+ 0x80, 0x5c, 0xad, 0x3e, 0xa0, 0xb4, 0xf2, 0x3e, 0x80, 0x08, 0x50, 0x3e,
+ 0x00, 0x00, 0x00, 0x00, 0x68, 0x06, 0x9c, 0xbf, 0x60, 0xb0, 0x0a, 0xbf,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0x08, 0xd0, 0xbe, 0x80, 0xb0, 0x8a, 0xbd, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0x08, 0xd0, 0x3e, 0x90, 0x5e, 0x61, 0xbf, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0x08, 0xd0, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x60, 0xb0, 0x8a, 0xbe,
+ 0x00, 0x00, 0x00, 0x00, 0x60, 0xb0, 0x0a, 0xbf, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x60, 0x5b, 0x93, 0xbf, 0xa0, 0xb4, 0xf2, 0xbe, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0x08, 0xd0, 0xbe,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0x08, 0xd0, 0x3e,
+ 0x90, 0x5e, 0x61, 0xbf, 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0x5c, 0xad, 0x3e,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x40, 0xb0, 0x0a, 0xbe, 0x00, 0x00, 0x00, 0x00,
+ 0x60, 0x06, 0x1c, 0xbf, 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x00, 0x00, 0x00, 0x00, 0xa0, 0xb4, 0xf2, 0x3e, 0xe4, 0xb0, 0x17, 0xc0,
+ 0x58, 0x05, 0x82, 0x3f, 0x78, 0x07, 0xb6, 0x3f, 0xa6, 0x5f, 0xfb, 0xc0,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x5c, 0xb0, 0x0a, 0xc0, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x78, 0x07, 0xb6, 0x3f, 0x60, 0xb0, 0x0a, 0xbf,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0x08, 0x50, 0x3e, 0x58, 0xb0, 0x8a, 0xbf,
+ 0x68, 0x06, 0x9c, 0x3f, 0x90, 0x08, 0x50, 0x3f, 0x60, 0xb0, 0x8a, 0x3e,
+ 0x80, 0x08, 0x50, 0xbf, 0x80, 0x5c, 0xad, 0x3e, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0x08, 0x50, 0xbe,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb0, 0x8a, 0xbd, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x60, 0x5c, 0xad, 0xbe, 0x80, 0x08, 0x50, 0x3e, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0x08, 0x50, 0x3e, 0xa0, 0xb4, 0xf2, 0x3e,
+ 0xe4, 0xb0, 0x17, 0x40, 0x60, 0x06, 0x1c, 0xbf, 0x90, 0x08, 0x50, 0x3f,
+ 0x60, 0xb0, 0x8a, 0xbe, 0xa0, 0xb4, 0xf2, 0x3e, 0x70, 0x06, 0x1c, 0x3f,
+ 0x60, 0xb0, 0x0a, 0x3f, 0x80, 0xb0, 0x8a, 0x3d, 0x60, 0xb0, 0x0a, 0xbf,
+ 0x90, 0x5e, 0x61, 0xbf, 0x80, 0xb0, 0x8a, 0x3d, 0x90, 0x5e, 0x61, 0x3f,
+ 0x60, 0xb0, 0x0a, 0xbf, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0x5c, 0xad, 0x3e,
+ 0x70, 0xb1, 0xa4, 0x3f, 0x80, 0x08, 0x50, 0xbe, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0x50, 0xbe, 0x58, 0x05, 0x82, 0xbf,
+ 0x90, 0x5e, 0x61, 0xbf, 0x60, 0xb0, 0x8a, 0x3e, 0x60, 0x5c, 0xad, 0xbe,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb2, 0x3e, 0xbf,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0x08, 0xd0, 0x3e, 0x80, 0xb2, 0x3e, 0xbf,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x0a, 0x3e, 0x60, 0xb0, 0x8a, 0x3e,
+ 0x70, 0x5c, 0x2d, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0xd0, 0xbe,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x00, 0x00, 0x00, 0x00, 0x58, 0x05, 0x82, 0xbf, 0x90, 0x5e, 0x61, 0xbf,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0x08, 0x50, 0xbe, 0x60, 0xb0, 0x0a, 0xbf, 0x80, 0xb0, 0x8a, 0x3d,
+ 0xa0, 0xb4, 0xf2, 0x3e, 0x70, 0x5c, 0x2d, 0xbf, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xa0, 0xb4, 0xf2, 0x3e, 0xa0, 0xb4, 0xf2, 0xbe,
+ 0x80, 0x08, 0x50, 0x3e, 0x80, 0x08, 0xd0, 0xbe, 0x60, 0xb0, 0x8a, 0x3e,
+ 0x80, 0x08, 0x50, 0xbe, 0x90, 0x08, 0x50, 0x3f, 0xa0, 0x09, 0xea, 0x3f,
+ 0x70, 0x5c, 0x2d, 0xbf, 0xa0, 0xb4, 0x72, 0x3f, 0x80, 0xb0, 0x8a, 0x3d,
+ 0xf0, 0x06, 0x29, 0xc1, 0x70, 0x5c, 0x2d, 0x3f, 0xa8, 0x5f, 0xfb, 0xbf,
+ 0x60, 0xb0, 0x8a, 0x3e, 0x80, 0xb0, 0x8a, 0x3d, 0xa0, 0xb4, 0x72, 0x3f,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x0a, 0x3e, 0x70, 0x5c, 0x2d, 0xbf,
+ 0xa0, 0xb4, 0xf2, 0x3e, 0x40, 0xb0, 0x0a, 0xbe, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x60, 0xb0, 0x8a, 0x3e, 0xfc, 0x5c, 0x3a, 0xc0, 0xa0, 0xb4, 0xf2, 0x3e,
+ 0x60, 0xb0, 0x8a, 0x3e, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0x08, 0x50, 0xbe, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x00, 0x00, 0x00, 0x00, 0x40, 0xb0, 0x0a, 0xbe, 0x60, 0xb0, 0x8a, 0xbe,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0x50, 0xbe,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x60, 0x5c, 0xad, 0xbe, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x60, 0xb0, 0x0a, 0x3f, 0xe4, 0xb0, 0x17, 0x40, 0x60, 0xb0, 0x8a, 0xbe,
+ 0x60, 0xb0, 0x8a, 0x3f, 0x80, 0xb0, 0x8a, 0x3d, 0x00, 0x00, 0x00, 0x00,
+ 0x70, 0x06, 0x1c, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0x08, 0x50, 0xbe, 0x90, 0x5e, 0x61, 0xbf, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x80, 0x08, 0xd0, 0x3e, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0x08, 0xd0, 0x3e,
+ 0x60, 0xb0, 0x8a, 0x3e, 0x90, 0xb3, 0xd8, 0x3f, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x60, 0xb0, 0x8a, 0xbe, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x70, 0x5c, 0x2d, 0xbf, 0x70, 0x5c, 0x2d, 0xbf, 0x80, 0x08, 0x50, 0x3e,
+ 0x60, 0xb0, 0x8a, 0xbe, 0x80, 0x08, 0x50, 0xbe, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x60, 0x06, 0x1c, 0xbf, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0x08, 0x50, 0x3e,
+ 0x60, 0xb0, 0x8a, 0xbe, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x70, 0x06, 0x1c, 0x3f, 0x80, 0x08, 0x50, 0xbe, 0x60, 0xb0, 0x8a, 0xbe,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x0a, 0x3e, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0x08, 0x50, 0xbe, 0x40, 0xb0, 0x0a, 0xbe, 0x60, 0x06, 0x1c, 0xbf,
+ 0x80, 0xb2, 0x3e, 0xbf, 0x80, 0x08, 0x50, 0x3e, 0x80, 0x08, 0x50, 0xbe,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb2, 0x3e, 0xbf,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x60, 0xb0, 0x8a, 0x3e, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0x08, 0x50, 0x3e, 0xa0, 0xb4, 0xf2, 0x3e,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x00, 0x00, 0x00, 0x00, 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb2, 0x3e, 0xbf,
+ 0x58, 0x05, 0x82, 0x3f, 0x80, 0xb2, 0xbe, 0x3f, 0xa0, 0xb4, 0x72, 0x3f,
+ 0x80, 0x08, 0xd0, 0x3e, 0x62, 0x5b, 0x13, 0xc1, 0x70, 0x5c, 0x2d, 0xbf,
+ 0xe4, 0xb0, 0x17, 0xc0, 0x60, 0xb0, 0x8a, 0x3f, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x70, 0x5c, 0xad, 0xbf, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0xbd, 0x68, 0x06, 0x9c, 0x3f,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb2, 0x3e, 0x3f, 0x58, 0x05, 0x82, 0xbf,
+ 0xa8, 0x5f, 0xfb, 0x3f, 0x80, 0xb0, 0x0a, 0x3e, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0x08, 0x50, 0x3e, 0x60, 0x5c, 0xad, 0xbe,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0x3d, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0x50, 0xbe,
+ 0x60, 0x06, 0x1c, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x60, 0x06, 0x1c, 0xbf,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x70, 0x5c, 0x2d, 0xbf, 0x80, 0x5c, 0xad, 0x3e, 0xec, 0x5b, 0x20, 0x40,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x78, 0x07, 0xb6, 0x3f, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0x08, 0xd0, 0xbe, 0x80, 0x08, 0xd0, 0x3e, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x0a, 0x3e, 0x60, 0xb0, 0x0a, 0xbf,
+ 0x80, 0xb0, 0x8a, 0xbd, 0xa0, 0xb4, 0xf2, 0x3e, 0x80, 0x08, 0x50, 0x3e,
+ 0x68, 0x06, 0x9c, 0x3f, 0x80, 0xb0, 0x8a, 0x3d, 0x88, 0x08, 0xd0, 0x3f,
+ 0x80, 0x08, 0xd0, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x60, 0xb0, 0x8a, 0x3e,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x60, 0x5c, 0xad, 0xbe, 0x70, 0x5c, 0x2d, 0xbf,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0x08, 0x50, 0xbe, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x60, 0x5c, 0xad, 0xbe, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x70, 0x5c, 0x2d, 0xbf, 0x00, 0x00, 0x00, 0x00,
+ 0x60, 0xb0, 0x8a, 0xbe, 0x60, 0xb0, 0x8a, 0x3e, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0x08, 0x50, 0xbe, 0x80, 0x08, 0x50, 0x3e, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x60, 0xb0, 0x8a, 0x3e, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0x08, 0xd0, 0xbe, 0x80, 0xb2, 0x3e, 0xbf, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0x08, 0x50, 0x3e, 0x00, 0x00, 0x00, 0x00,
+ 0x60, 0x5c, 0xad, 0xbe, 0x40, 0xb0, 0x0a, 0xbe, 0x00, 0x00, 0x00, 0x00,
+ 0x70, 0x5c, 0x2d, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0xd0, 0xbe,
+ 0x80, 0x08, 0xd0, 0x3e, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0x08, 0x50, 0xbe,
+ 0x80, 0x08, 0x50, 0x3e, 0x80, 0xb0, 0x8a, 0xbd, 0x60, 0xb0, 0x8a, 0x3e,
+ 0x80, 0xb2, 0x3e, 0x3f, 0x80, 0xb0, 0x8a, 0x3d, 0x70, 0x5c, 0xad, 0x3f,
+ 0x80, 0xb0, 0x8a, 0x3d, 0xfc, 0x5c, 0x3a, 0xc0, 0x56, 0x89, 0xe3, 0xc0,
+ 0x70, 0x5c, 0x2d, 0x3f, 0xd8, 0x5a, 0x06, 0xc0, 0x88, 0x5d, 0xc7, 0x3f,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb2, 0x3e, 0xbf, 0x70, 0xb1, 0xa4, 0xbf,
+ 0x00, 0x00, 0x00, 0x00, 0xa0, 0xb4, 0x72, 0xbf, 0x80, 0x08, 0x50, 0xbe,
+ 0x80, 0xb2, 0xbe, 0x3f, 0x80, 0x08, 0x50, 0xbe, 0x80, 0x5d, 0xc7, 0xbf,
+ 0x18, 0xb4, 0x65, 0xc0, 0x88, 0x08, 0xd0, 0x3f, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0x08, 0x50, 0xbe, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb2, 0x3e, 0xbf, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0x08, 0x50, 0x3e, 0x40, 0xb0, 0x0a, 0xbe, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x60, 0xb0, 0x0a, 0xbf, 0x80, 0x08, 0x50, 0xbe, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x60, 0x5b, 0x93, 0xbf, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x58, 0x05, 0x02, 0x40, 0x40, 0xb0, 0x0a, 0xbe, 0x58, 0x05, 0x02, 0x40,
+ 0x60, 0xb0, 0x8a, 0x3e, 0x58, 0x05, 0x82, 0xbf, 0x80, 0x08, 0xd0, 0x3e,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb0, 0x0a, 0x3e, 0x90, 0x5e, 0x61, 0x3f,
+ 0xa0, 0xb4, 0xf2, 0xbe, 0x80, 0xb0, 0x8a, 0xbd, 0xa0, 0xb4, 0xf2, 0x3e,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x60, 0xb0, 0x8a, 0x3f, 0x00, 0x00, 0x00, 0x00,
+ 0x78, 0x07, 0xb6, 0x3f, 0xa0, 0xb4, 0x72, 0x3f, 0x70, 0x06, 0x1c, 0x3f,
+ 0x80, 0x08, 0x50, 0xbe, 0x80, 0xb0, 0x8a, 0xbd, 0x00, 0x00, 0x00, 0x00,
+ 0x70, 0x5c, 0x2d, 0xbf, 0x80, 0x08, 0xd0, 0x3e, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0x08, 0x50, 0x3e, 0x80, 0x08, 0x50, 0xbe,
+ 0x00, 0x00, 0x00, 0x00, 0x60, 0xb0, 0x8a, 0x3e, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x00, 0x00, 0x00, 0x00, 0x60, 0xb0, 0x8a, 0x3e, 0x80, 0x5c, 0xad, 0x3e,
+ 0x80, 0x08, 0x50, 0xbf, 0x80, 0x08, 0x50, 0xbe, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0x08, 0x50, 0xbe,
+ 0x80, 0x08, 0x50, 0xbe, 0x80, 0x08, 0x50, 0x3e, 0x60, 0x06, 0x1c, 0xbf,
+ 0x80, 0x08, 0xd0, 0x3e, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x00, 0x00, 0x00, 0x00, 0x60, 0x5c, 0xad, 0xbe, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0x08, 0x50, 0x3e, 0x60, 0xb0, 0x8a, 0x3e, 0x70, 0x5c, 0x2d, 0xbf,
+ 0x80, 0x08, 0x50, 0xbe, 0x80, 0x08, 0x50, 0x3e, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0x50, 0x3e, 0x58, 0x05, 0x82, 0xbf,
+ 0x80, 0xb2, 0xbe, 0x3f, 0x60, 0xb0, 0x0a, 0x3f, 0xe0, 0x05, 0x0f, 0xc0,
+ 0xdf, 0x05, 0x0f, 0xc1, 0x70, 0x5c, 0x2d, 0x3f, 0x98, 0x5e, 0xe1, 0xbf,
+ 0xa0, 0xb4, 0xf2, 0x3e, 0x00, 0x00, 0x00, 0x00, 0xe8, 0x5b, 0x20, 0xc0,
+ 0x70, 0xb1, 0xa4, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x70, 0x5c, 0x2d, 0xbf,
+ 0x00, 0x00, 0x00, 0x00, 0x88, 0x5d, 0xc7, 0x3f, 0x60, 0xb0, 0x8a, 0xbe,
+ 0x88, 0x08, 0xd0, 0xbf, 0x1d, 0xdb, 0x8c, 0xc0, 0x78, 0x07, 0x36, 0x40,
+ 0x80, 0x08, 0x50, 0x3e, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0x08, 0x50, 0x3e,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb2, 0x3e, 0xbf, 0x60, 0x06, 0x1c, 0xbf,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x60, 0xb0, 0x0a, 0xbf, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x0a, 0x3e, 0xa0, 0xb4, 0x72, 0xbf,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x64, 0x5b, 0x13, 0x40, 0xa0, 0xb4, 0xf2, 0xbe,
+ 0x58, 0x05, 0x02, 0x40, 0x60, 0x5c, 0xad, 0xbe, 0x60, 0x06, 0x1c, 0xbf,
+ 0xa0, 0xb4, 0xf2, 0x3e, 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x70, 0x5c, 0x2d, 0x3f, 0x60, 0xb0, 0x0a, 0x3f, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0x5c, 0xad, 0x3e,
+ 0x60, 0xb0, 0x8a, 0xbe, 0x90, 0x5e, 0x61, 0x3f, 0x90, 0x08, 0x50, 0x3f,
+ 0x70, 0x5c, 0x2d, 0x3f, 0x40, 0xb0, 0x0a, 0xbe, 0x00, 0x00, 0x00, 0x00,
+ 0xa0, 0xb4, 0xf2, 0x3e, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0x5c, 0xad, 0x3e,
+ 0xa0, 0xb4, 0xf2, 0xbe, 0x80, 0x08, 0x50, 0xbe, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0x08, 0xd0, 0x3e,
+ 0x80, 0x08, 0x50, 0xbe, 0x80, 0xb0, 0x0a, 0x3e, 0xa0, 0xb4, 0xf2, 0xbe,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x90, 0x5e, 0x61, 0xbf, 0x60, 0xb0, 0x8a, 0xbe,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0x08, 0x50, 0x3e, 0x80, 0x5c, 0xad, 0x3e,
+ 0x80, 0x08, 0x50, 0xbe, 0xa0, 0xb4, 0xf2, 0x3e, 0x60, 0xb0, 0x0a, 0xbf,
+ 0x60, 0xb0, 0x8a, 0xbe, 0x80, 0x08, 0x50, 0x3e, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x70, 0x06, 0x1c, 0x3f, 0x60, 0xb0, 0x8a, 0xbe,
+ 0x00, 0x00, 0x00, 0x00, 0x60, 0xb0, 0x0a, 0xbf, 0x60, 0xb0, 0x8a, 0x3e,
+ 0x80, 0xb2, 0x3e, 0xbf, 0x80, 0x08, 0x50, 0xbe, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x60, 0x5b, 0x93, 0x3f,
+ 0x60, 0xb0, 0x8a, 0x3f, 0x68, 0x06, 0x1c, 0x40, 0x80, 0xb0, 0x0a, 0x3e,
+ 0xfc, 0x5c, 0x3a, 0xc0, 0xd4, 0x33, 0xdf, 0xc0, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x90, 0xb3, 0xd8, 0xbf, 0xa0, 0xb4, 0xf2, 0xbe, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0x5d, 0xc7, 0xbf, 0xe4, 0xb0, 0x17, 0x40, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x78, 0x07, 0xb6, 0xbf, 0x60, 0xb0, 0x8a, 0xbe, 0x80, 0x08, 0x50, 0x3e,
+ 0x80, 0x08, 0xd0, 0xbe, 0xa0, 0xb4, 0xf2, 0xbf, 0x6c, 0xb1, 0x24, 0xc0,
+ 0xe4, 0xb0, 0x17, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0x5c, 0xad, 0x3e, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x06, 0x1c, 0xbf,
+ 0xa0, 0xb4, 0xf2, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0x50, 0x3e,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0x3d, 0xa0, 0xb4, 0xf2, 0xbe,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x68, 0x06, 0x9c, 0xbf, 0x40, 0xb0, 0x0a, 0xbe, 0xa0, 0x09, 0xea, 0x3f,
+ 0x40, 0xb0, 0x0a, 0xbe, 0xa0, 0x09, 0xea, 0x3f, 0x58, 0xb0, 0x8a, 0xbf,
+ 0x80, 0x08, 0xd0, 0xbe, 0xa0, 0xb4, 0xf2, 0x3e, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x90, 0x5e, 0x61, 0x3f, 0x80, 0x08, 0x50, 0xbe,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x60, 0x5c, 0xad, 0xbe, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x80, 0xb2, 0x3e, 0xbf, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0x08, 0x50, 0xbe,
+ 0x90, 0x08, 0x50, 0x3f, 0x80, 0xb2, 0x3e, 0x3f, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0x5c, 0xad, 0x3e, 0x60, 0x06, 0x1c, 0xbf,
+ 0x60, 0xb0, 0x8a, 0xbe, 0xa0, 0xb4, 0x72, 0xbf, 0x60, 0xb0, 0x8a, 0x3e,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x60, 0x5c, 0xad, 0xbe, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0x08, 0xd0, 0x3e, 0x80, 0x08, 0xd0, 0x3e, 0x00, 0x00, 0x00, 0x00,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x60, 0xb0, 0x8a, 0xbe, 0xa0, 0xb4, 0xf2, 0xbe,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x60, 0xb0, 0x8a, 0xbe, 0x60, 0x5c, 0xad, 0xbe,
+ 0x80, 0x08, 0x50, 0xbe, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x60, 0xb0, 0x0a, 0x3f, 0x60, 0x06, 0x1c, 0xbf, 0x60, 0x5c, 0xad, 0xbe,
+ 0x80, 0x08, 0x50, 0xbf, 0x60, 0xb0, 0x8a, 0x3e, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x80, 0x08, 0x50, 0xbe, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0x08, 0xd0, 0x3e,
+ 0xa0, 0xb4, 0xf2, 0x3e, 0x80, 0xb0, 0x8a, 0xbd, 0x00, 0x00, 0x00, 0x00,
+ 0x60, 0xb0, 0x8a, 0xbe, 0x60, 0xb0, 0x8a, 0xbe, 0x80, 0x08, 0x50, 0xbe,
+ 0x60, 0xb0, 0x8a, 0xbe, 0x60, 0xb0, 0x0a, 0xbf, 0x40, 0xb0, 0x0a, 0xbe,
+ 0xa0, 0xb4, 0xf2, 0x3e, 0x90, 0x5e, 0x61, 0x3f, 0x98, 0x5e, 0xe1, 0x3f,
+ 0x80, 0x08, 0xd0, 0xbe, 0xa0, 0xb4, 0xf2, 0xbf, 0xf6, 0xb1, 0x31, 0xc0,
+ 0x60, 0x5c, 0xad, 0xbe, 0x98, 0x5e, 0xe1, 0xbf, 0xa0, 0xb4, 0xf2, 0xbe,
+ 0x80, 0xb0, 0x8a, 0x3d, 0xe0, 0x05, 0x0f, 0xc0, 0x98, 0x5e, 0xe1, 0x3f,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x0c, 0x5e, 0x54, 0xc0, 0x60, 0xb0, 0x8a, 0x3e,
+ 0x80, 0xb2, 0x3e, 0xbf, 0x80, 0xb0, 0x8a, 0xbd, 0x94, 0x5e, 0x61, 0xc0,
+ 0x5c, 0xb0, 0x8a, 0xc0, 0xf8, 0xb1, 0x31, 0x40, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0x08, 0x50, 0x3e,
+ 0x00, 0x00, 0x00, 0x00, 0x60, 0x5b, 0x93, 0xbf, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x60, 0xb0, 0x8a, 0x3e, 0x80, 0xb0, 0x0a, 0x3e, 0x00, 0x00, 0x00, 0x00,
+ 0x60, 0x06, 0x1c, 0xbf, 0x80, 0x08, 0x50, 0x3e, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0x50, 0xbe, 0x00, 0x00, 0x00, 0x00,
+ 0x60, 0x5c, 0xad, 0xbe, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0x08, 0x50, 0x3e,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x60, 0x5c, 0xad, 0xbe, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x68, 0x06, 0x9c, 0x3f, 0x80, 0x08, 0xd0, 0xbe, 0x80, 0xb2, 0x3e, 0x3f,
+ 0x70, 0x5c, 0x2d, 0xbf, 0x80, 0xb0, 0x0a, 0x3e, 0xa0, 0xb4, 0xf2, 0x3e,
+ 0x00, 0x00, 0x00, 0x00, 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0x08, 0xd0, 0x3e,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x0a, 0x3e, 0xa0, 0xb4, 0xf2, 0xbe,
+ 0x60, 0xb0, 0x8a, 0x3e, 0x80, 0x08, 0xd0, 0xbe, 0x80, 0x08, 0x50, 0xbe,
+ 0x60, 0xb0, 0x8a, 0xbe, 0x80, 0x08, 0x50, 0x3e, 0x80, 0xb2, 0x3e, 0x3f,
+ 0x60, 0xb0, 0x0a, 0xbf, 0x60, 0xb0, 0x8a, 0x3e, 0xe4, 0xb0, 0x17, 0x40,
+ 0x00, 0x00, 0x00, 0x00, 0x68, 0x06, 0x9c, 0x3f, 0x60, 0xb0, 0x8a, 0xbe,
+ 0x80, 0x08, 0x50, 0xbe, 0x80, 0x08, 0xd0, 0x3e, 0x80, 0x08, 0x50, 0x3e,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0x08, 0x50, 0x3e, 0xa0, 0xb4, 0x72, 0xbf,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x90, 0x5e, 0x61, 0x3f, 0x80, 0x08, 0x50, 0xbe,
+ 0x80, 0x5c, 0xad, 0x3e, 0x80, 0x5c, 0xad, 0x3e, 0x68, 0x06, 0x9c, 0x3f,
+ 0xa0, 0xb4, 0xf2, 0x3e, 0x80, 0x5c, 0xad, 0x3e, 0x80, 0x5c, 0xad, 0x3e,
+ 0x80, 0x08, 0xd0, 0x3e, 0x70, 0x06, 0x1c, 0x3f, 0x58, 0x05, 0x82, 0x3f,
+ 0x80, 0xb2, 0x3e, 0xbf, 0x60, 0x5b, 0x13, 0xc0, 0x90, 0x08, 0x50, 0x3f,
+ 0x60, 0x5b, 0x13, 0xc0, 0x60, 0xb0, 0x0a, 0xbf, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x60, 0xb0, 0x8a, 0x3e, 0x60, 0xb0, 0x0a, 0xbf, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0x3d, 0x60, 0xb0, 0x0a, 0x3f,
+ 0x60, 0xb0, 0x8a, 0x3e, 0x80, 0xb2, 0x3e, 0x3f, 0x80, 0xb2, 0xbe, 0xbf,
+ 0xa0, 0xb4, 0xf2, 0x3e, 0x80, 0x5c, 0xad, 0x3e, 0x80, 0xb2, 0x3e, 0x3f,
+ 0x80, 0x08, 0x50, 0xbf, 0x80, 0x5c, 0xad, 0x3e, 0x80, 0xb2, 0x3e, 0xbf,
+ 0x80, 0x08, 0xd0, 0xbe, 0x60, 0xb0, 0x8a, 0xbe, 0x60, 0xb0, 0x8a, 0x3e,
+ 0x70, 0x5c, 0x2d, 0xbf, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0x5c, 0xad, 0x3e,
+ 0x60, 0xb0, 0x0a, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xa0, 0xb4, 0xf2, 0xbe,
+ 0x60, 0xb0, 0x8a, 0x3e, 0x60, 0x5c, 0xad, 0xbe, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x60, 0xb0, 0x0a, 0xbf, 0x60, 0x5c, 0xad, 0xbe, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x60, 0x5c, 0xad, 0xbe, 0x60, 0x06, 0x1c, 0xbf, 0x80, 0x08, 0x50, 0x3e,
+ 0x80, 0x08, 0xd0, 0xbe, 0x90, 0x5e, 0x61, 0x3f, 0x80, 0x08, 0xd0, 0xbe,
+ 0x80, 0x08, 0x50, 0xbe, 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0x08, 0xd0, 0xbe,
+ 0x80, 0xb0, 0x8a, 0xbd, 0xa0, 0xb4, 0xf2, 0x3e, 0xa0, 0xb4, 0xf2, 0xbe,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x0a, 0x3e, 0x70, 0x5c, 0x2d, 0xbf,
+ 0x90, 0xb3, 0xd8, 0x3f, 0x80, 0xb0, 0x8a, 0xbd, 0xa0, 0xb4, 0xf2, 0xbe,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x60, 0xb0, 0x0a, 0x3f, 0x60, 0xb0, 0x0a, 0xbf,
+ 0xa0, 0xb4, 0xf2, 0x3e, 0x80, 0xb0, 0x8a, 0x3d, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0xbd, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0xd0, 0xbe, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0x08, 0x50, 0x3e, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0x08, 0x50, 0xbe, 0x80, 0x08, 0x50, 0x3e, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x60, 0xb0, 0x8a, 0xbe, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0x08, 0x50, 0xbe, 0x80, 0xb0, 0x0a, 0x3e, 0x00, 0x00, 0x00, 0x00,
+ 0x70, 0x5c, 0x2d, 0x3f, 0x60, 0xb0, 0x8a, 0x3e, 0x60, 0xb0, 0x8a, 0xbe,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x70, 0x5c, 0x2d, 0x3f, 0x40, 0xb0, 0x0a, 0xbe, 0x60, 0xb0, 0x8a, 0x3e,
+ 0x80, 0x08, 0xd0, 0xbe, 0xa0, 0xb4, 0xf2, 0xbe, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0x08, 0x50, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x60, 0x5c, 0xad, 0xbe,
+ 0x60, 0xb0, 0x8a, 0xbe, 0x80, 0xb0, 0x8a, 0x3d, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0x08, 0x50, 0xbe, 0x60, 0xb0, 0x0a, 0x3f,
+ 0xa0, 0xb4, 0xf2, 0x3e, 0x80, 0x08, 0x50, 0xbe, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0x50, 0xbe, 0x80, 0xb2, 0x3e, 0x3f,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0x3d, 0xa0, 0xb4, 0xf2, 0xbe,
+ 0x80, 0x08, 0xd0, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0x50, 0xbf,
+ 0x80, 0x08, 0x50, 0x3e, 0x80, 0x08, 0x50, 0xbe, 0x58, 0x05, 0x82, 0x3f,
+ 0x60, 0xb0, 0x0a, 0x3f, 0xa0, 0xb4, 0x72, 0xbf, 0x80, 0xb2, 0x3e, 0xbf,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0xbd, 0xa0, 0xb4, 0x72, 0x3f,
+ 0x00, 0x00, 0x00, 0x00, 0xa0, 0x09, 0xea, 0x3f, 0x00, 0x00, 0x00, 0x00,
+ 0xf6, 0xb1, 0x31, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0x08, 0x50, 0xbf, 0x80, 0xb0, 0x8a, 0xbd, 0x70, 0x5c, 0x2d, 0xbf,
+ 0x60, 0x06, 0x1c, 0xbf, 0x80, 0xb2, 0xbe, 0xbf, 0xf0, 0x06, 0x29, 0xc0,
+ 0x5c, 0xb0, 0x0a, 0xc0, 0x40, 0xb0, 0x0a, 0xbe, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0x08, 0x50, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0x08, 0x50, 0xbe,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0x3d, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x60, 0x5c, 0xad, 0xbe, 0x60, 0xb0, 0x0a, 0xbf, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x60, 0xb0, 0x0a, 0xbf, 0x80, 0xb2, 0x3e, 0x3f, 0x60, 0xb0, 0x8a, 0xbe,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x0a, 0x3e, 0x60, 0x5c, 0xad, 0xbe,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x60, 0xb0, 0x0a, 0x3f, 0x60, 0xb0, 0x0a, 0xbf,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0xbd, 0x70, 0x5c, 0x2d, 0xbf,
+ 0x90, 0xb3, 0xd8, 0x3f, 0x80, 0xb0, 0x0a, 0x3e, 0x60, 0xb0, 0x8a, 0xbe,
+ 0x00, 0x00, 0x00, 0x00, 0x60, 0xb0, 0x0a, 0x3f, 0x60, 0xb0, 0x8a, 0xbe,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb0, 0x8a, 0xbd, 0x60, 0xb0, 0x8a, 0x3e,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x60, 0xb0, 0x0a, 0x3f, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x40, 0xb0, 0x0a, 0xbe, 0xa0, 0xb4, 0xf2, 0x3e, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x60, 0xb0, 0x8a, 0xbe, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x60, 0xb0, 0x0a, 0xbf, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0x50, 0xbe, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x5c, 0xad, 0x3e, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x70, 0x5c, 0x2d, 0x3f, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0x08, 0x50, 0x3e,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x40, 0xb0, 0x0a, 0xbe, 0x00, 0x00, 0x00, 0x00,
+ 0x70, 0x06, 0x1c, 0x3f, 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x60, 0xb0, 0x8a, 0xbe, 0x80, 0xb0, 0x8a, 0xbd,
+ 0xa0, 0xb4, 0xf2, 0xbe, 0x60, 0xb0, 0x8a, 0x3e, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb0, 0x8a, 0x3d, 0xa0, 0xb4, 0x72, 0x3f,
+ 0x80, 0x5c, 0xad, 0x3e, 0x70, 0xb1, 0xa4, 0x3f, 0x18, 0x30, 0x84, 0x40,
+ 0x80, 0x08, 0x50, 0xbf, 0x60, 0xb0, 0x8a, 0x3e, 0x78, 0x07, 0xb6, 0xbf,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x60, 0x5c, 0xad, 0xbe, 0x80, 0xb2, 0x3e, 0xbf,
+ 0x00, 0x00, 0x00, 0x00, 0x18, 0xb4, 0x65, 0x40, 0x68, 0x06, 0x9c, 0x3f,
+ 0x68, 0x06, 0x1c, 0x40, 0x60, 0x5c, 0xad, 0xbe, 0x6c, 0xb1, 0x24, 0x40,
+ 0x68, 0x06, 0x9c, 0x3f, 0x78, 0x07, 0xb6, 0xbf, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x60, 0xb0, 0x8a, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0x50, 0x3e, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0x08, 0x50, 0xbe, 0x60, 0x06, 0x1c, 0xbf,
+ 0x80, 0x08, 0x50, 0x3e, 0x60, 0x5c, 0xad, 0xbe, 0x80, 0xb2, 0x3e, 0x3f,
+ 0x80, 0x08, 0xd0, 0xbe, 0x80, 0x08, 0x50, 0xbe, 0x60, 0xb0, 0x8a, 0x3e,
+ 0xa0, 0xb4, 0xf2, 0xbe, 0x40, 0xb0, 0x0a, 0xbe, 0x60, 0xb0, 0x0a, 0x3f,
+ 0x60, 0x5c, 0xad, 0xbe, 0x80, 0xb0, 0x8a, 0xbd, 0x00, 0x00, 0x00, 0x00,
+ 0x90, 0x5e, 0x61, 0xbf, 0xa0, 0xb4, 0xf2, 0x3f, 0x00, 0x00, 0x00, 0x00,
+ 0xa0, 0xb4, 0xf2, 0xbe, 0x40, 0xb0, 0x0a, 0xbe, 0x70, 0x06, 0x1c, 0x3f,
+ 0xa0, 0xb4, 0xf2, 0xbe, 0x40, 0xb0, 0x0a, 0xbe, 0x60, 0xb0, 0x0a, 0x3f,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x8a, 0x3d, 0x70, 0x5c, 0x2d, 0x3f,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb0, 0x0a, 0x3e, 0x70, 0x06, 0x1c, 0x3f,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x00, 0x00, 0x00, 0x00, 0xa0, 0xb4, 0xf2, 0xbe,
+ 0x80, 0x08, 0x50, 0xbe, 0x80, 0xb0, 0x8a, 0x3d, 0xa0, 0xb4, 0xf2, 0xbe,
+ 0x80, 0x5c, 0xad, 0x3e, 0x80, 0x5c, 0xad, 0x3e, 0x80, 0x08, 0xd0, 0xbe,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0x08, 0xd0, 0x3e, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0x08, 0x50, 0x3e, 0xa0, 0xb4, 0xf2, 0x3e, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xb0, 0x0a, 0x3e, 0xa0, 0xb4, 0xf2, 0x3e, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0x08, 0x50, 0x3e, 0xa0, 0xb4, 0xf2, 0xbe, 0x60, 0xb0, 0x8a, 0xbe,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0x08, 0xd0, 0xbe, 0x80, 0x08, 0x50, 0x3e,
+ 0x80, 0x5c, 0xad, 0x3e, 0x58, 0x05, 0x82, 0xbf, 0x80, 0xb2, 0x3e, 0xbf,
+ 0x60, 0xb0, 0x0a, 0x3f, 0x80, 0xb2, 0x3e, 0x3f, 0xe0, 0x05, 0x0f, 0x40,
+ 0x08, 0xb3, 0x4b, 0x40, 0x90, 0xb3, 0xd8, 0xbf, 0x68, 0x06, 0x9c, 0x3f,
+ 0x60, 0x5b, 0x93, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb2, 0xbe, 0x3f,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0xbd, 0xf0, 0x06, 0x29, 0x40,
+ 0x70, 0x06, 0x1c, 0x3f, 0x80, 0x08, 0xd0, 0xbe, 0x80, 0x08, 0x50, 0xbe,
+ 0x80, 0xb2, 0xbe, 0x3f, 0x70, 0x06, 0x1c, 0x3f, 0x60, 0xb0, 0x8a, 0x3f,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0x3d, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0x3d, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x60, 0xb0, 0x8a, 0xbe, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0x08, 0x50, 0xbe,
+ 0x60, 0xb0, 0x0a, 0xbf, 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0x08, 0xd0, 0xbe,
+ 0x90, 0x08, 0x50, 0x3f, 0x60, 0x5c, 0xad, 0xbe, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0x08, 0xd0, 0xbe, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0xb2, 0x3e, 0x3f, 0x80, 0x08, 0xd0, 0xbe, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x90, 0x5e, 0x61, 0xbf, 0x90, 0xb3, 0xd8, 0x3f,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x60, 0x5c, 0xad, 0xbe, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x60, 0xb0, 0x0a, 0x3f, 0x80, 0x08, 0xd0, 0xbe, 0x80, 0x08, 0x50, 0xbe,
+ 0x60, 0xb0, 0x0a, 0x3f, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x0a, 0x3e,
+ 0xa0, 0xb4, 0xf2, 0x3e, 0x60, 0xb0, 0x8a, 0xbe, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0x08, 0x50, 0x3e, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x60, 0xb0, 0x0a, 0xbf, 0x60, 0xb0, 0x0a, 0x3f, 0x90, 0x08, 0x50, 0x3f,
+ 0x60, 0x06, 0x1c, 0xbf, 0x40, 0xb0, 0x0a, 0xbe, 0x70, 0x06, 0x1c, 0x3f,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x0a, 0x3e, 0x70, 0x06, 0x1c, 0x3f,
+ 0x80, 0x08, 0x50, 0xbe, 0x80, 0xb0, 0x8a, 0x3d, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0x3d, 0x60, 0xb0, 0x8a, 0x3e,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0x08, 0x50, 0xbe,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0x08, 0xd0, 0xbe,
+ 0x80, 0x08, 0xd0, 0x3e, 0x90, 0x5e, 0x61, 0x3f, 0x00, 0x00, 0x00, 0x00,
+ 0x90, 0x5e, 0x61, 0x3f, 0x90, 0x5e, 0x61, 0x3f, 0x68, 0x06, 0x9c, 0x3f,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x64, 0x5b, 0x13, 0x40, 0x60, 0x5c, 0xad, 0xbe,
+ 0x80, 0x08, 0x50, 0xbe, 0x70, 0x5c, 0x2d, 0x3f, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0x5c, 0xad, 0x3e, 0x60, 0x5b, 0x93, 0x3f, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x0a, 0x3e, 0x60, 0x5c, 0xad, 0xbe,
+ 0x60, 0xb0, 0x8a, 0xbe, 0x78, 0x07, 0xb6, 0x3f, 0x80, 0x08, 0xd0, 0x3e,
+ 0x80, 0x08, 0x50, 0x3e, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0x08, 0x50, 0xbe,
+ 0x00, 0x00, 0x00, 0x00, 0x40, 0xb0, 0x0a, 0xbe, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0x3d, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x60, 0x5c, 0xad, 0xbe, 0xa0, 0xb4, 0xf2, 0xbe, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x60, 0xb0, 0x0a, 0xbf, 0x90, 0x5e, 0x61, 0x3f, 0x60, 0x5c, 0xad, 0xbe,
+ 0x80, 0x08, 0x50, 0xbe, 0x60, 0xb0, 0x8a, 0x3e, 0xa0, 0xb4, 0xf2, 0xbe,
+ 0x00, 0x00, 0x00, 0x00, 0x70, 0x06, 0x1c, 0x3f, 0x60, 0xb0, 0x0a, 0xbf,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb0, 0x8a, 0x3d, 0x90, 0x5e, 0x61, 0xbf,
+ 0x90, 0xb3, 0xd8, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x60, 0x5c, 0xad, 0xbe,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x60, 0xb0, 0x0a, 0x3f, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x70, 0x06, 0x1c, 0x3f, 0x80, 0x08, 0xd0, 0x3e, 0x80, 0xb0, 0x8a, 0x3d,
+ 0xa0, 0xb4, 0xf2, 0xbe, 0x80, 0x5c, 0xad, 0x3e, 0x60, 0xb0, 0x8a, 0x3e,
+ 0x80, 0xb0, 0x0a, 0x3e, 0xa0, 0xb4, 0xf2, 0x3e, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x60, 0xb0, 0x0a, 0xbf, 0x80, 0x5c, 0xad, 0x3e, 0x80, 0xb0, 0x8a, 0xbd,
+ 0xa0, 0xb4, 0xf2, 0xbe, 0x80, 0x08, 0xd0, 0xbe, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x60, 0x5b, 0x93, 0xbf, 0x80, 0x5c, 0xad, 0x3e,
+ 0x80, 0xb2, 0x3e, 0x3f, 0x80, 0xb0, 0x8a, 0x3d, 0x70, 0x06, 0x1c, 0x3f,
+ 0x60, 0xb0, 0x0a, 0x3f, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0x08, 0xd0, 0xbe,
+ 0x80, 0x5c, 0xad, 0x3e, 0x80, 0x5c, 0xad, 0x3e, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0x08, 0xd0, 0x3e, 0x80, 0xb0, 0x8a, 0x3d, 0x60, 0x5c, 0xad, 0xbe,
+ 0x80, 0x5c, 0xad, 0x3e, 0x80, 0xb0, 0x8a, 0xbd, 0x60, 0xb0, 0x0a, 0xbf,
+ 0x60, 0xb0, 0x8a, 0xbe, 0x60, 0xb0, 0x8a, 0xbe, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x70, 0xb1, 0xa4, 0xbf, 0x80, 0x08, 0xd0, 0x3e, 0x80, 0xb2, 0x3e, 0x3f,
+ 0x70, 0xb1, 0xa4, 0xbf, 0x80, 0x5c, 0xad, 0x3e, 0x90, 0x08, 0x50, 0x3f,
+ 0x60, 0xb0, 0x8a, 0x3e, 0xa8, 0x5f, 0xfb, 0x3f, 0x80, 0x5c, 0xad, 0x3e,
+ 0x80, 0xb2, 0x3e, 0xbf, 0x80, 0x08, 0xd0, 0x3e, 0x70, 0x5c, 0xad, 0xbf,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb2, 0x3e, 0x3f, 0xa0, 0x09, 0xea, 0x3f,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0x08, 0x50, 0xbe, 0x80, 0x08, 0x50, 0x3e,
+ 0x98, 0x09, 0xea, 0xbf, 0x60, 0xb0, 0x8a, 0xbe, 0x58, 0xb0, 0x8a, 0xbf,
+ 0x08, 0xb3, 0x4b, 0x40, 0xa0, 0x09, 0xea, 0x3f, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x60, 0x5c, 0xad, 0xbe, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x0a, 0x3e, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0x3d, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb0, 0x0a, 0x3e, 0x60, 0xb0, 0x8a, 0xbe,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0xd0, 0xbe, 0x60, 0x06, 0x1c, 0xbf,
+ 0x80, 0x08, 0x50, 0x3e, 0xa0, 0xb4, 0xf2, 0xbe, 0x70, 0x5c, 0x2d, 0x3f,
+ 0x80, 0x08, 0xd0, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x80, 0x5c, 0xad, 0x3e,
+ 0x60, 0x5c, 0xad, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x70, 0x5c, 0x2d, 0x3f,
+ 0x80, 0x08, 0xd0, 0xbe, 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0x08, 0x50, 0xbf, 0xa0, 0xb4, 0xf2, 0x3f, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x60, 0xb0, 0x8a, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x70, 0x5c, 0x2d, 0x3f,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb2, 0x3e, 0xbf,
+ 0x60, 0xb0, 0x8a, 0x3e, 0x80, 0x08, 0x50, 0xbe, 0x60, 0xb0, 0x8a, 0x3e,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0x08, 0x50, 0x3e, 0x80, 0x08, 0xd0, 0x3e,
+ 0x00, 0x00, 0x00, 0x00, 0x60, 0xb0, 0x8a, 0xbe, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x60, 0xb0, 0x8a, 0x3e, 0x60, 0x5c, 0xad, 0xbe,
+ 0x80, 0x08, 0xd0, 0xbe, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0x5c, 0xad, 0x3e, 0x80, 0x08, 0x50, 0x3e, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x90, 0x5e, 0x61, 0xbf, 0x80, 0x5c, 0xad, 0x3e,
+ 0x80, 0x08, 0x50, 0xbe, 0x80, 0x08, 0x50, 0x3e, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0x08, 0x50, 0x3e, 0x60, 0xb0, 0x8a, 0x3e, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0x08, 0x50, 0x3e, 0x60, 0xb0, 0x8a, 0xbe, 0x60, 0xb0, 0x8a, 0xbe,
+ 0x80, 0x08, 0x50, 0xbe, 0x80, 0xb0, 0x8a, 0xbd, 0xa0, 0xb4, 0xf2, 0x3e,
+ 0x80, 0xb0, 0x0a, 0x3e, 0xa8, 0x5f, 0xfb, 0xbf, 0x80, 0x08, 0xd0, 0xbe,
+ 0x90, 0x5e, 0x61, 0xbf, 0x60, 0x5b, 0x93, 0x3f, 0x6c, 0xb1, 0x24, 0x40,
+ 0xa0, 0xb4, 0xf2, 0xbf, 0x88, 0x08, 0xd0, 0xbf, 0x60, 0x06, 0x1c, 0xbf,
+ 0x00, 0x00, 0x00, 0x00, 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0x08, 0x50, 0x3e,
+ 0x60, 0xb0, 0x8a, 0x3f, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x06, 0xa9, 0xc0,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0x08, 0x50, 0xbe, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x94, 0x5e, 0x61, 0xc0, 0x58, 0x05, 0x02, 0x40, 0x74, 0x5c, 0x2d, 0x40,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x00, 0x00, 0x00, 0x00, 0xa0, 0xb4, 0xf2, 0xbe,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x40, 0xb0, 0x0a, 0xbe, 0x60, 0x5c, 0xad, 0xbe,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x0a, 0x3e, 0x60, 0xb0, 0x8a, 0xbe,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x40, 0xb0, 0x0a, 0xbe, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0x08, 0x50, 0xbe, 0x40, 0xb0, 0x0a, 0xbe, 0x00, 0x00, 0x00, 0x00,
+ 0xa0, 0xb4, 0xf2, 0xbe, 0x58, 0x05, 0x82, 0x3f, 0x58, 0xb0, 0x8a, 0xbf,
+ 0x90, 0x5e, 0x61, 0x3f, 0xa0, 0xb4, 0xf2, 0xbe, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0x08, 0xd0, 0x3e, 0x60, 0x06, 0x1c, 0xbf, 0x00, 0x00, 0x00, 0x00,
+ 0x60, 0xb0, 0x8a, 0x3e, 0x80, 0x08, 0xd0, 0xbe, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0x08, 0x50, 0x3e, 0x80, 0x08, 0xd0, 0xbe, 0x98, 0x5e, 0xe1, 0x3f,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x40, 0xb0, 0x0a, 0xbe, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x60, 0xb0, 0x8a, 0x3e, 0x80, 0x5c, 0xad, 0x3e,
+ 0x60, 0xb0, 0x0a, 0x3f, 0x60, 0x5c, 0xad, 0xbe, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x70, 0x06, 0x1c, 0x3f, 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0x08, 0x50, 0xbe,
+ 0x90, 0x08, 0x50, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x60, 0xb0, 0x8a, 0x3e,
+ 0x60, 0xb0, 0x8a, 0xbe, 0xa0, 0xb4, 0xf2, 0xbe, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xb2, 0x3e, 0xbf, 0x80, 0x5c, 0xad, 0x3e, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0x5c, 0xad, 0x3e, 0xa0, 0xb4, 0xf2, 0x3e, 0x80, 0x5c, 0xad, 0x3e,
+ 0x80, 0x08, 0xd0, 0xbe, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0x50, 0x3e, 0x70, 0x5c, 0x2d, 0x3f,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x60, 0xb0, 0x8a, 0xbe, 0x80, 0xb2, 0x3e, 0x3f,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x60, 0xb0, 0x8a, 0x3e, 0x80, 0x08, 0xd0, 0xbe,
+ 0x60, 0xb0, 0x0a, 0xbf, 0x80, 0x08, 0x50, 0xbe, 0x80, 0x08, 0x50, 0xbf,
+ 0x80, 0x5c, 0xad, 0x3e, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0x08, 0x50, 0x3e,
+ 0x60, 0xb0, 0x8a, 0x3e, 0x70, 0xb1, 0xa4, 0xbf, 0x60, 0xb0, 0x8a, 0x3f,
+ 0x80, 0xb0, 0x8a, 0x3d, 0xac, 0x86, 0xa2, 0xc0, 0x00, 0x00, 0x00, 0x00,
+ 0x68, 0x06, 0x9c, 0xbf, 0x80, 0x08, 0xd0, 0xbe, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x60, 0xb0, 0x8a, 0x3e, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x56, 0x05, 0x02, 0xc1, 0x80, 0x5d, 0xc7, 0xbf, 0x68, 0x06, 0x9c, 0x3f,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x84, 0x5d, 0xc7, 0xc0, 0xbd, 0x87, 0xbc, 0xc0,
+ 0x70, 0x5c, 0xad, 0x3f, 0x80, 0x08, 0x50, 0x3e, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0xb2, 0x3e, 0xbf, 0x60, 0xb0, 0x8a, 0x3e, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0x08, 0x50, 0xbe, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x60, 0xb0, 0x8a, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0x08, 0x50, 0x3e,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0xbd, 0x90, 0x08, 0x50, 0x3f,
+ 0x58, 0xb0, 0x8a, 0xbf, 0x90, 0x5e, 0x61, 0x3f, 0x60, 0xb0, 0x8a, 0xbe,
+ 0x60, 0xb0, 0x8a, 0xbe, 0x80, 0x08, 0xd0, 0x3e, 0x60, 0xb0, 0x8a, 0xbe,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0x5c, 0xad, 0x3e, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0x08, 0x50, 0xbe,
+ 0x98, 0x5e, 0xe1, 0x3f, 0x60, 0xb0, 0x8a, 0xbe, 0x80, 0x08, 0xd0, 0xbe,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0x08, 0xd0, 0xbe, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x80, 0x5c, 0xad, 0x3e, 0x80, 0xb2, 0x3e, 0x3f, 0xa0, 0xb4, 0xf2, 0xbe,
+ 0x60, 0xb0, 0x8a, 0xbe, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x60, 0xb0, 0x8a, 0x3e, 0x70, 0x5c, 0x2d, 0x3f, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x00, 0x00, 0x00, 0x00, 0x70, 0x5c, 0x2d, 0x3f, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0x08, 0xd0, 0xbe,
+ 0x80, 0x08, 0x50, 0xbe, 0x60, 0xb0, 0x0a, 0xbf, 0x80, 0x08, 0x50, 0x3e,
+ 0x60, 0x06, 0x1c, 0xbf, 0x80, 0x08, 0x50, 0x3e, 0x80, 0x5c, 0xad, 0x3e,
+ 0x80, 0xb2, 0x3e, 0x3f, 0x60, 0xb0, 0x0a, 0xbf, 0x60, 0x5c, 0xad, 0xbe,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0x3d, 0x60, 0xb0, 0x8a, 0x3e,
+ 0x60, 0xb0, 0x0a, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x70, 0x5c, 0x2d, 0x3f, 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x60, 0xb0, 0x8a, 0xbe, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x60, 0xb0, 0x0a, 0xbf, 0x00, 0x00, 0x00, 0x00, 0xa0, 0xb4, 0xf2, 0xbe,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x60, 0xb0, 0x8a, 0x3e, 0x70, 0xb1, 0xa4, 0xbf,
+ 0x00, 0x00, 0x00, 0x00, 0x60, 0xb0, 0x8a, 0x3f, 0x12, 0x09, 0xdd, 0xc0,
+ 0xa0, 0xb4, 0x72, 0xbf, 0x78, 0x07, 0xb6, 0xbf, 0x60, 0xb0, 0x8a, 0x3f,
+ 0x00, 0x00, 0x00, 0x00, 0x60, 0xb0, 0x8a, 0x3f, 0xd8, 0x5a, 0x06, 0xc0,
+ 0x00, 0x00, 0x00, 0x00, 0x9a, 0x09, 0x6a, 0xc0, 0x80, 0x08, 0xd0, 0xbe,
+ 0x80, 0x08, 0x50, 0xbe, 0x60, 0xb0, 0x8a, 0x3e, 0x98, 0x09, 0xea, 0xbf,
+ 0xa6, 0xdb, 0x99, 0xc0, 0x88, 0x5d, 0xc7, 0x3f, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0x08, 0xd0, 0xbe, 0x60, 0xb0, 0x8a, 0x3e,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x80, 0x08, 0x50, 0x3e, 0x80, 0x08, 0xd0, 0xbe, 0x80, 0x5c, 0xad, 0x3e,
+ 0x68, 0x06, 0x9c, 0x3f, 0x80, 0xb2, 0x3e, 0xbf, 0x58, 0x05, 0x82, 0x3f,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x70, 0x5c, 0x2d, 0xbf, 0x80, 0x08, 0xd0, 0x3e,
+ 0x60, 0x5c, 0xad, 0xbe, 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x80, 0x5c, 0xad, 0x3e, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0x5c, 0xad, 0x3e,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb2, 0xbe, 0x3f, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x60, 0xb0, 0x8a, 0x3e, 0xa0, 0xb4, 0x72, 0xbf,
+ 0x00, 0x00, 0x00, 0x00, 0x90, 0x08, 0x50, 0x3f, 0xa0, 0xb4, 0x72, 0x3f,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0x5c, 0xad, 0x3e, 0x60, 0xb0, 0x0a, 0x3f,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0x08, 0x50, 0x3e,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x0a, 0x3e, 0x60, 0xb0, 0x8a, 0xbe,
+ 0x80, 0x08, 0x50, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x90, 0x5e, 0x61, 0xbf,
+ 0x80, 0x08, 0x50, 0x3e, 0x60, 0xb0, 0x8a, 0xbe, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x70, 0x5c, 0x2d, 0x3f, 0x90, 0x5e, 0x61, 0x3f, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0x5c, 0xad, 0x3e, 0xa0, 0xb4, 0xf2, 0x3e, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0x08, 0x50, 0x3e, 0x80, 0xb0, 0x8a, 0x3d, 0x00, 0x00, 0x00, 0x00,
+ 0x60, 0xb0, 0x8a, 0x3e, 0x60, 0xb0, 0x8a, 0xbe, 0xa0, 0xb4, 0xf2, 0xbe,
+ 0x00, 0x00, 0x00, 0x00, 0x90, 0x5e, 0x61, 0xbf, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0x08, 0xd0, 0xbe, 0xa0, 0xb4, 0x72, 0x3f, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0xb2, 0x3e, 0xbf, 0x80, 0xb2, 0x3e, 0xbf, 0x70, 0x5c, 0x2d, 0xbf,
+ 0xa6, 0xdb, 0x19, 0xc1, 0x68, 0x06, 0x9c, 0xbf, 0x78, 0x07, 0xb6, 0xbf,
+ 0xa0, 0xb4, 0x72, 0x3f, 0x80, 0xb0, 0x8a, 0xbd, 0xa0, 0xb4, 0xf2, 0x3e,
+ 0x88, 0x08, 0xd0, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x90, 0xb3, 0x58, 0xc0,
+ 0x80, 0x5c, 0xad, 0x3e, 0x60, 0xb0, 0x8a, 0x3f, 0x80, 0x08, 0xd0, 0xbe,
+ 0x70, 0x5c, 0xad, 0xbf, 0x9a, 0x85, 0x08, 0xc1, 0x78, 0x07, 0xb6, 0x3f,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0x3d, 0x60, 0x5c, 0xad, 0xbe,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0xbd, 0xa0, 0xb4, 0xf2, 0xbe,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0x3d, 0x60, 0x06, 0x1c, 0xbf,
+ 0x80, 0x5c, 0xad, 0x3e, 0x70, 0xb1, 0xa4, 0x3f, 0x60, 0xb0, 0x0a, 0xbf,
+ 0x68, 0x06, 0x9c, 0x3f, 0x80, 0xb0, 0x8a, 0x3d, 0x60, 0x06, 0x1c, 0xbf,
+ 0x60, 0xb0, 0x0a, 0x3f, 0x80, 0x08, 0xd0, 0xbe, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x60, 0xb0, 0x8a, 0x3e, 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb0, 0x8a, 0x3d,
+ 0xa0, 0xb4, 0xf2, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x60, 0xb0, 0x8a, 0x3f,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x60, 0xb0, 0x0a, 0x3f, 0x60, 0xb0, 0x8a, 0x3e,
+ 0x68, 0x06, 0x9c, 0xbf, 0x60, 0xb0, 0x8a, 0xbe, 0xa0, 0xb4, 0xf2, 0x3e,
+ 0x90, 0x5e, 0x61, 0x3f, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0x08, 0x50, 0x3e,
+ 0x60, 0xb0, 0x8a, 0xbe, 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0x08, 0xd0, 0x3e,
+ 0x90, 0x08, 0x50, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0x08, 0xd0, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0x50, 0x3e,
+ 0x80, 0x08, 0x50, 0x3e, 0x60, 0x06, 0x1c, 0xbf, 0x60, 0xb0, 0x8a, 0xbe,
+ 0x58, 0x05, 0x82, 0xbf, 0x80, 0xb0, 0x8a, 0x3d, 0xa0, 0xb4, 0xf2, 0xbe,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0x08, 0xd0, 0x3e, 0x60, 0xb0, 0x8a, 0x3f,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0x08, 0x50, 0xbe,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x60, 0xb0, 0x8a, 0x3e, 0x90, 0x08, 0x50, 0x3f,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x40, 0xb0, 0x0a, 0xbe, 0xa0, 0xb4, 0xf2, 0x3e,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb0, 0x8a, 0x3d, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0x08, 0xd0, 0xbe, 0x60, 0xb0, 0x8a, 0xbe, 0xa0, 0xb4, 0x72, 0xbf,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x60, 0x06, 0x1c, 0xbf, 0x80, 0xb2, 0x3e, 0x3f,
+ 0xa0, 0xb4, 0xf2, 0xbe, 0xa0, 0xb4, 0xf2, 0xbe, 0x80, 0xb0, 0x8a, 0xbd,
+ 0xe8, 0x5b, 0x20, 0xc0, 0xf6, 0xef, 0x00, 0xc1, 0x60, 0xb0, 0x0a, 0xbf,
+ 0x78, 0x07, 0xb6, 0xbf, 0x58, 0x05, 0x82, 0x3f, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x60, 0xb0, 0x8a, 0x3e, 0x58, 0x05, 0x82, 0xbf, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x17, 0x30, 0x84, 0xc0, 0x80, 0xb0, 0x8a, 0xbd, 0x98, 0x5e, 0xe1, 0x3f,
+ 0x80, 0x08, 0x50, 0xbe, 0xa0, 0xb4, 0xf2, 0xbf, 0xea, 0x5b, 0xa0, 0xc0,
+ 0x88, 0x08, 0xd0, 0x3f, 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0x08, 0x50, 0x3e,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0x50, 0x3e,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb0, 0x8a, 0x3d, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0x08, 0x50, 0xbe, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0x3d,
+ 0xa0, 0xb4, 0xf2, 0xbe, 0x60, 0xb0, 0x0a, 0x3f, 0x78, 0x07, 0xb6, 0x3f,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x68, 0x06, 0x9c, 0x3f, 0x00, 0x00, 0x00, 0x00,
+ 0xa0, 0xb4, 0x72, 0xbf, 0x80, 0x08, 0xd0, 0x3e, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x60, 0xb0, 0x8a, 0x3e, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0x08, 0xd0, 0x3e, 0xa0, 0xb4, 0xf2, 0x3e,
+ 0x60, 0xb0, 0x8a, 0x3f, 0x80, 0x08, 0x50, 0xbe, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xb0, 0x0a, 0x3e, 0xa0, 0xb4, 0x72, 0xbf, 0x60, 0xb0, 0x0a, 0xbf,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x90, 0x5e, 0x61, 0x3f, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x60, 0xb0, 0x0a, 0x3f, 0x90, 0x5e, 0x61, 0xbf, 0x80, 0x08, 0x50, 0xbe,
+ 0x60, 0xb0, 0x8a, 0x3e, 0x80, 0xb2, 0xbe, 0x3f, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0x5d, 0xc7, 0xbf, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0x08, 0x50, 0xbe, 0x70, 0x5c, 0x2d, 0xbf,
+ 0x60, 0xb0, 0x8a, 0xbe, 0x80, 0x08, 0x50, 0xbf, 0x80, 0x08, 0x50, 0x3e,
+ 0x60, 0x5c, 0xad, 0xbe, 0x60, 0x5c, 0xad, 0xbe, 0x00, 0x00, 0x00, 0x00,
+ 0xa0, 0xb4, 0x72, 0x3f, 0x80, 0xb0, 0x8a, 0x3d, 0x70, 0x06, 0x1c, 0x3f,
+ 0x80, 0x08, 0x50, 0xbf, 0x60, 0xb0, 0x8a, 0xbe, 0x80, 0x5c, 0xad, 0x3e,
+ 0x80, 0xb2, 0xbe, 0x3f, 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0x5d, 0xc7, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x60, 0xb0, 0x8a, 0xbe, 0x60, 0x06, 0x1c, 0xbf, 0x80, 0xb0, 0x8a, 0xbd,
+ 0xa0, 0xb4, 0x72, 0xbf, 0x80, 0xb0, 0x0a, 0x3e, 0x60, 0xb0, 0x8a, 0xbe,
+ 0x88, 0x5d, 0xc7, 0x3f, 0xa0, 0x09, 0xea, 0x3f, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x00, 0x00, 0x00, 0x00, 0xfc, 0x5c, 0x3a, 0xc0, 0xa0, 0xb4, 0x72, 0xc0,
+ 0x80, 0x08, 0x50, 0x3e, 0x70, 0xb1, 0xa4, 0xbf, 0x70, 0x5c, 0x2d, 0x3f,
+ 0x00, 0x00, 0x00, 0x00, 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0x08, 0x50, 0x3e,
+ 0x00, 0x00, 0x00, 0x00, 0x5c, 0xb0, 0x8a, 0xc0, 0x70, 0x06, 0x1c, 0x3f,
+ 0x80, 0x08, 0xd0, 0x3e, 0xa0, 0xb4, 0xf2, 0xbe, 0x90, 0x5e, 0x61, 0xbf,
+ 0x12, 0x09, 0x5d, 0xc0, 0x60, 0xb0, 0x0a, 0x3f, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x60, 0xb0, 0x8a, 0x3e, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0x08, 0xd0, 0xbe, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x80, 0x08, 0x50, 0xbe, 0x90, 0xb3, 0xd8, 0xbf, 0x00, 0x00, 0x00, 0x00,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x80, 0x08, 0x50, 0xbe, 0x80, 0xb0, 0x8a, 0x3d, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb2, 0x3e, 0xbf, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x78, 0x07, 0xb6, 0x3f, 0x60, 0xb0, 0x8a, 0xbe, 0xa0, 0x09, 0xea, 0x3f,
+ 0x60, 0x06, 0x1c, 0xbf, 0x58, 0xb0, 0x8a, 0xbf, 0x60, 0xb0, 0x8a, 0x3e,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x80, 0x5c, 0xad, 0x3e,
+ 0x98, 0x09, 0xea, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb2, 0x3e, 0x3f, 0x60, 0xb0, 0x8a, 0xbe,
+ 0x60, 0xb0, 0x0a, 0x3f, 0x60, 0xb0, 0x8a, 0x3e, 0x60, 0xb0, 0x0a, 0xbf,
+ 0x60, 0xb0, 0x0a, 0xbf, 0x90, 0x5e, 0x61, 0xbf, 0x80, 0x08, 0x50, 0x3e,
+ 0x60, 0x5c, 0xad, 0xbe, 0x80, 0xb0, 0x8a, 0xbd, 0x70, 0x5c, 0xad, 0xbf,
+ 0x60, 0xb0, 0x8a, 0x3e, 0x80, 0x08, 0x50, 0xbe, 0x70, 0x5c, 0x2d, 0x3f,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0x5c, 0xad, 0x3e, 0xa0, 0xb4, 0x72, 0xbf,
+ 0x00, 0x00, 0x00, 0x00, 0x70, 0x5c, 0x2d, 0x3f, 0x80, 0x08, 0xd0, 0xbe,
+ 0xa0, 0xb4, 0xf2, 0xbe, 0x60, 0xb0, 0x8a, 0xbe, 0x60, 0xb0, 0x0a, 0xbf,
+ 0x80, 0x08, 0x50, 0xbe, 0x60, 0x5c, 0xad, 0xbe, 0xa0, 0xb4, 0xf2, 0xbe,
+ 0x58, 0x05, 0x82, 0xbf, 0x60, 0xb0, 0x8a, 0x3e, 0x60, 0xb0, 0x0a, 0xbf,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x60, 0x5b, 0x93, 0xbf, 0x80, 0x5c, 0xad, 0x3e,
+ 0x60, 0xb0, 0x8a, 0xbe, 0x70, 0x06, 0x1c, 0x3f, 0x80, 0xb0, 0x0a, 0x3e,
+ 0x60, 0xb0, 0x8a, 0x3e, 0xa0, 0xb4, 0x72, 0xbf, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x90, 0x08, 0x50, 0x3f, 0x60, 0xb0, 0x8a, 0xbe, 0x80, 0x08, 0xd0, 0xbe,
+ 0x60, 0x5c, 0xad, 0xbe, 0x60, 0xb0, 0x0a, 0xbf, 0x60, 0x5c, 0xad, 0xbe,
+ 0x60, 0x5c, 0xad, 0xbe, 0xa0, 0xb4, 0x72, 0x3f, 0xfc, 0x5c, 0x3a, 0x40,
+ 0xa0, 0xb4, 0x72, 0xbf, 0x60, 0x5b, 0x93, 0xbf, 0x80, 0xb2, 0xbe, 0xbf,
+ 0x60, 0xb0, 0x8a, 0x3e, 0x80, 0x08, 0xd0, 0x3e, 0x78, 0x07, 0xb6, 0xbf,
+ 0x58, 0x05, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0xd0, 0xbe,
+ 0x80, 0x08, 0x50, 0x3e, 0x40, 0xb0, 0x0a, 0xbe, 0x67, 0x06, 0x9c, 0xc0,
+ 0x58, 0x05, 0x82, 0x3f, 0x6c, 0xb1, 0x24, 0x40, 0x60, 0xb0, 0x8a, 0xbe,
+ 0x70, 0x5c, 0xad, 0xbf, 0x80, 0xb2, 0xbe, 0xbf, 0x88, 0x5d, 0xc7, 0x3f,
+ 0x60, 0xb0, 0x0a, 0x3f, 0x80, 0xb0, 0x8a, 0xbd, 0x60, 0x06, 0x1c, 0xbf,
+ 0x80, 0x08, 0x50, 0x3e, 0x80, 0xb0, 0x8a, 0xbd, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x60, 0x5c, 0xad, 0xbe, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0x08, 0x50, 0x3e, 0x70, 0xb1, 0xa4, 0xbf,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x60, 0x5c, 0xad, 0xbe, 0x60, 0x5c, 0xad, 0xbe,
+ 0x80, 0xb0, 0x8a, 0x3d, 0x80, 0x08, 0x50, 0xbe, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x80, 0xb0, 0x8a, 0x3d, 0x60, 0xb0, 0x8a, 0xbe,
+ 0xa0, 0xb4, 0xf2, 0xbe, 0x80, 0x08, 0x50, 0x3e, 0x00, 0x00, 0x00, 0x00,
+ 0x60, 0x5b, 0x93, 0x3f, 0x60, 0x06, 0x1c, 0xbf, 0x80, 0xb2, 0x3e, 0xbf,
+ 0x70, 0x5c, 0x2d, 0xbf, 0x80, 0xb0, 0x8a, 0x3d, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0x5c, 0xad, 0x3e, 0x68, 0x06, 0x9c, 0xbf, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0x5c, 0xad, 0x3e, 0x60, 0xb0, 0x8a, 0xbe, 0x60, 0xb0, 0x8a, 0x3e,
+ 0x60, 0x5c, 0xad, 0xbe, 0x70, 0x06, 0x1c, 0x3f, 0x80, 0x08, 0x50, 0xbe,
+ 0x80, 0x08, 0xd0, 0xbe, 0x60, 0x5c, 0xad, 0xbe, 0x60, 0x5c, 0xad, 0xbe,
+ 0x80, 0x5c, 0xad, 0x3e, 0x60, 0x06, 0x1c, 0xbf, 0x90, 0x5e, 0x61, 0x3f,
+ 0x60, 0x5c, 0xad, 0xbe, 0x80, 0x08, 0xd0, 0xbe, 0x80, 0x08, 0x50, 0x3e,
+ 0x80, 0x08, 0xd0, 0xbe, 0x80, 0xb0, 0x8a, 0x3d, 0xa0, 0xb4, 0xf2, 0x3e,
+ 0xa0, 0xb4, 0xf2, 0xbe, 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x60, 0xb0, 0x0a, 0xbf, 0xa8, 0x5f, 0xfb, 0x3f, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x60, 0xb0, 0x8a, 0xbe, 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x88, 0x08, 0xd0, 0x3f, 0xa0, 0xb4, 0x72, 0x3f, 0x70, 0x06, 0x1c, 0x3f,
+ 0x80, 0x5c, 0xad, 0x3e, 0x80, 0x5d, 0xc7, 0xbf, 0x70, 0xb1, 0xa4, 0xbf,
+ 0x70, 0x5c, 0x2d, 0x3f, 0x58, 0xb0, 0x8a, 0xbf, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0xb0, 0x8a, 0xbd, 0x60, 0xb0, 0x8a, 0x3e, 0x80, 0xb2, 0x3e, 0x3f,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x12, 0x09, 0x5d, 0xc0, 0x00, 0x00, 0x00, 0x00,
+ 0x70, 0x5c, 0x2d, 0x3f, 0x80, 0xb0, 0x8a, 0xbd, 0x80, 0xb0, 0x8a, 0xbd,
+ 0x98, 0x5e, 0xe1, 0xbf, 0x90, 0x5e, 0x61, 0x3f, 0x80, 0x08, 0xd0, 0x3e,
+ 0x60, 0x5c, 0xad, 0xbe, 0x60, 0xb0, 0x8a, 0xbe, 0x00, 0x00, 0x00, 0x00,
+ 0x60, 0x06, 0x1c, 0xbf, 0x80, 0x08, 0x50, 0xbf, 0x70, 0x06, 0x1c, 0x3f,
+ 0x00, 0x00, 0x00, 0x00, 0xa0, 0xb4, 0xf2, 0xbe, 0x80, 0xb0, 0x8a, 0x3d,
+ 0x70, 0x06, 0x1c, 0x3f, 0x58, 0x05, 0x82, 0xbf, 0x40, 0xb0, 0x0a, 0xbe,
+ 0x80, 0xb0, 0x0a, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0xd0, 0xbe,
+ 0xa0, 0xb4, 0xf2, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x80, 0x08, 0x50, 0x3e, 0x60, 0x5c, 0xad, 0xbe, 0x20, 0x5f, 0x6e, 0x40,
+ 0x68, 0x06, 0x1c, 0xc0, 0x68, 0x06, 0x1c, 0xc0, 0x60, 0xb0, 0x8a, 0xbe,
+ 0x60, 0xb0, 0x0a, 0x3f, 0x2e, 0xdc, 0xa6, 0xc0, 0x70, 0x06, 0x1c, 0x3f,
+ 0x60, 0x06, 0x1c, 0xbf, 0x58, 0xb0, 0x8a, 0xbf, 0x70, 0x5c, 0x2d, 0x3f,
+ 0x60, 0x5b, 0x93, 0xbf, 0x80, 0x5c, 0xad, 0x3e, 0x60, 0xb0, 0x8a, 0xbe,
+ 0x40, 0xb0, 0x0a, 0xbe, 0x80, 0x08, 0x50, 0x3e, 0x80, 0x08, 0xd0, 0xbe,
+ 0x90, 0x5e, 0x61, 0x3f, 0x80, 0x08, 0xd0, 0x3e, 0x70, 0xb1, 0xa4, 0x3f,
+ 0x90, 0x5e, 0x61, 0x3f, 0x60, 0xb0, 0x0a, 0x3f, 0x60, 0x5b, 0x93, 0xbf,
+ 0x90, 0x5e, 0x61, 0x3f, 0x58, 0x05, 0x82, 0xbf, 0x70, 0x5c, 0xad, 0x3f,
+ 0xe0, 0x05, 0x0f, 0x40, 0x60, 0xb0, 0x0a, 0xbf, 0xa0, 0xb4, 0x72, 0xbf,
+ 0x90, 0x08, 0x50, 0x3f, 0xe8, 0x5b, 0x20, 0xc0, 0xfc, 0x5c, 0x3a, 0x40,
+ 0x80, 0x08, 0x50, 0x3e, 0x80, 0x08, 0x50, 0xbf, 0x90, 0xb3, 0xd8, 0xbf,
+ 0x90, 0x5e, 0x61, 0x3f, 0x40, 0xb0, 0x0a, 0xbe, 0x70, 0x5c, 0x2d, 0xbf,
+ 0x90, 0x5e, 0x61, 0x3f, 0x8a, 0x08, 0x50, 0xc0,
+}};
+const int32_t dnn_logits_bias__2__cf__2_shape[1] = {1};
+const union {
+ uint8_t bytes[4];
+ float values[1];
+} dnn_logits_bias__2__cf__2 = {{
+ 0x6c,
+ 0xee,
+ 0x8d,
+ 0xbf,
+}};
+const int32_t dnn_logits_kernel__3__cf__3_shape[2] = {20, 1};
+const union {
+ uint8_t bytes[80];
+ float values[20];
+} dnn_logits_kernel__3__cf__3 = {{
+ 0x96, 0x59, 0x45, 0xbd, 0x84, 0x25, 0xf6, 0xbd, 0xe9, 0x7c, 0x89, 0x3e,
+ 0xa0, 0x66, 0x3c, 0xbe, 0x37, 0x01, 0x89, 0x3d, 0xe4, 0x97, 0x22, 0x3e,
+ 0x21, 0xf8, 0x84, 0xbe, 0x92, 0x74, 0x8d, 0x3e, 0x30, 0xde, 0x0f, 0xbe,
+ 0x88, 0x44, 0x3b, 0xbe, 0x42, 0x78, 0xb8, 0x3d, 0x0a, 0xf2, 0xf6, 0xbd,
+ 0x48, 0x60, 0xd6, 0x3f, 0x2c, 0x86, 0x83, 0x3d, 0x92, 0xcc, 0xb6, 0x3e,
+ 0xab, 0xc5, 0x4b, 0x3e, 0x6f, 0x6e, 0x1f, 0x3f, 0x07, 0xcd, 0x32, 0x3e,
+ 0x5d, 0xb3, 0xb2, 0x3d, 0x31, 0x53, 0xf6, 0x3d,
+}};
+
+} // anonymous namespace
+
+// -----------------------------------------------------------------------------
+// INFERENCE
+// -----------------------------------------------------------------------------
+
+int32_t input_from_feature_columns_input_layer_concat_concat0Shape[2] = {1,
+ 325};
+int32_t logits_MatMul_merged_with_dnn_logits_BiasAdd0Shape[2] = {1, 1};
+
+void Inference(
+ const float* __restrict input_from_feature_columns_input_layer_concat_concat0 /* shape: 1,325 */
+ ,
+ float* __restrict logits_MatMul_merged_with_dnn_logits_BiasAdd0 /* shape:
+ 1,1 */
+ ,
+ FixedAllocations* __restrict fixed) {
+ const int32_t input_from_feature_columns_input_layer_concat_concat0_shape[] =
+ {1, 325};
+
+#if OP_LIB_BENCHMARK
+ Singleton<PerOpTimings>::get()->Reset();
+#endif
+
+ // dnn/hiddenlayer_0/MatMul_merged_with_dnn/hiddenlayer_0/BiasAdd
+ FullyConnected<float>(
+ input_from_feature_columns_input_layer_concat_concat0_shape,
+ input_from_feature_columns_input_layer_concat_concat0,
+ dnn_hiddenlayer_0_kernel__1__cf__1_shape,
+ dnn_hiddenlayer_0_kernel__1__cf__1.values,
+ dnn_hiddenlayer_0_bias__0__cf__0_shape,
+ dnn_hiddenlayer_0_bias__0__cf__0.values, fixed->alloc0);
+
+ fixed->shape0[0] = 1;
+ fixed->shape0[1] = 20;
+
+ // dnn/hiddenlayer_0/Relu
+ Relu<float>(2, // rank
+ fixed->shape0, fixed->alloc0, fixed->alloc0);
+
+ // dnn/logits/MatMul_merged_with_dnn/logits/BiasAdd
+ FullyConnected<float>(
+ fixed->shape0, fixed->alloc0, dnn_logits_kernel__3__cf__3_shape,
+ dnn_logits_kernel__3__cf__3.values, dnn_logits_bias__2__cf__2_shape,
+ dnn_logits_bias__2__cf__2.values,
+ logits_MatMul_merged_with_dnn_logits_BiasAdd0);
+
+#if OP_LIB_BENCHMARK
+ Singleton<PerOpTimings>::get()->WriteTimingsToInfoLog();
+#endif
+}
+
+} // namespace ui::internal_onedevice::beta_model
diff --git a/ui/events/ozone/evdev/touch_filter/palm_model/onedevice_train_palm_detection_filter_inference_beta.h b/ui/events/ozone/evdev/touch_filter/palm_model/onedevice_train_palm_detection_filter_inference_beta.h
new file mode 100644
index 0000000..efac7f4
--- /dev/null
+++ b/ui/events/ozone/evdev/touch_filter/palm_model/onedevice_train_palm_detection_filter_inference_beta.h
@@ -0,0 +1,40 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+// Code generated by tf.native.
+#ifndef UI_EVENTS_OZONE_EVDEV_TOUCH_FILTER_PALM_MODEL_ONEDEVICE_TRAIN_PALM_DETECTION_FILTER_INFERENCE_BETA_H_
+#define UI_EVENTS_OZONE_EVDEV_TOUCH_FILTER_PALM_MODEL_ONEDEVICE_TRAIN_PALM_DETECTION_FILTER_INFERENCE_BETA_H_
+#include <cstdint>
+
+namespace ui::internal_onedevice::beta_model {
+struct alignas(16) FixedAllocations {
+ float alloc0[20];
+ int32_t shape0[2];
+};
+
+extern int32_t input_from_feature_columns_input_layer_concat_concat0Shape[2];
+extern int32_t logits_MatMul_merged_with_dnn_logits_BiasAdd0Shape[2];
+
+#define CHROME_KNOWLEDGE_INPUT_FROM_FEATURE_COLUMNS_INPUT_LAYER_CONCAT_CONCAT0_RANK_BETA \
+ 2
+#define CHROME_KNOWLEDGE_INPUT_FROM_FEATURE_COLUMNS_INPUT_LAYER_CONCAT_CONCAT0_DIM0_SIZE_BETA \
+ 1
+#define CHROME_KNOWLEDGE_INPUT_FROM_FEATURE_COLUMNS_INPUT_LAYER_CONCAT_CONCAT0_DIM1_SIZE_BETA \
+ 325
+#define CHROME_KNOWLEDGE_LOGITS_MATMUL_MERGED_WITH_DNN_LOGITS_BIASADD0_RANK_BETA \
+ 2
+#define CHROME_KNOWLEDGE_LOGITS_MATMUL_MERGED_WITH_DNN_LOGITS_BIASADD0_DIM0_SIZE_BETA \
+ 1
+#define CHROME_KNOWLEDGE_LOGITS_MATMUL_MERGED_WITH_DNN_LOGITS_BIASADD0_DIM1_SIZE_BETA \
+ 1
+
+void Inference(
+ const float* __restrict input_from_feature_columns_input_layer_concat_concat0 /* shape: 1,325 */
+ ,
+ float* __restrict logits_MatMul_merged_with_dnn_logits_BiasAdd0 /* shape:
+ 1,1 */
+ ,
+ FixedAllocations* __restrict fixed);
+
+} // namespace ui::internal_onedevice::beta_model
+#endif // UI_EVENTS_OZONE_EVDEV_TOUCH_FILTER_PALM_MODEL_ONEDEVICE_TRAIN_PALM_DETECTION_FILTER_INFERENCE_BETA_H_
diff --git a/ui/events/ozone/evdev/touch_filter/palm_model/onedevice_train_palm_detection_filter_model.cc b/ui/events/ozone/evdev/touch_filter/palm_model/onedevice_train_palm_detection_filter_model.cc
index cd724da..acf43d8 100644
--- a/ui/events/ozone/evdev/touch_filter/palm_model/onedevice_train_palm_detection_filter_model.cc
+++ b/ui/events/ozone/evdev/touch_filter/palm_model/onedevice_train_palm_detection_filter_model.cc
@@ -19,20 +19,24 @@
#include "base/feature_list.h"
#include "base/logging.h"
#include "ui/events/ozone/evdev/touch_filter/palm_model/onedevice_train_palm_detection_filter_inference.h"
+#include "ui/events/ozone/evdev/touch_filter/palm_model/onedevice_train_palm_detection_filter_inference_beta.h"
#include "ui/events/ozone/evdev/touch_filter/palm_model/onedevice_train_palm_detection_filter_inference_v2.h"
-
#include "ui/events/ozone/features.h"
-
#define USE_EIGEN 0
namespace ui {
+namespace {
+const std::string kBetaVersion = "beta";
+}
namespace alpha = internal_onedevice::alpha_model;
namespace alpha_v2 = internal_onedevice::alpha_model_v2;
+namespace beta = internal_onedevice::beta_model;
float OneDeviceTrainNeuralStylusPalmDetectionFilterModel::Inference(
const std::vector<float>& features) const {
DVLOG(1) << "In Inference.";
+
if (features.size() != expected_feature_size_) {
LOG(DFATAL) << "Bad count. Is " << features.size() << " expected "
<< expected_feature_size_;
@@ -45,14 +49,20 @@ float OneDeviceTrainNeuralStylusPalmDetectionFilterModel::Inference(
}
}
float output = 0;
- if (base::FeatureList::IsEnabled(kEnableNeuralPalmRejectionModelV2)) {
- std::unique_ptr<alpha_v2::FixedAllocations> fixed_allocations(
- new alpha_v2::FixedAllocations());
- alpha_v2::Inference(&features[0], &output, fixed_allocations.get());
+ if (config_.model_version == kBetaVersion) {
+ std::unique_ptr<beta::FixedAllocations> fixed_allocations(
+ new beta::FixedAllocations());
+ beta::Inference(&features[0], &output, fixed_allocations.get());
} else {
- std::unique_ptr<alpha::FixedAllocations> fixed_allocations(
- new alpha::FixedAllocations());
- alpha::Inference(&features[0], &output, fixed_allocations.get());
+ if (base::FeatureList::IsEnabled(kEnableNeuralPalmRejectionModelV2)) {
+ std::unique_ptr<alpha_v2::FixedAllocations> fixed_allocations(
+ new alpha_v2::FixedAllocations());
+ alpha_v2::Inference(&features[0], &output, fixed_allocations.get());
+ } else {
+ std::unique_ptr<alpha::FixedAllocations> fixed_allocations(
+ new alpha::FixedAllocations());
+ alpha::Inference(&features[0], &output, fixed_allocations.get());
+ }
}
return output;
}
@@ -62,45 +72,57 @@ OneDeviceTrainNeuralStylusPalmDetectionFilterModel::config() const {
return config_;
}
-OneDeviceTrainNeuralStylusPalmDetectionFilterModel::
- OneDeviceTrainNeuralStylusPalmDetectionFilterModel() {
+void OneDeviceTrainNeuralStylusPalmDetectionFilterModel::Initialize() {
// Common configurations:
config_.include_sequence_count_in_strokes = true;
- config_.max_neighbor_distance_in_mm = 100.0f;
config_.max_dead_neighbor_time = base::Milliseconds(100.0f);
config_.heuristic_palm_touch_limit = 20.0f;
config_.heuristic_palm_area_limit = 400.0f;
config_.max_blank_time = base::Milliseconds(100.0f);
config_.nearest_neighbor_count = 0;
- config_.biggest_near_neighbor_count = 4;
-
- if (base::FeatureList::IsEnabled(kEnableNeuralPalmRejectionModelV2)) {
- config_.min_sample_count = 3;
- config_.max_sample_count = 6;
- config_.neighbor_min_sample_count = 1;
- config_.output_threshold = 0.90271f;
- expected_feature_size_ = 173;
- if (base::FeatureList::IsEnabled(kEnableNeuralPalmAdaptiveHold)) {
- config_.nn_delay_start_if_palm = true;
- config_.early_stage_sample_counts = std::unordered_set<uint32_t>({2});
- }
- } else {
+ if (config_.model_version == kBetaVersion) {
+ config_.max_neighbor_distance_in_mm = 200.0f;
+ config_.biggest_near_neighbor_count = 4;
config_.min_sample_count = 5;
config_.max_sample_count = 12;
config_.neighbor_min_sample_count = 5;
- config_.output_threshold = 2.519f;
- expected_feature_size_ = 323;
+ config_.output_threshold = 4.465f;
+ config_.use_tracking_id_count = true;
+ config_.use_active_tracking_id_count = true;
+ expected_feature_size_ = 325;
+ } else {
+ config_.max_neighbor_distance_in_mm = 100.0f;
+ config_.biggest_near_neighbor_count = 4;
+
+ if (base::FeatureList::IsEnabled(kEnableNeuralPalmRejectionModelV2)) {
+ config_.min_sample_count = 3;
+ config_.max_sample_count = 6;
+ config_.neighbor_min_sample_count = 1;
+ config_.output_threshold = 0.90271f;
+ expected_feature_size_ = 173;
+
+ if (base::FeatureList::IsEnabled(kEnableNeuralPalmAdaptiveHold)) {
+ config_.nn_delay_start_if_palm = true;
+ config_.early_stage_sample_counts = std::unordered_set<uint32_t>({2});
+ }
+ } else {
+ config_.min_sample_count = 5;
+ config_.max_sample_count = 12;
+ config_.neighbor_min_sample_count = 5;
+ config_.output_threshold = 2.519f;
+ expected_feature_size_ = 323;
+ }
}
}
OneDeviceTrainNeuralStylusPalmDetectionFilterModel::
OneDeviceTrainNeuralStylusPalmDetectionFilterModel(
const std::string& model_version,
- const std::vector<float>& radius_poly)
- : OneDeviceTrainNeuralStylusPalmDetectionFilterModel() {
+ const std::vector<float>& radius_poly) {
config_.model_version = model_version;
config_.radius_polynomial_resize = radius_poly;
+ Initialize();
}
-} // namespace ui \ No newline at end of file
+} // namespace ui
diff --git a/ui/events/ozone/evdev/touch_filter/palm_model/onedevice_train_palm_detection_filter_model.h b/ui/events/ozone/evdev/touch_filter/palm_model/onedevice_train_palm_detection_filter_model.h
index d514a35..eb020c8 100644
--- a/ui/events/ozone/evdev/touch_filter/palm_model/onedevice_train_palm_detection_filter_model.h
+++ b/ui/events/ozone/evdev/touch_filter/palm_model/onedevice_train_palm_detection_filter_model.h
@@ -18,7 +18,6 @@ namespace ui {
class COMPONENT_EXPORT(EVDEV) OneDeviceTrainNeuralStylusPalmDetectionFilterModel
: public NeuralStylusPalmDetectionFilterModel {
public:
- OneDeviceTrainNeuralStylusPalmDetectionFilterModel();
explicit OneDeviceTrainNeuralStylusPalmDetectionFilterModel(
const std::string& model_version,
const std::vector<float>& radius_poly);
@@ -32,14 +31,14 @@ class COMPONENT_EXPORT(EVDEV) OneDeviceTrainNeuralStylusPalmDetectionFilterModel
const NeuralStylusPalmDetectionFilterModelConfig& config() const override;
- // Config is further modified by Android classes inheriting from this class
protected:
NeuralStylusPalmDetectionFilterModelConfig config_;
private:
+ void Initialize();
size_t expected_feature_size_;
};
} // namespace ui
-#endif // UI_EVENTS_OZONE_EVDEV_TOUCH_FILTER_PALM_MODEL_ONEDEVICE_TRAIN_PALM_DETECTION_FILTER_MODEL_H_ \ No newline at end of file
+#endif // UI_EVENTS_OZONE_EVDEV_TOUCH_FILTER_PALM_MODEL_ONEDEVICE_TRAIN_PALM_DETECTION_FILTER_MODEL_H_
diff --git a/ui/events/ozone/evdev/touch_filter/shared_palm_detection_filter_state.cc b/ui/events/ozone/evdev/touch_filter/shared_palm_detection_filter_state.cc
new file mode 100644
index 0000000..7e843ba
--- /dev/null
+++ b/ui/events/ozone/evdev/touch_filter/shared_palm_detection_filter_state.cc
@@ -0,0 +1,25 @@
+// Copyright 2022 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ui/events/ozone/evdev/touch_filter/shared_palm_detection_filter_state.h"
+
+namespace ui {
+
+std::ostream& operator<<(std::ostream& out,
+ const SharedPalmDetectionFilterState& state) {
+ base::TimeTicks now = base::TimeTicks::Now();
+ out << "SharedPalmDetectionFilterState(\n";
+ out << " latest_stylus_touch_time = " << state.latest_stylus_touch_time
+ << " (" << now - state.latest_stylus_touch_time << " from now)\n";
+ out << " latest_finger_touch_time = " << state.latest_finger_touch_time
+ << "\n";
+ out << " active_finger_touches = " << state.active_finger_touches << "\n";
+ out << " active_palm_touches = " << state.active_palm_touches << "\n";
+ out << " latest_palm_touch_time = " << state.latest_palm_touch_time << "\n";
+ out << " Now() = " << now << "\n";
+ out << ")";
+ return out;
+}
+
+} // namespace ui \ No newline at end of file
diff --git a/ui/events/ozone/evdev/touch_filter/shared_palm_detection_filter_state.h b/ui/events/ozone/evdev/touch_filter/shared_palm_detection_filter_state.h
index 942e6d2..bff9abb 100644
--- a/ui/events/ozone/evdev/touch_filter/shared_palm_detection_filter_state.h
+++ b/ui/events/ozone/evdev/touch_filter/shared_palm_detection_filter_state.h
@@ -29,6 +29,9 @@ struct SharedPalmDetectionFilterState {
base::TimeTicks latest_palm_touch_time = base::TimeTicks::UnixEpoch();
};
+std::ostream& operator<<(std::ostream& out,
+ const SharedPalmDetectionFilterState& state);
+
} // namespace ui
#endif // UI_EVENTS_OZONE_EVDEV_TOUCH_FILTER_SHARED_PALM_DETECTION_FILTER_STATE_H_ \ No newline at end of file