Auto merge of #29774 - michaelgrigoryan25:issue#29773, r=jdm

Remove MagicLeap support

<!-- Please describe your changes on the following line: -->

Discussed in more detail in #29773.

---
<!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `___` with appropriate data: -->
- [x] `./mach build -d` does not report any errors
- [x] `./mach test-tidy` does not report any errors
- [X] These changes fix #29773 (GitHub issue number if applicable)

<!-- Also, please make sure that "Allow edits from maintainers" checkbox is checked, so that we can help you if you get stuck somewhere along the way.-->

<!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. -->
This commit is contained in:
bors-servo 2023-05-23 22:38:01 +02:00 committed by GitHub
commit 0377a1853a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
65 changed files with 31 additions and 7665 deletions

23
Cargo.lock generated
View file

@ -3296,20 +3296,6 @@ version = "0.2.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "348108ab3fba42ec82ff6e9564fc4ca0247bdccdc68dd8af9764bbc79c3c8ffb"
[[package]]
name = "libmlservo"
version = "0.0.1"
dependencies = [
"libc",
"libservo",
"log",
"servo-egl",
"simpleservo",
"smallvec",
"webxr",
"webxr-api",
]
[[package]]
name = "libservo"
version = "0.0.1"
@ -5382,15 +5368,6 @@ dependencies = [
"time-point",
]
[[package]]
name = "servo-egl"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "21069a884c33fe6ee596975e1f3849ed88c4ec857fbaf11d33672d8ebe051217"
dependencies = [
"libc",
]
[[package]]
name = "servo-gst-plugin"
version = "0.0.1"

View file

@ -5,7 +5,6 @@ members = [
"ports/gstplugin",
"ports/libsimpleservo/capi/",
"ports/libsimpleservo/jniapi/",
"ports/libmlservo/",
"tests/unit/*",
]
exclude = [".cargo"]

View file

@ -34,8 +34,6 @@ mac-rel-css2: []
android-nightly: []
windows-msvc-nightly: []
mac-nightly: []
magicleap-nightly: []
magicleap: []
linux-nightly: []
linux-rel-wpt: []
linux-rel-css: []

View file

@ -1,28 +0,0 @@
[package]
name = "libmlservo"
version = "0.0.1"
authors = ["The Servo Project Developers"]
license = "MPL-2.0"
edition = "2018"
publish = false
[lib]
name = "mlservo"
crate-type = ["staticlib"]
test = false
bench = false
[features]
egl = ["simpleservo/egl"]
layout-2013 = ["simpleservo/layout-2013"]
layout-2020 = ["simpleservo/layout-2020"]
[dependencies]
libc = { workspace = true }
libservo = { path = "../../components/servo", features = ["no_static_freetype"] }
log = { workspace = true }
servo-egl = "0.2"
simpleservo = { path = "../libsimpleservo/api", features = ["no_static_freetype"] }
smallvec = { workspace = true }
webxr = { git = "https://github.com/servo/webxr", features = ["ipc", "magicleap"] }
webxr-api = { git = "https://github.com/servo/webxr", features = ["ipc"] }

View file

@ -1,571 +0,0 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
use egl::egl::EGLContext;
use egl::egl::EGLDisplay;
use egl::egl::EGLSurface;
use egl::egl::MakeCurrent;
use egl::egl::SwapBuffers;
use libc::{dup2, pipe, read};
use log::info;
use log::warn;
use rust_webvr::api::MagicLeapVRService;
use servo::euclid::Scale;
use servo::keyboard_types::Key;
use servo::servo_url::ServoUrl;
use servo::webrender_api::units::{DeviceIntRect, DevicePixel, DevicePoint, LayoutPixel};
use simpleservo::{self, deinit, gl_glue, MouseButton, ServoGlue, SERVO};
use simpleservo::{
Coordinates, EventLoopWaker, HostTrait, InitOptions, InputMethodType, PromptResult,
VRInitOptions,
};
use smallvec::SmallVec;
use std::cell::Cell;
use std::ffi::CStr;
use std::ffi::CString;
use std::io::Write;
use std::os::raw::c_char;
use std::os::raw::c_int;
use std::os::raw::c_void;
use std::rc::Rc;
use std::thread;
use std::time::Duration;
use std::time::Instant;
use webxr::magicleap::MagicLeapDiscovery;
#[repr(u32)]
pub enum MLLogLevel {
Fatal = 0,
Error = 1,
Warning = 2,
Info = 3,
Debug = 4,
Verbose = 5,
}
#[repr(C)]
#[allow(non_camel_case_types)]
pub enum MLKeyType {
kNone,
kCharacter,
kBackspace,
kShift,
kSpeechToText,
kPageEmoji,
kPageLowerLetters,
kPageNumericSymbols,
kCancel,
kSubmit,
kPrevious,
kNext,
kClear,
kClose,
kEnter,
kCustom1,
kCustom2,
kCustom3,
kCustom4,
kCustom5,
}
#[repr(transparent)]
#[derive(Clone, Copy)]
pub struct MLLogger(Option<extern "C" fn(MLLogLevel, *const c_char)>);
#[repr(transparent)]
pub struct MLHistoryUpdate(Option<extern "C" fn(MLApp, bool, bool)>);
#[repr(transparent)]
pub struct MLURLUpdate(Option<extern "C" fn(MLApp, *const c_char)>);
#[repr(transparent)]
pub struct MLKeyboard(Option<extern "C" fn(MLApp, bool)>);
#[repr(transparent)]
#[derive(Clone, Copy)]
pub struct MLApp(*mut c_void);
const LOG_LEVEL: log::LevelFilter = log::LevelFilter::Info;
fn call<F, T>(f: F) -> Result<T, &'static str>
where
F: FnOnce(&mut ServoGlue) -> Result<T, &'static str>,
{
SERVO.with(|s| match s.borrow_mut().as_mut() {
Some(ref mut s) => (f)(s),
None => Err("Servo is not available in this thread"),
})
}
#[no_mangle]
pub unsafe extern "C" fn init_servo(
ctxt: EGLContext,
surf: EGLSurface,
disp: EGLDisplay,
landscape: bool,
app: MLApp,
logger: MLLogger,
history_update: MLHistoryUpdate,
url_update: MLURLUpdate,
keyboard: MLKeyboard,
url: *const c_char,
default_args: *const c_char,
width: u32,
height: u32,
hidpi: f32,
) -> *mut ServoInstance {
redirect_stdout_to_log(logger);
let _ = log::set_boxed_logger(Box::new(logger));
log::set_max_level(LOG_LEVEL);
let gl = gl_glue::egl::init().expect("EGL initialization failure");
let coordinates = Coordinates::new(
0,
0,
width as i32,
height as i32,
width as i32,
height as i32,
);
let mut url = CStr::from_ptr(url).to_str().unwrap_or("about:blank");
// If the URL has a space in it, then treat everything before the space as arguments
let args = if let Some(i) = url.rfind(' ') {
let (front, back) = url.split_at(i);
url = back;
front.split(' ').map(|s| s.to_owned()).collect()
} else if !default_args.is_null() {
CStr::from_ptr(default_args)
.to_str()
.unwrap_or("")
.split(' ')
.map(|s| s.to_owned())
.collect()
} else {
Vec::new()
};
info!("got args: {:?}", args);
let vr_init = if !landscape {
let name = String::from("Magic Leap VR Display");
let (service, heartbeat) = MagicLeapVRService::new(name, ctxt, gl.gl_wrapper.clone())
.expect("Failed to create VR service");
let service = Box::new(service);
let heartbeat = Box::new(heartbeat);
VRInitOptions::VRService(service, heartbeat)
} else {
VRInitOptions::None
};
let xr_discovery: Option<Box<dyn webxr_api::Discovery>> = if !landscape {
let discovery = MagicLeapDiscovery::new(ctxt, gl.gl_wrapper.clone());
Some(Box::new(discovery))
} else {
None
};
let opts = InitOptions {
args,
density: hidpi,
xr_discovery,
coordinates,
gl_context_pointer: Some(ctxt),
native_display_pointer: Some(disp),
..Default::default()
};
let wakeup = Box::new(EventLoopWakerInstance);
let shut_down_complete = Rc::new(Cell::new(false));
let callbacks = Box::new(HostCallbacks {
app,
ctxt,
surf,
disp,
landscape,
shut_down_complete: shut_down_complete.clone(),
history_update,
url_update,
keyboard,
});
info!("Starting servo");
simpleservo::init(opts, gl.gl_wrapper, wakeup, callbacks).expect("error initializing Servo");
let result = Box::new(ServoInstance {
scroll_state: ScrollState::TriggerUp,
scroll_scale: Scale::new(SCROLL_SCALE / hidpi),
shut_down_complete,
});
Box::into_raw(result)
}
#[no_mangle]
pub unsafe extern "C" fn heartbeat_servo(_servo: *mut ServoInstance) {
let _ = call(|s| s.perform_updates());
}
#[no_mangle]
pub unsafe extern "C" fn keyboard_servo(
_servo: *mut ServoInstance,
key_code: char,
key_type: MLKeyType,
) {
let key = match key_type {
MLKeyType::kCharacter => Key::Character([key_code].iter().collect()),
MLKeyType::kBackspace => Key::Backspace,
MLKeyType::kEnter => Key::Enter,
_ => return,
};
// TODO: can the ML1 generate separate press and release events?
let key2 = key.clone();
let _ = call(move |s| s.key_down(key2));
let _ = call(move |s| s.key_up(key));
}
// Some magic numbers.
// How far does the cursor have to move for it to count as a drag rather than a click?
// (In device pixels squared, to avoid taking a sqrt when calculating move distance.)
const DRAG_CUTOFF_SQUARED: f32 = 900.0;
// How much should we scale scrolling by?
const SCROLL_SCALE: f32 = 3.0;
#[no_mangle]
pub unsafe extern "C" fn move_servo(servo: *mut ServoInstance, x: f32, y: f32) {
// Servo's cursor was moved
if let Some(servo) = servo.as_mut() {
let point = DevicePoint::new(x, y);
match servo.scroll_state {
ScrollState::TriggerUp => {
servo.scroll_state = ScrollState::TriggerUp;
let _ = call(|s| s.mouse_move(x, y));
},
ScrollState::TriggerDown(start)
if (start - point).square_length() < DRAG_CUTOFF_SQUARED =>
{
return;
},
ScrollState::TriggerDown(start) => {
servo.scroll_state = ScrollState::TriggerDragging(start, point);
let _ = call(|s| s.mouse_move(x, y));
let delta = (point - start) * servo.scroll_scale;
let start = start.to_i32();
let _ = call(|s| s.scroll_start(delta.x, delta.y, start.x, start.y));
},
ScrollState::TriggerDragging(start, prev) => {
servo.scroll_state = ScrollState::TriggerDragging(start, point);
let _ = call(|s| s.mouse_move(x, y));
let delta = (point - prev) * servo.scroll_scale;
let start = start.to_i32();
let _ = call(|s| s.scroll(delta.x, delta.y, start.x, start.y));
},
}
}
}
#[no_mangle]
pub unsafe extern "C" fn trigger_servo(servo: *mut ServoInstance, x: f32, y: f32, down: bool) {
// Servo was triggered
if let Some(servo) = servo.as_mut() {
let point = DevicePoint::new(x, y);
match servo.scroll_state {
ScrollState::TriggerUp if down => {
servo.scroll_state = ScrollState::TriggerDown(point);
let _ = call(|s| s.mouse_down(x, y, MouseButton::Left));
},
ScrollState::TriggerDown(start) if !down => {
servo.scroll_state = ScrollState::TriggerUp;
let _ = call(|s| s.mouse_up(start.x, start.y, MouseButton::Left));
let _ = call(|s| s.click(start.x as f32, start.y as f32));
let _ = call(|s| s.mouse_move(start.x, start.y));
},
ScrollState::TriggerDragging(start, prev) if !down => {
servo.scroll_state = ScrollState::TriggerUp;
let delta = (point - prev) * servo.scroll_scale;
let start = start.to_i32();
let _ = call(|s| s.scroll_end(delta.x, delta.y, start.x, start.y));
let _ = call(|s| s.mouse_up(x, y, MouseButton::Left));
},
_ => return,
}
}
}
#[no_mangle]
pub unsafe extern "C" fn traverse_servo(_servo: *mut ServoInstance, delta: i32) {
// Traverse the session history
if delta == 0 {
let _ = call(|s| s.reload());
} else if delta < 0 {
let _ = call(|s| s.go_back());
} else {
let _ = call(|s| s.go_forward());
}
}
#[no_mangle]
pub unsafe extern "C" fn navigate_servo(_servo: *mut ServoInstance, text: *const c_char) {
let text = CStr::from_ptr(text)
.to_str()
.expect("Failed to convert text to UTF-8");
let url = ServoUrl::parse(text).unwrap_or_else(|_| {
let mut search = ServoUrl::parse("https://duckduckgo.com")
.expect("Failed to parse search URL")
.into_url();
search.query_pairs_mut().append_pair("q", text);
ServoUrl::from_url(search)
});
let _ = call(|s| s.load_uri(url.as_str()));
}
// Some magic numbers for shutdown
const SHUTDOWN_DURATION: Duration = Duration::from_secs(10);
const SHUTDOWN_POLL_INTERVAL: Duration = Duration::from_millis(100);
#[no_mangle]
pub unsafe extern "C" fn discard_servo(servo: *mut ServoInstance) {
if let Some(servo) = servo.as_mut() {
let servo = Box::from_raw(servo);
let finish = Instant::now() + SHUTDOWN_DURATION;
let _ = call(|s| s.request_shutdown());
while !servo.shut_down_complete.get() {
let _ = call(|s| s.perform_updates());
if Instant::now() > finish {
warn!("Incomplete shutdown.");
}
thread::sleep(SHUTDOWN_POLL_INTERVAL);
}
deinit();
}
}
struct HostCallbacks {
ctxt: EGLContext,
surf: EGLSurface,
disp: EGLDisplay,
landscape: bool,
shut_down_complete: Rc<Cell<bool>>,
history_update: MLHistoryUpdate,
url_update: MLURLUpdate,
app: MLApp,
keyboard: MLKeyboard,
}
impl HostTrait for HostCallbacks {
fn flush(&self) {
// Immersive and landscape apps have different requirements for who calls SwapBuffers.
if self.landscape {
SwapBuffers(self.disp, self.surf);
}
}
fn make_current(&self) {
MakeCurrent(self.disp, self.surf, self.surf, self.ctxt);
}
fn prompt_alert(&self, message: String, _trusted: bool) {
warn!("Prompt Alert: {}", message);
}
fn prompt_ok_cancel(&self, message: String, _trusted: bool) -> PromptResult {
warn!("Prompt not implemented. Cancelled. {}", message);
PromptResult::Secondary
}
fn prompt_yes_no(&self, message: String, _trusted: bool) -> PromptResult {
warn!("Prompt not implemented. Cancelled. {}", message);
PromptResult::Secondary
}
fn prompt_input(&self, message: String, default: String, _trusted: bool) -> Option<String> {
warn!("Input prompt not implemented. {}", message);
Some(default)
}
fn on_load_started(&self) {}
fn on_load_ended(&self) {}
fn on_title_changed(&self, _title: String) {}
fn on_allow_navigation(&self, _url: String) -> bool {
true
}
fn on_url_changed(&self, url: String) {
if let Ok(cstr) = CString::new(url.as_str()) {
if let Some(url_update) = self.url_update.0 {
url_update(self.app, cstr.as_ptr());
}
}
}
fn on_history_changed(&self, can_go_back: bool, can_go_forward: bool) {
if let Some(history_update) = self.history_update.0 {
history_update(self.app, can_go_back, can_go_forward);
}
}
fn on_animating_changed(&self, _animating: bool) {}
fn on_shutdown_complete(&self) {
self.shut_down_complete.set(true);
}
fn on_ime_show(
&self,
_input_type: InputMethodType,
_text: Option<(String, i32)>,
_multiline: bool,
_bounds: DeviceIntRect,
) {
if let Some(keyboard) = self.keyboard.0 {
keyboard(self.app, true)
}
}
fn on_ime_hide(&self) {
if let Some(keyboard) = self.keyboard.0 {
keyboard(self.app, false)
}
}
fn get_clipboard_contents(&self) -> Option<String> {
None
}
fn set_clipboard_contents(&self, _contents: String) {}
fn on_devtools_started(&self, port: Result<u16, ()>) {
match port {
Ok(p) => info!("Devtools Server running on port {}", p),
Err(()) => error!("Error running Devtools server"),
}
}
}
pub struct ServoInstance {
scroll_state: ScrollState,
scroll_scale: Scale<f32, DevicePixel, LayoutPixel>,
shut_down_complete: Rc<Cell<bool>>,
}
#[derive(Clone, Copy)]
enum ScrollState {
TriggerUp,
TriggerDown(DevicePoint),
TriggerDragging(DevicePoint, DevicePoint),
}
struct EventLoopWakerInstance;
impl EventLoopWaker for EventLoopWakerInstance {
fn clone_box(&self) -> Box<dyn EventLoopWaker> {
Box::new(EventLoopWakerInstance)
}
fn wake(&self) {}
}
impl log::Log for MLLogger {
fn enabled(&self, metadata: &log::Metadata) -> bool {
metadata.level() <= LOG_LEVEL
}
fn log(&self, record: &log::Record) {
if let Some(log) = self.0 {
let lvl = match record.level() {
log::Level::Error => MLLogLevel::Error,
log::Level::Warn => MLLogLevel::Warning,
log::Level::Info => MLLogLevel::Info,
log::Level::Debug => MLLogLevel::Debug,
log::Level::Trace => MLLogLevel::Verbose,
};
let mut msg = SmallVec::<[u8; 128]>::new();
write!(msg, "{}\0", record.args()).unwrap();
log(lvl, &msg[0] as *const _ as *const _);
}
}
fn flush(&self) {}
}
fn redirect_stdout_to_log(logger: MLLogger) {
let log = match logger.0 {
None => return,
Some(log) => log,
};
// The first step is to redirect stdout and stderr to the logs.
// We redirect stdout and stderr to a custom descriptor.
let mut pfd: [c_int; 2] = [0, 0];
unsafe {
pipe(pfd.as_mut_ptr());
dup2(pfd[1], 1);
dup2(pfd[1], 2);
}
let descriptor = pfd[0];
// Then we spawn a thread whose only job is to read from the other side of the
// pipe and redirect to the logs.
let _detached = thread::spawn(move || {
const BUF_LENGTH: usize = 512;
let mut buf = vec![b'\0' as c_char; BUF_LENGTH];
// Always keep at least one null terminator
const BUF_AVAILABLE: usize = BUF_LENGTH - 1;
let buf = &mut buf[..BUF_AVAILABLE];
let mut cursor = 0_usize;
loop {
let result = {
let read_into = &mut buf[cursor..];
unsafe {
read(
descriptor,
read_into.as_mut_ptr() as *mut _,
read_into.len(),
)
}
};
let end = if result == 0 {
return;
} else if result < 0 {
log(
MLLogLevel::Error,
b"error in log thread; closing\0".as_ptr() as *const _,
);
return;
} else {
result as usize + cursor
};
// Only modify the portion of the buffer that contains real data.
let buf = &mut buf[0..end];
if let Some(last_newline_pos) = buf.iter().rposition(|&c| c == b'\n' as c_char) {
buf[last_newline_pos] = b'\0' as c_char;
log(MLLogLevel::Info, buf.as_ptr());
if last_newline_pos < buf.len() - 1 {
let pos_after_newline = last_newline_pos + 1;
let len_not_logged_yet = buf[pos_after_newline..].len();
for j in 0..len_not_logged_yet as usize {
buf[j] = buf[pos_after_newline + j];
}
cursor = len_not_logged_yet;
} else {
cursor = 0;
}
} else if end == BUF_AVAILABLE {
// No newline found but the buffer is full, flush it anyway.
// `buf.as_ptr()` is null-terminated by BUF_LENGTH being 1 less than BUF_AVAILABLE.
log(MLLogLevel::Info, buf.as_ptr());
cursor = 0;
} else {
cursor = end;
}
}
});
}

View file

@ -70,7 +70,7 @@ class MachCommands(CommandBase):
@CommandBase.build_like_command_arguments
def build(self, release=False, dev=False, jobs=None, params=None, media_stack=None,
no_package=False, verbose=False, very_verbose=False,
target=None, android=False, magicleap=False, libsimpleservo=False,
target=None, android=False, libsimpleservo=False,
features=None, uwp=False, win_arm64=False, **kwargs):
# Force the UWP-enabled target if the convenience UWP flags are passed.
if uwp and not target:
@ -82,7 +82,7 @@ class MachCommands(CommandBase):
opts = params or []
features = features or []
target, android = self.pick_target_triple(target, android, magicleap)
target, android = self.pick_target_triple(target, android)
# Infer UWP build if only provided a target.
if not uwp:
@ -96,9 +96,7 @@ class MachCommands(CommandBase):
if android:
target_path = path.join(target_path, "android")
base_path = path.join(target_path, target)
elif magicleap:
target_path = path.join(target_path, "magicleap")
base_path = path.join(target_path, target)
release_path = path.join(base_path, "release", "servo")
dev_path = path.join(base_path, "debug", "servo")
@ -422,121 +420,6 @@ class MachCommands(CommandBase):
expr = "s#libdir=.*#libdir=%s#g" % gst_lib_path
subprocess.call(["perl", "-i", "-pe", expr, pc])
if magicleap:
if platform.system() not in ["Darwin"]:
raise Exception("Magic Leap builds are only supported on macOS. "
"If you only wish to test if your code builds, "
"run ./mach build -p libmlservo.")
ml_sdk = env.get("MAGICLEAP_SDK")
if not ml_sdk:
raise Exception("Magic Leap builds need the MAGICLEAP_SDK environment variable")
if not os.path.exists(ml_sdk):
raise Exception("Path specified by MAGICLEAP_SDK does not exist.")
ml_support = path.join(self.get_top_dir(), "support", "magicleap")
# We pretend to be an Android build
env.setdefault("ANDROID_VERSION", "21")
env.setdefault("ANDROID_NDK", env["MAGICLEAP_SDK"])
env.setdefault("ANDROID_NDK_VERSION", "16.0.0")
env.setdefault("ANDROID_PLATFORM_DIR", path.join(env["MAGICLEAP_SDK"], "lumin"))
env.setdefault("ANDROID_TOOLCHAIN_DIR", path.join(env["MAGICLEAP_SDK"], "tools", "toolchains"))
env.setdefault("ANDROID_CLANG", path.join(env["ANDROID_TOOLCHAIN_DIR"], "bin", "clang"))
# A random collection of search paths
env.setdefault("STLPORT_LIBS", " ".join([
"-L" + path.join(env["MAGICLEAP_SDK"], "lumin", "stl", "libc++-lumin", "lib"),
"-lc++"
]))
env.setdefault("STLPORT_CPPFLAGS", " ".join([
"-I" + path.join(env["MAGICLEAP_SDK"], "lumin", "stl", "libc++-lumin", "include")
]))
env.setdefault("CPPFLAGS", " ".join([
"--no-standard-includes",
"--sysroot=" + env["ANDROID_PLATFORM_DIR"],
"-I" + path.join(env["ANDROID_PLATFORM_DIR"], "usr", "include"),
"-isystem" + path.join(env["ANDROID_TOOLCHAIN_DIR"], "lib64", "clang", "3.8", "include"),
]))
env.setdefault("CFLAGS", " ".join([
env["CPPFLAGS"],
"-L" + path.join(env["ANDROID_TOOLCHAIN_DIR"], "lib", "gcc", target, "4.9.x"),
]))
env.setdefault("CXXFLAGS", " ".join([
# Sigh, Angle gets confused if there's another EGL around
"-I./gfx/angle/checkout/include",
env["STLPORT_CPPFLAGS"],
env["CFLAGS"]
]))
# The toolchain commands
env.setdefault("AR", path.join(env["ANDROID_TOOLCHAIN_DIR"], "bin", "aarch64-linux-android-ar"))
env.setdefault("AS", path.join(env["ANDROID_TOOLCHAIN_DIR"], "bin", "aarch64-linux-android-clang"))
env.setdefault("CC", path.join(env["ANDROID_TOOLCHAIN_DIR"], "bin", "aarch64-linux-android-clang"))
env.setdefault("CPP", path.join(env["ANDROID_TOOLCHAIN_DIR"], "bin", "aarch64-linux-android-clang -E"))
env.setdefault("CXX", path.join(env["ANDROID_TOOLCHAIN_DIR"], "bin", "aarch64-linux-android-clang++"))
env.setdefault("LD", path.join(env["ANDROID_TOOLCHAIN_DIR"], "bin", "aarch64-linux-android-ld"))
env.setdefault("OBJCOPY", path.join(env["ANDROID_TOOLCHAIN_DIR"], "bin", "aarch64-linux-android-objcopy"))
env.setdefault("OBJDUMP", path.join(env["ANDROID_TOOLCHAIN_DIR"], "bin", "aarch64-linux-android-objdump"))
env.setdefault("RANLIB", path.join(env["ANDROID_TOOLCHAIN_DIR"], "bin", "aarch64-linux-android-ranlib"))
env.setdefault("STRIP", path.join(env["ANDROID_TOOLCHAIN_DIR"], "bin", "aarch64-linux-android-strip"))
# Undo all of that when compiling build tools for the host
env.setdefault("HOST_CFLAGS", "")
env.setdefault("HOST_CXXFLAGS", "")
env.setdefault("HOST_CC", "/usr/local/opt/llvm/bin/clang")
env.setdefault("HOST_CXX", "/usr/local/opt/llvm/bin/clang++")
env.setdefault("HOST_LD", "ld")
# Some random build configurations
env.setdefault("HARFBUZZ_SYS_NO_PKG_CONFIG", "1")
env.setdefault("PKG_CONFIG_ALLOW_CROSS", "1")
env.setdefault("CMAKE_TOOLCHAIN_FILE", path.join(ml_support, "toolchain.cmake"))
env.setdefault("_LIBCPP_INLINE_VISIBILITY", "__attribute__((__always_inline__))")
# The Open SSL configuration
env.setdefault("OPENSSL_DIR", path.join(target_path, target, "native", "openssl"))
env.setdefault("OPENSSL_VERSION", "1.1.1d")
env.setdefault("OPENSSL_STATIC", "1")
# GStreamer configuration
env.setdefault("GSTREAMER_DIR", path.join(target_path, target, "native", "gstreamer-1.16.0"))
env.setdefault("GSTREAMER_URL", "https://servo-deps-2.s3.amazonaws.com/gstreamer/gstreamer-magicleap-1.16.0-20190823-104505.tgz")
env.setdefault("PKG_CONFIG_PATH", path.join(env["GSTREAMER_DIR"], "system", "lib64", "pkgconfig"))
# Override the linker set in .cargo/config
env.setdefault("CARGO_TARGET_AARCH64_LINUX_ANDROID_LINKER", path.join(ml_support, "fake-ld.sh"))
# Only build libmlservo
opts += ["--package", "libmlservo"]
# Download and build OpenSSL if necessary
status = call(path.join(ml_support, "openssl.sh"), env=env, verbose=verbose)
if status:
return status
# Download prebuilt Gstreamer if necessary
if not os.path.exists(path.join(env["GSTREAMER_DIR"], "system")):
if not os.path.exists(env["GSTREAMER_DIR"] + ".tgz"):
check_call([
'curl',
'-L',
'-f',
'-o', env["GSTREAMER_DIR"] + ".tgz",
env["GSTREAMER_URL"],
])
check_call([
'mkdir',
'-p',
env["GSTREAMER_DIR"],
])
check_call([
'tar',
'xzf',
env["GSTREAMER_DIR"] + ".tgz",
'-C', env["GSTREAMER_DIR"],
])
# https://internals.rust-lang.org/t/exploring-crate-graph-build-times-with-cargo-build-ztimings/10975
# Prepend so that e.g. `-Ztimings` (which means `-Ztimings=info,html`)
# given on the command line can override it
@ -553,7 +436,7 @@ class MachCommands(CommandBase):
status = self.run_cargo_build_like_command(
"build", opts, env=env, verbose=verbose,
target=target, android=android, magicleap=magicleap, libsimpleservo=libsimpleservo, uwp=uwp,
target=target, android=android, libsimpleservo=libsimpleservo, uwp=uwp,
features=features, **kwargs
)

View file

@ -356,17 +356,14 @@ class CommandBase(object):
build_type = "release" if release else "debug"
return path.join(base_path, build_type, apk_name)
def get_binary_path(self, release, dev, target=None, android=False, magicleap=False, simpleservo=False):
def get_binary_path(self, release, dev, target=None, android=False, simpleservo=False):
# TODO(autrilla): this function could still use work - it shouldn't
# handle quitting, or printing. It should return the path, or an error.
base_path = self.get_target_dir()
binary_name = "servo" + BIN_SUFFIX
if magicleap:
base_path = path.join(base_path, "magicleap", "aarch64-linux-android")
binary_name = "libmlservo.a"
elif android:
if android:
base_path = path.join(base_path, "android", self.config["android"]["target"])
simpleservo = True
elif target:
@ -823,12 +820,6 @@ install them, let us know by filing a bug!")
action='store_true',
help='Build for Android',
),
CommandArgument(
'--magicleap',
default=None,
action='store_true',
help='Build for Magic Leap',
),
CommandArgument(
'--libsimpleservo',
default=None,
@ -868,16 +859,14 @@ install them, let us know by filing a bug!")
decorated_function = decorator(decorated_function)
return decorated_function
def pick_target_triple(self, target, android, magicleap):
def pick_target_triple(self, target, android):
if android is None:
android = self.config["build"]["android"]
if target and android:
assert self.handle_android_target(target)
if android and not target:
target = self.config["android"]["target"]
if magicleap and not target:
target = "aarch64-linux-android"
if target and not android and not magicleap:
if target and not android:
android = self.handle_android_target(target)
return target, android
@ -900,14 +889,14 @@ install them, let us know by filing a bug!")
def run_cargo_build_like_command(
self, command, cargo_args,
env=None, verbose=False,
target=None, android=False, magicleap=False, libsimpleservo=False,
target=None, android=False, libsimpleservo=False,
features=None, debug_mozjs=False, with_debug_assertions=False,
with_frame_pointer=False, without_wgl=False,
with_layout_2020=False, with_layout_2013=False,
uwp=False, media_stack=None,
):
env = env or self.build_env()
target, android = self.pick_target_triple(target, android, magicleap)
target, android = self.pick_target_triple(target, android)
args = []
if "--manifest-path" not in cargo_args:
@ -932,8 +921,9 @@ install them, let us know by filing a bug!")
if "-p" not in cargo_args: # We're building specific package, that may not have features
if self.config["build"]["debug-mozjs"] or debug_mozjs:
features.append("debugmozjs")
if not magicleap:
features.append("native-bluetooth")
features.append("native-bluetooth")
if uwp:
features.append("no-wgl")
features.append("uwp")

View file

@ -36,13 +36,13 @@ class MachCommands(CommandBase):
help="Command-line arguments to be passed through to cargo check")
@CommandBase.build_like_command_arguments
def check(self, params, features=[], media_stack=None, target=None,
android=False, magicleap=False, **kwargs):
android=False, **kwargs):
if not params:
params = []
features = features or []
target, android = self.pick_target_triple(target, android, magicleap)
target, android = self.pick_target_triple(target, android)
features += self.pick_media_stack(media_stack, target)
@ -130,13 +130,13 @@ class MachCommands(CommandBase):
help="Command-line arguments to be passed through to cargo-fix")
@CommandBase.build_like_command_arguments
def cargo_fix(self, params, features=[], media_stack=None, target=None,
android=False, magicleap=False, **kwargs):
android=False, **kwargs):
if not params:
params = []
features = features or []
target, android = self.pick_target_triple(target, android, magicleap)
target, android = self.pick_target_triple(target, android)
features += self.pick_media_stack(media_stack, target)
@ -154,13 +154,13 @@ class MachCommands(CommandBase):
help="Command-line arguments to be passed through to cargo-clippy")
@CommandBase.build_like_command_arguments
def cargo_clippy(self, params, features=[], media_stack=None, target=None,
android=False, magicleap=False, **kwargs):
android=False, **kwargs):
if not params:
params = []
features = features or []
target, android = self.pick_target_triple(target, android, magicleap)
target, android = self.pick_target_triple(target, android)
features += self.pick_media_stack(media_stack, target)

View file

@ -18,7 +18,6 @@ import io
import json
import os
import os.path as path
import platform
import shutil
import subprocess
import sys
@ -65,9 +64,6 @@ PACKAGES = {
'macbrew': [
'target/release/brew/servo.tar.gz',
],
'magicleap': [
'target/magicleap/aarch64-linux-android/release/Servo.mpk',
],
'maven': [
'target/android/gradle/servoview/maven/org/mozilla/servoview/servoview-armv7/',
'target/android/gradle/servoview/maven/org/mozilla/servoview/servoview-x86/',
@ -129,10 +125,6 @@ class PackageCommands(CommandBase):
default=None,
action='store_true',
help='Package Android')
@CommandArgument('--magicleap',
default=None,
action='store_true',
help='Package Magic Leap')
@CommandArgument('--target', '-t',
default=None,
help='Package for given target platform')
@ -148,7 +140,7 @@ class PackageCommands(CommandBase):
action='append',
help='Create an APPX package')
@CommandArgument('--ms-app-store', default=None, action='store_true')
def package(self, release=False, dev=False, android=None, magicleap=None, debug=False,
def package(self, release=False, dev=False, android=None, debug=False,
debugger=None, target=None, flavor=None, maven=False, uwp=None, ms_app_store=False):
if android is None:
android = self.config["build"]["android"]
@ -159,14 +151,10 @@ class PackageCommands(CommandBase):
android = self.handle_android_target(target)
else:
target = self.config["android"]["target"]
if target and magicleap:
print("Please specify either --target or --magicleap.")
sys.exit(1)
if magicleap:
target = "aarch64-linux-android"
env = self.build_env(target=target)
binary_path = self.get_binary_path(
release, dev, target=target, android=android, magicleap=magicleap,
release, dev, target=target, android=android,
simpleservo=uwp is not None
)
dir_to_root = self.get_top_dir()
@ -174,40 +162,6 @@ class PackageCommands(CommandBase):
if uwp:
vs_info = self.vs_dirs()
build_uwp(uwp, dev, vs_info['msbuild'], ms_app_store)
elif magicleap:
if platform.system() not in ["Darwin"]:
raise Exception("Magic Leap builds are only supported on macOS.")
if not env.get("MAGICLEAP_SDK"):
raise Exception("Magic Leap builds need the MAGICLEAP_SDK environment variable")
if not env.get("MLCERT"):
raise Exception("Magic Leap builds need the MLCERT environment variable")
# GStreamer configuration
env.setdefault("GSTREAMER_DIR", path.join(
self.get_target_dir(), "magicleap", target, "native", "gstreamer-1.16.0"
))
mabu = path.join(env.get("MAGICLEAP_SDK"), "mabu")
packages = [
"./support/magicleap/Servo.package",
]
if dev:
build_type = "lumin_debug"
else:
build_type = "lumin_release"
for package in packages:
argv = [
mabu,
"-o", target_dir,
"-t", build_type,
"-r",
"GSTREAMER_DIR=" + env["GSTREAMER_DIR"],
package
]
try:
subprocess.check_call(argv, env=env)
except subprocess.CalledProcessError as e:
print("Packaging Magic Leap exited with return value %d" % e.returncode)
return e.returncode
elif android:
android_target = self.config["android"]["target"]
if "aarch64" in android_target:
@ -448,10 +402,6 @@ class PackageCommands(CommandBase):
@CommandArgument('--android',
action='store_true',
help='Install on Android')
@CommandArgument('--magicleap',
default=None,
action='store_true',
help='Install on Magic Leap')
@CommandArgument('--emulator',
action='store_true',
help='For Android, install to the only emulated device')
@ -461,44 +411,29 @@ class PackageCommands(CommandBase):
@CommandArgument('--target', '-t',
default=None,
help='Install the given target platform')
def install(self, release=False, dev=False, android=False, magicleap=False, emulator=False, usb=False, target=None):
def install(self, release=False, dev=False, android=False, emulator=False, usb=False, target=None):
if target and android:
print("Please specify either --target or --android.")
sys.exit(1)
if not android:
android = self.handle_android_target(target)
if target and magicleap:
print("Please specify either --target or --magicleap.")
sys.exit(1)
if magicleap:
target = "aarch64-linux-android"
env = self.build_env(target=target)
try:
binary_path = self.get_binary_path(release, dev, android=android, magicleap=magicleap)
binary_path = self.get_binary_path(release, dev, android=android)
except BuildNotFound:
print("Servo build not found. Building servo...")
result = Registrar.dispatch(
"build", context=self.context, release=release, dev=dev, android=android, magicleap=magicleap,
"build", context=self.context, release=release, dev=dev, android=android,
)
if result:
return result
try:
binary_path = self.get_binary_path(release, dev, android=android, magicleap=magicleap)
binary_path = self.get_binary_path(release, dev, android=android)
except BuildNotFound:
print("Rebuilding Servo did not solve the missing build problem.")
return 1
if magicleap:
if not env.get("MAGICLEAP_SDK"):
raise Exception("Magic Leap installs need the MAGICLEAP_SDK environment variable")
mldb = path.join(env.get("MAGICLEAP_SDK"), "tools", "mldb", "mldb")
pkg_path = path.join(path.dirname(binary_path), "Servo.mpk")
exec_command = [
mldb,
"install", "-u",
pkg_path,
]
elif android:
if android:
pkg_path = self.get_apk_path(release)
exec_command = [self.android_adb_path(env)]
if emulator and usb:
@ -516,7 +451,7 @@ class PackageCommands(CommandBase):
if not path.exists(pkg_path):
print("Servo package not found. Packaging servo...")
result = Registrar.dispatch(
"package", context=self.context, release=release, dev=dev, android=android, magicleap=magicleap,
"package", context=self.context, release=release, dev=dev, android=android,
)
if result != 0:
return result

View file

@ -241,7 +241,7 @@ class PostBuildCommands(CommandBase):
'params', nargs='...',
help="Command-line arguments to be passed through to cargo doc")
@CommandBase.build_like_command_arguments
def doc(self, params, features, target=None, android=False, magicleap=False,
def doc(self, params, features, target=None, android=False,
media_stack=None, **kwargs):
self.ensure_bootstrapped(rustup_components=["rust-docs"])
rustc_path = check_output(
@ -272,7 +272,7 @@ class PostBuildCommands(CommandBase):
features = features or []
target, android = self.pick_target_triple(target, android, magicleap)
target, android = self.pick_target_triple(target, android)
features += self.pick_media_stack(media_stack, target)

View file

@ -117,10 +117,6 @@ directories = [
"./support/android/apk",
"./support/hololens",
"./support/linux/gstreamer",
"./support/magicleap/Servo2D/.vscode",
"./support/magicleap/Servo2D/code/inc.gen",
"./support/magicleap/Servo2D/code/src.gen",
"./support/magicleap/Servo2D/pipeline",
"./tests/wpt/harness",
"./tests/wpt/web-platform-tests",
"./tests/wpt/mozilla/tests/mozilla/referrer-policy",

View file

@ -1,3 +0,0 @@
.out
*.log
*.lock

View file

@ -1,132 +0,0 @@
# Servo for Magic Leap
## Build requirements
Currently, we only support building Servo for the Magic Leap on macOS.
Install the Magic Leap Lumin and Lumin Runtime SDKs.
Get a signing key for the magic leap app.
Optionally, install Visual Studio Code and the Magic Leap plugin.
## Building the mlservo library
Build the mlservo library:
```
MAGICLEAP_SDK=*directory* ./mach build -d --magicleap
```
This builds a static library `target/magicleap/aarch64-linux-android/debug/libmlservo.a`.
## Building the Servo2D application
From inside the `support/magicleap/Servo2D` directory:
```
mabu Servo2D.package -t device -s *signing key*
```
This builds the application `.out/Servo2D/Servo2D.mpk`.
Alternatively, in Visual Studio code, open the `support/magicleap/Servo2D` directory,
and use the `Terminal/Run Build Task...` menu option to build the
Servo2D application.
## Debugging gstreamer
By default, Servo links against release builds of gstreamer, even for debug builds,
so if you want to use gdb on gstreamer, you've got some work to do...
First off, you'll need to build the gstreamer libraries with debug symbols.
To do this, edit `support/magicleap/gstreamer/mlsdk.txt.in` and add `'-g', '-O0`,` to
`c_args` and `cpp_args`:
```
[properties]
c_args = [
'-g', '-O0',
'--sysroot=@MAGICLEAP_SDK@/lumin/usr',
'-I@MAGICLEAP_SDK@/include',
'-I@MAGICLEAP_SDK@/staging/include',
'-I@INSTALL_DIR@/system/include',
]
cpp_args = [
'-g', '-O0',
'--sysroot=@MAGICLEAP_SDK@/lumin/usr',
'-I@MAGICLEAP_SDK@/include',
'-I@MAGICLEAP_SDK@/staging/include',
'-I@INSTALL_DIR@/system/include',
]
```
then build the libraries with `./gstreamer.sh` from inside `support/magicleap/gstreamer`.
The libraries will be built in `_install/system`, and should be moved over to
where `mach` expects them to be:
```
rm -r target/magicleap/aarch64-linux-android/native/gstreamer-1.16.0/system
cp -r support/magicleap/gstreamer/_install/system target/magicleap/aarch64-linux-android/native/gstreamer-1.16.0/
```
You can now build, package and install as normal:
```
./mach build -d --magicleap
./mach package -d --magicleap
$MAGICLEAP_SDK/tools/mldb/mldb install -u target/magicleap/aarch64-linux-android/debug/Servo.mpk
```
to launch gdb on the application:
```
$MAGICLEAP_SDK/debug --package com.mozilla.servo support/magicleap/Servo2D/.out/debug_lumin_clang-3.8_aarch64/Servo2D
```
Using the debug libraries in gdb is slightly tricky because you need to set everything up
in the right order, setting `solib-search-path` should happen before doing any dynamic loading,
but setting `sysroot` after dynamic loading has started. The easiest thing to do is to place a
breakpoint somewhere in Servo after gstreamer has started loading, for example:
```
(gdb) set solib-search-path /Users/ajeffrey/MagicLeap/mlsdk/v0.22.0/lumin/usr/lib:/Users/ajeffrey/github/asajeffrey/servo/target/magicleap/aarch64-linux-android/native/gstreamer-1.16.0/system/lib64/
warning: Unable to find dynamic linker breakpoint function.
GDB will be unable to debug shared library initializers
and track explicitly loaded dynamic code.
(gdb) rbreak RenderAndroid::new
Breakpoint 1 at 0xaaaac59953a4
struct Option<servo_media_gstreamer_render_android::RenderAndroid> servo_media_gstreamer_render_android::RenderAndroid::new::he5ddafe679ae0dff(struct Box<PlayerGLContext>);
Breakpoint 2 at 0xaaaac423f184: file /Users/ajeffrey/github/asajeffrey/media/backends/gstreamer/render-android/lib.rs, line 81.
static struct Option<gstreamer_gl::auto::gl_display::GLDisplay> servo_media_gstreamer_render_android::RenderAndroid::new::_$u7b$$u7b$closure$u7d$$u7d$::h53b9e99990e38d92(struct closure, struct GLDisplayEGL);
(gdb) c
...
Thread 2 "ScriptThread Pi" hit Breakpoint 1, 0x0000aaaac59953a4 in servo_media_gstreamer_render_android::RenderAndroid::new::he5ddafe679ae0dff
(app_gl_context=...)
(gdb) set sysroot /Users/ajeffrey/MagicLeap/mlsdk/v0.22.0/lumin
warning: .dynamic section for "/Users/ajeffrey/MagicLeap/mlsdk/v0.22.0/lumin/usr/lib/libc.so" is not at the expected address (wrong library or version mismatch?)
warning: .dynamic section for "/Users/ajeffrey/MagicLeap/mlsdk/v0.22.0/lumin/usr/lib/liblog.so" is not at the expected address (wrong library or version mismatch?)
warning: .dynamic section for "/Users/ajeffrey/MagicLeap/mlsdk/v0.22.0/lumin/usr/lib/libz.so" is not at the expected address (wrong library or version mismatch?)
warning: .dynamic section for "/Users/ajeffrey/MagicLeap/mlsdk/v0.22.0/lumin/usr/lib/libEGL.so" is not at the expected address (wrong library or version mismatch?)
warning: .dynamic section for "/Users/ajeffrey/MagicLeap/mlsdk/v0.22.0/lumin/usr/lib/libGLESv2.so" is not at the expected address (wrong library or version mismatch?)
warning: .dynamic section for "/Users/ajeffrey/MagicLeap/mlsdk/v0.22.0/lumin/usr/lib/libGLESv3.so" is not at the expected address (wrong library or version mismatch?)
warning: .dynamic section for "/Users/ajeffrey/MagicLeap/mlsdk/v0.22.0/lumin/usr/lib/libm.so" is not at the expected address (wrong library or version mismatch?)
warning: .dynamic section for "/Users/ajeffrey/MagicLeap/mlsdk/v0.22.0/lumin/usr/lib/libvulkan.so" is not at the expected address (wrong library or version mismatch?)
warning: .dynamic section for "/Users/ajeffrey/MagicLeap/mlsdk/v0.22.0/lumin/usr/lib/libstdc++.so" is not at the expected address (wrong library or version mismatch?)
warning: .dynamic section for "/Users/ajeffrey/MagicLeap/mlsdk/v0.22.0/lumin/usr/lib/libGLESv1_CM.so" is not at the expected address (wrong library or version mismatch?)
warning: Could not load shared library symbols for 191 libraries, e.g. /system/bin/linker64.
Use the "info sharedlibrary" command to see the complete listing.
Do you need "set solib-search-path" or "set sysroot"?
Reading symbols from /Users/ajeffrey/MagicLeap/mlsdk/v0.22.0/lumin/usr/lib/libc.so...done.
Reading symbols from /Users/ajeffrey/github/asajeffrey/servo/target/magicleap/aarch64-linux-android/native/gstreamer-1.16.0/system/lib64/libglib-2.0.so...done.
Reading symbols from /Users/ajeffrey/github/asajeffrey/servo/target/magicleap/aarch64-linux-android/native/gstreamer-1.16.0/system/lib64/libgobject-2.0.so...done.
Reading symbols from /Users/ajeffrey/github/asajeffrey/servo/target/magicleap/aarch64-linux-android/native/gstreamer-1.16.0/system/lib64/libgstreamer-1.0.so...done.
Reading symbols from /Users/ajeffrey/github/asajeffrey/servo/target/magicleap/aarch64-linux-android/native/gstreamer-1.16.0/system/lib64/libgstapp-1.0.so...done.
Reading symbols from /Users/ajeffrey/github/asajeffrey/servo/target/magicleap/aarch64-linux-android/native/gstreamer-1.16.0/system/lib64/libgstaudio-1.0.so...done.
Reading symbols from /Users/ajeffrey/github/asajeffrey/servo/target/magicleap/aarch64-linux-android/native/gstreamer-1.16.0/system/lib64/libgstbase-1.0.so...done.
Reading symbols from /Users/ajeffrey/github/asajeffrey/servo/target/magicleap/aarch64-linux-android/native/gstreamer-1.16.0/system/lib64/libgstgl-1.0.so...done.
Reading symbols from /Users/ajeffrey/github/asajeffrey/servo/target/magicleap/aarch64-linux-android/native/gstreamer-1.16.0/system/lib64/libgstplayer-1.0.so...done.
Reading symbols from /Users/ajeffrey/github/asajeffrey/servo/target/magicleap/aarch64-linux-android/native/gstreamer-1.16.0/system/lib64/libgstsdp-1.0.so...done.
Reading symbols from /Users/ajeffrey/github/asajeffrey/servo/target/magicleap/aarch64-linux-android/native/gstreamer-1.16.0/system/lib64/libgstvideo-1.0.so...done.
Reading symbols from /Users/ajeffrey/github/asajeffrey/servo/target/magicleap/aarch64-linux-android/native/gstreamer-1.16.0/system/lib64/libgstwebrtc-1.0.so...done.
...
(gdb) break gst_gl_context_activate
Breakpoint 3 at 0x40003ba0bb98: file ../gst-build/subprojects/gst-plugins-base/gst-libs/gst/gl/gstglcontext.c, line 746.
```
At this point, setting breakpoints and step-debugging should work as expected.

View file

@ -1,7 +0,0 @@
REFS = \
Servo2D/Servo2D \
Servo3D/Servo3D
# Servo SEGVs if we don't set the debuggable flag in the mpk's taildata
# https://github.com/servo/servo/issues/22188
OPTIONS=package/debuggable/on

View file

@ -1,14 +0,0 @@
.DS_Store
*.log
*.json.dirty
*.json.lock
*.pyc
*.sln
*.vcxproj*
*.previous
*.draft
pipeline/cache/intermediate/
.out/
.vscode/
.vs/

View file

@ -1,65 +0,0 @@
{
"version": "0.2.0",
"configurations": [
{
"name": "Host OS Debug",
"request": "launch",
"type": "cppdbg",
"stopAtEntry": true,
"externalConsole": false,
"logging": {
"engineLogging": false,
"trace": false
},
"windows": {
"type": "cppvsdbg",
"cwd": "${workspaceFolder}/.out/${config:lumin_package_name}",
"environment": [{"name": "PATH", "value": "${config:lumin_sdk}/VirtualDevice/bin;${config:lumin_sdk}/VirtualDevice/lib;${config:lumin_sdk}/lib/win64;${env.PATH}"}],
"program": "${workspaceFolder}/.out/debug_win_${config:lumin_host_toolchain}/${config:lumin_exe_name}.exe"
},
"osx": {
"type": "cppdbg",
"MIMode": "lldb",
"cwd": "${workspaceFolder}/.out/${config:lumin_package_name}",
"environment": [{"name": "DYLD_LIBRARY_PATH", "value": "${config:lumin_sdk}/VirtualDevice/bin:${config:lumin_sdk}/VirtualDevice/lib:${config:lumin_sdk}/lib/osx:${env.DYLD_LIBRARY_PATH}"}],
"program": "${workspaceFolder}/.out/debug_osx_${config:lumin_host_toolchain}/${config:lumin_exe_name}"
},
"linux": {
"type": "cppdbg",
"MIMode": "lldb",
"cwd": "${workspaceFolder}/.out/${config:lumin_package_name}",
"environment": [{"name": "LD_LIBRARY_PATH", "value": "${config:lumin_sdk}/VirtualDevice/bin:${config:lumin_sdk}/VirtualDevice/lib:${config:lumin_sdk}/lib/linux64:${env.LD_LIBRARY_PATH}"}],
"program": "${workspaceFolder}/.out/debug_linux_${config:lumin_host_toolchain}/${config:lumin_exe_name}"
},
"preLaunchTask": "Build (Host OS Debug)"
},
{
"name": "Lumin OS Debug",
"request": "launch",
"type": "cppdbg",
"stopAtEntry": true,
"externalConsole": false,
"logging": {
"engineLogging": false,
"trace": false
},
"cwd": "${workspaceFolder}/.out/${config:lumin_package_name}",
"targetArchitecture": "arm64",
"MIMode": "gdb",
"miDebuggerPath": "${config:lumin_sdk}/tools/toolchains/bin/gdb",
"windows": {
"miDebuggerPath": "${config:lumin_sdk}/tools/toolchains/bin/gdb.exe",
},
"miDebuggerServerAddress": "localhost:7777",
"program": "${workspaceFolder}/.out/debug_lumin_${config:lumin_device_toolchain}/${config:lumin_exe_name}",
"customLaunchSetupCommands": [
{"text": "-file-exec-and-symbols \"${workspaceFolder}/.out/debug_lumin_${config:lumin_device_toolchain}/${config:lumin_exe_name}\""},
{"text": "source ${workspaceFolder}/.out/debug_lumin_${config:lumin_device_toolchain}/${config:lumin_exe_name}.gdbinit"},
{"text": "-enable-pretty-printing"},
{"text": "continue", "ignoreFailures": true},
{"text": "continue", "ignoreFailures": true}
],
"preLaunchTask": "Lumin: Setup for remote debugging",
}
]
}

View file

@ -1,23 +0,0 @@
{
"lumin_mabu_file": "Servo2D.package",
"lumin_package_name": "Servo2D",
"lumin_exe_name": "Servo2D",
"C_Cpp.default.includePath": [
"${workspaceFolder}/code/**",
"${config.lumin_sdk}/lumin/usr/include/",
"${config.lumin_sdk}/lumin/stl/libc++-lumin/include",
"${config.lumin_sdk}/include/runtime/app",
"${config.lumin_sdk}/include/runtime/core",
"${config.lumin_sdk}/include/runtime/external",
"${config.lumin_sdk}/include/runtime/intergen",
"${config.lumin_sdk}/include/runtime/loader",
"${config.lumin_sdk}/include/runtime/uikit",
"${config.lumin_sdk}/include/runtime/util",
"${config.lumin_sdk}/include/"
],
"C_Cpp.default.defines": [
"ANDROID"
],
"C_Cpp.default.cppStandard": "c++11",
"debug.allowBreakpointsEverywhere": true
}

View file

@ -1,223 +0,0 @@
{
"version": "2.0.0",
"tasks": [
{
"label": "Build (Lumin OS Debug)",
"type": "shell",
"command": "${config:lumin_sdk}/mabu",
"windows": {
"command": "${config:lumin_sdk}/mabu.cmd",
},
"args": [
"${workspaceFolder}/${config:lumin_mabu_file}",
"-t",
"device_debug",
"-s",
"${config:lumin_cert}"
],
"group": "build",
"problemMatcher": [
"$msCompile",
"$gcc"
]
},
{
"label": "Clean (Lumin OS Debug)",
"type": "shell",
"command": "${config:lumin_sdk}/mabu",
"windows": {
"command": "${config:lumin_sdk}/mabu.cmd",
},
"args": [
"${workspaceFolder}/${config:lumin_mabu_file}",
"-t",
"device_debug",
"-c"
],
"group": "build",
"problemMatcher": [
"$msCompile",
"$gcc"
]
},
{
"label": "Run (Lumin OS Debug)",
"type": "shell",
"command": "${config:lumin_sdk}/mabu",
"windows": {
"command": "${config:lumin_sdk}/mabu.cmd",
},
"args": [
"${workspaceFolder}/${config:lumin_mabu_file}",
"-t",
"device_debug",
"-s",
"${config:lumin_cert}",
"--invoke"
],
"problemMatcher": [
"$msCompile",
"$gcc"
]
},
{
"label": "Build (Lumin OS Release)",
"type": "shell",
"command": "${config:lumin_sdk}/mabu",
"windows": {
"command": "${config:lumin_sdk}/mabu.cmd",
},
"args": [
"${workspaceFolder}/${config:lumin_mabu_file}",
"-t",
"device_release",
"-s",
"${config:lumin_cert}"
],
"group": "build",
"problemMatcher": [
"$msCompile",
"$gcc"
]
},
{
"label": "Clean (Lumin OS Release)",
"type": "shell",
"command": "${config:lumin_sdk}/mabu",
"windows": {
"command": "${config:lumin_sdk}/mabu.cmd",
},
"args": [
"${workspaceFolder}/${config:lumin_mabu_file}",
"-t",
"device_release",
"-c"
],
"group": "build",
"problemMatcher": [
"$msCompile",
"$gcc"
]
},
{
"label": "Run (Lumin OS Release)",
"type": "shell",
"command": "${config:lumin_sdk}/mabu",
"windows": {
"command": "${config:lumin_sdk}/mabu.cmd",
},
"args": [
"${workspaceFolder}/${config:lumin_mabu_file}",
"-t",
"device_release",
"-s",
"${config:lumin_cert}",
"--invoke"
],
"problemMatcher": [
"$msCompile",
"$gcc"
]
},
{
"label": "Build (Host OS Debug)",
"type": "shell",
"command": "${config:lumin_sdk}/mabu",
"windows": {
"command": "${config:lumin_sdk}/mabu.cmd",
"options": {
"env": {
"VisualStudioVersion": "15.0"
}
}
},
"args": [
"${workspaceFolder}/${config:lumin_mabu_file}",
"-t",
"host_debug"
],
"group": "build",
"problemMatcher": [
"$msCompile",
"$gcc"
]
},
{
"label": "Clean (Host OS Debug)",
"type": "shell",
"command": "${config:lumin_sdk}/mabu",
"windows": {
"command": "${config:lumin_sdk}/mabu.cmd",
},
"args": [
"${workspaceFolder}/${config:lumin_mabu_file}",
"-t",
"host_debug",
"-c"
],
"group": "build",
"problemMatcher": [
"$msCompile",
"$gcc"
]
},
{
"label": "Run (Host OS Debug)",
"type": "shell",
"command": "${config:lumin_sdk}/mabu",
"windows": {
"command": "${config:lumin_sdk}/mabu.cmd",
"options": {
"env": {
"VisualStudioVersion": "15.0",
"PATH": "${config:lumin_sdk}/VirtualDevice/bin;${config:lumin_sdk}/VirtualDevice/lib;${config:lumin_sdk}/lib/win64;${env.PATH}"
}
}
},
"osx": {
"options": {
"env": {
"ML_LIBRARY_PATH": "${config:lumin_sdk}/VirtualDevice/bin:${config:lumin_sdk}/VirtualDevice/lib:${config:lumin_sdk}/lib/osx"
}
}
},
"linux": {
"options": {
"env": {
"LD_LIBRARY_PATH": "${config:lumin_sdk}/VirtualDevice/bin:${config:lumin_sdk}/VirtualDevice/lib:${config:lumin_sdk}/lib/linux64:${env.LD_LIBRARY_PATH}"
}
}
},
"args": [
"${workspaceFolder}/${config:lumin_mabu_file}",
"-t",
"host_debug",
"--invoke"
],
"problemMatcher": [
"$msCompile",
"$gcc"
]
},
{
"label": "Lumin: Setup for remote debugging",
"type": "shell",
"command": "${config:lumin_sdk}/debug",
"windows": {
"command": "${config:lumin_sdk}/debug.cmd",
},
"args": [
"--setup-only",
"-v",
"--sopaths",
"${workspaceFolder}/.out/debug_lumin_${config:lumin_device_toolchain}/",
"--deploy-mpk",
"${workspaceFolder}/.out/${config:lumin_package_name}/${config:lumin_exe_name}.mpk",
"${workspaceFolder}/.out/debug_lumin_${config:lumin_device_toolchain}/${config:lumin_exe_name}"
],
"dependsOn": [
"Build (Lumin OS Debug)"
]
}
]
}

File diff suppressed because it is too large Load diff

View file

@ -1,18 +0,0 @@
{
"global" : {},
"materials" :
[
{
"albedo" : "Icon/Model/Model_UFO_Albedo.png",
"blendmode" : "opaque",
"name" : "com_magicleap_iconcreation_Model_UFO_Mat",
"shaderName" : "UnlitTextured"
},
{
"albedo" : "Icon/Model/Model_UFO_Albedo_Ring.png",
"blendmode" : "opaque",
"name" : "com_magicleap_iconcreation_Model_UFO_Ring_Mat",
"shaderName" : "UnlitTextured"
}
]
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 733 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 177 B

View file

@ -1,509 +0,0 @@
; FBX 7.5.0 project file
; Copyright (C) 1997-2015 Autodesk Inc. and/or its licensors.
; All rights reserved.
; ----------------------------------------------------
FBXHeaderExtension: {
FBXHeaderVersion: 1003
FBXVersion: 7500
CreationTimeStamp: {
Version: 1000
Year: 2018
Month: 8
Day: 7
Hour: 10
Minute: 25
Second: 45
Millisecond: 127
}
Creator: "FBX SDK/FBX Plugins version 2017.0.1"
SceneInfo: "SceneInfo::GlobalInfo", "UserData" {
Type: "UserData"
Version: 100
MetaData: {
Version: 100
Title: ""
Subject: ""
Author: ""
Keywords: ""
Revision: ""
Comment: ""
}
Properties70: {
P: "DocumentUrl", "KString", "Url", "", "E:\Perforce\rkameny_ladw4021_LearningResources_main\users\rkameny\IconCreationDoc\Icon\Portal\InsidePortal_SkySphere.fbx"
P: "SrcDocumentUrl", "KString", "Url", "", "E:\Perforce\rkameny_ladw4021_LearningResources_main\users\rkameny\IconCreationDoc\Icon\Portal\InsidePortal_SkySphere.fbx"
P: "Original", "Compound", "", ""
P: "Original|ApplicationVendor", "KString", "", "", "Autodesk"
P: "Original|ApplicationName", "KString", "", "", "Maya"
P: "Original|ApplicationVersion", "KString", "", "", "2017"
P: "Original|DateTime_GMT", "DateTime", "", "", "07/08/2018 17:25:45.124"
P: "Original|FileName", "KString", "", "", "E:\Perforce\rkameny_ladw4021_LearningResources_main\users\rkameny\IconCreationDoc\Icon\Portal\InsidePortal_SkySphere.fbx"
P: "LastSaved", "Compound", "", ""
P: "LastSaved|ApplicationVendor", "KString", "", "", "Autodesk"
P: "LastSaved|ApplicationName", "KString", "", "", "Maya"
P: "LastSaved|ApplicationVersion", "KString", "", "", "2017"
P: "LastSaved|DateTime_GMT", "DateTime", "", "", "07/08/2018 17:25:45.124"
P: "Original|ApplicationActiveProject", "KString", "", "", "E:\Perforce\rkameny_ladw4021_LearningResources_main\users\rkameny\IconCreationDoc\Icon"
P: "Original|ApplicationNativeFile", "KString", "", "", "E:\Perforce\rkameny_ladw4021_LearningResources_main\users\rkameny\IconCreationDoc\Source\IconCreationSource.ma"
}
}
}
GlobalSettings: {
Version: 1000
Properties70: {
P: "UpAxis", "int", "Integer", "",1
P: "UpAxisSign", "int", "Integer", "",1
P: "FrontAxis", "int", "Integer", "",2
P: "FrontAxisSign", "int", "Integer", "",1
P: "CoordAxis", "int", "Integer", "",0
P: "CoordAxisSign", "int", "Integer", "",1
P: "OriginalUpAxis", "int", "Integer", "",1
P: "OriginalUpAxisSign", "int", "Integer", "",1
P: "UnitScaleFactor", "double", "Number", "",1
P: "OriginalUnitScaleFactor", "double", "Number", "",1
P: "AmbientColor", "ColorRGB", "Color", "",0,0,0
P: "DefaultCamera", "KString", "", "", "Producer Perspective"
P: "TimeMode", "enum", "", "",3
P: "TimeProtocol", "enum", "", "",2
P: "SnapOnFrameMode", "enum", "", "",0
P: "TimeSpanStart", "KTime", "Time", "",0
P: "TimeSpanStop", "KTime", "Time", "",769769300000
P: "CustomFrameRate", "double", "Number", "",-1
P: "TimeMarker", "Compound", "", ""
P: "CurrentTimeMarker", "int", "Integer", "",-1
}
}
; Documents Description
;------------------------------------------------------------------
Documents: {
Count: 1
Document: 2704469740208, "", "Scene" {
Properties70: {
P: "SourceObject", "object", "", ""
P: "ActiveAnimStackName", "KString", "", "", "Take 001"
}
RootNode: 0
}
}
; Document References
;------------------------------------------------------------------
References: {
}
; Object definitions
;------------------------------------------------------------------
Definitions: {
Version: 100
Count: 8
ObjectType: "GlobalSettings" {
Count: 1
}
ObjectType: "AnimationStack" {
Count: 1
PropertyTemplate: "FbxAnimStack" {
Properties70: {
P: "Description", "KString", "", "", ""
P: "LocalStart", "KTime", "Time", "",0
P: "LocalStop", "KTime", "Time", "",0
P: "ReferenceStart", "KTime", "Time", "",0
P: "ReferenceStop", "KTime", "Time", "",0
}
}
}
ObjectType: "AnimationLayer" {
Count: 1
PropertyTemplate: "FbxAnimLayer" {
Properties70: {
P: "Weight", "Number", "", "A",100
P: "Mute", "bool", "", "",0
P: "Solo", "bool", "", "",0
P: "Lock", "bool", "", "",0
P: "Color", "ColorRGB", "Color", "",0.8,0.8,0.8
P: "BlendMode", "enum", "", "",0
P: "RotationAccumulationMode", "enum", "", "",0
P: "ScaleAccumulationMode", "enum", "", "",0
P: "BlendModeBypass", "ULongLong", "", "",0
}
}
}
ObjectType: "NodeAttribute" {
Count: 1
PropertyTemplate: "FbxNull" {
Properties70: {
P: "Color", "ColorRGB", "Color", "",0.8,0.8,0.8
P: "Size", "double", "Number", "",100
P: "Look", "enum", "", "",1
}
}
}
ObjectType: "Model" {
Count: 2
PropertyTemplate: "FbxNode" {
Properties70: {
P: "QuaternionInterpolate", "enum", "", "",0
P: "RotationOffset", "Vector3D", "Vector", "",0,0,0
P: "RotationPivot", "Vector3D", "Vector", "",0,0,0
P: "ScalingOffset", "Vector3D", "Vector", "",0,0,0
P: "ScalingPivot", "Vector3D", "Vector", "",0,0,0
P: "TranslationActive", "bool", "", "",0
P: "TranslationMin", "Vector3D", "Vector", "",0,0,0
P: "TranslationMax", "Vector3D", "Vector", "",0,0,0
P: "TranslationMinX", "bool", "", "",0
P: "TranslationMinY", "bool", "", "",0
P: "TranslationMinZ", "bool", "", "",0
P: "TranslationMaxX", "bool", "", "",0
P: "TranslationMaxY", "bool", "", "",0
P: "TranslationMaxZ", "bool", "", "",0
P: "RotationOrder", "enum", "", "",0
P: "RotationSpaceForLimitOnly", "bool", "", "",0
P: "RotationStiffnessX", "double", "Number", "",0
P: "RotationStiffnessY", "double", "Number", "",0
P: "RotationStiffnessZ", "double", "Number", "",0
P: "AxisLen", "double", "Number", "",10
P: "PreRotation", "Vector3D", "Vector", "",0,0,0
P: "PostRotation", "Vector3D", "Vector", "",0,0,0
P: "RotationActive", "bool", "", "",0
P: "RotationMin", "Vector3D", "Vector", "",0,0,0
P: "RotationMax", "Vector3D", "Vector", "",0,0,0
P: "RotationMinX", "bool", "", "",0
P: "RotationMinY", "bool", "", "",0
P: "RotationMinZ", "bool", "", "",0
P: "RotationMaxX", "bool", "", "",0
P: "RotationMaxY", "bool", "", "",0
P: "RotationMaxZ", "bool", "", "",0
P: "InheritType", "enum", "", "",0
P: "ScalingActive", "bool", "", "",0
P: "ScalingMin", "Vector3D", "Vector", "",0,0,0
P: "ScalingMax", "Vector3D", "Vector", "",1,1,1
P: "ScalingMinX", "bool", "", "",0
P: "ScalingMinY", "bool", "", "",0
P: "ScalingMinZ", "bool", "", "",0
P: "ScalingMaxX", "bool", "", "",0
P: "ScalingMaxY", "bool", "", "",0
P: "ScalingMaxZ", "bool", "", "",0
P: "GeometricTranslation", "Vector3D", "Vector", "",0,0,0
P: "GeometricRotation", "Vector3D", "Vector", "",0,0,0
P: "GeometricScaling", "Vector3D", "Vector", "",1,1,1
P: "MinDampRangeX", "double", "Number", "",0
P: "MinDampRangeY", "double", "Number", "",0
P: "MinDampRangeZ", "double", "Number", "",0
P: "MaxDampRangeX", "double", "Number", "",0
P: "MaxDampRangeY", "double", "Number", "",0
P: "MaxDampRangeZ", "double", "Number", "",0
P: "MinDampStrengthX", "double", "Number", "",0
P: "MinDampStrengthY", "double", "Number", "",0
P: "MinDampStrengthZ", "double", "Number", "",0
P: "MaxDampStrengthX", "double", "Number", "",0
P: "MaxDampStrengthY", "double", "Number", "",0
P: "MaxDampStrengthZ", "double", "Number", "",0
P: "PreferedAngleX", "double", "Number", "",0
P: "PreferedAngleY", "double", "Number", "",0
P: "PreferedAngleZ", "double", "Number", "",0
P: "LookAtProperty", "object", "", ""
P: "UpVectorProperty", "object", "", ""
P: "Show", "bool", "", "",1
P: "NegativePercentShapeSupport", "bool", "", "",1
P: "DefaultAttributeIndex", "int", "Integer", "",-1
P: "Freeze", "bool", "", "",0
P: "LODBox", "bool", "", "",0
P: "Lcl Translation", "Lcl Translation", "", "A",0,0,0
P: "Lcl Rotation", "Lcl Rotation", "", "A",0,0,0
P: "Lcl Scaling", "Lcl Scaling", "", "A",1,1,1
P: "Visibility", "Visibility", "", "A",1
P: "Visibility Inheritance", "Visibility Inheritance", "", "",1
}
}
}
ObjectType: "Geometry" {
Count: 1
PropertyTemplate: "FbxMesh" {
Properties70: {
P: "Color", "ColorRGB", "Color", "",0.8,0.8,0.8
P: "BBoxMin", "Vector3D", "Vector", "",0,0,0
P: "BBoxMax", "Vector3D", "Vector", "",0,0,0
P: "Primary Visibility", "bool", "", "",1
P: "Casts Shadows", "bool", "", "",1
P: "Receive Shadows", "bool", "", "",1
}
}
}
ObjectType: "Material" {
Count: 1
PropertyTemplate: "FbxSurfaceLambert" {
Properties70: {
P: "ShadingModel", "KString", "", "", "Lambert"
P: "MultiLayer", "bool", "", "",0
P: "EmissiveColor", "Color", "", "A",0,0,0
P: "EmissiveFactor", "Number", "", "A",1
P: "AmbientColor", "Color", "", "A",0.2,0.2,0.2
P: "AmbientFactor", "Number", "", "A",1
P: "DiffuseColor", "Color", "", "A",0.8,0.8,0.8
P: "DiffuseFactor", "Number", "", "A",1
P: "Bump", "Vector3D", "Vector", "",0,0,0
P: "NormalMap", "Vector3D", "Vector", "",0,0,0
P: "BumpFactor", "double", "Number", "",1
P: "TransparentColor", "Color", "", "A",0,0,0
P: "TransparencyFactor", "Number", "", "A",0
P: "DisplacementColor", "ColorRGB", "Color", "",0,0,0
P: "DisplacementFactor", "double", "Number", "",1
P: "VectorDisplacementColor", "ColorRGB", "Color", "",0,0,0
P: "VectorDisplacementFactor", "double", "Number", "",1
}
}
}
}
; Object properties
;------------------------------------------------------------------
Objects: {
NodeAttribute: 2704123178976, "NodeAttribute::", "Null" {
Properties70: {
P: "Look", "enum", "", "",0
}
TypeFlags: "Null"
}
Geometry: 2704463014528, "Geometry::", "Mesh" {
Vertices: *699 {
a: -5.35143089294434,-1.73878526687622,-4.91317892074585,-4.5521993637085,-3.30736613273621,-4.91317892074585,-3.30736613273621,-4.5521993637085,-4.91317892074585,-1.73878538608551,-5.35143089294434,-4.91317892074585,-6.89087613552297e-016,-5.62682723999023,-4.91317844390869,1.73878526687622,-5.35143041610718,-4.91317892074585,3.30736589431763,-4.55219841003418,-4.91317892074585,4.55219841003418,-3.30736565589905,-4.91317892074585,5.35142993927002,-1.73878490924835,-4.91317892074585,5.62682628631592,-3.4454375383659e-016,-4.91317892074585,-5.62682628631592,3.4454372736681e-016,-4.91317892074585,1.22380304336548,-3.7664783000946,-0.807293295860291,8.75037713399252e-008,-3.96030974388123,-0.807293295860291,-1.22380316257477,-3.76647853851318,-0.807293295860291,-2.32781219482422,-3.20395803451538,-0.807293295860291,-3.20395851135254,-2.32781195640564,-0.807293295860291,-3.7664794921875,-1.22380328178406,-0.807293295860291,-3.96030831336975,-2.61297721237952e-008,-0.807293295860291,3.96030831336975,2.61297721237952e-008,-0.807293295860291,3.76647734642029,-1.22380256652832,-0.807293355464935,3.20395731925964,-2.32781100273132,-0.807293295860291,2.32781147956848,-3.20395731925964,-0.807293295860291,-2.69589638710022,-0.283350437879562,-0.0497899726033211,-2.65151000022888,-0.563596129417419,-0.0497899726033211,-2.57807278633118,-0.837666988372803,-0.0497899726033211,-2.47638964653015,-1.10256004333496,-0.0497899726033211,-2.34757471084595,-1.35537326335907,-0.0497899726033211,-2.19303941726685,-1.59333682060242,-0.0497899726033211,-2.01447677612305,-1.81384336948395,-0.0497899726033211,-1.81384289264679,-2.01447701454163,-0.0497899726033211,-1.59333622455597,-2.19303941726685,-0.0497899726033211,-1.3553729057312,-2.34757471084595,-0.0497899726033211,-1.10255944728851,-2.47638964653015,-0.0497899726033211,-0.83766633272171,-2.57807230949402,-0.0497899726033211,-0.563595473766327,-2.65150928497314,-0.0497899726033211,-0.283349812030792,-2.69589591026306,-0.0497899726033211,2.62556000052427e-007,-2.7107458114624,-0.0497899726033211,
0.283350348472595,-2.69589591026306,-0.0497899726033211,0.56359601020813,-2.65150928497314,-0.0497899726033211,0.837666690349579,-2.57807207107544,-0.0497899726033211,1.10255980491638,-2.47638916969299,-0.0497899726033211,1.35537302494049,-2.34757447242737,-0.0497899726033211,1.59333646297455,-2.19303894042969,-0.0497899726033211,1.81384289264679,-2.01447606086731,-0.0497899726033211,2.01447653770447,-1.81384241580963,-0.0497899726033211,2.19303894042969,-1.59333598613739,-0.0497899726033211,2.34757423400879,-1.35537254810333,-0.0497899726033211,2.47638893127441,-1.10255932807922,-0.0497899726033211,2.57807183265686,-0.837666213512421,-0.0497899726033211,2.65150880813599,-0.563595473766327,-0.0497899726033211,2.69589519500732,-0.283349901437759,-0.0497899726033211,2.71074438095093,5.04915433907627e-008,-0.0497899726033211,-2.71074438095093,-5.04915433907627e-008,-0.0497899726033211,-5.19850921630859,3.18316966811636e-016,-7.06647109985352,-3.97876667976379,2.43629333761676e-016,-8.89194488525391,-2.15329313278198,1.31851332326422e-016,-10.111686706543,0,1.74559444029893e-022,-10.5400037765503,2.15329313278198,-1.31851027923956e-016,-10.111686706543,3.97876667976379,-2.43629095533659e-016,-8.89194488525391,5.19850921630859,-3.18316834462738e-016,-7.06647109985352,-4.9440770149231,-1.73878467082977,-6.96107864379883,-3.78403377532959,-1.73878467082977,-8.69720840454102,-2.04790568351746,-1.73878467082977,-9.857253074646,-2.71124531536771e-006,-1.73878467082977,-10.2646074295044,2.04790091514587,-1.73878467082977,-9.85725498199463,3.78403043746948,-1.73878467082977,-8.69721221923828,4.94407510757446,-1.73878467082977,-6.96108341217041,-4.20568323135376,-3.30736517906189,-6.6552267074585,-3.21889138221741,-3.30736517906189,-8.13206672668457,-1.74205279350281,-3.30736517906189,-9.11886024475098,-2.30632304010214e-006,-3.30736517906189,-9.46537590026855,1.74204862117767,-3.30736517906189,-9.11886119842529,3.21888828277588,-3.30736517906189,-8.13206958770752,4.20568180084229,-3.30736517906189,-6.65523052215576,-3.05560779571533,-4.55219793319702,-6.17885065078735,
-2.33866143226624,-4.55219793319702,-7.25183725357056,-1.26567542552948,-4.55219793319702,-7.96878433227539,-1.67564178354951e-006,-4.55219793319702,-8.22054290771484,1.26567232608795,-4.55219793319702,-7.96878623962402,2.33865928649902,-4.55219793319702,-7.25183963775635,3.05560636520386,-4.55219793319702,-6.1788535118103,-1.60642802715302,-5.3514289855957,-5.57858180999756,-1.22950708866119,-5.3514289855957,-6.14268398284912,-0.665404975414276,-5.3514289855957,-6.51960563659668,-8.80937022884609e-007,-5.3514289855957,-6.65196323394775,0.665403366088867,-5.3514289855957,-6.519606590271,1.22950601577759,-5.3514289855957,-6.1426854133606,1.60642743110657,-5.3514289855957,-5.57858324050903,2.92670965194702,-3.98583483695984,-2.04461860656738,1.61354744434357,-4.76330423355103,-2.27592206001282,-0.0035657889675349,-4.80604267120361,-1.87313485145569,-1.62191653251648,-4.76058578491211,-2.27592206001282,-2.93405866622925,-3.98015213012695,-2.0447781085968,-4.12382078170776,-2.93948411941528,-2.27592206001282,-4.99741506576538,-1.59343123435974,-2.71363711357117,-5.24892139434814,0.00546819809824228,-2.71363711357117,5.24892139434814,-0.00546819809824228,-2.71363711357117,4.99403381347656,-1.60383152961731,-2.71363735198975,4.11864757537842,-2.94660258293152,-2.2759222984314,-3.29006695747375,-4.40524339675903,-3.57523918151855,3.28488397598267,-4.40900468826294,-3.57523918151855,-1.60642802715302,-5.3514289855957,-4.24777507781982,-1.22950708866119,-5.3514289855957,-3.68367314338684,-0.665404975414276,-5.3514289855957,-3.3067512512207,-0.00218318775296211,-5.35642385482788,-3.17353224754334,0.665403366088867,-5.3514289855957,-3.30675029754639,1.22950601577759,-5.3514289855957,-3.68367147445679,1.60642743110657,-5.3514289855957,-4.24777364730835,5.35143089294434,1.73878526687622,-4.91317892074585,4.5521993637085,3.30736613273621,-4.91317892074585,3.30736613273621,4.5521993637085,-4.91317892074585,1.73878538608551,5.35143089294434,-4.91317892074585,0,5.62682723999023,-4.91317844390869,-1.73878526687622,5.35143041610718,-4.91317892074585,
-3.30736589431763,4.55219841003418,-4.91317892074585,-4.55219841003418,3.30736565589905,-4.91317892074585,-5.35142993927002,1.73878490924835,-4.91317892074585,-1.22380304336548,3.7664783000946,-0.807293295860291,-8.75037713399252e-008,3.96030974388123,-0.807293295860291,1.22380316257477,3.76647853851318,-0.807293295860291,2.32781219482422,3.20395803451538,-0.807293295860291,3.20395851135254,2.32781195640564,-0.807293295860291,3.7664794921875,1.22380328178406,-0.807293295860291,-3.76647734642029,1.22380256652832,-0.807293355464935,-3.20395731925964,2.32781100273132,-0.807293295860291,-2.32781147956848,3.20395731925964,-0.807293295860291,2.69589638710022,0.283350437879562,-0.0497899726033211,2.65151000022888,0.563596129417419,-0.0497899726033211,2.57807278633118,0.837666988372803,-0.0497899726033211,2.47638964653015,1.10256004333496,-0.0497899726033211,2.34757471084595,1.35537326335907,-0.0497899726033211,2.19303941726685,1.59333682060242,-0.0497899726033211,2.01447677612305,1.81384336948395,-0.0497899726033211,1.81384289264679,2.01447701454163,-0.0497899726033211,1.59333622455597,2.19303941726685,-0.0497899726033211,1.3553729057312,2.34757471084595,-0.0497899726033211,1.10255944728851,2.47638964653015,-0.0497899726033211,0.83766633272171,2.57807230949402,-0.0497899726033211,0.563595473766327,2.65150928497314,-0.0497899726033211,0.283349812030792,2.69589591026306,-0.0497899726033211,-2.62556000052427e-007,2.7107458114624,-0.0497899726033211,-0.283350348472595,2.69589591026306,-0.0497899726033211,-0.56359601020813,2.65150928497314,-0.0497899726033211,-0.837666690349579,2.57807207107544,-0.0497899726033211,-1.10255980491638,2.47638916969299,-0.0497899726033211,-1.35537302494049,2.34757447242737,-0.0497899726033211,-1.59333646297455,2.19303894042969,-0.0497899726033211,-1.81384289264679,2.01447606086731,-0.0497899726033211,-2.01447653770447,1.81384241580963,-0.0497899726033211,-2.19303894042969,1.59333598613739,-0.0497899726033211,-2.34757423400879,1.35537254810333,-0.0497899726033211,-2.47638893127441,1.10255932807922,-0.0497899726033211,
-2.57807183265686,0.837666213512421,-0.0497899726033211,-2.65150880813599,0.563595473766327,-0.0497899726033211,-2.69589519500732,0.283349901437759,-0.0497899726033211,4.9440770149231,1.73878467082977,-6.96107864379883,3.78403377532959,1.73878467082977,-8.69720840454102,2.04790568351746,1.73878467082977,-9.857253074646,2.71124531536771e-006,1.73878467082977,-10.2646074295044,-2.04790091514587,1.73878467082977,-9.85725498199463,-3.78403043746948,1.73878467082977,-8.69721221923828,-4.94407510757446,1.73878467082977,-6.96108341217041,4.20568323135376,3.30736517906189,-6.6552267074585,3.21889138221741,3.30736517906189,-8.13206672668457,1.74205279350281,3.30736517906189,-9.11886024475098,2.30632304010214e-006,3.30736517906189,-9.46537590026855,-1.74204862117767,3.30736517906189,-9.11886119842529,-3.21888828277588,3.30736517906189,-8.13206958770752,-4.20568180084229,3.30736517906189,-6.65523052215576,3.05560779571533,4.55219793319702,-6.17885065078735,2.33866143226624,4.55219793319702,-7.25183725357056,1.26567542552948,4.55219793319702,-7.96878433227539,1.67564178354951e-006,4.55219793319702,-8.22054290771484,-1.26567232608795,4.55219793319702,-7.96878623962402,-2.33865928649902,4.55219793319702,-7.25183963775635,-3.05560636520386,4.55219793319702,-6.1788535118103,1.60642802715302,5.3514289855957,-5.57858180999756,1.22950708866119,5.3514289855957,-6.14268398284912,0.665404975414276,5.3514289855957,-6.51960563659668,8.80937022884609e-007,5.3514289855957,-6.65196323394775,-0.665403366088867,5.3514289855957,-6.519606590271,-1.22950601577759,5.3514289855957,-6.1426854133606,-1.60642743110657,5.3514289855957,-5.57858324050903,-2.92670965194702,3.98583483695984,-2.04461860656738,-1.61354744434357,4.76330423355103,-2.27592206001282,0.00356245832517743,4.80595016479492,-1.87316596508026,1.62191653251648,4.76058578491211,-2.27592206001282,2.93405866622925,3.98015213012695,-2.0447781085968,4.12382078170776,2.93948411941528,-2.27592206001282,4.99741506576538,1.59343123435974,-2.71363711357117,-4.99403381347656,1.60383152961731,-2.71363735198975,
-4.11864757537842,2.94660258293152,-2.2759222984314,3.29006695747375,4.40524339675903,-3.57523918151855,-3.28488397598267,4.40900468826294,-3.57523918151855,1.60642802715302,5.3514289855957,-4.24777507781982,1.22950708866119,5.3514289855957,-3.68367314338684,0.665404975414276,5.3514289855957,-3.3067512512207,0.00218318775296211,5.35642385482788,-3.17353224754334,-0.665403366088867,5.3514289855957,-3.30675029754639,-1.22950601577759,5.3514289855957,-3.68367147445679,-1.60642743110657,5.3514289855957,-4.24777364730835,0.928569316864014,5.5201358795166,-4.91563320159912,-0.910226345062256,5.52417755126953,-4.91563320159912,0.856685400009155,5.52029371261597,-5.27197027206421,0.652837693691254,5.52074193954468,-5.57205820083618,0.350059509277344,5.52140712738037,-5.76941299438477,-0.00358746666461229,5.52218437194824,-5.83484983444214,-0.353498309850693,5.52295351028442,-5.76039266586304,-0.647256135940552,5.52359867095947,-5.55930233001709,-0.842084586620331,5.5240273475647,-5.2629508972168,0.856685400009155,5.52029371261597,-4.55929660797119,0.652837693691254,5.52074193954468,-4.25920915603638,0.350059509277344,5.52140712738037,-4.06185388565063,-0.00241244467906654,5.52218198776245,-3.97895669937134,-0.353498309850693,5.52295351028442,-4.07087373733521,-0.647256135940552,5.52359867095947,-4.27196455001831,-0.842084586620331,5.5240273475647,-4.5683159828186,-0.894373059272766,-5.52668285369873,-4.91568517684937,0.884923696517944,-5.52881193161011,-4.91568565368652,-0.825655937194824,-5.5267653465271,-5.25850820541382,-0.630417704582214,-5.52699899673462,-5.54809617996216,-0.339424014091492,-5.52734708786011,-5.73994064331055,0.00199406640604138,-5.52775526046753,-5.80527544021606,0.341444969177246,-5.52816152572632,-5.73519277572632,0.627689063549042,-5.52850389480591,-5.54138040542603,0.818173170089722,-5.52873182296753,-5.25375747680664,-0.825655937194824,-5.5267653465271,-4.57286167144775,-0.630417704582214,-5.52699899673462,-4.28327369689941,-0.339424014091492,-5.52734708786011,-4.09142971038818,0.000856920785736293,-5.52775430679321,-4.00920629501343,
0.341444969177246,-5.52816152572632,-4.09617805480957,0.627689063549042,-5.52850389480591,-4.28998994827271,0.818173170089722,-5.52873182296753,-4.57761287689209
}
PolygonVertexIndex: *964 {
a: 1,0,94,-94,99,1,-94,2,99,-4,100,5,-108,98,100,-89,8,7,98,-98,9,8,97,-97,0,10,95,-95,15,93,94,-17,14,92,93,-16,13,91,92,-15,12,90,91,-14,11,89,90,-13,21,88,89,-12,20,98,88,-22,19,97,98,-21,18,96,97,-20,16,94,95,-18,25,15,-17,25,26,-16,26,27,-16,28,14,-16,28,29,-15,29,30,-15,31,13,-15,31,32,-14,32,33,-14,34,12,-14,34,35,-13,35,36,-13,36,37,-13,37,38,-12,38,39,-12,39,40,-12,40,41,-22,41,42,-22,42,43,-22,43,44,-21,44,45,-21,45,46,-21,46,47,-20,47,48,-20,48,49,-20,49,50,-19,50,51,-19,22,16,-18,22,23,-17,23,24,-17,53,60,61,-55,54,61,62,-56,55,62,63,-57,56,63,64,-58,57,64,65,-59,58,65,66,-60,59,66,8,-10,10,0,60,-54,60,67,68,-62,61,68,69,-63,62,69,70,-64,63,70,71,-65,64,71,72,-66,65,72,73,-67,66,73,7,-9,0,1,67,-61,67,74,75,-69,68,75,76,-70,69,76,77,-71,70,77,78,-72,71,78,79,-73,72,79,80,-74,73,80,6,-8,1,2,74,-68,74,81,82,-76,75,82,83,-77,76,83,84,-78,77,84,85,-79,78,85,86,-80,79,86,87,-81,80,87,5,-7,2,3,81,-75,81,219,220,-83,82,220,221,-84,83,221,222,-85,84,222,223,-86,85,223,224,-87,86,224,225,-88,87,225,218,-6,3,217,219,-82,37,11,-13,40,21,-12,43,20,-22,46,19,-21,49,18,-20,33,34,-14,30,31,-15,27,28,-16,24,25,-17,52,22,-18,99,91,-103,105,104,-90,100,89,-89,99,92,-92,101,102,227,-227,102,103,228,-228,103,104,229,-229,104,105,230,-230,105,106,231,-231,106,107,232,-232,107,5,218,-233,3,101,226,-218,100,107,-107,89,106,-106,103,91,-105,99,102,-102,99,101,-4,102,91,-104,5,100,-7,89,100,-107,109,108,189,-189,192,188,-188,110,192,-112,193,113,-201,115,114,-194,116,115,191,-191,95,10,116,-191,108,9,96,-190,121,188,189,-123,120,187,188,-122,119,186,187,-121,118,185,186,-120,117,184,185,-119,125,183,184,-118,124,191,183,-126,123,190,191,-125,17,95,190,-124,122,189,96,-19,129,121,-123,129,130,-122,130,131,-122,132,120,-122,132,133,-121,133,134,-121,135,119,-121,135,136,-120,136,137,-120,138,118,-120,138,139,-119,139,140,-119,140,141,-119,141,142,-118,142,143,-118,143,144,-118,144,145,-126,145,146,-126,146,147,-126,147,148,-125,148,149,-125,149,150,-125,150,151,-124,151,152,-124,152,153,-124,153,154,-18,154,52,-18,
126,122,-19,126,127,-123,127,128,-123,59,155,156,-59,58,156,157,-58,57,157,158,-57,56,158,159,-56,55,159,160,-55,54,160,161,-54,53,161,116,-11,9,108,155,-60,155,162,163,-157,156,163,164,-158,157,164,165,-159,158,165,166,-160,159,166,167,-161,160,167,168,-162,161,168,115,-117,108,109,162,-156,162,169,170,-164,163,170,171,-165,164,171,172,-166,165,172,173,-167,166,173,174,-168,167,174,175,-169,168,175,114,-116,109,110,169,-163,169,176,177,-171,170,177,178,-172,171,178,179,-173,172,179,180,-174,173,180,181,-175,174,181,182,-176,175,182,113,-115,110,111,176,-170,176,203,204,-178,177,204,205,-179,178,205,206,-180,179,206,207,-181,180,207,208,-182,181,208,209,-183,182,209,202,-114,111,201,203,-177,141,117,-119,144,125,-118,147,124,-126,150,123,-125,153,17,-124,137,138,-120,134,135,-121,131,132,-122,128,129,-123,51,126,-19,192,186,-196,198,197,-185,193,184,-184,192,187,-187,194,195,211,-211,195,196,212,-212,196,197,213,-213,197,198,214,-214,198,199,215,-215,199,200,216,-216,200,113,202,-217,111,194,210,-202,193,200,-200,184,199,-199,197,186,-186,192,195,-195,192,194,-112,195,186,-197,113,193,-115,184,193,-200,104,91,-91,89,104,-91,184,197,-186,196,186,-198,204,203,-113,205,204,-113,206,205,-113,207,206,-113,208,207,-113,209,208,-113,202,209,-113,203,201,-113,210,211,-113,211,212,-113,212,213,-113,213,214,-113,214,215,-113,215,216,-113,216,202,-113,201,210,-113,220,219,-5,221,220,-5,222,221,-5,223,222,-5,224,223,-5,225,224,-5,218,225,-5,219,217,-5,226,227,-5,227,228,-5,228,229,-5,229,230,-5,230,231,-5,231,232,-5,232,218,-5,217,226,-5,191,193,-184,192,109,-189,192,110,-110,115,193,-192,99,93,-93,99,2,-2,7,6,-101,7,100,-99
}
Edges: *512 {
a: 0,1,2,3,4,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,22,23,24,25,26,28,30,31,32,33,35,36,37,39,40,41,43,44,45,47,48,49,51,52,55,56,59,60,63,66,67,68,70,71,72,74,75,77,79,80,81,83,84,86,88,89,90,92,93,95,97,98,99,101,102,104,105,107,108,109,110,111,113,114,116,117,118,119,120,122,123,125,126,127,128,129,131,132,134,135,136,137,138,140,141,143,144,145,146,147,149,151,152,153,155,156,158,159,160,161,163,164,165,167,168,169,171,172,173,175,176,177,179,180,181,183,185,187,189,190,191,192,195,196,199,200,203,204,207,208,211,212,215,219,222,223,224,227,228,231,232,235,236,239,240,243,244,247,248,250,251,254,255,256,259,260,263,264,267,268,271,272,275,276,279,280,283,286,287,288,291,292,295,296,299,300,303,304,307,308,311,312,314,315,333,336,339,342,345,347,348,349,350,351,352,353,354,357,360,361,362,363,364,365,366,368,369,370,373,374,376,377,378,380,381,382,386,388,390,394,395,398,399,403,411,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,437,439,440,442,444,446,447,448,451,452,453,455,456,457,459,460,461,463,464,465,467,468,469,471,472,475,479,483,484,486,487,488,490,491,493,495,496,497,499,500,502,504,505,506,508,509,511,513,514,515,517,518,520,521,523,524,525,526,527,529,530,532,533,534,535,536,538,539,541,542,543,544,545,547,548,550,551,552,553,554,556,557,559,560,561,562,565,567,568,569,571,572,574,575,576,579,580,583,584,587,588,591,592,595,596,599,603,606,607,608,611,612,615,616,619,620,623,624,627,628,631,635,638,639,640,643,644,647,648,651,652,655,656,659,660,663,666,667,670,671,672,675,676,679,680,683,684,687,688,691,692,695,696,699,702,703,704,707,708,711,712,715,716,719,720,723,724,727,728,730,731,749,752,755,758,761,764,765,766,767,768,769,770,772,776,777,778,779,780,781,782,784,785,786,789,790,792,793,794,796,797,798,802,804,806,810,811,814,816,819,824,834,845,846,849,852,855,858,861,864,866,869,870,872,875,878,881,884,893,894,897,900,903,906,909,912,914,917,918,920,923,926,929,932,940,943,960
}
GeometryVersion: 124
LayerElementNormal: 0 {
Version: 102
Name: ""
MappingInformationType: "ByVertice"
ReferenceInformationType: "Direct"
Normals: *699 {
a: 0.95243501663208,0.303122699260712,-0.0313705801963806,0.841986954212189,0.539152681827545,-0.0192899145185947,0.611387372016907,0.78987991809845,0.0479054041206837,0.404336869716644,0.914360523223877,0.021363815292716,0.00130752159748226,0.999999046325684,-0.000158225040649995,-0.404073119163513,0.914474487304688,0.0214754436165094,-0.611517906188965,0.789777934551239,0.0479217208921909,-0.84181946516037,0.539409220218658,-0.0194287523627281,-0.95235151052475,0.30338442325592,-0.0313728004693985,-0.999758958816528,0.000134578163851984,-0.0219496376812458,0.999758958816528,-0.000134570902446285,-0.0219496320933104,-0.232987999916077,0.723920226097107,-0.649350345134735,-0.000733268272597343,0.762745440006256,-0.646698296070099,0.231588378548622,0.724367797374725,-0.649351894855499,0.442203164100647,0.613134026527405,-0.654616594314575,0.607602477073669,0.444047600030899,-0.658514022827148,0.713218510150909,0.233256831765175,-0.660991966724396,0.749643862247467,0.000726659200154245,-0.661840915679932,-0.749643921852112,-0.000726662285160273,-0.661840856075287,-0.713671088218689,0.23187318444252,-0.660990297794342,-0.608466506004334,0.442868173122406,-0.658510565757751,-0.44339781999588,0.612275898456573,-0.654611587524414,0.524224758148193,0.0704993680119514,-0.848656594753265,0.515698432922363,0.104740209877491,-0.850343763828278,0.493025243282318,0.160193875432014,-0.85513973236084,0.476780921220779,0.229044452309608,-0.848656833171844,0.458091706037521,0.258973300457001,-0.850343823432922,0.419392228126526,0.304706364870071,-0.855139672756195,0.382667005062103,0.365167766809464,-0.8486567735672,0.355643749237061,0.387856811285019,-0.850343763828278,0.304706335067749,0.419392436742783,-0.85513973236084,0.251095026731491,0.465545654296875,-0.848656833171844,0.218383371829987,0.478773474693298,-0.850343763828278,0.160193398594856,0.49302551150322,-0.85513961315155,0.0949439257383347,0.520352959632874,-0.8486567735672,0.0597460009157658,0.522825062274933,-0.850343525409698,-2.78458545110993e-009,0.518397629261017,-0.855139493942261,
-0.0705009028315544,0.524224460124969,-0.848656594753265,-0.104740262031555,0.515698671340942,-0.850343585014343,-0.16019369661808,0.493025273084641,-0.85513961315155,-0.229044675827026,0.476781219244003,-0.84865665435791,-0.258973598480225,0.458092153072357,-0.850343465805054,-0.304706871509552,0.419392496347427,-0.855139493942261,-0.365167915821075,0.382667154073715,-0.848656535148621,-0.387856602668762,0.35564449429512,-0.850343525409698,-0.419392645359039,0.304706454277039,-0.855139493942261,-0.465546041727066,0.251094847917557,-0.848656535148621,-0.478773981332779,0.218383371829987,-0.850343525409698,-0.493025720119476,0.160193458199501,-0.855139434337616,-0.520353138446808,0.0949438512325287,-0.848656535148621,-0.522825062274933,0.0597447454929352,-0.850343644618988,-0.518397629261017,1.18066657250893e-006,-0.85513961315155,0.518397629261017,-1.18066657250893e-006,-0.85513961315155,0.923879325389862,-1.96004208419254e-007,0.382683604955673,0.707106709480286,-1.05948227968611e-008,0.70710676908493,0.382683426141739,-2.91357586945651e-008,0.923879444599152,0,0,0.999999940395355,-0.382683426141739,2.91357586945651e-008,0.923879444599152,-0.707106709480286,1.3243529828344e-008,0.70710676908493,-0.923879325389862,1.98652912786201e-007,0.382683604955673,0.882639169692993,0.295438170433044,0.365601181983948,0.675543069839478,0.295438319444656,0.675542414188385,0.365601509809494,0.295438230037689,0.882638990879059,3.08202686483128e-007,0.295438259840012,0.955361783504486,-0.365600675344467,0.295438349246979,0.882639348506927,-0.675542414188385,0.295438408851624,0.675543010234833,-0.882638871669769,0.295438438653946,0.365601480007172,0.763177931308746,0.563584983348846,0.31611904501915,0.584111392498016,0.563585102558136,0.584110856056213,0.316119015216827,0.563584983348846,0.763177871704102,3.36254487365295e-007,0.563584983348846,0.826057970523834,-0.316118329763412,0.563584983348846,0.763178169727325,-0.584110796451569,0.563585042953491,0.584111392498016,-0.763177871704102,0.563585042953491,0.316119074821472,0.579267501831055,0.779023289680481,0.239941149950027,
0.443352371454239,0.779023408889771,0.44335201382637,0.239940777420998,0.779023468494415,0.57926732301712,2.71963358500216e-007,0.779023349285126,0.626994729042053,-0.239940151572227,0.779023230075836,0.579267978668213,-0.443351954221725,0.779023289680481,0.443352490663528,-0.579267561435699,0.779023289680481,0.23994106054306,0.382436066865921,0.910302639007568,0.158402666449547,0.292731821537018,0.910283744335175,0.292730987071991,0.158424094319344,0.910277545452118,0.382486999034882,-1.29567060866975e-005,0.910285174846649,0.413981676101685,-0.158423185348511,0.910305202007294,0.382421553134918,-0.292665511369705,0.910334825515747,0.292638182640076,-0.382304668426514,0.910369396209717,0.158337071537972,-0.504294753074646,0.692565858364105,-0.515789866447449,-0.286827087402344,0.816448152065277,-0.50114119052887,0.000677500676829368,0.848011910915375,-0.529976606369019,0.288040339946747,0.816234409809113,-0.50079333782196,0.505387425422668,0.691749453544617,-0.515815854072571,0.775141358375549,0.496765494346619,-0.390358537435532,0.890869557857513,0.287933647632599,-0.351348102092743,0.936307728290558,-0.000580868974793702,-0.351179748773575,-0.936307787895203,0.000580871768761426,-0.351179718971252,-0.890511274337769,0.28903865814209,-0.351348906755447,-0.774473130702972,0.497744917869568,-0.390437215566635,0.618634283542633,0.756046831607819,-0.213739514350891,-0.618014872074127,0.756545662879944,-0.213766172528267,0.349696904420853,0.925523817539215,-0.145318374037743,0.301173597574234,0.922609329223633,-0.241010695695877,0.120846144855022,0.945207417011261,-0.303280144929886,0.000257047271588817,0.949586808681488,-0.31350365281105,-0.120398744940758,0.945394933223724,-0.302873522043228,-0.300799906253815,0.922718346118927,-0.241060256958008,-0.34903484582901,0.925826072692871,-0.144985005259514,-0.95243501663208,-0.303122699260712,-0.0313705801963806,-0.841986954212189,-0.539152681827545,-0.0192899145185947,-0.611387372016907,-0.78987991809845,0.0479054041206837,-0.405566841363907,-0.913812816143036,0.0214842893183231,
-0.00240382226184011,-0.999997079372406,-0.000153351444168948,0.405069679021835,-0.914031267166138,0.0215688776224852,0.611517906188965,-0.789777934551239,0.0479217246174812,0.84181946516037,-0.539409220218658,-0.0194287542253733,0.95235151052475,-0.30338442325592,-0.0313728004693985,0.232987999916077,-0.723920226097107,-0.649350345134735,0.000733268272597343,-0.762745440006256,-0.646698296070099,-0.231588378548622,-0.724367797374725,-0.649351894855499,-0.442203164100647,-0.613134026527405,-0.654616594314575,-0.607602477073669,-0.444047600030899,-0.658514022827148,-0.713218510150909,-0.233256831765175,-0.660991966724396,0.713671088218689,-0.23187318444252,-0.660990297794342,0.608466506004334,-0.442868173122406,-0.658510565757751,0.44339781999588,-0.612275898456573,-0.654611587524414,-0.524224758148193,-0.0704993680119514,-0.848656594753265,-0.515698432922363,-0.104740209877491,-0.850343763828278,-0.493025243282318,-0.160193875432014,-0.85513973236084,-0.476780921220779,-0.229044452309608,-0.848656833171844,-0.458091706037521,-0.258973300457001,-0.850343823432922,-0.419392228126526,-0.304706364870071,-0.855139672756195,-0.382667005062103,-0.365167766809464,-0.8486567735672,-0.355643749237061,-0.387856811285019,-0.850343763828278,-0.304706335067749,-0.419392436742783,-0.85513973236084,-0.251095026731491,-0.465545654296875,-0.848656833171844,-0.218383371829987,-0.478773474693298,-0.850343763828278,-0.160193398594856,-0.49302551150322,-0.85513961315155,-0.0949439257383347,-0.520352959632874,-0.8486567735672,-0.0597460009157658,-0.522825062274933,-0.850343525409698,2.78458545110993e-009,-0.518397629261017,-0.855139493942261,0.0705009028315544,-0.524224460124969,-0.848656594753265,0.104740262031555,-0.515698671340942,-0.850343585014343,0.16019369661808,-0.493025273084641,-0.85513961315155,0.229044675827026,-0.476781219244003,-0.84865665435791,0.258973598480225,-0.458092153072357,-0.850343465805054,0.304706871509552,-0.419392496347427,-0.855139493942261,0.365167915821075,-0.382667154073715,-0.848656535148621,0.387856602668762,-0.35564449429512,-0.850343525409698,
0.419392645359039,-0.304706454277039,-0.855139493942261,0.465546041727066,-0.251094847917557,-0.848656535148621,0.478773981332779,-0.218383371829987,-0.850343525409698,0.493025720119476,-0.160193458199501,-0.855139434337616,0.520353138446808,-0.0949438512325287,-0.848656535148621,0.522825062274933,-0.0597447454929352,-0.850343644618988,-0.882639169692993,-0.295438170433044,0.365601181983948,-0.675543069839478,-0.295438319444656,0.675542414188385,-0.365601509809494,-0.295438230037689,0.882638990879059,-3.08202686483128e-007,-0.295438259840012,0.955361783504486,0.365600675344467,-0.295438349246979,0.882639348506927,0.675542414188385,-0.295438408851624,0.675543010234833,0.882638871669769,-0.295438438653946,0.365601480007172,-0.763177931308746,-0.563584983348846,0.31611904501915,-0.584111392498016,-0.563585102558136,0.584110856056213,-0.316119015216827,-0.563584983348846,0.763177871704102,-3.36254487365295e-007,-0.563584983348846,0.826057970523834,0.316118329763412,-0.563584983348846,0.763178169727325,0.584110796451569,-0.563585042953491,0.584111392498016,0.763177871704102,-0.563585042953491,0.316119074821472,-0.579267501831055,-0.779023289680481,0.239941149950027,-0.443352371454239,-0.779023408889771,0.44335201382637,-0.239940777420998,-0.779023468494415,0.57926732301712,-2.71963358500216e-007,-0.779023349285126,0.626994729042053,0.239940151572227,-0.779023230075836,0.579267978668213,0.443351954221725,-0.779023289680481,0.443352490663528,0.579267561435699,-0.779023289680481,0.23994106054306,-0.383364319801331,-0.90984433889389,0.158792346715927,-0.29342120885849,-0.909835577011108,0.293433219194412,-0.158777013421059,-0.909844517707825,0.383369952440262,2.55816630669869e-005,-0.909869492053986,0.414894282817841,0.15876892209053,-0.909906387329102,0.383226603269577,0.29326993227005,-0.909949660301209,0.293230652809143,0.3830706179142,-0.909992933273315,0.158649355173111,0.504294753074646,-0.692565858364105,-0.515789866447449,0.286827087402344,-0.816448152065277,-0.50114119052887,-0.000677500676829368,-0.848011910915375,-0.529976606369019,
-0.288040339946747,-0.816234409809113,-0.50079333782196,-0.505387485027313,-0.691749453544617,-0.515815854072571,-0.775141417980194,-0.496765464544296,-0.390358537435532,-0.890869557857513,-0.287933647632599,-0.351348102092743,0.890511274337769,-0.289038687944412,-0.35134893655777,0.774473130702972,-0.497744858264923,-0.390437215566635,-0.618634343147278,-0.756046831607819,-0.213739514350891,0.618014872074127,-0.756545662879944,-0.213766172528267,-0.35130187869072,-0.924808919429779,-0.145997524261475,-0.302366614341736,-0.922012269496918,-0.241800978779793,-0.121337905526161,-0.944665968418121,-0.304767549037933,-0.000235019993851893,-0.949193179607391,-0.314693510532379,0.120913416147232,-0.944890081882477,-0.304240822792053,0.301842212677002,-0.922201633453369,-0.241733744740486,0.350369065999985,-0.925236344337463,-0.145530521869659,-0.182937070727348,-0.983124494552612,6.2264982261695e-005,0.183531492948532,-0.983013689517975,6.1371159972623e-005,-0.169067963957787,-0.983098983764648,0.0702301859855652,-0.129371270537376,-0.983069062232971,0.129762157797813,-0.0698795914649963,-0.983039200305939,0.169560074806213,0.000327881425619125,-0.983014047145844,0.183529689908028,0.0705259218811989,-0.982997000217438,0.169536799192429,0.129994586110115,-0.982990980148315,0.129730641841888,0.169670239090919,-0.982996761798859,0.0702084600925446,-0.168900951743126,-0.983141541481018,-0.0700361803174019,-0.129135966300964,-0.98314756155014,-0.12940114736557,-0.0735219269990921,-0.983218967914581,-0.166957288980484,0.000394314294680953,-0.983463108539581,-0.181107714772224,0.0738895684480667,-0.983170866966248,-0.167078167200089,0.129759609699249,-0.983069121837616,-0.129373461008072,0.169504478573799,-0.98303896188736,-0.0700171142816544,0.183433696627617,0.983031988143921,6.18208723608404e-005,-0.183770149946213,0.982969164848328,6.1534381529782e-005,0.169540628790855,0.983007907867432,0.0703658610582352,0.12977123260498,0.982982814311981,0.130015909671783,0.0701662674546242,0.98296046257019,0.169897675514221,-0.000181678304215893,0.982944071292877,0.183903887867928,
-0.0705258399248123,0.982936441898346,0.169887498021126,-0.13012121617794,0.982938468456268,0.130000993609428,-0.169880479574203,0.982949912548065,0.0703556090593338,0.169370621442795,0.983051121234894,-0.0701715797185898,0.129531264305115,0.983062565326691,-0.129651620984077,0.0738088563084602,0.983138620853424,-0.167303547263145,-0.000222105591092259,0.983401775360107,-0.181440591812134,-0.0739132985472679,0.983110666275024,-0.167421877384186,-0.129881098866463,0.983018159866333,-0.129638329148293,-0.169711098074913,0.982992947101593,-0.070162259042263
}
NormalsW: *233 {
a: 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
}
}
LayerElementBinormal: 0 {
Version: 102
Name: "map1"
MappingInformationType: "ByPolygonVertex"
ReferenceInformationType: "Direct"
Binormals: *2892 {
a: -0.538756966590881,0.842166483402252,0.0222883857786655,-0.303491592407227,0.952803611755371,-0.00763872265815735,-0.268792986869812,0.957647264003754,0.103257656097412,-0.418077945709229,0.866551637649536,0.272578746080399,-0.690481603145599,0.652971923351288,0.311227947473526,-0.538756966590881,0.842166483402252,0.0222883857786655,-0.418077945709229,0.866551637649536,0.272578746080399,-0.788570821285248,0.613189399242401,-0.0464206822216511,-0.690481603145599,0.652971923351288,0.311227947473526,-0.914563536643982,0.403970152139664,0.0195391811430454,0.687305569648743,0.651948213577271,0.320272892713547,0.913873791694641,0.402571469545364,0.0526415891945362,0.840834498405457,0.37771138548851,0.387726128101349,0.409387439489365,0.864872813224792,0.290511399507523,0.687305569648743,0.651948213577271,0.320272892713547,0.429987072944641,0.719381034374237,0.545529305934906,0.304097056388855,0.952407658100128,-0.0210890527814627,0.538956105709076,0.84198522567749,0.0242342874407768,0.409387439489365,0.864872813224792,0.290511399507523,0.263679027557373,0.957222759723663,0.119155757129192,0.000337140896590427,0.999957382678986,-0.00922508258372545,0.304097056388855,0.952407658100128,-0.0210890527814627,0.263679027557373,0.957222759723663,0.119155757129192,-0.00047217431711033,0.999995648860931,0.0029129518661648,-0.303491592407227,0.952803611755371,-0.00763872265815735,0.000187950907275081,0.999997079372406,0.00242988578975201,-0.00364801031537354,0.999928593635559,-0.0113801760599017,-0.268792986869812,0.957647264003754,0.103257656097412,-0.239447131752968,0.892947554588318,0.381195425987244,-0.418077945709229,0.866551637649536,0.272578746080399,-0.268792986869812,0.957647264003754,0.103257656097412,-0.148835822939873,0.971898555755615,0.182376638054848,-0.24627885222435,0.784804880619049,0.568707406520844,-0.436534821987152,0.720601975917816,0.538674414157867,-0.418077945709229,0.866551637649536,0.272578746080399,-0.239447131752968,0.892947554588318,0.381195425987244,-0.184602230787277,0.688093483448029,0.701747417449951,
-0.386598587036133,0.577563107013702,0.719001054763794,-0.436534821987152,0.720601975917816,0.538674414157867,-0.24627885222435,0.784804880619049,0.568707406520844,-0.0655900537967682,0.645269334316254,0.761134445667267,-0.152839198708534,0.523837924003601,0.83799409866333,-0.386598587036133,0.577563107013702,0.719001054763794,-0.184602230787277,0.688093483448029,0.701747417449951,0.166800603270531,0.687579393386841,0.706691086292267,0.37522628903389,0.577071487903595,0.72539222240448,0.134322851896286,0.525096774101257,0.840375483036041,0.0663638785481453,0.64530998468399,0.76103276014328,0.233672022819519,0.784035384654999,0.575052917003632,0.429987072944641,0.719381034374237,0.545529305934906,0.37522628903389,0.577071487903595,0.72539222240448,0.166800603270531,0.687579393386841,0.706691086292267,0.232008963823318,0.892817258834839,0.386069238185883,0.409387439489365,0.864872813224792,0.290511399507523,0.429987072944641,0.719381034374237,0.545529305934906,0.233672022819519,0.784035384654999,0.575052917003632,0.139544054865837,0.971771836280823,0.190228596329689,0.263679027557373,0.957222759723663,0.119155757129192,0.409387439489365,0.864872813224792,0.290511399507523,0.232008963823318,0.892817258834839,0.386069238185883,-0.00492393365129828,0.999977886676788,0.00447924993932247,-0.00047217431711033,0.999995648860931,0.0029129518661648,0.263679027557373,0.957222759723663,0.119155757129192,0.139544054865837,0.971771836280823,0.190228596329689,-0.148835822939873,0.971898555755615,0.182376638054848,-0.268792986869812,0.957647264003754,0.103257656097412,-0.00364801031537354,0.999928593635559,-0.0113801760599017,-0.00743714720010757,0.999945521354675,-0.0073259174823761,-0.119516372680664,0.973381519317627,0.19556137919426,-0.239447131752968,0.892947554588318,0.381195425987244,-0.148835822939873,0.971898555755615,0.182376638054848,-0.119516372680664,0.973381519317627,0.19556137919426,-0.126604616641998,0.965875566005707,0.22595502436161,-0.239447131752968,0.892947554588318,0.381195425987244,-0.126604616641998,0.965875566005707,0.22595502436161,
-0.143458381295204,0.952395379543304,0.269003540277481,-0.239447131752968,0.892947554588318,0.381195425987244,-0.160483658313751,0.930881261825562,0.328184545040131,-0.24627885222435,0.784804880619049,0.568707406520844,-0.239447131752968,0.892947554588318,0.381195425987244,-0.160483658313751,0.930881261825562,0.328184545040131,-0.141191884875298,0.921680927276611,0.361343532800674,-0.24627885222435,0.784804880619049,0.568707406520844,-0.141191884875298,0.921680927276611,0.361343532800674,-0.140671089291573,0.907805025577545,0.39509704709053,-0.24627885222435,0.784804880619049,0.568707406520844,-0.142982751131058,0.884966671466827,0.443159282207489,-0.184602230787277,0.688093483448029,0.701747417449951,-0.24627885222435,0.784804880619049,0.568707406520844,-0.142982751131058,0.884966671466827,0.443159282207489,-0.102957256138325,0.877816915512085,0.467800587415695,-0.184602230787277,0.688093483448029,0.701747417449951,-0.102957256138325,0.877816915512085,0.467800587415695,-0.0831321701407433,0.869988560676575,0.486013382673264,-0.184602230787277,0.688093483448029,0.701747417449951,-0.0644405260682106,0.853932559490204,0.516378462314606,-0.0655900537967682,0.645269334316254,0.761134445667267,-0.184602230787277,0.688093483448029,0.701747417449951,-0.0644405260682106,0.853932559490204,0.516378462314606,-0.0295761451125145,0.852418601512909,0.522022843360901,-0.0655900537967682,0.645269334316254,0.761134445667267,-0.0295761451125145,0.852418601512909,0.522022843360901,-0.0144781339913607,0.855050027370453,0.518343389034271,-0.0655900537967682,0.645269334316254,0.761134445667267,0.0144781330600381,0.855050027370453,0.518343389034271,0.0454504080116749,0.851578295230865,0.522253513336182,0.0663638785481453,0.64530998468399,0.76103276014328,0.0454504080116749,0.851578295230865,0.522253513336182,0.0614676773548126,0.85676896572113,0.512024164199829,0.166800603270531,0.687579393386841,0.706691086292267,0.0614676773548126,0.85676896572113,0.512024164199829,0.0831314995884895,0.869988679885864,0.486013323068619,0.166800603270531,0.687579393386841,0.706691086292267,
0.0831314995884895,0.869988679885864,0.486013323068619,0.13205149769783,0.878993153572083,0.458185017108917,0.166800603270531,0.687579393386841,0.706691086292267,0.13205149769783,0.878993153572083,0.458185017108917,0.139386579394341,0.888887643814087,0.436406016349792,0.233672022819519,0.784035384654999,0.575052917003632,0.139386579394341,0.888887643814087,0.436406016349792,0.140670999884605,0.90780508518219,0.395097196102142,0.233672022819519,0.784035384654999,0.575052917003632,0.140670999884605,0.90780508518219,0.395097196102142,0.160689011216164,0.923837423324585,0.347424119710922,0.233672022819519,0.784035384654999,0.575052917003632,0.160689011216164,0.923837423324585,0.347424119710922,0.161058574914932,0.934518694877625,0.317387938499451,0.232008963823318,0.892817258834839,0.386069238185883,0.161058574914932,0.934518694877625,0.317387938499451,0.143458902835846,0.95239531993866,0.269003361463547,0.232008963823318,0.892817258834839,0.386069238185883,0.143458902835846,0.95239531993866,0.269003361463547,0.128421768546104,0.967925548553467,0.215935245156288,0.232008963823318,0.892817258834839,0.386069238185883,0.128421768546104,0.967925548553467,0.215935245156288,0.11673241853714,0.975803911685944,0.184879288077354,0.139544054865837,0.971771836280823,0.190228596329689,0.11673241853714,0.975803911685944,0.184879288077354,0.0885517746210098,0.987037658691406,0.133847966790199,0.139544054865837,0.971771836280823,0.190228596329689,0.0885517746210098,0.987037658691406,0.133847966790199,0.0527799502015114,0.995475888252258,0.0790073499083519,0.139544054865837,0.971771836280823,0.190228596329689,0.0527799502015114,0.995475888252258,0.0790073499083519,0.0310549214482307,0.998213708400726,0.0510402284562588,-0.00492393365129828,0.999977886676788,0.00447924993932247,0.0310549214482307,0.998213708400726,0.0510402284562588,6.26311759788223e-007,1,1.0009920288212e-006,-0.00492393365129828,0.999977886676788,0.00447924993932247,-0.0394734852015972,0.997507810592651,0.0584814846515656,-0.148835822939873,0.971898555755615,0.182376638054848,
-0.00743714720010757,0.999945521354675,-0.0073259174823761,-0.0394734852015972,0.997507810592651,0.0584814846515656,-0.0611926093697548,0.994467496871948,0.0853817090392113,-0.148835822939873,0.971898555755615,0.182376638054848,-0.0611926093697548,0.994467496871948,0.0853817090392113,-0.0885518565773964,0.987037658691406,0.133848413825035,-0.148835822939873,0.971898555755615,0.182376638054848,-0.00127343460917473,0.999994456768036,0.00307485298253596,-0.273578345775604,0.955360651016235,-0.111539654433727,-0.210978776216507,0.955357730388641,-0.206832364201546,-0.00184407422784716,0.999996662139893,0.00184408889617771,-0.00184407422784716,0.999996662139893,0.00184408889617771,-0.210978776216507,0.955357730388641,-0.206832364201546,-0.11558723449707,0.955358386039734,-0.271901100873947,-0.00219144718721509,0.99999725818634,0.000907758774701506,-0.00219144718721509,0.99999725818634,0.000907758774701506,-0.11558723449707,0.955358386039734,-0.271901100873947,-0.00232641189359128,0.955359280109406,-0.29543748497963,-0.00230691395699978,0.99999737739563,0,-0.00230691395699978,0.99999737739563,0,-0.00232641189359128,0.955359280109406,-0.29543748497963,0.110599935054779,0.955358505249023,-0.273967087268829,-0.00254978518933058,0.999996244907379,-0.00105618720408529,-0.00254978518933058,0.999996244907379,-0.00105618720408529,0.110599935054779,0.955358505249023,-0.273967087268829,0.205816701054573,0.95535272359848,-0.211992397904396,-0.00285471859388053,0.999991893768311,-0.00285473698750138,-0.00285471859388053,0.999991893768311,-0.00285473698750138,0.205816701054573,0.95535272359848,-0.211992397904396,0.269901931285858,0.955331683158875,-0.1203927770257,-0.0024407603777945,0.999979734420776,-0.00589303206652403,-0.0024407603777945,0.999979734420776,-0.00589303206652403,0.269901931285858,0.955331683158875,-0.1203927770257,0.304097056388855,0.952407658100128,-0.0210890527814627,0.000337140896590427,0.999957382678986,-0.00922508258372545,0.000187950907275081,0.999997079372406,0.00242988578975201,-0.303491592407227,0.952803611755371,-0.00763872265815735,
-0.273578345775604,0.955360651016235,-0.111539654433727,-0.00127343460917473,0.999994456768036,0.00307485298253596,-0.273578345775604,0.955360651016235,-0.111539654433727,-0.522167682647705,0.826051890850067,-0.212083175778389,-0.40167224407196,0.8260498046875,-0.395349621772766,-0.210978776216507,0.955357730388641,-0.206832364201546,-0.210978776216507,0.955357730388641,-0.206832364201546,-0.40167224407196,0.8260498046875,-0.395349621772766,-0.218749910593033,0.826053500175476,-0.519407510757446,-0.11558723449707,0.955358386039734,-0.271901100873947,-0.11558723449707,0.955358386039734,-0.271901100873947,-0.218749910593033,0.826053500175476,-0.519407510757446,-0.00222387071698904,0.826056063175201,-0.563583672046661,-0.00232641189359128,0.955359280109406,-0.29543748497963,-0.00232641189359128,0.955359280109406,-0.29543748497963,-0.00222387071698904,0.826056063175201,-0.563583672046661,0.213519424200058,0.826055824756622,-0.521575748920441,0.110599935054779,0.955358505249023,-0.273967087268829,0.110599935054779,0.955358505249023,-0.273967087268829,0.213519424200058,0.826055824756622,-0.521575748920441,0.395447641611099,0.826050221920013,-0.401574671268463,0.205816701054573,0.95535272359848,-0.211992397904396,0.205816701054573,0.95535272359848,-0.211992397904396,0.395447641611099,0.826050221920013,-0.401574671268463,0.516389131546021,0.826006770133972,-0.225953683257103,0.269901931285858,0.955331683158875,-0.1203927770257,0.269901931285858,0.955331683158875,-0.1203927770257,0.516389131546021,0.826006770133972,-0.225953683257103,0.538956105709076,0.84198522567749,0.0242342874407768,0.304097056388855,0.952407658100128,-0.0210890527814627,-0.303491592407227,0.952803611755371,-0.00763872265815735,-0.538756966590881,0.842166483402252,0.0222883857786655,-0.522167682647705,0.826051890850067,-0.212083175778389,-0.273578345775604,0.955360651016235,-0.111539654433727,-0.522167682647705,0.826051890850067,-0.212083175778389,-0.722746193408966,0.626975119113922,-0.290758103132248,-0.553999066352844,0.626988470554352,-0.547695577144623,
-0.40167224407196,0.8260498046875,-0.395349621772766,-0.40167224407196,0.8260498046875,-0.395349621772766,-0.553999066352844,0.626988470554352,-0.547695577144623,-0.300527393817902,0.626992583274841,-0.718723714351654,-0.218749910593033,0.826053500175476,-0.519407510757446,-0.218749910593033,0.826053500175476,-0.519407510757446,-0.300527393817902,0.626992583274841,-0.718723714351654,-0.00139167241286486,0.626994252204895,-0.779022693634033,-0.00222387071698904,0.826056063175201,-0.563583672046661,-0.00222387071698904,0.826056063175201,-0.563583672046661,-0.00139167241286486,0.626994252204895,-0.779022693634033,0.296986013650894,0.626994609832764,-0.720192492008209,0.213519424200058,0.826055824756622,-0.521575748920441,0.213519424200058,0.826055824756622,-0.521575748920441,0.296986013650894,0.626994609832764,-0.720192492008209,0.549368441104889,0.626993596553802,-0.552334666252136,0.395447641611099,0.826050221920013,-0.401574671268463,0.395447641611099,0.826050221920013,-0.401574671268463,0.549368441104889,0.626993596553802,-0.552334666252136,0.718461275100708,0.62699156999588,-0.30115619301796,0.516389131546021,0.826006770133972,-0.225953683257103,0.516389131546021,0.826006770133972,-0.225953683257103,0.718461275100708,0.62699156999588,-0.30115619301796,0.788516461849213,0.613313794136047,-0.0456949062645435,0.538956105709076,0.84198522567749,0.0242342874407768,-0.538756966590881,0.842166483402252,0.0222883857786655,-0.788570821285248,0.613189399242401,-0.0464206822216511,-0.722746193408966,0.626975119113922,-0.290758103132248,-0.522167682647705,0.826051890850067,-0.212083175778389,-0.722746193408966,0.626975119113922,-0.290758103132248,-0.841388463973999,0.413942813873291,-0.34744331240654,-0.643967926502228,0.413984745740891,-0.643367767333984,-0.553999066352844,0.626988470554352,-0.547695577144623,-0.553999066352844,0.626988470554352,-0.547695577144623,-0.643967926502228,0.413984745740891,-0.643367767333984,-0.348230361938477,0.413998246192932,-0.841035723686218,-0.300527393817902,0.626992583274841,-0.718723714351654,
-0.300527393817902,0.626992583274841,-0.718723714351654,-0.348230361938477,0.413998246192932,-0.841035723686218,0.000344159576343372,0.413981676101685,-0.910285174846649,-0.00139167241286486,0.626994252204895,-0.779022693634033,-0.00139167241286486,0.626994252204895,-0.779022693634033,0.000344159576343372,0.413981676101685,-0.910285174846649,0.348682522773743,0.413937419652939,-0.840878307819366,0.296986013650894,0.626994609832764,-0.720192492008209,0.296986013650894,0.626994609832764,-0.720192492008209,0.348682522773743,0.413937419652939,-0.840878307819366,0.643805384635925,0.413872271776199,-0.643602788448334,0.549368441104889,0.626993596553802,-0.552334666252136,0.549368441104889,0.626993596553802,-0.552334666252136,0.643805384635925,0.413872271776199,-0.643602788448334,0.85091769695282,0.413651525974274,-0.323776930570602,0.718461275100708,0.62699156999588,-0.30115619301796,0.718461275100708,0.62699156999588,-0.30115619301796,0.85091769695282,0.413651525974274,-0.323776930570602,0.913873791694641,0.402571469545364,0.0526415891945362,0.788516461849213,0.613313794136047,-0.0456949062645435,-0.788570821285248,0.613189399242401,-0.0464206822216511,-0.914563536643982,0.403970152139664,0.0195391811430454,-0.841388463973999,0.413942813873291,-0.34744331240654,-0.722746193408966,0.626975119113922,-0.290758103132248,-0.841388463973999,0.413942813873291,-0.34744331240654,-0.89221203327179,0.183422282338142,-0.412691086530685,-0.665881633758545,0.183553606271744,-0.723125040531158,-0.643967926502228,0.413984745740891,-0.643367767333984,-0.643967926502228,0.413984745740891,-0.643367767333984,-0.665881633758545,0.183553606271744,-0.723125040531158,-0.338062316179276,0.18367038667202,-0.923027157783508,-0.348230361938477,0.413998246192932,-0.841035723686218,-0.348230361938477,0.413998246192932,-0.841035723686218,-0.338062316179276,0.18367038667202,-0.923027157783508,0.041039664298296,0.183756306767464,-0.982114791870117,0.000344159576343372,0.413981676101685,-0.910285174846649,0.000344159576343372,0.413981676101685,-0.910285174846649,
0.041039664298296,0.183756306767464,-0.982114791870117,0.413609892129898,0.18379670381546,-0.891709446907043,0.348682522773743,0.413937419652939,-0.840878307819366,0.348682522773743,0.413937419652939,-0.840878307819366,0.413609892129898,0.18379670381546,-0.891709446907043,0.723079919815063,0.183787003159523,-0.665866196155548,0.643805384635925,0.413872271776199,-0.643602788448334,0.643805384635925,0.413872271776199,-0.643602788448334,0.723079919815063,0.183787003159523,-0.665866196155548,0.908484756946564,0.183872982859612,-0.375295042991638,0.85091769695282,0.413651525974274,-0.323776930570602,0.85091769695282,0.413651525974274,-0.323776930570602,0.908484756946564,0.183872982859612,-0.375295042991638,0.982218205928802,0.18363219499588,-0.0390720628201962,0.913873791694641,0.402571469545364,0.0526415891945362,-0.914563536643982,0.403970152139664,0.0195391811430454,-0.982280671596527,0.183295950293541,-0.0390802174806595,-0.89221203327179,0.183422282338142,-0.412691086530685,-0.841388463973999,0.413942813873291,-0.34744331240654,0.0454504080116749,0.851578295230865,0.522253513336182,0.166800603270531,0.687579393386841,0.706691086292267,0.0663638785481453,0.64530998468399,0.76103276014328,0.13205149769783,0.878993153572083,0.458185017108917,0.233672022819519,0.784035384654999,0.575052917003632,0.166800603270531,0.687579393386841,0.706691086292267,0.160689011216164,0.923837423324585,0.347424119710922,0.232008963823318,0.892817258834839,0.386069238185883,0.233672022819519,0.784035384654999,0.575052917003632,0.128421768546104,0.967925548553467,0.215935245156288,0.139544054865837,0.971771836280823,0.190228596329689,0.232008963823318,0.892817258834839,0.386069238185883,0.0527799502015114,0.995475888252258,0.0790073499083519,-0.00492393365129828,0.999977886676788,0.00447924993932247,0.139544054865837,0.971771836280823,0.190228596329689,-0.0831321701407433,0.869988560676575,0.486013382673264,-0.0644405260682106,0.853932559490204,0.516378462314606,-0.184602230787277,0.688093483448029,0.701747417449951,-0.140671089291573,0.907805025577545,0.39509704709053,
-0.142982751131058,0.884966671466827,0.443159282207489,-0.24627885222435,0.784804880619049,0.568707406520844,-0.143458381295204,0.952395379543304,0.269003540277481,-0.160483658313751,0.930881261825562,0.328184545040131,-0.239447131752968,0.892947554588318,0.381195425987244,-0.0885518565773964,0.987037658691406,0.133848413825035,-0.119516372680664,0.973381519317627,0.19556137919426,-0.148835822939873,0.971898555755615,0.182376638054848,6.26311759788223e-007,1,-1.0009920288212e-006,-0.0394734852015972,0.997507810592651,0.0584814846515656,-0.00743714720010757,0.999945521354675,-0.0073259174823761,-0.690481603145599,0.652971923351288,0.311227947473526,-0.386598587036133,0.577563107013702,0.719001054763794,-0.679749429225922,0.384975999593735,0.624287009239197,0.330280840396881,0.325859487056732,0.885850012302399,0.184393793344498,0.308082848787308,0.933318734169006,0.37522628903389,0.577071487903595,0.72539222240448,0.687305569648743,0.651948213577271,0.320272892713547,0.37522628903389,0.577071487903595,0.72539222240448,0.429987072944641,0.719381034374237,0.545529305934906,-0.690481603145599,0.652971923351288,0.311227947473526,-0.436534821987152,0.720601975917816,0.538674414157867,-0.386598587036133,0.577563107013702,0.719001054763794,-0.855075120925903,0.378688842058182,0.35417714715004,-0.679749429225922,0.384975999593735,0.624287009239197,-0.665934026241302,0.183123126626015,0.723185837268829,-0.907976388931274,0.183331519365311,0.376786977052689,-0.679749429225922,0.384975999593735,0.624287009239197,-0.363734304904938,0.326433509588242,0.8724325299263,-0.381559401750565,0.182835951447487,0.90608137845993,-0.665934026241302,0.183123126626015,0.723185837268829,-0.363734304904938,0.326433509588242,0.8724325299263,-0.194435983896255,0.30756801366806,0.931448698043823,-0.201113969087601,0.177689477801323,0.963317036628723,-0.381559401750565,0.182835951447487,0.90608137845993,0.184393793344498,0.308082848787308,0.933318734169006,0.330280840396881,0.325859487056732,0.885850012302399,0.418961435556412,0.182958588004112,0.889380395412445,
0.203014105558395,0.177706599235535,0.962915182113647,0.330280840396881,0.325859487056732,0.885850012302399,0.637124121189117,0.38251268863678,0.669146358966827,0.723138451576233,0.183364510536194,0.665919125080109,0.418961435556412,0.182958588004112,0.889380395412445,0.637124121189117,0.38251268863678,0.669146358966827,0.840834498405457,0.37771138548851,0.387726128101349,0.92268431186676,0.183501794934273,0.339088410139084,0.723138451576233,0.183364510536194,0.665919125080109,0.840834498405457,0.37771138548851,0.387726128101349,0.913873791694641,0.402571469545364,0.0526415891945362,0.982218205928802,0.18363219499588,-0.0390720628201962,0.92268431186676,0.183501794934273,0.339088410139084,-0.914563536643982,0.403970152139664,0.0195391811430454,-0.855075120925903,0.378688842058182,0.35417714715004,-0.907976388931274,0.183331519365311,0.376786977052689,-0.982280671596527,0.183295950293541,-0.0390802174806595,0.687305569648743,0.651948213577271,0.320272892713547,0.840834498405457,0.37771138548851,0.387726128101349,0.637124121189117,0.38251268863678,0.669146358966827,0.37522628903389,0.577071487903595,0.72539222240448,0.637124121189117,0.38251268863678,0.669146358966827,0.330280840396881,0.325859487056732,0.885850012302399,-0.363734304904938,0.326433509588242,0.8724325299263,-0.386598587036133,0.577563107013702,0.719001054763794,-0.194435983896255,0.30756801366806,0.931448698043823,-0.690481603145599,0.652971923351288,0.311227947473526,-0.679749429225922,0.384975999593735,0.624287009239197,-0.855075120925903,0.378688842058182,0.35417714715004,-0.690481603145599,0.652971923351288,0.311227947473526,-0.855075120925903,0.378688842058182,0.35417714715004,-0.914563536643982,0.403970152139664,0.0195391811430454,-0.679749429225922,0.384975999593735,0.624287009239197,-0.386598587036133,0.577563107013702,0.719001054763794,-0.363734304904938,0.326433509588242,0.8724325299263,0.913873791694641,0.402571469545364,0.0526415891945362,0.687305569648743,0.651948213577271,0.320272892713547,0.788516461849213,0.613313794136047,-0.0456949062645435,
0.37522628903389,0.577071487903595,0.72539222240448,0.687305569648743,0.651948213577271,0.320272892713547,0.637124121189117,0.38251268863678,0.669146358966827,-0.538600146770477,0.842110395431519,-0.0275673791766167,-0.303326666355133,0.9528848528862,0.00184651091694832,-0.265641659498215,0.957633018493652,-0.111236430704594,-0.413835555315018,0.866088271141052,-0.280413091182709,-0.687900722026825,0.652649104595184,-0.31755593419075,-0.413835555315018,0.866088271141052,-0.280413091182709,-0.429374217987061,0.720117330551147,-0.545040249824524,-0.788780808448792,0.613155782222748,0.0431852638721466,-0.687900722026825,0.652649104595184,-0.31755593419075,-0.914010167121887,0.405171811580658,-0.0205282382667065,0.684887290000916,0.651613831520081,-0.32608100771904,0.913421988487244,0.403549164533615,-0.0529943630099297,0.840420544147491,0.379155844449997,-0.387213408946991,0.538829863071442,0.841936945915222,-0.0283651407808065,0.788650214672089,0.613292157649994,0.0436320342123508,0.684887290000916,0.651613831520081,-0.32608100771904,0.30397617816925,0.952543497085571,0.0161072611808777,0.538829863071442,0.841936945915222,-0.0283651407808065,0.405113220214844,0.864263892173767,-0.298213392496109,0.260820865631104,0.957090973854065,-0.126291528344154,-0.00364801031537354,0.999928593635559,-0.0113801760599017,0.000187950907275081,0.999997079372406,0.00242988578975201,0.30397617816925,0.952543497085571,0.0161072611808777,0.260820865631104,0.957090973854065,-0.126291528344154,-0.303326666355133,0.9528848528862,0.00184651091694832,0.000337140896590427,0.999957382678986,-0.00922508258372545,-0.00047217431711033,0.999995648860931,0.0029129518661648,-0.265641659498215,0.957633018493652,-0.111236430704594,-0.236930131912231,0.892696976661682,-0.383348882198334,-0.413835555315018,0.866088271141052,-0.280413091182709,-0.265641659498215,0.957633018493652,-0.111236430704594,-0.146542638540268,0.971786975860596,-0.184811681509018,-0.244563356041908,0.784623861312866,-0.569696605205536,-0.429374217987061,0.720117330551147,-0.545040249824524,
-0.413835555315018,0.866088271141052,-0.280413091182709,-0.236930131912231,0.892696976661682,-0.383348882198334,-0.183373287320137,0.688037991523743,-0.702123820781708,-0.38222798705101,0.577488660812378,-0.721393525600433,-0.429374217987061,0.720117330551147,-0.545040249824524,-0.244563356041908,0.784623861312866,-0.569696605205536,-0.0654601380228996,0.645274877548218,-0.761140882968903,-0.153820216655731,0.523757815361023,-0.837864637374878,-0.38222798705101,0.577488660812378,-0.721393525600433,-0.183373287320137,0.688037991523743,-0.702123820781708,0.165740862488747,0.687516689300537,-0.707001388072968,0.371506989002228,0.576981961727142,-0.727374970912933,0.136142775416374,0.524964094161987,-0.840165495872498,0.0660759806632996,0.645322263240814,-0.76104748249054,0.232035249471664,0.783841133117676,-0.575979828834534,0.423068106174469,0.718859016895294,-0.551593244075775,0.371506989002228,0.576981961727142,-0.727374970912933,0.165740862488747,0.687516689300537,-0.707001388072968,0.229418396949768,0.892531752586365,-0.388270884752274,0.405113220214844,0.864263892173767,-0.298213392496109,0.423068106174469,0.718859016895294,-0.551593244075775,0.232035249471664,0.783841133117676,-0.575979828834534,0.136930271983147,0.971599221229553,-0.192990154027939,0.260820865631104,0.957090973854065,-0.126291528344154,0.405113220214844,0.864263892173767,-0.298213392496109,0.229418396949768,0.892531752586365,-0.388270884752274,-0.00743714720010757,0.999945521354675,-0.0073259174823761,-0.00364801031537354,0.999928593635559,-0.0113801760599017,0.260820865631104,0.957090973854065,-0.126291528344154,0.136930271983147,0.971599221229553,-0.192990154027939,-0.146542638540268,0.971786975860596,-0.184811681509018,-0.265641659498215,0.957633018493652,-0.111236430704594,-0.00047217431711033,0.999995648860931,0.0029129518661648,-0.00492393365129828,0.999977886676788,0.00447924993932247,-0.119515918195248,0.973381578922272,-0.195561647415161,-0.236930131912231,0.892696976661682,-0.383348882198334,-0.146542638540268,0.971786975860596,-0.184811681509018,
-0.119515918195248,0.973381578922272,-0.195561647415161,-0.126603722572327,0.965875625610352,-0.225955545902252,-0.236930131912231,0.892696976661682,-0.383348882198334,-0.126603722572327,0.965875625610352,-0.225955545902252,-0.14345808327198,0.95239531993866,-0.269003659486771,-0.236930131912231,0.892696976661682,-0.383348882198334,-0.160484656691551,0.930881261825562,-0.328184098005295,-0.244563356041908,0.784623861312866,-0.569696605205536,-0.236930131912231,0.892696976661682,-0.383348882198334,-0.160484656691551,0.930881261825562,-0.328184098005295,-0.141194611787796,0.921681046485901,-0.361342430114746,-0.244563356041908,0.784623861312866,-0.569696605205536,-0.141194611787796,0.921681046485901,-0.361342430114746,-0.140670835971832,0.90780508518219,-0.39509716629982,-0.244563356041908,0.784623861312866,-0.569696605205536,-0.142981961369514,0.884966611862183,-0.443159431219101,-0.183373287320137,0.688037991523743,-0.702123820781708,-0.244563356041908,0.784623861312866,-0.569696605205536,-0.142981961369514,0.884966611862183,-0.443159431219101,-0.102957099676132,0.877816915512085,-0.467800617218018,-0.183373287320137,0.688037991523743,-0.702123820781708,-0.102957099676132,0.877816915512085,-0.467800617218018,-0.0831338614225388,0.869988560676575,-0.48601308465004,-0.183373287320137,0.688037991523743,-0.702123820781708,-0.0644401460886002,0.853932559490204,-0.51637852191925,-0.0654601380228996,0.645274877548218,-0.761140882968903,-0.183373287320137,0.688037991523743,-0.702123820781708,-0.0644401460886002,0.853932559490204,-0.51637852191925,-0.0295741520822048,0.852418601512909,-0.522023022174835,-0.0654601380228996,0.645274877548218,-0.761140882968903,-0.0295741520822048,0.852418601512909,-0.522023022174835,-0.0144781563431025,0.855050027370453,-0.518343389034271,-0.0654601380228996,0.645274877548218,-0.761140882968903,0.0144781563431025,0.855050027370453,-0.518343389034271,0.0454489216208458,0.851578295230865,-0.522253692150116,0.0660759806632996,0.645322263240814,-0.76104748249054,0.0454489216208458,0.851578295230865,-0.522253692150116,
0.061467669904232,0.85676896572113,-0.512024164199829,0.165740862488747,0.687516689300537,-0.707001388072968,0.061467669904232,0.85676896572113,-0.512024164199829,0.083133190870285,0.869988679885864,-0.486013025045395,0.165740862488747,0.687516689300537,-0.707001388072968,0.083133190870285,0.869988679885864,-0.486013025045395,0.132051512598991,0.878993153572083,-0.458185017108917,0.165740862488747,0.687516689300537,-0.707001388072968,0.132051512598991,0.878993153572083,-0.458185017108917,0.139386579394341,0.888887643814087,-0.436406016349792,0.232035249471664,0.783841133117676,-0.575979828834534,0.139386579394341,0.888887643814087,-0.436406016349792,0.140670999884605,0.90780508518219,-0.395097196102142,0.232035249471664,0.783841133117676,-0.575979828834534,0.140670999884605,0.90780508518219,-0.395097196102142,0.160688802599907,0.923837423324585,-0.347424209117889,0.232035249471664,0.783841133117676,-0.575979828834534,0.160688802599907,0.923837423324585,-0.347424209117889,0.161058604717255,0.93451863527298,-0.317387938499451,0.229418396949768,0.892531752586365,-0.388270884752274,0.161058604717255,0.93451863527298,-0.317387938499451,0.143458321690559,0.95239531993866,-0.269003629684448,0.229418396949768,0.892531752586365,-0.388270884752274,0.143458321690559,0.95239531993866,-0.269003629684448,0.128421515226364,0.967925548553467,-0.215935379266739,0.229418396949768,0.892531752586365,-0.388270884752274,0.128421515226364,0.967925548553467,-0.215935379266739,0.116733051836491,0.975803971290588,-0.184878945350647,0.136930271983147,0.971599221229553,-0.192990154027939,0.116733051836491,0.975803971290588,-0.184878945350647,0.0885523110628128,0.987037718296051,-0.133847653865814,0.136930271983147,0.971599221229553,-0.192990154027939,0.0885523110628128,0.987037718296051,-0.133847653865814,0.0527802258729935,0.995475888252258,-0.0790071785449982,0.136930271983147,0.971599221229553,-0.192990154027939,0.0527802258729935,0.995475888252258,-0.0790071785449982,0.0310549195855856,0.998213708400726,-0.0510402284562588,-0.00743714720010757,0.999945521354675,-0.0073259174823761,
0.0310549195855856,0.998213708400726,-0.0510402284562588,6.26311759788223e-007,1,-1.0009920288212e-006,-0.00743714720010757,0.999945521354675,-0.0073259174823761,-0.039473719894886,0.997507810592651,-0.0584813393652439,-0.146542638540268,0.971786975860596,-0.184811681509018,-0.00492393365129828,0.999977886676788,0.00447924993932247,-0.039473719894886,0.997507810592651,-0.0584813393652439,-0.0611930415034294,0.994467377662659,-0.0853814259171486,-0.146542638540268,0.971786975860596,-0.184811681509018,-0.0611930415034294,0.994467377662659,-0.0853814259171486,-0.0885517448186874,0.987037658691406,-0.13384847342968,-0.146542638540268,0.971786975860596,-0.184811681509018,-0.0024407603777945,0.999979734420776,-0.00589303206652403,-0.274730205535889,0.955351591110229,0.108751483261585,-0.211715266108513,0.955354332923889,0.20609438419342,-0.00285471859388053,0.999991893768311,-0.00285473698750138,-0.00285471859388053,0.999991893768311,-0.00285473698750138,-0.211715266108513,0.955354332923889,0.20609438419342,-0.115752041339874,0.955357789993286,0.271832644939423,-0.00254978518933058,0.999996244907379,-0.00105618720408529,-0.00254978518933058,0.999996244907379,-0.00105618720408529,-0.115752041339874,0.955357789993286,0.271832644939423,-0.00236092647537589,0.955359220504761,0.295437455177307,-0.00230691395699978,0.99999737739563,0,-0.00230691395699978,0.99999737739563,0,-0.00236092647537589,0.955359220504761,0.295437455177307,0.11093694716692,0.95535933971405,0.273827761411667,-0.00219144718721509,0.99999725818634,0.000907758774701506,-0.00219144718721509,0.99999725818634,0.000907758774701506,0.11093694716692,0.95535933971405,0.273827761411667,0.206899732351303,0.95535796880722,0.210911631584167,-0.00184407422784716,0.999996662139893,0.00184408889617771,-0.00184407422784716,0.999996662139893,0.00184408889617771,0.206899732351303,0.95535796880722,0.210911631584167,0.271393924951553,0.955353975296021,0.116808734834194,-0.00127343460917473,0.999994456768036,0.00307485298253596,-0.00127343460917473,0.999994456768036,0.00307485298253596,
0.271393924951553,0.955353975296021,0.116808734834194,0.30397617816925,0.952543497085571,0.0161072611808777,0.000187950907275081,0.999997079372406,0.00242988578975201,0.000337140896590427,0.999957382678986,-0.00922508258372545,-0.303326666355133,0.9528848528862,0.00184651091694832,-0.274730205535889,0.955351591110229,0.108751483261585,-0.0024407603777945,0.999979734420776,-0.00589303206652403,-0.274730205535889,0.955351591110229,0.108751483261585,-0.523113965988159,0.826041340827942,0.209780052304268,-0.401780903339386,0.826049149036407,0.395240426063538,-0.211715266108513,0.955354332923889,0.20609438419342,-0.211715266108513,0.955354332923889,0.20609438419342,-0.401780903339386,0.826049149036407,0.395240426063538,-0.218433663249016,0.826054453849792,0.519539177417755,-0.115752041339874,0.955357789993286,0.271832644939423,-0.115752041339874,0.955357789993286,0.271832644939423,-0.218433663249016,0.826054453849792,0.519539177417755,-0.00240747164934874,0.826055705547333,0.563583374023438,-0.00236092647537589,0.955359220504761,0.295437455177307,-0.00236092647537589,0.955359220504761,0.295437455177307,-0.00240747164934874,0.826055705547333,0.563583374023438,0.213593304157257,0.826056003570557,0.52154529094696,0.11093694716692,0.95535933971405,0.273827761411667,0.11093694716692,0.95535933971405,0.273827761411667,0.213593304157257,0.826056003570557,0.52154529094696,0.396367132663727,0.826054215431213,0.400658965110779,0.206899732351303,0.95535796880722,0.210911631584167,0.206899732351303,0.95535796880722,0.210911631584167,0.396367132663727,0.826054215431213,0.400658965110779,0.517705738544464,0.826033294200897,0.222822576761246,0.271393924951553,0.955353975296021,0.116808734834194,0.271393924951553,0.955353975296021,0.116808734834194,0.517705738544464,0.826033294200897,0.222822576761246,0.538829863071442,0.841936945915222,-0.0283651407808065,0.30397617816925,0.952543497085571,0.0161072611808777,-0.303326666355133,0.9528848528862,0.00184651091694832,-0.538600146770477,0.842110395431519,-0.0275673791766167,-0.523113965988159,0.826041340827942,0.209780052304268,
-0.274730205535889,0.955351591110229,0.108751483261585,-0.523113965988159,0.826041340827942,0.209780052304268,-0.72319507598877,0.626968681812286,0.289653420448303,-0.553344786167145,0.626990914344788,0.548354029655457,-0.401780903339386,0.826049149036407,0.395240426063538,-0.401780903339386,0.826049149036407,0.395240426063538,-0.553344786167145,0.626990914344788,0.548354029655457,-0.300109475851059,0.626993238925934,0.718897640705109,-0.218433663249016,0.826054453849792,0.519539177417755,-0.218433663249016,0.826054453849792,0.519539177417755,-0.300109475851059,0.626993238925934,0.718897640705109,-0.0018279068171978,0.626993775367737,0.77902215719223,-0.00240747164934874,0.826055705547333,0.563583374023438,-0.00240747164934874,0.826055705547333,0.563583374023438,-0.0018279068171978,0.626993775367737,0.77902215719223,0.296682685613632,0.626994371414185,0.720317780971527,0.213593304157257,0.826056003570557,0.52154529094696,0.213593304157257,0.826056003570557,0.52154529094696,0.296682685613632,0.626994371414185,0.720317780971527,0.549998641014099,0.626994371414185,0.551706075668335,0.396367132663727,0.826054215431213,0.400658965110779,0.396367132663727,0.826054215431213,0.400658965110779,0.549998641014099,0.626994371414185,0.551706075668335,0.719275891780853,0.626994609832764,0.299199253320694,0.517705738544464,0.826033294200897,0.222822576761246,0.517705738544464,0.826033294200897,0.222822576761246,0.719275891780853,0.626994609832764,0.299199253320694,0.788650214672089,0.613292157649994,0.0436320342123508,0.538829863071442,0.841936945915222,-0.0283651407808065,-0.538600146770477,0.842110395431519,-0.0275673791766167,-0.788780808448792,0.613155782222748,0.0431852638721466,-0.72319507598877,0.626968681812286,0.289653420448303,-0.523113965988159,0.826041340827942,0.209780052304268,-0.72319507598877,0.626968681812286,0.289653420448303,-0.840883135795593,0.41494956612587,0.347465723752975,-0.64326673746109,0.41496878862381,0.643435299396515,-0.553344786167145,0.626990914344788,0.548354029655457,-0.553344786167145,0.626990914344788,0.548354029655457,
-0.64326673746109,0.41496878862381,0.643435299396515,-0.347779333591461,0.414949029684067,0.840753734111786,-0.300109475851059,0.626993238925934,0.718897640705109,-0.300109475851059,0.626993238925934,0.718897640705109,-0.347779333591461,0.414949029684067,0.840753734111786,0.000653257477097213,0.414894253015518,0.909869432449341,-0.0018279068171978,0.626993775367737,0.77902215719223,-0.0018279068171978,0.626993775367737,0.77902215719223,0.000653257477097213,0.414894253015518,0.909869432449341,0.348866671323776,0.414813429117203,0.840370118618011,0.296682685613632,0.626994371414185,0.720317780971527,0.296682685613632,0.626994371414185,0.720317780971527,0.348866671323776,0.414813429117203,0.840370118618011,0.644005000591278,0.414718508720398,0.642857849597931,0.549998641014099,0.626994371414185,0.551706075668335,0.549998641014099,0.626994371414185,0.551706075668335,0.644005000591278,0.414718508720398,0.642857849597931,0.850795567035675,0.414471566677094,0.323048204183578,0.719275891780853,0.626994609832764,0.299199253320694,0.719275891780853,0.626994609832764,0.299199253320694,0.850795567035675,0.414471566677094,0.323048204183578,0.913421988487244,0.403549164533615,-0.0529943630099297,0.788650214672089,0.613292157649994,0.0436320342123508,-0.788780808448792,0.613155782222748,0.0431852638721466,-0.914010167121887,0.405171811580658,-0.0205282382667065,-0.840883135795593,0.41494956612587,0.347465723752975,-0.72319507598877,0.626968681812286,0.289653420448303,-0.840883135795593,0.41494956612587,0.347465723752975,-0.892028987407684,0.182931676506996,0.4133041203022,-0.665085196495056,0.183087393641472,0.723975598812103,-0.64326673746109,0.41496878862381,0.643435299396515,-0.64326673746109,0.41496878862381,0.643435299396515,-0.665085196495056,0.183087393641472,0.723975598812103,-0.336674779653549,0.183243542909622,0.923618912696838,-0.347779333591461,0.414949029684067,0.840753734111786,-0.347779333591461,0.414949029684067,0.840753734111786,-0.336674779653549,0.183243542909622,0.923618912696838,0.042657058686018,0.183376416563988,0.982116878032684,
0.000653257477097213,0.414894253015518,0.909869432449341,0.000653257477097213,0.414894253015518,0.909869432449341,0.042657058686018,0.183376416563988,0.982116878032684,0.414974808692932,0.183467492461205,0.891142904758453,0.348866671323776,0.414813429117203,0.840370118618011,0.348866671323776,0.414813429117203,0.840370118618011,0.414974808692932,0.183467492461205,0.891142904758453,0.72387570142746,0.183502331376076,0.665079712867737,0.644005000591278,0.414718508720398,0.642857849597931,0.644005000591278,0.414718508720398,0.642857849597931,0.72387570142746,0.183502331376076,0.665079712867737,0.908817887306213,0.18362233042717,0.374610275030136,0.850795567035675,0.414471566677094,0.323048204183578,0.850795567035675,0.414471566677094,0.323048204183578,0.908817887306213,0.18362233042717,0.374610275030136,0.982262849807739,0.183393731713295,0.0390708856284618,0.913421988487244,0.403549164533615,-0.0529943630099297,-0.914010167121887,0.405171811580658,-0.0205282382667065,-0.982372999191284,0.182799711823463,0.0390859842300415,-0.892028987407684,0.182931676506996,0.4133041203022,-0.840883135795593,0.41494956612587,0.347465723752975,0.0454489216208458,0.851578295230865,-0.522253692150116,0.165740862488747,0.687516689300537,-0.707001388072968,0.0660759806632996,0.645322263240814,-0.76104748249054,0.132051512598991,0.878993153572083,-0.458185017108917,0.232035249471664,0.783841133117676,-0.575979828834534,0.165740862488747,0.687516689300537,-0.707001388072968,0.160688802599907,0.923837423324585,-0.347424209117889,0.229418396949768,0.892531752586365,-0.388270884752274,0.232035249471664,0.783841133117676,-0.575979828834534,0.128421515226364,0.967925548553467,-0.215935379266739,0.136930271983147,0.971599221229553,-0.192990154027939,0.229418396949768,0.892531752586365,-0.388270884752274,0.0527802258729935,0.995475888252258,-0.0790071785449982,-0.00743714720010757,0.999945521354675,-0.0073259174823761,0.136930271983147,0.971599221229553,-0.192990154027939,-0.0831338614225388,0.869988560676575,-0.48601308465004,-0.0644401460886002,0.853932559490204,-0.51637852191925,
-0.183373287320137,0.688037991523743,-0.702123820781708,-0.140670835971832,0.90780508518219,-0.39509716629982,-0.142981961369514,0.884966611862183,-0.443159431219101,-0.244563356041908,0.784623861312866,-0.569696605205536,-0.14345808327198,0.95239531993866,-0.269003659486771,-0.160484656691551,0.930881261825562,-0.328184098005295,-0.236930131912231,0.892696976661682,-0.383348882198334,-0.0885517448186874,0.987037658691406,-0.13384847342968,-0.119515918195248,0.973381578922272,-0.195561647415161,-0.146542638540268,0.971786975860596,-0.184811681509018,6.26311759788223e-007,1,1.0009920288212e-006,-0.039473719894886,0.997507810592651,-0.0584813393652439,-0.00492393365129828,0.999977886676788,0.00447924993932247,-0.687900722026825,0.652649104595184,-0.31755593419075,-0.38222798705101,0.577488660812378,-0.721393525600433,-0.677437245845795,0.386322140693665,-0.625966489315033,0.330555200576782,0.327323615550995,-0.88520759344101,0.185296460986137,0.309202581644058,-0.932769596576691,0.371506989002228,0.576981961727142,-0.727374970912933,0.684887290000916,0.651613831520081,-0.32608100771904,0.371506989002228,0.576981961727142,-0.727374970912933,0.423068106174469,0.718859016895294,-0.551593244075775,-0.687900722026825,0.652649104595184,-0.31755593419075,-0.429374217987061,0.720117330551147,-0.545040249824524,-0.38222798705101,0.577488660812378,-0.721393525600433,-0.854414582252502,0.380431532859802,-0.353903293609619,-0.677437245845795,0.386322140693665,-0.625966489315033,-0.665136814117432,0.182662442326546,-0.724035620689392,-0.907857716083527,0.182845786213875,-0.37730860710144,-0.677437245845795,0.386322140693665,-0.625966489315033,-0.362735062837601,0.327999919652939,-0.872261106967926,-0.379796206951141,0.182399392127991,-0.906909763813019,-0.665136814117432,0.182662442326546,-0.724035620689392,-0.362735062837601,0.327999919652939,-0.872261106967926,-0.194876074790955,0.308703690767288,-0.930980861186981,-0.199718877673149,0.177381545305252,-0.963663935661316,-0.379796206951141,0.182399392127991,-0.906909763813019,0.185296460986137,0.309202581644058,-0.932769596576691,
0.330555200576782,0.327323615550995,-0.88520759344101,0.420262604951859,0.182631239295006,-0.88883364200592,0.204228669404984,0.177369773387909,-0.962720453739166,0.330555200576782,0.327323615550995,-0.88520759344101,0.635348618030548,0.383629411458969,-0.670194625854492,0.723934292793274,0.183087468147278,-0.665130317211151,0.420262604951859,0.182631239295006,-0.88883364200592,0.635348618030548,0.383629411458969,-0.670194625854492,0.840420544147491,0.379155844449997,-0.387213408946991,0.922936260700226,0.183253362774849,-0.338536709547043,0.723934292793274,0.183087468147278,-0.665130317211151,0.840420544147491,0.379155844449997,-0.387213408946991,0.913421988487244,0.403549164533615,-0.0529943630099297,0.982262849807739,0.183393731713295,0.0390708856284618,0.922936260700226,0.183253362774849,-0.338536709547043,-0.914010167121887,0.405171811580658,-0.0205282382667065,-0.854414582252502,0.380431532859802,-0.353903293609619,-0.907857716083527,0.182845786213875,-0.37730860710144,-0.982372999191284,0.182799711823463,0.0390859842300415,0.684887290000916,0.651613831520081,-0.32608100771904,0.840420544147491,0.379155844449997,-0.387213408946991,0.635348618030548,0.383629411458969,-0.670194625854492,0.371506989002228,0.576981961727142,-0.727374970912933,0.635348618030548,0.383629411458969,-0.670194625854492,0.330555200576782,0.327323615550995,-0.88520759344101,-0.194876074790955,0.308703690767288,-0.930980861186981,-0.38222798705101,0.577488660812378,-0.721393525600433,-0.153820216655731,0.523757815361023,-0.837864637374878,-0.687900722026825,0.652649104595184,-0.31755593419075,-0.677437245845795,0.386322140693665,-0.625966489315033,-0.854414582252502,0.380431532859802,-0.353903293609619,-0.687900722026825,0.652649104595184,-0.31755593419075,-0.854414582252502,0.380431532859802,-0.353903293609619,-0.914010167121887,0.405171811580658,-0.0205282382667065,-0.677437245845795,0.386322140693665,-0.625966489315033,-0.38222798705101,0.577488660812378,-0.721393525600433,-0.362735062837601,0.327999919652939,-0.872261106967926,0.913421988487244,0.403549164533615,-0.0529943630099297,
0.684887290000916,0.651613831520081,-0.32608100771904,0.788650214672089,0.613292157649994,0.0436320342123508,0.371506989002228,0.576981961727142,-0.727374970912933,0.684887290000916,0.651613831520081,-0.32608100771904,0.635348618030548,0.383629411458969,-0.670194625854492,-0.194435983896255,0.30756801366806,0.931448698043823,-0.386598587036133,0.577563107013702,0.719001054763794,-0.152839198708534,0.523837924003601,0.83799409866333,0.37522628903389,0.577071487903595,0.72539222240448,0.184393793344498,0.308082848787308,0.933318734169006,0.134322851896286,0.525096774101257,0.840375483036041,0.371506989002228,0.576981961727142,-0.727374970912933,0.185296460986137,0.309202581644058,-0.932769596576691,0.136142775416374,0.524964094161987,-0.840165495872498,-0.362735062837601,0.327999919652939,-0.872261106967926,-0.38222798705101,0.577488660812378,-0.721393525600433,-0.194876074790955,0.308703690767288,-0.930980861186981,-0.665085196495056,0.183087393641472,0.723975598812103,-0.892028987407684,0.182931676506996,0.4133041203022,-0.830575883388519,0.00191116065252572,0.556902229785919,-0.336674779653549,0.183243542909622,0.923618912696838,-0.665085196495056,0.183087393641472,0.723975598812103,-0.553587973117828,0.00120302115101367,0.832789897918701,0.042657058686018,0.183376416563988,0.982116878032684,-0.336674779653549,0.183243542909622,0.923618912696838,-0.19235135614872,0.000311891577439383,0.981326103210449,0.414974808692932,0.183467492461205,0.891142904758453,0.042657058686018,0.183376416563988,0.982116878032684,0.197806879878044,-0.000625815766397864,0.980240881443024,0.72387570142746,0.183502331376076,0.665079712867737,0.414974808692932,0.183467492461205,0.891142904758453,0.557508051395416,-0.00146746239624918,0.830170333385468,0.908817887306213,0.18362233042717,0.374610275030136,0.72387570142746,0.183502331376076,0.665079712867737,0.832330167293549,-0.00208577886223793,0.554276347160339,0.982262849807739,0.183393731713295,0.0390708856284618,0.908817887306213,0.18362233042717,0.374610275030136,0.980889797210693,-0.00238772621378303,0.194549754261971,
-0.892028987407684,0.182931676506996,0.4133041203022,-0.982372999191284,0.182799711823463,0.0390859842300415,-0.980670928955078,0.00232736184261739,0.195650845766068,-0.907857716083527,0.182845786213875,-0.37730860710144,-0.665136814117432,0.182662442326546,-0.724035620689392,-0.830565094947815,0.00208194111473858,-0.55691784620285,-0.665136814117432,0.182662442326546,-0.724035620689392,-0.379796206951141,0.182399392127991,-0.906909763813019,-0.553554773330688,0.00145836442243308,-0.832811594009399,-0.379796206951141,0.182399392127991,-0.906909763813019,-0.199718877673149,0.177381545305252,-0.963663935661316,-0.203706488013268,0.00063981197308749,-0.979031801223755,0.204228669404984,0.177369773387909,-0.962720453739166,0.420262604951859,0.182631239295006,-0.88883364200592,0.207906931638718,-0.000349771784385666,-0.978148579597473,0.420262604951859,0.182631239295006,-0.88883364200592,0.723934292793274,0.183087468147278,-0.665130317211151,0.55754280090332,-0.00121293298434466,-0.830147385597229,0.723934292793274,0.183087468147278,-0.665130317211151,0.922936260700226,0.183253362774849,-0.338536709547043,0.83234041929245,-0.0019158071372658,-0.55426150560379,0.922936260700226,0.183253362774849,-0.338536709547043,0.982262849807739,0.183393731713295,0.0390708856284618,0.980890333652496,-0.0023280584719032,-0.194547861814499,-0.982372999191284,0.182799711823463,0.0390859842300415,-0.907857716083527,0.182845786213875,-0.37730860710144,-0.980670273303986,0.0023873676545918,-0.195653304457664,-0.665881633758545,0.183553606271744,-0.723125040531158,-0.89221203327179,0.183422282338142,-0.412691086530685,-0.83098167181015,0.000998507020995021,-0.556298971176147,-0.338062316179276,0.18367038667202,-0.923027157783508,-0.665881633758545,0.183553606271744,-0.723125040531158,-0.554487824440002,0.000593331817071885,-0.832191705703735,0.041039664298296,0.183756306767464,-0.982114791870117,-0.338062316179276,0.18367038667202,-0.923027157783508,-0.193589672446251,9.78909301920794e-005,-0.981082677841187,0.413609892129898,0.18379670381546,-0.891709446907043,
0.041039664298296,0.183756306767464,-0.982114791870117,0.196580201387405,-0.000412170949857682,-0.980487644672394,0.723079919815063,0.183787003159523,-0.665866196155548,0.413609892129898,0.18379670381546,-0.891709446907043,0.556641101837158,-0.000859267020132393,-0.830752730369568,0.908484756946564,0.183872982859612,-0.375295042991638,0.723079919815063,0.183787003159523,-0.665866196155548,0.831947505474091,-0.00117558205965906,-0.554853200912476,0.982218205928802,0.18363219499588,-0.0390720628201962,0.908484756946564,0.183872982859612,-0.375295042991638,0.980842590332031,-0.00131329603027552,-0.194798082113266,-0.89221203327179,0.183422282338142,-0.412691086530685,-0.982280671596527,0.183295950293541,-0.0390802174806595,-0.980723142623901,0.00125140103045851,-0.195398911833763,-0.907976388931274,0.183331519365311,0.376786977052689,-0.665934026241302,0.183123126626015,0.723185837268829,-0.830975711345673,0.00117454153951257,0.55630749464035,-0.665934026241302,0.183123126626015,0.723185837268829,-0.381559401750565,0.182835951447487,0.90608137845993,-0.5544673204422,0.000856654602102935,0.83220511674881,-0.381559401750565,0.182835951447487,0.90608137845993,-0.201113969087601,0.177689477801323,0.963317036628723,-0.205046787858009,0.000422966579208151,0.978752136230469,0.203014105558395,0.177706599235535,0.962915182113647,0.418961435556412,0.182958588004112,0.889380395412445,0.206765487790108,-0.0001155445643235,0.978390514850616,0.418961435556412,0.182958588004112,0.889380395412445,0.723138451576233,0.183364510536194,0.665919125080109,0.556659579277039,-0.000596401048824191,0.830740571022034,0.723138451576233,0.183364510536194,0.665919125080109,0.92268431186676,0.183501794934273,0.339088410139084,0.831953406333923,-0.00100000773090869,0.554844677448273,0.92268431186676,0.183501794934273,0.339088410139084,0.982218205928802,0.18363219499588,-0.0390720628201962,0.980843007564545,-0.00125165306963027,0.194796353578568,-0.982280671596527,0.183295950293541,-0.0390802174806595,-0.907976388931274,0.183331519365311,0.376786977052689,
-0.980722784996033,0.0013132345629856,0.195399910211563,0.405113220214844,0.864263892173767,-0.298213392496109,0.684887290000916,0.651613831520081,-0.32608100771904,0.423068106174469,0.718859016895294,-0.551593244075775,-0.687900722026825,0.652649104595184,-0.31755593419075,-0.538600146770477,0.842110395431519,-0.0275673791766167,-0.413835555315018,0.866088271141052,-0.280413091182709,-0.687900722026825,0.652649104595184,-0.31755593419075,-0.788780808448792,0.613155782222748,0.0431852638721466,-0.538600146770477,0.842110395431519,-0.0275673791766167,0.538829863071442,0.841936945915222,-0.0283651407808065,0.684887290000916,0.651613831520081,-0.32608100771904,0.405113220214844,0.864263892173767,-0.298213392496109,-0.690481603145599,0.652971923351288,0.311227947473526,-0.418077945709229,0.866551637649536,0.272578746080399,-0.436534821987152,0.720601975917816,0.538674414157867,-0.690481603145599,0.652971923351288,0.311227947473526,-0.788570821285248,0.613189399242401,-0.0464206822216511,-0.538756966590881,0.842166483402252,0.0222883857786655,0.538956105709076,0.84198522567749,0.0242342874407768,0.788516461849213,0.613313794136047,-0.0456949062645435,0.687305569648743,0.651948213577271,0.320272892713547,0.538956105709076,0.84198522567749,0.0242342874407768,0.687305569648743,0.651948213577271,0.320272892713547,0.409387439489365,0.864872813224792,0.290511399507523
}
BinormalsW: *964 {
a: 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
}
}
LayerElementTangent: 0 {
Version: 102
Name: "map1"
MappingInformationType: "ByPolygonVertex"
ReferenceInformationType: "Direct"
Tangents: *2892 {
a: -0.0282621681690216,0.00837395433336496,-0.999565541744232,-0.0275745261460543,-0.0167960915714502,-0.99947863817215,-0.3661989569664,-0.00245080282911658,-0.930533468723297,-0.473673552274704,0.0480867736041546,-0.879386723041534,-0.374868869781494,0.0449530780315399,-0.925987362861633,-0.0282621681690216,0.00837395433336496,-0.999565541744232,-0.473673552274704,0.0480867736041546,-0.879386723041534,0.0660418570041656,0.00939577352255583,-0.997772634029388,-0.374868869781494,0.0449530780315399,-0.925987362861633,-0.0092355152592063,0.0274389740079641,-0.999580800533295,-0.38166555762291,-0.0510107167065144,0.922891795635223,-0.0394939891993999,-0.0408968888223171,0.998382449150085,-0.413729399442673,-0.0134215196594596,0.910300850868225,-0.482279151678085,-0.0651531293988228,0.873591184616089,-0.38166555762291,-0.0510107167065144,0.922891795635223,-0.748864352703094,-0.053324569016695,0.660574376583099,-0.0234815906733274,0.0296245627105236,0.999285221099854,-0.0294309239834547,-0.00992964673787355,0.999517500400543,-0.482279151678085,-0.0651531293988228,0.873591184616089,-0.370759844779968,-0.0134662110358477,0.928631246089935,-0.0219474602490664,0.00923025980591774,0.999716520309448,-0.0234815906733274,0.0296245627105236,0.999285221099854,-0.370759844779968,-0.0134662110358477,0.928631246089935,-0.351179897785187,-0.00289323786273599,0.936303496360779,-0.0275745261460543,-0.0167960915714502,-0.99947863817215,-0.0219492372125387,0.00243342551402748,-0.999756038188934,-0.351161330938339,-0.0119364568963647,-0.936238884925842,-0.3661989569664,-0.00245080282911658,-0.930533468723297,-0.757287383079529,0.0739360004663467,-0.648883044719696,-0.473673552274704,0.0480867736041546,-0.879386723041534,-0.3661989569664,-0.00245080282911658,-0.930533468723297,-0.684957802295685,0.0316951125860214,-0.727893054485321,-0.862440168857574,0.0902659669518471,-0.498045146465302,-0.744325757026672,0.0470677204430103,-0.666155993938446,-0.473673552274704,0.0480867736041546,-0.879386723041534,-0.757287383079529,0.0739360004663467,-0.648883044719696,
-0.955138146877289,0.0426447279751301,-0.293074399232864,-0.876113057136536,0.0134953232482076,-0.481916457414627,-0.744325757026672,0.0470677204430103,-0.666155993938446,-0.862440168857574,0.0902659669518471,-0.498045146465302,-0.997846305370331,-0.0429750829935074,-0.0495553649961948,-0.98825079202652,-0.0804334431886673,-0.129964381456375,-0.876113057136536,0.0134953232482076,-0.481916457414627,-0.955138146877289,0.0426447279751301,-0.293074399232864,-0.958067834377289,-0.0563384778797627,0.280948042869568,-0.881439387798309,-0.0200207587331533,0.471872478723526,-0.990937411785126,0.0717573091387749,0.113551631569862,-0.997795164585114,0.042359359562397,0.051091942936182,-0.865329802036285,-0.102012798190117,0.490711331367493,-0.748864352703094,-0.053324569016695,0.660574376583099,-0.881439387798309,-0.0200207587331533,0.471872478723526,-0.958067834377289,-0.0563384778797627,0.280948042869568,-0.758907318115234,-0.0821298584342003,0.645998775959015,-0.482279151678085,-0.0651531293988228,0.873591184616089,-0.748864352703094,-0.053324569016695,0.660574376583099,-0.865329802036285,-0.102012798190117,0.490711331367493,-0.686440765857697,-0.0435233674943447,0.725881993770599,-0.370759844779968,-0.0134662110358477,0.928631246089935,-0.482279151678085,-0.0651531293988228,0.873591184616089,-0.758907318115234,-0.0821298584342003,0.645998775959015,-0.661822974681854,-0.00661670323461294,0.749630928039551,-0.351179897785187,-0.00289323786273599,0.936303496360779,-0.370759844779968,-0.0134662110358477,0.928631246089935,-0.686440765857697,-0.0435233674943447,0.725881993770599,-0.684957802295685,0.0316951125860214,-0.727893054485321,-0.3661989569664,-0.00245080282911658,-0.930533468723297,-0.351161330938339,-0.0119364568963647,-0.936238884925842,-0.661799609661102,-0.010414038784802,-0.749608516693115,-0.870859086513519,-0.0081884516403079,-0.491464227437973,-0.757287383079529,0.0739360004663467,-0.648883044719696,-0.684957802295685,0.0316951125860214,-0.727893054485321,-0.870859086513519,-0.0081884516403079,-0.491464227437973,
-0.879842698574066,-0.00414933497086167,-0.475246846675873,-0.757287383079529,0.0739360004663467,-0.648883044719696,-0.879842698574066,-0.00414933497086167,-0.475246846675873,-0.8963982462883,-0.00985895935446024,-0.443139940500259,-0.757287383079529,0.0739360004663467,-0.648883044719696,-0.909841120243073,-0.0106101483106613,-0.414821028709412,-0.862440168857574,0.0902659669518471,-0.498045146465302,-0.757287383079529,0.0739360004663467,-0.648883044719696,-0.909841120243073,-0.0106101483106613,-0.414821028709412,-0.923895180225372,0.0084479134529829,-0.382552266120911,-0.862440168857574,0.0902659669518471,-0.498045146465302,-0.923895180225372,0.0084479134529829,-0.382552266120911,-0.942000925540924,9.51236288528889e-005,-0.335610330104828,-0.862440168857574,0.0902659669518471,-0.498045146465302,-0.957343757152557,-0.0100682210177183,-0.288775682449341,-0.955138146877289,0.0426447279751301,-0.293074399232864,-0.862440168857574,0.0902659669518471,-0.498045146465302,-0.957343757152557,-0.0100682210177183,-0.288775682449341,-0.970416665077209,0.0146107990294695,-0.240993812680244,-0.955138146877289,0.0426447279751301,-0.293074399232864,-0.970416665077209,0.0146107990294695,-0.240993812680244,-0.983578681945801,0.00676653394475579,-0.180352717638016,-0.955138146877289,0.0426447279751301,-0.293074399232864,-0.993394672870636,-0.00566089013591409,-0.114607527852058,-0.997846305370331,-0.0429750829935074,-0.0495553649961948,-0.955138146877289,0.0426447279751301,-0.293074399232864,-0.993394672870636,-0.00566089013591409,-0.114607527852058,-0.997775316238403,0.00603889301419258,-0.0663917511701584,-0.997846305370331,-0.0429750829935074,-0.0495553649961948,-0.997775316238403,0.00603889301419258,-0.0663917511701584,-0.999895036220551,-0.0123808197677135,-0.00750543503090739,-0.997846305370331,-0.0429750829935074,-0.0495553649961948,-0.999895036220551,0.0123808169737458,0.00750543968752027,-0.996475756168365,0.00175244431011379,0.083863265812397,-0.997795164585114,0.042359359562397,0.051091942936182,-0.996475756168365,0.00175244431011379,0.083863265812397,
-0.992598235607147,-0.00136089965235442,0.1214369982481,-0.958067834377289,-0.0563384778797627,0.280948042869568,-0.992598235607147,-0.00136089965235442,0.1214369982481,-0.983578681945801,-0.0067672492004931,0.180352658033371,-0.958067834377289,-0.0563384778797627,0.280948042869568,-0.983578681945801,-0.0067672492004931,0.180352658033371,-0.964417397975922,0.00712152058258653,0.264288395643234,-0.958067834377289,-0.0563384778797627,0.280948042869568,-0.964417397975922,0.00712152058258653,0.264288395643234,-0.955774068832397,0.00550884520635009,0.294050365686417,-0.865329802036285,-0.102012798190117,0.490711331367493,-0.955774068832397,0.00550884520635009,0.294050365686417,-0.94200074672699,-9.54910428845324e-005,0.335610777139664,-0.865329802036285,-0.102012798190117,0.490711331367493,-0.94200074672699,-9.54910428845324e-005,0.335610777139664,-0.916968524456024,0.00950164441019297,0.398846179246902,-0.865329802036285,-0.102012798190117,0.490711331367493,-0.916968524456024,0.00950164441019297,0.398846179246902,-0.907539248466492,0.0138541078194976,0.419738829135895,-0.758907318115234,-0.0821298584342003,0.645998775959015,-0.907539248466492,0.0138541078194976,0.419738829135895,-0.896397888660431,0.0098593458533287,0.443140417337418,-0.758907318115234,-0.0821298584342003,0.645998775959015,-0.896397888660431,0.0098593458533287,0.443140417337418,-0.875656545162201,0.00845817849040031,0.482859939336777,-0.758907318115234,-0.0821298584342003,0.645998775959015,-0.875656545162201,0.00845817849040031,0.482859939336777,-0.870143055915833,0.0107472632080317,0.492681920528412,-0.686440765857697,-0.0435233674943447,0.725881993770599,-0.870143055915833,0.0107472632080317,0.492681920528412,-0.865496397018433,0.00973362103104591,0.500820398330688,-0.686440765857697,-0.0435233674943447,0.725881993770599,-0.865496397018433,0.00973362103104591,0.500820398330688,-0.852318346500397,0.00368032860569656,0.52301013469696,-0.686440765857697,-0.0435233674943447,0.725881993770599,-0.852318346500397,0.00368032860569656,0.52301013469696,-0.851874053478241,-0.000277755403658375,0.523746490478516,
-0.661822974681854,-0.00661670323461294,0.749630928039551,-0.851874053478241,-0.000277755403658375,0.523746490478516,-0.85513961315155,1.66720823813193e-008,0.518397629261017,-0.661822974681854,-0.00661670323461294,0.749630928039551,-0.850664496421814,-0.00284199137240648,-0.52570116519928,-0.684957802295685,0.0316951125860214,-0.727893054485321,-0.661799609661102,-0.010414038784802,-0.749608516693115,-0.850664496421814,-0.00284199137240648,-0.52570116519928,-0.854582130908966,-0.00800354313105345,-0.519254624843597,-0.684957802295685,0.0316951125860214,-0.727893054485321,-0.854582130908966,-0.00800354313105345,-0.519254624843597,-0.865496695041656,-0.00973355211317539,-0.50081992149353,-0.684957802295685,0.0316951125860214,-0.727893054485321,0.382681488990784,0.00332811567932367,-0.923874199390411,0.382234007120132,0.0015712819295004,-0.924064218997955,0.706490874290466,0.00280094775371253,-0.707716464996338,0.707104325294495,0.00260792463086545,-0.707104325294495,0.707104325294495,0.00260792463086545,-0.707104325294495,0.706490874290466,0.00280094775371253,-0.707716464996338,0.923566401004791,0.00261434051208198,-0.383429288864136,0.923876762390137,0.00237201689742506,-0.382682383060455,0.923876762390137,0.00237201689742506,-0.382682383060455,0.923566401004791,0.00261434051208198,-0.383429288864136,0.99999737739563,0.0022224741987884,-0.000687605759594589,0.999997317790985,0.00230691395699978,5.11294674133966e-013,0.999997317790985,0.00230691395699978,5.11294674133966e-013,0.99999737739563,0.0022224741987884,-0.000687605759594589,0.924177289009094,0.00254269503057003,0.381955116987228,0.92387592792511,0.00275987922213972,0.38268193602562,0.92387592792511,0.00275987922213972,0.38268193602562,0.924177289009094,0.00254269503057003,0.381955116987228,0.708012640476227,0.00417182641103864,0.70618748664856,0.707100927829742,0.00403719395399094,0.707100927829742,0.707100927829742,0.00403719395399094,0.707100927829742,0.708012640476227,0.00417182641103864,0.70618748664856,0.384839415550232,0.00758680049329996,0.92295241355896,
0.382675796747208,0.00637848861515522,0.923860490322113,0.382675796747208,0.00637848861515522,0.923860490322113,0.384839415550232,0.00758680049329996,0.92295241355896,-0.0234815906733274,0.0296245627105236,0.999285221099854,-0.0219474602490664,0.00923025980591774,0.999716520309448,-0.0219492372125387,0.00243342551402748,-0.999756038188934,-0.0275745261460543,-0.0167960915714502,-0.99947863817215,0.382234007120132,0.0015712819295004,-0.924064218997955,0.382681488990784,0.00332811567932367,-0.923874199390411,0.382234007120132,0.0015712819295004,-0.924064218997955,0.380657643079758,0.00320996600203216,-0.92471045255661,0.705317854881287,0.0036928802728653,-0.708881616592407,0.706490874290466,0.00280094775371253,-0.707716464996338,0.706490874290466,0.00280094775371253,-0.707716464996338,0.705317854881287,0.0036928802728653,-0.708881616592407,0.923156142234802,0.00275051454082131,-0.384415417909622,0.923566401004791,0.00261434051208198,-0.383429288864136,0.923566401004791,0.00261434051208198,-0.383429288864136,0.923156142234802,0.00275051454082131,-0.384415417909622,0.999997556209564,0.00183685764204711,-0.00125361664686352,0.99999737739563,0.0022224741987884,-0.000687605759594589,0.99999737739563,0.0022224741987884,-0.000687605759594589,0.999997556209564,0.00183685764204711,-0.00125361664686352,0.92438006401062,0.00192629278171808,0.3814677298069,0.924177289009094,0.00254269503057003,0.381955116987228,0.924177289009094,0.00254269503057003,0.381955116987228,0.92438006401062,0.00192629278171808,0.3814677298069,0.708826959133148,0.00357862864620984,0.705373346805573,0.708012640476227,0.00417182641103864,0.70618748664856,0.708012640476227,0.00417182641103864,0.70618748664856,0.708826959133148,0.00357862864620984,0.705373346805573,0.388460636138916,0.00920236948877573,0.921419322490692,0.384839415550232,0.00758680049329996,0.92295241355896,0.384839415550232,0.00758680049329996,0.92295241355896,0.388460636138916,0.00920236948877573,0.921419322490692,-0.0294309239834547,-0.00992964673787355,0.999517500400543,-0.0234815906733274,0.0296245627105236,0.999285221099854,
-0.0275745261460543,-0.0167960915714502,-0.99947863817215,-0.0282621681690216,0.00837395433336496,-0.999565541744232,0.380657643079758,0.00320996600203216,-0.92471045255661,0.382234007120132,0.0015712819295004,-0.924064218997955,0.380657643079758,0.00320996600203216,-0.92471045255661,0.37694451212883,0.00498983403667808,-0.926222503185272,0.704644381999969,0.00279445992782712,-0.709555149078369,0.705317854881287,0.0036928802728653,-0.708881616592407,0.705317854881287,0.0036928802728653,-0.708881616592407,0.704644381999969,0.00279445992782712,-0.709555149078369,0.923098921775818,0.00163458997849375,-0.384558975696564,0.923156142234802,0.00275051454082131,-0.384415417909622,0.923156142234802,0.00275051454082131,-0.384415417909622,0.923098921775818,0.00163458997849375,-0.384558975696564,0.999998927116394,0.000872359145432711,-0.0010843159398064,0.999997556209564,0.00183685764204711,-0.00125361664686352,0.999997556209564,0.00183685764204711,-0.00125361664686352,0.999998927116394,0.000872359145432711,-0.0010843159398064,0.924244463443756,0.000768603116739541,0.381800144910812,0.92438006401062,0.00192629278171808,0.3814677298069,0.92438006401062,0.00192629278171808,0.3814677298069,0.924244463443756,0.000768603116739541,0.381800144910812,0.708260774612427,0.00131477764807642,0.705949723720551,0.708826959133148,0.00357862864620984,0.705373346805573,0.708826959133148,0.00357862864620984,0.705373346805573,0.708260774612427,0.00131477764807642,0.705949723720551,0.385048717260361,0.00206162966787815,0.922893941402435,0.388460636138916,0.00920236948877573,0.921419322490692,0.388460636138916,0.00920236948877573,0.921419322490692,0.385048717260361,0.00206162966787815,0.922893941402435,0.0654798820614815,-0.00984381418675184,0.997805237770081,-0.0294309239834547,-0.00992964673787355,0.999517500400543,-0.0282621681690216,0.00837395433336496,-0.999565541744232,0.0660418570041656,0.00939577352255583,-0.997772634029388,0.37694451212883,0.00498983403667808,-0.926222503185272,0.380657643079758,0.00320996600203216,-0.92471045255661,0.37694451212883,0.00498983403667808,-0.926222503185272,
0.381848245859146,0.000403334037400782,-0.92422491312027,0.706833302974701,0.000175172375747934,-0.707379996776581,0.704644381999969,0.00279445992782712,-0.709555149078369,0.704644381999969,0.00279445992782712,-0.709555149078369,0.706833302974701,0.000175172375747934,-0.707379996776581,0.92392498254776,-4.67287027277052e-005,-0.38257360458374,0.923098921775818,0.00163458997849375,-0.384558975696564,0.923098921775818,0.00163458997849375,-0.384558975696564,0.92392498254776,-4.67287027277052e-005,-0.38257360458374,0.99999988079071,-0.000130679982248694,0.000318647857056931,0.999998927116394,0.000872359145432711,-0.0010843159398064,0.999998927116394,0.000872359145432711,-0.0010843159398064,0.99999988079071,-0.000130679982248694,0.000318647857056931,0.923754572868347,-0.000129075328004546,0.382984817028046,0.924244463443756,0.000768603116739541,0.381800144910812,0.924244463443756,0.000768603116739541,0.381800144910812,0.923754572868347,-0.000129075328004546,0.382984817028046,0.707008898258209,-4.17007759097032e-005,0.707204639911652,0.708260774612427,0.00131477764807642,0.705949723720551,0.708260774612427,0.00131477764807642,0.705949723720551,0.707008898258209,-4.17007759097032e-005,0.707204639911652,0.360253006219864,-0.010950380936265,0.932790398597717,0.385048717260361,0.00206162966787815,0.922893941402435,0.385048717260361,0.00206162966787815,0.922893941402435,0.360253006219864,-0.010950380936265,0.932790398597717,-0.0394939891993999,-0.0408968888223171,0.998382449150085,0.0654798820614815,-0.00984381418675184,0.997805237770081,0.0660418570041656,0.00939577352255583,-0.997772634029388,-0.0092355152592063,0.0274389740079641,-0.999580800533295,0.381848245859146,0.000403334037400782,-0.92422491312027,0.37694451212883,0.00498983403667808,-0.926222503185272,0.381848245859146,0.000403334037400782,-0.92422491312027,0.418585300445557,-0.00718663912266493,-0.908149063587189,0.734684407711029,-0.00726562226191163,-0.678370237350464,0.706833302974701,0.000175172375747934,-0.707379996776581,0.706833302974701,0.000175172375747934,-0.707379996776581,
0.734684407711029,-0.00726562226191163,-0.678370237350464,0.938504457473755,-0.00732936663553119,-0.345189392566681,0.92392498254776,-4.67287027277052e-005,-0.38257360458374,0.92392498254776,-4.67287027277052e-005,-0.38257360458374,0.938504457473755,-0.00732936663553119,-0.345189392566681,0.999157428741455,-0.00736892223358154,0.0403730794787407,0.99999988079071,-0.000130679982248694,0.000318647857056931,0.99999988079071,-0.000130679982248694,0.000318647857056931,0.999157428741455,-0.00736892223358154,0.0403730794787407,0.907718539237976,-0.00737858936190605,0.419514715671539,0.923754572868347,-0.000129075328004546,0.382984817028046,0.923754572868347,-0.000129075328004546,0.382984817028046,0.907718539237976,-0.00737858936190605,0.419514715671539,0.678398072719574,-0.00735778035596013,0.73465770483017,0.707008898258209,-4.17007759097032e-005,0.707204639911652,0.707008898258209,-4.17007759097032e-005,0.707204639911652,0.678398072719574,-0.00735778035596013,0.73465770483017,0.381832718849182,-0.000161686970386654,0.924231350421906,0.360253006219864,-0.010950380936265,0.932790398597717,0.360253006219864,-0.010950380936265,0.932790398597717,0.381832718849182,-0.000161686970386654,0.924231350421906,0.0384179316461086,0.00711983861401677,0.999236345291138,-0.0394939891993999,-0.0408968888223171,0.998382449150085,-0.0092355152592063,0.0274389740079641,-0.999580800533295,0.0384284369647503,-0.00710790324956179,-0.999236047267914,0.418585300445557,-0.00718663912266493,-0.908149063587189,0.381848245859146,0.000403334037400782,-0.92422491312027,-0.996475756168365,0.00175244431011379,0.083863265812397,-0.958067834377289,-0.0563384778797627,0.280948042869568,-0.997795164585114,0.042359359562397,0.051091942936182,-0.964417397975922,0.00712152058258653,0.264288395643234,-0.865329802036285,-0.102012798190117,0.490711331367493,-0.958067834377289,-0.0563384778797627,0.280948042869568,-0.916968524456024,0.00950164441019297,0.398846179246902,-0.758907318115234,-0.0821298584342003,0.645998775959015,-0.865329802036285,-0.102012798190117,0.490711331367493,
-0.875656545162201,0.00845817849040031,0.482859939336777,-0.686440765857697,-0.0435233674943447,0.725881993770599,-0.758907318115234,-0.0821298584342003,0.645998775959015,-0.852318346500397,0.00368032860569656,0.52301013469696,-0.661822974681854,-0.00661670323461294,0.749630928039551,-0.686440765857697,-0.0435233674943447,0.725881993770599,-0.983578681945801,0.00676653394475579,-0.180352717638016,-0.993394672870636,-0.00566089013591409,-0.114607527852058,-0.955138146877289,0.0426447279751301,-0.293074399232864,-0.942000925540924,9.51236288528889e-005,-0.335610330104828,-0.957343757152557,-0.0100682210177183,-0.288775682449341,-0.862440168857574,0.0902659669518471,-0.498045146465302,-0.8963982462883,-0.00985895935446024,-0.443139940500259,-0.909841120243073,-0.0106101483106613,-0.414821028709412,-0.757287383079529,0.0739360004663467,-0.648883044719696,-0.865496695041656,-0.00973355211317539,-0.50081992149353,-0.870859086513519,-0.0081884516403079,-0.491464227437973,-0.684957802295685,0.0316951125860214,-0.727893054485321,-0.85513961315155,1.66720823813193e-008,-0.518397629261017,-0.850664496421814,-0.00284199137240648,-0.52570116519928,-0.661799609661102,-0.010414038784802,-0.749608516693115,-0.374868869781494,0.0449530780315399,-0.925987362861633,-0.876113057136536,0.0134953232482076,-0.481916457414627,-0.668756425380707,0.0241918787360191,-0.743087828159332,-0.936172366142273,-0.00662188790738583,0.351478934288025,-0.982852339744568,0.0580480173230171,0.175018727779388,-0.881439387798309,-0.0200207587331533,0.471872478723526,-0.38166555762291,-0.0510107167065144,0.922891795635223,-0.881439387798309,-0.0200207587331533,0.471872478723526,-0.748864352703094,-0.053324569016695,0.660574376583099,-0.374868869781494,0.0449530780315399,-0.925987362861633,-0.744325757026672,0.0470677204430103,-0.666155993938446,-0.876113057136536,0.0134953232482076,-0.481916457414627,-0.38282984495163,-0.000403486425057054,-0.92381876707077,-0.668756425380707,0.0241918787360191,-0.743087828159332,-0.734679162502289,0.00733575597405434,-0.678375005722046,
-0.383265525102615,0.000102500183857046,-0.923638224601746,-0.668756425380707,0.0241918787360191,-0.743087828159332,-0.923630595207214,-0.00488327722996473,-0.383252620697021,-0.921392679214478,0.00304058776237071,-0.388620674610138,-0.734679162502289,0.00733575597405434,-0.678375005722046,-0.923630595207214,-0.00488327722996473,-0.383252620697021,-0.980915129184723,-0.060716949403286,-0.184712931513786,-0.97956770658493,-0.0367041863501072,-0.197736367583275,-0.921392679214478,0.00304058776237071,-0.388620674610138,-0.982852339744568,0.0580480173230171,0.175018727779388,-0.936172366142273,-0.00662188790738583,0.351478934288025,-0.904990673065186,0.00440627103671432,0.425408542156219,-0.979175627231598,0.0366211198270321,0.199683889746666,-0.936172366142273,-0.00662188790738583,0.351478934288025,-0.709642350673676,-0.0476938933134079,0.702945947647095,-0.678381681442261,0.00725614931434393,0.734673857688904,-0.904990673065186,0.00440627103671432,0.425408542156219,-0.709642350673676,-0.0476938933134079,0.702945947647095,-0.413729399442673,-0.0134215196594596,0.910300850868225,-0.346196413040161,0.00719054555520415,0.938134491443634,-0.678381681442261,0.00725614931434393,0.734673857688904,-0.413729399442673,-0.0134215196594596,0.910300850868225,-0.0394939891993999,-0.0408968888223171,0.998382449150085,0.0384179316461086,0.00711983861401677,0.999236345291138,-0.346196413040161,0.00719054555520415,0.938134491443634,-0.0092355152592063,0.0274389740079641,-0.999580800533295,-0.38282984495163,-0.000403486425057054,-0.92381876707077,-0.383265525102615,0.000102500183857046,-0.923638224601746,0.0384284369647503,-0.00710790324956179,-0.999236047267914,-0.38166555762291,-0.0510107167065144,0.922891795635223,-0.413729399442673,-0.0134215196594596,0.910300850868225,-0.709642350673676,-0.0476938933134079,0.702945947647095,-0.881439387798309,-0.0200207587331533,0.471872478723526,-0.709642350673676,-0.0476938933134079,0.702945947647095,-0.936172366142273,-0.00662188790738583,0.351478934288025,-0.923630595207214,-0.00488327722996473,-0.383252620697021,
-0.876113057136536,0.0134953232482076,-0.481916457414627,-0.980915129184723,-0.060716949403286,-0.184712931513786,-0.374868869781494,0.0449530780315399,-0.925987362861633,-0.668756425380707,0.0241918787360191,-0.743087828159332,-0.38282984495163,-0.000403486425057054,-0.92381876707077,-0.374868869781494,0.0449530780315399,-0.925987362861633,-0.38282984495163,-0.000403486425057054,-0.92381876707077,-0.0092355152592063,0.0274389740079641,-0.999580800533295,-0.668756425380707,0.0241918787360191,-0.743087828159332,-0.876113057136536,0.0134953232482076,-0.481916457414627,-0.923630595207214,-0.00488327722996473,-0.383252620697021,-0.0394939891993999,-0.0408968888223171,0.998382449150085,-0.38166555762291,-0.0510107167065144,0.922891795635223,0.0654798820614815,-0.00984381418675184,0.997805237770081,-0.881439387798309,-0.0200207587331533,0.471872478723526,-0.38166555762291,-0.0510107167065144,0.922891795635223,-0.709642350673676,-0.0476938933134079,0.702945947647095,-0.0311072655022144,0.0128218196332455,0.999433755874634,-0.0293328315019608,-0.01127421669662,0.999506175518036,-0.368491262197495,0.00576443690806627,0.92961323261261,-0.477384448051453,0.0558155626058578,0.87692004442215,-0.379584103822708,0.0494194626808167,0.923836469650269,-0.477384448051453,0.0558155626058578,0.87692004442215,-0.748479187488556,0.0539784878492355,0.660957634449005,0.0634846463799477,0.0113839320838451,0.997917890548706,-0.379584103822708,0.0494194626808167,0.923836469650269,-0.0100541403517127,0.0279624294489622,0.999558448791504,-0.385988235473633,-0.0551172234117985,-0.920855700969696,-0.0397344008088112,-0.0411678813397884,-0.998361647129059,-0.413442641496658,-0.0133607620373368,-0.910432100296021,-0.0316582098603249,-0.0134095335379243,-0.999408781528473,0.0638496354222298,-0.0111117037013173,-0.997897684574127,-0.385988235473633,-0.0551172234117985,-0.920855700969696,-0.0249972473829985,0.0248763523995876,-0.999377906322479,-0.0316582098603249,-0.0134095335379243,-0.999408781528473,-0.48587504029274,-0.0727869719266891,-0.870992243289948,
-0.372776061296463,-0.020824883133173,-0.927687585353851,-0.351161330938339,-0.0119364568963647,-0.936238884925842,-0.0219492372125387,0.00243342551402748,-0.999756038188934,-0.0249972473829985,0.0248763523995876,-0.999377906322479,-0.372776061296463,-0.020824883133173,-0.927687585353851,-0.0293328315019608,-0.01127421669662,0.999506175518036,-0.0219474602490664,0.00923025980591774,0.999716520309448,-0.351179897785187,-0.00289323786273599,0.936303496360779,-0.368491262197495,0.00576443690806627,0.92961323261261,-0.758078694343567,0.0769018977880478,0.647613108158112,-0.477384448051453,0.0558155626058578,0.87692004442215,-0.368491262197495,0.00576443690806627,0.92961323261261,-0.685452103614807,0.0349476002156734,0.727278590202332,-0.862928211688995,0.0918264016509056,0.496913224458694,-0.748479187488556,0.0539784878492355,0.660957634449005,-0.477384448051453,0.0558155626058578,0.87692004442215,-0.758078694343567,0.0769018977880478,0.647613108158112,-0.955374777317047,0.0435299277305603,0.292171329259872,-0.878028750419617,0.0163732264190912,0.478327691555023,-0.748479187488556,0.0539784878492355,0.660957634449005,-0.862928211688995,0.0918264016509056,0.496913224458694,-0.997854888439178,-0.0428910739719868,0.0494562685489655,-0.988098561763763,-0.080953449010849,0.130796238780022,-0.878028750419617,0.0163732264190912,0.478327691555023,-0.955374777317047,0.0435299277305603,0.292171329259872,-0.95825183391571,-0.0570989325642586,-0.280166268348694,-0.883013427257538,-0.0224533900618553,-0.468810260295868,-0.990689039230347,0.0727216824889183,-0.115095049142838,-0.997814238071442,0.042173158377409,-0.0508723519742489,-0.865770220756531,-0.103495240211487,-0.489623069763184,-0.752794861793518,-0.0599513277411461,-0.655519366264343,-0.883013427257538,-0.0224533900618553,-0.468810260295868,-0.95825183391571,-0.0570989325642586,-0.280166268348694,-0.759694457054138,-0.0851753950119019,-0.644677817821503,-0.48587504029274,-0.0727869719266891,-0.870992243289948,-0.752794861793518,-0.0599513277411461,-0.655519366264343,-0.865770220756531,-0.103495240211487,-0.489623069763184,
-0.686966955661774,-0.0472219176590443,-0.725152790546417,-0.372776061296463,-0.020824883133173,-0.927687585353851,-0.48587504029274,-0.0727869719266891,-0.870992243289948,-0.759694457054138,-0.0851753950119019,-0.644677817821503,-0.661799609661102,-0.010414038784802,-0.749608516693115,-0.351161330938339,-0.0119364568963647,-0.936238884925842,-0.372776061296463,-0.020824883133173,-0.927687585353851,-0.686966955661774,-0.0472219176590443,-0.725152790546417,-0.685452103614807,0.0349476002156734,0.727278590202332,-0.368491262197495,0.00576443690806627,0.92961323261261,-0.351179897785187,-0.00289323786273599,0.936303496360779,-0.661822974681854,-0.00661670323461294,0.749630928039551,-0.870859146118164,-0.00818793755024672,0.491464167833328,-0.758078694343567,0.0769018977880478,0.647613108158112,-0.685452103614807,0.0349476002156734,0.727278590202332,-0.870859146118164,-0.00818793755024672,0.491464167833328,-0.879842817783356,-0.00414833659306169,0.475246608257294,-0.758078694343567,0.0769018977880478,0.647613108158112,-0.879842817783356,-0.00414833659306169,0.475246608257294,-0.896398186683655,-0.00985864643007517,0.44313982129097,-0.758078694343567,0.0769018977880478,0.647613108158112,-0.909841001033783,-0.0106111532077193,0.414821416139603,-0.862928211688995,0.0918264016509056,0.496913224458694,-0.758078694343567,0.0769018977880478,0.647613108158112,-0.909841001033783,-0.0106111532077193,0.414821416139603,-0.923894703388214,0.00844520330429077,0.382553339004517,-0.862928211688995,0.0918264016509056,0.496913224458694,-0.923894703388214,0.00844520330429077,0.382553339004517,-0.942000925540924,9.53813723754138e-005,0.335610210895538,-0.862928211688995,0.0918264016509056,0.496913224458694,-0.957343995571136,-0.0100674862042069,0.288775384426117,-0.955374777317047,0.0435299277305603,0.292171329259872,-0.862928211688995,0.0918264016509056,0.496913224458694,-0.957343995571136,-0.0100674862042069,0.288775384426117,-0.970416665077209,0.0146109508350492,0.240993738174438,-0.955374777317047,0.0435299277305603,0.292171329259872,
-0.970416665077209,0.0146109508350492,0.240993738174438,-0.983578562736511,0.00676502985879779,0.180353552103043,-0.955374777317047,0.0435299277305603,0.292171329259872,-0.993394792079926,-0.00566056277602911,0.114607326686382,-0.997854888439178,-0.0428910739719868,0.0494562685489655,-0.955374777317047,0.0435299277305603,0.292171329259872,-0.993394792079926,-0.00566056277602911,0.114607326686382,-0.997775435447693,0.00604059733450413,0.0663907080888748,-0.997854888439178,-0.0428910739719868,0.0494562685489655,-0.997775435447693,0.00604059733450413,0.0663907080888748,-0.999895036220551,-0.0123808393254876,0.00750544667243958,-0.997854888439178,-0.0428910739719868,0.0494562685489655,-0.999895036220551,0.0123808365315199,-0.00750545132905245,-0.99647581577301,0.00175117491744459,-0.0838624835014343,-0.997814238071442,0.042173158377409,-0.0508723519742489,-0.99647581577301,0.00175117491744459,-0.0838624835014343,-0.992598235607147,-0.00136090733576566,-0.121437005698681,-0.95825183391571,-0.0570989325642586,-0.280166268348694,-0.992598235607147,-0.00136090733576566,-0.121437005698681,-0.983578562736511,-0.00676574558019638,-0.180353492498398,-0.95825183391571,-0.0570989325642586,-0.280166268348694,-0.983578562736511,-0.00676574558019638,-0.180353492498398,-0.964417397975922,0.00712154526263475,-0.264288395643234,-0.95825183391571,-0.0570989325642586,-0.280166268348694,-0.964417397975922,0.00712154526263475,-0.264288395643234,-0.955774068832397,0.00550884520635009,-0.294050365686417,-0.865770220756531,-0.103495240211487,-0.489623069763184,-0.955774068832397,0.00550884520635009,-0.294050365686417,-0.94200074672699,-9.54910428845324e-005,-0.335610777139664,-0.865770220756531,-0.103495240211487,-0.489623069763184,-0.94200074672699,-9.54910428845324e-005,-0.335610777139664,-0.916968703269959,0.00950143113732338,-0.398846179246902,-0.865770220756531,-0.103495240211487,-0.489623069763184,-0.916968703269959,0.00950143113732338,-0.398846179246902,-0.907539188861847,0.0138541469350457,-0.419738829135895,-0.759694457054138,-0.0851753950119019,-0.644677817821503,
-0.907539188861847,0.0138541469350457,-0.419738829135895,-0.896398067474365,0.00985873024910688,-0.44314032793045,-0.759694457054138,-0.0851753950119019,-0.644677817821503,-0.896398067474365,0.00985873024910688,-0.44314032793045,-0.87565666437149,0.00845790468156338,-0.482859909534454,-0.759694457054138,-0.0851753950119019,-0.644677817821503,-0.87565666437149,0.00845790468156338,-0.482859909534454,-0.870142936706543,0.0107479663565755,-0.492682009935379,-0.686966955661774,-0.0472219176590443,-0.725152790546417,-0.870142936706543,0.0107479663565755,-0.492682009935379,-0.865496397018433,0.00973423197865486,-0.500820457935333,-0.686966955661774,-0.0472219176590443,-0.725152790546417,-0.865496397018433,0.00973423197865486,-0.500820457935333,-0.852318346500397,0.00368064735084772,-0.523010194301605,-0.686966955661774,-0.0472219176590443,-0.725152790546417,-0.852318346500397,0.00368064735084772,-0.523010194301605,-0.851874053478241,-0.000277757091680542,-0.523746490478516,-0.661799609661102,-0.010414038784802,-0.749608516693115,-0.851874053478241,-0.000277757091680542,-0.523746490478516,-0.85513961315155,1.66720823813193e-008,-0.518397629261017,-0.661799609661102,-0.010414038784802,-0.749608516693115,-0.850664496421814,-0.00284226750954986,0.52570116519928,-0.685452103614807,0.0349476002156734,0.727278590202332,-0.661822974681854,-0.00661670323461294,0.749630928039551,-0.850664496421814,-0.00284226750954986,0.52570116519928,-0.854582071304321,-0.00800405349582434,0.519254684448242,-0.685452103614807,0.0349476002156734,0.727278590202332,-0.854582071304321,-0.00800405349582434,0.519254684448242,-0.865496814250946,-0.00973344314843416,0.50081992149353,-0.685452103614807,0.0349476002156734,0.727278590202332,0.382675796747208,0.00637848861515522,0.923860490322113,0.381406933069229,0.00445334799587727,0.924396395683289,0.706270515918732,0.00379701470956206,0.707931816577911,0.707100927829742,0.00403719395399094,0.707100927829742,0.707100927829742,0.00403719395399094,0.707100927829742,0.706270515918732,0.00379701470956206,0.707931816577911,
0.923545837402344,0.0027848444879055,0.383477836847305,0.92387592792511,0.00275987922213972,0.38268193602562,0.92387592792511,0.00275987922213972,0.38268193602562,0.923545837402344,0.0027848444879055,0.383477836847305,0.999997198581696,0.00225544790737331,0.000697802461218089,0.999997317790985,0.00230691395699978,5.11294674133966e-013,0.999997317790985,0.00230691395699978,5.11294674133966e-013,0.999997198581696,0.00225544790737331,0.000697802461218089,0.924136936664581,0.00219430145807564,-0.382055044174194,0.923876762390137,0.00237201689742506,-0.382682383060455,0.923876762390137,0.00237201689742506,-0.382682383060455,0.924136936664581,0.00219430145807564,-0.382055044174194,0.707696855068207,0.00271008699201047,-0.7065110206604,0.707104325294495,0.00260792463086545,-0.707104325294495,0.707104325294495,0.00260792463086545,-0.707104325294495,0.707696855068207,0.00271008699201047,-0.7065110206604,0.383788645267487,0.00387790170498192,-0.923412799835205,0.382681488990784,0.00332811567932367,-0.923874199390411,0.382681488990784,0.00332811567932367,-0.923874199390411,0.383788645267487,0.00387790170498192,-0.923412799835205,-0.0249972473829985,0.0248763523995876,-0.999377906322479,-0.0219492372125387,0.00243342551402748,-0.999756038188934,-0.0219474602490664,0.00923025980591774,0.999716520309448,-0.0293328315019608,-0.01127421669662,0.999506175518036,0.381406933069229,0.00445334799587727,0.924396395683289,0.382675796747208,0.00637848861515522,0.923860490322113,0.381406933069229,0.00445334799587727,0.924396395683289,0.379356294870377,0.0052667697891593,0.925235688686371,0.705255925655365,0.00382014783099294,0.708942472934723,0.706270515918732,0.00379701470956206,0.707931816577911,0.706270515918732,0.00379701470956206,0.707931816577911,0.705255925655365,0.00382014783099294,0.708942472934723,0.923231065273285,0.0024675561580807,0.384237438440323,0.923545837402344,0.0027848444879055,0.383477836847305,0.923545837402344,0.0027848444879055,0.383477836847305,0.923231065273285,0.0024675561580807,0.384237438440323,0.999997079372406,0.00198852177709341,0.00135709275491536,
0.999997198581696,0.00225544790737331,0.000697802461218089,0.999997198581696,0.00225544790737331,0.000697802461218089,0.999997079372406,0.00198852177709341,0.00135709275491536,0.924363017082214,0.00186029332689941,-0.381509453058243,0.924136936664581,0.00219430145807564,-0.382055044174194,0.924136936664581,0.00219430145807564,-0.382055044174194,0.924363017082214,0.00186029332689941,-0.381509453058243,0.708313226699829,0.00250664702616632,-0.705893874168396,0.707696855068207,0.00271008699201047,-0.7065110206604,0.707696855068207,0.00271008699201047,-0.7065110206604,0.708313226699829,0.00250664702616632,-0.705893874168396,0.386704325675964,0.00639659212902188,-0.922181487083435,0.383788645267487,0.00387790170498192,-0.923412799835205,0.383788645267487,0.00387790170498192,-0.923412799835205,0.386704325675964,0.00639659212902188,-0.922181487083435,-0.0316582098603249,-0.0134095335379243,-0.999408781528473,-0.0249972473829985,0.0248763523995876,-0.999377906322479,-0.0293328315019608,-0.01127421669662,0.999506175518036,-0.0311072655022144,0.0128218196332455,0.999433755874634,0.379356294870377,0.0052667697891593,0.925235688686371,0.381406933069229,0.00445334799587727,0.924396395683289,0.379356294870377,0.0052667697891593,0.925235688686371,0.376082360744476,0.00573744578287005,0.926568448543549,0.705158293247223,0.00221244269050658,0.709046423435211,0.705255925655365,0.00382014783099294,0.708942472934723,0.705255925655365,0.00382014783099294,0.708942472934723,0.705158293247223,0.00221244269050658,0.709046423435211,0.923234820365906,0.00135077151935548,0.384233564138412,0.923231065273285,0.0024675561580807,0.384237438440323,0.923231065273285,0.0024675561580807,0.384237438440323,0.923234820365906,0.00135077151935548,0.384233564138412,0.999998211860657,0.00114587740972638,0.00142415158916265,0.999997079372406,0.00198852177709341,0.00135709275491536,0.999997079372406,0.00198852177709341,0.00135709275491536,0.999998211860657,0.00114587740972638,0.00142415158916265,0.924341917037964,0.000974365335423499,-0.381563782691956,0.924363017082214,0.00186029332689941,-0.381509453058243,
0.924363017082214,0.00186029332689941,-0.381509453058243,0.924341917037964,0.000974365335423499,-0.381563782691956,0.707771420478821,0.000756698369514197,-0.7064408659935,0.708313226699829,0.00250664702616632,-0.705893874168396,0.708313226699829,0.00250664702616632,-0.705893874168396,0.707771420478821,0.000756698369514197,-0.7064408659935,0.383524864912033,0.00073260796489194,-0.923530101776123,0.386704325675964,0.00639659212902188,-0.922181487083435,0.386704325675964,0.00639659212902188,-0.922181487083435,0.383524864912033,0.00073260796489194,-0.923530101776123,0.0638496354222298,-0.0111117037013173,-0.997897684574127,-0.0316582098603249,-0.0134095335379243,-0.999408781528473,-0.0311072655022144,0.0128218196332455,0.999433755874634,0.0634846463799477,0.0113839320838451,0.997917890548706,0.376082360744476,0.00573744578287005,0.926568448543549,0.379356294870377,0.0052667697891593,0.925235688686371,0.376082360744476,0.00573744578287005,0.926568448543549,0.382030516862869,0.000319850340019912,0.924149572849274,0.707185924053192,-4.17424489569385e-005,0.707027494907379,0.705158293247223,0.00221244269050658,0.709046423435211,0.705158293247223,0.00221244269050658,0.709046423435211,0.707185924053192,-4.17424489569385e-005,0.707027494907379,0.924034237861633,-0.000164232958923094,0.382309526205063,0.923234820365906,0.00135077151935548,0.384233564138412,0.923234820365906,0.00135077151935548,0.384233564138412,0.924034237861633,-0.000164232958923094,0.382309526205063,0.999999642372131,-0.000247757183387876,-0.00060499255778268,0.999998211860657,0.00114587740972638,0.00142415158916265,0.999998211860657,0.00114587740972638,0.00142415158916265,0.999999642372131,-0.000247757183387876,-0.00060499255778268,0.923625648021698,-0.000270310527412221,-0.383295446634293,0.924341917037964,0.000974365335423499,-0.381563782691956,0.924341917037964,0.000974365335423499,-0.381563782691956,0.923625648021698,-0.000270310527412221,-0.383295446634293,0.706576526165009,-0.000311127922032028,-0.707636594772339,0.707771420478821,0.000756698369514197,-0.7064408659935,
0.707771420478821,0.000756698369514197,-0.7064408659935,0.706576526165009,-0.000311127922032028,-0.707636594772339,0.359727174043655,-0.011227909475565,-0.932989776134491,0.383524864912033,0.00073260796489194,-0.923530101776123,0.383524864912033,0.00073260796489194,-0.923530101776123,0.359727174043655,-0.011227909475565,-0.932989776134491,-0.0397344008088112,-0.0411678813397884,-0.998361647129059,0.0638496354222298,-0.0111117037013173,-0.997897684574127,0.0634846463799477,0.0113839320838451,0.997917890548706,-0.0100541403517127,0.0279624294489622,0.999558448791504,0.382030516862869,0.000319850340019912,0.924149572849274,0.376082360744476,0.00573744578287005,0.926568448543549,0.382030516862869,0.000319850340019912,0.924149572849274,0.419166177511215,-0.00722912652418017,0.907880663871765,0.735475838184357,-0.00735874427482486,0.677510917186737,0.707185924053192,-4.17424489569385e-005,0.707027494907379,0.707185924053192,-4.17424489569385e-005,0.707027494907379,0.735475838184357,-0.00735874427482486,0.677510917186737,0.93902450799942,-0.00745550682768226,0.343769550323486,0.924034237861633,-0.000164232958923094,0.382309526205063,0.924034237861633,-0.000164232958923094,0.382309526205063,0.93902450799942,-0.00745550682768226,0.343769550323486,0.99908971786499,-0.00750681897625327,-0.0419926159083843,0.999999642372131,-0.000247757183387876,-0.00060499255778268,0.999999642372131,-0.000247757183387876,-0.00060499255778268,0.99908971786499,-0.00750681897625327,-0.0419926159083843,0.907095432281494,-0.00750483153387904,-0.420858263969421,0.923625648021698,-0.000270310527412221,-0.383295446634293,0.923625648021698,-0.000270310527412221,-0.383295446634293,0.907095432281494,-0.00750483153387904,-0.420858263969421,0.677573144435883,-0.00745209073647857,-0.735417485237122,0.706576526165009,-0.000311127922032028,-0.707636594772339,0.706576526165009,-0.000311127922032028,-0.707636594772339,0.677573144435883,-0.00745209073647857,-0.735417485237122,0.381132572889328,-0.00024649384431541,-0.924520432949066,0.359727174043655,-0.011227909475565,-0.932989776134491,
0.359727174043655,-0.011227909475565,-0.932989776134491,0.381132572889328,-0.00024649384431541,-0.924520432949066,0.0384184792637825,0.0071104564704001,-0.999236464500427,-0.0397344008088112,-0.0411678813397884,-0.998361647129059,-0.0100541403517127,0.0279624294489622,0.999558448791504,0.0384377688169479,-0.00708910170942545,0.999235808849335,0.419166177511215,-0.00722912652418017,0.907880663871765,0.382030516862869,0.000319850340019912,0.924149572849274,-0.99647581577301,0.00175117491744459,-0.0838624835014343,-0.95825183391571,-0.0570989325642586,-0.280166268348694,-0.997814238071442,0.042173158377409,-0.0508723519742489,-0.964417397975922,0.00712154526263475,-0.264288395643234,-0.865770220756531,-0.103495240211487,-0.489623069763184,-0.95825183391571,-0.0570989325642586,-0.280166268348694,-0.916968703269959,0.00950143113732338,-0.398846179246902,-0.759694457054138,-0.0851753950119019,-0.644677817821503,-0.865770220756531,-0.103495240211487,-0.489623069763184,-0.87565666437149,0.00845790468156338,-0.482859909534454,-0.686966955661774,-0.0472219176590443,-0.725152790546417,-0.759694457054138,-0.0851753950119019,-0.644677817821503,-0.852318346500397,0.00368064735084772,-0.523010194301605,-0.661799609661102,-0.010414038784802,-0.749608516693115,-0.686966955661774,-0.0472219176590443,-0.725152790546417,-0.983578562736511,0.00676502985879779,0.180353552103043,-0.993394792079926,-0.00566056277602911,0.114607326686382,-0.955374777317047,0.0435299277305603,0.292171329259872,-0.942000925540924,9.53813723754138e-005,0.335610210895538,-0.957343995571136,-0.0100674862042069,0.288775384426117,-0.862928211688995,0.0918264016509056,0.496913224458694,-0.896398186683655,-0.00985864643007517,0.44313982129097,-0.909841001033783,-0.0106111532077193,0.414821416139603,-0.758078694343567,0.0769018977880478,0.647613108158112,-0.865496814250946,-0.00973344314843416,0.50081992149353,-0.870859146118164,-0.00818793755024672,0.491464167833328,-0.685452103614807,0.0349476002156734,0.727278590202332,-0.85513961315155,1.66720823813193e-008,0.518397629261017,
-0.850664496421814,-0.00284226750954986,0.52570116519928,-0.661822974681854,-0.00661670323461294,0.749630928039551,-0.379584103822708,0.0494194626808167,0.923836469650269,-0.878028750419617,0.0163732264190912,0.478327691555023,-0.670561850070953,0.0254663806408644,0.741416394710541,-0.936009168624878,-0.00646509882062674,-0.351916193962097,-0.982682585716248,0.0585307888686657,-0.175809472799301,-0.883013427257538,-0.0224533900618553,-0.468810260295868,-0.385988235473633,-0.0551172234117985,-0.920855700969696,-0.883013427257538,-0.0224533900618553,-0.468810260295868,-0.752794861793518,-0.0599513277411461,-0.655519366264343,-0.379584103822708,0.0494194626808167,0.923836469650269,-0.748479187488556,0.0539784878492355,0.660957634449005,-0.878028750419617,0.0163732264190912,0.478327691555023,-0.382835000753403,-0.000415517599321902,0.923816561698914,-0.670561850070953,0.0254663806408644,0.741416394710541,-0.735470533370972,0.00742957554757595,0.677515864372253,-0.383753627538681,0.000144893521792255,0.923435568809509,-0.670561850070953,0.0254663806408644,0.741416394710541,-0.923959016799927,-0.00471155066043139,0.382462292909622,-0.922143876552582,0.00326800928451121,0.386833220720291,-0.735470533370972,0.00742957554757595,0.677515864372253,-0.923959016799927,-0.00471155066043139,0.382462292909622,-0.980827867984772,-0.0611074231564999,0.1850476115942,-0.979853093624115,-0.0365506075322628,0.196346208453178,-0.922143876552582,0.00326800928451121,0.386833220720291,-0.982682585716248,0.0585307888686657,-0.175809472799301,-0.936009168624878,-0.00646509882062674,-0.351916193962097,-0.904389202594757,0.00454117124900222,-0.426684528589249,-0.978922963142395,0.0366077683866024,-0.200921297073364,-0.936009168624878,-0.00646509882062674,-0.351916193962097,-0.710790753364563,-0.0487078428268433,-0.701714992523193,-0.677555620670319,0.00735082710161805,-0.735434651374817,-0.904389202594757,0.00454117124900222,-0.426684528589249,-0.710790753364563,-0.0487078428268433,-0.701714992523193,-0.413442641496658,-0.0133607620373368,-0.910432100296021,
-0.345625638961792,0.00723784137517214,-0.938344538211823,-0.677555620670319,0.00735082710161805,-0.735434651374817,-0.413442641496658,-0.0133607620373368,-0.910432100296021,-0.0397344008088112,-0.0411678813397884,-0.998361647129059,0.0384184792637825,0.0071104564704001,-0.999236464500427,-0.345625638961792,0.00723784137517214,-0.938344538211823,-0.0100541403517127,0.0279624294489622,0.999558448791504,-0.382835000753403,-0.000415517599321902,0.923816561698914,-0.383753627538681,0.000144893521792255,0.923435568809509,0.0384377688169479,-0.00708910170942545,0.999235808849335,-0.385988235473633,-0.0551172234117985,-0.920855700969696,-0.413442641496658,-0.0133607620373368,-0.910432100296021,-0.710790753364563,-0.0487078428268433,-0.701714992523193,-0.883013427257538,-0.0224533900618553,-0.468810260295868,-0.710790753364563,-0.0487078428268433,-0.701714992523193,-0.936009168624878,-0.00646509882062674,-0.351916193962097,-0.980827867984772,-0.0611074231564999,0.1850476115942,-0.878028750419617,0.0163732264190912,0.478327691555023,-0.988098561763763,-0.080953449010849,0.130796238780022,-0.379584103822708,0.0494194626808167,0.923836469650269,-0.670561850070953,0.0254663806408644,0.741416394710541,-0.382835000753403,-0.000415517599321902,0.923816561698914,-0.379584103822708,0.0494194626808167,0.923836469650269,-0.382835000753403,-0.000415517599321902,0.923816561698914,-0.0100541403517127,0.0279624294489622,0.999558448791504,-0.670561850070953,0.0254663806408644,0.741416394710541,-0.878028750419617,0.0163732264190912,0.478327691555023,-0.923959016799927,-0.00471155066043139,0.382462292909622,-0.0397344008088112,-0.0411678813397884,-0.998361647129059,-0.385988235473633,-0.0551172234117985,-0.920855700969696,0.0638496354222298,-0.0111117037013173,-0.997897684574127,-0.883013427257538,-0.0224533900618553,-0.468810260295868,-0.385988235473633,-0.0551172234117985,-0.920855700969696,-0.710790753364563,-0.0487078428268433,-0.701714992523193,-0.980915129184723,-0.060716949403286,-0.184712931513786,-0.876113057136536,0.0134953232482076,-0.481916457414627,
-0.98825079202652,-0.0804334431886673,-0.129964381456375,-0.881439387798309,-0.0200207587331533,0.471872478723526,-0.982852339744568,0.0580480173230171,0.175018727779388,-0.990937411785126,0.0717573091387749,0.113551631569862,-0.883013427257538,-0.0224533900618553,-0.468810260295868,-0.982682585716248,0.0585307888686657,-0.175809472799301,-0.990689039230347,0.0727216824889183,-0.115095049142838,-0.923959016799927,-0.00471155066043139,0.382462292909622,-0.878028750419617,0.0163732264190912,0.478327691555023,-0.980827867984772,-0.0611074231564999,0.1850476115942,0.735475838184357,-0.00735874427482486,0.677510917186737,0.419166177511215,-0.00722912652418017,0.907880663871765,0.556900262832642,-0.00146606378257275,0.830577969551086,0.93902450799942,-0.00745550682768226,0.343769550323486,0.735475838184357,-0.00735874427482486,0.677510917186737,0.832787215709686,-0.0020867723505944,0.553589224815369,0.99908971786499,-0.00750681897625327,-0.0419926159083843,0.93902450799942,-0.00745550682768226,0.343769550323486,0.98132312297821,-0.00238843052648008,0.192351520061493,0.907095432281494,-0.00750483153387904,-0.420858263969421,0.99908971786499,-0.00750681897625327,-0.0419926159083843,0.980238020420074,-0.00232599047012627,-0.197807788848877,0.677573144435883,-0.00745209073647857,-0.735417485237122,0.907095432281494,-0.00750483153387904,-0.420858263969421,0.830168068408966,-0.00191008707042784,-0.557509899139404,0.381132572889328,-0.00024649384431541,-0.924520432949066,0.677573144435883,-0.00745209073647857,-0.735417485237122,0.55427497625351,-0.00120474258437753,-0.832332670688629,0.0384184792637825,0.0071104564704001,-0.999236464500427,0.381132572889328,-0.00024649384431541,-0.924520432949066,0.194549530744553,-0.00031724211294204,-0.980892598628998,0.419166177511215,-0.00722912652418017,0.907880663871765,0.0384377688169479,-0.00708910170942545,0.999235808849335,0.195649892091751,-0.000620697042904794,0.980673551559448,-0.383753627538681,0.000144893521792255,0.923435568809509,-0.735470533370972,0.00742957554757595,0.677515864372253,
-0.556916475296021,0.0012113630073145,0.830567598342896,-0.735470533370972,0.00742957554757595,0.677515864372253,-0.922143876552582,0.00326800928451121,0.386833220720291,-0.832809269428253,0.00191704242024571,0.553556561470032,-0.922143876552582,0.00326800928451121,0.386833220720291,-0.979853093624115,-0.0365506075322628,0.196346208453178,-0.979029059410095,0.00232217996381223,0.203707441687584,-0.978922963142395,0.0366077683866024,-0.200921297073364,-0.904389202594757,0.00454117124900222,-0.426684528589249,-0.978145599365234,0.0023831776343286,-0.207907140254974,-0.904389202594757,0.00454117124900222,-0.426684528589249,-0.677555620670319,0.00735082710161805,-0.735434651374817,-0.830144703388214,0.00208102655597031,-0.557544052600861,-0.677555620670319,0.00735082710161805,-0.735434651374817,-0.345625638961792,0.00723784137517214,-0.938344538211823,-0.554259538650513,0.00145998655352741,-0.832342505455017,-0.345625638961792,0.00723784137517214,-0.938344538211823,0.0384184792637825,0.0071104564704001,-0.999236464500427,-0.194546908140183,0.000618079327978194,-0.980892956256866,0.0384377688169479,-0.00708910170942545,0.999235808849335,-0.383753627538681,0.000144893521792255,0.923435568809509,-0.195653066039085,0.000319928483804688,0.98067307472229,0.734684407711029,-0.00726562226191163,-0.678370237350464,0.418585300445557,-0.00718663912266493,-0.908149063587189,0.55629825592041,-0.000858854909893125,-0.830982148647308,0.938504457473755,-0.00732936663553119,-0.345189392566681,0.734684407711029,-0.00726562226191163,-0.678370237350464,0.832190752029419,-0.00117584224790335,-0.554488062858582,0.999157428741455,-0.00736892223358154,0.0403730794787407,0.938504457473755,-0.00732936663553119,-0.345189392566681,0.981081664562225,-0.00131341721862555,-0.193589597940445,0.907718539237976,-0.00737858936190605,0.419514715671539,0.999157428741455,-0.00736892223358154,0.0403730794787407,0.980486869812012,-0.00125090486835688,0.196580559015274,0.678398072719574,-0.00735778035596013,0.73465770483017,0.907718539237976,-0.00737858936190605,0.419514715671539,
0.830752015113831,-0.000998152303509414,0.556641697883606,0.381832718849182,-0.000161686970386654,0.924231350421906,0.678398072719574,-0.00735778035596013,0.73465770483017,0.554852843284607,-0.000593847536947578,0.831948220729828,0.0384179316461086,0.00711983861401677,0.999236345291138,0.381832718849182,-0.000161686970386654,0.924231350421906,0.194798082113266,-9.95088339550421e-005,0.980843305587769,0.418585300445557,-0.00718663912266493,-0.908149063587189,0.0384284369647503,-0.00710790324956179,-0.999236047267914,0.195398524403572,-0.00041066319681704,-0.980723798274994,-0.383265525102615,0.000102500183857046,-0.923638224601746,-0.734679162502289,0.00733575597405434,-0.678375005722046,-0.556307196617126,0.000595902907662094,-0.830976486206055,-0.734679162502289,0.00733575597405434,-0.678375005722046,-0.921392679214478,0.00304058776237071,-0.388620674610138,-0.832204401493073,0.00100039527751505,-0.554467916488647,-0.921392679214478,0.00304058776237071,-0.388620674610138,-0.97956770658493,-0.0367041863501072,-0.197736367583275,-0.978751242160797,0.00124729657545686,-0.205047130584717,-0.979175627231598,0.0366211198270321,0.199683889746666,-0.904990673065186,0.00440627103671432,0.425408542156219,-0.978389620780945,0.00131198135204613,0.206765443086624,-0.904990673065186,0.00440627103671432,0.425408542156219,-0.678381681442261,0.00725614931434393,0.734673857688904,-0.830739617347717,0.00117428845260292,0.556659817695618,-0.678381681442261,0.00725614931434393,0.734673857688904,-0.346196413040161,0.00719054555520415,0.938134491443634,-0.554843962192535,0.000857107166666538,0.831953883171082,-0.346196413040161,0.00719054555520415,0.938134491443634,0.0384179316461086,0.00711983861401677,0.999236345291138,-0.194795921444893,0.000409894186304882,0.980843544006348,0.0384284369647503,-0.00710790324956179,-0.999236047267914,-0.383265525102615,0.000102500183857046,-0.923638224601746,-0.195399940013886,0.000100314711744431,-0.98072361946106,-0.48587504029274,-0.0727869719266891,-0.870992243289948,-0.385988235473633,-0.0551172234117985,-0.920855700969696,
-0.752794861793518,-0.0599513277411461,-0.655519366264343,-0.379584103822708,0.0494194626808167,0.923836469650269,-0.0311072655022144,0.0128218196332455,0.999433755874634,-0.477384448051453,0.0558155626058578,0.87692004442215,-0.379584103822708,0.0494194626808167,0.923836469650269,0.0634846463799477,0.0113839320838451,0.997917890548706,-0.0311072655022144,0.0128218196332455,0.999433755874634,-0.0316582098603249,-0.0134095335379243,-0.999408781528473,-0.385988235473633,-0.0551172234117985,-0.920855700969696,-0.48587504029274,-0.0727869719266891,-0.870992243289948,-0.374868869781494,0.0449530780315399,-0.925987362861633,-0.473673552274704,0.0480867736041546,-0.879386723041534,-0.744325757026672,0.0470677204430103,-0.666155993938446,-0.374868869781494,0.0449530780315399,-0.925987362861633,0.0660418570041656,0.00939577352255583,-0.997772634029388,-0.0282621681690216,0.00837395433336496,-0.999565541744232,-0.0294309239834547,-0.00992964673787355,0.999517500400543,0.0654798820614815,-0.00984381418675184,0.997805237770081,-0.38166555762291,-0.0510107167065144,0.922891795635223,-0.0294309239834547,-0.00992964673787355,0.999517500400543,-0.38166555762291,-0.0510107167065144,0.922891795635223,-0.482279151678085,-0.0651531293988228,0.873591184616089
}
TangentsW: *964 {
a: 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
}
}
LayerElementUV: 0 {
Version: 101
Name: "map1"
MappingInformationType: "ByPolygonVertex"
ReferenceInformationType: "IndexToDirect"
UV: *546 {
a: 0.246862500905991,0.405168116092682,0.245666161179543,0.305720716714859,0.185279190540314,0.2176294028759,0.247233480215073,0.204372689127922,0.814237952232361,0.215648278594017,0.757461309432983,0.0895968377590179,0.818677365779877,0.0895968377590179,0.751900196075439,0.201928868889809,0.75291919708252,0.301522672176361,0.75226229429245,0.401504367589951,0.752406537532806,0.499854624271393,0.246564731001854,0.503544986248016,0.100386947393417,0.372796773910522,0.156045272946358,0.332126766443253,0.179488107562065,0.415474981069565,0.112771183252335,0.434714674949646,0.0779809877276421,0.319878995418549,0.12283580750227,0.261149853467941,0.998008012771606,0.269273430109024,0.998008012771606,0.187375798821449,0.954844295978546,0.28284165263176,0.914989709854126,0.182913914322853,0.921235740184784,0.319878995418549,0.876975655555725,0.259808570146561,0.898829817771912,0.372796803712845,0.844234824180603,0.330335706472397,0.886445581912994,0.434714704751968,0.819235503673553,0.410158097743988,0.88251781463623,0.500593185424805,0.816401362419128,0.498267382383347,0.182436853647232,0.503845632076263,0.116698861122131,0.500593185424805,0.0720588564872742,0.440498352050781,0.0688493922352791,0.426491647958755,0.0649208724498749,0.413174659013748,0.0602779984474182,0.400694757699966,0.0549340471625328,0.389201909303665,0.0489137098193169,0.378846228122711,0.0422575324773788,0.369774878025055,0.0350245535373688,0.362127542495728,0.0272947028279305,0.356031000614166,0.0107660312205553,0.348895251750946,0.998008012771606,0.347990155220032,0.988450646400452,0.348895251750946,0.98004823923111,0.351592779159546,0.971922039985657,0.356031000614166,0.964192092418671,0.362127542495728,0.956959128379822,0.369774878025055,0.950303018093109,0.378846228122711,0.944282710552216,0.389201939105988,0.938938677310944,0.400694787502289,0.934295833110809,0.413174659013748,0.930367290973663,0.426491677761078,0.927157819271088,0.440498381853104,0.924666821956635,0.455050706863403,0.922891438007355,0.470008313655853,0.921827971935272,
0.485234051942825,0.921473741531372,0.500593185424805,0.077388770878315,0.485233992338181,0.0763253942131996,0.470008283853531,0.0745499283075333,0.455050677061081,0.309226185083389,0.503018498420715,0.309589117765427,0.404941827058792,0.372756332159042,0.404651671648026,0.372370809316635,0.502663016319275,0.436086624860764,0.404324680566788,0.435757726430893,0.502367854118347,0.49951434135437,0.404055833816528,0.499258249998093,0.502103507518768,0.562953948974609,0.40379735827446,0.562784731388092,0.501820206642151,0.62630820274353,0.403429180383682,0.626243829727173,0.501433551311493,0.689473986625671,0.402740150690079,0.689507782459259,0.500807046890259,0.309372156858444,0.305912047624588,0.372663825750351,0.305455386638641,0.436097830533981,0.30505296587944,0.499641478061676,0.304794698953629,0.563166201114655,0.304591327905655,0.626553952693939,0.304301828145981,0.689782977104187,0.303622275590897,0.308871299028397,0.203175321221352,0.371825605630875,0.20262037217617,0.435542792081833,0.202254146337509,0.499523669481277,0.202091455459595,0.563413619995117,0.201997607946396,0.626919269561768,0.201908022165298,0.689823746681213,0.201755687594414,0.564293265342712,0.0895968377590179,0.629033625125885,0.0895968377590179,0.693618655204773,0.0895968377590179,0.851947784423828,0.00451681017875671,0.0777429044246674,0.500593185424805,0.118583589792252,0.0895968377590179,0.940706431865692,0.0895968377590179,0.998008012771606,0.0895968377590179,0.179014056921005,0.0895968377590179,0.879634201526642,0.0895968377590179,0.752920567989349,0.598189413547516,0.755312085151672,0.697762966156006,0.817910373210907,0.785576939582825,0.755303025245667,0.798992097377777,0.76635754108429,0.913068413734436,0.180462837219238,0.787406921386719,0.233679413795471,0.913068413734436,0.170606046915054,0.913068413734436,0.242763385176659,0.801299035549164,0.243554055690765,0.701750755310059,0.245398506522179,0.601529002189636,0.898829758167267,0.628389656543732,0.844481766223907,0.670109450817108,0.820165157318115,0.586816728115082,0.886445462703705,
0.566471755504608,0.921235740184784,0.681307435035706,0.878978252410889,0.740887224674225,0.954844295978546,0.718344807624817,0.920043289661407,0.817796468734741,0.998008012771606,0.731912970542908,0.998008012771606,0.81693571805954,0.0443723760545254,0.718344807624817,0.0779809877276421,0.681307435035706,0.119523331522942,0.742200255393982,0.100386843085289,0.628389656543732,0.153378069400787,0.671952903270721,0.112771183252335,0.566471695899963,0.179169178009033,0.592336356639862,0.927157819271088,0.560688078403473,0.930367290973663,0.574694752693176,0.934295833110809,0.588011741638184,0.938938677310944,0.600491642951965,0.944282710552216,0.611984550952911,0.950303018093109,0.622340261936188,0.956959128379822,0.631411552429199,0.964192092418671,0.639058887958527,0.971922039985657,0.645155429840088,0.98004823923111,0.649593710899353,0.988450646400452,0.652291178703308,0.998008012771606,0.653196275234222,0.0107661504298449,0.652291178703308,0.0191685110330582,0.649593710899353,0.0272947028279305,0.645155429840088,0.0350246094167233,0.639058887958527,0.0422575324773788,0.631411552429199,0.0489137098193169,0.622340202331543,0.0549340471625328,0.611984491348267,0.0602779984474182,0.600491642951965,0.0649208724498749,0.588011741638184,0.0688493400812149,0.574694752693176,0.0720588564872742,0.560688078403473,0.0745499283075333,0.546135723590851,0.0763252750039101,0.531178116798401,0.0773887112736702,0.515952348709106,0.921827971935272,0.515952348709106,0.92289137840271,0.531178116798401,0.92466676235199,0.546135723590851,0.689927637577057,0.598919570446014,0.626407861709595,0.599420607089996,0.56272155046463,0.59979909658432,0.498964667320251,0.600086331367493,0.435242176055908,0.6003378033638,0.371659010648727,0.600615978240967,0.308337658643723,0.601018905639648,0.690968155860901,0.697933197021484,0.626994490623474,0.698487877845764,0.562903523445129,0.698859572410584,0.49873161315918,0.6991326212883,0.434603095054626,0.699357271194458,0.370644122362137,0.69959568977356,0.306940674781799,0.70002818107605,0.692380487918854,
0.800500392913818,0.628205955028534,0.800987541675568,0.563565969467163,0.801204741001129,0.498712509870529,0.801398694515228,0.43386897444725,0.801555633544922,0.369312763214111,0.801678597927094,0.305497199296951,0.80167818069458,0.698879957199097,0.913068413734436,0.632190883159637,0.913068413734436,0.566124975681305,0.913068413734436,0.975477814674377,0.995483160018921,0.893916785717011,0.913068413734436,0.0502400398254395,0.913068413734436,0.998008012771606,0.913068413734436,0.830248117446899,0.913068413734436,0.950359761714935,0.913068413734436,0.107046462595463,0.913068413734436,0.00199203193187714,0.269273430109024,0.0443723760545254,0.28284165263176,0.0191685110330582,0.351592779159546,0.00199203193187714,0.347990155220032,0.302974760532379,0.0895968377590179,0.367213100194931,0.0895968377590179,0.43304705619812,0.0895968377590179,0.498797863721848,0.0895968377590179,0.0256561040878296,0.00451681017875671,0.00199203193187714,0.0895968377590179,0.239706665277481,0.0895968377590179,0.084710456430912,0.183458924293518,0.0580275654792786,0.0895968377590179,0.00199203193187714,0.814196765422821,0.00199203193187714,0.653196275234222,0.499592065811157,0.913068413734436,0.432785898447037,0.913068413734436,0.365581750869751,0.913068413734436,0.299251794815063,0.913068413734436,0.00199203193187714,0.731912970542908,0.134522944688797,0.995483160018921,0.00199203193187714,0.184496358036995,0.0788782015442848,0.818349003791809,0.00199204683303833,0.913068413734436,0.0785757601261139,0.995483160018921,0.0245111882686615,0.995483160018921,0.924342513084412,0.995483160018921,0.868936896324158,0.995483160018921,0.807586014270782,0.995483160018921,0.734097480773926,0.995483160018921,0.665311574935913,0.995483160018921,0.601731956005096,0.995483160018921,0.534437894821167,0.995483160018921,0.466274917125702,0.995483160018921,0.393513411283493,0.995483160018921,0.324972331523895,0.995483160018921,0.260128200054169,0.995483160018921,0.196170002222061,0.995483160018921,0.914514899253845,0.00451681017875671,0.972527384757996,0.00451681017875671,
0.0867875516414642,0.00451681017875671,0.147060453891754,0.00451681017875671,0.205396860837936,0.00451681017875671,0.266011863946915,0.00451681017875671,0.327497452497482,0.00451681017875671,0.392808854579926,0.00451681017875671,0.463449329137802,0.00451681017875671,0.53246808052063,0.00451681017875671,0.599801003932953,0.00451681017875671,0.665184855461121,0.00451681017875671,0.732031285762787,0.00451681017875671,0.795388102531433,0.00451681017875671,0.775758862495422,0.959068357944489,0.226633101701736,0.959857821464539,0.699610710144043,0.959099411964417,0.631586611270905,0.959186911582947,0.568756282329559,0.959316909313202,0.499999970197678,0.959468722343445,0.432574808597565,0.959618926048279,0.358568549156189,0.959745049476624,0.291638106107712,0.959828674793243,0.837813019752502,0.959099411964417,0.895594716072083,0.959186911582947,0.950081944465637,0.959316909313202,0.998008012771606,0.958942890167236,0.00199204683303833,0.958942890167236,0.0510507822036743,0.959618926048279,0.106736421585083,0.959745049476624,0.1640565097332,0.959828674793243,0.235065460205078,0.0404002070426941,0.764041483402252,0.0399757921695709,0.29464128613472,0.0403836369514465,0.357593536376953,0.0403369963169098,0.432574808597565,0.0402675867080688,0.499999970197678,0.0401861965656281,0.568756282329559,0.0401052534580231,0.631586611270905,0.0400369763374329,0.699610710144043,0.0399914681911469,0.176473617553711,0.0403836369514465,0.117990851402283,0.0403369963169098,0.0559388101100922,0.0402675867080688,0.00199204683303833,0.0407054126262665,0.998008012771606,0.0407054126262665,0.943449020385742,0.0401052534580231,0.882882952690125,0.0400369763374329,0.824520766735077,0.0399914681911469
}
UVIndex: *964 {
a: 1,0,14,13,2,1,13,3,2,197,4,5,6,25,4,23,9,8,25,27,10,9,27,29,0,11,30,14,12,13,14,15,16,17,13,12,188,198,17,16,187,208,198,188,20,21,19,18,22,23,21,20,24,25,23,22,26,27,25,24,28,29,27,26,15,14,30,31,32,12,15,32,33,12,33,34,12,35,16,12,35,36,16,36,37,16,38,188,16,38,39,188,39,40,188,189,187,188,189,41,187,41,190,187,42,43,18,43,44,20,44,45,20,45,46,20,46,47,22,47,48,22,48,49,22,49,50,24,50,51,24,51,52,24,52,53,26,53,54,26,54,55,26,55,56,28,56,57,28,58,15,31,58,59,15,59,60,15,61,62,63,64,64,63,65,66,66,65,67,68,68,67,69,70,70,69,71,72,72,71,73,74,74,73,9,10,11,0,62,61,62,75,76,63,63,76,77,65,65,77,78,67,67,78,79,69,69,79,80,71,71,80,81,73,73,81,8,9,0,1,75,62,75,82,83,76,76,83,84,77,77,84,85,78,78,85,86,79,79,86,87,80,80,87,88,81,81,88,7,8,1,3,82,75,82,191,192,83,83,192,193,84,84,193,194,85,85,194,89,86,86,89,90,87,87,90,91,88,88,91,5,7,3,197,191,82,191,258,259,192,192,259,260,193,193,260,261,194,194,261,262,89,89,262,263,90,90,263,264,91,91,264,257,5,197,256,258,191,43,20,18,46,22,20,49,24,22,52,26,24,55,28,26,40,189,188,37,38,16,34,35,12,60,32,15,93,58,31,2,198,94,95,96,21,4,21,23,2,17,198,97,94,266,265,94,199,267,266,199,196,268,267,96,95,270,269,95,98,271,270,98,6,272,271,6,5,257,272,197,97,265,256,4,6,98,21,98,95,199,198,196,2,94,97,2,97,197,94,198,199,5,4,7,21,4,98,100,99,112,111,101,111,115,102,101,103,104,105,106,108,107,104,109,108,124,126,30,11,109,126,99,10,29,112,110,111,112,113,114,115,111,110,116,117,115,114,118,119,117,116,120,209,200,206,121,122,209,120,123,124,122,121,125,126,124,123,31,30,126,125,113,112,29,28,127,110,113,127,128,110,128,129,110,130,114,110,130,131,114,131,132,114,133,116,114,133,134,116,134,135,116,136,118,116,136,137,118,137,138,118,201,139,206,139,140,120,140,141,120,141,142,120,142,143,121,143,144,121,144,145,121,145,146,123,146,147,123,147,148,123,148,149,125,149,150,125,150,151,125,151,152,31,152,93,31,153,113,28,153,154,113,154,155,113,74,156,157,72,72,157,158,70,70,158,159,68,68,159,160,66,66,160,161,64,64,161,162,61,61,162,109,11,10,99,156,74,156,163,164,
157,157,164,165,158,158,165,166,159,159,166,167,160,160,167,168,161,161,168,169,162,162,169,108,109,99,100,163,156,163,170,171,164,164,171,172,165,165,172,173,166,166,173,174,167,167,174,175,168,168,175,176,169,169,176,107,108,100,102,170,163,170,177,178,171,171,178,179,172,172,179,202,173,173,202,203,174,174,203,204,175,175,204,205,176,176,205,105,107,102,103,177,170,177,241,242,178,178,242,243,179,179,243,244,202,202,244,245,203,203,245,246,204,204,246,247,205,205,247,240,105,103,239,241,177,139,120,206,142,121,120,145,123,121,148,125,123,151,31,125,135,136,116,132,133,114,129,130,110,155,127,113,57,153,28,101,117,181,182,210,209,104,209,122,101,115,117,184,181,249,248,181,185,250,249,185,183,251,250,210,182,253,252,182,186,254,253,186,106,255,254,106,105,240,255,103,184,248,239,104,106,186,209,186,182,183,117,119,101,181,184,101,184,103,181,117,185,105,104,107,209,104,186,196,198,208,21,96,19,209,210,200,185,117,183,242,241,217,243,242,218,244,243,219,245,244,220,246,245,221,247,246,222,240,247,223,241,239,216,248,249,214,249,250,213,250,251,180,252,253,212,253,254,211,254,255,207,255,240,224,239,248,215,259,258,231,260,259,232,261,260,233,262,261,234,263,262,235,264,263,236,257,264,237,258,256,230,265,266,228,266,267,227,267,268,195,269,270,226,270,271,225,271,272,92,272,257,238,256,265,229,124,104,122,101,100,111,101,102,100,108,104,124,2,13,17,2,3,1,8,7,4,8,4,25
}
}
LayerElementSmoothing: 0 {
Version: 102
Name: ""
MappingInformationType: "ByEdge"
ReferenceInformationType: "Direct"
Smoothing: *512 {
a: 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,1,0,1,0,1,1,1,0,1,0,1,1,1,0,1,0,1,0,1,0,1,1,0,1,0,1,0,1,1,0,1,0,1,0,1,1,0,1,0,1,0,1,1,0,1,0,1,0,1,1,0,1,1,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,1,0,1,0,1,1,1,0,1,0,1,1,1,0,1,0,1,0,1,0,1,1,0,1,0,1,0,1,1,0,1,0,1,0,1,1,0,1,0,1,0,1,1,0,1,0,1,0,1,1,0,1,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
}
}
LayerElementMaterial: 0 {
Version: 101
Name: ""
MappingInformationType: "AllSame"
ReferenceInformationType: "IndexToDirect"
Materials: *1 {
a: 0
}
}
Layer: 0 {
Version: 100
LayerElement: {
Type: "LayerElementNormal"
TypedIndex: 0
}
LayerElement: {
Type: "LayerElementBinormal"
TypedIndex: 0
}
LayerElement: {
Type: "LayerElementTangent"
TypedIndex: 0
}
LayerElement: {
Type: "LayerElementMaterial"
TypedIndex: 0
}
LayerElement: {
Type: "LayerElementSmoothing"
TypedIndex: 0
}
LayerElement: {
Type: "LayerElementUV"
TypedIndex: 0
}
}
}
Model: 2704360498576, "Model::Portal", "Null" {
Version: 232
Properties70: {
P: "RotationActive", "bool", "", "",1
P: "InheritType", "enum", "", "",1
P: "ScalingMax", "Vector3D", "Vector", "",0,0,0
P: "DefaultAttributeIndex", "int", "Integer", "",0
}
Shading: Y
Culling: "CullingOff"
}
Model: 2704360538016, "Model::SkySphere", "Mesh" {
Version: 232
Properties70: {
P: "RotationActive", "bool", "", "",1
P: "InheritType", "enum", "", "",1
P: "ScalingMax", "Vector3D", "Vector", "",0,0,0
P: "DefaultAttributeIndex", "int", "Integer", "",0
P: "Lcl Scaling", "Lcl Scaling", "", "A",1.0014532692323,1.0014532692323,1.0014532692323
P: "currentUVSet", "KString", "", "U", "map1"
}
Shading: T
Culling: "CullingOff"
}
Material: 2704461935872, "Material::com_magicleap_iconcreation_InsidePortal_SkySphere_Mat", "" {
Version: 102
ShadingModel: "lambert"
MultiLayer: 0
Properties70: {
P: "AmbientColor", "Color", "", "A",0,0,0
P: "DiffuseColor", "Color", "", "A",0.5,0.5,0.5
P: "DiffuseFactor", "Number", "", "A",0.800000011920929
P: "TransparencyFactor", "Number", "", "A",1
P: "Emissive", "Vector3D", "Vector", "",0,0,0
P: "Ambient", "Vector3D", "Vector", "",0,0,0
P: "Diffuse", "Vector3D", "Vector", "",0.400000005960464,0.400000005960464,0.400000005960464
P: "Opacity", "double", "Number", "",1
}
}
}
; Object connections
;------------------------------------------------------------------
Connections: {
;Model::Portal, Model::RootNode
C: "OO",2704360498576,0
;AnimLayer::BaseLayer, AnimStack::Take 001
C: "OO",2704466337952,2704461746496
;NodeAttribute::, Model::Portal
C: "OO",2704123178976,2704360498576
;Model::SkySphere, Model::Portal
C: "OO",2704360538016,2704360498576
;Geometry::, Model::SkySphere
C: "OO",2704463014528,2704360538016
;Material::com_magicleap_iconcreation_InsidePortal_SkySphere_Mat, Model::SkySphere
C: "OO",2704461935872,2704360538016
}

View file

@ -1,13 +0,0 @@
{
"global" : {},
"materials" :
[
{
"albedo" : "Icon/Portal/InsidePortal_SkySphere.png",
"blendmode" : "opaque",
"name" : "com_magicleap_iconcreation_InsidePortal_SkySphere_Mat",
"shaderName" : "UnlitTextured"
}
]
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.1 KiB

View file

@ -1,57 +0,0 @@
KIND = program
INCS = \
code/inc/ \
code/inc.gen/ \
$(GSTREAMER_DIR)/system/include/glib-2.0 \
$(GSTREAMER_DIR)/system/lib64/glib-2.0/include/ \
$(GSTREAMER_DIR)/system/include/gstreamer-1.0
SRCS = \
code/src/main.cpp \
code/src/Servo2D.cpp
LIBPATHS.debug = \
$(GSTREAMER_DIR)/system/lib64/ \
../../../target/magicleap/aarch64-linux-android/debug
LIBPATHS.release = \
$(GSTREAMER_DIR)/system/lib64/ \
../../../target/magicleap/aarch64-linux-android/release
LDFLAGS.device = \
-L$(MLSDK)/lumin/stl/libc++/lib
DATAS = \
fonts.xml : etc/fonts.xml \
$(GSTREAMER_DIR)/system/lib64/*.so : bin/ \
$(GSTREAMER_DIR)/system/lib64/gstreamer-1.0/*.so : bin/
STLIBS = \
mlservo
SHLIBS = \
glib-2.0 \
gobject-2.0 \
gstreamer-1.0 \
gstapp-1.0 \
gstaudio-1.0 \
gstbase-1.0 \
gstgl-1.0 \
gstplayer-1.0 \
gstsdp-1.0 \
gstvideo-1.0 \
gstwebrtc-1.0 \
c++abi \
log \
z
# https://github.com/servo/servo/issues/23267
CXXFLAGS = \
-Wno-deprecated
USES = \
lumin_runtime \
scenes \
pipeline/cache/AssetManifest \
code/srcs

View file

@ -1,10 +0,0 @@
<?xml version="1.0" encoding="ASCII"?>
<mlproject:mlproject xmlns:mlproject="http://www.magicleap.com/uidesigner/mlproject" generated="true" srcGenVersion="1">
<designFile path="scenes/Servo2D.design"/>
<pipelineDirectory path="pipeline"/>
<preferences key="srcgen.directories.incgen" value="inc.gen"/>
<preferences key="srcgen.directories.src" value="src"/>
<preferences key="srcgen.directories.srcgen" value="src.gen"/>
<preferences key="srcgen.directories.basedir" value="code"/>
<preferences key="srcgen.directories.inc" value="inc"/>
</mlproject:mlproject>

View file

@ -1,74 +0,0 @@
// -- WARNING -- WARNING -- WARNING -- WARNING -- WARNING -- WARNING --
//
// THE CONTENTS OF THIS FILE IS GENERATED BY CODE AND
// ANY MODIFICATIONS WILL BE OVERWRITTEN
//
// -- WARNING -- WARNING -- WARNING -- WARNING -- WARNING -- WARNING --
// %BANNER_BEGIN%
// ---------------------------------------------------------------------
// %COPYRIGHT_BEGIN%
//
// Copyright (c) 2018 Magic Leap, Inc. All Rights Reserved.
// Use of this file is governed by the Creator Agreement, located
// here: https://id.magicleap.com/creator-terms
//
// %COPYRIGHT_END%
// ---------------------------------------------------------------------
// %BANNER_END%
// %SRC_VERSION%: 1
#pragma once
#include <lumin/Prism.h>
#include <lumin/node/Node.h>
#include <SceneDescriptor.h>
#include <SpawnedSceneBase.h>
#include <SpawnedSceneUserData.h>
#include <scenes.h>
class PrismSceneManager {
public:
typedef std::function<SpawnedSceneUserData*(SpawnedSceneBase&)> (*CreateSpawnedSceneUserData);
static void setUserDataCreator(const SceneDescriptor & sceneDescriptor, CreateSpawnedSceneUserData createSpawnedSceneUserData);
public:
PrismSceneManager(lumin::Prism* prism);
enum class SceneState {
Unloaded,
ResourceModelLoaded,
ResourceAndObjectModelLoaded,
};
void setSceneState(const SceneDescriptor & sceneDescriptor, SceneState sceneState);
SceneState getSceneState(const SceneDescriptor & sceneDescriptor, SceneState sceneState) const;
SpawnedSceneBase* spawnScene(const SceneDescriptor & sceneDescriptor);
lumin::Node* spawn(const SceneDescriptor & sceneDescriptor);
private:
typedef SpawnedSceneBase* (*CreateSpawnedScene)(const SceneDescriptor& sceneDescriptor, lumin::Node* root);
static const CreateSpawnedScene createSpawnedScene[scenes::numberOfExternalScenes];
typedef SpawnedSceneHandlers* (*CreateSpawnedSceneHandlers)(SpawnedSceneBase& spawnedScene);
static const CreateSpawnedSceneHandlers createSpawnedSceneHandlers[scenes::numberOfExternalScenes];
static CreateSpawnedSceneUserData createSpawnedSceneUserData[scenes::numberOfExternalScenes];
private:
lumin::Node* createNodeTree(const SceneDescriptor & sceneDescriptor);
private:
lumin::Prism* prism_;
SceneState sceneStates_[scenes::numberOfExternalScenes];
std::string objectModelNames_[scenes::numberOfExternalScenes];
};

View file

@ -1,58 +0,0 @@
// -- WARNING -- WARNING -- WARNING -- WARNING -- WARNING -- WARNING --
//
// THE CONTENTS OF THIS FILE IS GENERATED BY CODE AND
// ANY MODIFICATIONS WILL BE OVERWRITTEN
//
// -- WARNING -- WARNING -- WARNING -- WARNING -- WARNING -- WARNING --
// %BANNER_BEGIN%
// ---------------------------------------------------------------------
// %COPYRIGHT_BEGIN%
//
// Copyright (c) 2018 Magic Leap, Inc. All Rights Reserved.
// Use of this file is governed by the Creator Agreement, located
// here: https://id.magicleap.com/creator-terms
//
// %COPYRIGHT_END%
// ---------------------------------------------------------------------
// %BANNER_END%
// %SRC_VERSION%: 1
#pragma once
#include <string>
#include <map>
// data class
class SceneDescriptor {
public:
typedef std::map<std::string /* externalNodeName */, const std::string& /* externalNodeId */> ExternalNodeReferences;
SceneDescriptor(int index, const char* externalName, const char* id, const char* sceneGraphFilePath, const char* resourceModelFilePath, const ExternalNodeReferences& externalNodeReferences, bool initiallySpawned);
const std::string& getExternalName() const;
const std::string& getId() const;
const std::string& getSceneGraphPath() const;
const std::string& getResourceModelPath() const;
const ExternalNodeReferences & getExternalNodeReferences() const;
bool getInitiallySpawned() const;
private:
friend class PrismSceneManager;
int getIndex() const;
private:
int index_;
std::string externalName_;
std::string id_;
std::string sceneGraphPath_;
std::string resourceModelPath_;
const ExternalNodeReferences& externalNodeReferences_;
bool initiallySpawned_;
};
bool operator<(const SceneDescriptor& a, const SceneDescriptor& b);

View file

@ -1,60 +0,0 @@
// -- WARNING -- WARNING -- WARNING -- WARNING -- WARNING -- WARNING --
//
// THE CONTENTS OF THIS FILE IS GENERATED BY CODE AND
// ANY MODIFICATIONS WILL BE OVERWRITTEN
//
// -- WARNING -- WARNING -- WARNING -- WARNING -- WARNING -- WARNING --
// %BANNER_BEGIN%
// ---------------------------------------------------------------------
// %COPYRIGHT_BEGIN%
//
// Copyright (c) 2018 Magic Leap, Inc. All Rights Reserved.
// Use of this file is governed by the Creator Agreement, located
// here: https://id.magicleap.com/creator-terms
//
// %COPYRIGHT_END%
// ---------------------------------------------------------------------
// %BANNER_END%
// %SRC_VERSION%: 1
#pragma once
#include <SpawnedSceneBase.h>
#include <SpawnedSceneHandlers.h>
#include <lumin/node/QuadNode.h>
#include <lumin/ui/node/UiButton.h>
#include <lumin/ui/node/UiPanel.h>
#include <lumin/ui/node/UiTextEdit.h>
namespace scenes {
namespace Servo2D {
namespace externalNodes {
extern const std::string contentPanel;
extern const std::string content;
extern const std::string backButton;
extern const std::string fwdButton;
extern const std::string urlBar;
}
struct SpawnedScene : public SpawnedSceneBase {
SpawnedScene(const SceneDescriptor& sceneDescriptor, lumin::Node* root);
~SpawnedScene();
lumin::ui::UiPanel* contentPanel;
lumin::QuadNode* content;
lumin::ui::UiButton* backButton;
lumin::ui::UiButton* fwdButton;
lumin::ui::UiTextEdit* urlBar;
};
SpawnedSceneBase* createSpawnedScene(const SceneDescriptor& sceneDescriptor, lumin::Node* root);
SpawnedSceneHandlers* createSpawnedSceneHandlers(SpawnedSceneBase& spawnedScene);
extern const SceneDescriptor descriptor;
}
}

View file

@ -1,43 +0,0 @@
// -- WARNING -- WARNING -- WARNING -- WARNING -- WARNING -- WARNING --
//
// THE CONTENTS OF THIS FILE IS GENERATED BY CODE AND
// ANY MODIFICATIONS WILL BE OVERWRITTEN
//
// -- WARNING -- WARNING -- WARNING -- WARNING -- WARNING -- WARNING --
// %BANNER_BEGIN%
// ---------------------------------------------------------------------
// %COPYRIGHT_BEGIN%
//
// Copyright (c) 2018 Magic Leap, Inc. All Rights Reserved.
// Use of this file is governed by the Creator Agreement, located
// here: https://id.magicleap.com/creator-terms
//
// %COPYRIGHT_END%
// ---------------------------------------------------------------------
// %BANNER_END%
// %SRC_VERSION%: 1
#pragma once
#include <lumin/node/Node.h>
class SceneDescriptor;
class SpawnedSceneHandlers;
struct SpawnedSceneUserData;
struct SpawnedSceneBase {
SpawnedSceneBase(const SceneDescriptor &sd, lumin::Node* rt);
virtual ~SpawnedSceneBase();
SpawnedSceneBase() = delete;
SpawnedSceneBase(const SpawnedSceneBase&) = delete;
SpawnedSceneBase(const SpawnedSceneBase&&) = delete;
const SceneDescriptor& sceneDescriptor;
lumin::Node* root = nullptr;
SpawnedSceneHandlers* handlers = nullptr;
SpawnedSceneUserData* userData = nullptr;
};

View file

@ -1,31 +0,0 @@
// -- WARNING -- WARNING -- WARNING -- WARNING -- WARNING -- WARNING --
//
// THE CONTENTS OF THIS FILE IS GENERATED BY CODE AND
// ANY MODIFICATIONS WILL BE OVERWRITTEN
//
// -- WARNING -- WARNING -- WARNING -- WARNING -- WARNING -- WARNING --
// %BANNER_BEGIN%
// ---------------------------------------------------------------------
// %COPYRIGHT_BEGIN%
//
// Copyright (c) 2018 Magic Leap, Inc. All Rights Reserved.
// Use of this file is governed by the Creator Agreement, located
// here: https://id.magicleap.com/creator-terms
//
// %COPYRIGHT_END%
// ---------------------------------------------------------------------
// %BANNER_END%
// %SRC_VERSION%: 1
#pragma once
struct SpawnedSceneBase;
class SpawnedSceneHandlers {
public:
SpawnedSceneHandlers(SpawnedSceneBase& ssb);
virtual ~SpawnedSceneHandlers();
};

View file

@ -1,27 +0,0 @@
// -- WARNING -- WARNING -- WARNING -- WARNING -- WARNING -- WARNING --
//
// THE CONTENTS OF THIS FILE IS GENERATED BY CODE AND
// ANY MODIFICATIONS WILL BE OVERWRITTEN
//
// -- WARNING -- WARNING -- WARNING -- WARNING -- WARNING -- WARNING --
// %BANNER_BEGIN%
// ---------------------------------------------------------------------
// %COPYRIGHT_BEGIN%
//
// Copyright (c) 2018 Magic Leap, Inc. All Rights Reserved.
// Use of this file is governed by the Creator Agreement, located
// here: https://id.magicleap.com/creator-terms
//
// %COPYRIGHT_END%
// ---------------------------------------------------------------------
// %BANNER_END%
// %SRC_VERSION%: 1
#pragma once
struct SpawnedSceneUserData {
virtual ~SpawnedSceneUserData();
};

View file

@ -1,33 +0,0 @@
// -- WARNING -- WARNING -- WARNING -- WARNING -- WARNING -- WARNING --
//
// THE CONTENTS OF THIS FILE IS GENERATED BY CODE AND
// ANY MODIFICATIONS WILL BE OVERWRITTEN
//
// -- WARNING -- WARNING -- WARNING -- WARNING -- WARNING -- WARNING --
// %BANNER_BEGIN%
// ---------------------------------------------------------------------
// %COPYRIGHT_BEGIN%
//
// Copyright (c) 2018 Magic Leap, Inc. All Rights Reserved.
// Use of this file is governed by the Creator Agreement, located
// here: https://id.magicleap.com/creator-terms
//
// %COPYRIGHT_END%
// ---------------------------------------------------------------------
// %BANNER_END%
// %SRC_VERSION%: 1
#pragma once
#include <SceneDescriptor.h>
#include <map>
namespace scenes {
const int numberOfExternalScenes = 1;
typedef std::map<std::string /* externalName */, const SceneDescriptor& /* sceneDescription */> SceneDescriptorReferences;
extern const SceneDescriptorReferences externalScenes;
}

View file

@ -1,148 +0,0 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
#include <lumin/LandscapeApp.h>
#include <lumin/Prism.h>
#include <lumin/event/ServerEvent.h>
#include <SceneDescriptor.h>
#include <PrismSceneManager.h>
#include <GLES/gl.h>
#include <lumin/event/GestureInputEventData.h>
#include <lumin/event/KeyInputEventData.h>
#include <lumin/event/ControlTouchPadInputEventData.h>
#include <lumin/event/ControlPose6DofInputEventData.h>
#include <lumin/node/LineNode.h>
#include <lumin/node/QuadNode.h>
#include <lumin/resource/PlanarResource.h>
#include <lumin/ui/KeyboardDefines.h>
#include <lumin/ui/node/UiButton.h>
#include <lumin/ui/node/UiPanel.h>
#include <lumin/ui/node/UiTextEdit.h>
typedef struct Opaque ServoInstance;
/**
* Servo2D Landscape Application
*/
class Servo2D : public lumin::LandscapeApp {
public:
/**
* Constructs the Landscape Application.
*/
Servo2D(const char* uri, const char* args);
/**
* Destroys the Landscape Application.
*/
virtual ~Servo2D();
/**
* Disallows the copy constructor.
*/
Servo2D(const Servo2D&) = delete;
/**
* Disallows the move constructor.
*/
Servo2D(Servo2D&&) = delete;
/**
* Disallows the copy assignment operator.
*/
Servo2D& operator=(const Servo2D&) = delete;
/**
* Disallows the move assignment operator.
*/
Servo2D& operator=(Servo2D&&) = delete;
/**
* Update the browser history UI
*/
void updateHistory(bool canGoBack, bool canGoForward);
/**
* Update the browser url bar.
*/
void updateUrl(const char* url);
/**
* Make the keyboard visible
*/
void keyboardVisible(bool visible);
protected:
/**
* Initializes the Landscape Application.
* @return - 0 on success, error code on failure.
*/
int init() override;
/**
* Deinitializes the Landscape Application.
* @return - 0 on success, error code on failure.
*/
int deInit() override;
/**
* Returns the initial size of the Prism
* Used in createPrism().
*/
const glm::vec3 getInitialPrismSize() const;
/**
* Creates the prism, updates the private variable prism_ with the created prism.
*/
void createInitialPrism();
/**
* Initializes and creates the scene of all scenes marked as initially instanced
*/
void spawnInitialScenes();
/**
* Run application login
*/
virtual bool updateLoop(float fDelta) override;
/**
* Handle events from the server
*/
virtual bool eventListener(lumin::ServerEvent* event) override;
bool pose6DofEventListener(lumin::ControlPose6DofInputEventData* event);
void urlBarEventListener();
bool gestureEventListener(lumin::GestureInputEventData* event);
bool keyboardEventListener(const lumin::ui::KeyboardEvent::EventData& event);
/**
* Convert a point in prism coordinates to viewport coordinates
* (ignoring the z value).
*/
glm::vec2 viewportPosition(glm::vec3 prism_pos);
bool pointInsideViewport(glm::vec2 pt);
/**
* Returns the intersection of the laser and the viewport, in viewport coordinates.
* Returns (-1, -1) if the laser does not intersect the viewport.
*/
glm::vec2 laserPosition();
private:
lumin::Prism* prism_ = nullptr; // represents the bounded space where the App renders.
PrismSceneManager* prismSceneManager_ = nullptr;
lumin::PlanarResource* plane_ = nullptr; // the plane we're rendering into
lumin::QuadNode* content_node_ = nullptr; // the node containing the plane
lumin::ui::UiPanel* content_panel_ = nullptr; // the panel containing the node
lumin::ui::UiButton* back_button_ = nullptr; // the back button
lumin::ui::UiButton* fwd_button_ = nullptr; // the forward button
lumin::ui::UiTextEdit* url_bar_ = nullptr; // the URL bar
lumin::LineNode* laser_ = nullptr; // The laser pointer
glm::vec3 controller_position_; // The last recorded position of the controller (in world coords)
glm::quat controller_orientation_; // The last recorded orientation of the controller (in world coords)
bool controller_trigger_down_ = false; // Is the controller trigger currently down?
ServoInstance* servo_ = nullptr; // the servo instance we're embedding
const char* uri_ = nullptr;
const char* args_ = nullptr;
};

View file

@ -1,124 +0,0 @@
// -- WARNING -- WARNING -- WARNING -- WARNING -- WARNING -- WARNING --
//
// THE CONTENTS OF THIS FILE IS GENERATED BY CODE AND
// ANY MODIFICATIONS WILL BE OVERWRITTEN
//
// -- WARNING -- WARNING -- WARNING -- WARNING -- WARNING -- WARNING --
// %BANNER_BEGIN%
// ---------------------------------------------------------------------
// %COPYRIGHT_BEGIN%
//
// Copyright (c) 2018 Magic Leap, Inc. All Rights Reserved.
// Use of this file is governed by the Creator Agreement, located
// here: https://id.magicleap.com/creator-terms
//
// %COPYRIGHT_END%
// ---------------------------------------------------------------------
// %BANNER_END%
// %SRC_VERSION%: 1
#include <PrismSceneManager.h>
#include <ml_logging.h>
PrismSceneManager::CreateSpawnedSceneUserData PrismSceneManager::createSpawnedSceneUserData[scenes::numberOfExternalScenes];
PrismSceneManager::PrismSceneManager(lumin::Prism* prism)
: prism_(prism) {
if (!prism_) {
ML_LOG(Error, "PrismSceneManager nullptr prism");
abort();
}
for (int i = 0; i < sizeof(sceneStates_)/sizeof(sceneStates_[0]); ++i) {
sceneStates_[i] = SceneState::Unloaded;
}
}
void PrismSceneManager::setSceneState(const SceneDescriptor & sceneDescriptor, SceneState newState) {
const int sceneIndex = sceneDescriptor.getIndex();
SceneState& sceneState = sceneStates_[sceneIndex];
std::string& objectModelName = objectModelNames_[sceneIndex];
if (sceneState == SceneState::Unloaded && (newState == SceneState::ResourceModelLoaded || newState == SceneState::ResourceAndObjectModelLoaded)) {
if (!prism_->loadResourceModel(sceneDescriptor.getResourceModelPath())) {
ML_LOG(Error, "PrismSceneManager failed to load resource model");
abort();
}
sceneState = SceneState::ResourceModelLoaded;
}
if (sceneState == SceneState::ResourceModelLoaded && newState == SceneState::ResourceAndObjectModelLoaded) {
std::string& objectModelName = objectModelNames_[sceneIndex];
if (!prism_->loadObjectModel(sceneDescriptor.getSceneGraphPath(), objectModelName)) {
ML_LOG(Error, "PrismSceneManager failed to load object model");
abort();
}
sceneState = SceneState::ResourceAndObjectModelLoaded;
}
if (sceneState == SceneState::ResourceAndObjectModelLoaded && (newState == SceneState::ResourceModelLoaded || newState == SceneState::Unloaded)) {
if (!prism_->unloadObjectModel(objectModelName)) {
ML_LOG(Error, "PrismSceneManager failed to unload object model");
abort();
}
sceneState = SceneState::ResourceModelLoaded;
objectModelName.clear();
}
// Currently there is no effective way to unload the resource model
}
SpawnedSceneBase* PrismSceneManager::spawnScene(const SceneDescriptor & sceneDescriptor) {
lumin::Node* root = createNodeTree(sceneDescriptor);
if (!root) {
return nullptr;
}
const int index = sceneDescriptor.getIndex();
CreateSpawnedScene css = createSpawnedScene[index];
SpawnedSceneBase* const spawnedScene = (*css)(sceneDescriptor, root);
CreateSpawnedSceneHandlers ch = createSpawnedSceneHandlers[index];
SpawnedSceneHandlers* const handlers = (*ch)(*spawnedScene);
spawnedScene->handlers = handlers;
CreateSpawnedSceneUserData cssud = createSpawnedSceneUserData[sceneDescriptor.getIndex()];
if (cssud) {
spawnedScene->userData = (*cssud)(*spawnedScene);
}
return spawnedScene;
}
lumin::Node* PrismSceneManager::spawn(const SceneDescriptor & sceneDescriptor) {
SpawnedSceneBase* spawnedSceneBase = spawnScene(sceneDescriptor);
if (!spawnedSceneBase) {
return nullptr;
}
lumin::Node* root = spawnedSceneBase->root;
return root;
}
lumin::Node* PrismSceneManager::createNodeTree(const SceneDescriptor & sceneDescriptor) {
setSceneState(sceneDescriptor, SceneState::ResourceAndObjectModelLoaded);
const int sceneIndex = sceneDescriptor.getIndex();
std::string& objectModelName = objectModelNames_[sceneIndex];
lumin::Node* root = prism_->createAll(objectModelName);
if (!root) {
ML_LOG(Error, "PrismSceneManager failed to create the scene. Is the scene empty?");
return nullptr;
}
return root;
}
void PrismSceneManager::setUserDataCreator(const SceneDescriptor & sceneDescriptor, CreateSpawnedSceneUserData cssud) {
createSpawnedSceneUserData[sceneDescriptor.getIndex()] = cssud ;
}

View file

@ -1,66 +0,0 @@
// -- WARNING -- WARNING -- WARNING -- WARNING -- WARNING -- WARNING --
//
// THE CONTENTS OF THIS FILE IS GENERATED BY CODE AND
// ANY MODIFICATIONS WILL BE OVERWRITTEN
//
// -- WARNING -- WARNING -- WARNING -- WARNING -- WARNING -- WARNING --
// %BANNER_BEGIN%
// ---------------------------------------------------------------------
// %COPYRIGHT_BEGIN%
//
// Copyright (c) 2018 Magic Leap, Inc. All Rights Reserved.
// Use of this file is governed by the Creator Agreement, located
// here: https://id.magicleap.com/creator-terms
//
// %COPYRIGHT_END%
// ---------------------------------------------------------------------
// %BANNER_END%
// %SRC_VERSION%: 1
#include <SceneDescriptor.h>
SceneDescriptor::SceneDescriptor(int index, const char * externalName, const char * id, const char * sceneGraphPath, const char * resourceModelPath, const ExternalNodeReferences& externalNodeReferences, bool initiallySpawned)
:
index_(index),
externalName_(externalName),
id_(id),
sceneGraphPath_(sceneGraphPath),
resourceModelPath_(resourceModelPath),
externalNodeReferences_(externalNodeReferences),
initiallySpawned_(initiallySpawned) {
}
int SceneDescriptor::getIndex() const {
return index_;
}
const std::string & SceneDescriptor::getExternalName() const {
return externalName_;
}
const std::string & SceneDescriptor::getId() const {
return id_;
}
const std::string & SceneDescriptor::getSceneGraphPath() const {
return sceneGraphPath_;
}
const std::string & SceneDescriptor::getResourceModelPath() const {
return resourceModelPath_;
}
const SceneDescriptor::ExternalNodeReferences & SceneDescriptor::getExternalNodeReferences() const {
return externalNodeReferences_;
}
bool SceneDescriptor::getInitiallySpawned() const {
return initiallySpawned_;
}
bool operator<(const SceneDescriptor& a, const SceneDescriptor& b) {
return a.getExternalName() < b.getExternalName();
}

View file

@ -1,108 +0,0 @@
// -- WARNING -- WARNING -- WARNING -- WARNING -- WARNING -- WARNING --
//
// THE CONTENTS OF THIS FILE IS GENERATED BY CODE AND
// ANY MODIFICATIONS WILL BE OVERWRITTEN
//
// -- WARNING -- WARNING -- WARNING -- WARNING -- WARNING -- WARNING --
// %BANNER_BEGIN%
// ---------------------------------------------------------------------
// %COPYRIGHT_BEGIN%
//
// Copyright (c) 2018 Magic Leap, Inc. All Rights Reserved.
// Use of this file is governed by the Creator Agreement, located
// here: https://id.magicleap.com/creator-terms
//
// %COPYRIGHT_END%
// ---------------------------------------------------------------------
// %BANNER_END%
// %SRC_VERSION%: 1
#include <SceneDescriptor.h>
#include <SpawnedSceneBase.h>
#include <Servo2D/Servo2D.h>
namespace scenes {
namespace Servo2D {
SpawnedScene::SpawnedScene(const SceneDescriptor& sceneDescriptor, lumin::Node* root)
: SpawnedSceneBase(sceneDescriptor, root) {
contentPanel = lumin::ui::UiPanel::CastFrom(root->findChild(externalNodes::contentPanel));
content = lumin::QuadNode::CastFrom(root->findChild(externalNodes::content));
backButton = lumin::ui::UiButton::CastFrom(root->findChild(externalNodes::backButton));
fwdButton = lumin::ui::UiButton::CastFrom(root->findChild(externalNodes::fwdButton));
urlBar = lumin::ui::UiTextEdit::CastFrom(root->findChild(externalNodes::urlBar));
}
SpawnedScene::~SpawnedScene() {
}
SpawnedSceneBase* createSpawnedScene(const SceneDescriptor& sceneDescriptor, lumin::Node* root) {
using namespace externalNodes;
SpawnedScene* spawnedScene = new SpawnedScene(sceneDescriptor, root);
return spawnedScene;
}
class Handlers : public SpawnedSceneHandlers
{
public:
Handlers(SpawnedScene& ss);
private:
struct contentPanelHandlers {
contentPanelHandlers(SpawnedScene& ss);
};
contentPanelHandlers contentPanelHandlers_;
struct contentHandlers {
contentHandlers(SpawnedScene& ss);
};
contentHandlers contentHandlers_;
struct backButtonHandlers {
backButtonHandlers(SpawnedScene& ss);
};
backButtonHandlers backButtonHandlers_;
struct fwdButtonHandlers {
fwdButtonHandlers(SpawnedScene& ss);
};
fwdButtonHandlers fwdButtonHandlers_;
struct urlBarHandlers {
urlBarHandlers(SpawnedScene& ss);
};
urlBarHandlers urlBarHandlers_;
};
Handlers::contentPanelHandlers::contentPanelHandlers(SpawnedScene& ss)
{
}
Handlers::contentHandlers::contentHandlers(SpawnedScene& ss)
{
}
Handlers::backButtonHandlers::backButtonHandlers(SpawnedScene& ss)
{
}
Handlers::fwdButtonHandlers::fwdButtonHandlers(SpawnedScene& ss)
{
}
Handlers::urlBarHandlers::urlBarHandlers(SpawnedScene& ss)
{
}
Handlers::Handlers(SpawnedScene& ss)
: SpawnedSceneHandlers(ss),
contentPanelHandlers_(ss),
contentHandlers_(ss),
backButtonHandlers_(ss),
fwdButtonHandlers_(ss),
urlBarHandlers_(ss)
{
}
SpawnedSceneHandlers* createSpawnedSceneHandlers(SpawnedSceneBase& ssb) {
return new Handlers(static_cast<SpawnedScene&>(ssb));
}
}
}

View file

@ -1,35 +0,0 @@
// -- WARNING -- WARNING -- WARNING -- WARNING -- WARNING -- WARNING --
//
// THE CONTENTS OF THIS FILE IS GENERATED BY CODE AND
// ANY MODIFICATIONS WILL BE OVERWRITTEN
//
// -- WARNING -- WARNING -- WARNING -- WARNING -- WARNING -- WARNING --
// %BANNER_BEGIN%
// ---------------------------------------------------------------------
// %COPYRIGHT_BEGIN%
//
// Copyright (c) 2018 Magic Leap, Inc. All Rights Reserved.
// Use of this file is governed by the Creator Agreement, located
// here: https://id.magicleap.com/creator-terms
//
// %COPYRIGHT_END%
// ---------------------------------------------------------------------
// %BANNER_END%
// %SRC_VERSION%: 1
#include <SpawnedSceneBase.h>
#include <SpawnedSceneHandlers.h>
#include <SpawnedSceneUserData.h>
SpawnedSceneBase::SpawnedSceneBase(const SceneDescriptor &sd, lumin::Node* rt)
: sceneDescriptor(sd),
root(rt) {
}
SpawnedSceneBase::~SpawnedSceneBase() {
delete handlers;
delete userData;
}

View file

@ -1,29 +0,0 @@
// -- WARNING -- WARNING -- WARNING -- WARNING -- WARNING -- WARNING --
//
// THE CONTENTS OF THIS FILE IS GENERATED BY CODE AND
// ANY MODIFICATIONS WILL BE OVERWRITTEN
//
// -- WARNING -- WARNING -- WARNING -- WARNING -- WARNING -- WARNING --
// %BANNER_BEGIN%
// ---------------------------------------------------------------------
// %COPYRIGHT_BEGIN%
//
// Copyright (c) 2018 Magic Leap, Inc. All Rights Reserved.
// Use of this file is governed by the Creator Agreement, located
// here: https://id.magicleap.com/creator-terms
//
// %COPYRIGHT_END%
// ---------------------------------------------------------------------
// %BANNER_END%
// %SRC_VERSION%: 1
#include <SpawnedSceneHandlers.h>
SpawnedSceneHandlers::SpawnedSceneHandlers(SpawnedSceneBase& ssb) {
}
SpawnedSceneHandlers::~SpawnedSceneHandlers() {
}

View file

@ -1,26 +0,0 @@
// -- WARNING -- WARNING -- WARNING -- WARNING -- WARNING -- WARNING --
//
// THE CONTENTS OF THIS FILE IS GENERATED BY CODE AND
// ANY MODIFICATIONS WILL BE OVERWRITTEN
//
// -- WARNING -- WARNING -- WARNING -- WARNING -- WARNING -- WARNING --
// %BANNER_BEGIN%
// ---------------------------------------------------------------------
// %COPYRIGHT_BEGIN%
//
// Copyright (c) 2018 Magic Leap, Inc. All Rights Reserved.
// Use of this file is governed by the Creator Agreement, located
// here: https://id.magicleap.com/creator-terms
//
// %COPYRIGHT_END%
// ---------------------------------------------------------------------
// %BANNER_END%
// %SRC_VERSION%: 1
#include <SpawnedSceneUserData.h>
SpawnedSceneUserData::~SpawnedSceneUserData() {
}

View file

@ -1,74 +0,0 @@
// -- WARNING -- WARNING -- WARNING -- WARNING -- WARNING -- WARNING --
//
// THE CONTENTS OF THIS FILE IS GENERATED BY CODE AND
// ANY MODIFICATIONS WILL BE OVERWRITTEN
//
// -- WARNING -- WARNING -- WARNING -- WARNING -- WARNING -- WARNING --
// %BANNER_BEGIN%
// ---------------------------------------------------------------------
// %COPYRIGHT_BEGIN%
//
// Copyright (c) 2018 Magic Leap, Inc. All Rights Reserved.
// Use of this file is governed by the Creator Agreement, located
// here: https://id.magicleap.com/creator-terms
//
// %COPYRIGHT_END%
// ---------------------------------------------------------------------
// %BANNER_END%
// %SRC_VERSION%: 1
#include <PrismSceneManager.h>
#include <scenes.h>
#include <Servo2D/Servo2D.h>
namespace scenes {
namespace Servo2D {
namespace externalNodes {
extern const std::string contentPanel = "contentPanel";
extern const std::string content = "content";
extern const std::string backButton = "backButton";
extern const std::string fwdButton = "fwdButton";
extern const std::string urlBar = "urlBar";
}
const SceneDescriptor::ExternalNodeReferences externalNodesMap = {
{"contentPanel", externalNodes::contentPanel},
{"content", externalNodes::content},
{"backButton", externalNodes::backButton},
{"fwdButton", externalNodes::fwdButton},
{"urlBar", externalNodes::urlBar}
};
const SceneDescriptor descriptor(
0,
"Servo2D",
"root",
"/assets/scenes/Servo2D.scene.xml",
"/assets/scenes/Servo2D.scene.res.xml",
externalNodesMap,
true);
}
const SceneDescriptorReferences externalScenes = {
{Servo2D::descriptor.getExternalName(), Servo2D::descriptor}
};
struct VerifyNumberOfExternalScenes {
VerifyNumberOfExternalScenes() { assert(externalScenes.size() == numberOfExternalScenes); }
};
VerifyNumberOfExternalScenes verifyNumberOfExternalScenes;
}
const PrismSceneManager::CreateSpawnedScene PrismSceneManager::createSpawnedScene[scenes::numberOfExternalScenes] = {
::scenes::Servo2D::createSpawnedScene
};
const PrismSceneManager::CreateSpawnedSceneHandlers PrismSceneManager::createSpawnedSceneHandlers[scenes::numberOfExternalScenes] = {
static_cast<CreateSpawnedSceneHandlers>(::scenes::Servo2D::createSpawnedSceneHandlers)
};

View file

@ -1,396 +0,0 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
#include <Servo2D/Servo2D.h>
#include <lumin/node/RootNode.h>
#include <lumin/ui/Cursor.h>
#include <ml_logging.h>
#include <scenes.h>
#include <PrismSceneManager.h>
#include <Servo2D.h>
#include <lumin/node/QuadNode.h>
#include <lumin/ui/Keyboard.h>
#include <EGL/egl.h>
#include <GLES/gl.h>
#include <glm/gtc/matrix_transform.hpp>
#include <string.h>
// The viewport dimensions (in px).
const int VIEWPORT_W = 852;
const int VIEWPORT_H = 480;
// The hidpi factor.
const float HIDPI = 1.0;
// The prism dimensions (in m).
const float PRISM_W = 1.50;
const float PRISM_H = 1;
const float PRISM_D = 0.05;
// The length of the laser pointer (in m).
const float LASER_LENGTH = 10.0;
// The width of the keyboard
const float KEYBOARD_W = 1.333;
// The home page
const char* HOME_PAGE = "https://servo.org/ml-home";
// The locale (currently ML only supports en)
const lumin::ui::Locale::Code DEFAULT_LOCALE = lumin::ui::Locale::Code::kEn;
// A function which calls the ML logger, suitable for passing into Servo
typedef void (*MLLogger)(MLLogLevel lvl, char* msg);
void logger(MLLogLevel lvl, char* msg) {
if (MLLoggingLogLevelIsEnabled(lvl)) {
MLLoggingLog(lvl, ML_DEFAULT_LOG_TAG, msg);
}
}
// A function which updates the history ui, suitable for passing into Servo
typedef void (*MLHistoryUpdate)(Servo2D* app, bool canGoBack, bool canGoForward);
void history(Servo2D* app, bool canGoBack, bool canGoForward) {
app->updateHistory(canGoBack, canGoForward);
}
// A function which updates the url ui, suitable for passing into Servo
typedef void (*MLURLUpdate)(Servo2D* app, char* url);
void url(Servo2D* app, char* url) {
app->updateUrl(url);
}
// A function to show or hide the keyboard
typedef void (*MLKeyboard)(Servo2D* app, bool visible);
void keyboard(Servo2D* app, bool visible) {
app->keyboardVisible(visible);
}
// The functions Servo provides for hooking up to the ML.
extern "C" ServoInstance* init_servo(EGLContext, EGLSurface, EGLDisplay, bool landscape,
Servo2D*, MLLogger, MLHistoryUpdate, MLURLUpdate, MLKeyboard,
const char* url, const char* args, int width, int height, float hidpi);
extern "C" void heartbeat_servo(ServoInstance*);
extern "C" void keyboard_servo(ServoInstance*, char32_t code, lumin::ui::KeyType keyType);
extern "C" void trigger_servo(ServoInstance*, float x, float y, bool down);
extern "C" void move_servo(ServoInstance*, float x, float y);
extern "C" void traverse_servo(ServoInstance*, int delta);
extern "C" void navigate_servo(ServoInstance*, const char* text);
extern "C" void discard_servo(ServoInstance*);
// Create a Servo2D instance
Servo2D::Servo2D(const char* uri, const char* args)
: uri_(uri ? uri : HOME_PAGE)
, args_(args)
{
ML_LOG(Debug, "Servo2D Constructor.");
}
// Destroy a Servo 2D instance
Servo2D::~Servo2D() {
ML_LOG(Debug, "Servo2D Destructor.");
}
const glm::vec3 Servo2D::getInitialPrismSize() const {
return glm::vec3(PRISM_W, PRISM_H, PRISM_D);
}
void Servo2D::createInitialPrism() {
prism_ = requestNewPrism(getInitialPrismSize());
if (!prism_) {
ML_LOG(Error, "Servo2D Error creating default prism.");
abort();
}
prismSceneManager_ = new PrismSceneManager(prism_);
}
int Servo2D::init() {
ML_LOG(Debug, "Servo2D Initializing.");
createInitialPrism();
lumin::ui::Cursor::SetScale(prism_, 0.03f);
spawnInitialScenes();
// Check privileges
if (checkPrivilege(lumin::PrivilegeId::kInternet) != lumin::PrivilegeResult::kGranted) {
ML_LOG(Error, "Servo2D Failed to get internet access");
abort();
return 1;
}
if (checkPrivilege(lumin::PrivilegeId::kControllerPose) != lumin::PrivilegeResult::kGranted) {
ML_LOG(Error, "Servo2D Failed to get controller access");
abort();
return 1;
}
// Get the planar resource that holds the EGL context
lumin::RootNode* root_node = prism_->getRootNode();
if (!root_node) {
ML_LOG(Error, "Servo2D Failed to get root node");
abort();
return 1;
}
std::string content_node_id = scenes::Servo2D::externalNodes::content;
content_node_ = lumin::QuadNode::CastFrom(prism_->findNode(content_node_id, root_node));
if (!content_node_) {
ML_LOG(Error, "Servo2D Failed to get content node");
abort();
return 1;
}
content_node_->setTriggerable(true);
content_panel_ = lumin::ui::UiPanel::CastFrom(
prism_->findNode(scenes::Servo2D::externalNodes::contentPanel, root_node)
);
if (!content_panel_) {
ML_LOG(Error, "Servo2D Failed to get content panel");
abort();
return 1;
}
lumin::ui::UiPanel::RequestFocus(content_panel_);
lumin::ResourceIDType plane_id = prism_->createPlanarEGLResourceId(VIEWPORT_W, VIEWPORT_H);
if (!plane_id) {
ML_LOG(Error, "Servo2D Failed to create EGL resource");
abort();
return 1;
}
plane_ = static_cast<lumin::PlanarResource*>(prism_->getResource(plane_id));
if (!plane_) {
ML_LOG(Error, "Servo2D Failed to create plane");
abort();
return 1;
}
content_node_->setRenderResource(plane_id);
// Get the EGL context, surface and display.
EGLContext ctx = plane_->getEGLContext();
EGLSurface surf = plane_->getEGLSurface();
EGLDisplay dpy = eglGetDisplay(EGL_DEFAULT_DISPLAY);
// Set up gstreamer
auto tmpdir = getTempPath();
auto bindir = getPackagePath() + "bin";
auto registry = getWritablePath() + "gstreamer-registry.bin";
setenv("GIO_MODULE_DIR", bindir.c_str(), 1);
setenv("GST_PLUGIN_SYSTEM_PATH", bindir.c_str(), 1);
setenv("GST_REGISTRY", registry.c_str(), 1);
setenv("XDG_CACHE_HOME", tmpdir.c_str(), 1);
// Hook into servo
servo_ = init_servo(ctx, surf, dpy, true,
this, logger, history, url, keyboard, uri_, args_,
VIEWPORT_W, VIEWPORT_H, HIDPI);
if (!servo_) {
ML_LOG(Error, "Servo2D Failed to init servo instance");
abort();
return 1;
}
// Add a callback to the back button
std::string back_button_id = scenes::Servo2D::externalNodes::backButton;
back_button_ = lumin::ui::UiButton::CastFrom(prism_->findNode(back_button_id, root_node));
if (!back_button_) {
ML_LOG(Error, "Servo2D Failed to get back button");
abort();
return 1;
}
back_button_->onActivateSub(std::bind(traverse_servo, servo_, -1));
// Add a callback to the forward button
std::string fwd_button_id = scenes::Servo2D::externalNodes::fwdButton;
fwd_button_ = lumin::ui::UiButton::CastFrom(prism_->findNode(fwd_button_id, root_node));
if (!fwd_button_) {
ML_LOG(Error, "Servo2D Failed to get forward button");
abort();
return 1;
}
fwd_button_->onActivateSub(std::bind(traverse_servo, servo_, +1));
// Add a callback to the URL bar
std::string url_bar_id = scenes::Servo2D::externalNodes::urlBar;
url_bar_ = lumin::ui::UiTextEdit::CastFrom(prism_->findNode(url_bar_id, root_node));
if (!url_bar_) {
ML_LOG(Error, "Servo2D Failed to get URL bar");
abort();
return 1;
}
lumin::ui::KeyboardProperties keyboard_properties;
keyboard_properties.keyboardZPosition = lumin::ui::KeyboardProperties::KeyboardZPosition::kVolumeCursorPlane;
keyboard_properties.width = KEYBOARD_W;
url_bar_->setKeyboardProperties(keyboard_properties);
url_bar_->onFocusLostSub(std::bind(&Servo2D::urlBarEventListener, this));
return 0;
}
int Servo2D::deInit() {
ML_LOG(Debug, "Servo2D Deinitializing.");
discard_servo(servo_);
servo_ = nullptr;
return 0;
}
void Servo2D::spawnInitialScenes() {
// Iterate over all the exported scenes
for (auto& exportedSceneEntry : scenes::externalScenes ) {
// If this scene was marked to be instanced at app initialization, do it
const SceneDescriptor &sd = exportedSceneEntry.second;
if (sd.getInitiallySpawned()) {
lumin::Node* const spawnedRoot = prismSceneManager_->spawn(sd);
if (spawnedRoot) {
if (!prism_->getRootNode()->addChild(spawnedRoot)) {
ML_LOG(Error, "Servo2D Failed to add spawnedRoot to the prism root node");
abort();
}
}
}
}
}
bool Servo2D::updateLoop(float fDelta) {
glm::vec2 pos = laserPosition();
move_servo(servo_, pos.x, pos.y);
heartbeat_servo(servo_);
return true;
}
bool Servo2D::eventListener(lumin::ServerEvent* event) {
// Dispatch based on event type
lumin::ServerEventType typ = event->getServerEventType();
switch (typ) {
case lumin::ServerEventType::kGestureInputEvent:
return gestureEventListener(static_cast<lumin::GestureInputEventData*>(event));
case lumin::ServerEventType::kControlPose6DofInputEvent:
return pose6DofEventListener(static_cast<lumin::ControlPose6DofInputEventData*>(event));
default:
return false;
}
}
glm::vec2 Servo2D::viewportPosition(glm::vec3 prism_pos) {
// Get the cursor position relative to the origin of the content node (in m)
glm::vec3 pos = prism_pos - content_node_->getPrismPosition();
// Get the size of the content node (in m)
glm::vec2 sz = content_node_->getSize();
// Convert to a position in viewport px
float x = (pos.x / sz.x) * (float)VIEWPORT_W;
float y = (1 - pos.y / sz.y) * (float)VIEWPORT_H; // Sigh, invert the y coordinate
return glm::vec2(x, y);
}
bool Servo2D::pointInsideViewport(glm::vec2 pt) {
return (0 <= pt.x && 0 <= pt.y && pt.x <= VIEWPORT_W && pt.y <= VIEWPORT_H);
}
bool Servo2D::pose6DofEventListener(lumin::ControlPose6DofInputEventData* event) {
// Get the controller position in world coordinates
event->get6DofPosition(controller_position_.x, controller_position_.y, controller_position_.z);
// Get the controller orientation
event->getQuaternion(controller_orientation_.w, controller_orientation_.x,
controller_orientation_.y, controller_orientation_.z);
// Bubble up to any other 6DOF handlers
return false;
}
glm::vec2 Servo2D::laserPosition() {
// Return (-1, -1) if the laser doesn't intersect z=0
glm::vec2 result = glm::vec2(-1.0, -1.0);
// Convert to prism coordinates
glm::vec3 position = glm::inverse(prism_->getTransform()) * glm::vec4(controller_position_, 1.0f);
glm::quat orientation = glm::inverse(prism_->getRotation()) * controller_orientation_;
// 1m in the direction of the controller
glm::vec3 direction = orientation * glm::vec3(0.0f, 0.0f, -1.0f);
// The endpoint of the laser, in prism coordinates
glm::vec3 endpoint = position + direction * LASER_LENGTH;
// The laser color
glm::vec4 color = glm::vec4(1.0, 0.0, 0.0, 1.0);
// Does the laser intersect z=0?
if ((position.z > 0) && (endpoint.z < 0)) {
// How far along the laser did it intersect?
float ratio = 1.0 / (1.0 - (endpoint.z / position.z));
// The intersection point
glm::vec3 intersection = ((1 - ratio) * position) + (ratio * endpoint);
result = viewportPosition(intersection);
}
return result;
}
bool Servo2D::gestureEventListener(lumin::GestureInputEventData* event) {
// Only respond to trigger up or down
lumin::input::GestureType typ = event->getGesture();
if (typ != lumin::input::GestureType::TriggerDown && typ != lumin::input::GestureType::TriggerUp) {
return false;
}
// Only respond to trigger down if the laser is currently in the viewport
glm::vec2 pos = laserPosition();
if ((typ == lumin::input::GestureType::TriggerDown) && !pointInsideViewport(pos)) {
return false;
}
// Only respond to trigger up if the trigger down happened inside the viewport
if ((typ == lumin::input::GestureType::TriggerUp) && !controller_trigger_down_) {
return false;
}
// Inform Servo of the trigger
controller_trigger_down_ = (typ == lumin::input::GestureType::TriggerDown);
trigger_servo(servo_, pos.x, pos.y, controller_trigger_down_);
return true;
}
void Servo2D::urlBarEventListener() {
navigate_servo(servo_, url_bar_->getText().c_str());
}
void Servo2D::keyboardVisible(bool visible) {
lumin::ui::Keyboard* keys = lumin::ui::Keyboard::Get();
if (visible) {
lumin::ui::KeyboardProperties properties;
properties.keyboardZPosition = lumin::ui::KeyboardProperties::KeyboardZPosition::kVolumeCursorPlane;
properties.width = KEYBOARD_W;
keys->show(
prism_,
DEFAULT_LOCALE,
properties,
std::bind(&Servo2D::keyboardEventListener, this, std::placeholders::_1)
);
} else {
keys->hide();
}
}
bool Servo2D::keyboardEventListener(const lumin::ui::KeyboardEvent::EventData& event) {
if (event.getEventType() != lumin::ui::KeyboardEvent::EventType::KEY_PRESSED) {
return false;
}
const lumin::ui::KeyboardEvent::KeyPressedData* keyPress =
static_cast<const lumin::ui::KeyboardEvent::KeyPressedData*>(&event);
keyboard_servo(servo_, keyPress->getCharCode(), keyPress->getKeyType());
return true;
}
void Servo2D::updateUrl(const char* url) {
url_bar_->setText(url);
}
void Servo2D::updateHistory(bool canGoBack, bool canGoForward) {
back_button_->setEnabled(canGoBack);
fwd_button_->setEnabled(canGoForward);
}

View file

@ -1,36 +0,0 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
#include <Servo2D.h>
#include <ml_lifecycle.h>
#include <ml_logging.h>
int main(int argc, char **argv)
{
ML_LOG(Debug, "Servo2D Starting.");
// Handle optional initialization string passed via 'mldb launch'
MLLifecycleInitArgList* list = NULL;
MLLifecycleGetInitArgList(&list);
const char* uri = NULL;
if (nullptr != list) {
int64_t list_length = 0;
MLLifecycleGetInitArgListLength(list, &list_length);
if (list_length > 0) {
const MLLifecycleInitArg* iarg = NULL;
MLLifecycleGetInitArgByIndex(list, 0, &iarg);
if (nullptr != iarg) {
MLLifecycleGetInitArgUri(iarg, &uri);
}
}
}
const char* args = getenv("SERVO_ARGS");
Servo2D myApp(uri, args);
int rv = myApp.run();
MLLifecycleFreeInitArgList(&list);
return rv;
}

View file

@ -1,8 +0,0 @@
SRCS = \
src.gen/scenes.cpp \
src.gen/Servo2D/Servo2D.cpp \
src.gen/PrismSceneManager.cpp \
src.gen/SceneDescriptor.cpp \
src.gen/SpawnedSceneBase.cpp \
src.gen/SpawnedSceneHandlers.cpp \
src.gen/SpawnedSceneUserData.cpp \

View file

@ -1,19 +0,0 @@
<familyset>
<family name="sans-serif">
<font weight="300" style="normal">/system/etc/ml/kali/Fonts/Lomino/Light/LominoUI_Lt.ttf</font>
<font weight="300" style="italic">/system/etc/ml/kali/Fonts/Lomino/LightItalic/LominoUI_LtIt.ttf</font>
<font weight="400" style="normal">/system/etc/ml/kali/Fonts/Lomino/Regular/LominoUI_Rg.ttf</font>
<font weight="400" style="italic">/system/etc/ml/kali/Fonts/Lomino/Italic/LominoUI_It.ttf</font>
<font weight="500" style="normal">/system/etc/ml/kali/Fonts/Lomino/Medium/LominoUI_Md.ttf</font>
<font weight="500" style="italic">/system/etc/ml/kali/Fonts/Lomino/MediumItalic/LominoUI_MdIt.ttf</font>
<font weight="700" style="normal">/system/etc/ml/kali/Fonts/Lomino/Bold/LominoUI_Bd.ttf</font>
<font weight="700" style="italic">/system/etc/ml/kali/Fonts/Lomino/BoldItalic/LominoUI_BdIt.ttf</font>
<font weight="900" style="normal">/system/etc/ml/kali/Fonts/Lomino/ExtraBold/LominoUI_XBd.ttf</font>
<font weight="900" style="italic">/system/etc/ml/kali/Fonts/Lomino/ExtraBoldItalic/LominoUI_XBdIt.ttf</font>
</family>
<alias name="arial" to="sans-serif" />
<alias name="helvetica" to="sans-serif" />
<alias name="tahoma" to="sans-serif" />
<alias name="verdana" to="sans-serif" />
</familyset>

View file

@ -1,21 +0,0 @@
<manifest
xmlns:ml="magicleap"
ml:package="com.mozilla.servo2d"
ml:version_code="1"
ml:version_name="1.0">
<application
ml:visible_name="Servo2D"
ml:sdk_version="1.0">
<component
ml:name=".servo2d.universe"
ml:visible_name="Servo2D"
ml:binary_name="bin/Servo2D"
ml:type="Universe">
<icon
ml:model_folder="Icon/Model/"
ml:portal_folder="Icon/Portal/" />
</component>
<uses-privilege ml:name="Internet"/>
<uses-privilege ml:name="ControllerPose"/>
</application>
</manifest>

View file

@ -1,36 +0,0 @@
{
"intermediate-storage": {
"path": "cache",
"kind": "in-tree"
},
"project-schema-version": 4,
"types": {
"assets": [
"lap/types/asset/material",
"lap/types/asset/model",
"lap/types/asset/outline-font",
"lap/types/asset/texture"
],
"files": [
"lap/types/file/dds",
"lap/types/file/fbx",
"lap/types/file/files",
"lap/types/file/gltf",
"lap/types/file/jpg",
"lap/types/file/kmat",
"lap/types/file/otf",
"lap/types/file/png"
]
},
"checkpoint-hash": "ac0d99c246211709c735b6ff2a02e2f4a2450bdb04c0db28409c4990e45211b922511c68c5874869ee26898c1a95c40a812b85d4c3fa397703606f436fd84b51",
"templates": [
"lap/template/passthru_material_from_kmat",
"lap/template/passthru_model_from_fbx",
"lap/template/passthru_model_from_gltf",
"lap/template/passthru_outline_font_from_otf",
"lap/template/passthru_texture_from_dds",
"lap/template/passthru_texture_from_jpg",
"lap/template/passthru_texture_from_png"
],
"nodes": {}
}

View file

@ -1,3 +0,0 @@
DATAS = \
scenes/Servo2D.scene.res.xml : assets/scenes/Servo2D.scene.res.xml \
scenes/Servo2D.scene.xml : assets/scenes/Servo2D.scene.xml

View file

@ -1,184 +0,0 @@
<?xml version="1.0" encoding="ASCII"?>
<design:rootNode xmlns:design="http://www.magicleap.com/uidesigner/rcp/document/design" name="root" nodeTypeId="lumin.root" modelId="lumin" version="1.11.1">
<property id="name" value="root"/>
<property id="sceneName" value="Servo2D"/>
<node name="contentPanel" nodeTypeId="lumin.ui.panel">
<property id="cursorInitialPosition"/>
<property id="cursorVisible" value="false"/>
<property id="edgeConstraint"/>
<property id="external" value="true"/>
<property id="gravityWellProperties">
<property id="boundaryShape">
<property id="size"/>
<property id="offset"/>
</property>
</property>
<property id="name" value="contentPanel"/>
<property id="panelShape">
<property id="size">
<property id="x" value="1.28"/>
<property id="y" value="0.72"/>
</property>
<property id="offset"/>
</property>
<property id="position">
<property id="y" value="0.06"/>
</property>
<property id="rotation"/>
<property id="scale"/>
<node name="content" nodeTypeId="lumin.quad">
<property id="external" value="true"/>
<property id="name" value="content"/>
<property id="position">
<property id="x" value="-0.64"/>
<property id="y" value="-0.36"/>
<property id="z" value="-0.0"/>
</property>
<property id="rotation"/>
<property id="scale"/>
<property id="size">
<property id="x" value="1.28"/>
<property id="y" value="0.72"/>
</property>
<property id="texCoords">
<property id="x">
<property id="y" value="1.0"/>
</property>
<property id="y">
<property id="x" value="1.0"/>
<property id="y" value="1.0"/>
</property>
<property id="z">
<property id="x" value="1.0"/>
</property>
<property id="w"/>
</property>
</node>
</node>
<node name="uiLinearLayout1" nodeTypeId="lumin.ui.linearLayout">
<property id="alignment">
<property id="horizontalAlignment" value="Center"/>
</property>
<property id="defaultItemAlignment">
<property id="verticalAlignment" value="Center"/>
</property>
<property id="defaultItemPadding">
<property id="right" value="0.01"/>
<property id="left" value="0.01"/>
</property>
<property id="gravityWellProperties">
<property id="boundaryShape">
<property id="size"/>
<property id="offset"/>
</property>
</property>
<property id="itemAlignment"/>
<property id="itemPadding"/>
<property id="name" value="uiLinearLayout1"/>
<property id="orientation" value="Horizontal"/>
<property id="position">
<property id="y" value="-0.32"/>
</property>
<property id="rotation"/>
<property id="scale"/>
<property id="size">
<property id="x" value="1.28"/>
<property id="y" value="0.05"/>
</property>
<node name="backButton" nodeTypeId="lumin.ui.button">
<property id="external" value="true"/>
<property id="gravityWellProperties">
<property id="boundaryShape">
<property id="size"/>
<property id="offset"/>
</property>
</property>
<property id="height" value="0.1"/>
<property id="iconSize"/>
<property id="name" value="backButton"/>
<property id="position">
<property id="y" value="-0.6"/>
</property>
<property id="rotation"/>
<property id="scale"/>
<property id="text" value="Back"/>
<property id="textSize" value="0.05"/>
<property id="textSizeChanged" value="true"/>
<property id="width" value="0.1"/>
</node>
<node name="fwdButton" nodeTypeId="lumin.ui.button">
<property id="external" value="true"/>
<property id="gravityWellProperties">
<property id="boundaryShape">
<property id="size"/>
<property id="offset"/>
</property>
</property>
<property id="height" value="0.1"/>
<property id="iconSize"/>
<property id="name" value="fwdButton"/>
<property id="position"/>
<property id="rotation"/>
<property id="scale"/>
<property id="text" value="Fwd"/>
<property id="textSize" value="0.05"/>
<property id="textSizeChanged" value="true"/>
<property id="width" value="0.1"/>
</node>
<node name="urlBar" nodeTypeId="lumin.ui.textEdit">
<property id="alignment">
<property id="verticalAlignment" value="Center"/>
</property>
<property id="external" value="true"/>
<property id="gravityWellProperties">
<property id="boundaryShape">
<property id="size"/>
<property id="offset"/>
</property>
</property>
<property id="height" value="0.05"/>
<property id="name" value="urlBar"/>
<property id="position"/>
<property id="rotation"/>
<property id="scale"/>
<property id="scrollBarVisibilityMode" value="Off"/>
<property id="text" value=""/>
<property id="textPadding">
<property id="top" value="0.003"/>
<property id="right" value="0.003"/>
<property id="bottom" value="0.003"/>
<property id="left" value="0.003"/>
</property>
<property id="textSize" value="0.05"/>
<property id="width" value="1.8"/>
</node>
</node>
<node name="bevel" nodeTypeId="lumin.quad">
<property id="color" value="0.4 0.302 0.702 1"/>
<property id="name" value="bevel"/>
<property id="position">
<property id="x" value="-0.65"/>
<property id="y" value="-0.31"/>
<property id="z" value="-0.01"/>
</property>
<property id="rotation"/>
<property id="scale"/>
<property id="size">
<property id="x" value="1.3"/>
<property id="y" value="0.74"/>
</property>
<property id="texCoords">
<property id="x">
<property id="y" value="1.0"/>
</property>
<property id="y">
<property id="x" value="1.0"/>
<property id="y" value="1.0"/>
</property>
<property id="z">
<property id="x" value="1.0"/>
</property>
<property id="w"/>
</property>
</node>
</design:rootNode>

View file

@ -1 +0,0 @@
<ResourceModel version="1"></ResourceModel>

View file

@ -1,18 +0,0 @@
<ObjectModel name="Servo2D" version="1">
<TransformNode/>
<UiPanel bottomEdgeConstraint="0.000000" cursorVisible="false" gravityWellRoundness="0.000000" gravityWellSize="0.000000, 0.000000" gravityWellSnap="ClosestEdge" leftEdgeConstraint="0.000000" name="contentPanel" pos="0,0.06,0" rightEdgeConstraint="0.000000" shape="[size:[1.28,0.72], roundness: 0, offset:[0,0,0]]" topEdgeConstraint="0.000000">
<QuadNode castShadow="false" name="content" pos="-0.64,-0.36,-0" receiveShadow="false" shader="MAX" size="1.280000, 0.720000"/>
</UiPanel>
<UiLinearLayout alignment="Top, Center" gravityWellRoundness="0.000000" gravityWellSize="0.000000, 0.000000" gravityWellSnap="ClosestEdge" itemAlignment="Center, Left" itemPadding="0.000000, 0.010000, 0.000000, 0.010000" name="uiLinearLayout1" orientation="Horizontal" pos="0,-0.32,0" size="1.280000, 0.050000">
<Content>
<UiButton gravityWellRoundness="0.000000" gravityWellSize="0.000000, 0.000000" gravityWellSnap="ClosestEdge" name="backButton" pos="0,-0.6,0" size="0.100000, 0.100000" text="Back" textSize="0.050000"/>
</Content>
<Content>
<UiButton gravityWellRoundness="0.000000" gravityWellSize="0.000000, 0.000000" gravityWellSnap="ClosestEdge" name="fwdButton" size="0.100000, 0.100000" text="Fwd" textSize="0.050000"/>
</Content>
<Content>
<UiTextEdit alignment="Center, Left" font="DefaultRes_Font_LominoUI_Rg" gravityWellRoundness="0.000000" gravityWellSize="0.000000, 0.000000" gravityWellSnap="ClosestEdge" name="urlBar" scrollSpeed="0.500000" size="1.800000, 0.050000" textSize="0.050000"/>
</Content>
</UiLinearLayout>
<QuadNode castShadow="false" color="0.1572062,0.09219654,0.4817875,1" name="bevel" pos="-0.65,-0.31,-0.01" receiveShadow="false" shader="MAX" size="1.300000, 0.740000"/>
</ObjectModel>

View file

@ -1,257 +0,0 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
// The immersive mode Servo magicleap demo
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/syscall.h>
#ifndef EGL_EGLEXT_PROTOTYPES
#define EGL_EGLEXT_PROTOTYPES
#endif
#include <EGL/egl.h>
#include <EGL/eglext.h>
#ifndef GL_GLEXT_PROTOTYPES
#define GL_GLEXT_PROTOTYPES
#endif
#include <GLES3/gl3.h>
#include <GLES3/gl3ext.h>
#include <ml_graphics.h>
#include <ml_head_tracking.h>
#include <ml_perception.h>
#include <ml_fileinfo.h>
#include <ml_lifecycle.h>
#include <ml_logging.h>
#include <ml_privileges.h>
// Constants
const char application_name[] = "com.mozilla.servo3d";
// A function which calls the ML logger, suitable for passing into Servo
typedef void (*MLLogger)(MLLogLevel lvl, char* msg);
void logger(MLLogLevel lvl, char* msg) {
if (MLLoggingLogLevelIsEnabled(lvl)) {
MLLoggingLog(lvl, "Servo3D", msg);
}
}
// Entry points to servo
typedef struct Opaque ServoInstance;
extern "C" ServoInstance* init_servo(EGLContext, EGLSurface, EGLDisplay, bool landscape,
void*, MLLogger, void*, void*, void*,
const char* url, const char* args,
int width, int height, float hidpi);
extern "C" void heartbeat_servo(ServoInstance*);
extern "C" void discard_servo(ServoInstance*);
// The Servo3D app
struct Servo3D {
ServoInstance* servo;
bool running;
};
// Callbacks
static void onStop(void* app)
{
ML_LOG(Info, "%s: On stop called.", application_name);
Servo3D* servo3d = (Servo3D*)app;
servo3d->running = false;
}
static void onPause(void* app)
{
ML_LOG(Info, "%s: On pause called.", application_name);
// Treat a pause the same as a stop
Servo3D* servo3d = (Servo3D*)app;
servo3d->running = false;
}
static void onResume(void* app)
{
ML_LOG(Info, "%s: On resume called.", application_name);
}
static void onNewInitArg(void* app)
{
// TODO: call servo_navigate when a new URL arrives
ML_LOG(Info, "%s: On new init arg called.", application_name);
}
int main() {
// set up graphics surface
ML_LOG(Info, "%s: Initializing EGL.", application_name);
EGLDisplay egl_display = eglGetDisplay(EGL_DEFAULT_DISPLAY);
EGLint major = 4;
EGLint minor = 0;
eglInitialize(egl_display, &major, &minor);
// The GL API used should match https://github.com/servo/rust-offscreen-rendering-context/blob/fcbbb4d40dac5e969233c1519151ad5e07b7f22e/src/platform/with_egl/native_gl_context.rs#L14
eglBindAPI(EGL_OPENGL_ES_API);
// Should match https://github.com/servo/rust-offscreen-rendering-context/blob/fcbbb4d40dac5e969233c1519151ad5e07b7f22e/src/platform/with_egl/utils.rs#L46
EGLint config_attribs[] = {
EGL_RED_SIZE, 8,
EGL_GREEN_SIZE, 8,
EGL_BLUE_SIZE, 8,
EGL_ALPHA_SIZE, 0,
EGL_DEPTH_SIZE, 24,
EGL_STENCIL_SIZE, 0,
EGL_SURFACE_TYPE, EGL_PBUFFER_BIT,
EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
EGL_NONE
};
EGLConfig egl_config = nullptr;
EGLint config_size = 0;
eglChooseConfig(egl_display, config_attribs, &egl_config, 1, &config_size);
if (config_size < 1) {
ML_LOG(Error, "%s: Failed to choose EGL config. (%x)", application_name, eglGetError());
return -1;
}
// Should match https://github.com/servo/rust-offscreen-rendering-context/blob/fcbbb4d40dac5e969233c1519151ad5e07b7f22e/src/platform/with_egl/native_gl_context.rs#L47
EGLint context_attribs[] = {
EGL_CONTEXT_CLIENT_VERSION, 3,
EGL_NONE
};
EGLContext egl_context = eglCreateContext(egl_display, egl_config, EGL_NO_CONTEXT, context_attribs);
if (EGL_NO_CONTEXT == egl_context) {
ML_LOG(Error, "%s: Failed to initialize EGL context. (%x)", application_name, eglGetError());
return -1;
}
EGLint surface_attribs[] = {
EGL_WIDTH, 1280,
EGL_HEIGHT, 960,
EGL_NONE
};
EGLSurface egl_surface = eglCreatePbufferSurface(egl_display, egl_config, surface_attribs);
if (EGL_NO_SURFACE == egl_surface) {
ML_LOG(Error, "%s: Failed to initialize EGL surface. (%x)", application_name, eglGetError());
return -1;
}
if (!eglMakeCurrent(egl_display, egl_surface, egl_surface, egl_context)) {
ML_LOG(Error, "%s: Failed to make EGL surface current. (%x)", application_name, eglGetError());
return -1;
}
GLenum read_status = glCheckFramebufferStatus(GL_READ_FRAMEBUFFER);
GLenum draw_status = glCheckFramebufferStatus(GL_DRAW_FRAMEBUFFER);
if ((read_status != GL_FRAMEBUFFER_COMPLETE) || (draw_status != GL_FRAMEBUFFER_COMPLETE)) {
ML_LOG(Error, "%s: Incomplete GL framebuffer. (%x, %x)", application_name, read_status, draw_status);
return -1;
}
ML_LOG(Info, "%s: Initialized EGL.", application_name);
// The app
Servo3D app = { nullptr, true };
// let system know our app has started
MLLifecycleCallbacks lifecycle_callbacks = {};
lifecycle_callbacks.on_stop = onStop;
lifecycle_callbacks.on_pause = onPause;
lifecycle_callbacks.on_resume = onResume;
lifecycle_callbacks.on_new_initarg = onNewInitArg;
if (MLResult_Ok != MLLifecycleInit(&lifecycle_callbacks, &app)) {
ML_LOG(Error, "%s: Failed to initialize lifecycle.", application_name);
return -1;
}
// Get the file argument if there is one
MLLifecycleInitArgList* arg_list = nullptr;
const MLLifecycleInitArg* arg = nullptr;
const char* url = "https://webvr.info/samples/03-vr-presentation.html";
int64_t arg_list_len = 0;
if (MLResult_Ok != MLLifecycleGetInitArgList(&arg_list)) {
ML_LOG(Error, "%s: Failed to get init args.", application_name);
return -1;
}
if (MLResult_Ok == MLLifecycleGetInitArgListLength(arg_list, &arg_list_len)) {
if (arg_list_len) {
if (MLResult_Ok != MLLifecycleGetInitArgByIndex(arg_list, 0, &arg)) {
ML_LOG(Error, "%s: Failed to get init arg.", application_name);
return -1;
}
if (MLResult_Ok != MLLifecycleGetInitArgUri(arg, &url)) {
ML_LOG(Error, "%s: Failed to get init arg uri.", application_name);
return -1;
}
}
}
// init_servo calls MLLifecycleSetReadyIndication()
// Check privileges
if (MLResult_Ok != MLPrivilegesStartup()) {
ML_LOG(Error, "%s: Failed to initialize privileges.", application_name);
return -1;
}
if (MLPrivilegesRequestPrivilege(MLPrivilegeID_LowLatencyLightwear) != MLPrivilegesResult_Granted) {
ML_LOG(Error, "Privilege %d denied.", MLPrivilegeID_LowLatencyLightwear);
return -1;
}
if (MLPrivilegesRequestPrivilege(MLPrivilegeID_Internet) != MLPrivilegesResult_Granted) {
ML_LOG(Error, "Privilege %d denied.", MLPrivilegeID_Internet);
return -1;
}
// initialize perception system
MLPerceptionSettings perception_settings;
if (MLResult_Ok != MLPerceptionInitSettings(&perception_settings)) {
ML_LOG(Error, "%s: Failed to initialize perception.", application_name);
}
if (MLResult_Ok != MLPerceptionStartup(&perception_settings)) {
ML_LOG(Error, "%s: Failed to startup perception.", application_name);
return -1;
}
ML_LOG(Info, "%s: Initializing servo for %s.", application_name, url);
// Initialize servo
app.servo = init_servo(egl_context, egl_surface, egl_display, false,
&app, logger, nullptr, nullptr, nullptr,
url,
"--pref dom.webvr.enabled --pref dom.gamepad.enabled",
500, 500, 1.0);
// At this point we can free the memory for the arg list, since the url isn't used after this
MLLifecycleFreeInitArgList(&arg_list);
// Pin the main thread to the Denver core
// https://forum.magicleap.com/hc/en-us/community/posts/360043120832-How-many-CPUs-does-an-immersive-app-have-access-to-
uint32_t DenverCoreAffinityMask = 1 << 2; // Denver core is CPU2
pid_t ThreadId = gettid();
syscall(__NR_sched_setaffinity, ThreadId, sizeof(DenverCoreAffinityMask), &DenverCoreAffinityMask);
// Run the demo!
ML_LOG(Info, "%s: Begin demo.", application_name);
while (app.running) {
ML_LOG(Debug, "%s: heartbeat.", application_name);
heartbeat_servo(app.servo);
// TODO: check heart_racing.
}
ML_LOG(Info, "%s: End demo.", application_name);
// Shut down
discard_servo(app.servo);
MLPerceptionShutdown();
eglDestroyContext(egl_display, egl_context);
eglTerminate(egl_display);
return 0;
}

View file

@ -1,37 +0,0 @@
KIND = program
SRCS = \
Servo3D.cpp
USES = ml_sdk
LIBPATHS.debug = \
$(GSTREAMER_DIR)/system/lib64 \
../../../target/magicleap/aarch64-linux-android/debug
LIBPATHS.release = \
$(GSTREAMER_DIR)/system/lib64 \
../../../target/magicleap/aarch64-linux-android/release
LIBPATHS.device = \
$(MLSDK)/lumin/stl/libc++-lumin/lib \
STLIBS = \
mlservo
SHLIBS = \
glib-2.0 \
gobject-2.0 \
gstreamer-1.0 \
gstapp-1.0 \
gstaudio-1.0 \
gstbase-1.0 \
gstgl-1.0 \
gstplayer-1.0 \
gstsdp-1.0 \
gstvideo-1.0 \
gstwebrtc-1.0 \
c++ \
ml_privileges \
log \
z

View file

@ -1,19 +0,0 @@
<familyset>
<family name="sans-serif">
<font weight="300" style="normal">/system/etc/ml/kali/Fonts/Lomino/Light/LominoUI_Lt.ttf</font>
<font weight="300" style="italic">/system/etc/ml/kali/Fonts/Lomino/LightItalic/LominoUI_LtIt.ttf</font>
<font weight="400" style="normal">/system/etc/ml/kali/Fonts/Lomino/Regular/LominoUI_Rg.ttf</font>
<font weight="400" style="italic">/system/etc/ml/kali/Fonts/Lomino/Italic/LominoUI_It.ttf</font>
<font weight="500" style="normal">/system/etc/ml/kali/Fonts/Lomino/Medium/LominoUI_Md.ttf</font>
<font weight="500" style="italic">/system/etc/ml/kali/Fonts/Lomino/MediumItalic/LominoUI_MdIt.ttf</font>
<font weight="700" style="normal">/system/etc/ml/kali/Fonts/Lomino/Bold/LominoUI_Bd.ttf</font>
<font weight="700" style="italic">/system/etc/ml/kali/Fonts/Lomino/BoldItalic/LominoUI_BdIt.ttf</font>
<font weight="900" style="normal">/system/etc/ml/kali/Fonts/Lomino/ExtraBold/LominoUI_XBd.ttf</font>
<font weight="900" style="italic">/system/etc/ml/kali/Fonts/Lomino/ExtraBoldItalic/LominoUI_XBdIt.ttf</font>
</family>
<alias name="arial" to="sans-serif" />
<alias name="helvetica" to="sans-serif" />
<alias name="tahoma" to="sans-serif" />
<alias name="verdana" to="sans-serif" />
</familyset>

View file

@ -1,23 +0,0 @@
<manifest
xmlns:ml="magicleap"
ml:package="com.mozilla.servo3d"
ml:version_code="1"
ml:version_name="1.0">
<application
ml:visible_name="Servo3D"
ml:sdk_version="0.20.0"
ml:min_api_level="4">
<component
ml:name=".servo3d.fullscreen"
ml:visible_name="Servo3D"
ml:binary_name="bin/Servo3D"
ml:type="Fullscreen">
<icon
ml:model_folder="Icon/Model/"
ml:portal_folder="Icon/Portal/" />
</component>
<uses-privilege ml:name="ControllerPose"/>
<uses-privilege ml:name="Internet"/>
<uses-privilege ml:name="LowLatencyLightwear"/>
</application>
</manifest>

View file

@ -1,21 +0,0 @@
#!/usr/bin/env bash
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
set -o errexit
set -o nounset
set -o pipefail
MAGICLEAP_TOOLCHAIN=${MAGICLEAP_TOOLCHAIN:-"${MAGICLEAP_SDK}/tools/toolchains"}
TARGET=${TARGET:-"aarch64-linux-android"}
LD=${LD:-"${MAGICLEAP_TOOLCHAIN}/bin/${TARGET}-ld"}
LDFLAGS=${LDFLAGS:-"-L${MAGICLEAP_SDK}/lumin/stl/libc++/lib -L${MAGICLEAP_SDK}/lumin/usr/lib -L${MAGICLEAP_TOOLCHAIN}/lib/gcc/${TARGET}/4.9.x"}
# Remove the -landroid flag, grr
ARGS=("$@")
ARGS=${ARGS[@]/-landroid}
echo ${LD} ${LDFLAGS} ${ARGS}
${LD} ${LDFLAGS} ${ARGS}

View file

@ -1,7 +0,0 @@
*.tar.gz
*.tgz
_build
_install
gst-build
libiconv-1.16
mlsdk.txt

View file

@ -1,22 +0,0 @@
# Building the binary .tgz for magicleap gstreamer
`mach` downloads prebuilt gstreamer libraries, which are built using this script.
# Requirements
- Magic Leap SDK >= 0.22.0 for MacOSX
* Download from https://creator.magicleap.com/downloads/lumin-sdk/overview
* Install both `Lumin SDK` and `Lumin Runtime SDK` packages
- An application certificate
* Create one on https://creator.magicleap.com in `publish` section
# Setup MacOSX
- Install python3 and HomeBrew
- pip3 install git+https://github.com/mesonbuild/meson.git
* Requires Meson >=0.52.0, currently only in git master.
- brew install coreutils glib bison
- export PATH=/usr/local/opt/gettext/bin:/usr/local/opt/bison/bin:$PATH
# Build Instructions
- export MAGICLEAP_SDK=/path/to/mlsdk
- export MLCERT=/path/to/application.cert
- ./gstreamer.sh

View file

@ -1,100 +0,0 @@
#!/usr/bin/env bash
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
set -o errexit
set -o nounset
set -o pipefail
SOURCE_DIR=gst-build
BUILD_DIR=_build
INSTALL_DIR=_install
INSTALL_REAL_DIR=$(realpath ${INSTALL_DIR})
ARCHIVE=gstreamer-magicleap-1.16.0-$(date +"%Y%m%d-%H%M%S").tgz
function build_and_install()
{
ninja -C ${BUILD_DIR}
DESTDIR=${INSTALL_REAL_DIR} meson install -C ${BUILD_DIR} --only-changed
echo Creating archive ${ARCHIVE}.
tar czf ${ARCHIVE} -C ${INSTALL_DIR} system
}
if [[ "${1:-}" == "--build-only" ]]; then
build_and_install
exit
fi
rm -rf ${BUILD_DIR}
rm -rf ${INSTALL_DIR}
# FIXME: Download, build and install GNU libiconv because MLSDK has an old
# version of bionic that does not include iconv.
ICONV_NAME=libiconv-1.16
if [[ ! -d ${ICONV_NAME} ]]; then
curl -O -L https://ftp.gnu.org/pub/gnu/libiconv/${ICONV_NAME}.tar.gz
tar xzf ${ICONV_NAME}.tar.gz
fi
mkdir -p ${BUILD_DIR}/${ICONV_NAME}
HOST=aarch64-linux-android
SYSROOT=${MAGICLEAP_SDK}/lumin/usr
cd ${BUILD_DIR}/${ICONV_NAME}
env CFLAGS=--sysroot=${SYSROOT} \
CPPFLAGS=--sysroot=${SYSROOT} \
CC=${MAGICLEAP_SDK}/tools/toolchains/bin/${HOST}-clang \
AR=${MAGICLEAP_SDK}/tools/toolchains/bin/${HOST}-ar \
RANLIB=${MAGICLEAP_SDK}/tools/toolchains/bin/${HOST}-ranlib \
../../${ICONV_NAME}/configure --host=${HOST} \
--with-sysroot=${SYSROOT} \
--prefix /system \
--libdir /system/lib64
cd ../..
make -C ${BUILD_DIR}/${ICONV_NAME}
DESTDIR=${INSTALL_REAL_DIR} make -C ${BUILD_DIR}/${ICONV_NAME} install
# Clone custom repo/branch of gst-build
if [[ ! -d ${SOURCE_DIR} ]]; then
git clone https://gitlab.freedesktop.org/xclaesse/gst-build.git --branch magicleap ${SOURCE_DIR}
fi
# Generate cross file by replacing the MLSDK location
cat mlsdk.txt.in | sed s#@MAGICLEAP_SDK@#${MAGICLEAP_SDK}# \
| sed s#@INSTALL_DIR@#${INSTALL_REAL_DIR}# > mlsdk.txt
meson --cross-file mlsdk.txt \
--prefix /system \
--libdir lib64 \
--libexecdir bin \
-Db_pie=true \
-Dcpp_std=c++11 \
-Dpython=disabled \
-Dlibav=disabled \
-Ddevtools=disabled \
-Dges=disabled \
-Drtsp_server=disabled \
-Domx=disabled \
-Dvaapi=disabled \
-Dsharp=disabled \
-Dexamples=disabled \
-Dgtk_doc=disabled \
-Dintrospection=disabled \
-Dnls=disabled \
-Dbad=enabled \
-Dgst-plugins-base:gl=enabled \
-Dgst-plugins-base:gl_platform=egl \
-Dgst-plugins-base:gl_winsys=android \
-Dgst-plugins-good:soup=enabled \
-Dgst-plugins-bad:gl=enabled \
-Dgst-plugins-bad:magicleap=enabled \
-Dgst-plugins-bad:dash=enabled \
-Dglib:iconv=gnu \
-Dlibsoup:gssapi=false \
-Dlibsoup:tls_check=false \
-Dlibsoup:vapi=false \
${BUILD_DIR} \
${SOURCE_DIR}
build_and_install

View file

@ -1,37 +0,0 @@
[host_machine]
system = 'android'
cpu_family = 'aarch64'
cpu = 'armv8-a'
endian = 'little'
[properties]
c_args = [
'--sysroot=@MAGICLEAP_SDK@/lumin/usr',
'-I@MAGICLEAP_SDK@/include',
'-I@MAGICLEAP_SDK@/staging/include',
'-I@INSTALL_DIR@/system/include',
]
cpp_args = [
'--sysroot=@MAGICLEAP_SDK@/lumin/usr',
'-I@MAGICLEAP_SDK@/include',
'-I@MAGICLEAP_SDK@/staging/include',
'-I@INSTALL_DIR@/system/include',
]
c_link_args = [
'--sysroot=@MAGICLEAP_SDK@/lumin/usr',
'-L@MAGICLEAP_SDK@/lib/lumin',
'-L@INSTALL_DIR@/system/lib64',
'-fuse-ld=gold'
]
cpp_link_args = [
'--sysroot=@MAGICLEAP_SDK@/lumin/usr',
'-L@MAGICLEAP_SDK@/lib/lumin',
'-L@INSTALL_DIR@/system/lib64',
'-fuse-ld=gold'
]
[binaries]
c = ['ccache', '@MAGICLEAP_SDK@/tools/toolchains/bin/aarch64-linux-android-clang']
cpp = ['ccache', '@MAGICLEAP_SDK@/tools/toolchains/bin/aarch64-linux-android-clang++']
ar = ['@MAGICLEAP_SDK@/tools/toolchains/bin/aarch64-linux-android-ar']
strip = ['@MAGICLEAP_SDK@/tools/toolchains/bin/aarch64-linux-android-strip']

View file

@ -1,31 +0,0 @@
<manifest
xmlns:ml="magicleap"
ml:package="com.mozilla.servo"
ml:version_code="1"
ml:version_name="1.0">
<application
ml:visible_name="Servo"
ml:sdk_version="1.0">
<component
ml:name=".servo2d.universe"
ml:visible_name="Servo2D"
ml:binary_name="bin/Servo2D"
ml:type="Universe">
<icon
ml:model_folder="Icon/Model/"
ml:portal_folder="Icon/Portal/" />
</component>
<component
ml:name=".servo3d.fullscreen"
ml:visible_name="Servo3D"
ml:binary_name="bin/Servo3D"
ml:type="Fullscreen">
<icon
ml:model_folder="Icon/Model/"
ml:portal_folder="Icon/Portal/" />
</component>
<uses-privilege ml:name="ControllerPose"/>
<uses-privilege ml:name="Internet"/>
<uses-privilege ml:name="LowLatencyLightwear"/>
</application>
</manifest>

View file

@ -1,60 +0,0 @@
#!/usr/bin/env bash
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
set -o errexit
set -o nounset
set -o pipefail
if [[ -z "${OPENSSL_DIR}" ]]; then
echo "No OPENSSL_DIR."
exit 1
fi
if [[ -z "${OPENSSL_VERSION}" ]]; then
echo "No OPENSSL_VERSION."
exit 1
fi
if [[ -f "${OPENSSL_DIR}/lib/libssl.so" ]] && \
[[ "${OPENSSL_DIR}/lib/libssl.so" -nt "${0}" ]] ; then
exit 0
fi
echo "Building ${OPENSSL_DIR}/lib/libssl.so"
S3_BUCKET="https://servo-deps-2.s3.amazonaws.com/android-deps"
S3_URL="${S3_BUCKET}/openssl-${OPENSSL_VERSION}.tar.gz"
if [[ ! -d "${OPENSSL_DIR}/src/openssl-${OPENSSL_VERSION}" ]]; then
mkdir -p "${OPENSSL_DIR}/src"
curl "${S3_URL}" | tar xzf - -C "${OPENSSL_DIR}/src"
fi
if [[ ! -d "${OPENSSL_DIR}/src/openssl-${OPENSSL_VERSION}" ]]; then
echo "Failed to download ${OPENSSL_DIR}/src/openssl-${OPENSSL_VERSION}"
exit 1
fi
cd "${OPENSSL_DIR}/src/openssl-${OPENSSL_VERSION}"
./Configure shared \
--prefix="${OPENSSL_DIR}" \
--openssldir="${OPENSSL_DIR}" \
-no-ssl2 -no-ssl3 -no-comp -no-engine -no-hw \
linux-generic64 \
-fPIC -fno-omit-frame-pointer \
-Wall -Wno-error=macro-redefined -Wno-unknown-attributes \
${CFLAGS:-}
make depend
make all
make install_sw
if [[ ! -f "${OPENSSL_DIR}/lib/libssl.so" ]]; then
echo "Failed to build ${OPENSSL_DIR}/lib/libssl.so"
exit 1
fi

View file

@ -1 +0,0 @@
set(CMAKE_SYSTEM_NAME Linux)