Add script to build Bookworm rootfs with libargus support
This is the minimal amount needed to build a bookworm rootfs which boots
and is able to take pictures with the imx296 sensor
Note: the paths are pretty hard-coded right now, they need to be
improved.
Flashing is done using ./doflash_frc971.sh
Change-Id: Ibf480d3f5b0aed553ba71431f8a94a8e5290a98f
Signed-off-by: Austin Schuh <austin.linux@gmail.com>
diff --git a/frc971/orin/build_rootfs.py b/frc971/orin/build_rootfs.py
new file mode 100755
index 0000000..f82bed7
--- /dev/null
+++ b/frc971/orin/build_rootfs.py
@@ -0,0 +1,412 @@
+#!/usr/bin/python3
+
+import contextlib
+import pathlib
+import collections
+import subprocess
+import shlex
+import os
+
+IMAGE = "arm64_bookworm_debian_yocto.img"
+YOCTO = "/home/austin/local/jetpack/robot-yocto/build"
+
+REQUIRED_DEPS = ["debootstrap", "u-boot-tools"]
+
+
+@contextlib.contextmanager
+def scoped_loopback(image):
+ """Mounts an image as a loop back device."""
+ result = subprocess.run(["sudo", "losetup", "--show", "-f", image],
+ check=True,
+ stdout=subprocess.PIPE)
+ device = result.stdout.decode('utf-8').strip()
+ print("Mounted", image, "to", repr(device))
+ try:
+ yield device
+ finally:
+ subprocess.run(["sudo", "losetup", "-d", device], check=True)
+
+
+@contextlib.contextmanager
+def scoped_mount(image):
+ """Mounts an image as a partition."""
+ partition = f"{image}.partition"
+ try:
+ os.mkdir(partition)
+ except FileExistsError:
+ pass
+
+ result = subprocess.run(["sudo", "mount", "-o", "loop", image, partition],
+ check=True)
+
+ try:
+ yield partition
+ finally:
+ subprocess.run(
+ ["sudo", "rm", f"{partition}/usr/bin/qemu-aarch64-static"])
+ subprocess.run(["sudo", "umount", partition], check=True)
+
+
+def check_required_deps(deps):
+ """Checks if the provided list of dependencies is installed."""
+ missing_deps = []
+ for dep in deps:
+ result = subprocess.run(["dpkg-query", "-W", "-f='${Status}'", dep],
+ check=True,
+ stdout=subprocess.PIPE)
+
+ if "install ok installed" not in result.stdout.decode('utf-8'):
+ missing_deps.append(dep)
+
+ if len(missing_deps) > 0:
+ print("Missing dependencies, please install:")
+ print("sudo apt-get install", " ".join(missing_deps))
+
+
+def make_image(image):
+ """Makes an image and creates an xfs filesystem on it."""
+ result = subprocess.run([
+ "dd", "if=/dev/zero", f"of={image}", "bs=1", "count=0",
+ "seek=8589934592"
+ ],
+ check=True)
+
+ with scoped_loopback(image) as loopback:
+ subprocess.run([
+ "sudo", "mkfs.xfs", "-d", "su=128k", "-d", "sw=1", "-L", "rootfs",
+ loopback
+ ],
+ check=True)
+
+
+def target_unescaped(cmd):
+ """Runs a command as root with bash -c cmd, ie without escaping."""
+ subprocess.run([
+ "sudo", "chroot", "--userspec=0:0", f"{PARTITION}",
+ "qemu-aarch64-static", "/bin/bash", "-c", cmd
+ ],
+ check=True)
+
+
+def target(cmd):
+ """Runs a command as root with escaping."""
+ target_unescaped(shlex.join([shlex.quote(c) for c in cmd]))
+
+
+def pi_target_unescaped(cmd):
+ """Runs a command as pi with bash -c cmd, ie without escaping."""
+ subprocess.run([
+ "sudo", "chroot", "--userspec=pi:pi", "--groups=pi", f"{PARTITION}",
+ "qemu-aarch64-static", "/bin/bash", "-c", cmd
+ ],
+ check=True)
+
+
+def pi_target(cmd):
+ """Runs a command as pi with escaping."""
+ pi_target_unescaped(shlex.join([shlex.quote(c) for c in cmd]))
+
+
+def copyfile(owner, permissions, file):
+ """Copies a file from contents/{file} with the provided owner and permissions."""
+ print("copyfile", owner, permissions, file)
+ subprocess.run(["sudo", "cp", f"contents/{file}", f"{PARTITION}/{file}"],
+ check=True)
+ subprocess.run(["sudo", "chmod", permissions, f"{PARTITION}/{file}"],
+ check=True)
+ target(["chown", owner, f"/{file}"])
+
+
+def target_mkdir(owner_group, permissions, folder):
+ """Creates a directory recursively with the provided permissions and ownership."""
+ print("target_mkdir", owner_group, permissions, folder)
+ owner, group = owner_group.split('.')
+ target(
+ ["install", "-d", "-m", permissions, "-o", owner, "-g", group, folder])
+
+
+def list_packages():
+ """Lists all installed packages.
+
+ Returns:
+ A dictionary with keys as packages, and values as versions.
+ """
+ result = subprocess.run([
+ "sudo", "chroot", "--userspec=0:0", f"{PARTITION}",
+ "qemu-aarch64-static", "/bin/bash", "-c",
+ "dpkg-query -W -f='${Package} ${Version}\n'"
+ ],
+ check=True,
+ stdout=subprocess.PIPE)
+
+ device = result.stdout.decode('utf-8').strip()
+
+ r = {}
+ for line in result.stdout.decode('utf-8').strip().split('\n'):
+ package, version = line.split(' ')
+ r[package] = version
+
+ return r
+
+
+def list_yocto_packages():
+ """Lists all packages in the Yocto folder.
+
+ Returns:
+ list of Package classes.
+ """
+ Package = collections.namedtuple(
+ 'Package', ['path', 'name', 'version', 'architecture'])
+ result = []
+ pathlist = pathlib.Path(f"{YOCTO}/tmp/deploy/deb").glob('**/*.deb')
+ for path in pathlist:
+ # Strip off the path, .deb, and split on _ to parse the package info.
+ s = os.path.basename(str(path))[:-4].split('_')
+ result.append(Package(str(path), s[0], s[1], s[2]))
+
+ return result
+
+
+def install_packages(new_packages, existing_packages):
+ """Installs the provided yocto packages, if they are new."""
+ # To install the yocto packages, first copy them into a folder in /tmp, then install them, then clean the folder up.
+ target(["mkdir", "-p", "/tmp/yocto_packages"])
+ try:
+ to_install = []
+ for package in new_packages:
+ if package.name in existing_packages and existing_packages[
+ package.name] == package.version:
+ print('Skipping', package)
+ continue
+
+ subprocess.run([
+ "sudo", "cp", package.path,
+ f"{PARTITION}/tmp/yocto_packages/{os.path.basename(package.path)}"
+ ],
+ check=True)
+ to_install.append(package)
+
+ if len(to_install) > 0:
+ target(["dpkg", "-i"] + [
+ f"/tmp/yocto_packages/{os.path.basename(package.path)}"
+ for package in to_install
+ ])
+
+ finally:
+ target(["rm", "-rf", "/tmp/yocto_packages"])
+
+
+def install_virtual_packages(virtual_packages):
+ """Builds and installs the provided virtual packages."""
+ try:
+ target(["mkdir", "-p", "/tmp/yocto_packages"])
+ for virtual_package in virtual_packages:
+ subprocess.run(
+ ["dpkg-deb", "--build", f"virtual_packages/{virtual_package}"],
+ check=True)
+ subprocess.run([
+ "sudo", "cp", f"virtual_packages/{virtual_package}.deb",
+ f"{PARTITION}/tmp/yocto_packages/{virtual_package}.deb"
+ ],
+ check=True)
+
+ target(["dpkg", "-i"] + [
+ f"/tmp/yocto_packages/{package}.deb"
+ for package in virtual_packages
+ ])
+
+ finally:
+ target(["rm", "-rf", "/tmp/yocto_packages"])
+
+
+def main():
+ check_required_deps(REQUIRED_DEPS)
+
+ new_image = not os.path.exists(IMAGE)
+ if new_image:
+ make_image(IMAGE)
+
+ with scoped_mount(IMAGE) as partition:
+ if new_image:
+ subprocess.run([
+ "sudo", "debootstrap", "--arch=arm64", "--no-check-gpg",
+ "--foreign", "bookworm", partition,
+ "http://deb.debian.org/debian/"
+ ],
+ check=True)
+
+ subprocess.run([
+ "sudo", "cp", "/usr/bin/qemu-aarch64-static",
+ f"{partition}/usr/bin/"
+ ],
+ check=True)
+
+ global PARTITION
+ PARTITION = partition
+
+ if new_image:
+ target(["/debootstrap/debootstrap", "--second-stage"])
+
+ target([
+ "useradd", "-m", "-p",
+ '$y$j9T$85lzhdky63CTj.two7Zj20$pVY53UR0VebErMlm8peyrEjmxeiRw/rfXfx..9.xet1',
+ '-s', '/bin/bash', 'pi'
+ ])
+ target(["addgroup", "debug"])
+ target(["addgroup", "crypto"])
+ target(["addgroup", "trusty"])
+
+ if not os.path.exists(
+ f"{partition}/etc/apt/sources.list.d/bullseye-backports.list"):
+ copyfile("root.root", "644",
+ "etc/apt/sources.list.d/bullseye-backports.list")
+ target(["apt-get", "update"])
+
+ target([
+ "apt-get", "-y", "install", "gnupg", "wget", "systemd",
+ "systemd-resolved", "locales"
+ ])
+
+ target(["localedef", "-i", "en_US", "-f", "UTF-8", "en_US.UTF-8"])
+
+ target_mkdir("root.root", "755", "run/systemd")
+ target_mkdir("systemd-resolve.systemd-resolve", "755",
+ "run/systemd/resolve")
+ copyfile("systemd-resolve.systemd-resolve", "644",
+ "run/systemd/resolve/stub-resolv.conf")
+ target(["systemctl", "enable", "systemd-resolved"])
+
+ target([
+ "apt-get", "-y", "install", "bpfcc-tools", "sudo",
+ "openssh-server", "python3", "bash-completion", "git", "v4l-utils",
+ "cpufrequtils", "pmount", "rsync", "vim-nox", "chrony",
+ "libopencv-calib3d406", "libopencv-contrib406",
+ "libopencv-core406", "libopencv-features2d406",
+ "libopencv-flann406", "libopencv-highgui406",
+ "libopencv-imgcodecs406", "libopencv-imgproc406",
+ "libopencv-ml406", "libopencv-objdetect406", "libopencv-photo406",
+ "libopencv-shape406", "libopencv-stitching406",
+ "libopencv-superres406", "libopencv-video406",
+ "libopencv-videoio406", "libopencv-videostab406",
+ "libopencv-viz406", "libnice10", "pmount", "libnice-dev", "feh",
+ "libgstreamer1.0-0", "libgstreamer-plugins-base1.0-0",
+ "libgstreamer-plugins-bad1.0-0", "gstreamer1.0-plugins-base",
+ "gstreamer1.0-plugins-good", "gstreamer1.0-plugins-bad",
+ "gstreamer1.0-plugins-ugly", "gstreamer1.0-nice", "usbutils",
+ "locales", "trace-cmd", "clinfo", "jq", "strace", "sysstat",
+ "lm-sensors", "can-utils", "xfsprogs", "gstreamer1.0-tools",
+ "bridge-utils", "net-tools", "apt-file", "parted", "xxd"
+ ])
+ target(["apt-get", "clean"])
+
+ target(["usermod", "-a", "-G", "sudo", "pi"])
+ target(["usermod", "-a", "-G", "video", "pi"])
+ target(["usermod", "-a", "-G", "systemd-journal", "pi"])
+ target(["usermod", "-a", "-G", "dialout", "pi"])
+
+ virtual_packages = [
+ 'libglib-2.0-0', 'libglvnd', 'libgtk-3-0', 'libxcb-glx', 'wayland'
+ ]
+
+ install_virtual_packages(virtual_packages)
+
+ yocto_package_names = [
+ 'tegra-argus-daemon', 'tegra-firmware', 'tegra-firmware-tegra234',
+ 'tegra-firmware-vic', 'tegra-firmware-xusb',
+ 'tegra-libraries-argus-daemon-base', 'tegra-libraries-camera',
+ 'tegra-libraries-core', 'tegra-libraries-cuda',
+ 'tegra-libraries-eglcore', 'tegra-libraries-glescore',
+ 'tegra-libraries-glxcore', 'tegra-libraries-multimedia',
+ 'tegra-libraries-multimedia-utils',
+ 'tegra-libraries-multimedia-v4l', 'tegra-libraries-nvsci',
+ 'tegra-libraries-vulkan', 'tegra-nvphs', 'tegra-nvphs-base',
+ 'libnvidia-egl-wayland1'
+ ]
+ yocto_packages = list_yocto_packages()
+ packages = list_packages()
+
+ install_packages([
+ package for package in yocto_packages
+ if package.name in yocto_package_names
+ ], packages)
+
+ # Now, install the kernel and modules after all the normal packages are in.
+ yocto_packages_to_install = [
+ package for package in yocto_packages
+ if (package.name.startswith('kernel-module-') or package.name.
+ startswith('kernel-5.10') or package.name == 'kernel-modules')
+ ]
+
+ packages_to_remove = []
+
+ # Remove kernel-module-* packages + kernel- package.
+ for key in packages:
+ if key.startswith('kernel-module') or key.startswith(
+ 'kernel-5.10'):
+ already_installed = False
+ for index, yocto_package in enumerate(
+ yocto_packages_to_install):
+ if key == yocto_package.name and packages[
+ key] == yocto_package.version:
+ print('Found already installed package', key,
+ yocto_package)
+ already_installed = True
+ del yocto_packages_to_install[index]
+ break
+ if not already_installed:
+ packages_to_remove.append(key)
+
+ print("Removing", packages_to_remove)
+ if len(packages_to_remove) > 0:
+ target(['dpkg', '--purge'] + packages_to_remove)
+ print("Installing",
+ [package.name for package in yocto_packages_to_install])
+
+ install_packages(yocto_packages_to_install, packages)
+
+ target(["systemctl", "enable", "nvargus-daemon.service"])
+
+ copyfile("root.root", "644", "etc/sysctl.d/sctp.conf")
+ copyfile("root.root", "644", "etc/systemd/logind.conf")
+ copyfile("root.root", "555",
+ "etc/bash_completion.d/aos_dump_autocomplete")
+ copyfile("root.root", "644", "etc/security/limits.d/rt.conf")
+ copyfile("root.root", "644", "etc/systemd/system/usb-mount@.service")
+ copyfile("root.root", "644", "etc/chrony/chrony.conf")
+ target_mkdir("root.root", "700", "root/bin")
+ target_mkdir("pi.pi", "755", "home/pi/.ssh")
+ copyfile("pi.pi", "600", "home/pi/.ssh/authorized_keys")
+ target_mkdir("root.root", "700", "root/bin")
+ copyfile("root.root", "644", "etc/systemd/system/grow-rootfs.service")
+ copyfile("root.root", "500", "root/bin/change_hostname.sh")
+ copyfile("root.root", "700", "root/trace.sh")
+ copyfile("root.root", "440", "etc/sudoers")
+ copyfile("root.root", "644", "etc/fstab")
+ copyfile("root.root", "644",
+ "var/nvidia/nvcam/settings/camera_overrides.isp")
+
+ target_mkdir("root.root", "755", "etc/systemd/network")
+ copyfile("root.root", "644", "etc/systemd/network/eth0.network")
+ copyfile("root.root", "644", "etc/systemd/network/80-can.network")
+ target(["/root/bin/change_hostname.sh", "pi-971-1"])
+
+ target(["systemctl", "enable", "systemd-networkd"])
+ target(["systemctl", "enable", "grow-rootfs"])
+ target(["apt-file", "update"])
+
+ target(["ldconfig"])
+
+ if not os.path.exists(f"{partition}/home/pi/.dotfiles"):
+ pi_target_unescaped(
+ "cd /home/pi/ && git clone --separate-git-dir=/home/pi/.dotfiles https://github.com/AustinSchuh/.dotfiles.git tmpdotfiles && rsync --recursive --verbose --exclude .git tmpdotfiles/ /home/pi/ && rm -r tmpdotfiles && git --git-dir=/home/pi/.dotfiles/ --work-tree=/home/pi/ config --local status.showUntrackedFiles no"
+ )
+ pi_target(["vim", "-c", "\":qa!\""])
+
+ target_unescaped(
+ "cd /root/ && git clone --separate-git-dir=/root/.dotfiles https://github.com/AustinSchuh/.dotfiles.git tmpdotfiles && rsync --recursive --verbose --exclude .git tmpdotfiles/ /root/ && rm -r tmpdotfiles && git --git-dir=/root/.dotfiles/ --work-tree=/root/ config --local status.showUntrackedFiles no"
+ )
+ target(["vim", "-c", "\":qa!\""])
+
+
+if __name__ == '__main__':
+ main()
diff --git a/frc971/orin/contents/etc/apt/sources.list.d/bullseye-backports.list b/frc971/orin/contents/etc/apt/sources.list.d/bullseye-backports.list
new file mode 100644
index 0000000..6c98bcb
--- /dev/null
+++ b/frc971/orin/contents/etc/apt/sources.list.d/bullseye-backports.list
@@ -0,0 +1,2 @@
+deb http://deb.debian.org/debian bullseye-backports main
+deb http://deb.debian.org/debian bullseye main
diff --git a/frc971/orin/contents/etc/bash_completion.d/aos_dump_autocomplete b/frc971/orin/contents/etc/bash_completion.d/aos_dump_autocomplete
new file mode 100644
index 0000000..1b82c46
--- /dev/null
+++ b/frc971/orin/contents/etc/bash_completion.d/aos_dump_autocomplete
@@ -0,0 +1,5 @@
+#!/bin/bash
+
+if [[ -e "/home/pi/bin/aos_dump_autocomplete.sh" ]]; then
+ . /home/pi/bin/aos_dump_autocomplete.sh
+fi
diff --git a/frc971/orin/contents/etc/chrony/chrony.conf b/frc971/orin/contents/etc/chrony/chrony.conf
new file mode 100644
index 0000000..6e03143
--- /dev/null
+++ b/frc971/orin/contents/etc/chrony/chrony.conf
@@ -0,0 +1,59 @@
+# Welcome to the chrony configuration file. See chrony.conf(5) for more
+# information about usable directives.
+
+# Include configuration files found in /etc/chrony/conf.d.
+confdir /etc/chrony/conf.d
+
+# Use Debian vendor zone.
+pool 2.debian.pool.ntp.org iburst
+
+# Use time sources from DHCP.
+sourcedir /run/chrony-dhcp
+
+# Use NTP sources found in /etc/chrony/sources.d.
+sourcedir /etc/chrony/sources.d
+
+# This directive specify the location of the file containing ID/key pairs for
+# NTP authentication.
+keyfile /etc/chrony/chrony.keys
+
+# This directive specify the file into which chronyd will store the rate
+# information.
+driftfile /var/lib/chrony/chrony.drift
+
+# Save NTS keys and cookies.
+ntsdumpdir /var/lib/chrony
+
+# Uncomment the following line to turn logging on.
+#log tracking measurements statistics
+
+# Log files location.
+logdir /var/log/chrony
+
+# Stop bad estimates upsetting machine clock.
+maxupdateskew 100.0
+
+# This directive enables kernel synchronisation (every 11 minutes) of the
+# real-time clock. Note that it can’t be used along with the 'rtcfile' directive.
+rtcsync
+
+# Always step the time if it's more than 4ms off.
+makestep 0.004 -1
+
+# The next 2 settings are used to control how much slewing of the clock chrony
+# is allowed to do. The total will be the sum of both and we have a hard limit
+# at 500ppm coming from AOS.
+
+# The maximum slewing allowed to correct an offset with the reference clock.
+# Note that this value doesn't include corrections due to frequency errors
+# (drift).
+maxslewrate 200
+
+# Maximum frequency error (drift) of the clock. Chrony will try to compensate
+# for drift and this setting limits how large that correction can be.
+maxdrift 100
+
+# Get TAI-UTC offset and leap seconds from the system tz database.
+# This directive must be commented out when using time sources serving
+# leap-smeared time.
+leapsectz right/UTC
diff --git a/frc971/orin/contents/etc/fstab b/frc971/orin/contents/etc/fstab
new file mode 100644
index 0000000..fd54025
--- /dev/null
+++ b/frc971/orin/contents/etc/fstab
@@ -0,0 +1,8 @@
+# /etc/fstab: static file system information.
+#
+# Use 'blkid' to print the universally unique identifier for a
+# device; this may be used with UUID= as a more robust way to name devices
+# that works even if disks are added and removed. See fstab(5).
+#
+# <file system> <mount point> <type> <options> <dump> <pass>
+/dev/nvme0n1p1 / xfs rw,noatime,discard 0 0
diff --git a/frc971/orin/contents/etc/security/limits.d/rt.conf b/frc971/orin/contents/etc/security/limits.d/rt.conf
new file mode 100644
index 0000000..ad2c08b
--- /dev/null
+++ b/frc971/orin/contents/etc/security/limits.d/rt.conf
@@ -0,0 +1,3 @@
+pi - nice -20
+pi - rtprio 95
+pi - memlock unlimited
diff --git a/frc971/orin/contents/etc/sudoers b/frc971/orin/contents/etc/sudoers
new file mode 100644
index 0000000..4ce0b30
--- /dev/null
+++ b/frc971/orin/contents/etc/sudoers
@@ -0,0 +1,27 @@
+#
+# This file MUST be edited with the 'visudo' command as root.
+#
+# Please consider adding local content in /etc/sudoers.d/ instead of
+# directly modifying this file.
+#
+# See the man page for details on how to write a sudoers file.
+#
+Defaults env_reset
+Defaults mail_badpass
+Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
+
+# Host alias specification
+
+# User alias specification
+
+# Cmnd alias specification
+
+# User privilege specification
+root ALL=(ALL:ALL) ALL
+
+# Allow members of group sudo to execute any command
+%sudo ALL=NOPASSWD: ALL
+
+# See sudoers(5) for more information on "@include" directives:
+
+@includedir /etc/sudoers.d
diff --git a/frc971/orin/contents/etc/sysctl.d/sctp.conf b/frc971/orin/contents/etc/sysctl.d/sctp.conf
new file mode 100644
index 0000000..1fcf2ca
--- /dev/null
+++ b/frc971/orin/contents/etc/sysctl.d/sctp.conf
@@ -0,0 +1,4 @@
+# https://wwwx.cs.unc.edu/~sparkst/howto/network_tuning.php
+# Make the buffers big enough for an image
+net.core.wmem_max=8388608
+net.core.rmem_max=8388608
diff --git a/frc971/orin/contents/etc/systemd/logind.conf b/frc971/orin/contents/etc/systemd/logind.conf
new file mode 100644
index 0000000..17ced30
--- /dev/null
+++ b/frc971/orin/contents/etc/systemd/logind.conf
@@ -0,0 +1,36 @@
+# This file is part of systemd.
+#
+# systemd is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public License as published by
+# the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+#
+# See logind.conf(5) for details.
+
+[Login]
+#NAutoVTs=6
+#ReserveVT=6
+#KillUserProcesses=no
+#KillOnlyUsers=
+#KillExcludeUsers=root
+#InhibitDelayMaxSec=5
+#HandlePowerKey=poweroff
+#HandleSuspendKey=suspend
+#HandleHibernateKey=hibernate
+#HandleLidSwitch=suspend
+#HandleLidSwitchExternalPower=suspend
+#HandleLidSwitchDocked=ignore
+#PowerKeyIgnoreInhibited=no
+#SuspendKeyIgnoreInhibited=no
+#HibernateKeyIgnoreInhibited=no
+#LidSwitchIgnoreInhibited=yes
+#HoldoffTimeoutSec=30s
+#IdleAction=ignore
+#IdleActionSec=30min
+#RuntimeDirectorySize=10%
+
+# We don't want systemd removing IPC. This makes it so nothing new can talk to
+# existing channels.
+RemoveIPC=no
+#InhibitorsMax=8192
+#SessionsMax=8192
diff --git a/frc971/orin/contents/etc/systemd/network/80-can.network b/frc971/orin/contents/etc/systemd/network/80-can.network
new file mode 100644
index 0000000..e75db33
--- /dev/null
+++ b/frc971/orin/contents/etc/systemd/network/80-can.network
@@ -0,0 +1,9 @@
+[Match]
+Name=can0
+
+[CAN]
+BitRate=1M
+DataBitRate=8M
+RestartSec=1000ms
+BusErrorReporting=yes
+FDMode=yes
diff --git a/frc971/orin/contents/etc/systemd/network/eth0.network b/frc971/orin/contents/etc/systemd/network/eth0.network
new file mode 100644
index 0000000..8bfaf61
--- /dev/null
+++ b/frc971/orin/contents/etc/systemd/network/eth0.network
@@ -0,0 +1,11 @@
+[Match]
+Name=eth0
+
+[Network]
+Address=10.9.71.20/24
+Gateway=10.9.71.13
+DNS=8.8.8.8
+
+# ipv6 adds an extra 10 seconds to boot, and we don't use it...
+# Disable all the route discovery and stuff
+LinkLocalAddressing=no
diff --git a/frc971/orin/contents/etc/systemd/system/grow-rootfs.service b/frc971/orin/contents/etc/systemd/system/grow-rootfs.service
new file mode 100644
index 0000000..5ab3803
--- /dev/null
+++ b/frc971/orin/contents/etc/systemd/system/grow-rootfs.service
@@ -0,0 +1,19 @@
+[Unit]
+Description=Grow partition and filesystem to fit disk
+DefaultDependencies=no
+Before=local-fs.target
+Before=shutdown.target
+After=-.mount
+BindsTo=-.mount
+
+# Backport of <https://github.com/systemd/systemd/pull/14618>.
+After=systemd-remount-fs.service
+
+[Service]
+Type=oneshot
+ExecStart=/bin/bash -c "/sbin/xfs_growfs $(systemctl show --property What --value -- -.mount)"
+TimeoutSec=0
+RemainAfterExit=yes
+
+[Install]
+WantedBy=multi-user.target
diff --git a/frc971/orin/contents/etc/systemd/system/usb-mount@.service b/frc971/orin/contents/etc/systemd/system/usb-mount@.service
new file mode 100644
index 0000000..934d456
--- /dev/null
+++ b/frc971/orin/contents/etc/systemd/system/usb-mount@.service
@@ -0,0 +1,7 @@
+[Unit]
+Description=Mount USB Drive on %i
+[Service]
+Type=oneshot
+RemainAfterExit=true
+ExecStart=/usr/bin/pmount --umask 000 /dev/%i /media/%i
+ExecStop=/usr/bin/pumount /dev/%i
diff --git a/frc971/orin/contents/home/pi/.ssh/authorized_keys b/frc971/orin/contents/home/pi/.ssh/authorized_keys
new file mode 100644
index 0000000..58b82cc
--- /dev/null
+++ b/frc971/orin/contents/home/pi/.ssh/authorized_keys
@@ -0,0 +1,21 @@
+ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDI002gCm4aRVrIcg2G4/qF4D1oNY74HFFAHjNUIgvrmqSEn+Oy+pxigpJFiZZaJMJpaw4kpd1IEpZxhooZm4DC4/bVV3wAFTw/OJI7D75WgrRrBRHd95TMBwYyNUhoDOcPAoZ69+IL9P0rhmNjgCv6Y+3PG+Rl6IqRPuf3dXX/PT3E/h8B18PRkEnas/3WTW8goov6x10kVAa5I+iQansiyAbPQF7E+Q5mpsnl26V2vpHo1UAk7y+TD7jqifEn13TmLeTkDXmaIOflQeOBMAdErftuqrClPa00VbejP18v02RI/jOIAQ250g0hN3zvKi2eNHUPdAzlMB4cSvZspRrB /home/austin/.ssh/id_rsa
+
+ssh-rsa-cert-v01@openssh.com AAAAHHNzaC1yc2EtY2VydC12MDFAb3BlbnNzaC5jb20AAAAgzaqXNuB589EgR6/ljdYhp5Ca+B8eimCTmmC23oQvNyIAAAADAQABAAABAQDI002gCm4aRVrIcg2G4/qF4D1oNY74HFFAHjNUIgvrmqSEn+Oy+pxigpJFiZZaJMJpaw4kpd1IEpZxhooZm4DC4/bVV3wAFTw/OJI7D75WgrRrBRHd95TMBwYyNUhoDOcPAoZ69+IL9P0rhmNjgCv6Y+3PG+Rl6IqRPuf3dXX/PT3E/h8B18PRkEnas/3WTW8goov6x10kVAa5I+iQansiyAbPQF7E+Q5mpsnl26V2vpHo1UAk7y+TD7jqifEn13TmLeTkDXmaIOflQeOBMAdErftuqrClPa00VbejP18v02RI/jOIAQ250g0hN3zvKi2eNHUPdAzlMB4cSvZspRrBAAAAAAAAAAAAAAABAAAAHmF1c3Rpbi5zY2h1aEBibHVlcml2ZXJ0ZWNoLmNvbQAAAA8AAAADYnJ0AAAABHJvb3QAAAAAWGi3PAAAAABjhSpmAAAAAAAAAIIAAAAVcGVybWl0LVgxMS1mb3J3YXJkaW5nAAAAAAAAABdwZXJtaXQtYWdlbnQtZm9yd2FyZGluZwAAAAAAAAAWcGVybWl0LXBvcnQtZm9yd2FyZGluZwAAAAAAAAAKcGVybWl0LXB0eQAAAAAAAAAOcGVybWl0LXVzZXItcmMAAAAAAAAAAAAAAKwAAAATZWNkc2Etc2hhMi1uaXN0cDUyMQAAAAhuaXN0cDUyMQAAAIUEANvRmN8fXmKOO6xQPsllgbHxX+hvP4sU8/ayxw1K9C2MlGT3OKPgnjWEmvEPgpPR+/YQ6asQnP+jucdgCM8q7+c4ATwFnMO7yl2LCU1UkCKShzoumXflKC9rWNVT6MY4PTbpQXui5XE0gIZrjKrkcfCGjvRouUasM/C5Zro/aGQFkL6XAAAApwAAABNlY2RzYS1zaGEyLW5pc3RwNTIxAAAAjAAAAEIAswnueuP8iT7Qbzr1yBx6tLbNY9jewA6NEkLnFJtu11VzBFFaLWxeXwKPy3ajT0DCzt6EX6YKBHfYngnzdyjP9KkAAABCAWsxaA9D59ToYmbEKT//85dczH397v6As8WeQMAMzKfJYVSJBceHiwt6EbRKd6m+xUsd/Sr4Bj/Eu2VvwplqCpOq /home/austin/.ssh/id_rsa
+
+ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDLyVTxr8s3kjz+PEjEymgwC8o64IZgBRJbtq9HZ16ufEHqxCD6WK21v8XsbAyTo3/vIfiae+SxhZTC9PMA1AQXuXCBTcvH1avHlHNPgnfxOfzNpU5LSZx/hqrx9tJ+ELV6m34XUbAhIhXJSyiPE2Mst8et6XUvXLgQ8hr0vwXZ3jitI0WzdoZE2svQhn/Cw+NnFiIyhVm4VTnw0bo5XVvvCawvZdTWsyXIvYx9P7rJ5Kvr1eJTZB+tDynzEFxJZeC+lnE6kV8NudC/7hLwwn1Uvqon17Z4P8ukxDsaD2Y4a2v0zqqN0FkEAKjhcqRWdyHM2JOeygRJa1sABNzt4gJB austin@ASchuh-T480s
+
+ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDDs88Uby+A7k69WSUXp6wmDrsIIFib5bsJ/0oHdjRWSZc4gHVGVF4cFCIJsjvuiQ3LlQ1vVb4ot7kXDNhPWEENRiuMVN3bovTr0fIjSi+YzhidIUZV44LhIkf2XorjpBjfdKE8YyZgYU0wway6myLijoEy6UnLaYerFjUh0k0p+R/axNtD48Glge82pvihosNt4J4592PGbfoTg7hgPizz4Yp39MtYN0OAqHDSrthU/ceA97prMo9tugozHthDasNAb1u/KiOr86dswLiGhwfM0aWAStIu+jie8fKzFtPFFvCyeEaGTYJ/nKiTq2qX2VNLk2zoqXoP6OPHTztejMtRyuRZxx3+mwhDT1lwUQx/ZsFqMTuIOjGQjpzQg3/Q2Y7rnSeQmgc5LglzaH5SRQ7i3nXJvDm1akdHRFFjarBw9Pb2p8DsDaTmJ6gpoEFqZZa1RM5ZCab8bL9z0pHBdpqhIXcPflDQE7Qi8win+LlWBwFyjhu5PvNnAKFEv6uQC1M= austin@aschuh-3950x
+
+ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDONITvwkh8whp/ac9mhqIk+H4JV7gHIO6OYiOeJfd8mJGAKbox6JNPsnZ2Yewse9oc+MDKZ+dyLqBsfIVG0MUh96hJZHwIYW6wObcZt7Zj6c+JzbAQNavWltsu0IIA7wVrdz2qOXLuH3MhM5URP29IsmF9EUp2H1/iRUMlwz3+1GckYWmiJl+JKNct1DofJb4RdbY2iG34QgS6FvLEKZBxGYPboPD0DLylymdAZAq2TjCcngiq+5BWmy79BLoA2xwJjiz1WPbSILIygfX6e85FGf9ZskylfgHcltAP4xrg3ci7ygJZSw7rd37pV6PfxOz4vGmA7ROT+ocbkXtzkmGk6Qb8HPqT9uRl9Y2Wm4YQMIrREHvjXtGHePCS6R8rrK6og4U4l6Fn4ghicemoRcQXTeX8RJFN+jCpBmks+P6UbYW8k2424kVhNMHz2sHT+BU5Klz9HQvcqlCqupqiPT6HF/gzMZgMHAf2Dp17CpoDbhkhLmCE1TmFOKqNqHP31fs= milindupadhyay@mdu-brt
+
+ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDNUJEb8hoIboZ+FWUp9OX37xRs6s63pXfkF0Hirka+ovIziorNLxR6BixqD7xkVBwXgyMo+YRRy80eHLX2NoItoRLoMfT4uqhu/izdidLcUrpYicAxMIi1pCi1SS5BcKCHbyEqS5FrHzea+0dhIeemb1EP2NXxTDlFUINTni/Aw0z8bB3UI0tY0+K8zypuDKohL9tWOOln6e0VirhPhSCpfs89959jhmeI7Al1DuyZw1vfcaVgQ/7W59rHqP8RNcziMrwwt5hCMQQRxEu4Dd11jBiLklS+wLBI8exP/aEVXGwwc6D/zhg2zma4wQ7HuivZF+sMrP4T1RlLMK3ngbMX james@hp-debian
+
+ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCaElJXdu6YMo7n32jAYXVPW9HKdp2vbE1BcKz+hqZDiIpMtIwmyu+KQD7XHOfkDrDLlsKRRnEvAKAhE+Q5apHdVwnR70h79khBjvRZqXBt+lip3GyGBuymE6+2bAL6zMnZ6oKBvKcPRdIUEbv1jvJV4SfCERGp0/yQxlf/h+yy2pGTEV2iGZerfYBDIyggDzrhjEeiFUL7In4kR2dQId/BPlzZx9AVIdF6CIY7MnfsPBZUkrk9XQrCJOxzN2gGPLdan3DMCp1o2K93dvojl4dQguphanwOdw8wm+wlMiucY/buHgqqbS0EFOz/taQDBFfQ2v7ckht5CFvCY56YpGFaVW7ztf7OYbU6t8LS3dsoN8+rAesBe9fJhJWR/0zFIAM7WW6j95Sppikqh0ZcaQK2/eMKFqn8R7K9zJ20BOI+QYGNnLvIVXlFzRt0/Qy/GczhejpJddwK9zbYxVKJyMNpVz3ZUlr+nRR2UtlcM+lWe7Kbu3HxTPBNk6vSCXPE+Pc= ravago@rjmacAir
+
+ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDSB1Nji8HEfnQX6E2FIfyvolrlihiBKukyLMA5isJhtvdaOXVOrSilpd91wB+ljLOfDy+4XWK4+8p84tvggdfvJdsLRtSBhExJNqe2ViyfUqh0O61lZg4Yvw6DGFEdS+DrqIkZh1v3WQ1Py1Mpt5V18dSu42DttHCigXFnYlpZfx9n4QT6GphkWYE3hLWHQH3uSkujzgkr86WreUi4idRDmq/r21H/MBx4q3uwWuftLS6oX79y7aukpieopeoWN8WUNscwUpUpmAn6rdFe/IHl0u8Zw4wmXoYSIQErFGsOK/rA3nKuK0uvVvUQkVKBZpjMOAAuaLugu9NYsOgqIZf/ filip@Filips-MacBook-Pro.local
+
+ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILZrP0on5xPZHadvlMN2/+iZzEbIeGpS5MT5hXfb+kP0 uid@pop-os
+
+ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC+t3HrUbZb9P/zWw9+qH9i8HBcCBRO6BS0rYZMz3UuXFSxhLendcqmAJQ+cu1lI0sb2HAyIhv4d5CQrjZ2en/ZyN93DThWNRWA+iH+ybkJhpUiRVSa/e1rz06o//kL+PVoZEHRUpyy7iJgEgcRxnVZd90baMkkm51bF0NSVn+iGCIao76VS+PBGwtQFghJyAvTz+w/hLYmFtXnY2DRfPvbw8H3cehvDhUBY9V+MUwucMU38Yfucr/BguPyw/sRFzRJtpIzP+JFQZzy/Bz4DI06vIWBps6NZqGo+ETXsrlEmNRKXgp3YWMZg/VcT6IIi9NijtDt6gHNDLfxX1Q41cYErBIaUpDKWPpGJ9z+/FxtxxBHwhIQPzSvdxqgsoGKyy7rFfWOPqWHzASsAcdx8V0EPIL4VmJQOd461WRfZxAhDdo2hQe37joRjcHW2i1nJcpVSepMf7EJH/AoYcifp+b+JUpMZx79HmKtE1cua2JcfZ6b20w7rQzLIP3M2WvrDak= deepachainani@Yashs-MBP
+
+ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDG+8q7VDZv1bI2s/LDLZvjX4HInQobPF9QfBi8sNJdu98drWzSIlTIRMfOFuN8Vbq2E/wr6eKXOUwq/Brxu4sZ6+po6+sT6IqyE5cd+FffNJXZUc+QxXC6maD20i7k8gNJuo+BRa6VbSR25WarRoGT+pYl03jbhR304Wn8wIYIS5cAfaP2wzwNPOvCZzzwJrba2jeoeVWRUTuqLRAw4NNq5eZskdpv7w/3qw901z7RKzuTfYiAnvsRm8o6E0uRncyujzvXoXD2jyWdKC/boIv/l1Is/XwsSJahq1NIK3y95jZHoUXpDQsq49U0wOByBpKEyQYcI54nhfwYagVsYRY9 jim.o@bluerivert.com
diff --git a/frc971/orin/contents/root/bin/change_hostname.sh b/frc971/orin/contents/root/bin/change_hostname.sh
new file mode 100755
index 0000000..785903e
--- /dev/null
+++ b/frc971/orin/contents/root/bin/change_hostname.sh
@@ -0,0 +1,55 @@
+#!/bin/bash
+
+set -xeuo pipefail
+
+HOSTNAME="$1"
+
+# TODO<Jim>: Should probably add handling for imu hostname, too
+if [[ ! "${HOSTNAME}" =~ ^pi-[0-9]*-[0-9]$ ]]; then
+ echo "Invalid hostname ${HOSTNAME}, needs to be pi-[team#]-[pi#]"
+ exit 1
+fi
+
+TEAM_NUMBER="$(echo ${HOSTNAME} | sed 's/pi-\(.*\)-.*/\1/')"
+PI_NUMBER="$(echo ${HOSTNAME} | sed 's/pi-.*-\(.*\)/\1/')"
+IP_BASE="$(echo ${TEAM_NUMBER} | sed 's/\(.*\)\(..\)/10.\1.\2/')"
+IP="${IP_BASE}.$(( 100 + ${PI_NUMBER}))"
+
+echo "Changing to team number ${TEAM_NUMBER}, IP ${IP}"
+
+sed -i "s/^Address=.*$/Address=${IP}\/24/" /etc/systemd/network/eth0.network
+sed -i "s/^Gateway=.*$/Gateway=${IP_BASE}.13/" /etc/systemd/network/eth0.network
+
+echo "${HOSTNAME}" > /etc/hostname
+
+# Make sure a 127.0.* entry exists to make things looking up localhost happy.
+if grep '^127.0.1.1' /etc/hosts > /dev/null;
+then
+ sed -i "s/\(127\.0\.1\.1\t\).*$/\1${HOSTNAME}/" /etc/hosts
+else
+ echo -e "127.0.1.1\t${HOSTNAME}" >> /etc/hosts
+fi
+
+# Put corret team number in pi's IP addresses, or add them if needed
+if grep '^10\.[0-9]*\.[0-9]*\.[0-9]*\s*pi-[0-9]*-[0-9] pi[0-9]$' /etc/hosts >/dev/null ;
+then
+ sed -i "s/^10\.[0-9]*\.[0-9]*\(\.[0-9]*\s*pi-\)[0-9]*\(-[0-9] pi[0-9]\)\(.*\)$/${IP_BASE}\1${TEAM_NUMBER}\2\3/" /etc/hosts
+else
+ for i in {1..6}; do
+ imu=""
+ # Add imu name to pi6. Put space in this string, since extra
+ # spaces otherwise will make the above grep fail
+ if [[ ${i} == 6 ]]; then
+ imu=" imu"
+ fi
+ echo -e "${IP_BASE}.$(( i + 100 ))\tpi-${TEAM_NUMBER}-${i} pi${i}${imu}" >> /etc/hosts
+ done
+fi
+
+# Put correct team number in roborio's address, or add it if missing
+if grep '^10\.[0-9]*\.[0-9]*\.2\s*roborio$' /etc/hosts >/dev/null;
+then
+ sed -i "s/^10\.[0-9]*\.[0-9]*\(\.2\s*roborio\)$/${IP_BASE}\1/" /etc/hosts
+else
+ echo -e "${IP_BASE}.2\troborio" >> /etc/hosts
+fi
diff --git a/frc971/orin/contents/root/trace.sh b/frc971/orin/contents/root/trace.sh
new file mode 100644
index 0000000..4b69b4e
--- /dev/null
+++ b/frc971/orin/contents/root/trace.sh
@@ -0,0 +1,19 @@
+#!/bin/sh
+
+echo 1 > /sys/kernel/debug/tracing/tracing_on
+echo 30720 > /sys/kernel/debug/tracing/buffer_size_kb
+echo 1 > /sys/kernel/debug/tracing/events/tegra_rtcpu/enable
+echo 1 > /sys/kernel/debug/tracing/events/freertos/enable
+echo 2 > /sys/kernel/debug/camrtc/log-level
+echo 1 > /sys/kernel/debug/tracing/events/camera_common/enable
+echo > /sys/kernel/debug/tracing/trace
+
+echo file vi2_fops.c +p > /sys/kernel/debug/dynamic_debug/control
+echo file csi2_fops.c +p > /sys/kernel/debug/dynamic_debug/control
+
+echo file vi4_fops.c +p > /sys/kernel/debug/dynamic_debug/control
+echo file csi.c +p > /sys/kernel/debug/dynamic_debug/control
+echo file csi4_fops.c +p > /sys/kernel/debug/dynamic_debug/control
+echo file nvcsi.c +p > /sys/kernel/debug/dynamic_debug/control
+
+cat /sys/kernel/debug/tracing/trace /sys/kernel/debug/tracing/trace_pipe
diff --git a/frc971/orin/contents/run/systemd/resolve/stub-resolv.conf b/frc971/orin/contents/run/systemd/resolve/stub-resolv.conf
new file mode 100644
index 0000000..fa4bebb
--- /dev/null
+++ b/frc971/orin/contents/run/systemd/resolve/stub-resolv.conf
@@ -0,0 +1,3 @@
+domain lan
+search lan
+nameserver 127.0.0.53
diff --git a/frc971/orin/contents/var/nvidia/nvcam/settings/camera_overrides.isp b/frc971/orin/contents/var/nvidia/nvcam/settings/camera_overrides.isp
new file mode 100644
index 0000000..82363b2
--- /dev/null
+++ b/frc971/orin/contents/var/nvidia/nvcam/settings/camera_overrides.isp
@@ -0,0 +1,1761 @@
+# Char-lite Calibration
+# command: nv_wrapper 0 optical_black_file ..\imx477\outputs\ob.cfg lsc ..\imx477\outputs\lsc.cfg awb ..\imx477\outputs\awb.cfg ccm ..\imx477\outputs\ccm.cfg public_params public_params.cfg out_name ..\imx477\outputs\camera_overrides.isp
+# version: 1.8.0
+# created on: 16-Jul-2020 17:10
+
+#-**************************************************************
+#-* Do not modify
+#-**************************************************************
+#* =============================================================
+#* ISP Configuration Override File
+#* Copyright (c) 2012-2017, NVIDIA CORPORATION. All rights reserved.
+#* Model:model
+#* Integrator:
+#* Part#:
+#* Sensor:sensor
+#* Size:
+#* Version: version
+#* FileName & Location:/data/nvcam/settings/camera_overrides.isp
+#* Updated:Thu Jul 20 19:15:20 2017 PST
+#* =============================================================
+ap15Function.lensShading = TRUE;
+ae.MeanAlg.HigherTarget = 120;
+ae.MeanAlg.LowerTarget = 120;
+ae.MeanAlg.HigherBrightness = 10000;
+ae.MeanAlg.LowerBrightness = 600;
+ae.MeanAlg.SlopFactor = 0.3;
+ae.MeanAlg.MinTailMass = 0.001;
+ae.MeanAlg.CriticalMass = 0.015;
+ae.MeanAlg.ConvergeSpeed = 0.5;
+ae.MaxFstopDeltaPos = 0.4;
+ae.MaxFstopDeltaNeg = 0.5;
+defaults.autoFramerateRange = {7.5, 120.0};
+ae.ApertureStepToFNumberLUT = {2.4};
+ae.ExposureTuningTable.Preview[0] = {2.4, 0.03333, 1.0, 1.0};
+ae.ExposureTuningTable.Preview[1] = {2.4, 0.03333, 2.0, 1.0};
+ae.ExposureTuningTable.Preview[2] = {2.4, 0.03333, 4.0, 1.0};
+ae.ExposureTuningTable.Preview[3] = {2.4, 0.03333, 8.0, 1.0};
+ae.ExposureTuningTable.Preview[4] = {2.4, 0.03333, 8.0, 1.0};
+ae.ExposureTuningTable.Preview[5] = {2.4, 0.06666, 8.0, 1.0};
+ae.ExposureTuningTable.Preview[6] = {2.4, 0.06666, 16.0, 1.0};
+ae.ExposureTuningTable.Preview[6] = {2.4, 0.06666, 22.0, 1.0};
+flicker.ConfidenceThreshold = 32;
+flicker.SuccessFrameCount = 8;
+flicker.FailureFrameCount = 3;
+flicker.CorrectionFreqListEntries = 2;
+flicker.CorrectionFreqList = {100, 120};
+defaults.saturation = 1.0;
+ae.saturation.Preview[0] = {100, 100, 100, 100, 100, 100, 100};
+ae.saturation.Preview[1] = {100, 100, 100, 100, 100, 100, 100};
+ae.saturation.Preview[2] = {100, 100, 100, 100, 100, 100, 100};
+ae.saturation.Preview[3] = {100, 100, 100, 100, 100, 100, 100};
+ae.saturation.Still[0] = {100, 100, 100, 100, 100, 100, 100};
+ae.saturation.Still[1] = {100, 100, 100, 100, 100, 100, 100};
+ae.saturation.Still[2] = {100, 100, 100, 100, 100, 100, 100};
+ae.saturation.Still[3] = {100, 100, 100, 100, 100, 100, 100};
+ae.saturation.Video[0] = {100, 100, 100, 100, 100, 100, 100};
+ae.saturation.Video[1] = {100, 100, 100, 100, 100, 100, 100};
+ae.saturation.Video[2] = {100, 100, 100, 100, 100, 100, 100};
+ae.saturation.Video[3] = {100, 100, 100, 100, 100, 100, 100};
+sharpness.v2.Preview[0] = {3, 3, 5, 5, 5, 5, 5};
+sharpness.v2.Preview[1] = {3, 3, 5, 5, 5, 5, 5};
+sharpness.v2.Preview[2] = {3, 3, 5, 5, 5, 5, 5};
+sharpness.v2.Preview[3] = {3, 3, 5, 5, 5, 5, 5};
+sharpness.v2.Still[0] = {3, 3, 5, 5, 5, 5, 5};
+sharpness.v2.Still[1] = {3, 3, 5, 5, 5, 5, 5};
+sharpness.v2.Still[2] = {3, 3, 5, 5, 5, 5, 5};
+sharpness.v2.Still[3] = {3, 3, 5, 5, 5, 5, 5};
+sharpness.v2.Video[0] = {3, 3, 5, 5, 5, 5, 5};
+sharpness.v2.Video[1] = {3, 3, 5, 5, 5, 5, 5};
+sharpness.v2.Video[2] = {3, 3, 5, 5, 5, 5, 5};
+sharpness.v2.Video[3] = {3, 3, 5, 5, 5, 5, 5};
+tc.Enable=true;
+tc.Version=v2;
+tc.v2.user.presets[0].Gamma.Value=2.4000;
+tc.v2.user.presets[0].UserCurve.Enable=FALSE;
+tc.v2.user.presets[0].UserCurve.Points={ 0.0000, 0.0000, 0.2500, 0.2500, 0.5000, 0.5000, 0.7500, 0.7500, 1.0000, 1.0000 };
+tc.v2.user.presets[0].CurveControl.Enable=TRUE;
+tc.v2.user.presets[0].CurveControl.AdjustHighlights=0.7500;
+tc.v2.user.presets[0].CurveControl.MidtoneBrightness=0.5000;
+tc.v2.user.presets[0].CurveControl.MidtoneContrast=0.5000;
+tc.v2.user.presets[0].CurveControl.AdjustShadows=0.2500;
+tc.v2.user.presets[0].Brightness.Enable=FALSE;
+tc.v2.user.presets[0].Brightness.Value=1.0000;
+tc.v2.user.presets[1].Gamma.Value=2.4000;
+tc.v2.user.presets[1].UserCurve.Enable=FALSE;
+tc.v2.user.presets[1].UserCurve.Points={ 0.0000, 0.0000, 0.2500, 0.2500, 0.5000, 0.5000, 0.7500, 0.7500, 1.0000, 1.0000 };
+tc.v2.user.presets[1].CurveControl.Enable=TRUE;
+tc.v2.user.presets[1].CurveControl.AdjustHighlights=0.7500;
+tc.v2.user.presets[1].CurveControl.MidtoneBrightness=0.5000;
+tc.v2.user.presets[1].CurveControl.MidtoneContrast=0.5000;
+tc.v2.user.presets[1].CurveControl.AdjustShadows=0.2500;
+tc.v2.user.presets[1].Brightness.Enable=FALSE;
+tc.v2.user.presets[1].Brightness.Value=1.0000;
+tc.v2.user.presets[2].Gamma.Value=2.4000;
+tc.v2.user.presets[2].UserCurve.Enable=FALSE;
+tc.v2.user.presets[2].UserCurve.Points={ 0.0000, 0.0000, 0.2500, 0.2500, 0.5000, 0.5000, 0.7500, 0.7500, 1.0000, 1.0000 };
+tc.v2.user.presets[2].CurveControl.Enable=TRUE;
+tc.v2.user.presets[2].CurveControl.AdjustHighlights=0.7500;
+tc.v2.user.presets[2].CurveControl.MidtoneBrightness=0.5000;
+tc.v2.user.presets[2].CurveControl.MidtoneContrast=0.5000;
+tc.v2.user.presets[2].CurveControl.AdjustShadows=0.2500;
+tc.v2.user.presets[2].Brightness.Enable=FALSE;
+tc.v2.user.presets[2].Brightness.Value=1.0000;
+tc.v2.user.presets[3].Gamma.Value=2.4000;
+tc.v2.user.presets[3].UserCurve.Enable=FALSE;
+tc.v2.user.presets[3].UserCurve.Points={ 0.0000, 0.0000, 0.2500, 0.2500, 0.5000, 0.5000, 0.7500, 0.7500, 1.0000, 1.0000 };
+tc.v2.user.presets[3].CurveControl.Enable=TRUE;
+tc.v2.user.presets[3].CurveControl.AdjustHighlights=0.7500;
+tc.v2.user.presets[3].CurveControl.MidtoneBrightness=0.5000;
+tc.v2.user.presets[3].CurveControl.MidtoneContrast=0.5000;
+tc.v2.user.presets[3].CurveControl.AdjustShadows=0.2500;
+tc.v2.user.presets[3].Brightness.Enable=FALSE;
+tc.v2.user.presets[3].Brightness.Value=1.0000;
+tc.v2.user.presets[4].Gamma.Value=2.4000;
+tc.v2.user.presets[4].UserCurve.Enable=FALSE;
+tc.v2.user.presets[4].UserCurve.Points={ 0.0000, 0.0000, 0.2500, 0.2500, 0.5000, 0.5000, 0.7500, 0.7500, 1.0000, 1.0000 };
+tc.v2.user.presets[4].CurveControl.Enable=TRUE;
+tc.v2.user.presets[4].CurveControl.AdjustHighlights=0.7500;
+tc.v2.user.presets[4].CurveControl.MidtoneBrightness=0.5000;
+tc.v2.user.presets[4].CurveControl.MidtoneContrast=0.5000;
+tc.v2.user.presets[4].CurveControl.AdjustShadows=0.2500;
+tc.v2.user.presets[4].Brightness.Enable=FALSE;
+tc.v2.user.presets[4].Brightness.Value=1.0000;
+tc.v2.user.presets[5].Gamma.Value=2.4000;
+tc.v2.user.presets[5].UserCurve.Enable=FALSE;
+tc.v2.user.presets[5].UserCurve.Points={ 0.0000, 0.0000, 0.2500, 0.2500, 0.5000, 0.5000, 0.7500, 0.7500, 1.0000, 1.0000 };
+tc.v2.user.presets[5].CurveControl.Enable=TRUE;
+tc.v2.user.presets[5].CurveControl.AdjustHighlights=0.7500;
+tc.v2.user.presets[5].CurveControl.MidtoneBrightness=0.5000;
+tc.v2.user.presets[5].CurveControl.MidtoneContrast=0.5000;
+tc.v2.user.presets[5].CurveControl.AdjustShadows=0.2500;
+tc.v2.user.presets[5].Brightness.Enable=FALSE;
+tc.v2.user.presets[5].Brightness.Value=1.0000;
+tc.v2.user.presets[6].Gamma.Value=2.4000;
+tc.v2.user.presets[6].UserCurve.Enable=FALSE;
+tc.v2.user.presets[6].UserCurve.Points={ 0.0000, 0.0000, 0.2500, 0.2500, 0.5000, 0.5000, 0.7500, 0.7500, 1.0000, 1.0000 };
+tc.v2.user.presets[6].CurveControl.Enable=TRUE;
+tc.v2.user.presets[6].CurveControl.AdjustHighlights=0.7500;
+tc.v2.user.presets[6].CurveControl.MidtoneBrightness=0.5000;
+tc.v2.user.presets[6].CurveControl.MidtoneContrast=0.5000;
+tc.v2.user.presets[6].CurveControl.AdjustShadows=0.2500;
+tc.v2.user.presets[6].Brightness.Enable=FALSE;
+tc.v2.user.presets[6].Brightness.Value=1.0000;
+tc.v2.user.presets[7].Gamma.Value=2.4000;
+tc.v2.user.presets[7].UserCurve.Enable=FALSE;
+tc.v2.user.presets[7].UserCurve.Points={ 0.0000, 0.0000, 0.2500, 0.2500, 0.5000, 0.5000, 0.7500, 0.7500, 1.0000, 1.0000 };
+tc.v2.user.presets[7].CurveControl.Enable=TRUE;
+tc.v2.user.presets[7].CurveControl.AdjustHighlights=0.7500;
+tc.v2.user.presets[7].CurveControl.MidtoneBrightness=0.5000;
+tc.v2.user.presets[7].CurveControl.MidtoneContrast=0.5000;
+tc.v2.user.presets[7].CurveControl.AdjustShadows=0.2500;
+tc.v2.user.presets[7].Brightness.Enable=FALSE;
+tc.v2.user.presets[7].Brightness.Value=1.0000;
+tc.v2.user.presets[8].Gamma.Value=2.4000;
+tc.v2.user.presets[8].UserCurve.Enable=FALSE;
+tc.v2.user.presets[8].UserCurve.Points={ 0.0000, 0.0000, 0.2500, 0.2500, 0.5000, 0.5000, 0.7500, 0.7500, 1.0000, 1.0000 };
+tc.v2.user.presets[8].CurveControl.Enable=TRUE;
+tc.v2.user.presets[8].CurveControl.AdjustHighlights=0.7500;
+tc.v2.user.presets[8].CurveControl.MidtoneBrightness=0.5000;
+tc.v2.user.presets[8].CurveControl.MidtoneContrast=0.5000;
+tc.v2.user.presets[8].CurveControl.AdjustShadows=0.2500;
+tc.v2.user.presets[8].Brightness.Enable=FALSE;
+tc.v2.user.presets[8].Brightness.Value=1.0000;
+tc.v2.user.UseIndices={ 0, 0, 0, 0, 0, 0, 0, 0, 0 };
+tc.v2.user.FlashUseIndices= { 0, 0, 0, 0, 0, 0, 0, 0, 0 };
+tc.v2.UseAxisX={ 1068.0000, 2136.0000, 9970.0000, 14242.0000 };
+tc.v2.UseAxisY={ 1.0000, 1.0000, 1.0000, 1.0000 };
+tc.v2.FlashUseAxisX={ 1068.0000, 2136.0000, 9970.0000, 14242.0000 };
+tc.v2.FlashUseAxisY={ 1.0000, 1.0000, 1.0000, 1.0000 };
+tc.v2.initStats.brightness=3811;
+tc.v2.initStats.tcdre=1.0;
+flash.IntensityCalibrateEnable = false;
+flash.Led1.FlashLevel[1] = 180;
+flash.Led1.TorchLevel[1] = 100;
+af.module_cal_enable = 0;
+af.settle_time = 30;
+af.inf = 220;
+af.macro = 510;
+af.inf_offset = 0;
+af.macro_offset = 0;
+af.macro_max = 100;
+noiseReduction.v2.MaxValue = 7;
+noiseReduction.v2.Preview[0] = { 1, 2, 3, 5, 6, 7, 7 };
+noiseReduction.v2.Preview[1] = { 1, 2, 3, 5, 6, 7, 7 };
+noiseReduction.v2.Preview[2] = { 1, 2, 3, 5, 6, 7, 7 };
+noiseReduction.v2.Preview[3] = { 1, 2, 3, 5, 6, 7, 7 };
+noiseReduction.v2.Still[0] = { 1, 2, 3, 5, 6, 7, 7 };
+noiseReduction.v2.Still[1] = { 1, 2, 3, 5, 6, 7, 7 };
+noiseReduction.v2.Still[2] = { 1, 2, 3, 5, 6, 7, 7 };
+noiseReduction.v2.Still[3] = { 1, 2, 3, 5, 6, 7, 7 };
+noiseReduction.v2.Video[0] = { 1, 2, 3, 5, 6, 7, 7 };
+noiseReduction.v2.Video[1] = { 1, 2, 3, 5, 6, 7, 7 };
+noiseReduction.v2.Video[2] = { 1, 2, 3, 5, 6, 7, 7 };
+noiseReduction.v2.Video[3] = { 1, 2, 3, 5, 6, 7, 7 };
+noiseReduction.v6.Chroma.Enable = TRUE;
+noiseReduction.v6.Luma.Enable = TRUE;
+noiseReduction.v6.Chroma.GainThreshold = 1.0;
+noiseReduction.v6.Luma.GainThreshold = 2.0;
+noiseReduction.v6.NumSignalConditioningPoints = 7;
+noiseReduction.v6.SignalConditioning[0].Gain = 2;
+noiseReduction.v6.SignalConditioning[0].NoiseBlend = 0.95;
+noiseReduction.v6.SignalConditioning[0].Shaping = 1.0;
+noiseReduction.v6.SignalConditioning[1].Gain = 4;
+noiseReduction.v6.SignalConditioning[1].NoiseBlend = 0.90;
+noiseReduction.v6.SignalConditioning[1].Shaping = 1.0;
+noiseReduction.v6.SignalConditioning[2].Gain = 6;
+noiseReduction.v6.SignalConditioning[2].NoiseBlend = 0.86;
+noiseReduction.v6.SignalConditioning[2].Shaping = 1.0;
+noiseReduction.v6.SignalConditioning[3].Gain = 8;
+noiseReduction.v6.SignalConditioning[3].NoiseBlend = 0.82;
+noiseReduction.v6.SignalConditioning[3].Shaping = 1.0;
+noiseReduction.v6.SignalConditioning[4].Gain = 10;
+noiseReduction.v6.SignalConditioning[4].NoiseBlend = 0.80;
+noiseReduction.v6.SignalConditioning[4].Shaping = 1.0;
+noiseReduction.v6.SignalConditioning[5].Gain = 12;
+noiseReduction.v6.SignalConditioning[5].NoiseBlend = 0.79;
+noiseReduction.v6.SignalConditioning[5].Shaping = 1.0;
+noiseReduction.v6.SignalConditioning[6].Gain = 16;
+noiseReduction.v6.SignalConditioning[6].NoiseBlend = 0.40;
+noiseReduction.v6.SignalConditioning[6].Shaping = 1.0;
+noiseReduction.v6.NumChromaPoints = 7;
+noiseReduction.v6.Chroma[0].Gain = 1;
+noiseReduction.v6.Chroma[0].FilterStrength = 0.03;
+noiseReduction.v6.Chroma[0].Levels = 2;
+noiseReduction.v6.Chroma[0].Scaling = 1.0;
+noiseReduction.v6.Chroma[0].SignalBoost = 1.0;
+noiseReduction.v6.Chroma[1].Gain = 1.1;
+noiseReduction.v6.Chroma[1].FilterStrength = 0.04;
+noiseReduction.v6.Chroma[1].Levels = 2;
+noiseReduction.v6.Chroma[1].Scaling = 1.0;
+noiseReduction.v6.Chroma[1].SignalBoost = 1.0;
+noiseReduction.v6.Chroma[2].Gain = 2;
+noiseReduction.v6.Chroma[2].FilterStrength = 0.06;
+noiseReduction.v6.Chroma[2].Levels = 3;
+noiseReduction.v6.Chroma[2].Scaling = 1.0;
+noiseReduction.v6.Chroma[2].SignalBoost = 1.0;
+noiseReduction.v6.Chroma[3].Gain = 4;
+noiseReduction.v6.Chroma[3].FilterStrength = 0.07;
+noiseReduction.v6.Chroma[3].Levels = 3;
+noiseReduction.v6.Chroma[3].Scaling = 1.0;
+noiseReduction.v6.Chroma[3].SignalBoost = 1.0;
+noiseReduction.v6.Chroma[4].Gain = 6;
+noiseReduction.v6.Chroma[4].FilterStrength = 0.08;
+noiseReduction.v6.Chroma[4].Levels = 3;
+noiseReduction.v6.Chroma[4].Scaling = 1.0;
+noiseReduction.v6.Chroma[4].SignalBoost = 1.0;
+noiseReduction.v6.Chroma[5].Gain = 8;
+noiseReduction.v6.Chroma[5].FilterStrength = 0.09;
+noiseReduction.v6.Chroma[5].Levels = 3;
+noiseReduction.v6.Chroma[5].Scaling = 1.0;
+noiseReduction.v6.Chroma[5].SignalBoost = 1.0;
+noiseReduction.v6.Chroma[6].Gain = 10;
+noiseReduction.v6.Chroma[6].FilterStrength = 0.10;
+noiseReduction.v6.Chroma[6].Levels = 3;
+noiseReduction.v6.Chroma[6].Scaling = 1.0;
+noiseReduction.v6.Chroma[6].SignalBoost = 1.0;
+noiseReduction.v6.NumLumaPoints = 7;
+noiseReduction.v6.Luma[0].Gain = 2;
+noiseReduction.v6.Luma[0].FilterStrength = 0.5;
+noiseReduction.v6.Luma[0].Levels = 1;
+noiseReduction.v6.Luma[0].Scaling = 1.0;
+noiseReduction.v6.Luma[0].SignalBoost = 1.0;
+noiseReduction.v6.Luma[1].Gain = 4;
+noiseReduction.v6.Luma[1].FilterStrength = 0.8;
+noiseReduction.v6.Luma[1].Levels = 1;
+noiseReduction.v6.Luma[1].Scaling = 1.0;
+noiseReduction.v6.Luma[1].SignalBoost = 1.0;
+noiseReduction.v6.Luma[2].Gain = 6;
+noiseReduction.v6.Luma[2].FilterStrength = 1.0;
+noiseReduction.v6.Luma[2].Levels = 1;
+noiseReduction.v6.Luma[2].Scaling = 1.0;
+noiseReduction.v6.Luma[2].SignalBoost = 1.0;
+noiseReduction.v6.Luma[3].Gain = 8;
+noiseReduction.v6.Luma[3].FilterStrength = 1.3;
+noiseReduction.v6.Luma[3].Levels = 1;
+noiseReduction.v6.Luma[3].Scaling = 1.0;
+noiseReduction.v6.Luma[3].SignalBoost = 1.0;
+noiseReduction.v6.Luma[4].Gain = 10;
+noiseReduction.v6.Luma[4].FilterStrength = 1.5;
+noiseReduction.v6.Luma[4].Levels = 1;
+noiseReduction.v6.Luma[4].Scaling = 1.0;
+noiseReduction.v6.Luma[4].SignalBoost = 1.0;
+noiseReduction.v6.Luma[5].Gain = 12;
+noiseReduction.v6.Luma[5].FilterStrength = 1.6;
+noiseReduction.v6.Luma[5].Levels = 1;
+noiseReduction.v6.Luma[5].Scaling = 1.0;
+noiseReduction.v6.Luma[5].SignalBoost = 1.0;
+noiseReduction.v6.Luma[6].Gain = 16;
+noiseReduction.v6.Luma[6].FilterStrength = 0.20;
+noiseReduction.v6.Luma[6].Levels = 1;
+noiseReduction.v6.Luma[6].Scaling = 1.0;
+noiseReduction.v6.Luma[6].SignalBoost = 1.0;
+colorEffects.sepia.param1 = -0.1500;
+colorEffects.sepia.param2 = 0.2000;
+colorEffects.aqua.param1 = 0.3000;
+colorEffects.aqua.param2 = -0.3500;
+colorEffects.solarize.numPoints = 4;
+colorEffects.solarize.point[0] = {0, 0};
+colorEffects.solarize.point[1] = {128, 160};
+colorEffects.solarize.point[2] = {196, 160};
+colorEffects.solarize.point[3] = {256, 0};
+colorEffects.solarize.point[4] = {0, 0};
+colorEffects.solarize.point[5] = {0, 0};
+colorEffects.solarize.point[6] = {0, 0};
+colorEffects.solarize.point[7] = {0, 0};
+colorEffects.solarize.point[8] = {0, 0};
+colorEffects.solarize.point[9] = {0, 0};
+colorEffects.posterize.numPoints = 8;
+colorEffects.posterize.point[0] = {0, 0};
+colorEffects.posterize.point[1] = {54, 0};
+colorEffects.posterize.point[2] = {69, 85};
+colorEffects.posterize.point[3] = {123, 85};
+colorEffects.posterize.point[4] = {138, 170};
+colorEffects.posterize.point[5] = {192, 170};
+colorEffects.posterize.point[6] = {207, 256};
+colorEffects.posterize.point[7] = {256, 256};
+colorEffects.posterize.point[8] = {0, 0};
+colorEffects.posterize.point[9] = {0, 0};
+mwbCCTTint.incandescent = {2950, 0.0};
+mwbCCTTint.fluorescent = {4300, 0.0};
+mwbCCTTint.warmfluorescent = {2940, 0.0};
+mwbCCTTint.daylight = {6100, 0.0};
+mwbCCTTint.cloudy = {7000, 0.0};
+mwbCCTTint.twilight = {10000, 0.0};
+mwbCCTTint.shade = {6550, 0.0};
+lensShading.module_cal_enable = 0;
+awb.module_cal_enable = 0;
+lensShading.falloff_PointsCount = 6;
+lensShading.falloff.Preview[0] = {1.0, 20.0};
+lensShading.falloff.Preview[1] = {2.0, 20.0};
+lensShading.falloff.Preview[2] = {4.0, 20.0};
+lensShading.falloff.Preview[3] = {8.0, 20.0};
+lensShading.falloff.Preview[4] = {16.0, 30.0};
+lensShading.falloff.Preview[5] = {32.0, 30.0};
+lensShading.falloff.Still[0] = {1.0, 20.0};
+lensShading.falloff.Still[1] = {2.0, 20.0};
+lensShading.falloff.Still[2] = {4.0, 20.0};
+lensShading.falloff.Still[3] = {8.0, 20.0};
+lensShading.falloff.Still[4] = {16.0, 30.0};
+lensShading.falloff.Still[5] = {32.0, 30.0};
+lensShading.falloff.Video[0] = {1.0, 20.0};
+lensShading.falloff.Video[1] = {2.0, 20.0};
+lensShading.falloff.Video[2] = {4.0, 20.0};
+lensShading.falloff.Video[3] = {8.0, 20.0};
+lensShading.falloff.Video[4] = {16.0, 30.0};
+lensShading.falloff.Video[5] = {32.0, 30.0};
+#-----------------------------------------------------
+# AWB Parameters
+#-----------------------------------------------------
+
+# AWB
+awb.NumGrayLineSoftClampPoints = 2;
+awb.GrayLineSoftClamp[0] = {0.9268, 0.9268};
+awb.GrayLineSoftClamp[1] = {1.6582, 1.6582};
+awb.GrayLineSoftClamp[2] = {0.0000, 0.0000};
+awb.GrayLineSoftClamp[3] = {0.0000, 0.0000};
+awb.GrayLineSoftClamp[4] = {0.0000, 0.0000};
+awb.GrayLineSoftClamp[5] = {0.0000, 0.0000};
+awb.GrayLineSoftClamp[6] = {0.0000, 0.0000};
+awb.GrayLineSoftClamp[7] = {0.0000, 0.0000};
+awb.GrayLineSoftClamp[8] = {0.0000, 0.0000};
+awb.GrayLineSoftClamp[9] = {0.0000, 0.0000};
+awb.GrayLineSoftClamp[10] = {0.0000, 0.0000};
+awb.GrayLineSoftClamp[11] = {0.0000, 0.0000};
+awb.GrayLineSoftClamp[12] = {0.0000, 0.0000};
+awb.GrayLineSoftClamp[13] = {0.0000, 0.0000};
+awb.GrayLineSoftClamp[14] = {0.0000, 0.0000};
+awb.GrayLineSoftClamp[15] = {0.0000, 0.0000};
+awb.GrayLineSoftClampSlopeBeforeFirstPoint = 0.0000;
+awb.GrayLineSoftClampSlopeAfterLastPoint = 0.0000;
+awb.GrayLineThickness = 0.0088;
+awb.HighU = 1.6582;
+awb.LowU = 0.9268;
+awb.v4.NumGrayLineSoftClampPoints = 3;
+awb.v4.GrayLineSoftClamp[0] = {0.9268, 0.9268};
+awb.v4.GrayLineSoftClamp[1] = {0.9268, 0.9268};
+awb.v4.GrayLineSoftClamp[2] = {1.6582, 1.6582};
+awb.v4.GrayLineSoftClamp[3] = {0.0000, 0.0000};
+awb.v4.GrayLineSoftClamp[4] = {0.0000, 0.0000};
+awb.v4.GrayLineSoftClamp[5] = {0.0000, 0.0000};
+awb.v4.GrayLineSoftClamp[6] = {0.0000, 0.0000};
+awb.v4.GrayLineSoftClamp[7] = {0.0000, 0.0000};
+awb.v4.GrayLineSoftClamp[8] = {0.0000, 0.0000};
+awb.v4.GrayLineSoftClamp[9] = {0.0000, 0.0000};
+awb.v4.GrayLineSoftClamp[10] = {0.0000, 0.0000};
+awb.v4.GrayLineSoftClamp[11] = {0.0000, 0.0000};
+awb.v4.GrayLineSoftClamp[12] = {0.0000, 0.0000};
+awb.v4.GrayLineSoftClamp[13] = {0.0000, 0.0000};
+awb.v4.GrayLineSoftClamp[14] = {0.0000, 0.0000};
+awb.v4.GrayLineSoftClamp[15] = {0.0000, 0.0000};
+awb.v4.GrayLineSoftClampSlopeBeforeFirstPoint = 0.0000;
+awb.v4.GrayLineSoftClampSlopeAfterLastPoint = 0.0000;
+awb.v4.GrayLineThickness = 0.0442;
+awb.v4.HighU = 1.6582;
+awb.v4.LowU = 0.9268;
+
+#Lens shading falloff factor
+lensShading.falloff_factor = 20;
+#-**************************************************************************
+#-* Below parameters are calculated from calibration process. Do not edit!
+#-**************************************************************************
+
+# AWB
+awb.GrayLineSlope = -0.9946;
+awb.GrayLineIntercept = 2.4544;
+awb.UtoMIRED = {-330.909004284264, 700.071557556732};
+awb.MIREDtoU = {-0.003021978813, 2.115601414567};
+awb.UtoCCT = {5351.936855019085,-2504.031973940120};
+awb.CCTtoU = {0.000186848243,0.467873975679};
+awb.NumDiscreteLights = 0;
+awb.v4.GrayLineSlope = -0.9946;
+awb.v4.GrayLineIntercept = 2.4544;
+awb.v4.UtoMIRED = {-330.909004284264, 700.071557556732};
+awb.v4.MIREDtoU = {-0.003021978813, 2.115601414567};
+awb.v4.UtoCCT = {5147.548412945803,-2189.798723064104};
+awb.v4.CCTtoU = {0.000194267236,0.425406144322};
+awb.v4.FusionNumLights = 5;
+awb.v4.FusionLights[0] = {224,384,384,135};
+awb.v4.FusionLights[1] = {224,384,384,135};
+awb.v4.FusionLights[2] = {249,594,594,281};
+awb.v4.FusionLights[3] = {227,555,555,253};
+awb.v4.FusionLights[4] = {214,662,662,442};
+awb.v4.FusionInitLight = 4;
+# CCM
+colorCorrection.srgbMatrix[0] = {1.53743000,-0.19831000, 0.05253000};
+colorCorrection.srgbMatrix[1] = {-0.20559000, 1.69073000,-0.45222000};
+colorCorrection.srgbMatrix[2] = {-0.33184000,-0.49242000, 1.39969000};
+# - sensor gain value corresponding to ISO100
+ae.PerChannelGainAdjustment = {1.0, 1.0, 1.0, 1.0};
+
+# Optical Black
+opticalBlack.manualBiasR = 64;
+opticalBlack.manualBiasGR = 64;
+opticalBlack.manualBiasGB = 64;
+opticalBlack.manualBiasB = 64;
+opticalBlack.float.manualBiasR = 0.06256109;
+opticalBlack.float.manualBiasGR = 0.06256109;
+opticalBlack.float.manualBiasGB = 0.06256109;
+opticalBlack.float.manualBiasB = 0.06256109;
+#-----------------------------------------------------
+# Lens Shading Parameters
+ap15Function.lensShading = TRUE;
+
+#-----------------------------------------------------
+
+# Lens Shading Surfaces
+falloff_srfc.controlPoint[0][0] = 0.000000000000;
+falloff_srfc.controlPoint[0][1] = 0.170708874040;
+falloff_srfc.controlPoint[0][2] = 0.340238317593;
+falloff_srfc.controlPoint[0][3] = 0.452085048909;
+falloff_srfc.controlPoint[0][4] = 0.677164760676;
+falloff_srfc.controlPoint[0][5] = 0.677330142506;
+falloff_srfc.controlPoint[0][6] = 0.452002154012;
+falloff_srfc.controlPoint[0][7] = 0.339406304229;
+falloff_srfc.controlPoint[0][8] = 0.170434181672;
+falloff_srfc.controlPoint[0][9] = 0.000000000000;
+falloff_srfc.controlPoint[1][0] = 0.072132534499;
+falloff_srfc.controlPoint[1][1] = 0.296887547258;
+falloff_srfc.controlPoint[1][2] = 0.466416990811;
+falloff_srfc.controlPoint[1][3] = 0.578263722127;
+falloff_srfc.controlPoint[1][4] = 0.803343433894;
+falloff_srfc.controlPoint[1][5] = 0.803508815724;
+falloff_srfc.controlPoint[1][6] = 0.578180827230;
+falloff_srfc.controlPoint[1][7] = 0.465584977447;
+falloff_srfc.controlPoint[1][8] = 0.296612854890;
+falloff_srfc.controlPoint[1][9] = 0.071377962941;
+falloff_srfc.controlPoint[2][0] = 0.167436650479;
+falloff_srfc.controlPoint[2][1] = 0.392191663238;
+falloff_srfc.controlPoint[2][2] = 0.561721106791;
+falloff_srfc.controlPoint[2][3] = 0.673567838107;
+falloff_srfc.controlPoint[2][4] = 0.898647549874;
+falloff_srfc.controlPoint[2][5] = 0.898812931703;
+falloff_srfc.controlPoint[2][6] = 0.673484943209;
+falloff_srfc.controlPoint[2][7] = 0.560889093426;
+falloff_srfc.controlPoint[2][8] = 0.391916970870;
+falloff_srfc.controlPoint[2][9] = 0.166682078921;
+falloff_srfc.controlPoint[3][0] = 0.230173639911;
+falloff_srfc.controlPoint[3][1] = 0.454928652670;
+falloff_srfc.controlPoint[3][2] = 0.624458096222;
+falloff_srfc.controlPoint[3][3] = 0.736304827538;
+falloff_srfc.controlPoint[3][4] = 0.961384539306;
+falloff_srfc.controlPoint[3][5] = 0.961549921135;
+falloff_srfc.controlPoint[3][6] = 0.736221932641;
+falloff_srfc.controlPoint[3][7] = 0.623626082858;
+falloff_srfc.controlPoint[3][8] = 0.454653960301;
+falloff_srfc.controlPoint[3][9] = 0.229419068352;
+falloff_srfc.controlPoint[4][0] = 0.356522103492;
+falloff_srfc.controlPoint[4][1] = 0.581277116251;
+falloff_srfc.controlPoint[4][2] = 0.750806559804;
+falloff_srfc.controlPoint[4][3] = 0.862653291120;
+falloff_srfc.controlPoint[4][4] = 1.087733002887;
+falloff_srfc.controlPoint[4][5] = 1.087898384717;
+falloff_srfc.controlPoint[4][6] = 0.862570396223;
+falloff_srfc.controlPoint[4][7] = 0.749974546440;
+falloff_srfc.controlPoint[4][8] = 0.581002423883;
+falloff_srfc.controlPoint[4][9] = 0.355767531934;
+falloff_srfc.controlPoint[5][0] = 0.356704584387;
+falloff_srfc.controlPoint[5][1] = 0.581459597146;
+falloff_srfc.controlPoint[5][2] = 0.750989040699;
+falloff_srfc.controlPoint[5][3] = 0.862835772015;
+falloff_srfc.controlPoint[5][4] = 1.087915483783;
+falloff_srfc.controlPoint[5][5] = 1.088080865612;
+falloff_srfc.controlPoint[5][6] = 0.862752877118;
+falloff_srfc.controlPoint[5][7] = 0.750157027335;
+falloff_srfc.controlPoint[5][8] = 0.581184904778;
+falloff_srfc.controlPoint[5][9] = 0.355950012829;
+falloff_srfc.controlPoint[6][0] = 0.230082637765;
+falloff_srfc.controlPoint[6][1] = 0.454837650524;
+falloff_srfc.controlPoint[6][2] = 0.624367094077;
+falloff_srfc.controlPoint[6][3] = 0.736213825393;
+falloff_srfc.controlPoint[6][4] = 0.961293537160;
+falloff_srfc.controlPoint[6][5] = 0.961458918989;
+falloff_srfc.controlPoint[6][6] = 0.736130930495;
+falloff_srfc.controlPoint[6][7] = 0.623535080712;
+falloff_srfc.controlPoint[6][8] = 0.454562958156;
+falloff_srfc.controlPoint[6][9] = 0.229328066207;
+falloff_srfc.controlPoint[7][0] = 0.166849337330;
+falloff_srfc.controlPoint[7][1] = 0.391604350089;
+falloff_srfc.controlPoint[7][2] = 0.561133793642;
+falloff_srfc.controlPoint[7][3] = 0.672980524958;
+falloff_srfc.controlPoint[7][4] = 0.898060236726;
+falloff_srfc.controlPoint[7][5] = 0.898225618555;
+falloff_srfc.controlPoint[7][6] = 0.672897630061;
+falloff_srfc.controlPoint[7][7] = 0.560301780278;
+falloff_srfc.controlPoint[7][8] = 0.391329657721;
+falloff_srfc.controlPoint[7][9] = 0.166094765772;
+falloff_srfc.controlPoint[8][0] = 0.071906715933;
+falloff_srfc.controlPoint[8][1] = 0.296661728692;
+falloff_srfc.controlPoint[8][2] = 0.466191172244;
+falloff_srfc.controlPoint[8][3] = 0.578037903561;
+falloff_srfc.controlPoint[8][4] = 0.803117615328;
+falloff_srfc.controlPoint[8][5] = 0.803282997157;
+falloff_srfc.controlPoint[8][6] = 0.577955008663;
+falloff_srfc.controlPoint[8][7] = 0.465359158880;
+falloff_srfc.controlPoint[8][8] = 0.296387036323;
+falloff_srfc.controlPoint[8][9] = 0.071152144374;
+falloff_srfc.controlPoint[9][0] = 0.000000000000;
+falloff_srfc.controlPoint[9][1] = 0.170146049063;
+falloff_srfc.controlPoint[9][2] = 0.339675492615;
+falloff_srfc.controlPoint[9][3] = 0.451522223932;
+falloff_srfc.controlPoint[9][4] = 0.676601935699;
+falloff_srfc.controlPoint[9][5] = 0.676767317528;
+falloff_srfc.controlPoint[9][6] = 0.451439329034;
+falloff_srfc.controlPoint[9][7] = 0.338843479251;
+falloff_srfc.controlPoint[9][8] = 0.169871356694;
+falloff_srfc.controlPoint[9][9] = 0.000000000000;
+lensShading.correction_type.enableWPC = FALSE;
+lensShading.correction_type.enableLSC = TRUE;
+lensShading.ctrlPointsCount = 3;
+lensShading.imageHeight = 3040;
+lensShading.imageWidth = 4056;
+lensShading.leftPatchFactor = 0.25000;
+lensShading.centerPatchFactor = 0.50000;
+lensShading.topPatchFactor = 0.25000;
+lensShading.middlePatchFactor = 0.50000;
+lensShading.ctrlPoints[0].cct = 2856;
+lensShading.ctrlPoints[0].light_family = 1;
+lensShading.ctrlPoints[0].controlPointR[0][0] = 1.134521484375;
+lensShading.ctrlPoints[0].controlPointR[0][1] = 0.960693359375;
+lensShading.ctrlPoints[0].controlPointR[0][2] = 1.151367187500;
+lensShading.ctrlPoints[0].controlPointR[0][3] = 1.100463867188;
+lensShading.ctrlPoints[0].controlPointR[0][4] = 1.139526367188;
+lensShading.ctrlPoints[0].controlPointR[0][5] = 1.077514648438;
+lensShading.ctrlPoints[0].controlPointR[0][6] = 1.081542968750;
+lensShading.ctrlPoints[0].controlPointR[0][7] = 1.109619140625;
+lensShading.ctrlPoints[0].controlPointR[0][8] = 0.838378906250;
+lensShading.ctrlPoints[0].controlPointR[0][9] = 1.468627929688;
+lensShading.ctrlPoints[0].controlPointR[1][0] = 1.025634765625;
+lensShading.ctrlPoints[0].controlPointR[1][1] = 1.146606445313;
+lensShading.ctrlPoints[0].controlPointR[1][2] = 1.111816406250;
+lensShading.ctrlPoints[0].controlPointR[1][3] = 1.135498046875;
+lensShading.ctrlPoints[0].controlPointR[1][4] = 1.042846679688;
+lensShading.ctrlPoints[0].controlPointR[1][5] = 1.204956054688;
+lensShading.ctrlPoints[0].controlPointR[1][6] = 1.078491210938;
+lensShading.ctrlPoints[0].controlPointR[1][7] = 1.197753906250;
+lensShading.ctrlPoints[0].controlPointR[1][8] = 0.818115234375;
+lensShading.ctrlPoints[0].controlPointR[1][9] = 1.154174804688;
+lensShading.ctrlPoints[0].controlPointR[2][0] = 1.112792968750;
+lensShading.ctrlPoints[0].controlPointR[2][1] = 1.075439453125;
+lensShading.ctrlPoints[0].controlPointR[2][2] = 1.148925781250;
+lensShading.ctrlPoints[0].controlPointR[2][3] = 1.136962890625;
+lensShading.ctrlPoints[0].controlPointR[2][4] = 1.143798828125;
+lensShading.ctrlPoints[0].controlPointR[2][5] = 1.107055664063;
+lensShading.ctrlPoints[0].controlPointR[2][6] = 1.113891601563;
+lensShading.ctrlPoints[0].controlPointR[2][7] = 1.111083984375;
+lensShading.ctrlPoints[0].controlPointR[2][8] = 1.073852539063;
+lensShading.ctrlPoints[0].controlPointR[2][9] = 1.022583007813;
+lensShading.ctrlPoints[0].controlPointR[3][0] = 1.095703125000;
+lensShading.ctrlPoints[0].controlPointR[3][1] = 1.097290039063;
+lensShading.ctrlPoints[0].controlPointR[3][2] = 1.140258789063;
+lensShading.ctrlPoints[0].controlPointR[3][3] = 1.126342773438;
+lensShading.ctrlPoints[0].controlPointR[3][4] = 1.130981445313;
+lensShading.ctrlPoints[0].controlPointR[3][5] = 1.116210937500;
+lensShading.ctrlPoints[0].controlPointR[3][6] = 1.117797851563;
+lensShading.ctrlPoints[0].controlPointR[3][7] = 1.092651367188;
+lensShading.ctrlPoints[0].controlPointR[3][8] = 1.078857421875;
+lensShading.ctrlPoints[0].controlPointR[3][9] = 1.041381835938;
+lensShading.ctrlPoints[0].controlPointR[4][0] = 1.107177734375;
+lensShading.ctrlPoints[0].controlPointR[4][1] = 1.159790039063;
+lensShading.ctrlPoints[0].controlPointR[4][2] = 1.095092773438;
+lensShading.ctrlPoints[0].controlPointR[4][3] = 1.141723632813;
+lensShading.ctrlPoints[0].controlPointR[4][4] = 1.090087890625;
+lensShading.ctrlPoints[0].controlPointR[4][5] = 1.096801757813;
+lensShading.ctrlPoints[0].controlPointR[4][6] = 1.114868164063;
+lensShading.ctrlPoints[0].controlPointR[4][7] = 1.161254882813;
+lensShading.ctrlPoints[0].controlPointR[4][8] = 1.033935546875;
+lensShading.ctrlPoints[0].controlPointR[4][9] = 1.079833984375;
+lensShading.ctrlPoints[0].controlPointR[5][0] = 1.095092773438;
+lensShading.ctrlPoints[0].controlPointR[5][1] = 1.094238281250;
+lensShading.ctrlPoints[0].controlPointR[5][2] = 1.160766601563;
+lensShading.ctrlPoints[0].controlPointR[5][3] = 1.147216796875;
+lensShading.ctrlPoints[0].controlPointR[5][4] = 1.112060546875;
+lensShading.ctrlPoints[0].controlPointR[5][5] = 1.165771484375;
+lensShading.ctrlPoints[0].controlPointR[5][6] = 1.118530273438;
+lensShading.ctrlPoints[0].controlPointR[5][7] = 1.082763671875;
+lensShading.ctrlPoints[0].controlPointR[5][8] = 1.109252929688;
+lensShading.ctrlPoints[0].controlPointR[5][9] = 1.014770507813;
+lensShading.ctrlPoints[0].controlPointR[6][0] = 1.158203125000;
+lensShading.ctrlPoints[0].controlPointR[6][1] = 1.112304687500;
+lensShading.ctrlPoints[0].controlPointR[6][2] = 1.166992187500;
+lensShading.ctrlPoints[0].controlPointR[6][3] = 1.148315429688;
+lensShading.ctrlPoints[0].controlPointR[6][4] = 1.166870117188;
+lensShading.ctrlPoints[0].controlPointR[6][5] = 1.145141601563;
+lensShading.ctrlPoints[0].controlPointR[6][6] = 1.122192382813;
+lensShading.ctrlPoints[0].controlPointR[6][7] = 1.142456054688;
+lensShading.ctrlPoints[0].controlPointR[6][8] = 1.010253906250;
+lensShading.ctrlPoints[0].controlPointR[6][9] = 1.154907226563;
+lensShading.ctrlPoints[0].controlPointR[7][0] = 1.243652343750;
+lensShading.ctrlPoints[0].controlPointR[7][1] = 1.133300781250;
+lensShading.ctrlPoints[0].controlPointR[7][2] = 1.146850585938;
+lensShading.ctrlPoints[0].controlPointR[7][3] = 1.158447265625;
+lensShading.ctrlPoints[0].controlPointR[7][4] = 1.169311523438;
+lensShading.ctrlPoints[0].controlPointR[7][5] = 1.160888671875;
+lensShading.ctrlPoints[0].controlPointR[7][6] = 1.123657226563;
+lensShading.ctrlPoints[0].controlPointR[7][7] = 1.081054687500;
+lensShading.ctrlPoints[0].controlPointR[7][8] = 1.047363281250;
+lensShading.ctrlPoints[0].controlPointR[7][9] = 1.225341796875;
+lensShading.ctrlPoints[0].controlPointR[8][0] = 1.191650390625;
+lensShading.ctrlPoints[0].controlPointR[8][1] = 1.046508789063;
+lensShading.ctrlPoints[0].controlPointR[8][2] = 1.124511718750;
+lensShading.ctrlPoints[0].controlPointR[8][3] = 1.161865234375;
+lensShading.ctrlPoints[0].controlPointR[8][4] = 1.163696289063;
+lensShading.ctrlPoints[0].controlPointR[8][5] = 1.153076171875;
+lensShading.ctrlPoints[0].controlPointR[8][6] = 1.125976562500;
+lensShading.ctrlPoints[0].controlPointR[8][7] = 1.067016601563;
+lensShading.ctrlPoints[0].controlPointR[8][8] = 1.066406250000;
+lensShading.ctrlPoints[0].controlPointR[8][9] = 1.251098632813;
+lensShading.ctrlPoints[0].controlPointR[9][0] = 1.592041015625;
+lensShading.ctrlPoints[0].controlPointR[9][1] = 1.106567382813;
+lensShading.ctrlPoints[0].controlPointR[9][2] = 1.173828125000;
+lensShading.ctrlPoints[0].controlPointR[9][3] = 1.132080078125;
+lensShading.ctrlPoints[0].controlPointR[9][4] = 1.157226562500;
+lensShading.ctrlPoints[0].controlPointR[9][5] = 1.137695312500;
+lensShading.ctrlPoints[0].controlPointR[9][6] = 1.100219726563;
+lensShading.ctrlPoints[0].controlPointR[9][7] = 1.160766601563;
+lensShading.ctrlPoints[0].controlPointR[9][8] = 1.062622070313;
+lensShading.ctrlPoints[0].controlPointR[9][9] = 1.739868164063;
+lensShading.ctrlPoints[0].controlPointGR[0][0] = 1.100097656250;
+lensShading.ctrlPoints[0].controlPointGR[0][1] = 1.002075195313;
+lensShading.ctrlPoints[0].controlPointGR[0][2] = 1.099365234375;
+lensShading.ctrlPoints[0].controlPointGR[0][3] = 1.088500976563;
+lensShading.ctrlPoints[0].controlPointGR[0][4] = 1.087158203125;
+lensShading.ctrlPoints[0].controlPointGR[0][5] = 1.086181640625;
+lensShading.ctrlPoints[0].controlPointGR[0][6] = 1.064208984375;
+lensShading.ctrlPoints[0].controlPointGR[0][7] = 1.101684570313;
+lensShading.ctrlPoints[0].controlPointGR[0][8] = 0.797363281250;
+lensShading.ctrlPoints[0].controlPointGR[0][9] = 1.501220703125;
+lensShading.ctrlPoints[0].controlPointGR[1][0] = 1.005615234375;
+lensShading.ctrlPoints[0].controlPointGR[1][1] = 1.123046875000;
+lensShading.ctrlPoints[0].controlPointGR[1][2] = 1.123046875000;
+lensShading.ctrlPoints[0].controlPointGR[1][3] = 1.106079101563;
+lensShading.ctrlPoints[0].controlPointGR[1][4] = 1.078369140625;
+lensShading.ctrlPoints[0].controlPointGR[1][5] = 1.133789062500;
+lensShading.ctrlPoints[0].controlPointGR[1][6] = 1.052612304688;
+lensShading.ctrlPoints[0].controlPointGR[1][7] = 1.211547851563;
+lensShading.ctrlPoints[0].controlPointGR[1][8] = 0.774658203125;
+lensShading.ctrlPoints[0].controlPointGR[1][9] = 1.173461914063;
+lensShading.ctrlPoints[0].controlPointGR[2][0] = 1.088745117188;
+lensShading.ctrlPoints[0].controlPointGR[2][1] = 1.061279296875;
+lensShading.ctrlPoints[0].controlPointGR[2][2] = 1.074218750000;
+lensShading.ctrlPoints[0].controlPointGR[2][3] = 1.102661132813;
+lensShading.ctrlPoints[0].controlPointGR[2][4] = 1.085937500000;
+lensShading.ctrlPoints[0].controlPointGR[2][5] = 1.096435546875;
+lensShading.ctrlPoints[0].controlPointGR[2][6] = 1.085571289063;
+lensShading.ctrlPoints[0].controlPointGR[2][7] = 1.080810546875;
+lensShading.ctrlPoints[0].controlPointGR[2][8] = 1.092163085938;
+lensShading.ctrlPoints[0].controlPointGR[2][9] = 0.992431640625;
+lensShading.ctrlPoints[0].controlPointGR[3][0] = 1.065063476563;
+lensShading.ctrlPoints[0].controlPointGR[3][1] = 1.099609375000;
+lensShading.ctrlPoints[0].controlPointGR[3][2] = 1.099365234375;
+lensShading.ctrlPoints[0].controlPointGR[3][3] = 1.106689453125;
+lensShading.ctrlPoints[0].controlPointGR[3][4] = 1.090698242188;
+lensShading.ctrlPoints[0].controlPointGR[3][5] = 1.088623046875;
+lensShading.ctrlPoints[0].controlPointGR[3][6] = 1.085571289063;
+lensShading.ctrlPoints[0].controlPointGR[3][7] = 1.080322265625;
+lensShading.ctrlPoints[0].controlPointGR[3][8] = 1.042724609375;
+lensShading.ctrlPoints[0].controlPointGR[3][9] = 1.036987304688;
+lensShading.ctrlPoints[0].controlPointGR[4][0] = 1.100708007813;
+lensShading.ctrlPoints[0].controlPointGR[4][1] = 1.085083007813;
+lensShading.ctrlPoints[0].controlPointGR[4][2] = 1.118652343750;
+lensShading.ctrlPoints[0].controlPointGR[4][3] = 1.099121093750;
+lensShading.ctrlPoints[0].controlPointGR[4][4] = 1.078613281250;
+lensShading.ctrlPoints[0].controlPointGR[4][5] = 1.072509765625;
+lensShading.ctrlPoints[0].controlPointGR[4][6] = 1.091186523438;
+lensShading.ctrlPoints[0].controlPointGR[4][7] = 1.120605468750;
+lensShading.ctrlPoints[0].controlPointGR[4][8] = 1.055175781250;
+lensShading.ctrlPoints[0].controlPointGR[4][9] = 1.049072265625;
+lensShading.ctrlPoints[0].controlPointGR[5][0] = 1.065551757813;
+lensShading.ctrlPoints[0].controlPointGR[5][1] = 1.103759765625;
+lensShading.ctrlPoints[0].controlPointGR[5][2] = 1.095458984375;
+lensShading.ctrlPoints[0].controlPointGR[5][3] = 1.116943359375;
+lensShading.ctrlPoints[0].controlPointGR[5][4] = 1.092529296875;
+lensShading.ctrlPoints[0].controlPointGR[5][5] = 1.109741210938;
+lensShading.ctrlPoints[0].controlPointGR[5][6] = 1.088989257813;
+lensShading.ctrlPoints[0].controlPointGR[5][7] = 1.098632812500;
+lensShading.ctrlPoints[0].controlPointGR[5][8] = 1.044067382813;
+lensShading.ctrlPoints[0].controlPointGR[5][9] = 1.027587890625;
+lensShading.ctrlPoints[0].controlPointGR[6][0] = 1.129882812500;
+lensShading.ctrlPoints[0].controlPointGR[6][1] = 1.072387695313;
+lensShading.ctrlPoints[0].controlPointGR[6][2] = 1.142822265625;
+lensShading.ctrlPoints[0].controlPointGR[6][3] = 1.111816406250;
+lensShading.ctrlPoints[0].controlPointGR[6][4] = 1.127075195313;
+lensShading.ctrlPoints[0].controlPointGR[6][5] = 1.117553710938;
+lensShading.ctrlPoints[0].controlPointGR[6][6] = 1.098876953125;
+lensShading.ctrlPoints[0].controlPointGR[6][7] = 1.090087890625;
+lensShading.ctrlPoints[0].controlPointGR[6][8] = 1.019653320313;
+lensShading.ctrlPoints[0].controlPointGR[6][9] = 1.123779296875;
+lensShading.ctrlPoints[0].controlPointGR[7][0] = 1.216796875000;
+lensShading.ctrlPoints[0].controlPointGR[7][1] = 1.040893554688;
+lensShading.ctrlPoints[0].controlPointGR[7][2] = 1.096801757813;
+lensShading.ctrlPoints[0].controlPointGR[7][3] = 1.152221679688;
+lensShading.ctrlPoints[0].controlPointGR[7][4] = 1.105346679688;
+lensShading.ctrlPoints[0].controlPointGR[7][5] = 1.128295898438;
+lensShading.ctrlPoints[0].controlPointGR[7][6] = 1.091186523438;
+lensShading.ctrlPoints[0].controlPointGR[7][7] = 1.113647460938;
+lensShading.ctrlPoints[0].controlPointGR[7][8] = 0.949462890625;
+lensShading.ctrlPoints[0].controlPointGR[7][9] = 1.240234375000;
+lensShading.ctrlPoints[0].controlPointGR[8][0] = 1.189575195313;
+lensShading.ctrlPoints[0].controlPointGR[8][1] = 1.028442382813;
+lensShading.ctrlPoints[0].controlPointGR[8][2] = 1.112915039063;
+lensShading.ctrlPoints[0].controlPointGR[8][3] = 1.089843750000;
+lensShading.ctrlPoints[0].controlPointGR[8][4] = 1.161132812500;
+lensShading.ctrlPoints[0].controlPointGR[8][5] = 1.097900390625;
+lensShading.ctrlPoints[0].controlPointGR[8][6] = 1.094238281250;
+lensShading.ctrlPoints[0].controlPointGR[8][7] = 1.018676757813;
+lensShading.ctrlPoints[0].controlPointGR[8][8] = 1.049926757813;
+lensShading.ctrlPoints[0].controlPointGR[8][9] = 1.245361328125;
+lensShading.ctrlPoints[0].controlPointGR[9][0] = 1.515502929688;
+lensShading.ctrlPoints[0].controlPointGR[9][1] = 1.076782226563;
+lensShading.ctrlPoints[0].controlPointGR[9][2] = 1.101684570313;
+lensShading.ctrlPoints[0].controlPointGR[9][3] = 1.114746093750;
+lensShading.ctrlPoints[0].controlPointGR[9][4] = 1.101440429688;
+lensShading.ctrlPoints[0].controlPointGR[9][5] = 1.131469726563;
+lensShading.ctrlPoints[0].controlPointGR[9][6] = 1.059570312500;
+lensShading.ctrlPoints[0].controlPointGR[9][7] = 1.145385742188;
+lensShading.ctrlPoints[0].controlPointGR[9][8] = 1.019897460938;
+lensShading.ctrlPoints[0].controlPointGR[9][9] = 1.733398437500;
+lensShading.ctrlPoints[0].controlPointGB[0][0] = 1.117187500000;
+lensShading.ctrlPoints[0].controlPointGB[0][1] = 1.017211914063;
+lensShading.ctrlPoints[0].controlPointGB[0][2] = 1.104248046875;
+lensShading.ctrlPoints[0].controlPointGB[0][3] = 1.093139648438;
+lensShading.ctrlPoints[0].controlPointGB[0][4] = 1.103027343750;
+lensShading.ctrlPoints[0].controlPointGB[0][5] = 1.083740234375;
+lensShading.ctrlPoints[0].controlPointGB[0][6] = 1.072387695313;
+lensShading.ctrlPoints[0].controlPointGB[0][7] = 1.144775390625;
+lensShading.ctrlPoints[0].controlPointGB[0][8] = 0.770751953125;
+lensShading.ctrlPoints[0].controlPointGB[0][9] = 1.514770507813;
+lensShading.ctrlPoints[0].controlPointGB[1][0] = 1.018310546875;
+lensShading.ctrlPoints[0].controlPointGB[1][1] = 1.127197265625;
+lensShading.ctrlPoints[0].controlPointGB[1][2] = 1.090209960938;
+lensShading.ctrlPoints[0].controlPointGB[1][3] = 1.122802734375;
+lensShading.ctrlPoints[0].controlPointGB[1][4] = 1.068603515625;
+lensShading.ctrlPoints[0].controlPointGB[1][5] = 1.144165039063;
+lensShading.ctrlPoints[0].controlPointGB[1][6] = 1.074829101563;
+lensShading.ctrlPoints[0].controlPointGB[1][7] = 1.159301757813;
+lensShading.ctrlPoints[0].controlPointGB[1][8] = 0.852539062500;
+lensShading.ctrlPoints[0].controlPointGB[1][9] = 1.158813476563;
+lensShading.ctrlPoints[0].controlPointGB[2][0] = 1.115112304688;
+lensShading.ctrlPoints[0].controlPointGB[2][1] = 1.026489257813;
+lensShading.ctrlPoints[0].controlPointGB[2][2] = 1.140136718750;
+lensShading.ctrlPoints[0].controlPointGB[2][3] = 1.093750000000;
+lensShading.ctrlPoints[0].controlPointGB[2][4] = 1.116455078125;
+lensShading.ctrlPoints[0].controlPointGB[2][5] = 1.094360351563;
+lensShading.ctrlPoints[0].controlPointGB[2][6] = 1.088623046875;
+lensShading.ctrlPoints[0].controlPointGB[2][7] = 1.106933593750;
+lensShading.ctrlPoints[0].controlPointGB[2][8] = 1.067504882813;
+lensShading.ctrlPoints[0].controlPointGB[2][9] = 1.041259765625;
+lensShading.ctrlPoints[0].controlPointGB[3][0] = 1.063110351563;
+lensShading.ctrlPoints[0].controlPointGB[3][1] = 1.118896484375;
+lensShading.ctrlPoints[0].controlPointGB[3][2] = 1.090820312500;
+lensShading.ctrlPoints[0].controlPointGB[3][3] = 1.110229492188;
+lensShading.ctrlPoints[0].controlPointGB[3][4] = 1.095947265625;
+lensShading.ctrlPoints[0].controlPointGB[3][5] = 1.096557617188;
+lensShading.ctrlPoints[0].controlPointGB[3][6] = 1.090942382813;
+lensShading.ctrlPoints[0].controlPointGB[3][7] = 1.093261718750;
+lensShading.ctrlPoints[0].controlPointGB[3][8] = 1.048706054688;
+lensShading.ctrlPoints[0].controlPointGB[3][9] = 1.037231445313;
+lensShading.ctrlPoints[0].controlPointGB[4][0] = 1.107788085938;
+lensShading.ctrlPoints[0].controlPointGB[4][1] = 1.068359375000;
+lensShading.ctrlPoints[0].controlPointGB[4][2] = 1.127197265625;
+lensShading.ctrlPoints[0].controlPointGB[4][3] = 1.099121093750;
+lensShading.ctrlPoints[0].controlPointGB[4][4] = 1.084106445313;
+lensShading.ctrlPoints[0].controlPointGB[4][5] = 1.066650390625;
+lensShading.ctrlPoints[0].controlPointGB[4][6] = 1.100585937500;
+lensShading.ctrlPoints[0].controlPointGB[4][7] = 1.133056640625;
+lensShading.ctrlPoints[0].controlPointGB[4][8] = 1.051391601563;
+lensShading.ctrlPoints[0].controlPointGB[4][9] = 1.067993164063;
+lensShading.ctrlPoints[0].controlPointGB[5][0] = 1.061889648438;
+lensShading.ctrlPoints[0].controlPointGB[5][1] = 1.123413085938;
+lensShading.ctrlPoints[0].controlPointGB[5][2] = 1.090698242188;
+lensShading.ctrlPoints[0].controlPointGB[5][3] = 1.124145507813;
+lensShading.ctrlPoints[0].controlPointGB[5][4] = 1.074584960938;
+lensShading.ctrlPoints[0].controlPointGB[5][5] = 1.134033203125;
+lensShading.ctrlPoints[0].controlPointGB[5][6] = 1.088500976563;
+lensShading.ctrlPoints[0].controlPointGB[5][7] = 1.110351562500;
+lensShading.ctrlPoints[0].controlPointGB[5][8] = 1.036376953125;
+lensShading.ctrlPoints[0].controlPointGB[5][9] = 1.032226562500;
+lensShading.ctrlPoints[0].controlPointGB[6][0] = 1.125488281250;
+lensShading.ctrlPoints[0].controlPointGB[6][1] = 1.076782226563;
+lensShading.ctrlPoints[0].controlPointGB[6][2] = 1.135009765625;
+lensShading.ctrlPoints[0].controlPointGB[6][3] = 1.111694335938;
+lensShading.ctrlPoints[0].controlPointGB[6][4] = 1.130371093750;
+lensShading.ctrlPoints[0].controlPointGB[6][5] = 1.120483398438;
+lensShading.ctrlPoints[0].controlPointGB[6][6] = 1.097290039063;
+lensShading.ctrlPoints[0].controlPointGB[6][7] = 1.094482421875;
+lensShading.ctrlPoints[0].controlPointGB[6][8] = 1.017700195313;
+lensShading.ctrlPoints[0].controlPointGB[6][9] = 1.139282226563;
+lensShading.ctrlPoints[0].controlPointGB[7][0] = 1.214599609375;
+lensShading.ctrlPoints[0].controlPointGB[7][1] = 1.060180664063;
+lensShading.ctrlPoints[0].controlPointGB[7][2] = 1.109130859375;
+lensShading.ctrlPoints[0].controlPointGB[7][3] = 1.139404296875;
+lensShading.ctrlPoints[0].controlPointGB[7][4] = 1.105468750000;
+lensShading.ctrlPoints[0].controlPointGB[7][5] = 1.122070312500;
+lensShading.ctrlPoints[0].controlPointGB[7][6] = 1.092529296875;
+lensShading.ctrlPoints[0].controlPointGB[7][7] = 1.104370117188;
+lensShading.ctrlPoints[0].controlPointGB[7][8] = 0.979003906250;
+lensShading.ctrlPoints[0].controlPointGB[7][9] = 1.221557617188;
+lensShading.ctrlPoints[0].controlPointGB[8][0] = 1.171875000000;
+lensShading.ctrlPoints[0].controlPointGB[8][1] = 1.030273437500;
+lensShading.ctrlPoints[0].controlPointGB[8][2] = 1.096435546875;
+lensShading.ctrlPoints[0].controlPointGB[8][3] = 1.103759765625;
+lensShading.ctrlPoints[0].controlPointGB[8][4] = 1.139770507813;
+lensShading.ctrlPoints[0].controlPointGB[8][5] = 1.121459960938;
+lensShading.ctrlPoints[0].controlPointGB[8][6] = 1.088989257813;
+lensShading.ctrlPoints[0].controlPointGB[8][7] = 1.006225585938;
+lensShading.ctrlPoints[0].controlPointGB[8][8] = 1.081665039063;
+lensShading.ctrlPoints[0].controlPointGB[8][9] = 1.246459960938;
+lensShading.ctrlPoints[0].controlPointGB[9][0] = 1.529052734375;
+lensShading.ctrlPoints[0].controlPointGB[9][1] = 1.055419921875;
+lensShading.ctrlPoints[0].controlPointGB[9][2] = 1.115356445313;
+lensShading.ctrlPoints[0].controlPointGB[9][3] = 1.094238281250;
+lensShading.ctrlPoints[0].controlPointGB[9][4] = 1.119750976563;
+lensShading.ctrlPoints[0].controlPointGB[9][5] = 1.108276367188;
+lensShading.ctrlPoints[0].controlPointGB[9][6] = 1.066284179688;
+lensShading.ctrlPoints[0].controlPointGB[9][7] = 1.156982421875;
+lensShading.ctrlPoints[0].controlPointGB[9][8] = 0.994873046875;
+lensShading.ctrlPoints[0].controlPointGB[9][9] = 1.735473632813;
+lensShading.ctrlPoints[0].controlPointB[0][0] = 1.137939453125;
+lensShading.ctrlPoints[0].controlPointB[0][1] = 1.042846679688;
+lensShading.ctrlPoints[0].controlPointB[0][2] = 1.180297851563;
+lensShading.ctrlPoints[0].controlPointB[0][3] = 1.141113281250;
+lensShading.ctrlPoints[0].controlPointB[0][4] = 1.173828125000;
+lensShading.ctrlPoints[0].controlPointB[0][5] = 1.112426757813;
+lensShading.ctrlPoints[0].controlPointB[0][6] = 1.125732421875;
+lensShading.ctrlPoints[0].controlPointB[0][7] = 1.078247070313;
+lensShading.ctrlPoints[0].controlPointB[0][8] = 0.961303710938;
+lensShading.ctrlPoints[0].controlPointB[0][9] = 1.374267578125;
+lensShading.ctrlPoints[0].controlPointB[1][0] = 1.055786132813;
+lensShading.ctrlPoints[0].controlPointB[1][1] = 1.235839843750;
+lensShading.ctrlPoints[0].controlPointB[1][2] = 1.083984375000;
+lensShading.ctrlPoints[0].controlPointB[1][3] = 1.199096679688;
+lensShading.ctrlPoints[0].controlPointB[1][4] = 1.049316406250;
+lensShading.ctrlPoints[0].controlPointB[1][5] = 1.266479492188;
+lensShading.ctrlPoints[0].controlPointB[1][6] = 1.101318359375;
+lensShading.ctrlPoints[0].controlPointB[1][7] = 1.285400390625;
+lensShading.ctrlPoints[0].controlPointB[1][8] = 0.756103515625;
+lensShading.ctrlPoints[0].controlPointB[1][9] = 1.257324218750;
+lensShading.ctrlPoints[0].controlPointB[2][0] = 1.153320312500;
+lensShading.ctrlPoints[0].controlPointB[2][1] = 1.080078125000;
+lensShading.ctrlPoints[0].controlPointB[2][2] = 1.217041015625;
+lensShading.ctrlPoints[0].controlPointB[2][3] = 1.160156250000;
+lensShading.ctrlPoints[0].controlPointB[2][4] = 1.203247070313;
+lensShading.ctrlPoints[0].controlPointB[2][5] = 1.126708984375;
+lensShading.ctrlPoints[0].controlPointB[2][6] = 1.142700195313;
+lensShading.ctrlPoints[0].controlPointB[2][7] = 1.089965820313;
+lensShading.ctrlPoints[0].controlPointB[2][8] = 1.209228515625;
+lensShading.ctrlPoints[0].controlPointB[2][9] = 0.934448242188;
+lensShading.ctrlPoints[0].controlPointB[3][0] = 1.117187500000;
+lensShading.ctrlPoints[0].controlPointB[3][1] = 1.179565429688;
+lensShading.ctrlPoints[0].controlPointB[3][2] = 1.145507812500;
+lensShading.ctrlPoints[0].controlPointB[3][3] = 1.174682617188;
+lensShading.ctrlPoints[0].controlPointB[3][4] = 1.156982421875;
+lensShading.ctrlPoints[0].controlPointB[3][5] = 1.140625000000;
+lensShading.ctrlPoints[0].controlPointB[3][6] = 1.150268554688;
+lensShading.ctrlPoints[0].controlPointB[3][7] = 1.119018554688;
+lensShading.ctrlPoints[0].controlPointB[3][8] = 1.095703125000;
+lensShading.ctrlPoints[0].controlPointB[3][9] = 1.050292968750;
+lensShading.ctrlPoints[0].controlPointB[4][0] = 1.148681640625;
+lensShading.ctrlPoints[0].controlPointB[4][1] = 1.168457031250;
+lensShading.ctrlPoints[0].controlPointB[4][2] = 1.172363281250;
+lensShading.ctrlPoints[0].controlPointB[4][3] = 1.175781250000;
+lensShading.ctrlPoints[0].controlPointB[4][4] = 1.140258789063;
+lensShading.ctrlPoints[0].controlPointB[4][5] = 1.153076171875;
+lensShading.ctrlPoints[0].controlPointB[4][6] = 1.117553710938;
+lensShading.ctrlPoints[0].controlPointB[4][7] = 1.195678710938;
+lensShading.ctrlPoints[0].controlPointB[4][8] = 1.082275390625;
+lensShading.ctrlPoints[0].controlPointB[4][9] = 1.064575195313;
+lensShading.ctrlPoints[0].controlPointB[5][0] = 1.143920898438;
+lensShading.ctrlPoints[0].controlPointB[5][1] = 1.122070312500;
+lensShading.ctrlPoints[0].controlPointB[5][2] = 1.201904296875;
+lensShading.ctrlPoints[0].controlPointB[5][3] = 1.177368164063;
+lensShading.ctrlPoints[0].controlPointB[5][4] = 1.154907226563;
+lensShading.ctrlPoints[0].controlPointB[5][5] = 1.172485351563;
+lensShading.ctrlPoints[0].controlPointB[5][6] = 1.172729492188;
+lensShading.ctrlPoints[0].controlPointB[5][7] = 1.101928710938;
+lensShading.ctrlPoints[0].controlPointB[5][8] = 1.129638671875;
+lensShading.ctrlPoints[0].controlPointB[5][9] = 1.034912109375;
+lensShading.ctrlPoints[0].controlPointB[6][0] = 1.174804687500;
+lensShading.ctrlPoints[0].controlPointB[6][1] = 1.164306640625;
+lensShading.ctrlPoints[0].controlPointB[6][2] = 1.193359375000;
+lensShading.ctrlPoints[0].controlPointB[6][3] = 1.195312500000;
+lensShading.ctrlPoints[0].controlPointB[6][4] = 1.186523437500;
+lensShading.ctrlPoints[0].controlPointB[6][5] = 1.188598632813;
+lensShading.ctrlPoints[0].controlPointB[6][6] = 1.139160156250;
+lensShading.ctrlPoints[0].controlPointB[6][7] = 1.148437500000;
+lensShading.ctrlPoints[0].controlPointB[6][8] = 1.061401367188;
+lensShading.ctrlPoints[0].controlPointB[6][9] = 1.144042968750;
+lensShading.ctrlPoints[0].controlPointB[7][0] = 1.367065429688;
+lensShading.ctrlPoints[0].controlPointB[7][1] = 1.026977539063;
+lensShading.ctrlPoints[0].controlPointB[7][2] = 1.276733398438;
+lensShading.ctrlPoints[0].controlPointB[7][3] = 1.187011718750;
+lensShading.ctrlPoints[0].controlPointB[7][4] = 1.210571289063;
+lensShading.ctrlPoints[0].controlPointB[7][5] = 1.171508789063;
+lensShading.ctrlPoints[0].controlPointB[7][6] = 1.181274414063;
+lensShading.ctrlPoints[0].controlPointB[7][7] = 1.132690429688;
+lensShading.ctrlPoints[0].controlPointB[7][8] = 1.095703125000;
+lensShading.ctrlPoints[0].controlPointB[7][9] = 1.181762695313;
+lensShading.ctrlPoints[0].controlPointB[8][0] = 1.191650390625;
+lensShading.ctrlPoints[0].controlPointB[8][1] = 1.103515625000;
+lensShading.ctrlPoints[0].controlPointB[8][2] = 1.111938476563;
+lensShading.ctrlPoints[0].controlPointB[8][3] = 1.196655273438;
+lensShading.ctrlPoints[0].controlPointB[8][4] = 1.145141601563;
+lensShading.ctrlPoints[0].controlPointB[8][5] = 1.185913085938;
+lensShading.ctrlPoints[0].controlPointB[8][6] = 1.109375000000;
+lensShading.ctrlPoints[0].controlPointB[8][7] = 1.027221679688;
+lensShading.ctrlPoints[0].controlPointB[8][8] = 1.090820312500;
+lensShading.ctrlPoints[0].controlPointB[8][9] = 1.261230468750;
+lensShading.ctrlPoints[0].controlPointB[9][0] = 1.585205078125;
+lensShading.ctrlPoints[0].controlPointB[9][1] = 1.170654296875;
+lensShading.ctrlPoints[0].controlPointB[9][2] = 1.156127929688;
+lensShading.ctrlPoints[0].controlPointB[9][3] = 1.155395507813;
+lensShading.ctrlPoints[0].controlPointB[9][4] = 1.184204101563;
+lensShading.ctrlPoints[0].controlPointB[9][5] = 1.171875000000;
+lensShading.ctrlPoints[0].controlPointB[9][6] = 1.123291015625;
+lensShading.ctrlPoints[0].controlPointB[9][7] = 1.159790039063;
+lensShading.ctrlPoints[0].controlPointB[9][8] = 1.119750976563;
+lensShading.ctrlPoints[0].controlPointB[9][9] = 1.673583984375;
+lensShading.ctrlPoints[1].cct = 4000;
+lensShading.ctrlPoints[1].light_family = 2;
+lensShading.ctrlPoints[1].controlPointR[0][0] = 1.083862304688;
+lensShading.ctrlPoints[1].controlPointR[0][1] = 0.958007812500;
+lensShading.ctrlPoints[1].controlPointR[0][2] = 1.130615234375;
+lensShading.ctrlPoints[1].controlPointR[0][3] = 1.063964843750;
+lensShading.ctrlPoints[1].controlPointR[0][4] = 1.088989257813;
+lensShading.ctrlPoints[1].controlPointR[0][5] = 1.084594726563;
+lensShading.ctrlPoints[1].controlPointR[0][6] = 1.072143554688;
+lensShading.ctrlPoints[1].controlPointR[0][7] = 1.107177734375;
+lensShading.ctrlPoints[1].controlPointR[0][8] = 0.815429687500;
+lensShading.ctrlPoints[1].controlPointR[0][9] = 1.580322265625;
+lensShading.ctrlPoints[1].controlPointR[1][0] = 0.999633789063;
+lensShading.ctrlPoints[1].controlPointR[1][1] = 1.102416992188;
+lensShading.ctrlPoints[1].controlPointR[1][2] = 1.067504882813;
+lensShading.ctrlPoints[1].controlPointR[1][3] = 1.113647460938;
+lensShading.ctrlPoints[1].controlPointR[1][4] = 1.112670898438;
+lensShading.ctrlPoints[1].controlPointR[1][5] = 1.102416992188;
+lensShading.ctrlPoints[1].controlPointR[1][6] = 1.081298828125;
+lensShading.ctrlPoints[1].controlPointR[1][7] = 1.187500000000;
+lensShading.ctrlPoints[1].controlPointR[1][8] = 0.771728515625;
+lensShading.ctrlPoints[1].controlPointR[1][9] = 1.229492187500;
+lensShading.ctrlPoints[1].controlPointR[2][0] = 1.086914062500;
+lensShading.ctrlPoints[1].controlPointR[2][1] = 1.023315429688;
+lensShading.ctrlPoints[1].controlPointR[2][2] = 1.174926757813;
+lensShading.ctrlPoints[1].controlPointR[2][3] = 1.089599609375;
+lensShading.ctrlPoints[1].controlPointR[2][4] = 1.111572265625;
+lensShading.ctrlPoints[1].controlPointR[2][5] = 1.117797851563;
+lensShading.ctrlPoints[1].controlPointR[2][6] = 1.111450195313;
+lensShading.ctrlPoints[1].controlPointR[2][7] = 1.166137695313;
+lensShading.ctrlPoints[1].controlPointR[2][8] = 1.044799804688;
+lensShading.ctrlPoints[1].controlPointR[2][9] = 1.093383789063;
+lensShading.ctrlPoints[1].controlPointR[3][0] = 1.056518554688;
+lensShading.ctrlPoints[1].controlPointR[3][1] = 1.092895507813;
+lensShading.ctrlPoints[1].controlPointR[3][2] = 1.084472656250;
+lensShading.ctrlPoints[1].controlPointR[3][3] = 1.109375000000;
+lensShading.ctrlPoints[1].controlPointR[3][4] = 1.092895507813;
+lensShading.ctrlPoints[1].controlPointR[3][5] = 1.099609375000;
+lensShading.ctrlPoints[1].controlPointR[3][6] = 1.109252929688;
+lensShading.ctrlPoints[1].controlPointR[3][7] = 1.090209960938;
+lensShading.ctrlPoints[1].controlPointR[3][8] = 1.074584960938;
+lensShading.ctrlPoints[1].controlPointR[3][9] = 1.081420898438;
+lensShading.ctrlPoints[1].controlPointR[4][0] = 1.095581054688;
+lensShading.ctrlPoints[1].controlPointR[4][1] = 1.059204101563;
+lensShading.ctrlPoints[1].controlPointR[4][2] = 1.116210937500;
+lensShading.ctrlPoints[1].controlPointR[4][3] = 1.092895507813;
+lensShading.ctrlPoints[1].controlPointR[4][4] = 1.082519531250;
+lensShading.ctrlPoints[1].controlPointR[4][5] = 1.094360351563;
+lensShading.ctrlPoints[1].controlPointR[4][6] = 1.110229492188;
+lensShading.ctrlPoints[1].controlPointR[4][7] = 1.224975585938;
+lensShading.ctrlPoints[1].controlPointR[4][8] = 0.971557617188;
+lensShading.ctrlPoints[1].controlPointR[4][9] = 1.152832031250;
+lensShading.ctrlPoints[1].controlPointR[5][0] = 1.061035156250;
+lensShading.ctrlPoints[1].controlPointR[5][1] = 1.090332031250;
+lensShading.ctrlPoints[1].controlPointR[5][2] = 1.116821289063;
+lensShading.ctrlPoints[1].controlPointR[5][3] = 1.118408203125;
+lensShading.ctrlPoints[1].controlPointR[5][4] = 1.095092773438;
+lensShading.ctrlPoints[1].controlPointR[5][5] = 1.105590820313;
+lensShading.ctrlPoints[1].controlPointR[5][6] = 1.118774414063;
+lensShading.ctrlPoints[1].controlPointR[5][7] = 1.063232421875;
+lensShading.ctrlPoints[1].controlPointR[5][8] = 1.124145507813;
+lensShading.ctrlPoints[1].controlPointR[5][9] = 1.058837890625;
+lensShading.ctrlPoints[1].controlPointR[6][0] = 1.113281250000;
+lensShading.ctrlPoints[1].controlPointR[6][1] = 1.043212890625;
+lensShading.ctrlPoints[1].controlPointR[6][2] = 1.131225585938;
+lensShading.ctrlPoints[1].controlPointR[6][3] = 1.104370117188;
+lensShading.ctrlPoints[1].controlPointR[6][4] = 1.133911132813;
+lensShading.ctrlPoints[1].controlPointR[6][5] = 1.117553710938;
+lensShading.ctrlPoints[1].controlPointR[6][6] = 1.117431640625;
+lensShading.ctrlPoints[1].controlPointR[6][7] = 1.149169921875;
+lensShading.ctrlPoints[1].controlPointR[6][8] = 1.019775390625;
+lensShading.ctrlPoints[1].controlPointR[6][9] = 1.210449218750;
+lensShading.ctrlPoints[1].controlPointR[7][0] = 1.201782226563;
+lensShading.ctrlPoints[1].controlPointR[7][1] = 1.068115234375;
+lensShading.ctrlPoints[1].controlPointR[7][2] = 1.099975585938;
+lensShading.ctrlPoints[1].controlPointR[7][3] = 1.140380859375;
+lensShading.ctrlPoints[1].controlPointR[7][4] = 1.080566406250;
+lensShading.ctrlPoints[1].controlPointR[7][5] = 1.162231445313;
+lensShading.ctrlPoints[1].controlPointR[7][6] = 1.121337890625;
+lensShading.ctrlPoints[1].controlPointR[7][7] = 1.080932617188;
+lensShading.ctrlPoints[1].controlPointR[7][8] = 1.054565429688;
+lensShading.ctrlPoints[1].controlPointR[7][9] = 1.302734375000;
+lensShading.ctrlPoints[1].controlPointR[8][0] = 1.157836914063;
+lensShading.ctrlPoints[1].controlPointR[8][1] = 0.961791992188;
+lensShading.ctrlPoints[1].controlPointR[8][2] = 1.110351562500;
+lensShading.ctrlPoints[1].controlPointR[8][3] = 1.092651367188;
+lensShading.ctrlPoints[1].controlPointR[8][4] = 1.166992187500;
+lensShading.ctrlPoints[1].controlPointR[8][5] = 1.119873046875;
+lensShading.ctrlPoints[1].controlPointR[8][6] = 1.091552734375;
+lensShading.ctrlPoints[1].controlPointR[8][7] = 1.112548828125;
+lensShading.ctrlPoints[1].controlPointR[8][8] = 1.015258789063;
+lensShading.ctrlPoints[1].controlPointR[8][9] = 1.356323242188;
+lensShading.ctrlPoints[1].controlPointR[9][0] = 1.489013671875;
+lensShading.ctrlPoints[1].controlPointR[9][1] = 1.096069335938;
+lensShading.ctrlPoints[1].controlPointR[9][2] = 1.102050781250;
+lensShading.ctrlPoints[1].controlPointR[9][3] = 1.106079101563;
+lensShading.ctrlPoints[1].controlPointR[9][4] = 1.133422851563;
+lensShading.ctrlPoints[1].controlPointR[9][5] = 1.097045898438;
+lensShading.ctrlPoints[1].controlPointR[9][6] = 1.115844726563;
+lensShading.ctrlPoints[1].controlPointR[9][7] = 1.141357421875;
+lensShading.ctrlPoints[1].controlPointR[9][8] = 1.062133789063;
+lensShading.ctrlPoints[1].controlPointR[9][9] = 1.936035156250;
+lensShading.ctrlPoints[1].controlPointGR[0][0] = 1.063476562500;
+lensShading.ctrlPoints[1].controlPointGR[0][1] = 1.007202148438;
+lensShading.ctrlPoints[1].controlPointGR[0][2] = 1.059814453125;
+lensShading.ctrlPoints[1].controlPointGR[0][3] = 1.056518554688;
+lensShading.ctrlPoints[1].controlPointGR[0][4] = 1.074951171875;
+lensShading.ctrlPoints[1].controlPointGR[0][5] = 1.055541992188;
+lensShading.ctrlPoints[1].controlPointGR[0][6] = 1.048339843750;
+lensShading.ctrlPoints[1].controlPointGR[0][7] = 1.097412109375;
+lensShading.ctrlPoints[1].controlPointGR[0][8] = 0.760375976563;
+lensShading.ctrlPoints[1].controlPointGR[0][9] = 1.566162109375;
+lensShading.ctrlPoints[1].controlPointGR[1][0] = 0.996337890625;
+lensShading.ctrlPoints[1].controlPointGR[1][1] = 1.042358398438;
+lensShading.ctrlPoints[1].controlPointGR[1][2] = 1.114990234375;
+lensShading.ctrlPoints[1].controlPointGR[1][3] = 1.078369140625;
+lensShading.ctrlPoints[1].controlPointGR[1][4] = 1.059204101563;
+lensShading.ctrlPoints[1].controlPointGR[1][5] = 1.084594726563;
+lensShading.ctrlPoints[1].controlPointGR[1][6] = 1.051025390625;
+lensShading.ctrlPoints[1].controlPointGR[1][7] = 1.207519531250;
+lensShading.ctrlPoints[1].controlPointGR[1][8] = 0.743041992188;
+lensShading.ctrlPoints[1].controlPointGR[1][9] = 1.232666015625;
+lensShading.ctrlPoints[1].controlPointGR[2][0] = 1.065307617188;
+lensShading.ctrlPoints[1].controlPointGR[2][1] = 1.065429687500;
+lensShading.ctrlPoints[1].controlPointGR[2][2] = 1.051269531250;
+lensShading.ctrlPoints[1].controlPointGR[2][3] = 1.074707031250;
+lensShading.ctrlPoints[1].controlPointGR[2][4] = 1.070678710938;
+lensShading.ctrlPoints[1].controlPointGR[2][5] = 1.080444335938;
+lensShading.ctrlPoints[1].controlPointGR[2][6] = 1.066772460938;
+lensShading.ctrlPoints[1].controlPointGR[2][7] = 1.076904296875;
+lensShading.ctrlPoints[1].controlPointGR[2][8] = 1.064819335938;
+lensShading.ctrlPoints[1].controlPointGR[2][9] = 1.026000976563;
+lensShading.ctrlPoints[1].controlPointGR[3][0] = 1.040161132813;
+lensShading.ctrlPoints[1].controlPointGR[3][1] = 1.072875976563;
+lensShading.ctrlPoints[1].controlPointGR[3][2] = 1.065917968750;
+lensShading.ctrlPoints[1].controlPointGR[3][3] = 1.080688476563;
+lensShading.ctrlPoints[1].controlPointGR[3][4] = 1.057250976563;
+lensShading.ctrlPoints[1].controlPointGR[3][5] = 1.068481445313;
+lensShading.ctrlPoints[1].controlPointGR[3][6] = 1.069458007813;
+lensShading.ctrlPoints[1].controlPointGR[3][7] = 1.082641601563;
+lensShading.ctrlPoints[1].controlPointGR[3][8] = 1.013916015625;
+lensShading.ctrlPoints[1].controlPointGR[3][9] = 1.064819335938;
+lensShading.ctrlPoints[1].controlPointGR[4][0] = 1.075927734375;
+lensShading.ctrlPoints[1].controlPointGR[4][1] = 1.062500000000;
+lensShading.ctrlPoints[1].controlPointGR[4][2] = 1.084594726563;
+lensShading.ctrlPoints[1].controlPointGR[4][3] = 1.075561523438;
+lensShading.ctrlPoints[1].controlPointGR[4][4] = 1.058227539063;
+lensShading.ctrlPoints[1].controlPointGR[4][5] = 1.040161132813;
+lensShading.ctrlPoints[1].controlPointGR[4][6] = 1.084228515625;
+lensShading.ctrlPoints[1].controlPointGR[4][7] = 1.129028320313;
+lensShading.ctrlPoints[1].controlPointGR[4][8] = 1.037841796875;
+lensShading.ctrlPoints[1].controlPointGR[4][9] = 1.075561523438;
+lensShading.ctrlPoints[1].controlPointGR[5][0] = 1.031005859375;
+lensShading.ctrlPoints[1].controlPointGR[5][1] = 1.084228515625;
+lensShading.ctrlPoints[1].controlPointGR[5][2] = 1.067993164063;
+lensShading.ctrlPoints[1].controlPointGR[5][3] = 1.088256835938;
+lensShading.ctrlPoints[1].controlPointGR[5][4] = 1.037109375000;
+lensShading.ctrlPoints[1].controlPointGR[5][5] = 1.110839843750;
+lensShading.ctrlPoints[1].controlPointGR[5][6] = 1.072387695313;
+lensShading.ctrlPoints[1].controlPointGR[5][7] = 1.089355468750;
+lensShading.ctrlPoints[1].controlPointGR[5][8] = 1.032592773438;
+lensShading.ctrlPoints[1].controlPointGR[5][9] = 1.048095703125;
+lensShading.ctrlPoints[1].controlPointGR[6][0] = 1.088867187500;
+lensShading.ctrlPoints[1].controlPointGR[6][1] = 1.049560546875;
+lensShading.ctrlPoints[1].controlPointGR[6][2] = 1.101440429688;
+lensShading.ctrlPoints[1].controlPointGR[6][3] = 1.084838867188;
+lensShading.ctrlPoints[1].controlPointGR[6][4] = 1.105346679688;
+lensShading.ctrlPoints[1].controlPointGR[6][5] = 1.082641601563;
+lensShading.ctrlPoints[1].controlPointGR[6][6] = 1.086303710938;
+lensShading.ctrlPoints[1].controlPointGR[6][7] = 1.095214843750;
+lensShading.ctrlPoints[1].controlPointGR[6][8] = 1.002319335938;
+lensShading.ctrlPoints[1].controlPointGR[6][9] = 1.155517578125;
+lensShading.ctrlPoints[1].controlPointGR[7][0] = 1.180175781250;
+lensShading.ctrlPoints[1].controlPointGR[7][1] = 1.003051757813;
+lensShading.ctrlPoints[1].controlPointGR[7][2] = 1.097290039063;
+lensShading.ctrlPoints[1].controlPointGR[7][3] = 1.098632812500;
+lensShading.ctrlPoints[1].controlPointGR[7][4] = 1.064941406250;
+lensShading.ctrlPoints[1].controlPointGR[7][5] = 1.135131835938;
+lensShading.ctrlPoints[1].controlPointGR[7][6] = 1.071289062500;
+lensShading.ctrlPoints[1].controlPointGR[7][7] = 1.106689453125;
+lensShading.ctrlPoints[1].controlPointGR[7][8] = 0.937988281250;
+lensShading.ctrlPoints[1].controlPointGR[7][9] = 1.290161132813;
+lensShading.ctrlPoints[1].controlPointGR[8][0] = 1.148437500000;
+lensShading.ctrlPoints[1].controlPointGR[8][1] = 0.993652343750;
+lensShading.ctrlPoints[1].controlPointGR[8][2] = 1.059570312500;
+lensShading.ctrlPoints[1].controlPointGR[8][3] = 1.084960937500;
+lensShading.ctrlPoints[1].controlPointGR[8][4] = 1.137329101563;
+lensShading.ctrlPoints[1].controlPointGR[8][5] = 1.063110351563;
+lensShading.ctrlPoints[1].controlPointGR[8][6] = 1.081542968750;
+lensShading.ctrlPoints[1].controlPointGR[8][7] = 1.033203125000;
+lensShading.ctrlPoints[1].controlPointGR[8][8] = 1.046020507813;
+lensShading.ctrlPoints[1].controlPointGR[8][9] = 1.294311523438;
+lensShading.ctrlPoints[1].controlPointGR[9][0] = 1.435180664063;
+lensShading.ctrlPoints[1].controlPointGR[9][1] = 1.056640625000;
+lensShading.ctrlPoints[1].controlPointGR[9][2] = 1.080322265625;
+lensShading.ctrlPoints[1].controlPointGR[9][3] = 1.072509765625;
+lensShading.ctrlPoints[1].controlPointGR[9][4] = 1.072143554688;
+lensShading.ctrlPoints[1].controlPointGR[9][5] = 1.103027343750;
+lensShading.ctrlPoints[1].controlPointGR[9][6] = 1.054809570313;
+lensShading.ctrlPoints[1].controlPointGR[9][7] = 1.144165039063;
+lensShading.ctrlPoints[1].controlPointGR[9][8] = 0.990600585938;
+lensShading.ctrlPoints[1].controlPointGR[9][9] = 1.867187500000;
+lensShading.ctrlPoints[1].controlPointGB[0][0] = 1.058959960938;
+lensShading.ctrlPoints[1].controlPointGB[0][1] = 1.006103515625;
+lensShading.ctrlPoints[1].controlPointGB[0][2] = 1.062500000000;
+lensShading.ctrlPoints[1].controlPointGB[0][3] = 1.068115234375;
+lensShading.ctrlPoints[1].controlPointGB[0][4] = 1.078125000000;
+lensShading.ctrlPoints[1].controlPointGB[0][5] = 1.072998046875;
+lensShading.ctrlPoints[1].controlPointGB[0][6] = 1.060913085938;
+lensShading.ctrlPoints[1].controlPointGB[0][7] = 1.130493164063;
+lensShading.ctrlPoints[1].controlPointGB[0][8] = 0.752685546875;
+lensShading.ctrlPoints[1].controlPointGB[0][9] = 1.575805664063;
+lensShading.ctrlPoints[1].controlPointGB[1][0] = 1.013305664063;
+lensShading.ctrlPoints[1].controlPointGB[1][1] = 1.072143554688;
+lensShading.ctrlPoints[1].controlPointGB[1][2] = 1.126464843750;
+lensShading.ctrlPoints[1].controlPointGB[1][3] = 1.084350585938;
+lensShading.ctrlPoints[1].controlPointGB[1][4] = 1.074462890625;
+lensShading.ctrlPoints[1].controlPointGB[1][5] = 1.066650390625;
+lensShading.ctrlPoints[1].controlPointGB[1][6] = 1.065429687500;
+lensShading.ctrlPoints[1].controlPointGB[1][7] = 1.163574218750;
+lensShading.ctrlPoints[1].controlPointGB[1][8] = 0.819091796875;
+lensShading.ctrlPoints[1].controlPointGB[1][9] = 1.206420898438;
+lensShading.ctrlPoints[1].controlPointGB[2][0] = 1.064575195313;
+lensShading.ctrlPoints[1].controlPointGB[2][1] = 1.018066406250;
+lensShading.ctrlPoints[1].controlPointGB[2][2] = 1.081787109375;
+lensShading.ctrlPoints[1].controlPointGB[2][3] = 1.066894531250;
+lensShading.ctrlPoints[1].controlPointGB[2][4] = 1.082031250000;
+lensShading.ctrlPoints[1].controlPointGB[2][5] = 1.097167968750;
+lensShading.ctrlPoints[1].controlPointGB[2][6] = 1.069946289063;
+lensShading.ctrlPoints[1].controlPointGB[2][7] = 1.097045898438;
+lensShading.ctrlPoints[1].controlPointGB[2][8] = 1.030029296875;
+lensShading.ctrlPoints[1].controlPointGB[2][9] = 1.057250976563;
+lensShading.ctrlPoints[1].controlPointGB[3][0] = 1.042358398438;
+lensShading.ctrlPoints[1].controlPointGB[3][1] = 1.088012695313;
+lensShading.ctrlPoints[1].controlPointGB[3][2] = 1.060546875000;
+lensShading.ctrlPoints[1].controlPointGB[3][3] = 1.079589843750;
+lensShading.ctrlPoints[1].controlPointGB[3][4] = 1.075683593750;
+lensShading.ctrlPoints[1].controlPointGB[3][5] = 1.061523437500;
+lensShading.ctrlPoints[1].controlPointGB[3][6] = 1.079833984375;
+lensShading.ctrlPoints[1].controlPointGB[3][7] = 1.086181640625;
+lensShading.ctrlPoints[1].controlPointGB[3][8] = 1.037353515625;
+lensShading.ctrlPoints[1].controlPointGB[3][9] = 1.059570312500;
+lensShading.ctrlPoints[1].controlPointGB[4][0] = 1.065307617188;
+lensShading.ctrlPoints[1].controlPointGB[4][1] = 1.032104492188;
+lensShading.ctrlPoints[1].controlPointGB[4][2] = 1.093261718750;
+lensShading.ctrlPoints[1].controlPointGB[4][3] = 1.076416015625;
+lensShading.ctrlPoints[1].controlPointGB[4][4] = 1.058837890625;
+lensShading.ctrlPoints[1].controlPointGB[4][5] = 1.047119140625;
+lensShading.ctrlPoints[1].controlPointGB[4][6] = 1.084350585938;
+lensShading.ctrlPoints[1].controlPointGB[4][7] = 1.123535156250;
+lensShading.ctrlPoints[1].controlPointGB[4][8] = 1.023071289063;
+lensShading.ctrlPoints[1].controlPointGB[4][9] = 1.088134765625;
+lensShading.ctrlPoints[1].controlPointGB[5][0] = 1.045410156250;
+lensShading.ctrlPoints[1].controlPointGB[5][1] = 1.088745117188;
+lensShading.ctrlPoints[1].controlPointGB[5][2] = 1.071166992188;
+lensShading.ctrlPoints[1].controlPointGB[5][3] = 1.085571289063;
+lensShading.ctrlPoints[1].controlPointGB[5][4] = 1.048706054688;
+lensShading.ctrlPoints[1].controlPointGB[5][5] = 1.100830078125;
+lensShading.ctrlPoints[1].controlPointGB[5][6] = 1.077026367188;
+lensShading.ctrlPoints[1].controlPointGB[5][7] = 1.108764648438;
+lensShading.ctrlPoints[1].controlPointGB[5][8] = 1.026245117188;
+lensShading.ctrlPoints[1].controlPointGB[5][9] = 1.050537109375;
+lensShading.ctrlPoints[1].controlPointGB[6][0] = 1.083007812500;
+lensShading.ctrlPoints[1].controlPointGB[6][1] = 1.046142578125;
+lensShading.ctrlPoints[1].controlPointGB[6][2] = 1.093139648438;
+lensShading.ctrlPoints[1].controlPointGB[6][3] = 1.083374023438;
+lensShading.ctrlPoints[1].controlPointGB[6][4] = 1.103271484375;
+lensShading.ctrlPoints[1].controlPointGB[6][5] = 1.090087890625;
+lensShading.ctrlPoints[1].controlPointGB[6][6] = 1.084350585938;
+lensShading.ctrlPoints[1].controlPointGB[6][7] = 1.096679687500;
+lensShading.ctrlPoints[1].controlPointGB[6][8] = 0.999877929688;
+lensShading.ctrlPoints[1].controlPointGB[6][9] = 1.158569335938;
+lensShading.ctrlPoints[1].controlPointGB[7][0] = 1.194213867188;
+lensShading.ctrlPoints[1].controlPointGB[7][1] = 0.993652343750;
+lensShading.ctrlPoints[1].controlPointGB[7][2] = 1.113159179688;
+lensShading.ctrlPoints[1].controlPointGB[7][3] = 1.089599609375;
+lensShading.ctrlPoints[1].controlPointGB[7][4] = 1.090087890625;
+lensShading.ctrlPoints[1].controlPointGB[7][5] = 1.096191406250;
+lensShading.ctrlPoints[1].controlPointGB[7][6] = 1.089965820313;
+lensShading.ctrlPoints[1].controlPointGB[7][7] = 1.106689453125;
+lensShading.ctrlPoints[1].controlPointGB[7][8] = 0.935791015625;
+lensShading.ctrlPoints[1].controlPointGB[7][9] = 1.284179687500;
+lensShading.ctrlPoints[1].controlPointGB[8][0] = 1.118652343750;
+lensShading.ctrlPoints[1].controlPointGB[8][1] = 0.987182617188;
+lensShading.ctrlPoints[1].controlPointGB[8][2] = 1.050781250000;
+lensShading.ctrlPoints[1].controlPointGB[8][3] = 1.075561523438;
+lensShading.ctrlPoints[1].controlPointGB[8][4] = 1.114379882813;
+lensShading.ctrlPoints[1].controlPointGB[8][5] = 1.108764648438;
+lensShading.ctrlPoints[1].controlPointGB[8][6] = 1.055419921875;
+lensShading.ctrlPoints[1].controlPointGB[8][7] = 1.031738281250;
+lensShading.ctrlPoints[1].controlPointGB[8][8] = 1.052490234375;
+lensShading.ctrlPoints[1].controlPointGB[8][9] = 1.282348632813;
+lensShading.ctrlPoints[1].controlPointGB[9][0] = 1.449096679688;
+lensShading.ctrlPoints[1].controlPointGB[9][1] = 1.060302734375;
+lensShading.ctrlPoints[1].controlPointGB[9][2] = 1.064453125000;
+lensShading.ctrlPoints[1].controlPointGB[9][3] = 1.069213867188;
+lensShading.ctrlPoints[1].controlPointGB[9][4] = 1.088012695313;
+lensShading.ctrlPoints[1].controlPointGB[9][5] = 1.073852539063;
+lensShading.ctrlPoints[1].controlPointGB[9][6] = 1.069213867188;
+lensShading.ctrlPoints[1].controlPointGB[9][7] = 1.146728515625;
+lensShading.ctrlPoints[1].controlPointGB[9][8] = 0.974243164063;
+lensShading.ctrlPoints[1].controlPointGB[9][9] = 1.875122070313;
+lensShading.ctrlPoints[1].controlPointB[0][0] = 1.054565429688;
+lensShading.ctrlPoints[1].controlPointB[0][1] = 1.022338867188;
+lensShading.ctrlPoints[1].controlPointB[0][2] = 1.072387695313;
+lensShading.ctrlPoints[1].controlPointB[0][3] = 1.086425781250;
+lensShading.ctrlPoints[1].controlPointB[0][4] = 1.060546875000;
+lensShading.ctrlPoints[1].controlPointB[0][5] = 1.094848632813;
+lensShading.ctrlPoints[1].controlPointB[0][6] = 1.073486328125;
+lensShading.ctrlPoints[1].controlPointB[0][7] = 1.129028320313;
+lensShading.ctrlPoints[1].controlPointB[0][8] = 0.770996093750;
+lensShading.ctrlPoints[1].controlPointB[0][9] = 1.599243164063;
+lensShading.ctrlPoints[1].controlPointB[1][0] = 1.010498046875;
+lensShading.ctrlPoints[1].controlPointB[1][1] = 1.098999023438;
+lensShading.ctrlPoints[1].controlPointB[1][2] = 1.100830078125;
+lensShading.ctrlPoints[1].controlPointB[1][3] = 1.086425781250;
+lensShading.ctrlPoints[1].controlPointB[1][4] = 1.076171875000;
+lensShading.ctrlPoints[1].controlPointB[1][5] = 1.110717773438;
+lensShading.ctrlPoints[1].controlPointB[1][6] = 1.059204101563;
+lensShading.ctrlPoints[1].controlPointB[1][7] = 1.228149414063;
+lensShading.ctrlPoints[1].controlPointB[1][8] = 0.770141601563;
+lensShading.ctrlPoints[1].controlPointB[1][9] = 1.236816406250;
+lensShading.ctrlPoints[1].controlPointB[2][0] = 1.067260742188;
+lensShading.ctrlPoints[1].controlPointB[2][1] = 1.054321289063;
+lensShading.ctrlPoints[1].controlPointB[2][2] = 1.088867187500;
+lensShading.ctrlPoints[1].controlPointB[2][3] = 1.076904296875;
+lensShading.ctrlPoints[1].controlPointB[2][4] = 1.115844726563;
+lensShading.ctrlPoints[1].controlPointB[2][5] = 1.054931640625;
+lensShading.ctrlPoints[1].controlPointB[2][6] = 1.097167968750;
+lensShading.ctrlPoints[1].controlPointB[2][7] = 1.081054687500;
+lensShading.ctrlPoints[1].controlPointB[2][8] = 1.086547851563;
+lensShading.ctrlPoints[1].controlPointB[2][9] = 1.056274414063;
+lensShading.ctrlPoints[1].controlPointB[3][0] = 1.047119140625;
+lensShading.ctrlPoints[1].controlPointB[3][1] = 1.085083007813;
+lensShading.ctrlPoints[1].controlPointB[3][2] = 1.082519531250;
+lensShading.ctrlPoints[1].controlPointB[3][3] = 1.091430664063;
+lensShading.ctrlPoints[1].controlPointB[3][4] = 1.065185546875;
+lensShading.ctrlPoints[1].controlPointB[3][5] = 1.085693359375;
+lensShading.ctrlPoints[1].controlPointB[3][6] = 1.086425781250;
+lensShading.ctrlPoints[1].controlPointB[3][7] = 1.124511718750;
+lensShading.ctrlPoints[1].controlPointB[3][8] = 1.034057617188;
+lensShading.ctrlPoints[1].controlPointB[3][9] = 1.084716796875;
+lensShading.ctrlPoints[1].controlPointB[4][0] = 1.101562500000;
+lensShading.ctrlPoints[1].controlPointB[4][1] = 1.040283203125;
+lensShading.ctrlPoints[1].controlPointB[4][2] = 1.105224609375;
+lensShading.ctrlPoints[1].controlPointB[4][3] = 1.083862304688;
+lensShading.ctrlPoints[1].controlPointB[4][4] = 1.076904296875;
+lensShading.ctrlPoints[1].controlPointB[4][5] = 1.046752929688;
+lensShading.ctrlPoints[1].controlPointB[4][6] = 1.095214843750;
+lensShading.ctrlPoints[1].controlPointB[4][7] = 1.146118164063;
+lensShading.ctrlPoints[1].controlPointB[4][8] = 1.032592773438;
+lensShading.ctrlPoints[1].controlPointB[4][9] = 1.117553710938;
+lensShading.ctrlPoints[1].controlPointB[5][0] = 1.028930664063;
+lensShading.ctrlPoints[1].controlPointB[5][1] = 1.111450195313;
+lensShading.ctrlPoints[1].controlPointB[5][2] = 1.084960937500;
+lensShading.ctrlPoints[1].controlPointB[5][3] = 1.096069335938;
+lensShading.ctrlPoints[1].controlPointB[5][4] = 1.064819335938;
+lensShading.ctrlPoints[1].controlPointB[5][5] = 1.103881835938;
+lensShading.ctrlPoints[1].controlPointB[5][6] = 1.091796875000;
+lensShading.ctrlPoints[1].controlPointB[5][7] = 1.100708007813;
+lensShading.ctrlPoints[1].controlPointB[5][8] = 1.072753906250;
+lensShading.ctrlPoints[1].controlPointB[5][9] = 1.058105468750;
+lensShading.ctrlPoints[1].controlPointB[6][0] = 1.100830078125;
+lensShading.ctrlPoints[1].controlPointB[6][1] = 1.057128906250;
+lensShading.ctrlPoints[1].controlPointB[6][2] = 1.108032226563;
+lensShading.ctrlPoints[1].controlPointB[6][3] = 1.095703125000;
+lensShading.ctrlPoints[1].controlPointB[6][4] = 1.102416992188;
+lensShading.ctrlPoints[1].controlPointB[6][5] = 1.102416992188;
+lensShading.ctrlPoints[1].controlPointB[6][6] = 1.101318359375;
+lensShading.ctrlPoints[1].controlPointB[6][7] = 1.127319335938;
+lensShading.ctrlPoints[1].controlPointB[6][8] = 1.002929687500;
+lensShading.ctrlPoints[1].controlPointB[6][9] = 1.188842773438;
+lensShading.ctrlPoints[1].controlPointB[7][0] = 1.173461914063;
+lensShading.ctrlPoints[1].controlPointB[7][1] = 1.100463867188;
+lensShading.ctrlPoints[1].controlPointB[7][2] = 1.071166992188;
+lensShading.ctrlPoints[1].controlPointB[7][3] = 1.115844726563;
+lensShading.ctrlPoints[1].controlPointB[7][4] = 1.096313476563;
+lensShading.ctrlPoints[1].controlPointB[7][5] = 1.147949218750;
+lensShading.ctrlPoints[1].controlPointB[7][6] = 1.094238281250;
+lensShading.ctrlPoints[1].controlPointB[7][7] = 1.166992187500;
+lensShading.ctrlPoints[1].controlPointB[7][8] = 0.900268554688;
+lensShading.ctrlPoints[1].controlPointB[7][9] = 1.378295898438;
+lensShading.ctrlPoints[1].controlPointB[8][0] = 1.127197265625;
+lensShading.ctrlPoints[1].controlPointB[8][1] = 0.955200195313;
+lensShading.ctrlPoints[1].controlPointB[8][2] = 1.065795898438;
+lensShading.ctrlPoints[1].controlPointB[8][3] = 1.076049804688;
+lensShading.ctrlPoints[1].controlPointB[8][4] = 1.104248046875;
+lensShading.ctrlPoints[1].controlPointB[8][5] = 1.072021484375;
+lensShading.ctrlPoints[1].controlPointB[8][6] = 1.081420898438;
+lensShading.ctrlPoints[1].controlPointB[8][7] = 1.028564453125;
+lensShading.ctrlPoints[1].controlPointB[8][8] = 1.075195312500;
+lensShading.ctrlPoints[1].controlPointB[8][9] = 1.251831054688;
+lensShading.ctrlPoints[1].controlPointB[9][0] = 1.462280273438;
+lensShading.ctrlPoints[1].controlPointB[9][1] = 1.096191406250;
+lensShading.ctrlPoints[1].controlPointB[9][2] = 1.081420898438;
+lensShading.ctrlPoints[1].controlPointB[9][3] = 1.086791992188;
+lensShading.ctrlPoints[1].controlPointB[9][4] = 1.099975585938;
+lensShading.ctrlPoints[1].controlPointB[9][5] = 1.113769531250;
+lensShading.ctrlPoints[1].controlPointB[9][6] = 1.082397460938;
+lensShading.ctrlPoints[1].controlPointB[9][7] = 1.170532226563;
+lensShading.ctrlPoints[1].controlPointB[9][8] = 0.970336914063;
+lensShading.ctrlPoints[1].controlPointB[9][9] = 1.959106445313;
+lensShading.ctrlPoints[2].cct = 6500;
+lensShading.ctrlPoints[2].light_family = 1;
+lensShading.ctrlPoints[2].controlPointR[0][0] = 1.082397460938;
+lensShading.ctrlPoints[2].controlPointR[0][1] = 0.986572265625;
+lensShading.ctrlPoints[2].controlPointR[0][2] = 1.100585937500;
+lensShading.ctrlPoints[2].controlPointR[0][3] = 1.100708007813;
+lensShading.ctrlPoints[2].controlPointR[0][4] = 1.096191406250;
+lensShading.ctrlPoints[2].controlPointR[0][5] = 1.100341796875;
+lensShading.ctrlPoints[2].controlPointR[0][6] = 1.104492187500;
+lensShading.ctrlPoints[2].controlPointR[0][7] = 1.140136718750;
+lensShading.ctrlPoints[2].controlPointR[0][8] = 0.767333984375;
+lensShading.ctrlPoints[2].controlPointR[0][9] = 1.623535156250;
+lensShading.ctrlPoints[2].controlPointR[1][0] = 0.982910156250;
+lensShading.ctrlPoints[2].controlPointR[1][1] = 1.103637695313;
+lensShading.ctrlPoints[2].controlPointR[1][2] = 1.125610351563;
+lensShading.ctrlPoints[2].controlPointR[1][3] = 1.096313476563;
+lensShading.ctrlPoints[2].controlPointR[1][4] = 1.091796875000;
+lensShading.ctrlPoints[2].controlPointR[1][5] = 1.183593750000;
+lensShading.ctrlPoints[2].controlPointR[1][6] = 1.061645507813;
+lensShading.ctrlPoints[2].controlPointR[1][7] = 1.266723632813;
+lensShading.ctrlPoints[2].controlPointR[1][8] = 0.764282226563;
+lensShading.ctrlPoints[2].controlPointR[1][9] = 1.251586914063;
+lensShading.ctrlPoints[2].controlPointR[2][0] = 1.108032226563;
+lensShading.ctrlPoints[2].controlPointR[2][1] = 1.014282226563;
+lensShading.ctrlPoints[2].controlPointR[2][2] = 1.171508789063;
+lensShading.ctrlPoints[2].controlPointR[2][3] = 1.122192382813;
+lensShading.ctrlPoints[2].controlPointR[2][4] = 1.146850585938;
+lensShading.ctrlPoints[2].controlPointR[2][5] = 1.096069335938;
+lensShading.ctrlPoints[2].controlPointR[2][6] = 1.154785156250;
+lensShading.ctrlPoints[2].controlPointR[2][7] = 1.110229492188;
+lensShading.ctrlPoints[2].controlPointR[2][8] = 1.091308593750;
+lensShading.ctrlPoints[2].controlPointR[2][9] = 1.099487304688;
+lensShading.ctrlPoints[2].controlPointR[3][0] = 1.066894531250;
+lensShading.ctrlPoints[2].controlPointR[3][1] = 1.099243164063;
+lensShading.ctrlPoints[2].controlPointR[3][2] = 1.107910156250;
+lensShading.ctrlPoints[2].controlPointR[3][3] = 1.119506835938;
+lensShading.ctrlPoints[2].controlPointR[3][4] = 1.123657226563;
+lensShading.ctrlPoints[2].controlPointR[3][5] = 1.114990234375;
+lensShading.ctrlPoints[2].controlPointR[3][6] = 1.124267578125;
+lensShading.ctrlPoints[2].controlPointR[3][7] = 1.120849609375;
+lensShading.ctrlPoints[2].controlPointR[3][8] = 1.092651367188;
+lensShading.ctrlPoints[2].controlPointR[3][9] = 1.100463867188;
+lensShading.ctrlPoints[2].controlPointR[4][0] = 1.096679687500;
+lensShading.ctrlPoints[2].controlPointR[4][1] = 1.090454101563;
+lensShading.ctrlPoints[2].controlPointR[4][2] = 1.130981445313;
+lensShading.ctrlPoints[2].controlPointR[4][3] = 1.119750976563;
+lensShading.ctrlPoints[2].controlPointR[4][4] = 1.127807617188;
+lensShading.ctrlPoints[2].controlPointR[4][5] = 1.086181640625;
+lensShading.ctrlPoints[2].controlPointR[4][6] = 1.149902343750;
+lensShading.ctrlPoints[2].controlPointR[4][7] = 1.204956054688;
+lensShading.ctrlPoints[2].controlPointR[4][8] = 1.016113281250;
+lensShading.ctrlPoints[2].controlPointR[4][9] = 1.176025390625;
+lensShading.ctrlPoints[2].controlPointR[5][0] = 1.069335937500;
+lensShading.ctrlPoints[2].controlPointR[5][1] = 1.100952148438;
+lensShading.ctrlPoints[2].controlPointR[5][2] = 1.120117187500;
+lensShading.ctrlPoints[2].controlPointR[5][3] = 1.127807617188;
+lensShading.ctrlPoints[2].controlPointR[5][4] = 1.097656250000;
+lensShading.ctrlPoints[2].controlPointR[5][5] = 1.150268554688;
+lensShading.ctrlPoints[2].controlPointR[5][6] = 1.127929687500;
+lensShading.ctrlPoints[2].controlPointR[5][7] = 1.130249023438;
+lensShading.ctrlPoints[2].controlPointR[5][8] = 1.116088867188;
+lensShading.ctrlPoints[2].controlPointR[5][9] = 1.090454101563;
+lensShading.ctrlPoints[2].controlPointR[6][0] = 1.109130859375;
+lensShading.ctrlPoints[2].controlPointR[6][1] = 1.076049804688;
+lensShading.ctrlPoints[2].controlPointR[6][2] = 1.141113281250;
+lensShading.ctrlPoints[2].controlPointR[6][3] = 1.131347656250;
+lensShading.ctrlPoints[2].controlPointR[6][4] = 1.144287109375;
+lensShading.ctrlPoints[2].controlPointR[6][5] = 1.161743164063;
+lensShading.ctrlPoints[2].controlPointR[6][6] = 1.140014648438;
+lensShading.ctrlPoints[2].controlPointR[6][7] = 1.165771484375;
+lensShading.ctrlPoints[2].controlPointR[6][8] = 1.043457031250;
+lensShading.ctrlPoints[2].controlPointR[6][9] = 1.234252929688;
+lensShading.ctrlPoints[2].controlPointR[7][0] = 1.234008789063;
+lensShading.ctrlPoints[2].controlPointR[7][1] = 1.033447265625;
+lensShading.ctrlPoints[2].controlPointR[7][2] = 1.155761718750;
+lensShading.ctrlPoints[2].controlPointR[7][3] = 1.151245117188;
+lensShading.ctrlPoints[2].controlPointR[7][4] = 1.151123046875;
+lensShading.ctrlPoints[2].controlPointR[7][5] = 1.177246093750;
+lensShading.ctrlPoints[2].controlPointR[7][6] = 1.147583007813;
+lensShading.ctrlPoints[2].controlPointR[7][7] = 1.153808593750;
+lensShading.ctrlPoints[2].controlPointR[7][8] = 0.965332031250;
+lensShading.ctrlPoints[2].controlPointR[7][9] = 1.398925781250;
+lensShading.ctrlPoints[2].controlPointR[8][0] = 1.171752929688;
+lensShading.ctrlPoints[2].controlPointR[8][1] = 0.985839843750;
+lensShading.ctrlPoints[2].controlPointR[8][2] = 1.111938476563;
+lensShading.ctrlPoints[2].controlPointR[8][3] = 1.116210937500;
+lensShading.ctrlPoints[2].controlPointR[8][4] = 1.182128906250;
+lensShading.ctrlPoints[2].controlPointR[8][5] = 1.095703125000;
+lensShading.ctrlPoints[2].controlPointR[8][6] = 1.146606445313;
+lensShading.ctrlPoints[2].controlPointR[8][7] = 1.030761718750;
+lensShading.ctrlPoints[2].controlPointR[8][8] = 1.168945312500;
+lensShading.ctrlPoints[2].controlPointR[8][9] = 1.306396484375;
+lensShading.ctrlPoints[2].controlPointR[9][0] = 1.507080078125;
+lensShading.ctrlPoints[2].controlPointR[9][1] = 1.070190429688;
+lensShading.ctrlPoints[2].controlPointR[9][2] = 1.147705078125;
+lensShading.ctrlPoints[2].controlPointR[9][3] = 1.104614257813;
+lensShading.ctrlPoints[2].controlPointR[9][4] = 1.175659179688;
+lensShading.ctrlPoints[2].controlPointR[9][5] = 1.151245117188;
+lensShading.ctrlPoints[2].controlPointR[9][6] = 1.116577148438;
+lensShading.ctrlPoints[2].controlPointR[9][7] = 1.212402343750;
+lensShading.ctrlPoints[2].controlPointR[9][8] = 1.031616210938;
+lensShading.ctrlPoints[2].controlPointR[9][9] = 1.976562500000;
+lensShading.ctrlPoints[2].controlPointGR[0][0] = 1.052246093750;
+lensShading.ctrlPoints[2].controlPointGR[0][1] = 0.989624023438;
+lensShading.ctrlPoints[2].controlPointGR[0][2] = 1.065917968750;
+lensShading.ctrlPoints[2].controlPointGR[0][3] = 1.062866210938;
+lensShading.ctrlPoints[2].controlPointGR[0][4] = 1.069213867188;
+lensShading.ctrlPoints[2].controlPointGR[0][5] = 1.055175781250;
+lensShading.ctrlPoints[2].controlPointGR[0][6] = 1.047119140625;
+lensShading.ctrlPoints[2].controlPointGR[0][7] = 1.119018554688;
+lensShading.ctrlPoints[2].controlPointGR[0][8] = 0.749389648438;
+lensShading.ctrlPoints[2].controlPointGR[0][9] = 1.583740234375;
+lensShading.ctrlPoints[2].controlPointGR[1][0] = 0.991088867188;
+lensShading.ctrlPoints[2].controlPointGR[1][1] = 1.075317382813;
+lensShading.ctrlPoints[2].controlPointGR[1][2] = 1.092407226563;
+lensShading.ctrlPoints[2].controlPointGR[1][3] = 1.066162109375;
+lensShading.ctrlPoints[2].controlPointGR[1][4] = 1.073974609375;
+lensShading.ctrlPoints[2].controlPointGR[1][5] = 1.107666015625;
+lensShading.ctrlPoints[2].controlPointGR[1][6] = 1.054321289063;
+lensShading.ctrlPoints[2].controlPointGR[1][7] = 1.211547851563;
+lensShading.ctrlPoints[2].controlPointGR[1][8] = 0.758422851563;
+lensShading.ctrlPoints[2].controlPointGR[1][9] = 1.214477539063;
+lensShading.ctrlPoints[2].controlPointGR[2][0] = 1.067626953125;
+lensShading.ctrlPoints[2].controlPointGR[2][1] = 1.038696289063;
+lensShading.ctrlPoints[2].controlPointGR[2][2] = 1.075683593750;
+lensShading.ctrlPoints[2].controlPointGR[2][3] = 1.082519531250;
+lensShading.ctrlPoints[2].controlPointGR[2][4] = 1.061889648438;
+lensShading.ctrlPoints[2].controlPointGR[2][5] = 1.078247070313;
+lensShading.ctrlPoints[2].controlPointGR[2][6] = 1.071777343750;
+lensShading.ctrlPoints[2].controlPointGR[2][7] = 1.100463867188;
+lensShading.ctrlPoints[2].controlPointGR[2][8] = 1.030883789063;
+lensShading.ctrlPoints[2].controlPointGR[2][9] = 1.070190429688;
+lensShading.ctrlPoints[2].controlPointGR[3][0] = 1.039184570313;
+lensShading.ctrlPoints[2].controlPointGR[3][1] = 1.067260742188;
+lensShading.ctrlPoints[2].controlPointGR[3][2] = 1.070190429688;
+lensShading.ctrlPoints[2].controlPointGR[3][3] = 1.076049804688;
+lensShading.ctrlPoints[2].controlPointGR[3][4] = 1.068115234375;
+lensShading.ctrlPoints[2].controlPointGR[3][5] = 1.064941406250;
+lensShading.ctrlPoints[2].controlPointGR[3][6] = 1.078247070313;
+lensShading.ctrlPoints[2].controlPointGR[3][7] = 1.082641601563;
+lensShading.ctrlPoints[2].controlPointGR[3][8] = 1.037719726563;
+lensShading.ctrlPoints[2].controlPointGR[3][9] = 1.064941406250;
+lensShading.ctrlPoints[2].controlPointGR[4][0] = 1.063842773438;
+lensShading.ctrlPoints[2].controlPointGR[4][1] = 1.074340820313;
+lensShading.ctrlPoints[2].controlPointGR[4][2] = 1.084960937500;
+lensShading.ctrlPoints[2].controlPointGR[4][3] = 1.075195312500;
+lensShading.ctrlPoints[2].controlPointGR[4][4] = 1.049194335938;
+lensShading.ctrlPoints[2].controlPointGR[4][5] = 1.057373046875;
+lensShading.ctrlPoints[2].controlPointGR[4][6] = 1.074951171875;
+lensShading.ctrlPoints[2].controlPointGR[4][7] = 1.162475585938;
+lensShading.ctrlPoints[2].controlPointGR[4][8] = 0.997802734375;
+lensShading.ctrlPoints[2].controlPointGR[4][9] = 1.105102539063;
+lensShading.ctrlPoints[2].controlPointGR[5][0] = 1.037841796875;
+lensShading.ctrlPoints[2].controlPointGR[5][1] = 1.067138671875;
+lensShading.ctrlPoints[2].controlPointGR[5][2] = 1.070190429688;
+lensShading.ctrlPoints[2].controlPointGR[5][3] = 1.090820312500;
+lensShading.ctrlPoints[2].controlPointGR[5][4] = 1.054687500000;
+lensShading.ctrlPoints[2].controlPointGR[5][5] = 1.092773437500;
+lensShading.ctrlPoints[2].controlPointGR[5][6] = 1.088623046875;
+lensShading.ctrlPoints[2].controlPointGR[5][7] = 1.078613281250;
+lensShading.ctrlPoints[2].controlPointGR[5][8] = 1.067016601563;
+lensShading.ctrlPoints[2].controlPointGR[5][9] = 1.041992187500;
+lensShading.ctrlPoints[2].controlPointGR[6][0] = 1.086181640625;
+lensShading.ctrlPoints[2].controlPointGR[6][1] = 1.045654296875;
+lensShading.ctrlPoints[2].controlPointGR[6][2] = 1.097900390625;
+lensShading.ctrlPoints[2].controlPointGR[6][3] = 1.087158203125;
+lensShading.ctrlPoints[2].controlPointGR[6][4] = 1.093383789063;
+lensShading.ctrlPoints[2].controlPointGR[6][5] = 1.099243164063;
+lensShading.ctrlPoints[2].controlPointGR[6][6] = 1.084838867188;
+lensShading.ctrlPoints[2].controlPointGR[6][7] = 1.109863281250;
+lensShading.ctrlPoints[2].controlPointGR[6][8] = 0.992065429688;
+lensShading.ctrlPoints[2].controlPointGR[6][9] = 1.174804687500;
+lensShading.ctrlPoints[2].controlPointGR[7][0] = 1.161254882813;
+lensShading.ctrlPoints[2].controlPointGR[7][1] = 1.059204101563;
+lensShading.ctrlPoints[2].controlPointGR[7][2] = 1.054931640625;
+lensShading.ctrlPoints[2].controlPointGR[7][3] = 1.099487304688;
+lensShading.ctrlPoints[2].controlPointGR[7][4] = 1.091918945313;
+lensShading.ctrlPoints[2].controlPointGR[7][5] = 1.106567382813;
+lensShading.ctrlPoints[2].controlPointGR[7][6] = 1.087890625000;
+lensShading.ctrlPoints[2].controlPointGR[7][7] = 1.078857421875;
+lensShading.ctrlPoints[2].controlPointGR[7][8] = 0.982543945313;
+lensShading.ctrlPoints[2].controlPointGR[7][9] = 1.277221679688;
+lensShading.ctrlPoints[2].controlPointGR[8][0] = 1.147827148438;
+lensShading.ctrlPoints[2].controlPointGR[8][1] = 0.933715820313;
+lensShading.ctrlPoints[2].controlPointGR[8][2] = 1.106079101563;
+lensShading.ctrlPoints[2].controlPointGR[8][3] = 1.079223632813;
+lensShading.ctrlPoints[2].controlPointGR[8][4] = 1.116577148438;
+lensShading.ctrlPoints[2].controlPointGR[8][5] = 1.088745117188;
+lensShading.ctrlPoints[2].controlPointGR[8][6] = 1.073852539063;
+lensShading.ctrlPoints[2].controlPointGR[8][7] = 1.063964843750;
+lensShading.ctrlPoints[2].controlPointGR[8][8] = 1.001953125000;
+lensShading.ctrlPoints[2].controlPointGR[8][9] = 1.307861328125;
+lensShading.ctrlPoints[2].controlPointGR[9][0] = 1.432128906250;
+lensShading.ctrlPoints[2].controlPointGR[9][1] = 1.074584960938;
+lensShading.ctrlPoints[2].controlPointGR[9][2] = 1.054809570313;
+lensShading.ctrlPoints[2].controlPointGR[9][3] = 1.069580078125;
+lensShading.ctrlPoints[2].controlPointGR[9][4] = 1.086669921875;
+lensShading.ctrlPoints[2].controlPointGR[9][5] = 1.098266601563;
+lensShading.ctrlPoints[2].controlPointGR[9][6] = 1.064208984375;
+lensShading.ctrlPoints[2].controlPointGR[9][7] = 1.130493164063;
+lensShading.ctrlPoints[2].controlPointGR[9][8] = 1.020874023438;
+lensShading.ctrlPoints[2].controlPointGR[9][9] = 1.854125976563;
+lensShading.ctrlPoints[2].controlPointGB[0][0] = 1.051025390625;
+lensShading.ctrlPoints[2].controlPointGB[0][1] = 1.005004882813;
+lensShading.ctrlPoints[2].controlPointGB[0][2] = 1.065551757813;
+lensShading.ctrlPoints[2].controlPointGB[0][3] = 1.067382812500;
+lensShading.ctrlPoints[2].controlPointGB[0][4] = 1.087280273438;
+lensShading.ctrlPoints[2].controlPointGB[0][5] = 1.060424804688;
+lensShading.ctrlPoints[2].controlPointGB[0][6] = 1.056884765625;
+lensShading.ctrlPoints[2].controlPointGB[0][7] = 1.148681640625;
+lensShading.ctrlPoints[2].controlPointGB[0][8] = 0.717529296875;
+lensShading.ctrlPoints[2].controlPointGB[0][9] = 1.603759765625;
+lensShading.ctrlPoints[2].controlPointGB[1][0] = 0.990478515625;
+lensShading.ctrlPoints[2].controlPointGB[1][1] = 1.097167968750;
+lensShading.ctrlPoints[2].controlPointGB[1][2] = 1.074096679688;
+lensShading.ctrlPoints[2].controlPointGB[1][3] = 1.083862304688;
+lensShading.ctrlPoints[2].controlPointGB[1][4] = 1.040039062500;
+lensShading.ctrlPoints[2].controlPointGB[1][5] = 1.114501953125;
+lensShading.ctrlPoints[2].controlPointGB[1][6] = 1.069580078125;
+lensShading.ctrlPoints[2].controlPointGB[1][7] = 1.151367187500;
+lensShading.ctrlPoints[2].controlPointGB[1][8] = 0.858032226563;
+lensShading.ctrlPoints[2].controlPointGB[1][9] = 1.179931640625;
+lensShading.ctrlPoints[2].controlPointGB[2][0] = 1.070068359375;
+lensShading.ctrlPoints[2].controlPointGB[2][1] = 0.998046875000;
+lensShading.ctrlPoints[2].controlPointGB[2][2] = 1.112426757813;
+lensShading.ctrlPoints[2].controlPointGB[2][3] = 1.072631835938;
+lensShading.ctrlPoints[2].controlPointGB[2][4] = 1.104736328125;
+lensShading.ctrlPoints[2].controlPointGB[2][5] = 1.074462890625;
+lensShading.ctrlPoints[2].controlPointGB[2][6] = 1.067749023438;
+lensShading.ctrlPoints[2].controlPointGB[2][7] = 1.120361328125;
+lensShading.ctrlPoints[2].controlPointGB[2][8] = 1.015991210938;
+lensShading.ctrlPoints[2].controlPointGB[2][9] = 1.084960937500;
+lensShading.ctrlPoints[2].controlPointGB[3][0] = 1.026855468750;
+lensShading.ctrlPoints[2].controlPointGB[3][1] = 1.093994140625;
+lensShading.ctrlPoints[2].controlPointGB[3][2] = 1.059814453125;
+lensShading.ctrlPoints[2].controlPointGB[3][3] = 1.080932617188;
+lensShading.ctrlPoints[2].controlPointGB[3][4] = 1.064941406250;
+lensShading.ctrlPoints[2].controlPointGB[3][5] = 1.072998046875;
+lensShading.ctrlPoints[2].controlPointGB[3][6] = 1.080810546875;
+lensShading.ctrlPoints[2].controlPointGB[3][7] = 1.083618164063;
+lensShading.ctrlPoints[2].controlPointGB[3][8] = 1.053588867188;
+lensShading.ctrlPoints[2].controlPointGB[3][9] = 1.062133789063;
+lensShading.ctrlPoints[2].controlPointGB[4][0] = 1.076782226563;
+lensShading.ctrlPoints[2].controlPointGB[4][1] = 1.031738281250;
+lensShading.ctrlPoints[2].controlPointGB[4][2] = 1.087158203125;
+lensShading.ctrlPoints[2].controlPointGB[4][3] = 1.073608398438;
+lensShading.ctrlPoints[2].controlPointGB[4][4] = 1.062377929688;
+lensShading.ctrlPoints[2].controlPointGB[4][5] = 1.045654296875;
+lensShading.ctrlPoints[2].controlPointGB[4][6] = 1.080932617188;
+lensShading.ctrlPoints[2].controlPointGB[4][7] = 1.153320312500;
+lensShading.ctrlPoints[2].controlPointGB[4][8] = 0.983642578125;
+lensShading.ctrlPoints[2].controlPointGB[4][9] = 1.118408203125;
+lensShading.ctrlPoints[2].controlPointGB[5][0] = 1.018066406250;
+lensShading.ctrlPoints[2].controlPointGB[5][1] = 1.095703125000;
+lensShading.ctrlPoints[2].controlPointGB[5][2] = 1.065429687500;
+lensShading.ctrlPoints[2].controlPointGB[5][3] = 1.087402343750;
+lensShading.ctrlPoints[2].controlPointGB[5][4] = 1.044067382813;
+lensShading.ctrlPoints[2].controlPointGB[5][5] = 1.110595703125;
+lensShading.ctrlPoints[2].controlPointGB[5][6] = 1.083862304688;
+lensShading.ctrlPoints[2].controlPointGB[5][7] = 1.099487304688;
+lensShading.ctrlPoints[2].controlPointGB[5][8] = 1.058837890625;
+lensShading.ctrlPoints[2].controlPointGB[5][9] = 1.044067382813;
+lensShading.ctrlPoints[2].controlPointGB[6][0] = 1.081665039063;
+lensShading.ctrlPoints[2].controlPointGB[6][1] = 1.040649414063;
+lensShading.ctrlPoints[2].controlPointGB[6][2] = 1.098754882813;
+lensShading.ctrlPoints[2].controlPointGB[6][3] = 1.081787109375;
+lensShading.ctrlPoints[2].controlPointGB[6][4] = 1.099243164063;
+lensShading.ctrlPoints[2].controlPointGB[6][5] = 1.097412109375;
+lensShading.ctrlPoints[2].controlPointGB[6][6] = 1.086425781250;
+lensShading.ctrlPoints[2].controlPointGB[6][7] = 1.107788085938;
+lensShading.ctrlPoints[2].controlPointGB[6][8] = 0.997436523438;
+lensShading.ctrlPoints[2].controlPointGB[6][9] = 1.164062500000;
+lensShading.ctrlPoints[2].controlPointGB[7][0] = 1.151733398438;
+lensShading.ctrlPoints[2].controlPointGB[7][1] = 1.036254882813;
+lensShading.ctrlPoints[2].controlPointGB[7][2] = 1.056152343750;
+lensShading.ctrlPoints[2].controlPointGB[7][3] = 1.100463867188;
+lensShading.ctrlPoints[2].controlPointGB[7][4] = 1.096679687500;
+lensShading.ctrlPoints[2].controlPointGB[7][5] = 1.093383789063;
+lensShading.ctrlPoints[2].controlPointGB[7][6] = 1.085205078125;
+lensShading.ctrlPoints[2].controlPointGB[7][7] = 1.075683593750;
+lensShading.ctrlPoints[2].controlPointGB[7][8] = 0.987182617188;
+lensShading.ctrlPoints[2].controlPointGB[7][9] = 1.268310546875;
+lensShading.ctrlPoints[2].controlPointGB[8][0] = 1.137695312500;
+lensShading.ctrlPoints[2].controlPointGB[8][1] = 0.948608398438;
+lensShading.ctrlPoints[2].controlPointGB[8][2] = 1.092163085938;
+lensShading.ctrlPoints[2].controlPointGB[8][3] = 1.074584960938;
+lensShading.ctrlPoints[2].controlPointGB[8][4] = 1.100097656250;
+lensShading.ctrlPoints[2].controlPointGB[8][5] = 1.108154296875;
+lensShading.ctrlPoints[2].controlPointGB[8][6] = 1.072998046875;
+lensShading.ctrlPoints[2].controlPointGB[8][7] = 1.067626953125;
+lensShading.ctrlPoints[2].controlPointGB[8][8] = 0.983398437500;
+lensShading.ctrlPoints[2].controlPointGB[8][9] = 1.322387695313;
+lensShading.ctrlPoints[2].controlPointGB[9][0] = 1.421752929688;
+lensShading.ctrlPoints[2].controlPointGB[9][1] = 1.078857421875;
+lensShading.ctrlPoints[2].controlPointGB[9][2] = 1.049560546875;
+lensShading.ctrlPoints[2].controlPointGB[9][3] = 1.065185546875;
+lensShading.ctrlPoints[2].controlPointGB[9][4] = 1.099609375000;
+lensShading.ctrlPoints[2].controlPointGB[9][5] = 1.079833984375;
+lensShading.ctrlPoints[2].controlPointGB[9][6] = 1.067749023438;
+lensShading.ctrlPoints[2].controlPointGB[9][7] = 1.132812500000;
+lensShading.ctrlPoints[2].controlPointGB[9][8] = 1.021606445313;
+lensShading.ctrlPoints[2].controlPointGB[9][9] = 1.829223632813;
+lensShading.ctrlPoints[2].controlPointB[0][0] = 1.067626953125;
+lensShading.ctrlPoints[2].controlPointB[0][1] = 0.951171875000;
+lensShading.ctrlPoints[2].controlPointB[0][2] = 1.110473632813;
+lensShading.ctrlPoints[2].controlPointB[0][3] = 1.056518554688;
+lensShading.ctrlPoints[2].controlPointB[0][4] = 1.093994140625;
+lensShading.ctrlPoints[2].controlPointB[0][5] = 1.054687500000;
+lensShading.ctrlPoints[2].controlPointB[0][6] = 1.069213867188;
+lensShading.ctrlPoints[2].controlPointB[0][7] = 1.134399414063;
+lensShading.ctrlPoints[2].controlPointB[0][8] = 0.739135742188;
+lensShading.ctrlPoints[2].controlPointB[0][9] = 1.590576171875;
+lensShading.ctrlPoints[2].controlPointB[1][0] = 0.969238281250;
+lensShading.ctrlPoints[2].controlPointB[1][1] = 1.175659179688;
+lensShading.ctrlPoints[2].controlPointB[1][2] = 1.016113281250;
+lensShading.ctrlPoints[2].controlPointB[1][3] = 1.098632812500;
+lensShading.ctrlPoints[2].controlPointB[1][4] = 1.035156250000;
+lensShading.ctrlPoints[2].controlPointB[1][5] = 1.125122070313;
+lensShading.ctrlPoints[2].controlPointB[1][6] = 1.055908203125;
+lensShading.ctrlPoints[2].controlPointB[1][7] = 1.160644531250;
+lensShading.ctrlPoints[2].controlPointB[1][8] = 0.858886718750;
+lensShading.ctrlPoints[2].controlPointB[1][9] = 1.210815429688;
+lensShading.ctrlPoints[2].controlPointB[2][0] = 1.090698242188;
+lensShading.ctrlPoints[2].controlPointB[2][1] = 0.956787109375;
+lensShading.ctrlPoints[2].controlPointB[2][2] = 1.132934570313;
+lensShading.ctrlPoints[2].controlPointB[2][3] = 1.060791015625;
+lensShading.ctrlPoints[2].controlPointB[2][4] = 1.104858398438;
+lensShading.ctrlPoints[2].controlPointB[2][5] = 1.052490234375;
+lensShading.ctrlPoints[2].controlPointB[2][6] = 1.083129882813;
+lensShading.ctrlPoints[2].controlPointB[2][7] = 1.119140625000;
+lensShading.ctrlPoints[2].controlPointB[2][8] = 1.034790039063;
+lensShading.ctrlPoints[2].controlPointB[2][9] = 1.066894531250;
+lensShading.ctrlPoints[2].controlPointB[3][0] = 1.028808593750;
+lensShading.ctrlPoints[2].controlPointB[3][1] = 1.086791992188;
+lensShading.ctrlPoints[2].controlPointB[3][2] = 1.064331054688;
+lensShading.ctrlPoints[2].controlPointB[3][3] = 1.079223632813;
+lensShading.ctrlPoints[2].controlPointB[3][4] = 1.063842773438;
+lensShading.ctrlPoints[2].controlPointB[3][5] = 1.071533203125;
+lensShading.ctrlPoints[2].controlPointB[3][6] = 1.080810546875;
+lensShading.ctrlPoints[2].controlPointB[3][7] = 1.100219726563;
+lensShading.ctrlPoints[2].controlPointB[3][8] = 1.048217773438;
+lensShading.ctrlPoints[2].controlPointB[3][9] = 1.080810546875;
+lensShading.ctrlPoints[2].controlPointB[4][0] = 1.089111328125;
+lensShading.ctrlPoints[2].controlPointB[4][1] = 1.040405273438;
+lensShading.ctrlPoints[2].controlPointB[4][2] = 1.078857421875;
+lensShading.ctrlPoints[2].controlPointB[4][3] = 1.073730468750;
+lensShading.ctrlPoints[2].controlPointB[4][4] = 1.048706054688;
+lensShading.ctrlPoints[2].controlPointB[4][5] = 1.068847656250;
+lensShading.ctrlPoints[2].controlPointB[4][6] = 1.084960937500;
+lensShading.ctrlPoints[2].controlPointB[4][7] = 1.156372070313;
+lensShading.ctrlPoints[2].controlPointB[4][8] = 1.000610351563;
+lensShading.ctrlPoints[2].controlPointB[4][9] = 1.117797851563;
+lensShading.ctrlPoints[2].controlPointB[5][0] = 1.024047851563;
+lensShading.ctrlPoints[2].controlPointB[5][1] = 1.084228515625;
+lensShading.ctrlPoints[2].controlPointB[5][2] = 1.072387695313;
+lensShading.ctrlPoints[2].controlPointB[5][3] = 1.081665039063;
+lensShading.ctrlPoints[2].controlPointB[5][4] = 1.074829101563;
+lensShading.ctrlPoints[2].controlPointB[5][5] = 1.076416015625;
+lensShading.ctrlPoints[2].controlPointB[5][6] = 1.093750000000;
+lensShading.ctrlPoints[2].controlPointB[5][7] = 1.072509765625;
+lensShading.ctrlPoints[2].controlPointB[5][8] = 1.104492187500;
+lensShading.ctrlPoints[2].controlPointB[5][9] = 1.054077148438;
+lensShading.ctrlPoints[2].controlPointB[6][0] = 1.086547851563;
+lensShading.ctrlPoints[2].controlPointB[6][1] = 1.045410156250;
+lensShading.ctrlPoints[2].controlPointB[6][2] = 1.100219726563;
+lensShading.ctrlPoints[2].controlPointB[6][3] = 1.083251953125;
+lensShading.ctrlPoints[2].controlPointB[6][4] = 1.095581054688;
+lensShading.ctrlPoints[2].controlPointB[6][5] = 1.097167968750;
+lensShading.ctrlPoints[2].controlPointB[6][6] = 1.093872070313;
+lensShading.ctrlPoints[2].controlPointB[6][7] = 1.130249023438;
+lensShading.ctrlPoints[2].controlPointB[6][8] = 0.980346679688;
+lensShading.ctrlPoints[2].controlPointB[6][9] = 1.195190429688;
+lensShading.ctrlPoints[2].controlPointB[7][0] = 1.171020507813;
+lensShading.ctrlPoints[2].controlPointB[7][1] = 1.062500000000;
+lensShading.ctrlPoints[2].controlPointB[7][2] = 1.063598632813;
+lensShading.ctrlPoints[2].controlPointB[7][3] = 1.118530273438;
+lensShading.ctrlPoints[2].controlPointB[7][4] = 1.072143554688;
+lensShading.ctrlPoints[2].controlPointB[7][5] = 1.124389648438;
+lensShading.ctrlPoints[2].controlPointB[7][6] = 1.093627929688;
+lensShading.ctrlPoints[2].controlPointB[7][7] = 1.110961914063;
+lensShading.ctrlPoints[2].controlPointB[7][8] = 0.973266601563;
+lensShading.ctrlPoints[2].controlPointB[7][9] = 1.320312500000;
+lensShading.ctrlPoints[2].controlPointB[8][0] = 1.119140625000;
+lensShading.ctrlPoints[2].controlPointB[8][1] = 0.935791015625;
+lensShading.ctrlPoints[2].controlPointB[8][2] = 1.070434570313;
+lensShading.ctrlPoints[2].controlPointB[8][3] = 1.055541992188;
+lensShading.ctrlPoints[2].controlPointB[8][4] = 1.120483398438;
+lensShading.ctrlPoints[2].controlPointB[8][5] = 1.078979492188;
+lensShading.ctrlPoints[2].controlPointB[8][6] = 1.070922851563;
+lensShading.ctrlPoints[2].controlPointB[8][7] = 1.046630859375;
+lensShading.ctrlPoints[2].controlPointB[8][8] = 1.051147460938;
+lensShading.ctrlPoints[2].controlPointB[8][9] = 1.285156250000;
+lensShading.ctrlPoints[2].controlPointB[9][0] = 1.434814453125;
+lensShading.ctrlPoints[2].controlPointB[9][1] = 1.068481445313;
+lensShading.ctrlPoints[2].controlPointB[9][2] = 1.075805664063;
+lensShading.ctrlPoints[2].controlPointB[9][3] = 1.076904296875;
+lensShading.ctrlPoints[2].controlPointB[9][4] = 1.084106445313;
+lensShading.ctrlPoints[2].controlPointB[9][5] = 1.102050781250;
+lensShading.ctrlPoints[2].controlPointB[9][6] = 1.076049804688;
+lensShading.ctrlPoints[2].controlPointB[9][7] = 1.137207031250;
+lensShading.ctrlPoints[2].controlPointB[9][8] = 1.001098632813;
+lensShading.ctrlPoints[2].controlPointB[9][9] = 1.901000976563;
diff --git a/frc971/orin/doflash_frc971.sh b/frc971/orin/doflash_frc971.sh
new file mode 100644
index 0000000..ecfa90c
--- /dev/null
+++ b/frc971/orin/doflash_frc971.sh
@@ -0,0 +1,20 @@
+#!/bin/bash
+set -ex
+
+TMPDIR=$(mktemp -d /tmp/yoctoflash.XXXXXXXXXX)
+
+# Cleanup on exit.
+function finish {
+ sudo rm -rf "${TMPDIR}"
+}
+trap finish EXIT
+
+# Assumes that the image has been copied into ./
+tar xf frc971-image-orin-nx-8g.tegraflash.tar.gz -C "${TMPDIR}"
+
+# Replace the rootfs with our new image.
+cp --sparse=always arm64_bookworm_debian_yocto.img "${TMPDIR}/frc971-image.ext4"
+
+cd ${TMPDIR}
+
+sudo ./initrd-flash
diff --git a/frc971/orin/virtual_packages/libglib-2.0-0/DEBIAN/control b/frc971/orin/virtual_packages/libglib-2.0-0/DEBIAN/control
new file mode 100644
index 0000000..1f9e4f0
--- /dev/null
+++ b/frc971/orin/virtual_packages/libglib-2.0-0/DEBIAN/control
@@ -0,0 +1,7 @@
+Package: libglib-2.0-0
+Version: 2.74.6-2
+Architecture: arm64
+Depends: libglib2.0-bin
+Maintainer: Austin Schuh <austin.linux@gmail.com>
+Provides: libglib-2.0-0
+Description: Adapter for libglib2.0-bin
diff --git a/frc971/orin/virtual_packages/libglvnd/DEBIAN/control b/frc971/orin/virtual_packages/libglvnd/DEBIAN/control
new file mode 100644
index 0000000..15ee630
--- /dev/null
+++ b/frc971/orin/virtual_packages/libglvnd/DEBIAN/control
@@ -0,0 +1,7 @@
+Package: libglvnd
+Version: 1.6.0-1
+Architecture: arm64
+Depends: libglvnd0
+Maintainer: Austin Schuh <austin.linux@gmail.com>
+Provides: libglvnd
+Description: Adapter for libglvnd
diff --git a/frc971/orin/virtual_packages/libgtk-3-0/DEBIAN/control b/frc971/orin/virtual_packages/libgtk-3-0/DEBIAN/control
new file mode 100644
index 0000000..8d85196
--- /dev/null
+++ b/frc971/orin/virtual_packages/libgtk-3-0/DEBIAN/control
@@ -0,0 +1,7 @@
+Package: libgtk-3.0
+Version: 3.24.38-2~deb12u1
+Architecture: arm64
+Depends: libgtk-3-0
+Maintainer: Austin Schuh <austin.linux@gmail.com>
+Provides: libgtk-3.0
+Description: Adapter for libgtk-3-0
diff --git a/frc971/orin/virtual_packages/libxcb-glx/DEBIAN/control b/frc971/orin/virtual_packages/libxcb-glx/DEBIAN/control
new file mode 100644
index 0000000..16c3060
--- /dev/null
+++ b/frc971/orin/virtual_packages/libxcb-glx/DEBIAN/control
@@ -0,0 +1,7 @@
+Package: libxcb-glx
+Version: 1.15-1
+Architecture: arm64
+Depends: libxcb-glx0
+Maintainer: Austin Schuh <austin.linux@gmail.com>
+Provides: libxcb-glx
+Description: Adapter for libxcb-glx0
diff --git a/frc971/orin/virtual_packages/wayland/DEBIAN/control b/frc971/orin/virtual_packages/wayland/DEBIAN/control
new file mode 100644
index 0000000..04ac8ca
--- /dev/null
+++ b/frc971/orin/virtual_packages/wayland/DEBIAN/control
@@ -0,0 +1,7 @@
+Package: wayland
+Version: 1.21.0-1
+Architecture: arm64
+Depends: libwayland-client0, libwayland-cursor0, libwayland-egl1, libwayland-server0
+Maintainer: Austin Schuh <austin.linux@gmail.com>
+Provides: wayland
+Description: Adapter for wayland