From fc5f8d8c2dffb24b79ef7450172d50f8725f6efb Mon Sep 17 00:00:00 2001 From: Adam Egger Date: Tue, 3 Nov 2020 11:38:14 -0800 Subject: [PATCH 01/23] start to add calibration arp script --- jet_tracking/__init__.py | 10 - .../jet_tracking_cal/jet_tracking_cal.ipynb | 25803 ++++++++++++++++ jet_tracking/jet_tracking_cal/jt_cal.py | 410 + jet_tracking/jet_tracking_cal/jt_cal_arp.py | 17 + .../jet_tracking_cal/submit_jt_arp.sh | 5 + 5 files changed, 26235 insertions(+), 10 deletions(-) create mode 100644 jet_tracking/jet_tracking_cal/jet_tracking_cal.ipynb create mode 100644 jet_tracking/jet_tracking_cal/jt_cal.py create mode 100644 jet_tracking/jet_tracking_cal/jt_cal_arp.py create mode 100644 jet_tracking/jet_tracking_cal/submit_jt_arp.sh diff --git a/jet_tracking/__init__.py b/jet_tracking/__init__.py index 6853e21..e69de29 100644 --- a/jet_tracking/__init__.py +++ b/jet_tracking/__init__.py @@ -1,10 +0,0 @@ -from . import cam_utils # noqa -from . import devices # noqa -from . import jet_control # noqa -from ._version import get_versions - -try: - __version__ = get_versions()['version'] - del get_versions -except Exception: - __version__ = '0.0.0-unknown' diff --git a/jet_tracking/jet_tracking_cal/jet_tracking_cal.ipynb b/jet_tracking/jet_tracking_cal/jet_tracking_cal.ipynb new file mode 100644 index 0000000..3851b40 --- /dev/null +++ b/jet_tracking/jet_tracking_cal/jet_tracking_cal.ipynb @@ -0,0 +1,25803 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "
\n", + " \n", + " Loading BokehJS ...\n", + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/javascript": [ + "\n", + "(function(root) {\n", + " function now() {\n", + " return new Date();\n", + " }\n", + "\n", + " var force = true;\n", + "\n", + " if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n", + " root._bokeh_onload_callbacks = [];\n", + " root._bokeh_is_loading = undefined;\n", + " }\n", + "\n", + " var JS_MIME_TYPE = 'application/javascript';\n", + " var HTML_MIME_TYPE = 'text/html';\n", + " var EXEC_MIME_TYPE = 'application/vnd.bokehjs_exec.v0+json';\n", + " var CLASS_NAME = 'output_bokeh rendered_html';\n", + "\n", + " /**\n", + " * Render data to the DOM node\n", + " */\n", + " function render(props, node) {\n", + " var script = document.createElement(\"script\");\n", + " node.appendChild(script);\n", + " }\n", + "\n", + " /**\n", + " * Handle when an output is cleared or removed\n", + " */\n", + " function handleClearOutput(event, handle) {\n", + " var cell = handle.cell;\n", + "\n", + " var id = cell.output_area._bokeh_element_id;\n", + " var server_id = cell.output_area._bokeh_server_id;\n", + " // Clean up Bokeh references\n", + " if (id != null && id in Bokeh.index) {\n", + " Bokeh.index[id].model.document.clear();\n", + " delete Bokeh.index[id];\n", + " }\n", + "\n", + " if (server_id !== undefined) {\n", + " // Clean up Bokeh references\n", + " var cmd = \"from bokeh.io.state import curstate; print(curstate().uuid_to_server['\" + server_id + \"'].get_sessions()[0].document.roots[0]._id)\";\n", + " cell.notebook.kernel.execute(cmd, {\n", + " iopub: {\n", + " output: function(msg) {\n", + " var id = msg.content.text.trim();\n", + " if (id in Bokeh.index) {\n", + " Bokeh.index[id].model.document.clear();\n", + " delete Bokeh.index[id];\n", + " }\n", + " }\n", + " }\n", + " });\n", + " // Destroy server and session\n", + " var cmd = \"import bokeh.io.notebook as ion; ion.destroy_server('\" + server_id + \"')\";\n", + " cell.notebook.kernel.execute(cmd);\n", + " }\n", + " }\n", + "\n", + " /**\n", + " * Handle when a new output is added\n", + " */\n", + " function handleAddOutput(event, handle) {\n", + " var output_area = handle.output_area;\n", + " var output = handle.output;\n", + "\n", + " // limit handleAddOutput to display_data with EXEC_MIME_TYPE content only\n", + " if ((output.output_type != \"display_data\") || (!output.data.hasOwnProperty(EXEC_MIME_TYPE))) {\n", + " return\n", + " }\n", + "\n", + " var toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n", + "\n", + " if (output.metadata[EXEC_MIME_TYPE][\"id\"] !== undefined) {\n", + " toinsert[toinsert.length - 1].firstChild.textContent = output.data[JS_MIME_TYPE];\n", + " // store reference to embed id on output_area\n", + " output_area._bokeh_element_id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n", + " }\n", + " if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n", + " var bk_div = document.createElement(\"div\");\n", + " bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n", + " var script_attrs = bk_div.children[0].attributes;\n", + " for (var i = 0; i < script_attrs.length; i++) {\n", + " toinsert[toinsert.length - 1].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\n", + " }\n", + " // store reference to server id on output_area\n", + " output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n", + " }\n", + " }\n", + "\n", + " function register_renderer(events, OutputArea) {\n", + "\n", + " function append_mime(data, metadata, element) {\n", + " // create a DOM node to render to\n", + " var toinsert = this.create_output_subarea(\n", + " metadata,\n", + " CLASS_NAME,\n", + " EXEC_MIME_TYPE\n", + " );\n", + " this.keyboard_manager.register_events(toinsert);\n", + " // Render to node\n", + " var props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n", + " render(props, toinsert[toinsert.length - 1]);\n", + " element.append(toinsert);\n", + " return toinsert\n", + " }\n", + "\n", + " /* Handle when an output is cleared or removed */\n", + " events.on('clear_output.CodeCell', handleClearOutput);\n", + " events.on('delete.Cell', handleClearOutput);\n", + "\n", + " /* Handle when a new output is added */\n", + " events.on('output_added.OutputArea', handleAddOutput);\n", + "\n", + " /**\n", + " * Register the mime type and append_mime function with output_area\n", + " */\n", + " OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n", + " /* Is output safe? */\n", + " safe: true,\n", + " /* Index of renderer in `output_area.display_order` */\n", + " index: 0\n", + " });\n", + " }\n", + "\n", + " // register the mime type if in Jupyter Notebook environment and previously unregistered\n", + " if (root.Jupyter !== undefined) {\n", + " var events = require('base/js/events');\n", + " var OutputArea = require('notebook/js/outputarea').OutputArea;\n", + "\n", + " if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n", + " register_renderer(events, OutputArea);\n", + " }\n", + " }\n", + "\n", + " \n", + " if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n", + " root._bokeh_timeout = Date.now() + 5000;\n", + " root._bokeh_failed_load = false;\n", + " }\n", + "\n", + " var NB_LOAD_WARNING = {'data': {'text/html':\n", + " \"
\\n\"+\n", + " \"

\\n\"+\n", + " \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n", + " \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n", + " \"

\\n\"+\n", + " \"\\n\"+\n", + " \"\\n\"+\n", + " \"from bokeh.resources import INLINE\\n\"+\n", + " \"output_notebook(resources=INLINE)\\n\"+\n", + " \"\\n\"+\n", + " \"
\"}};\n", + "\n", + " function display_loaded() {\n", + " var el = document.getElementById(\"1001\");\n", + " if (el != null) {\n", + " el.textContent = \"BokehJS is loading...\";\n", + " }\n", + " if (root.Bokeh !== undefined) {\n", + " if (el != null) {\n", + " el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n", + " }\n", + " } else if (Date.now() < root._bokeh_timeout) {\n", + " setTimeout(display_loaded, 100)\n", + " }\n", + " }\n", + "\n", + "\n", + " function run_callbacks() {\n", + " try {\n", + " root._bokeh_onload_callbacks.forEach(function(callback) {\n", + " if (callback != null)\n", + " callback();\n", + " });\n", + " } finally {\n", + " delete root._bokeh_onload_callbacks\n", + " }\n", + " console.debug(\"Bokeh: all callbacks have finished\");\n", + " }\n", + "\n", + " function load_libs(css_urls, js_urls, callback) {\n", + " if (css_urls == null) css_urls = [];\n", + " if (js_urls == null) js_urls = [];\n", + "\n", + " root._bokeh_onload_callbacks.push(callback);\n", + " if (root._bokeh_is_loading > 0) {\n", + " console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n", + " return null;\n", + " }\n", + " if (js_urls == null || js_urls.length === 0) {\n", + " run_callbacks();\n", + " return null;\n", + " }\n", + " console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n", + " root._bokeh_is_loading = css_urls.length + js_urls.length;\n", + "\n", + " function on_load() {\n", + " root._bokeh_is_loading--;\n", + " if (root._bokeh_is_loading === 0) {\n", + " console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n", + " run_callbacks()\n", + " }\n", + " }\n", + "\n", + " function on_error() {\n", + " console.error(\"failed to load \" + url);\n", + " }\n", + "\n", + " for (var i = 0; i < css_urls.length; i++) {\n", + " var url = css_urls[i];\n", + " const element = document.createElement(\"link\");\n", + " element.onload = on_load;\n", + " element.onerror = on_error;\n", + " element.rel = \"stylesheet\";\n", + " element.type = \"text/css\";\n", + " element.href = url;\n", + " console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n", + " document.body.appendChild(element);\n", + " }\n", + "\n", + " for (var i = 0; i < js_urls.length; i++) {\n", + " var url = js_urls[i];\n", + " var element = document.createElement('script');\n", + " element.onload = on_load;\n", + " element.onerror = on_error;\n", + " element.async = false;\n", + " element.src = url;\n", + " console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n", + " document.head.appendChild(element);\n", + " }\n", + " };var element = document.getElementById(\"1001\");\n", + " if (element == null) {\n", + " console.error(\"Bokeh: ERROR: autoload.js configured with elementid '1001' but no matching script tag was found. \")\n", + " return false;\n", + " }\n", + "\n", + " function inject_raw_css(css) {\n", + " const element = document.createElement(\"style\");\n", + " element.appendChild(document.createTextNode(css));\n", + " document.body.appendChild(element);\n", + " }\n", + "\n", + " \n", + " var js_urls = [\"https://cdn.pydata.org/bokeh/release/bokeh-1.4.0.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-widgets-1.4.0.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-tables-1.4.0.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-gl-1.4.0.min.js\"];\n", + " var css_urls = [];\n", + " \n", + "\n", + " var inline_js = [\n", + " function(Bokeh) {\n", + " inject_raw_css(\".widget-box {\\n\\tmin-height: 20px;\\n\\tbackground-color: #f5f5f5;\\n\\tborder: 1px solid #e3e3e3 !important;\\n\\tborder-radius: 4px;\\n\\t-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.05);\\n\\tbox-shadow: inset 0 1px 1px rgba(0,0,0,.05);\\n\\toverflow-x: hidden;\\n\\toverflow-y: hidden;\\n}\\n\\n.scrollable {\\n overflow: scroll;\\n}\\n\\nprogress {\\n\\tappearance: none;\\n\\t-moz-appearance: none;\\n\\t-webkit-appearance: none;\\n\\n\\tborder: none;\\n\\theight: 20px;\\n\\tbackground-color: whiteSmoke;\\n\\tborder-radius: 3px;\\n\\tbox-shadow: 0 2px 3px rgba(0,0,0,.5) inset;\\n\\tcolor: royalblue;\\n\\tposition: relative;\\n\\tmargin: 0 0 1.5em;\\n}\\n\\nprogress[value]::-webkit-progress-bar {\\n\\tbackground-color: whiteSmoke;\\n\\tborder-radius: 3px;\\n\\tbox-shadow: 0 2px 3px rgba(0,0,0,.5) inset;\\n}\\n\\nprogress[value]::-webkit-progress-value {\\n\\tposition: relative;\\n\\n\\tbackground-size: 35px 20px, 100% 100%, 100% 100%;\\n\\tborder-radius:3px;\\n}\\n\\nprogress.active:not([value])::before {\\n\\tbackground-position: 10%;\\n\\tanimation-name: stripes;\\n\\tanimation-duration: 3s;\\n\\tanimation-timing-function: linear;\\n\\tanimation-iteration-count: infinite;\\n}\\n\\nprogress[value]::-moz-progress-bar {\\n\\tbackground-size: 35px 20px, 100% 100%, 100% 100%;\\n\\tborder-radius:3px;\\n}\\n\\nprogress:not([value])::-moz-progress-bar {\\n\\tborder-radius:3px;\\n\\tbackground:\\n\\tlinear-gradient(-45deg, transparent 33%, rgba(0, 0, 0, 0.2) 33%, rgba(0, 0, 0, 0.2) 66%, transparent 66%) left/2.5em 1.5em;\\n\\n}\\n\\nprogress.active:not([value])::-moz-progress-bar {\\n\\tbackground-position: 10%;\\n\\tanimation-name: stripes;\\n\\tanimation-duration: 3s;\\n\\tanimation-timing-function: linear;\\n\\tanimation-iteration-count: infinite;\\n}\\n\\nprogress.active:not([value])::-webkit-progress-bar {\\n\\tbackground-position: 10%;\\n\\tanimation-name: stripes;\\n\\tanimation-duration: 3s;\\n\\tanimation-timing-function: linear;\\n\\tanimation-iteration-count: infinite;\\n}\\n\\nprogress.primary[value]::-webkit-progress-value { background-color: #007bff; }\\nprogress.primary:not([value])::before { background-color: #007bff; }\\nprogress.primary:not([value])::-webkit-progress-bar { background-color: #007bff; }\\nprogress.primary::-moz-progress-bar { background-color: #007bff; }\\n\\nprogress.secondary[value]::-webkit-progress-value { background-color: #6c757d; }\\nprogress.secondary:not([value])::before { background-color: #6c757d; }\\nprogress.secondary:not([value])::-webkit-progress-bar { background-color: #6c757d; }\\nprogress.secondary::-moz-progress-bar { background-color: #6c757d; }\\n\\nprogress.success[value]::-webkit-progress-value { background-color: #28a745; }\\nprogress.success:not([value])::before { background-color: #28a745; }\\nprogress.success:not([value])::-webkit-progress-bar { background-color: #28a745; }\\nprogress.success::-moz-progress-bar { background-color: #28a745; }\\n\\nprogress.danger[value]::-webkit-progress-value { background-color: #dc3545; }\\nprogress.danger:not([value])::before { background-color: #dc3545; }\\nprogress.danger:not([value])::-webkit-progress-bar { background-color: #dc3545; }\\nprogress.danger::-moz-progress-bar { background-color: #dc3545; }\\n\\nprogress.warning[value]::-webkit-progress-value { background-color: #ffc107; }\\nprogress.warning:not([value])::before { background-color: #ffc107; }\\nprogress.warning:not([value])::-webkit-progress-bar { background-color: #ffc107; }\\nprogress.warning::-moz-progress-bar { background-color: #ffc107; }\\n\\nprogress.info[value]::-webkit-progress-value { background-color: #17a2b8; }\\nprogress.info:not([value])::before { background-color: #17a2b8; }\\nprogress.info:not([value])::-webkit-progress-bar { background-color: #17a2b8; }\\nprogress.info::-moz-progress-bar { background-color: #17a2b8; }\\n\\nprogress.light[value]::-webkit-progress-value { background-color: #f8f9fa; }\\nprogress.light:not([value])::before { background-color: #f8f9fa; }\\nprogress.light:not([value])::-webkit-progress-bar { background-color: #f8f9fa; }\\nprogress.light::-moz-progress-bar { background-color: #f8f9fa; }\\n\\nprogress.dark[value]::-webkit-progress-value { background-color: #343a40; }\\nprogress.dark:not([value])::-webkit-progress-bar { background-color: #343a40; }\\nprogress.dark:not([value])::before { background-color: #343a40; }\\nprogress.dark::-moz-progress-bar { background-color: #343a40; }\\n\\nprogress:not([value])::-webkit-progress-bar {\\n\\tborder-radius: 3px;\\n\\tbackground:\\n\\tlinear-gradient(-45deg, transparent 33%, rgba(0, 0, 0, 0.2) 33%, rgba(0, 0, 0, 0.2) 66%, transparent 66%) left/2.5em 1.5em;\\n}\\nprogress:not([value])::before {\\n\\tcontent:\\\" \\\";\\n\\tposition:absolute;\\n\\theight: 20px;\\n\\ttop:0;\\n\\tleft:0;\\n\\tright:0;\\n\\tbottom:0;\\n\\tborder-radius: 3px;\\n\\tbackground:\\n\\tlinear-gradient(-45deg, transparent 33%, rgba(0, 0, 0, 0.2) 33%, rgba(0, 0, 0, 0.2) 66%, transparent 66%) left/2.5em 1.5em;\\n}\\n\\n@keyframes stripes {\\n from {background-position: 0%}\\n to {background-position: 100%}\\n}\");\n", + " },\n", + " function(Bokeh) {\n", + " inject_raw_css(\".json-formatter-row {\\n font-family: monospace;\\n}\\n.json-formatter-row,\\n.json-formatter-row a,\\n.json-formatter-row a:hover {\\n color: black;\\n text-decoration: none;\\n}\\n.json-formatter-row .json-formatter-row {\\n margin-left: 1rem;\\n}\\n.json-formatter-row .json-formatter-children.json-formatter-empty {\\n opacity: 0.5;\\n margin-left: 1rem;\\n}\\n.json-formatter-row .json-formatter-children.json-formatter-empty:after {\\n display: none;\\n}\\n.json-formatter-row .json-formatter-children.json-formatter-empty.json-formatter-object:after {\\n content: \\\"No properties\\\";\\n}\\n.json-formatter-row .json-formatter-children.json-formatter-empty.json-formatter-array:after {\\n content: \\\"[]\\\";\\n}\\n.json-formatter-row .json-formatter-string,\\n.json-formatter-row .json-formatter-stringifiable {\\n color: green;\\n white-space: pre;\\n word-wrap: break-word;\\n}\\n.json-formatter-row .json-formatter-number {\\n color: blue;\\n}\\n.json-formatter-row .json-formatter-boolean {\\n color: red;\\n}\\n.json-formatter-row .json-formatter-null {\\n color: #855A00;\\n}\\n.json-formatter-row .json-formatter-undefined {\\n color: #ca0b69;\\n}\\n.json-formatter-row .json-formatter-function {\\n color: #FF20ED;\\n}\\n.json-formatter-row .json-formatter-date {\\n background-color: rgba(0, 0, 0, 0.05);\\n}\\n.json-formatter-row .json-formatter-url {\\n text-decoration: underline;\\n color: blue;\\n cursor: pointer;\\n}\\n.json-formatter-row .json-formatter-bracket {\\n color: blue;\\n}\\n.json-formatter-row .json-formatter-key {\\n color: #00008B;\\n padding-right: 0.2rem;\\n}\\n.json-formatter-row .json-formatter-toggler-link {\\n cursor: pointer;\\n}\\n.json-formatter-row .json-formatter-toggler {\\n line-height: 1.2rem;\\n font-size: 0.7rem;\\n vertical-align: middle;\\n opacity: 0.6;\\n cursor: pointer;\\n padding-right: 0.2rem;\\n}\\n.json-formatter-row .json-formatter-toggler:after {\\n display: inline-block;\\n transition: transform 100ms ease-in;\\n content: \\\"\\\\25BA\\\";\\n}\\n.json-formatter-row > a > .json-formatter-preview-text {\\n opacity: 0;\\n transition: opacity 0.15s ease-in;\\n font-style: italic;\\n}\\n.json-formatter-row:hover > a > .json-formatter-preview-text {\\n opacity: 0.6;\\n}\\n.json-formatter-row.json-formatter-open > .json-formatter-toggler-link .json-formatter-toggler:after {\\n transform: rotate(90deg);\\n}\\n.json-formatter-row.json-formatter-open > .json-formatter-children:after {\\n display: inline-block;\\n}\\n.json-formatter-row.json-formatter-open > a > .json-formatter-preview-text {\\n display: none;\\n}\\n.json-formatter-row.json-formatter-open.json-formatter-empty:after {\\n display: block;\\n}\\n.json-formatter-dark.json-formatter-row {\\n font-family: monospace;\\n}\\n.json-formatter-dark.json-formatter-row,\\n.json-formatter-dark.json-formatter-row a,\\n.json-formatter-dark.json-formatter-row a:hover {\\n color: white;\\n text-decoration: none;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-row {\\n margin-left: 1rem;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-children.json-formatter-empty {\\n opacity: 0.5;\\n margin-left: 1rem;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-children.json-formatter-empty:after {\\n display: none;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-children.json-formatter-empty.json-formatter-object:after {\\n content: \\\"No properties\\\";\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-children.json-formatter-empty.json-formatter-array:after {\\n content: \\\"[]\\\";\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-string,\\n.json-formatter-dark.json-formatter-row .json-formatter-stringifiable {\\n color: #31F031;\\n white-space: pre;\\n word-wrap: break-word;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-number {\\n color: #66C2FF;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-boolean {\\n color: #EC4242;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-null {\\n color: #EEC97D;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-undefined {\\n color: #ef8fbe;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-function {\\n color: #FD48CB;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-date {\\n background-color: rgba(255, 255, 255, 0.05);\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-url {\\n text-decoration: underline;\\n color: #027BFF;\\n cursor: pointer;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-bracket {\\n color: #9494FF;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-key {\\n color: #23A0DB;\\n padding-right: 0.2rem;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-toggler-link {\\n cursor: pointer;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-toggler {\\n line-height: 1.2rem;\\n font-size: 0.7rem;\\n vertical-align: middle;\\n opacity: 0.6;\\n cursor: pointer;\\n padding-right: 0.2rem;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-toggler:after {\\n display: inline-block;\\n transition: transform 100ms ease-in;\\n content: \\\"\\\\25BA\\\";\\n}\\n.json-formatter-dark.json-formatter-row > a > .json-formatter-preview-text {\\n opacity: 0;\\n transition: opacity 0.15s ease-in;\\n font-style: italic;\\n}\\n.json-formatter-dark.json-formatter-row:hover > a > .json-formatter-preview-text {\\n opacity: 0.6;\\n}\\n.json-formatter-dark.json-formatter-row.json-formatter-open > .json-formatter-toggler-link .json-formatter-toggler:after {\\n transform: rotate(90deg);\\n}\\n.json-formatter-dark.json-formatter-row.json-formatter-open > .json-formatter-children:after {\\n display: inline-block;\\n}\\n.json-formatter-dark.json-formatter-row.json-formatter-open > a > .json-formatter-preview-text {\\n display: none;\\n}\\n.json-formatter-dark.json-formatter-row.json-formatter-open.json-formatter-empty:after {\\n display: block;\\n}\\n\");\n", + " },\n", + " function(Bokeh) {\n", + " inject_raw_css(\".codehilite .hll { background-color: #ffffcc }\\n.codehilite { background: #f8f8f8; }\\n.codehilite .c { color: #408080; font-style: italic } /* Comment */\\n.codehilite .err { border: 1px solid #FF0000 } /* Error */\\n.codehilite .k { color: #008000; font-weight: bold } /* Keyword */\\n.codehilite .o { color: #666666 } /* Operator */\\n.codehilite .ch { color: #408080; font-style: italic } /* Comment.Hashbang */\\n.codehilite .cm { color: #408080; font-style: italic } /* Comment.Multiline */\\n.codehilite .cp { color: #BC7A00 } /* Comment.Preproc */\\n.codehilite .cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */\\n.codehilite .c1 { color: #408080; font-style: italic } /* Comment.Single */\\n.codehilite .cs { color: #408080; font-style: italic } /* Comment.Special */\\n.codehilite .gd { color: #A00000 } /* Generic.Deleted */\\n.codehilite .ge { font-style: italic } /* Generic.Emph */\\n.codehilite .gr { color: #FF0000 } /* Generic.Error */\\n.codehilite .gh { color: #000080; font-weight: bold } /* Generic.Heading */\\n.codehilite .gi { color: #00A000 } /* Generic.Inserted */\\n.codehilite .go { color: #888888 } /* Generic.Output */\\n.codehilite .gp { color: #000080; font-weight: bold } /* Generic.Prompt */\\n.codehilite .gs { font-weight: bold } /* Generic.Strong */\\n.codehilite .gu { color: #800080; font-weight: bold } /* Generic.Subheading */\\n.codehilite .gt { color: #0044DD } /* Generic.Traceback */\\n.codehilite .kc { color: #008000; font-weight: bold } /* Keyword.Constant */\\n.codehilite .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */\\n.codehilite .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */\\n.codehilite .kp { color: #008000 } /* Keyword.Pseudo */\\n.codehilite .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */\\n.codehilite .kt { color: #B00040 } /* Keyword.Type */\\n.codehilite .m { color: #666666 } /* Literal.Number */\\n.codehilite .s { color: #BA2121 } /* Literal.String */\\n.codehilite .na { color: #7D9029 } /* Name.Attribute */\\n.codehilite .nb { color: #008000 } /* Name.Builtin */\\n.codehilite .nc { color: #0000FF; font-weight: bold } /* Name.Class */\\n.codehilite .no { color: #880000 } /* Name.Constant */\\n.codehilite .nd { color: #AA22FF } /* Name.Decorator */\\n.codehilite .ni { color: #999999; font-weight: bold } /* Name.Entity */\\n.codehilite .ne { color: #D2413A; font-weight: bold } /* Name.Exception */\\n.codehilite .nf { color: #0000FF } /* Name.Function */\\n.codehilite .nl { color: #A0A000 } /* Name.Label */\\n.codehilite .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */\\n.codehilite .nt { color: #008000; font-weight: bold } /* Name.Tag */\\n.codehilite .nv { color: #19177C } /* Name.Variable */\\n.codehilite .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */\\n.codehilite .w { color: #bbbbbb } /* Text.Whitespace */\\n.codehilite .mb { color: #666666 } /* Literal.Number.Bin */\\n.codehilite .mf { color: #666666 } /* Literal.Number.Float */\\n.codehilite .mh { color: #666666 } /* Literal.Number.Hex */\\n.codehilite .mi { color: #666666 } /* Literal.Number.Integer */\\n.codehilite .mo { color: #666666 } /* Literal.Number.Oct */\\n.codehilite .sa { color: #BA2121 } /* Literal.String.Affix */\\n.codehilite .sb { color: #BA2121 } /* Literal.String.Backtick */\\n.codehilite .sc { color: #BA2121 } /* Literal.String.Char */\\n.codehilite .dl { color: #BA2121 } /* Literal.String.Delimiter */\\n.codehilite .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */\\n.codehilite .s2 { color: #BA2121 } /* Literal.String.Double */\\n.codehilite .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */\\n.codehilite .sh { color: #BA2121 } /* Literal.String.Heredoc */\\n.codehilite .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */\\n.codehilite .sx { color: #008000 } /* Literal.String.Other */\\n.codehilite .sr { color: #BB6688 } /* Literal.String.Regex */\\n.codehilite .s1 { color: #BA2121 } /* Literal.String.Single */\\n.codehilite .ss { color: #19177C } /* Literal.String.Symbol */\\n.codehilite .bp { color: #008000 } /* Name.Builtin.Pseudo */\\n.codehilite .fm { color: #0000FF } /* Name.Function.Magic */\\n.codehilite .vc { color: #19177C } /* Name.Variable.Class */\\n.codehilite .vg { color: #19177C } /* Name.Variable.Global */\\n.codehilite .vi { color: #19177C } /* Name.Variable.Instance */\\n.codehilite .vm { color: #19177C } /* Name.Variable.Magic */\\n.codehilite .il { color: #666666 } /* Literal.Number.Integer.Long */\\n\\n.markdown h1 { margin-block-start: 0.34em }\\n.markdown h2 { margin-block-start: 0.42em }\\n.markdown h3 { margin-block-start: 0.5em }\\n.markdown h4 { margin-block-start: 0.67em }\\n.markdown h5 { margin-block-start: 0.84em }\\n.markdown h6 { margin-block-start: 1.17em }\\n.markdown ul { padding-inline-start: 2em }\\n.markdown ol { padding-inline-start: 2em }\\n.markdown strong { font-weight: 600 }\\n.markdown a { color: -webkit-link }\\n.markdown a { color: -moz-hyperlinkText }\\n\");\n", + " },\n", + " function(Bokeh) {\n", + " inject_raw_css(\"table.panel-df {\\n margin-left: auto;\\n margin-right: auto;\\n border: none;\\n border-collapse: collapse;\\n border-spacing: 0;\\n color: black;\\n font-size: 12px;\\n table-layout: fixed;\\n width: 100%;\\n}\\n\\n.panel-df tr, th, td {\\n text-align: right;\\n vertical-align: middle;\\n padding: 0.5em 0.5em !important;\\n line-height: normal;\\n white-space: normal;\\n max-width: none;\\n border: none;\\n}\\n\\n.panel-df tbody {\\n display: table-row-group;\\n vertical-align: middle;\\n border-color: inherit;\\n}\\n\\n.panel-df tbody tr:nth-child(odd) {\\n background: #f5f5f5;\\n}\\n\\n.panel-df thead {\\n border-bottom: 1px solid black;\\n vertical-align: bottom;\\n}\\n\\n.panel-df tr:hover {\\n background: lightblue !important;\\n cursor: pointer;\\n}\\n\");\n", + " },\n", + " function(Bokeh) {\n", + " Bokeh.set_log_level(\"info\");\n", + " },\n", + " \n", + " function(Bokeh) {\n", + " /* BEGIN panel.min.js */\n", + " /*!\n", + " * Copyright (c) 2012 - 2019, Anaconda, Inc., and Bokeh Contributors\n", + " * All rights reserved.\n", + " * \n", + " * Redistribution and use in source and binary forms, with or without modification,\n", + " * are permitted provided that the following conditions are met:\n", + " * \n", + " * Redistributions of source code must retain the above copyright notice,\n", + " * this list of conditions and the following disclaimer.\n", + " * \n", + " * Redistributions in binary form must reproduce the above copyright notice,\n", + " * this list of conditions and the following disclaimer in the documentation\n", + " * and/or other materials provided with the distribution.\n", + " * \n", + " * Neither the name of Anaconda nor the names of any contributors\n", + " * may be used to endorse or promote products derived from this software\n", + " * without specific prior written permission.\n", + " * \n", + " * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n", + " * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n", + " * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n", + " * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\n", + " * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n", + " * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n", + " * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n", + " * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n", + " * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n", + " * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF\n", + " * THE POSSIBILITY OF SUCH DAMAGE.\n", + " */\n", + " (function(root, factory) {\n", + " factory(root[\"Bokeh\"]);\n", + " })(this, function(Bokeh) {\n", + " var define;\n", + " return (function(modules, entry, aliases, externals) {\n", + " if (Bokeh != null) {\n", + " return Bokeh.register_plugin(modules, entry, aliases, externals);\n", + " } else {\n", + " throw new Error(\"Cannot find Bokeh. You have to load it prior to loading plugins.\");\n", + " }\n", + " })\n", + " ({\n", + " \"aa4f566620\": function _(r,e,t){var n=(this&&this.__importStar||function(r){if(r&&r.__esModule)return r;var e={};if(null!=r)for(var t in r)Object.hasOwnProperty.call(r,t)&&(e[t]=r[t]);return e.default=r,e})(r(\"4d02676c49\"));t.Panel=n,r(\"@bokehjs/base\").register_models(n)},\n", + " \"4d02676c49\": function _(a,e,r){var o=a(\"ff4b91e885\");r.AcePlot=o.AcePlot;var t=a(\"12e90a1b7e\");r.Audio=t.Audio;var c=a(\"cf3b018c7a\");r.DeckGLPlot=c.DeckGLPlot;var d=a(\"70a2bb70ef\");r.HTML=d.HTML;var v=a(\"dac8d750fa\");r.JSON=v.JSON;var P=a(\"c81021c8fd\");r.KaTeX=P.KaTeX;var b=a(\"a93ded647d\");r.MathJax=b.MathJax;var l=a(\"98100899bc\");r.Player=l.Player;var f=a(\"d46f026c83\");r.PlotlyPlot=f.PlotlyPlot;var i=a(\"d9b3a262de\");r.Progress=i.Progress;var n=a(\"4b4afba86a\");r.State=n.State;var S=a(\"14b669e6fc\");r.VegaPlot=S.VegaPlot;var V=a(\"71a2bbec38\");r.Video=V.Video;var s=a(\"76bc93d621\");r.VideoStream=s.VideoStream,function(a){for(var e in a)r.hasOwnProperty(e)||(r[e]=a[e])}(a(\"63070bc9ce\"))},\n", + " \"ff4b91e885\": function _(t,e,o){var i,n=this&&this.__extends||(i=function(t,e){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var o in e)e.hasOwnProperty(o)&&(t[o]=e[o])})(t,e)},function(t,e){function o(){this.constructor=t}i(t,e),t.prototype=null===e?Object.create(e):(o.prototype=e.prototype,new o)}),r=(this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var o in t)Object.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e.default=t,e})(t(\"@bokehjs/core/properties\")),s=t(\"@bokehjs/models/layouts/html_box\"),a=t(\"@bokehjs/core/dom\");var c=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.initialize=function(){t.prototype.initialize.call(this),this._ace=window.ace,this._container=a.div({id:\"_\"+Math.random().toString(36).substr(2,9),style:{width:\"100%\",height:\"100%\"}})},e.prototype.connect_signals=function(){var e=this;t.prototype.connect_signals.call(this),this.connect(this.model.properties.code.change,function(){return e._update_code_from_model()}),this.connect(this.model.properties.theme.change,function(){return e._update_theme()}),this.connect(this.model.properties.language.change,function(){return e._update_language()}),this.connect(this.model.properties.annotations.change,function(){return e._add_annotations()}),this.connect(this.model.properties.readonly.change,function(){e._editor.setReadOnly(e.model.readonly)})},e.prototype.render=function(){var e=this;t.prototype.render.call(this),this._container!==this.el.childNodes[0]&&this.el.appendChild(this._container),this._container.textContent=this.model.code,this._editor=this._ace.edit(this._container.id),this._editor.setTheme(\"ace/theme/\"+this.model.theme),this._editor.session.setMode(\"ace/mode/\"+this.model.language),this._editor.setReadOnly(this.model.readonly),this._langTools=this._ace.require(\"ace/ext/language_tools\"),this._editor.setOptions({enableBasicAutocompletion:!0,enableSnippets:!0,fontFamily:\"monospace\"}),this._editor.on(\"change\",function(){return e._update_code_from_editor()})},e.prototype._update_code_from_model=function(){this._editor&&this._editor.getValue()!=this.model.code&&this._editor.setValue(this.model.code)},e.prototype._update_code_from_editor=function(){this._editor.getValue()!=this.model.code&&(this.model.code=this._editor.getValue())},e.prototype._update_theme=function(){this._editor.setTheme(\"ace/theme/\"+this.model.theme)},e.prototype._update_language=function(){this._editor.session.setMode(\"ace/mode/\"+this.model.language)},e.prototype._add_annotations=function(){this._editor.session.setAnnotations(this.model.annotations)},e.prototype.after_layout=function(){t.prototype.after_layout.call(this),this._editor.resize()},e.__name__=\"AcePlotView\",e}(t(\"ec60963462\").PanelHTMLBoxView);o.AcePlotView=c;var h=function(t){function e(e){return t.call(this,e)||this}return n(e,t),e.init_AcePlot=function(){this.prototype.default_view=c,this.define({code:[r.String],language:[r.String,\"python\"],theme:[r.String,\"chrome\"],annotations:[r.Array,[]],readonly:[r.Boolean,!1]}),this.override({height:300,width:300})},e.__name__=\"AcePlot\",e.__module__=\"panel.models.ace\",e}(s.HTMLBox);o.AcePlot=h,h.init_AcePlot()},\n", + " \"ec60963462\": function _(e,t,i){var o,n=this&&this.__extends||(o=function(e,t){return(o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var i in t)t.hasOwnProperty(i)&&(e[i]=t[i])})(e,t)},function(e,t){function i(){this.constructor=e}o(e,t),e.prototype=null===t?Object.create(t):(i.prototype=t.prototype,new i)}),s=e(\"@bokehjs/core/layout/layoutable\"),h=e(\"@bokehjs/core/layout/types\"),r=e(\"@bokehjs/core/dom\"),a=e(\"@bokehjs/models/widgets/markup\"),_=e(\"@bokehjs/models/layouts/html_box\");function c(e,t){var i=null!=t.width?\"fixed\":\"fit\",o=null!=t.height?\"fixed\":\"fit\",n=t.sizing_mode;if(null!=n)if(\"fixed\"==n)i=o=\"fixed\";else if(\"stretch_both\"==n)i=o=\"max\";else if(\"stretch_width\"==n)i=\"max\";else if(\"stretch_height\"==n)o=\"max\";else switch(n){case\"scale_width\":i=\"max\",o=\"min\";break;case\"scale_height\":i=\"min\",o=\"max\";break;case\"scale_both\":i=\"max\",o=\"max\";break;default:throw new Error(\"unreachable\")}\"fixed\"==i&&t.width?e.style.width=t.width+\"px\":\"max\"==i&&(e.style.width=\"100%\"),\"fixed\"==o&&t.height?e.style.height=t.height+\"px\":\"max\"==o&&(e.style.height=\"100%\")}i.set_size=c;var l=function(e){function t(t,i,o){var n=e.call(this)||this;return n.el=t,n.sizing_mode=i,n.changed=o,n._cache={},n._cache_count={},n}return n(t,e),t.prototype._measure=function(e){var t=this,i=[e.width,e.height,this.sizing_mode].toString(),o=this.changed&&\"fixed\"!=this.sizing_mode&&null!=this.sizing_mode?1:0;if(i in this._cache&&this._cache_count[i]>=o)return this._cache_count[i]=this._cache_count[i]+1,this._cache[i];var n=new h.Sizeable(e).bounded_to(this.sizing.size),s=r.sized(this.el,n,function(){var e=new h.Sizeable(r.content_size(t.el)),i=r.extents(t.el),o=i.border,n=i.padding;return e.grow_by(o).grow_by(n).map(Math.ceil)});return this._cache[i]=s,this._cache_count[i]=0,s},t.__name__=\"CachedVariadicBox\",t}(s.Layoutable);i.CachedVariadicBox=l;var d=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n(t,e),t.prototype._update_layout=function(){var e=void 0!==this._prev_sizing_mode&&this._prev_sizing_mode!==this.model.sizing_mode;this._prev_sizing_mode=this.model.sizing_mode,this.layout=new l(this.el,this.model.sizing_mode,e),this.layout.set_sizing(this.box_sizing())},t.prototype.render=function(){e.prototype.render.call(this),c(this.markup_el,this.model)},t.__name__=\"PanelMarkupView\",t}(a.MarkupView);i.PanelMarkupView=d;var u=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n(t,e),t.prototype._update_layout=function(){var e=void 0!==this._prev_sizing_mode&&this._prev_sizing_mode!==this.model.sizing_mode;this._prev_sizing_mode=this.model.sizing_mode,this.layout=new l(this.el,this.model.sizing_mode,e),this.layout.set_sizing(this.box_sizing())},t.prototype.render=function(){e.prototype.render.call(this),c(this.el,this.model)},t.__name__=\"PanelHTMLBoxView\",t}(_.HTMLBoxView);i.PanelHTMLBoxView=u},\n", + " \"12e90a1b7e\": function _(t,e,o){var i,n=this&&this.__extends||(i=function(t,e){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var o in e)e.hasOwnProperty(o)&&(t[o]=e[o])})(t,e)},function(t,e){function o(){this.constructor=t}i(t,e),t.prototype=null===e?Object.create(e):(o.prototype=e.prototype,new o)}),u=(this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var o in t)Object.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e.default=t,e})(t(\"@bokehjs/core/properties\")),l=t(\"@bokehjs/models/layouts/html_box\"),s=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.initialize=function(){t.prototype.initialize.call(this),this._blocked=!1,this._setting=!1,this._time=Date.now()},e.prototype.connect_signals=function(){var e=this;t.prototype.connect_signals.call(this),this.connect(this.model.properties.loop.change,function(){return e.set_loop()}),this.connect(this.model.properties.paused.change,function(){return e.set_paused()}),this.connect(this.model.properties.time.change,function(){return e.set_time()}),this.connect(this.model.properties.value.change,function(){return e.set_value()}),this.connect(this.model.properties.volume.change,function(){return e.set_volume()})},e.prototype.render=function(){var e=this;t.prototype.render.call(this),this.audioEl=document.createElement(\"audio\"),this.audioEl.controls=!0,this.audioEl.src=this.model.value,this.audioEl.currentTime=this.model.time,this.audioEl.loop=this.model.loop,null!=this.model.volume?this.audioEl.volume=this.model.volume/100:this.model.volume=100*this.audioEl.volume,this.audioEl.onpause=function(){return e.model.paused=!0},this.audioEl.onplay=function(){return e.model.paused=!1},this.audioEl.ontimeupdate=function(){return e.update_time(e)},this.audioEl.onvolumechange=function(){return e.update_volume(e)},this.el.appendChild(this.audioEl),this.model.paused||this.audioEl.play()},e.prototype.update_time=function(t){t._setting?t._setting=!1:Date.now()-t._time1&&\"number\"==typeof h[0]?l[u]=r.data[u].slice(c*h[1],c*h[1]+h[1]):l[u]=r.data[u][c]}a.push(l)}i.data=a}t&&this.updateDeck()},e.prototype._on_click_event=function(t){var e={coordinate:t.coordinate,lngLat:t.lngLat,index:t.index};this.model.clickState=e},e.prototype._on_hover_event=function(t){var e={coordinate:t.coordinate,lngLat:t.lngLat,index:t.index};this.model.hoverState=e},e.prototype._on_viewState_event=function(t){this.model.viewState=t.viewState},e.prototype.getData=function(){var t=this;return r(r({},this.model.data),{layers:this.model.layers,initialViewState:this.model.initialViewState,onViewStateChange:function(e){return t._on_viewState_event(e)},onClick:function(e){return t._on_click_event(e)},onHover:function(e){return t._on_hover_event(e)}})},e.prototype.updateDeck=function(){if(this.deckGL){var t=this.getData();if(d.updateDeck)d.updateDeck(t,this.deckGL);else{var e=this.jsonConverter.convert(t);this.deckGL.setProps(e)}}else this.render()},e.prototype.createDeck=function(t){var e,o=t.mapboxApiKey,n=t.container,i=t.jsonInput,a=t.tooltip;try{var s=this.jsonConverter.convert(i),c=u.makeTooltip(a);e=new d.DeckGL(r(r({},s),{map:f,mapboxApiAccessToken:o,container:n,getTooltip:c}))}catch(t){console.error(t)}return e},e.prototype.render=function(){t.prototype.render.call(this);var e=c.div({class:\"deckgl\"});_.set_size(e,this.model);var o=this.model.mapbox_api_key,n=this.model.tooltip,i=this.getData();d.createDeck?this.deckGL=d.createDeck({mapboxApiKey:o,container:e,jsonInput:i,tooltip:n}):this.deckGL=this.createDeck({mapboxApiKey:o,container:e,jsonInput:i,tooltip:n}),this.el.appendChild(e)},e.__name__=\"DeckGLPlotView\",e}(_.PanelHTMLBoxView);o.DeckGLPlotView=m;var k=function(t){function e(e){return t.call(this,e)||this}return i(e,t),e.init_DeckGLPlot=function(){this.prototype.default_view=m,this.define({data:[l.Any],data_sources:[l.Array,[]],clickState:[l.Any],hoverState:[l.Any],initialViewState:[l.Any],layers:[l.Array,[]],mapbox_api_key:[l.String],tooltip:[l.Any],viewState:[l.Any]}),this.override({height:400,width:600})},e.__name__=\"DeckGLPlot\",e.__module__=\"panel.models.deckgl\",e}(p.HTMLBox);o.DeckGLPlot=k,k.init_DeckGLPlot()},\n", + " \"27d3545a25\": function _(e,t,n){var i,r,l={fontFamily:'\"Helvetica Neue\", Helvetica, Arial, sans-serif',display:\"flex\",flex:\"wrap\",maxWidth:\"500px\",flexDirection:\"column\",zIndex:2};function a(){return document.createElement(\"div\")}function o(e){if(!e.picked)return null;if(e.object===i)return r;var t={html:c(e.object),style:l};return r=t,i=e.object,t}n.getTooltipDefault=o;var s=new Set([\"position\",\"index\"]);function c(e){var t=a();for(var n in e)if(!s.has(n)){var i=a();i.className=\"header\",i.textContent=n;var r=a();r.className=\"value\",r.textContent=u(e[n]);var l=a();f(l,i,r),l.appendChild(i),l.appendChild(r),t.appendChild(l)}return t.innerHTML}function f(e,t,n){Object.assign(t.style,{fontWeight:700,marginRight:\"10px\",flex:\"1 1 0%\"}),Object.assign(n.style,{flex:\"none\",maxWidth:\"250px\",overflow:\"hidden\",whiteSpace:\"nowrap\",textOverflow:\"ellipsis\"}),Object.assign(e.style,{display:\"flex\",flexDirection:\"row\",justifyContent:\"space-between\",alignItems:\"stretch\"})}function u(e){var t;if(Array.isArray(e)&&e.length>4)t=\"Array<\"+e.length+\">\";else if(\"string\"==typeof e)t=e;else if(\"number\"==typeof e)t=String(e);else try{t=JSON.stringify(e)}catch(e){t=\"\"}return t.length>50&&(t=t.slice(0,50)),t}function p(e,t){var n=e;for(var i in t)n=n.replace(\"{\"+i+\"}\",t[i]);return n}n.tabularize=c,n.toText=u,n.substituteIn=p,n.makeTooltip=function(e){return e?e.html||e.text?function(t){if(!t.picked)return null;var n={style:e.style||l};return e.html?n.html=p(e.html,t.object):n.text=p(e.text,t.object),n}:o:null}},\n", + " \"093eb75864\": function _(E,_,R){_.exports={DEPTH_BUFFER_BIT:256,STENCIL_BUFFER_BIT:1024,COLOR_BUFFER_BIT:16384,POINTS:0,LINES:1,LINE_LOOP:2,LINE_STRIP:3,TRIANGLES:4,TRIANGLE_STRIP:5,TRIANGLE_FAN:6,ZERO:0,ONE:1,SRC_COLOR:768,ONE_MINUS_SRC_COLOR:769,SRC_ALPHA:770,ONE_MINUS_SRC_ALPHA:771,DST_ALPHA:772,ONE_MINUS_DST_ALPHA:773,DST_COLOR:774,ONE_MINUS_DST_COLOR:775,SRC_ALPHA_SATURATE:776,CONSTANT_COLOR:32769,ONE_MINUS_CONSTANT_COLOR:32770,CONSTANT_ALPHA:32771,ONE_MINUS_CONSTANT_ALPHA:32772,FUNC_ADD:32774,FUNC_SUBTRACT:32778,FUNC_REVERSE_SUBTRACT:32779,BLEND_EQUATION:32777,BLEND_EQUATION_RGB:32777,BLEND_EQUATION_ALPHA:34877,BLEND_DST_RGB:32968,BLEND_SRC_RGB:32969,BLEND_DST_ALPHA:32970,BLEND_SRC_ALPHA:32971,BLEND_COLOR:32773,ARRAY_BUFFER_BINDING:34964,ELEMENT_ARRAY_BUFFER_BINDING:34965,LINE_WIDTH:2849,ALIASED_POINT_SIZE_RANGE:33901,ALIASED_LINE_WIDTH_RANGE:33902,CULL_FACE_MODE:2885,FRONT_FACE:2886,DEPTH_RANGE:2928,DEPTH_WRITEMASK:2930,DEPTH_CLEAR_VALUE:2931,DEPTH_FUNC:2932,STENCIL_CLEAR_VALUE:2961,STENCIL_FUNC:2962,STENCIL_FAIL:2964,STENCIL_PASS_DEPTH_FAIL:2965,STENCIL_PASS_DEPTH_PASS:2966,STENCIL_REF:2967,STENCIL_VALUE_MASK:2963,STENCIL_WRITEMASK:2968,STENCIL_BACK_FUNC:34816,STENCIL_BACK_FAIL:34817,STENCIL_BACK_PASS_DEPTH_FAIL:34818,STENCIL_BACK_PASS_DEPTH_PASS:34819,STENCIL_BACK_REF:36003,STENCIL_BACK_VALUE_MASK:36004,STENCIL_BACK_WRITEMASK:36005,VIEWPORT:2978,SCISSOR_BOX:3088,COLOR_CLEAR_VALUE:3106,COLOR_WRITEMASK:3107,UNPACK_ALIGNMENT:3317,PACK_ALIGNMENT:3333,MAX_TEXTURE_SIZE:3379,MAX_VIEWPORT_DIMS:3386,SUBPIXEL_BITS:3408,RED_BITS:3410,GREEN_BITS:3411,BLUE_BITS:3412,ALPHA_BITS:3413,DEPTH_BITS:3414,STENCIL_BITS:3415,POLYGON_OFFSET_UNITS:10752,POLYGON_OFFSET_FACTOR:32824,TEXTURE_BINDING_2D:32873,SAMPLE_BUFFERS:32936,SAMPLES:32937,SAMPLE_COVERAGE_VALUE:32938,SAMPLE_COVERAGE_INVERT:32939,COMPRESSED_TEXTURE_FORMATS:34467,VENDOR:7936,RENDERER:7937,VERSION:7938,IMPLEMENTATION_COLOR_READ_TYPE:35738,IMPLEMENTATION_COLOR_READ_FORMAT:35739,BROWSER_DEFAULT_WEBGL:37444,STATIC_DRAW:35044,STREAM_DRAW:35040,DYNAMIC_DRAW:35048,ARRAY_BUFFER:34962,ELEMENT_ARRAY_BUFFER:34963,BUFFER_SIZE:34660,BUFFER_USAGE:34661,CURRENT_VERTEX_ATTRIB:34342,VERTEX_ATTRIB_ARRAY_ENABLED:34338,VERTEX_ATTRIB_ARRAY_SIZE:34339,VERTEX_ATTRIB_ARRAY_STRIDE:34340,VERTEX_ATTRIB_ARRAY_TYPE:34341,VERTEX_ATTRIB_ARRAY_NORMALIZED:34922,VERTEX_ATTRIB_ARRAY_POINTER:34373,VERTEX_ATTRIB_ARRAY_BUFFER_BINDING:34975,CULL_FACE:2884,FRONT:1028,BACK:1029,FRONT_AND_BACK:1032,BLEND:3042,DEPTH_TEST:2929,DITHER:3024,POLYGON_OFFSET_FILL:32823,SAMPLE_ALPHA_TO_COVERAGE:32926,SAMPLE_COVERAGE:32928,SCISSOR_TEST:3089,STENCIL_TEST:2960,NO_ERROR:0,INVALID_ENUM:1280,INVALID_VALUE:1281,INVALID_OPERATION:1282,OUT_OF_MEMORY:1285,CONTEXT_LOST_WEBGL:37442,CW:2304,CCW:2305,DONT_CARE:4352,FASTEST:4353,NICEST:4354,GENERATE_MIPMAP_HINT:33170,BYTE:5120,UNSIGNED_BYTE:5121,SHORT:5122,UNSIGNED_SHORT:5123,INT:5124,UNSIGNED_INT:5125,FLOAT:5126,DOUBLE:5130,DEPTH_COMPONENT:6402,ALPHA:6406,RGB:6407,RGBA:6408,LUMINANCE:6409,LUMINANCE_ALPHA:6410,UNSIGNED_SHORT_4_4_4_4:32819,UNSIGNED_SHORT_5_5_5_1:32820,UNSIGNED_SHORT_5_6_5:33635,FRAGMENT_SHADER:35632,VERTEX_SHADER:35633,COMPILE_STATUS:35713,DELETE_STATUS:35712,LINK_STATUS:35714,VALIDATE_STATUS:35715,ATTACHED_SHADERS:35717,ACTIVE_ATTRIBUTES:35721,ACTIVE_UNIFORMS:35718,MAX_VERTEX_ATTRIBS:34921,MAX_VERTEX_UNIFORM_VECTORS:36347,MAX_VARYING_VECTORS:36348,MAX_COMBINED_TEXTURE_IMAGE_UNITS:35661,MAX_VERTEX_TEXTURE_IMAGE_UNITS:35660,MAX_TEXTURE_IMAGE_UNITS:34930,MAX_FRAGMENT_UNIFORM_VECTORS:36349,SHADER_TYPE:35663,SHADING_LANGUAGE_VERSION:35724,CURRENT_PROGRAM:35725,NEVER:512,ALWAYS:519,LESS:513,EQUAL:514,LEQUAL:515,GREATER:516,GEQUAL:518,NOTEQUAL:517,KEEP:7680,REPLACE:7681,INCR:7682,DECR:7683,INVERT:5386,INCR_WRAP:34055,DECR_WRAP:34056,NEAREST:9728,LINEAR:9729,NEAREST_MIPMAP_NEAREST:9984,LINEAR_MIPMAP_NEAREST:9985,NEAREST_MIPMAP_LINEAR:9986,LINEAR_MIPMAP_LINEAR:9987,TEXTURE_MAG_FILTER:10240,TEXTURE_MIN_FILTER:10241,TEXTURE_WRAP_S:10242,TEXTURE_WRAP_T:10243,TEXTURE_2D:3553,TEXTURE:5890,TEXTURE_CUBE_MAP:34067,TEXTURE_BINDING_CUBE_MAP:34068,TEXTURE_CUBE_MAP_POSITIVE_X:34069,TEXTURE_CUBE_MAP_NEGATIVE_X:34070,TEXTURE_CUBE_MAP_POSITIVE_Y:34071,TEXTURE_CUBE_MAP_NEGATIVE_Y:34072,TEXTURE_CUBE_MAP_POSITIVE_Z:34073,TEXTURE_CUBE_MAP_NEGATIVE_Z:34074,MAX_CUBE_MAP_TEXTURE_SIZE:34076,TEXTURE0:33984,ACTIVE_TEXTURE:34016,REPEAT:10497,CLAMP_TO_EDGE:33071,MIRRORED_REPEAT:33648,TEXTURE_WIDTH:4096,TEXTURE_HEIGHT:4097,FLOAT_VEC2:35664,FLOAT_VEC3:35665,FLOAT_VEC4:35666,INT_VEC2:35667,INT_VEC3:35668,INT_VEC4:35669,BOOL:35670,BOOL_VEC2:35671,BOOL_VEC3:35672,BOOL_VEC4:35673,FLOAT_MAT2:35674,FLOAT_MAT3:35675,FLOAT_MAT4:35676,SAMPLER_2D:35678,SAMPLER_CUBE:35680,LOW_FLOAT:36336,MEDIUM_FLOAT:36337,HIGH_FLOAT:36338,LOW_INT:36339,MEDIUM_INT:36340,HIGH_INT:36341,FRAMEBUFFER:36160,RENDERBUFFER:36161,RGBA4:32854,RGB5_A1:32855,RGB565:36194,DEPTH_COMPONENT16:33189,STENCIL_INDEX:6401,STENCIL_INDEX8:36168,DEPTH_STENCIL:34041,RENDERBUFFER_WIDTH:36162,RENDERBUFFER_HEIGHT:36163,RENDERBUFFER_INTERNAL_FORMAT:36164,RENDERBUFFER_RED_SIZE:36176,RENDERBUFFER_GREEN_SIZE:36177,RENDERBUFFER_BLUE_SIZE:36178,RENDERBUFFER_ALPHA_SIZE:36179,RENDERBUFFER_DEPTH_SIZE:36180,RENDERBUFFER_STENCIL_SIZE:36181,FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE:36048,FRAMEBUFFER_ATTACHMENT_OBJECT_NAME:36049,FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL:36050,FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE:36051,COLOR_ATTACHMENT0:36064,DEPTH_ATTACHMENT:36096,STENCIL_ATTACHMENT:36128,DEPTH_STENCIL_ATTACHMENT:33306,NONE:0,FRAMEBUFFER_COMPLETE:36053,FRAMEBUFFER_INCOMPLETE_ATTACHMENT:36054,FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:36055,FRAMEBUFFER_INCOMPLETE_DIMENSIONS:36057,FRAMEBUFFER_UNSUPPORTED:36061,FRAMEBUFFER_BINDING:36006,RENDERBUFFER_BINDING:36007,READ_FRAMEBUFFER:36008,DRAW_FRAMEBUFFER:36009,MAX_RENDERBUFFER_SIZE:34024,INVALID_FRAMEBUFFER_OPERATION:1286,UNPACK_FLIP_Y_WEBGL:37440,UNPACK_PREMULTIPLY_ALPHA_WEBGL:37441,UNPACK_COLORSPACE_CONVERSION_WEBGL:37443,READ_BUFFER:3074,UNPACK_ROW_LENGTH:3314,UNPACK_SKIP_ROWS:3315,UNPACK_SKIP_PIXELS:3316,PACK_ROW_LENGTH:3330,PACK_SKIP_ROWS:3331,PACK_SKIP_PIXELS:3332,TEXTURE_BINDING_3D:32874,UNPACK_SKIP_IMAGES:32877,UNPACK_IMAGE_HEIGHT:32878,MAX_3D_TEXTURE_SIZE:32883,MAX_ELEMENTS_VERTICES:33e3,MAX_ELEMENTS_INDICES:33001,MAX_TEXTURE_LOD_BIAS:34045,MAX_FRAGMENT_UNIFORM_COMPONENTS:35657,MAX_VERTEX_UNIFORM_COMPONENTS:35658,MAX_ARRAY_TEXTURE_LAYERS:35071,MIN_PROGRAM_TEXEL_OFFSET:35076,MAX_PROGRAM_TEXEL_OFFSET:35077,MAX_VARYING_COMPONENTS:35659,FRAGMENT_SHADER_DERIVATIVE_HINT:35723,RASTERIZER_DISCARD:35977,VERTEX_ARRAY_BINDING:34229,MAX_VERTEX_OUTPUT_COMPONENTS:37154,MAX_FRAGMENT_INPUT_COMPONENTS:37157,MAX_SERVER_WAIT_TIMEOUT:37137,MAX_ELEMENT_INDEX:36203,RED:6403,RGB8:32849,RGBA8:32856,RGB10_A2:32857,TEXTURE_3D:32879,TEXTURE_WRAP_R:32882,TEXTURE_MIN_LOD:33082,TEXTURE_MAX_LOD:33083,TEXTURE_BASE_LEVEL:33084,TEXTURE_MAX_LEVEL:33085,TEXTURE_COMPARE_MODE:34892,TEXTURE_COMPARE_FUNC:34893,SRGB:35904,SRGB8:35905,SRGB8_ALPHA8:35907,COMPARE_REF_TO_TEXTURE:34894,RGBA32F:34836,RGB32F:34837,RGBA16F:34842,RGB16F:34843,TEXTURE_2D_ARRAY:35866,TEXTURE_BINDING_2D_ARRAY:35869,R11F_G11F_B10F:35898,RGB9_E5:35901,RGBA32UI:36208,RGB32UI:36209,RGBA16UI:36214,RGB16UI:36215,RGBA8UI:36220,RGB8UI:36221,RGBA32I:36226,RGB32I:36227,RGBA16I:36232,RGB16I:36233,RGBA8I:36238,RGB8I:36239,RED_INTEGER:36244,RGB_INTEGER:36248,RGBA_INTEGER:36249,R8:33321,RG8:33323,R16F:33325,R32F:33326,RG16F:33327,RG32F:33328,R8I:33329,R8UI:33330,R16I:33331,R16UI:33332,R32I:33333,R32UI:33334,RG8I:33335,RG8UI:33336,RG16I:33337,RG16UI:33338,RG32I:33339,RG32UI:33340,R8_SNORM:36756,RG8_SNORM:36757,RGB8_SNORM:36758,RGBA8_SNORM:36759,RGB10_A2UI:36975,TEXTURE_IMMUTABLE_FORMAT:37167,TEXTURE_IMMUTABLE_LEVELS:33503,UNSIGNED_INT_2_10_10_10_REV:33640,UNSIGNED_INT_10F_11F_11F_REV:35899,UNSIGNED_INT_5_9_9_9_REV:35902,FLOAT_32_UNSIGNED_INT_24_8_REV:36269,UNSIGNED_INT_24_8:34042,HALF_FLOAT:5131,RG:33319,RG_INTEGER:33320,INT_2_10_10_10_REV:36255,CURRENT_QUERY:34917,QUERY_RESULT:34918,QUERY_RESULT_AVAILABLE:34919,ANY_SAMPLES_PASSED:35887,ANY_SAMPLES_PASSED_CONSERVATIVE:36202,MAX_DRAW_BUFFERS:34852,DRAW_BUFFER0:34853,DRAW_BUFFER1:34854,DRAW_BUFFER2:34855,DRAW_BUFFER3:34856,DRAW_BUFFER4:34857,DRAW_BUFFER5:34858,DRAW_BUFFER6:34859,DRAW_BUFFER7:34860,DRAW_BUFFER8:34861,DRAW_BUFFER9:34862,DRAW_BUFFER10:34863,DRAW_BUFFER11:34864,DRAW_BUFFER12:34865,DRAW_BUFFER13:34866,DRAW_BUFFER14:34867,DRAW_BUFFER15:34868,MAX_COLOR_ATTACHMENTS:36063,COLOR_ATTACHMENT1:36065,COLOR_ATTACHMENT2:36066,COLOR_ATTACHMENT3:36067,COLOR_ATTACHMENT4:36068,COLOR_ATTACHMENT5:36069,COLOR_ATTACHMENT6:36070,COLOR_ATTACHMENT7:36071,COLOR_ATTACHMENT8:36072,COLOR_ATTACHMENT9:36073,COLOR_ATTACHMENT10:36074,COLOR_ATTACHMENT11:36075,COLOR_ATTACHMENT12:36076,COLOR_ATTACHMENT13:36077,COLOR_ATTACHMENT14:36078,COLOR_ATTACHMENT15:36079,SAMPLER_3D:35679,SAMPLER_2D_SHADOW:35682,SAMPLER_2D_ARRAY:36289,SAMPLER_2D_ARRAY_SHADOW:36292,SAMPLER_CUBE_SHADOW:36293,INT_SAMPLER_2D:36298,INT_SAMPLER_3D:36299,INT_SAMPLER_CUBE:36300,INT_SAMPLER_2D_ARRAY:36303,UNSIGNED_INT_SAMPLER_2D:36306,UNSIGNED_INT_SAMPLER_3D:36307,UNSIGNED_INT_SAMPLER_CUBE:36308,UNSIGNED_INT_SAMPLER_2D_ARRAY:36311,MAX_SAMPLES:36183,SAMPLER_BINDING:35097,PIXEL_PACK_BUFFER:35051,PIXEL_UNPACK_BUFFER:35052,PIXEL_PACK_BUFFER_BINDING:35053,PIXEL_UNPACK_BUFFER_BINDING:35055,COPY_READ_BUFFER:36662,COPY_WRITE_BUFFER:36663,COPY_READ_BUFFER_BINDING:36662,COPY_WRITE_BUFFER_BINDING:36663,FLOAT_MAT2x3:35685,FLOAT_MAT2x4:35686,FLOAT_MAT3x2:35687,FLOAT_MAT3x4:35688,FLOAT_MAT4x2:35689,FLOAT_MAT4x3:35690,UNSIGNED_INT_VEC2:36294,UNSIGNED_INT_VEC3:36295,UNSIGNED_INT_VEC4:36296,UNSIGNED_NORMALIZED:35863,SIGNED_NORMALIZED:36764,VERTEX_ATTRIB_ARRAY_INTEGER:35069,VERTEX_ATTRIB_ARRAY_DIVISOR:35070,TRANSFORM_FEEDBACK_BUFFER_MODE:35967,MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS:35968,TRANSFORM_FEEDBACK_VARYINGS:35971,TRANSFORM_FEEDBACK_BUFFER_START:35972,TRANSFORM_FEEDBACK_BUFFER_SIZE:35973,TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN:35976,MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS:35978,MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS:35979,INTERLEAVED_ATTRIBS:35980,SEPARATE_ATTRIBS:35981,TRANSFORM_FEEDBACK_BUFFER:35982,TRANSFORM_FEEDBACK_BUFFER_BINDING:35983,TRANSFORM_FEEDBACK:36386,TRANSFORM_FEEDBACK_PAUSED:36387,TRANSFORM_FEEDBACK_ACTIVE:36388,TRANSFORM_FEEDBACK_BINDING:36389,FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING:33296,FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE:33297,FRAMEBUFFER_ATTACHMENT_RED_SIZE:33298,FRAMEBUFFER_ATTACHMENT_GREEN_SIZE:33299,FRAMEBUFFER_ATTACHMENT_BLUE_SIZE:33300,FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE:33301,FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE:33302,FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE:33303,FRAMEBUFFER_DEFAULT:33304,DEPTH24_STENCIL8:35056,DRAW_FRAMEBUFFER_BINDING:36006,READ_FRAMEBUFFER_BINDING:36010,RENDERBUFFER_SAMPLES:36011,FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER:36052,FRAMEBUFFER_INCOMPLETE_MULTISAMPLE:36182,UNIFORM_BUFFER:35345,UNIFORM_BUFFER_BINDING:35368,UNIFORM_BUFFER_START:35369,UNIFORM_BUFFER_SIZE:35370,MAX_VERTEX_UNIFORM_BLOCKS:35371,MAX_FRAGMENT_UNIFORM_BLOCKS:35373,MAX_COMBINED_UNIFORM_BLOCKS:35374,MAX_UNIFORM_BUFFER_BINDINGS:35375,MAX_UNIFORM_BLOCK_SIZE:35376,MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS:35377,MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS:35379,UNIFORM_BUFFER_OFFSET_ALIGNMENT:35380,ACTIVE_UNIFORM_BLOCKS:35382,UNIFORM_TYPE:35383,UNIFORM_SIZE:35384,UNIFORM_BLOCK_INDEX:35386,UNIFORM_OFFSET:35387,UNIFORM_ARRAY_STRIDE:35388,UNIFORM_MATRIX_STRIDE:35389,UNIFORM_IS_ROW_MAJOR:35390,UNIFORM_BLOCK_BINDING:35391,UNIFORM_BLOCK_DATA_SIZE:35392,UNIFORM_BLOCK_ACTIVE_UNIFORMS:35394,UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES:35395,UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER:35396,UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER:35398,OBJECT_TYPE:37138,SYNC_CONDITION:37139,SYNC_STATUS:37140,SYNC_FLAGS:37141,SYNC_FENCE:37142,SYNC_GPU_COMMANDS_COMPLETE:37143,UNSIGNALED:37144,SIGNALED:37145,ALREADY_SIGNALED:37146,TIMEOUT_EXPIRED:37147,CONDITION_SATISFIED:37148,WAIT_FAILED:37149,SYNC_FLUSH_COMMANDS_BIT:1,COLOR:6144,DEPTH:6145,STENCIL:6146,MIN:32775,MAX:32776,DEPTH_COMPONENT24:33190,STREAM_READ:35041,STREAM_COPY:35042,STATIC_READ:35045,STATIC_COPY:35046,DYNAMIC_READ:35049,DYNAMIC_COPY:35050,DEPTH_COMPONENT32F:36012,DEPTH32F_STENCIL8:36013,INVALID_INDEX:4294967295,TIMEOUT_IGNORED:-1,MAX_CLIENT_WAIT_TIMEOUT_WEBGL:37447,VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE:35070,UNMASKED_VENDOR_WEBGL:37445,UNMASKED_RENDERER_WEBGL:37446,MAX_TEXTURE_MAX_ANISOTROPY_EXT:34047,TEXTURE_MAX_ANISOTROPY_EXT:34046,COMPRESSED_RGB_S3TC_DXT1_EXT:33776,COMPRESSED_RGBA_S3TC_DXT1_EXT:33777,COMPRESSED_RGBA_S3TC_DXT3_EXT:33778,COMPRESSED_RGBA_S3TC_DXT5_EXT:33779,COMPRESSED_R11_EAC:37488,COMPRESSED_SIGNED_R11_EAC:37489,COMPRESSED_RG11_EAC:37490,COMPRESSED_SIGNED_RG11_EAC:37491,COMPRESSED_RGB8_ETC2:37492,COMPRESSED_RGBA8_ETC2_EAC:37493,COMPRESSED_SRGB8_ETC2:37494,COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:37495,COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2:37496,COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2:37497,COMPRESSED_RGB_PVRTC_4BPPV1_IMG:35840,COMPRESSED_RGBA_PVRTC_4BPPV1_IMG:35842,COMPRESSED_RGB_PVRTC_2BPPV1_IMG:35841,COMPRESSED_RGBA_PVRTC_2BPPV1_IMG:35843,COMPRESSED_RGB_ETC1_WEBGL:36196,COMPRESSED_RGB_ATC_WEBGL:35986,COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL:35986,COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL:34798,UNSIGNED_INT_24_8_WEBGL:34042,HALF_FLOAT_OES:36193,RGBA32F_EXT:34836,RGB32F_EXT:34837,FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE_EXT:33297,UNSIGNED_NORMALIZED_EXT:35863,MIN_EXT:32775,MAX_EXT:32776,SRGB_EXT:35904,SRGB_ALPHA_EXT:35906,SRGB8_ALPHA8_EXT:35907,FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT:33296,FRAGMENT_SHADER_DERIVATIVE_HINT_OES:35723,COLOR_ATTACHMENT0_WEBGL:36064,COLOR_ATTACHMENT1_WEBGL:36065,COLOR_ATTACHMENT2_WEBGL:36066,COLOR_ATTACHMENT3_WEBGL:36067,COLOR_ATTACHMENT4_WEBGL:36068,COLOR_ATTACHMENT5_WEBGL:36069,COLOR_ATTACHMENT6_WEBGL:36070,COLOR_ATTACHMENT7_WEBGL:36071,COLOR_ATTACHMENT8_WEBGL:36072,COLOR_ATTACHMENT9_WEBGL:36073,COLOR_ATTACHMENT10_WEBGL:36074,COLOR_ATTACHMENT11_WEBGL:36075,COLOR_ATTACHMENT12_WEBGL:36076,COLOR_ATTACHMENT13_WEBGL:36077,COLOR_ATTACHMENT14_WEBGL:36078,COLOR_ATTACHMENT15_WEBGL:36079,DRAW_BUFFER0_WEBGL:34853,DRAW_BUFFER1_WEBGL:34854,DRAW_BUFFER2_WEBGL:34855,DRAW_BUFFER3_WEBGL:34856,DRAW_BUFFER4_WEBGL:34857,DRAW_BUFFER5_WEBGL:34858,DRAW_BUFFER6_WEBGL:34859,DRAW_BUFFER7_WEBGL:34860,DRAW_BUFFER8_WEBGL:34861,DRAW_BUFFER9_WEBGL:34862,DRAW_BUFFER10_WEBGL:34863,DRAW_BUFFER11_WEBGL:34864,DRAW_BUFFER12_WEBGL:34865,DRAW_BUFFER13_WEBGL:34866,DRAW_BUFFER14_WEBGL:34867,DRAW_BUFFER15_WEBGL:34868,MAX_COLOR_ATTACHMENTS_WEBGL:36063,MAX_DRAW_BUFFERS_WEBGL:34852,VERTEX_ARRAY_BINDING_OES:34229,QUERY_COUNTER_BITS_EXT:34916,CURRENT_QUERY_EXT:34917,QUERY_RESULT_EXT:34918,QUERY_RESULT_AVAILABLE_EXT:34919,TIME_ELAPSED_EXT:35007,TIMESTAMP_EXT:36392,GPU_DISJOINT_EXT:36795}},\n", + " \"70a2bb70ef\": function _(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=t(\"@bokehjs/models/widgets/markup\");var a=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.render=function(){t.prototype.render.call(this);var e,r=(e=this.model.text,(new DOMParser).parseFromString(e,\"text/html\").documentElement.textContent)||this.model.text;r?(this.markup_el.innerHTML=r,Array.from(this.markup_el.querySelectorAll(\"script\")).forEach(function(t){var e=document.createElement(\"script\");Array.from(t.attributes).forEach(function(t){return e.setAttribute(t.name,t.value)}),e.appendChild(document.createTextNode(t.innerHTML)),t.parentNode&&t.parentNode.replaceChild(e,t)})):this.markup_el.innerHTML=\"\"},e.__name__=\"HTMLView\",e}(t(\"ec60963462\").PanelMarkupView);r.HTMLView=a;var u=function(t){function e(e){return t.call(this,e)||this}return o(e,t),e.init_HTML=function(){this.prototype.default_view=a},e.__name__=\"HTML\",e.__module__=\"panel.models.markup\",e}(i.Markup);r.HTML=u,u.init_HTML()},\n", + " \"dac8d750fa\": function _(e,t,r){var n,o=this&&this.__extends||(n=function(e,t){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])})(e,t)},function(e,t){function r(){this.constructor=e}n(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}},u=i(e(\"@bokehjs/core/properties\")),s=e(\"@bokehjs/models/widgets/markup\"),p=a(e(\"cb07e54f5a\")),l=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return o(t,e),t.prototype.render=function(){e.prototype.render.call(this);var t,r=this.model.text.replace(/(\\r\\n|\\n|\\r)/gm,\"\").replace(\"'\",'\"');try{t=window.JSON.parse(r)}catch(e){return void(this.markup_el.innerHTML=\"Invalid JSON: \"+e.toString())}var n={hoverPreviewEnabled:this.model.hover_preview,theme:this.model.theme},o=new p.default(t,this.model.depth,n).render(),i=\"border-radius: 5px; padding: 10px;\";\"dark\"==this.model.theme?o.style.cssText=\"background-color: rgb(30, 30, 30);\"+i:o.style.cssText=i,this.markup_el.append(o)},t.__name__=\"JSONView\",t}(e(\"ec60963462\").PanelMarkupView);r.JSONView=l;var _=[\"dark\",\"light\"],h=function(e){function t(t){return e.call(this,t)||this}return o(t,e),t.init_JSON=function(){this.prototype.default_view=l,this.define({depth:[u.Number,1],hover_preview:[u.Boolean,!1],theme:[u.Enum(_),\"dark\"]})},t.__name__=\"JSON\",t.__module__=\"panel.models.markup\",t}(s.Markup);r.JSON=h,h.init_JSON()},\n", + " \"cb07e54f5a\": function _(t,e,r){function n(t){return null===t?\"null\":typeof t}function o(t){return!!t&&\"object\"==typeof t}function i(t){if(void 0===t)return\"\";if(null===t)return\"Object\";if(\"object\"==typeof t&&!t.constructor)return\"Object\";var e=/function ([^(]*)/.exec(t.constructor.toString());return e&&e.length>1?e[1]:\"\"}function s(t,e,r){return\"null\"===t||\"undefined\"===t?t:(\"string\"!==t&&\"stringifiable\"!==t||(r='\"'+function(t){return t.replace(/\"/g,'\\\\\"')}(r)+'\"'),\"function\"===t?e.toString().replace(/[\\r\\n]/g,\"\").replace(/\\{.*\\}/,\"\")+\"{…}\":r)}function a(t){var e=\"\";return o(t)?(e=i(t),Array.isArray(t)&&(e+=\"[\"+t.length+\"]\")):e=s(n(t),t,t),e}function f(t){return\"json-formatter-\"+t}function m(t,e,r){var n=document.createElement(t);return e&&n.classList.add(f(e)),void 0!==r&&(r instanceof Node?n.appendChild(r):n.appendChild(document.createTextNode(String(r)))),n}!function(t){if(t&&\"undefined\"!=typeof window){var e=document.createElement(\"style\");e.setAttribute(\"media\",\"screen\"),e.innerHTML=t,document.head.appendChild(e)}}('.json-formatter-row {\\n font-family: monospace;\\n}\\n.json-formatter-row,\\n.json-formatter-row a,\\n.json-formatter-row a:hover {\\n color: black;\\n text-decoration: none;\\n}\\n.json-formatter-row .json-formatter-row {\\n margin-left: 1rem;\\n}\\n.json-formatter-row .json-formatter-children.json-formatter-empty {\\n opacity: 0.5;\\n margin-left: 1rem;\\n}\\n.json-formatter-row .json-formatter-children.json-formatter-empty:after {\\n display: none;\\n}\\n.json-formatter-row .json-formatter-children.json-formatter-empty.json-formatter-object:after {\\n content: \"No properties\";\\n}\\n.json-formatter-row .json-formatter-children.json-formatter-empty.json-formatter-array:after {\\n content: \"[]\";\\n}\\n.json-formatter-row .json-formatter-string,\\n.json-formatter-row .json-formatter-stringifiable {\\n color: green;\\n white-space: pre;\\n word-wrap: break-word;\\n}\\n.json-formatter-row .json-formatter-number {\\n color: blue;\\n}\\n.json-formatter-row .json-formatter-boolean {\\n color: red;\\n}\\n.json-formatter-row .json-formatter-null {\\n color: #855A00;\\n}\\n.json-formatter-row .json-formatter-undefined {\\n color: #ca0b69;\\n}\\n.json-formatter-row .json-formatter-function {\\n color: #FF20ED;\\n}\\n.json-formatter-row .json-formatter-date {\\n background-color: rgba(0, 0, 0, 0.05);\\n}\\n.json-formatter-row .json-formatter-url {\\n text-decoration: underline;\\n color: blue;\\n cursor: pointer;\\n}\\n.json-formatter-row .json-formatter-bracket {\\n color: blue;\\n}\\n.json-formatter-row .json-formatter-key {\\n color: #00008B;\\n padding-right: 0.2rem;\\n}\\n.json-formatter-row .json-formatter-toggler-link {\\n cursor: pointer;\\n}\\n.json-formatter-row .json-formatter-toggler {\\n line-height: 1.2rem;\\n font-size: 0.7rem;\\n vertical-align: middle;\\n opacity: 0.6;\\n cursor: pointer;\\n padding-right: 0.2rem;\\n}\\n.json-formatter-row .json-formatter-toggler:after {\\n display: inline-block;\\n transition: transform 100ms ease-in;\\n content: \"►\";\\n}\\n.json-formatter-row > a > .json-formatter-preview-text {\\n opacity: 0;\\n transition: opacity 0.15s ease-in;\\n font-style: italic;\\n}\\n.json-formatter-row:hover > a > .json-formatter-preview-text {\\n opacity: 0.6;\\n}\\n.json-formatter-row.json-formatter-open > .json-formatter-toggler-link .json-formatter-toggler:after {\\n transform: rotate(90deg);\\n}\\n.json-formatter-row.json-formatter-open > .json-formatter-children:after {\\n display: inline-block;\\n}\\n.json-formatter-row.json-formatter-open > a > .json-formatter-preview-text {\\n display: none;\\n}\\n.json-formatter-row.json-formatter-open.json-formatter-empty:after {\\n display: block;\\n}\\n.json-formatter-dark.json-formatter-row {\\n font-family: monospace;\\n}\\n.json-formatter-dark.json-formatter-row,\\n.json-formatter-dark.json-formatter-row a,\\n.json-formatter-dark.json-formatter-row a:hover {\\n color: white;\\n text-decoration: none;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-row {\\n margin-left: 1rem;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-children.json-formatter-empty {\\n opacity: 0.5;\\n margin-left: 1rem;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-children.json-formatter-empty:after {\\n display: none;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-children.json-formatter-empty.json-formatter-object:after {\\n content: \"No properties\";\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-children.json-formatter-empty.json-formatter-array:after {\\n content: \"[]\";\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-string,\\n.json-formatter-dark.json-formatter-row .json-formatter-stringifiable {\\n color: #31F031;\\n white-space: pre;\\n word-wrap: break-word;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-number {\\n color: #66C2FF;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-boolean {\\n color: #EC4242;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-null {\\n color: #EEC97D;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-undefined {\\n color: #ef8fbe;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-function {\\n color: #FD48CB;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-date {\\n background-color: rgba(255, 255, 255, 0.05);\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-url {\\n text-decoration: underline;\\n color: #027BFF;\\n cursor: pointer;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-bracket {\\n color: #9494FF;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-key {\\n color: #23A0DB;\\n padding-right: 0.2rem;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-toggler-link {\\n cursor: pointer;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-toggler {\\n line-height: 1.2rem;\\n font-size: 0.7rem;\\n vertical-align: middle;\\n opacity: 0.6;\\n cursor: pointer;\\n padding-right: 0.2rem;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-toggler:after {\\n display: inline-block;\\n transition: transform 100ms ease-in;\\n content: \"►\";\\n}\\n.json-formatter-dark.json-formatter-row > a > .json-formatter-preview-text {\\n opacity: 0;\\n transition: opacity 0.15s ease-in;\\n font-style: italic;\\n}\\n.json-formatter-dark.json-formatter-row:hover > a > .json-formatter-preview-text {\\n opacity: 0.6;\\n}\\n.json-formatter-dark.json-formatter-row.json-formatter-open > .json-formatter-toggler-link .json-formatter-toggler:after {\\n transform: rotate(90deg);\\n}\\n.json-formatter-dark.json-formatter-row.json-formatter-open > .json-formatter-children:after {\\n display: inline-block;\\n}\\n.json-formatter-dark.json-formatter-row.json-formatter-open > a > .json-formatter-preview-text {\\n display: none;\\n}\\n.json-formatter-dark.json-formatter-row.json-formatter-open.json-formatter-empty:after {\\n display: block;\\n}\\n');var l=/(^\\d{1,4}[\\.|\\\\/|-]\\d{1,2}[\\.|\\\\/|-]\\d{1,4})(\\s*(?:0?[1-9]:[0-5]|1(?=[012])\\d:[0-5])\\d\\s*[ap]m)?$/,d=/\\d{2}:\\d{2}:\\d{2} GMT-\\d{4}/,c=/\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}.\\d{3}Z/,p=window.requestAnimationFrame||function(t){return t(),0},j={hoverPreviewEnabled:!1,hoverPreviewArrayCount:100,hoverPreviewFieldCount:5,animateOpen:!0,animateClose:!0,theme:null,useToJSON:!0,sortPropertiesBy:null},h=function(){function t(t,e,r,n){void 0===e&&(e=1),void 0===r&&(r=j),this.json=t,this.open=e,this.config=r,this.key=n,this._isOpen=null,void 0===this.config.hoverPreviewEnabled&&(this.config.hoverPreviewEnabled=j.hoverPreviewEnabled),void 0===this.config.hoverPreviewArrayCount&&(this.config.hoverPreviewArrayCount=j.hoverPreviewArrayCount),void 0===this.config.hoverPreviewFieldCount&&(this.config.hoverPreviewFieldCount=j.hoverPreviewFieldCount),void 0===this.config.useToJSON&&(this.config.useToJSON=j.useToJSON),\"\"===this.key&&(this.key='\"\"')}return Object.defineProperty(t.prototype,\"isOpen\",{get:function(){return null!==this._isOpen?this._isOpen:this.open>0},set:function(t){this._isOpen=t},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"isDate\",{get:function(){return this.json instanceof Date||\"string\"===this.type&&(l.test(this.json)||c.test(this.json)||d.test(this.json))},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"isUrl\",{get:function(){return\"string\"===this.type&&0===this.json.indexOf(\"http\")},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"isArray\",{get:function(){return Array.isArray(this.json)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"isObject\",{get:function(){return o(this.json)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"isEmptyObject\",{get:function(){return!this.keys.length&&!this.isArray},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"isEmpty\",{get:function(){return this.isEmptyObject||this.keys&&!this.keys.length&&this.isArray},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"useToJSON\",{get:function(){return this.config.useToJSON&&\"stringifiable\"===this.type},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"hasKey\",{get:function(){return void 0!==this.key},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"constructorName\",{get:function(){return i(this.json)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"type\",{get:function(){return this.config.useToJSON&&this.json&&this.json.toJSON?\"stringifiable\":n(this.json)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"keys\",{get:function(){if(this.isObject){var t=Object.keys(this.json);return!this.isArray&&this.config.sortPropertiesBy?t.sort(this.config.sortPropertiesBy):t}return[]},enumerable:!0,configurable:!0}),t.prototype.toggleOpen=function(){this.isOpen=!this.isOpen,this.element&&(this.isOpen?this.appendChildren(this.config.animateOpen):this.removeChildren(this.config.animateClose),this.element.classList.toggle(f(\"open\")))},t.prototype.openAtDepth=function(t){void 0===t&&(t=1),t<0||(this.open=t,this.isOpen=0!==t,this.element&&(this.removeChildren(!1),0===t?this.element.classList.remove(f(\"open\")):(this.appendChildren(this.config.animateOpen),this.element.classList.add(f(\"open\")))))},t.prototype.getInlinepreview=function(){var t=this;if(this.isArray)return this.json.length>this.config.hoverPreviewArrayCount?\"Array[\"+this.json.length+\"]\":\"[\"+this.json.map(a).join(\", \")+\"]\";var e=this.keys,r=e.slice(0,this.config.hoverPreviewFieldCount).map(function(e){return e+\":\"+a(t.json[e])}),n=e.length>=this.config.hoverPreviewFieldCount?\"…\":\"\";return\"{\"+r.join(\", \")+n+\"}\"},t.prototype.render=function(){this.element=m(\"div\",\"row\");var t=this.isObject?m(\"a\",\"toggler-link\"):m(\"span\");if(this.isObject&&!this.useToJSON&&t.appendChild(m(\"span\",\"toggler\")),this.hasKey&&t.appendChild(m(\"span\",\"key\",this.key+\":\")),this.isObject&&!this.useToJSON){var e=m(\"span\",\"value\"),r=m(\"span\"),n=m(\"span\",\"constructor-name\",this.constructorName);if(r.appendChild(n),this.isArray){var o=m(\"span\");o.appendChild(m(\"span\",\"bracket\",\"[\")),o.appendChild(m(\"span\",\"number\",this.json.length)),o.appendChild(m(\"span\",\"bracket\",\"]\")),r.appendChild(o)}e.appendChild(r),t.appendChild(e)}else{(e=this.isUrl?m(\"a\"):m(\"span\")).classList.add(f(this.type)),this.isDate&&e.classList.add(f(\"date\")),this.isUrl&&(e.classList.add(f(\"url\")),e.setAttribute(\"href\",this.json));var i=s(this.type,this.json,this.useToJSON?this.json.toJSON():this.json);e.appendChild(document.createTextNode(i)),t.appendChild(e)}if(this.isObject&&this.config.hoverPreviewEnabled){var a=m(\"span\",\"preview-text\");a.appendChild(document.createTextNode(this.getInlinepreview())),t.appendChild(a)}var l=m(\"div\",\"children\");return this.isObject&&l.classList.add(f(\"object\")),this.isArray&&l.classList.add(f(\"array\")),this.isEmpty&&l.classList.add(f(\"empty\")),this.config&&this.config.theme&&this.element.classList.add(f(this.config.theme)),this.isOpen&&this.element.classList.add(f(\"open\")),this.element.appendChild(t),this.element.appendChild(l),this.isObject&&this.isOpen&&this.appendChildren(),this.isObject&&!this.useToJSON&&t.addEventListener(\"click\",this.toggleOpen.bind(this)),this.element},t.prototype.appendChildren=function(e){var r=this;void 0===e&&(e=!1);var n=this.element.querySelector(\"div.\"+f(\"children\"));if(n&&!this.isEmpty)if(e){var o=0,i=function(){var e=r.keys[o],s=new t(r.json[e],r.open-1,r.config,e);n.appendChild(s.render()),(o+=1)10?i():p(i))};p(i)}else this.keys.forEach(function(e){var o=new t(r.json[e],r.open-1,r.config,e);n.appendChild(o.render())})},t.prototype.removeChildren=function(t){void 0===t&&(t=!1);var e=this.element.querySelector(\"div.\"+f(\"children\"));if(t){var r=0,n=function(){e&&e.children.length&&(e.removeChild(e.children[0]),(r+=1)>10?n():p(n))};p(n)}else e&&(e.innerHTML=\"\")},t}();e.exports=h},\n", + " \"c81021c8fd\": function _(t,e,n){var i,r=this&&this.__extends||(i=function(t,e){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(t,e)},function(t,e){function n(){this.constructor=t}i(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}),o=t(\"@bokehjs/models/widgets/markup\"),a=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return r(e,t),e.prototype.render=function(){t.prototype.render.call(this),this.markup_el.innerHTML=this.model.text,window.renderMathInElement&&window.renderMathInElement(this.el,{delimiters:[{left:\"$$\",right:\"$$\",display:!0},{left:\"\\\\[\",right:\"\\\\]\",display:!0},{left:\"$\",right:\"$\",display:!1},{left:\"\\\\(\",right:\"\\\\)\",display:!1}]})},e.__name__=\"KaTeXView\",e}(t(\"ec60963462\").PanelMarkupView);n.KaTeXView=a;var l=function(t){function e(e){return t.call(this,e)||this}return r(e,t),e.init_KaTeX=function(){this.prototype.default_view=a},e.__name__=\"KaTeX\",e.__module__=\"panel.models.katex\",e}(o.Markup);n.KaTeX=l,l.init_KaTeX()},\n", + " \"a93ded647d\": function _(t,e,n){var i,o=this&&this.__extends||(i=function(t,e){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(t,e)},function(t,e){function n(){this.constructor=t}i(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}),r=t(\"@bokehjs/models/widgets/markup\"),a=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.initialize=function(){t.prototype.initialize.call(this),this._hub=window.MathJax.Hub,this._hub.Config({tex2jax:{inlineMath:[[\"$\",\"$\"],[\"\\\\(\",\"\\\\)\"]]}})},e.prototype.render=function(){t.prototype.render.call(this),this._hub&&(this.markup_el.innerHTML=this.model.text,this._hub.Queue([\"Typeset\",this._hub,this.markup_el]))},e.__name__=\"MathJaxView\",e}(t(\"ec60963462\").PanelMarkupView);n.MathJaxView=a;var u=function(t){function e(e){return t.call(this,e)||this}return o(e,t),e.init_MathJax=function(){this.prototype.default_view=a},e.__name__=\"MathJax\",e.__module__=\"panel.models.mathjax\",e}(r.Markup);n.MathJax=u,u.init_MathJax()},\n", + " \"98100899bc\": function _(t,e,i){var n,o=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var i in e)e.hasOwnProperty(i)&&(t[i]=e[i])})(t,e)},function(t,e){function i(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(i.prototype=e.prototype,new i)}),r=(this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var i in t)Object.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e.default=t,e})(t(\"@bokehjs/core/properties\")),s=t(\"@bokehjs/core/dom\"),a=t(\"@bokehjs/models/widgets/widget\"),l=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.connect_signals=function(){var e=this;t.prototype.connect_signals.call(this),this.connect(this.model.change,function(){return e.render()}),this.connect(this.model.properties.value.change,function(){return e.render()}),this.connect(this.model.properties.loop_policy.change,function(){return e.set_loop_state(e.model.loop_policy)})},e.prototype.get_height=function(){return 250},e.prototype.render=function(){var e=this;if(null!=this.sliderEl)return this.sliderEl.style.width=\"{this.model.width}px\",this.sliderEl.min=String(this.model.start),this.sliderEl.max=String(this.model.end),void(this.sliderEl.value=String(this.model.value));t.prototype.render.call(this),this.sliderEl=document.createElement(\"input\"),this.sliderEl.setAttribute(\"type\",\"range\"),this.sliderEl.style.width=this.model.width+\"px\",this.sliderEl.value=String(this.model.value),this.sliderEl.min=String(this.model.start),this.sliderEl.max=String(this.model.end),this.sliderEl.onchange=function(t){return e.set_frame(parseInt(t.target.value))};var i=s.div();i.style.cssText=\"margin: 0 auto; display: table; padding: 5px\";var n=\"text-align: center; min-width: 40px; margin: 2px\",o=document.createElement(\"button\");o.style.cssText=\"text-align: center; min-width: 20px\",o.appendChild(document.createTextNode(\"–\")),o.onclick=function(){return e.slower()},i.appendChild(o);var r=document.createElement(\"button\");r.style.cssText=n,r.appendChild(document.createTextNode(\"❚◀◀\")),r.onclick=function(){return e.first_frame()},i.appendChild(r);var a=document.createElement(\"button\");a.style.cssText=n,a.appendChild(document.createTextNode(\"❚◀\")),a.onclick=function(){return e.previous_frame()},i.appendChild(a);var l=document.createElement(\"button\");l.style.cssText=n,l.appendChild(document.createTextNode(\"◀\")),l.onclick=function(){return e.reverse_animation()},i.appendChild(l);var d=document.createElement(\"button\");d.style.cssText=n,d.appendChild(document.createTextNode(\"❚❚\")),d.onclick=function(){return e.pause_animation()},i.appendChild(d);var p=document.createElement(\"button\");p.style.cssText=n,p.appendChild(document.createTextNode(\"▶\")),p.onclick=function(){return e.play_animation()},i.appendChild(p);var c=document.createElement(\"button\");c.style.cssText=n,c.appendChild(document.createTextNode(\"▶❚\")),c.onclick=function(){return e.next_frame()},i.appendChild(c);var h=document.createElement(\"button\");h.style.cssText=n,h.appendChild(document.createTextNode(\"▶▶❚\")),h.onclick=function(){return e.last_frame()},i.appendChild(h);var u=document.createElement(\"button\");u.style.cssText=\"text-align: center; min-width: 20px\",u.appendChild(document.createTextNode(\"+\")),u.onclick=function(){return e.faster()},i.appendChild(u),this.loop_state=document.createElement(\"form\"),this.loop_state.style.cssText=\"margin: 0 auto; display: table\";var m=document.createElement(\"input\");m.type=\"radio\",m.value=\"once\",m.name=\"state\";var _=document.createElement(\"label\");_.innerHTML=\"Once\",_.style.cssText=\"padding: 0 10px 0 5px; user-select:none;\";var f=document.createElement(\"input\");f.setAttribute(\"type\",\"radio\"),f.setAttribute(\"value\",\"loop\"),f.setAttribute(\"name\",\"state\");var v=document.createElement(\"label\");v.innerHTML=\"Loop\",v.style.cssText=\"padding: 0 10px 0 5px; user-select:none;\";var y=document.createElement(\"input\");y.setAttribute(\"type\",\"radio\"),y.setAttribute(\"value\",\"reflect\"),y.setAttribute(\"name\",\"state\");var x=document.createElement(\"label\");x.innerHTML=\"Reflect\",x.style.cssText=\"padding: 0 10px 0 5px; user-select:none;\",\"once\"==this.model.loop_policy?m.checked=!0:\"loop\"==this.model.loop_policy?f.checked=!0:y.checked=!0,this.loop_state.appendChild(m),this.loop_state.appendChild(_),this.loop_state.appendChild(f),this.loop_state.appendChild(v),this.loop_state.appendChild(y),this.loop_state.appendChild(x),this.el.appendChild(this.sliderEl),this.el.appendChild(i),this.el.appendChild(this.loop_state)},e.prototype.set_frame=function(t){this.model.value!=t&&(this.model.value=t),this.sliderEl.value!=String(t)&&(this.sliderEl.value=String(t))},e.prototype.get_loop_state=function(){for(var t=this.loop_state.state,e=0;e0?this.play_animation():this.model.direction<0&&this.reverse_animation()},e.prototype.faster=function(){this.model.interval=Math.round(.7*this.model.interval),this.model.direction>0?this.play_animation():this.model.direction<0&&this.reverse_animation()},e.prototype.anim_step_forward=function(){if(this.model.valuethis.model.start)this.previous_frame();else{var t=this.get_loop_state();\"loop\"==t?this.last_frame():\"reflect\"==t?(this.first_frame(),this.play_animation()):(this.pause_animation(),this.first_frame())}},e.prototype.pause_animation=function(){this.model.direction=0,this.timer&&(clearInterval(this.timer),this.timer=null)},e.prototype.play_animation=function(){var t=this;this.pause_animation(),this.model.direction=1,this.timer||(this.timer=setInterval(function(){return t.anim_step_forward()},this.model.interval))},e.prototype.reverse_animation=function(){var t=this;this.pause_animation(),this.model.direction=-1,this.timer||(this.timer=setInterval(function(){return t.anim_step_reverse()},this.model.interval))},e.__name__=\"PlayerView\",e}(a.WidgetView);i.PlayerView=l;var d=function(t){function e(e){return t.call(this,e)||this}return o(e,t),e.init_Player=function(){this.prototype.default_view=l,this.define({direction:[r.Number,0],interval:[r.Number,500],start:[r.Number],end:[r.Number],step:[r.Number,1],loop_policy:[r.Any,\"once\"],value:[r.Any,0]}),this.override({width:400})},e.__name__=\"Player\",e.__module__=\"panel.models.widgets\",e}(a.Widget);i.Player=d,d.init_Player()},\n", + " \"d46f026c83\": function _(t,e,o){var r,n=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var o in e)e.hasOwnProperty(o)&&(t[o]=e[o])})(t,e)},function(t,e){function o(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(o.prototype=e.prototype,new o)}),i=(this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var o in t)Object.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e.default=t,e})(t(\"@bokehjs/core/properties\")),l=t(\"@bokehjs/core/util/object\"),a=t(\"@bokehjs/core/util/eq\"),p=t(\"@bokehjs/models/layouts/html_box\"),s=t(\"99a25e6992\"),u=t(\"62ba79515f\"),c=t(\"ec60963462\"),_=window.Plotly,d=function(t,e,o){var r=Array.isArray(e)?[]:{};if(\"click\"===o||\"hover\"===o||\"selected\"===o){var n=[];if(null==e)return null;for(var i=t.data,l=0;l1){for(var u=[],c=0;c=0?t=setTimeout(i,l-c):(t=null,u||(r=n.apply(o,e),o=e=null))}null==l&&(l=100);var c=function(){o=this,e=arguments,a=Date.now();var c=u&&!t;return t||(t=setTimeout(i,l)),c&&(r=n.apply(o,e),o=e=null),r};return c.clear=function(){t&&(clearTimeout(t),t=null)},c.flush=function(){t&&(r=n.apply(o,e),o=e=null,clearTimeout(t),t=null)},c}t.debounce=t,l.exports=t},\n", + " \"62ba79515f\": function _(t,r,n){n.get=function(t,r,n){void 0===n&&(n=void 0);var e=function(n){return String.prototype.split.call(r,n).filter(Boolean).reduce(function(t,r){return null!=t?t[r]:t},t)},o=e(/[,[\\]]+?/)||e(/[,[\\].]+?/);return void 0===o||o===t?n:o},n.throttle=function(t,r){var n=0;return function(){var e=Number(new Date);e-n>=r&&(t(),n=e)}},n.deepCopy=function t(r){var n;if(null==r||\"object\"!=typeof r)return r;if(r instanceof Array){n=[];for(var e=0,o=r.length;e0){var t=this._fetch_datasets();if(\"data\"in t&&(this.model.data.data.values=t.data,delete t.data),void 0!==this.model.data.data)for(var e=0,o=this.model.data.data;e0&&(this.timer=setInterval(function(){return t.snapshot()},this.model.timeout))},e.prototype.snapshot=function(){this.canvasEl.width=this.videoEl.videoWidth,this.canvasEl.height=this.videoEl.videoHeight;var t=this.canvasEl.getContext(\"2d\");t&&t.drawImage(this.videoEl,0,0,this.canvasEl.width,this.canvasEl.height),this.model.value=this.canvasEl.toDataURL(\"image/\"+this.model.format,.95)},e.prototype.remove=function(){t.prototype.remove.call(this),this.timer&&(clearInterval(this.timer),this.timer=null)},e.prototype.render=function(){var e=this;t.prototype.render.call(this),this.videoEl||(this.videoEl=document.createElement(\"video\"),this.model.sizing_mode&&\"fixed\"!==this.model.sizing_mode||(this.model.height&&(this.videoEl.height=this.model.height),this.model.width&&(this.videoEl.width=this.model.width)),this.videoEl.style.objectFit=\"fill\",this.videoEl.style.minWidth=\"100%\",this.videoEl.style.minHeight=\"100%\",this.canvasEl=document.createElement(\"canvas\"),this.el.appendChild(this.videoEl),navigator.mediaDevices.getUserMedia&&navigator.mediaDevices.getUserMedia(this.constraints).then(function(t){e.videoEl.srcObject=t,e.model.paused||e.videoEl.play()}).catch(console.error))},e.__name__=\"VideoStreamView\",e}(t(\"ec60963462\").PanelHTMLBoxView);i.VideoStreamView=h;var a=function(t){function e(e){return t.call(this,e)||this}return n(e,t),e.init_VideoStream=function(){this.prototype.default_view=h,this.define({format:[s.String,\"png\"],paused:[s.Boolean,!1],snapshot:[s.Boolean,!1],timeout:[s.Number,0],value:[s.Any]}),this.override({height:240,width:320})},e.__name__=\"VideoStream\",e.__module__=\"panel.models.widgets\",e}(r.HTMLBox);i.VideoStream=a,a.init_VideoStream()},\n", + " \"63070bc9ce\": function _(V,o,e){var l=V(\"1a4b530306\");e.VTKPlot=l.VTKPlot;var K=V(\"b933e81f56\");e.VTKVolumePlot=K.VTKVolumePlot;var T=V(\"5bc27423fe\");e.VTKAxes=T.VTKAxes},\n", + " \"1a4b530306\": function _(e,t,n){var i,o=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),r=(this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t})(e(\"@bokehjs/core/properties\")),a=e(\"@bokehjs/core/dom\"),s=e(\"7620c2cc05\"),c=e(\"3b847a648d\"),d=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t._axes_initialized=!1,t}return o(t,e),t.prototype.connect_signals=function(){var t=this;e.prototype.connect_signals.call(this),this.connect(this.model.properties.axes.change,function(){t._delete_axes(),t.model.axes&&t._set_axes(),t._vtk_renwin.getRenderWindow().render()}),this.el.addEventListener(\"mouseenter\",function(){var e=t._vtk_renwin.getInteractor();t.model.enable_keybindings&&(document.querySelector(\"body\").addEventListener(\"keypress\",e.handleKeyPress),document.querySelector(\"body\").addEventListener(\"keydown\",e.handleKeyDown),document.querySelector(\"body\").addEventListener(\"keyup\",e.handleKeyUp))}),this.el.addEventListener(\"mouseleave\",function(){var e=t._vtk_renwin.getInteractor();document.querySelector(\"body\").removeEventListener(\"keypress\",e.handleKeyPress),document.querySelector(\"body\").removeEventListener(\"keydown\",e.handleKeyDown),document.querySelector(\"body\").removeEventListener(\"keyup\",e.handleKeyUp)})},t.prototype.render=function(){e.prototype.render.call(this),this._axes=null,this._axes_initialized=!1,this._plot()},t.prototype.after_layout=function(){this._axes_initialized||(this._render_axes_canvas(),this._axes_initialized=!0)},t.prototype._render_axes_canvas=function(){var e=this,t=this._vtk_container.getElementsByTagName(\"canvas\");if(1!=t.length)throw Error(\"Error at initialization of the 3D scene, container should have one and only one canvas\");t[0].classList.add(\"scene3d-canvas\");var n=a.canvas({style:{position:\"absolute\",top:\"0\",left:\"0\",width:\"100%\",height:\"100%\"}});n.classList.add(\"axes-canvas\"),this._vtk_container.appendChild(n),this._vtk_renwin.setResizeCallback(function(){var t=e._vtk_container.getBoundingClientRect(),i=Math.floor(t.width*window.devicePixelRatio),o=Math.floor(t.height*window.devicePixelRatio);n.setAttribute(\"width\",i.toFixed()),n.setAttribute(\"height\",o.toFixed())})},t.prototype._delete_axes=function(){var e=this;if(null!=this._axes){Object.keys(this._axes).forEach(function(t){return e._vtk_renwin.getRenderer().removeActor(e._axes[t])});var t=this._vtk_renwin.getContainer().getElementsByClassName(\"axes-canvas\")[0],n=t.getContext(\"2d\");n&&n.clearRect(0,0,t.clientWidth*window.devicePixelRatio,t.clientHeight*window.devicePixelRatio),this._axes=null}},t.prototype._set_axes=function(){if(this.model.axes){var e=this._vtk_renwin.getContainer().getElementsByClassName(\"axes-canvas\")[0],t=this.model.axes.create_axes(e),n=t.psActor,i=t.axesActor,o=t.gridActor;this._axes={psActor:n,axesActor:i,gridActor:o},this._vtk_renwin.getRenderer().addActor(n),this._vtk_renwin.getRenderer().addActor(i),this._vtk_renwin.getRenderer().addActor(o)}},t.prototype._plot=function(){var e=this;if(this.model.data)var t=c.vtkns.DataAccessHelper.get(\"zip\",{zipContent:atob(this.model.data),callback:function(n){var i=c.vtkns.HttpSceneLoader.newInstance({renderer:e._vtk_renwin.getRenderer(),dataAccessHelper:t}),o=c.vtk.macro.debounce(function(){null==e._axes&&e.model.axes&&e._set_axes(),e.model.properties.camera.change.emit()},100);i.setUrl(\"index.json\"),i.onReady(o)}});else this._vtk_renwin.getRenderWindow().render()},t.__name__=\"VTKPlotView\",t}(s.AbstractVTKView);n.VTKPlotView=d;var l=function(e){function t(t){var n=e.call(this,t)||this;n.outline=c.vtkns.OutlineFilter.newInstance();var i=c.vtkns.Mapper.newInstance();return i.setInputConnection(n.outline.getOutputPort()),n.outline_actor=c.vtkns.Actor.newInstance(),n.outline_actor.setMapper(i),n}return o(t,e),t.init_VTKPlot=function(){this.prototype.default_view=d,this.define({data:[r.String],axes:[r.Instance],enable_keybindings:[r.Boolean,!1]})},t.__name__=\"VTKPlot\",t}(s.AbstractVTKPlot);n.VTKPlot=l,l.init_VTKPlot()},\n", + " \"7620c2cc05\": function _(e,t,n){var i,r=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),o=(this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t})(e(\"@bokehjs/core/properties\")),a=e(\"@bokehjs/core/dom\"),s=e(\"@bokehjs/core/util/object\"),_=e(\"@bokehjs/models/layouts/html_box\"),c=e(\"ec60963462\"),d=e(\"3b847a648d\"),h=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t._setting_camera=!1,t}return r(t,e),t.prototype.connect_signals=function(){var t=this;e.prototype.connect_signals.call(this),this.connect(this.model.properties.data.change,function(){t.invalidate_render()}),this.connect(this.model.properties.orientation_widget.change,function(){t._orientation_widget_visibility(t.model.orientation_widget)}),this.connect(this.model.properties.camera.change,function(){return t._set_camera_state()})},t.prototype._orientation_widget_visibility=function(e){this._orientationWidget.setEnabled(e),e?this._widgetManager.enablePicking():this._widgetManager.disablePicking(),this._orientationWidget.updateMarkerOrientation(),this._vtk_renwin.getRenderWindow().render()},t.prototype._create_orientation_widget=function(){var e=this,t=d.vtkns.AxesActor.newInstance(),n=d.vtkns.OrientationMarkerWidget.newInstance({actor:t,interactor:this._vtk_renwin.getInteractor()});n.setEnabled(!0),n.setViewportCorner(d.vtkns.OrientationMarkerWidget.Corners.BOTTOM_RIGHT),n.setViewportSize(.15),n.setMinPixelSize(100),n.setMaxPixelSize(300),this._orientationWidget=n;var i=d.vtkns.WidgetManager.newInstance();i.setRenderer(n.getRenderer());var r=d.vtkns.InteractiveOrientationWidget.newInstance();r.placeWidget(t.getBounds()),r.setBounds(t.getBounds()),r.setPlaceFactor(1);var o=i.addWidget(r);this._widgetManager=i,o.onOrientationChange(function(t){var n=t.direction,i=e._vtk_renwin.getRenderer().getActiveCamera(),r=i.getFocalPoint(),o=i.getPosition(),a=i.getViewUp(),s=Math.sqrt(Math.pow(o[0]-r[0],2)+Math.pow(o[1]-r[1],2)+Math.pow(o[2]-r[2],2));i.setPosition(r[0]+n[0]*s,r[1]+n[1]*s,r[2]+n[2]*s),n[0]&&i.setViewUp(d.majorAxis(a,1,2)),n[1]&&i.setViewUp(d.majorAxis(a,0,2)),n[2]&&i.setViewUp(d.majorAxis(a,0,1)),e._orientationWidget.updateMarkerOrientation(),e._vtk_renwin.getRenderer().resetCameraClippingRange(),e._vtk_renwin.getRenderWindow().render()}),this._orientation_widget_visibility(this.model.orientation_widget)},t.prototype._get_camera_state=function(){if(!this._setting_camera){this._setting_camera=!0;var e=s.clone(this._vtk_renwin.getRenderer().getActiveCamera().get());delete e.classHierarchy,delete e.vtkObject,delete e.vtkCamera,delete e.viewPlaneNormal,this.model.camera=e,this._setting_camera=!1}},t.prototype._set_camera_state=function(){if(!this._setting_camera){this._setting_camera=!0;try{this.model.camera&&this._vtk_renwin.getRenderer().getActiveCamera().set(this.model.camera)}finally{this._setting_camera=!1}this._orientationWidget.updateMarkerOrientation(),this._vtk_renwin.getRenderer().resetCameraClippingRange(),this._vtk_renwin.getRenderWindow().render()}},t.prototype.render=function(){var t=this;e.prototype.render.call(this),this._orientationWidget=null,this._vtk_container=a.div(),c.set_size(this._vtk_container,this.model),this.el.appendChild(this._vtk_container),this._vtk_renwin=d.vtkns.FullScreenRenderWindow.newInstance({rootContainer:this.el,container:this._vtk_container}),this._remove_default_key_binding(),this._create_orientation_widget(),this._vtk_renwin.getRenderer().getActiveCamera().onModified(function(){return t._get_camera_state()}),this._set_camera_state(),this.model.renderer_el=this._vtk_renwin},t.prototype.after_layout=function(){e.prototype.after_layout.call(this),this._vtk_renwin.resize()},t.prototype._remove_default_key_binding=function(){var e=this._vtk_renwin.getInteractor();document.querySelector(\"body\").removeEventListener(\"keypress\",e.handleKeyPress),document.querySelector(\"body\").removeEventListener(\"keydown\",e.handleKeyDown),document.querySelector(\"body\").removeEventListener(\"keyup\",e.handleKeyUp)},t.__name__=\"AbstractVTKView\",t}(c.PanelHTMLBoxView);n.AbstractVTKView=h;var l=function(e){function t(t){return e.call(this,t)||this}return r(t,e),t.prototype.getActors=function(){return this.renderer_el.getRenderer().getActors()},t.init_AbstractVTKPlot=function(){this.define({orientation_widget:[o.Boolean,!1],camera:[o.Instance]}),this.override({height:300,width:300})},t.__name__=\"AbstractVTKPlot\",t.__module__=\"panel.models.vtk\",t}(_.HTMLBox);n.AbstractVTKPlot=l,l.init_AbstractVTKPlot()},\n", + " \"3b847a648d\": function _(e,t,n){var r=e(\"@bokehjs/core/util/serialization\"),a=e(\"@bokehjs/core/util/array\");function o(e){var t=Math.min(Math.max(Math.round(e),0),255).toString(16);return 2==t.length?t:\"0\"+t}function i(e,t,n){return\"#\"+o(e)+o(t)+o(n)}function v(e){for(var t=new ArrayBuffer(e.length),n=new Uint8Array(t),r=0,a=e.length;rMath.abs(e[n])?t:n,o=e[a]>0?1:-1;return r[a]=o,r},n.cartesian_product=function(){for(var e=[],t=0;t=.005&&(e.model.sampling=t)}),Math.abs(this.model.sampling-Number(this.shadow_selector.value))>=.005&&this.model.properties.sampling.change.emit(),this.edge_gradient_slider.addEventListener(\"input\",function(){var t=Number(e.edge_gradient_slider.value);Math.abs(e.model.edge_gradient-t)>=.005&&(e.model.edge_gradient=t)}),Math.abs(this.model.edge_gradient-Number(this.edge_gradient_slider.value))>=.005&&this.model.properties.edge_gradient.change.emit()},t.prototype._plot_volume=function(){var e=this,t=this._vtk_image_data,n=a.vtkns.Volume.newInstance(),r=a.vtkns.VolumeMapper.newInstance();n.setMapper(r),r.setInputData(t);var i=(t.getPointData().getScalars()||t.getPointData().getArrays()[0]).getRange(),o=a.vtkns.ColorTransferFunction.newInstance();o.onModified(function(){return e.model.mapper=a.vtkLutToMapper(o)});var s=a.vtkns.PiecewiseFunction.newInstance(),l=.7*Math.sqrt(t.getSpacing().map(function(e){return e*e}).reduce(function(e,t){return e+t},0));r.setSampleDistance(l),n.getProperty().setRGBTransferFunction(0,o),n.getProperty().setScalarOpacity(0,s),n.getProperty().setInterpolationTypeToFastLinear(),n.getProperty().setScalarOpacityUnitDistance(0,a.vtkns.BoundingBox.getDiagonalLength(t.getBounds())/Math.max.apply(Math,t.getDimensions())),n.getProperty().setGradientOpacityMinimumValue(0,0),n.getProperty().setGradientOpacityMaximumValue(0,.05*(i[1]-i[0])),n.getProperty().setShade(this.model.shadow),n.getProperty().setUseGradientOpacity(0,!0),n.getProperty().setGradientOpacityMinimumOpacity(0,0),n.getProperty().setGradientOpacityMaximumOpacity(0,1),n.getProperty().setAmbient(this.model.ambient),n.getProperty().setDiffuse(this.model.diffuse),n.getProperty().setSpecular(this.model.specular),n.getProperty().setSpecularPower(this.model.specular_power),this._vtk_renwin.getRenderer().addVolume(n),this._controllerWidget.setupContent(this._vtk_renwin.getRenderWindow(),n,!0)},t.prototype._plot_slices=function(){var e=this._vtk_image_data,t=a.vtkns.ImageSlice.newInstance(),n=a.vtkns.ImageSlice.newInstance(),r=a.vtkns.ImageSlice.newInstance(),i=a.vtkns.ImageMapper.newInstance(),o=a.vtkns.ImageMapper.newInstance(),s=a.vtkns.ImageMapper.newInstance();i.setInputData(e),i.setISlice(this.model.slice_i),t.setMapper(i),o.setInputData(e),o.setJSlice(this.model.slice_j),n.setMapper(o),s.setInputData(e),s.setKSlice(this.model.slice_k),r.setMapper(s);var l=a.vtkns.PiecewiseFunction.newInstance();l.removeAllPoints(),l.addPoint(0,1);var c=this.volume.getProperty().getRGBTransferFunction(0),p=t.getProperty();n.setProperty(p),r.setProperty(p),p.setRGBTransferFunction(c),p.setScalarOpacity(l);var d=this._vtk_renwin.getRenderer();d.addActor(t),d.addActor(n),d.addActor(r)},t.prototype._set_volume_visibility=function(e){this.volume.setVisibility(e)},t.prototype._set_slices_visibility=function(e){this._vtk_renwin.getRenderer().getActors().map(function(t){return t.setVisibility(e)})},t.__name__=\"VTKVolumePlotView\",t}(s.AbstractVTKView);n.VTKVolumePlotView=l;var c=function(e){function t(t){return e.call(this,t)||this}return i(t,e),t.init_VTKVolumePlot=function(){this.prototype.default_view=l,this.define({data:[o.Instance],shadow:[o.Boolean,!0],sampling:[o.Number,.4],edge_gradient:[o.Number,.2],colormap:[o.String],rescale:[o.Boolean,!1],ambient:[o.Number,.2],diffuse:[o.Number,.7],specular:[o.Number,.3],specular_power:[o.Number,8],slice_i:[o.Int,0],slice_j:[o.Int,0],slice_k:[o.Int,0],display_volume:[o.Boolean,!0],display_slices:[o.Boolean,!1],render_background:[o.String,\"#52576e\"],interpolation:[o.Any,\"fast_linear\"],mapper:[o.Instance]})},t.__name__=\"VTKVolumePlot\",t}(s.AbstractVTKPlot);n.VTKVolumePlot=c,c.init_VTKVolumePlot()},\n", + " \"5bc27423fe\": function _(t,e,i){var s,n=this&&this.__extends||(s=function(t,e){return(s=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var i in e)e.hasOwnProperty(i)&&(t[i]=e[i])})(t,e)},function(t,e){function i(){this.constructor=t}s(t,e),t.prototype=null===e?Object.create(e):(i.prototype=e.prototype,new i)}),r=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var i in t)Object.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e.default=t,e},a=t(\"66e1dbda7d\"),c=t(\"@bokehjs/model\"),o=r(t(\"@bokehjs/core/properties\")),l=t(\"3b847a648d\"),h=function(t){function e(e){return t.call(this,e)||this}return n(e,t),e.init_VTKAxes=function(){this.define({origin:[o.Array],xticker:[o.Instance],yticker:[o.Instance],zticker:[o.Instance],digits:[o.Number,1],show_grid:[o.Boolean,!0],grid_opacity:[o.Number,.1],axes_opacity:[o.Number,1],fontsize:[o.Number,12]})},Object.defineProperty(e.prototype,\"xticks\",{get:function(){return this.xticker.ticks},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"yticks\",{get:function(){return this.yticker.ticks},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"zticks\",{get:function(){return this.zticker.ticks},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"xlabels\",{get:function(){var t=this;return this.xticker.labels?this.xticker.labels:this.xticks.map(function(e){return e.toFixed(t.digits)})},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"ylabels\",{get:function(){var t=this;return this.yticker.labels?this.yticker.labels:this.yticks.map(function(e){return e.toFixed(t.digits)})},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"zlabels\",{get:function(){var t=this;return this.zticker.labels?this.zticker.labels:this.zticks.map(function(e){return e.toFixed(t.digits)})},enumerable:!0,configurable:!0}),e.prototype._make_grid_lines=function(t,e,i){for(var s=[],n=0;n=e.xticks.length&&i0?(n[0]=2*(M*h+c*r+s*u-f*e)/b,n[1]=2*(s*h+c*e+f*r-M*u)/b,n[2]=2*(f*h+c*u+M*e-s*r)/b):(n[0]=2*(M*h+c*r+s*u-f*e),n[1]=2*(s*h+c*e+f*r-M*u),n[2]=2*(f*h+c*u+M*e-s*r));return i(t,a,n),t},n.getTranslation=function(t,a){return t[0]=a[12],t[1]=a[13],t[2]=a[14],t},n.getScaling=M,n.getRotation=function(t,a){var n=new o.ARRAY_TYPE(3);M(n,a);var r=1/n[0],e=1/n[1],u=1/n[2],h=a[0]*r,i=a[1]*e,s=a[2]*u,f=a[4]*r,c=a[5]*e,b=a[6]*u,l=a[8]*r,v=a[9]*e,m=a[10]*u,p=h+c+m,y=0;p>0?(y=2*Math.sqrt(p+1),t[3]=.25*y,t[0]=(b-v)/y,t[1]=(l-s)/y,t[2]=(i-f)/y):h>c&&h>m?(y=2*Math.sqrt(1+h-c-m),t[3]=(b-v)/y,t[0]=.25*y,t[1]=(i+f)/y,t[2]=(l+s)/y):c>m?(y=2*Math.sqrt(1+c-h-m),t[3]=(l-s)/y,t[0]=(i+f)/y,t[1]=.25*y,t[2]=(b+v)/y):(y=2*Math.sqrt(1+m-h-c),t[3]=(i-f)/y,t[0]=(l+s)/y,t[1]=(b+v)/y,t[2]=.25*y);return t},n.fromRotationTranslationScale=function(t,a,n,r){var o=a[0],e=a[1],u=a[2],h=a[3],i=o+o,M=e+e,s=u+u,f=o*i,c=o*M,b=o*s,l=e*M,v=e*s,m=u*s,p=h*i,y=h*M,P=h*s,S=r[0],O=r[1],E=r[2];return t[0]=(1-(l+m))*S,t[1]=(c+P)*S,t[2]=(b-y)*S,t[3]=0,t[4]=(c-P)*O,t[5]=(1-(f+m))*O,t[6]=(v+p)*O,t[7]=0,t[8]=(b+y)*E,t[9]=(v-p)*E,t[10]=(1-(f+l))*E,t[11]=0,t[12]=n[0],t[13]=n[1],t[14]=n[2],t[15]=1,t},n.fromRotationTranslationScaleOrigin=function(t,a,n,r,o){var e=a[0],u=a[1],h=a[2],i=a[3],M=e+e,s=u+u,f=h+h,c=e*M,b=e*s,l=e*f,v=u*s,m=u*f,p=h*f,y=i*M,P=i*s,S=i*f,O=r[0],E=r[1],I=r[2],L=o[0],N=o[1],R=o[2],x=(1-(v+p))*O,d=(b+S)*O,g=(l-P)*O,A=(b-S)*E,Y=(1-(c+p))*E,T=(m+y)*E,w=(l+P)*I,_=(m-y)*I,q=(1-(c+v))*I;return t[0]=x,t[1]=d,t[2]=g,t[3]=0,t[4]=A,t[5]=Y,t[6]=T,t[7]=0,t[8]=w,t[9]=_,t[10]=q,t[11]=0,t[12]=n[0]+L-(x*L+A*N+w*R),t[13]=n[1]+N-(d*L+Y*N+_*R),t[14]=n[2]+R-(g*L+T*N+q*R),t[15]=1,t},n.fromQuat=function(t,a){var n=a[0],r=a[1],o=a[2],e=a[3],u=n+n,h=r+r,i=o+o,M=n*u,s=r*u,f=r*h,c=o*u,b=o*h,l=o*i,v=e*u,m=e*h,p=e*i;return t[0]=1-f-l,t[1]=s+p,t[2]=c-m,t[3]=0,t[4]=s-p,t[5]=1-M-l,t[6]=b+v,t[7]=0,t[8]=c+m,t[9]=b-v,t[10]=1-M-f,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},n.frustum=function(t,a,n,r,o,e,u){var h=1/(n-a),i=1/(o-r),M=1/(e-u);return t[0]=2*e*h,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=2*e*i,t[6]=0,t[7]=0,t[8]=(n+a)*h,t[9]=(o+r)*i,t[10]=(u+e)*M,t[11]=-1,t[12]=0,t[13]=0,t[14]=u*e*2*M,t[15]=0,t},n.perspective=function(t,a,n,r,o){var e,u=1/Math.tan(a/2);t[0]=u/n,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=u,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[11]=-1,t[12]=0,t[13]=0,t[15]=0,null!=o&&o!==1/0?(e=1/(r-o),t[10]=(o+r)*e,t[14]=2*o*r*e):(t[10]=-1,t[14]=-2*r);return t},n.perspectiveFromFieldOfView=function(t,a,n,r){var o=Math.tan(a.upDegrees*Math.PI/180),e=Math.tan(a.downDegrees*Math.PI/180),u=Math.tan(a.leftDegrees*Math.PI/180),h=Math.tan(a.rightDegrees*Math.PI/180),i=2/(u+h),M=2/(o+e);return t[0]=i,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=M,t[6]=0,t[7]=0,t[8]=-(u-h)*i*.5,t[9]=(o-e)*M*.5,t[10]=r/(n-r),t[11]=-1,t[12]=0,t[13]=0,t[14]=r*n/(n-r),t[15]=0,t},n.ortho=function(t,a,n,r,o,e,u){var h=1/(a-n),i=1/(r-o),M=1/(e-u);return t[0]=-2*h,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*i,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=2*M,t[11]=0,t[12]=(a+n)*h,t[13]=(o+r)*i,t[14]=(u+e)*M,t[15]=1,t},n.lookAt=function(t,a,n,r){var e,h,i,M,s,f,c,b,l,v,m=a[0],p=a[1],y=a[2],P=r[0],S=r[1],O=r[2],E=n[0],I=n[1],L=n[2];if(Math.abs(m-E)0&&(b=1/Math.sqrt(b),s*=b,f*=b,c*=b);var l=i*c-M*f,v=M*s-h*c,m=h*f-i*s;(b=l*l+v*v+m*m)>0&&(b=1/Math.sqrt(b),l*=b,v*=b,m*=b);return t[0]=l,t[1]=v,t[2]=m,t[3]=0,t[4]=f*m-c*v,t[5]=c*l-s*m,t[6]=s*v-f*l,t[7]=0,t[8]=s,t[9]=f,t[10]=c,t[11]=0,t[12]=o,t[13]=e,t[14]=u,t[15]=1,t},n.str=function(t){return\"mat4(\"+t[0]+\", \"+t[1]+\", \"+t[2]+\", \"+t[3]+\", \"+t[4]+\", \"+t[5]+\", \"+t[6]+\", \"+t[7]+\", \"+t[8]+\", \"+t[9]+\", \"+t[10]+\", \"+t[11]+\", \"+t[12]+\", \"+t[13]+\", \"+t[14]+\", \"+t[15]+\")\"},n.frob=function(t){return Math.hypot(t[0],t[1],t[2],t[3],t[4],t[5],t[6],t[7],t[8],t[9],t[10],t[11],t[12],t[13],t[14],t[15])},n.add=function(t,a,n){return t[0]=a[0]+n[0],t[1]=a[1]+n[1],t[2]=a[2]+n[2],t[3]=a[3]+n[3],t[4]=a[4]+n[4],t[5]=a[5]+n[5],t[6]=a[6]+n[6],t[7]=a[7]+n[7],t[8]=a[8]+n[8],t[9]=a[9]+n[9],t[10]=a[10]+n[10],t[11]=a[11]+n[11],t[12]=a[12]+n[12],t[13]=a[13]+n[13],t[14]=a[14]+n[14],t[15]=a[15]+n[15],t},n.subtract=s,n.multiplyScalar=function(t,a,n){return t[0]=a[0]*n,t[1]=a[1]*n,t[2]=a[2]*n,t[3]=a[3]*n,t[4]=a[4]*n,t[5]=a[5]*n,t[6]=a[6]*n,t[7]=a[7]*n,t[8]=a[8]*n,t[9]=a[9]*n,t[10]=a[10]*n,t[11]=a[11]*n,t[12]=a[12]*n,t[13]=a[13]*n,t[14]=a[14]*n,t[15]=a[15]*n,t},n.multiplyScalarAndAdd=function(t,a,n,r){return t[0]=a[0]+n[0]*r,t[1]=a[1]+n[1]*r,t[2]=a[2]+n[2]*r,t[3]=a[3]+n[3]*r,t[4]=a[4]+n[4]*r,t[5]=a[5]+n[5]*r,t[6]=a[6]+n[6]*r,t[7]=a[7]+n[7]*r,t[8]=a[8]+n[8]*r,t[9]=a[9]+n[9]*r,t[10]=a[10]+n[10]*r,t[11]=a[11]+n[11]*r,t[12]=a[12]+n[12]*r,t[13]=a[13]+n[13]*r,t[14]=a[14]+n[14]*r,t[15]=a[15]+n[15]*r,t},n.exactEquals=function(t,a){return t[0]===a[0]&&t[1]===a[1]&&t[2]===a[2]&&t[3]===a[3]&&t[4]===a[4]&&t[5]===a[5]&&t[6]===a[6]&&t[7]===a[7]&&t[8]===a[8]&&t[9]===a[9]&&t[10]===a[10]&&t[11]===a[11]&&t[12]===a[12]&&t[13]===a[13]&&t[14]===a[14]&&t[15]===a[15]},n.equals=function(t,a){var n=t[0],r=t[1],e=t[2],u=t[3],h=t[4],i=t[5],M=t[6],s=t[7],f=t[8],c=t[9],b=t[10],l=t[11],v=t[12],m=t[13],p=t[14],y=t[15],P=a[0],S=a[1],O=a[2],E=a[3],I=a[4],L=a[5],N=a[6],R=a[7],x=a[8],d=a[9],g=a[10],A=a[11],Y=a[12],T=a[13],w=a[14],_=a[15];return Math.abs(n-P)<=o.EPSILON*Math.max(1,Math.abs(n),Math.abs(P))&&Math.abs(r-S)<=o.EPSILON*Math.max(1,Math.abs(r),Math.abs(S))&&Math.abs(e-O)<=o.EPSILON*Math.max(1,Math.abs(e),Math.abs(O))&&Math.abs(u-E)<=o.EPSILON*Math.max(1,Math.abs(u),Math.abs(E))&&Math.abs(h-I)<=o.EPSILON*Math.max(1,Math.abs(h),Math.abs(I))&&Math.abs(i-L)<=o.EPSILON*Math.max(1,Math.abs(i),Math.abs(L))&&Math.abs(M-N)<=o.EPSILON*Math.max(1,Math.abs(M),Math.abs(N))&&Math.abs(s-R)<=o.EPSILON*Math.max(1,Math.abs(s),Math.abs(R))&&Math.abs(f-x)<=o.EPSILON*Math.max(1,Math.abs(f),Math.abs(x))&&Math.abs(c-d)<=o.EPSILON*Math.max(1,Math.abs(c),Math.abs(d))&&Math.abs(b-g)<=o.EPSILON*Math.max(1,Math.abs(b),Math.abs(g))&&Math.abs(l-A)<=o.EPSILON*Math.max(1,Math.abs(l),Math.abs(A))&&Math.abs(v-Y)<=o.EPSILON*Math.max(1,Math.abs(v),Math.abs(Y))&&Math.abs(m-T)<=o.EPSILON*Math.max(1,Math.abs(m),Math.abs(T))&&Math.abs(p-w)<=o.EPSILON*Math.max(1,Math.abs(p),Math.abs(w))&&Math.abs(y-_)<=o.EPSILON*Math.max(1,Math.abs(y),Math.abs(_))},n.sub=n.mul=void 0;var o=function(t){if(t&&t.__esModule)return t;if(null===t||\"object\"!==r(t)&&\"function\"!=typeof t)return{default:t};var a=e();if(a&&a.has(t))return a.get(t);var n={},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var u in t)if(Object.prototype.hasOwnProperty.call(t,u)){var h=o?Object.getOwnPropertyDescriptor(t,u):null;h&&(h.get||h.set)?Object.defineProperty(n,u,h):n[u]=t[u]}n.default=t,a&&a.set(t,n);return n}(t(\"c6b4e451bc\"));function e(){if(\"function\"!=typeof WeakMap)return null;var t=new WeakMap;return e=function(){return t},t}function u(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}function h(t,a,n){var r=a[0],o=a[1],e=a[2],u=a[3],h=a[4],i=a[5],M=a[6],s=a[7],f=a[8],c=a[9],b=a[10],l=a[11],v=a[12],m=a[13],p=a[14],y=a[15],P=n[0],S=n[1],O=n[2],E=n[3];return t[0]=P*r+S*h+O*f+E*v,t[1]=P*o+S*i+O*c+E*m,t[2]=P*e+S*M+O*b+E*p,t[3]=P*u+S*s+O*l+E*y,P=n[4],S=n[5],O=n[6],E=n[7],t[4]=P*r+S*h+O*f+E*v,t[5]=P*o+S*i+O*c+E*m,t[6]=P*e+S*M+O*b+E*p,t[7]=P*u+S*s+O*l+E*y,P=n[8],S=n[9],O=n[10],E=n[11],t[8]=P*r+S*h+O*f+E*v,t[9]=P*o+S*i+O*c+E*m,t[10]=P*e+S*M+O*b+E*p,t[11]=P*u+S*s+O*l+E*y,P=n[12],S=n[13],O=n[14],E=n[15],t[12]=P*r+S*h+O*f+E*v,t[13]=P*o+S*i+O*c+E*m,t[14]=P*e+S*M+O*b+E*p,t[15]=P*u+S*s+O*l+E*y,t}function i(t,a,n){var r=a[0],o=a[1],e=a[2],u=a[3],h=r+r,i=o+o,M=e+e,s=r*h,f=r*i,c=r*M,b=o*i,l=o*M,v=e*M,m=u*h,p=u*i,y=u*M;return t[0]=1-(b+v),t[1]=f+y,t[2]=c-p,t[3]=0,t[4]=f-y,t[5]=1-(s+v),t[6]=l+m,t[7]=0,t[8]=c+p,t[9]=l-m,t[10]=1-(s+b),t[11]=0,t[12]=n[0],t[13]=n[1],t[14]=n[2],t[15]=1,t}function M(t,a){var n=a[0],r=a[1],o=a[2],e=a[4],u=a[5],h=a[6],i=a[8],M=a[9],s=a[10];return t[0]=Math.hypot(n,r,o),t[1]=Math.hypot(e,u,h),t[2]=Math.hypot(i,M,s),t}function s(t,a,n){return t[0]=a[0]-n[0],t[1]=a[1]-n[1],t[2]=a[2]-n[2],t[3]=a[3]-n[3],t[4]=a[4]-n[4],t[5]=a[5]-n[5],t[6]=a[6]-n[6],t[7]=a[7]-n[7],t[8]=a[8]-n[8],t[9]=a[9]-n[9],t[10]=a[10]-n[10],t[11]=a[11]-n[11],t[12]=a[12]-n[12],t[13]=a[13]-n[13],t[14]=a[14]-n[14],t[15]=a[15]-n[15],t}var f=h;n.mul=f;var c=s;n.sub=c},\n", + " \"8b81ae2f8b\": function _(t,r,n){function e(t){return(e=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t})(t)}n.create=l,n.identity=function(t){return t[0]=0,t[1]=0,t[2]=0,t[3]=1,t},n.setAxisAngle=f,n.getAxisAngle=function(t,r){var n=2*Math.acos(r[3]),e=Math.sin(n/2);e>a.EPSILON?(t[0]=r[0]/e,t[1]=r[1]/e,t[2]=r[2]/e):(t[0]=1,t[1]=0,t[2]=0);return n},n.getAngle=function(t,r){var n=O(t,r);return Math.acos(2*n*n-1)},n.multiply=h,n.rotateX=function(t,r,n){n*=.5;var e=r[0],a=r[1],o=r[2],u=r[3],s=Math.sin(n),c=Math.cos(n);return t[0]=e*c+u*s,t[1]=a*c+o*s,t[2]=o*c-a*s,t[3]=u*c-e*s,t},n.rotateY=function(t,r,n){n*=.5;var e=r[0],a=r[1],o=r[2],u=r[3],s=Math.sin(n),c=Math.cos(n);return t[0]=e*c-o*s,t[1]=a*c+u*s,t[2]=o*c+e*s,t[3]=u*c-a*s,t},n.rotateZ=function(t,r,n){n*=.5;var e=r[0],a=r[1],o=r[2],u=r[3],s=Math.sin(n),c=Math.cos(n);return t[0]=e*c+a*s,t[1]=a*c-e*s,t[2]=o*c+u*s,t[3]=u*c-o*s,t},n.calculateW=function(t,r){var n=r[0],e=r[1],a=r[2];return t[0]=n,t[1]=e,t[2]=a,t[3]=Math.sqrt(Math.abs(1-n*n-e*e-a*a)),t},n.exp=M,n.ln=v,n.pow=function(t,r,n){return v(t,r),P(t,t,n),M(t,t),t},n.slerp=p,n.random=function(t){var r=a.RANDOM(),n=a.RANDOM(),e=a.RANDOM(),o=Math.sqrt(1-r),u=Math.sqrt(r);return t[0]=o*Math.sin(2*Math.PI*n),t[1]=o*Math.cos(2*Math.PI*n),t[2]=u*Math.sin(2*Math.PI*e),t[3]=u*Math.cos(2*Math.PI*e),t},n.invert=function(t,r){var n=r[0],e=r[1],a=r[2],o=r[3],u=n*n+e*e+a*a+o*o,s=u?1/u:0;return t[0]=-n*s,t[1]=-e*s,t[2]=-a*s,t[3]=o*s,t},n.conjugate=function(t,r){return t[0]=-r[0],t[1]=-r[1],t[2]=-r[2],t[3]=r[3],t},n.fromMat3=y,n.fromEuler=function(t,r,n,e){var a=.5*Math.PI/180;r*=a,n*=a,e*=a;var o=Math.sin(r),u=Math.cos(r),s=Math.sin(n),c=Math.cos(n),i=Math.sin(e),l=Math.cos(e);return t[0]=o*c*l-u*s*i,t[1]=u*s*l+o*c*i,t[2]=u*c*i-o*s*l,t[3]=u*c*l+o*s*i,t},n.str=function(t){return\"quat(\"+t[0]+\", \"+t[1]+\", \"+t[2]+\", \"+t[3]+\")\"},n.setAxes=n.sqlerp=n.rotationTo=n.equals=n.exactEquals=n.normalize=n.sqrLen=n.squaredLength=n.len=n.length=n.lerp=n.dot=n.scale=n.mul=n.add=n.set=n.copy=n.fromValues=n.clone=void 0;var a=i(t(\"c6b4e451bc\")),o=i(t(\"4dc492e8e1\")),u=i(t(\"2e13827733\")),s=i(t(\"03254e8a21\"));function c(){if(\"function\"!=typeof WeakMap)return null;var t=new WeakMap;return c=function(){return t},t}function i(t){if(t&&t.__esModule)return t;if(null===t||\"object\"!==e(t)&&\"function\"!=typeof t)return{default:t};var r=c();if(r&&r.has(t))return r.get(t);var n={},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in t)if(Object.prototype.hasOwnProperty.call(t,o)){var u=a?Object.getOwnPropertyDescriptor(t,o):null;u&&(u.get||u.set)?Object.defineProperty(n,o,u):n[o]=t[o]}return n.default=t,r&&r.set(t,n),n}function l(){var t=new a.ARRAY_TYPE(4);return a.ARRAY_TYPE!=Float32Array&&(t[0]=0,t[1]=0,t[2]=0),t[3]=1,t}function f(t,r,n){n*=.5;var e=Math.sin(n);return t[0]=e*r[0],t[1]=e*r[1],t[2]=e*r[2],t[3]=Math.cos(n),t}function h(t,r,n){var e=r[0],a=r[1],o=r[2],u=r[3],s=n[0],c=n[1],i=n[2],l=n[3];return t[0]=e*l+u*s+a*i-o*c,t[1]=a*l+u*c+o*s-e*i,t[2]=o*l+u*i+e*c-a*s,t[3]=u*l-e*s-a*c-o*i,t}function M(t,r){var n=r[0],e=r[1],a=r[2],o=r[3],u=Math.sqrt(n*n+e*e+a*a),s=Math.exp(o),c=u>0?s*Math.sin(u)/u:0;return t[0]=n*c,t[1]=e*c,t[2]=a*c,t[3]=s*Math.cos(u),t}function v(t,r){var n=r[0],e=r[1],a=r[2],o=r[3],u=Math.sqrt(n*n+e*e+a*a),s=u>0?Math.atan2(u,o)/u:0;return t[0]=n*s,t[1]=e*s,t[2]=a*s,t[3]=.5*Math.log(n*n+e*e+a*a+o*o),t}function p(t,r,n,e){var o,u,s,c,i,l=r[0],f=r[1],h=r[2],M=r[3],v=n[0],p=n[1],y=n[2],d=n[3];return(u=l*v+f*p+h*y+M*d)<0&&(u=-u,v=-v,p=-p,y=-y,d=-d),1-u>a.EPSILON?(o=Math.acos(u),s=Math.sin(o),c=Math.sin((1-e)*o)/s,i=Math.sin(e*o)/s):(c=1-e,i=e),t[0]=c*l+i*v,t[1]=c*f+i*p,t[2]=c*h+i*y,t[3]=c*M+i*d,t}function y(t,r){var n,e=r[0]+r[4]+r[8];if(e>0)n=Math.sqrt(e+1),t[3]=.5*n,n=.5/n,t[0]=(r[5]-r[7])*n,t[1]=(r[6]-r[2])*n,t[2]=(r[1]-r[3])*n;else{var a=0;r[4]>r[0]&&(a=1),r[8]>r[3*a+a]&&(a=2);var o=(a+1)%3,u=(a+2)%3;n=Math.sqrt(r[3*a+a]-r[3*o+o]-r[3*u+u]+1),t[a]=.5*n,n=.5/n,t[3]=(r[3*o+u]-r[3*u+o])*n,t[o]=(r[3*o+a]+r[3*a+o])*n,t[u]=(r[3*u+a]+r[3*a+u])*n}return t}var d=s.clone;n.clone=d;var m=s.fromValues;n.fromValues=m;var q=s.copy;n.copy=q;var g=s.set;n.set=g;var b=s.add;n.add=b;var A=h;n.mul=A;var P=s.scale;n.scale=P;var O=s.dot;n.dot=O;var x=s.lerp;n.lerp=x;var E=s.length;n.length=E;var I=E;n.len=I;var j=s.squaredLength;n.squaredLength=j;var L=j;n.sqrLen=L;var R=s.normalize;n.normalize=R;var S=s.exactEquals;n.exactEquals=S;var w=s.equals;n.equals=w;var D,N,V,Y=(D=u.create(),N=u.fromValues(1,0,0),V=u.fromValues(0,1,0),function(t,r,n){var e=u.dot(r,n);return e<-.999999?(u.cross(D,N,r),u.len(D)<1e-6&&u.cross(D,V,r),u.normalize(D,D),f(t,D,Math.PI),t):e>.999999?(t[0]=0,t[1]=0,t[2]=0,t[3]=1,t):(u.cross(D,r,n),t[0]=D[0],t[1]=D[1],t[2]=D[2],t[3]=1+e,R(t,t))});n.rotationTo=Y;var _,z,T=(_=l(),z=l(),function(t,r,n,e,a,o){return p(_,r,a,o),p(z,n,e,o),p(t,_,z,2*o*(1-o)),t});n.sqlerp=T;var W,k=(W=o.create(),function(t,r,n,e){return W[0]=n[0],W[3]=n[1],W[6]=n[2],W[1]=e[0],W[4]=e[1],W[7]=e[2],W[2]=-r[0],W[5]=-r[1],W[8]=-r[2],R(t,y(t,W))});n.setAxes=k},\n", + " \"2e13827733\": function _(t,n,r){function a(t){return(a=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t})(t)}r.create=o,r.clone=function(t){var n=new e.ARRAY_TYPE(3);return n[0]=t[0],n[1]=t[1],n[2]=t[2],n},r.length=i,r.fromValues=function(t,n,r){var a=new e.ARRAY_TYPE(3);return a[0]=t,a[1]=n,a[2]=r,a},r.copy=function(t,n){return t[0]=n[0],t[1]=n[1],t[2]=n[2],t},r.set=function(t,n,r,a){return t[0]=n,t[1]=r,t[2]=a,t},r.add=function(t,n,r){return t[0]=n[0]+r[0],t[1]=n[1]+r[1],t[2]=n[2]+r[2],t},r.subtract=c,r.multiply=f,r.divide=s,r.ceil=function(t,n){return t[0]=Math.ceil(n[0]),t[1]=Math.ceil(n[1]),t[2]=Math.ceil(n[2]),t},r.floor=function(t,n){return t[0]=Math.floor(n[0]),t[1]=Math.floor(n[1]),t[2]=Math.floor(n[2]),t},r.min=function(t,n,r){return t[0]=Math.min(n[0],r[0]),t[1]=Math.min(n[1],r[1]),t[2]=Math.min(n[2],r[2]),t},r.max=function(t,n,r){return t[0]=Math.max(n[0],r[0]),t[1]=Math.max(n[1],r[1]),t[2]=Math.max(n[2],r[2]),t},r.round=function(t,n){return t[0]=Math.round(n[0]),t[1]=Math.round(n[1]),t[2]=Math.round(n[2]),t},r.scale=function(t,n,r){return t[0]=n[0]*r,t[1]=n[1]*r,t[2]=n[2]*r,t},r.scaleAndAdd=function(t,n,r,a){return t[0]=n[0]+r[0]*a,t[1]=n[1]+r[1]*a,t[2]=n[2]+r[2]*a,t},r.distance=h,r.squaredDistance=M,r.squaredLength=l,r.negate=function(t,n){return t[0]=-n[0],t[1]=-n[1],t[2]=-n[2],t},r.inverse=function(t,n){return t[0]=1/n[0],t[1]=1/n[1],t[2]=1/n[2],t},r.normalize=function(t,n){var r=n[0],a=n[1],e=n[2],u=r*r+a*a+e*e;u>0&&(u=1/Math.sqrt(u));return t[0]=n[0]*u,t[1]=n[1]*u,t[2]=n[2]*u,t},r.dot=v,r.cross=function(t,n,r){var a=n[0],e=n[1],u=n[2],o=r[0],i=r[1],c=r[2];return t[0]=e*c-u*i,t[1]=u*o-a*c,t[2]=a*i-e*o,t},r.lerp=function(t,n,r,a){var e=n[0],u=n[1],o=n[2];return t[0]=e+a*(r[0]-e),t[1]=u+a*(r[1]-u),t[2]=o+a*(r[2]-o),t},r.hermite=function(t,n,r,a,e,u){var o=u*u,i=o*(2*u-3)+1,c=o*(u-2)+u,f=o*(u-1),s=o*(3-2*u);return t[0]=n[0]*i+r[0]*c+a[0]*f+e[0]*s,t[1]=n[1]*i+r[1]*c+a[1]*f+e[1]*s,t[2]=n[2]*i+r[2]*c+a[2]*f+e[2]*s,t},r.bezier=function(t,n,r,a,e,u){var o=1-u,i=o*o,c=u*u,f=i*o,s=3*u*i,h=3*c*o,M=c*u;return t[0]=n[0]*f+r[0]*s+a[0]*h+e[0]*M,t[1]=n[1]*f+r[1]*s+a[1]*h+e[1]*M,t[2]=n[2]*f+r[2]*s+a[2]*h+e[2]*M,t},r.random=function(t,n){n=n||1;var r=2*e.RANDOM()*Math.PI,a=2*e.RANDOM()-1,u=Math.sqrt(1-a*a)*n;return t[0]=Math.cos(r)*u,t[1]=Math.sin(r)*u,t[2]=a*n,t},r.transformMat4=function(t,n,r){var a=n[0],e=n[1],u=n[2],o=r[3]*a+r[7]*e+r[11]*u+r[15];return o=o||1,t[0]=(r[0]*a+r[4]*e+r[8]*u+r[12])/o,t[1]=(r[1]*a+r[5]*e+r[9]*u+r[13])/o,t[2]=(r[2]*a+r[6]*e+r[10]*u+r[14])/o,t},r.transformMat3=function(t,n,r){var a=n[0],e=n[1],u=n[2];return t[0]=a*r[0]+e*r[3]+u*r[6],t[1]=a*r[1]+e*r[4]+u*r[7],t[2]=a*r[2]+e*r[5]+u*r[8],t},r.transformQuat=function(t,n,r){var a=r[0],e=r[1],u=r[2],o=r[3],i=n[0],c=n[1],f=n[2],s=e*f-u*c,h=u*i-a*f,M=a*c-e*i,l=e*M-u*h,v=u*s-a*M,m=a*h-e*s,b=2*o;return s*=b,h*=b,M*=b,l*=2,v*=2,m*=2,t[0]=i+s+l,t[1]=c+h+v,t[2]=f+M+m,t},r.rotateX=function(t,n,r,a){var e=[],u=[];return e[0]=n[0]-r[0],e[1]=n[1]-r[1],e[2]=n[2]-r[2],u[0]=e[0],u[1]=e[1]*Math.cos(a)-e[2]*Math.sin(a),u[2]=e[1]*Math.sin(a)+e[2]*Math.cos(a),t[0]=u[0]+r[0],t[1]=u[1]+r[1],t[2]=u[2]+r[2],t},r.rotateY=function(t,n,r,a){var e=[],u=[];return e[0]=n[0]-r[0],e[1]=n[1]-r[1],e[2]=n[2]-r[2],u[0]=e[2]*Math.sin(a)+e[0]*Math.cos(a),u[1]=e[1],u[2]=e[2]*Math.cos(a)-e[0]*Math.sin(a),t[0]=u[0]+r[0],t[1]=u[1]+r[1],t[2]=u[2]+r[2],t},r.rotateZ=function(t,n,r,a){var e=[],u=[];return e[0]=n[0]-r[0],e[1]=n[1]-r[1],e[2]=n[2]-r[2],u[0]=e[0]*Math.cos(a)-e[1]*Math.sin(a),u[1]=e[0]*Math.sin(a)+e[1]*Math.cos(a),u[2]=e[2],t[0]=u[0]+r[0],t[1]=u[1]+r[1],t[2]=u[2]+r[2],t},r.angle=function(t,n){var r=t[0],a=t[1],e=t[2],u=n[0],o=n[1],i=n[2],c=Math.sqrt(r*r+a*a+e*e),f=Math.sqrt(u*u+o*o+i*i),s=c*f,h=s&&v(t,n)/s;return Math.acos(Math.min(Math.max(h,-1),1))},r.zero=function(t){return t[0]=0,t[1]=0,t[2]=0,t},r.str=function(t){return\"vec3(\"+t[0]+\", \"+t[1]+\", \"+t[2]+\")\"},r.exactEquals=function(t,n){return t[0]===n[0]&&t[1]===n[1]&&t[2]===n[2]},r.equals=function(t,n){var r=t[0],a=t[1],u=t[2],o=n[0],i=n[1],c=n[2];return Math.abs(r-o)<=e.EPSILON*Math.max(1,Math.abs(r),Math.abs(o))&&Math.abs(a-i)<=e.EPSILON*Math.max(1,Math.abs(a),Math.abs(i))&&Math.abs(u-c)<=e.EPSILON*Math.max(1,Math.abs(u),Math.abs(c))},r.forEach=r.sqrLen=r.len=r.sqrDist=r.dist=r.div=r.mul=r.sub=void 0;var e=function(t){if(t&&t.__esModule)return t;if(null===t||\"object\"!==a(t)&&\"function\"!=typeof t)return{default:t};var n=u();if(n&&n.has(t))return n.get(t);var r={},e=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in t)if(Object.prototype.hasOwnProperty.call(t,o)){var i=e?Object.getOwnPropertyDescriptor(t,o):null;i&&(i.get||i.set)?Object.defineProperty(r,o,i):r[o]=t[o]}r.default=t,n&&n.set(t,r);return r}(t(\"c6b4e451bc\"));function u(){if(\"function\"!=typeof WeakMap)return null;var t=new WeakMap;return u=function(){return t},t}function o(){var t=new e.ARRAY_TYPE(3);return e.ARRAY_TYPE!=Float32Array&&(t[0]=0,t[1]=0,t[2]=0),t}function i(t){var n=t[0],r=t[1],a=t[2];return Math.hypot(n,r,a)}function c(t,n,r){return t[0]=n[0]-r[0],t[1]=n[1]-r[1],t[2]=n[2]-r[2],t}function f(t,n,r){return t[0]=n[0]*r[0],t[1]=n[1]*r[1],t[2]=n[2]*r[2],t}function s(t,n,r){return t[0]=n[0]/r[0],t[1]=n[1]/r[1],t[2]=n[2]/r[2],t}function h(t,n){var r=n[0]-t[0],a=n[1]-t[1],e=n[2]-t[2];return Math.hypot(r,a,e)}function M(t,n){var r=n[0]-t[0],a=n[1]-t[1],e=n[2]-t[2];return r*r+a*a+e*e}function l(t){var n=t[0],r=t[1],a=t[2];return n*n+r*r+a*a}function v(t,n){return t[0]*n[0]+t[1]*n[1]+t[2]*n[2]}var m=c;r.sub=m;var b=f;r.mul=b;var d=s;r.div=d;var y=h;r.dist=y;var p=M;r.sqrDist=p;var A=i;r.len=A;var O=l;r.sqrLen=O;var P,q=(P=o(),function(t,n,r,a,e,u){var o,i;for(n||(n=3),r||(r=0),i=a?Math.min(a*n+r,t.length):t.length,o=r;o0&&(o=1/Math.sqrt(o));return t[0]=r*o,t[1]=a*o,t[2]=e*o,t[3]=u*o,t},r.dot=function(t,n){return t[0]*n[0]+t[1]*n[1]+t[2]*n[2]+t[3]*n[3]},r.cross=function(t,n,r,a){var e=r[0]*a[1]-r[1]*a[0],u=r[0]*a[2]-r[2]*a[0],o=r[0]*a[3]-r[3]*a[0],i=r[1]*a[2]-r[2]*a[1],c=r[1]*a[3]-r[3]*a[1],f=r[2]*a[3]-r[3]*a[2],h=n[0],s=n[1],M=n[2],l=n[3];return t[0]=s*f-M*c+l*i,t[1]=-h*f+M*o-l*u,t[2]=h*c-s*o+l*e,t[3]=-h*i+s*u-M*e,t},r.lerp=function(t,n,r,a){var e=n[0],u=n[1],o=n[2],i=n[3];return t[0]=e+a*(r[0]-e),t[1]=u+a*(r[1]-u),t[2]=o+a*(r[2]-o),t[3]=i+a*(r[3]-i),t},r.random=function(t,n){var r,a,u,o,i,c;n=n||1;do{r=2*e.RANDOM()-1,a=2*e.RANDOM()-1,i=r*r+a*a}while(i>=1);do{u=2*e.RANDOM()-1,o=2*e.RANDOM()-1,c=u*u+o*o}while(c>=1);var f=Math.sqrt((1-i)/c);return t[0]=n*r,t[1]=n*a,t[2]=n*u*f,t[3]=n*o*f,t},r.transformMat4=function(t,n,r){var a=n[0],e=n[1],u=n[2],o=n[3];return t[0]=r[0]*a+r[4]*e+r[8]*u+r[12]*o,t[1]=r[1]*a+r[5]*e+r[9]*u+r[13]*o,t[2]=r[2]*a+r[6]*e+r[10]*u+r[14]*o,t[3]=r[3]*a+r[7]*e+r[11]*u+r[15]*o,t},r.transformQuat=function(t,n,r){var a=n[0],e=n[1],u=n[2],o=r[0],i=r[1],c=r[2],f=r[3],h=f*a+i*u-c*e,s=f*e+c*a-o*u,M=f*u+o*e-i*a,l=-o*a-i*e-c*u;return t[0]=h*f+l*-o+s*-c-M*-i,t[1]=s*f+l*-i+M*-o-h*-c,t[2]=M*f+l*-c+h*-i-s*-o,t[3]=n[3],t},r.zero=function(t){return t[0]=0,t[1]=0,t[2]=0,t[3]=0,t},r.str=function(t){return\"vec4(\"+t[0]+\", \"+t[1]+\", \"+t[2]+\", \"+t[3]+\")\"},r.exactEquals=function(t,n){return t[0]===n[0]&&t[1]===n[1]&&t[2]===n[2]&&t[3]===n[3]},r.equals=function(t,n){var r=t[0],a=t[1],u=t[2],o=t[3],i=n[0],c=n[1],f=n[2],h=n[3];return Math.abs(r-i)<=e.EPSILON*Math.max(1,Math.abs(r),Math.abs(i))&&Math.abs(a-c)<=e.EPSILON*Math.max(1,Math.abs(a),Math.abs(c))&&Math.abs(u-f)<=e.EPSILON*Math.max(1,Math.abs(u),Math.abs(f))&&Math.abs(o-h)<=e.EPSILON*Math.max(1,Math.abs(o),Math.abs(h))},r.forEach=r.sqrLen=r.len=r.sqrDist=r.dist=r.div=r.mul=r.sub=void 0;var e=function(t){if(t&&t.__esModule)return t;if(null===t||\"object\"!==a(t)&&\"function\"!=typeof t)return{default:t};var n=u();if(n&&n.has(t))return n.get(t);var r={},e=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in t)if(Object.prototype.hasOwnProperty.call(t,o)){var i=e?Object.getOwnPropertyDescriptor(t,o):null;i&&(i.get||i.set)?Object.defineProperty(r,o,i):r[o]=t[o]}r.default=t,n&&n.set(t,r);return r}(t(\"c6b4e451bc\"));function u(){if(\"function\"!=typeof WeakMap)return null;var t=new WeakMap;return u=function(){return t},t}function o(){var t=new e.ARRAY_TYPE(4);return e.ARRAY_TYPE!=Float32Array&&(t[0]=0,t[1]=0,t[2]=0,t[3]=0),t}function i(t,n,r){return t[0]=n[0]-r[0],t[1]=n[1]-r[1],t[2]=n[2]-r[2],t[3]=n[3]-r[3],t}function c(t,n,r){return t[0]=n[0]*r[0],t[1]=n[1]*r[1],t[2]=n[2]*r[2],t[3]=n[3]*r[3],t}function f(t,n,r){return t[0]=n[0]/r[0],t[1]=n[1]/r[1],t[2]=n[2]/r[2],t[3]=n[3]/r[3],t}function h(t,n){var r=n[0]-t[0],a=n[1]-t[1],e=n[2]-t[2],u=n[3]-t[3];return Math.hypot(r,a,e,u)}function s(t,n){var r=n[0]-t[0],a=n[1]-t[1],e=n[2]-t[2],u=n[3]-t[3];return r*r+a*a+e*e+u*u}function M(t){var n=t[0],r=t[1],a=t[2],e=t[3];return Math.hypot(n,r,a,e)}function l(t){var n=t[0],r=t[1],a=t[2],e=t[3];return n*n+r*r+a*a+e*e}var v=i;r.sub=v;var b=c;r.mul=b;var m=f;r.div=m;var d=h;r.dist=d;var y=s;r.sqrDist=y;var p=M;r.len=p;var O=l;r.sqrLen=O;var A,P=(A=o(),function(t,n,r,a,e,u){var o,i;for(n||(n=4),r||(r=0),i=a?Math.min(a*n+r,t.length):t.length,o=r;o0){n=Math.sqrt(n);var a=r[0]/n,e=r[1]/n,o=r[2]/n,u=r[3]/n,i=r[4],f=r[5],c=r[6],s=r[7],l=a*i+e*f+o*c+u*s;t[0]=a,t[1]=e,t[2]=o,t[3]=u,t[4]=(i-a*l)/n,t[5]=(f-e*l)/n,t[6]=(c-o*l)/n,t[7]=(s-u*l)/n}return t},n.str=function(t){return\"quat2(\"+t[0]+\", \"+t[1]+\", \"+t[2]+\", \"+t[3]+\", \"+t[4]+\", \"+t[5]+\", \"+t[6]+\", \"+t[7]+\")\"},n.exactEquals=function(t,r){return t[0]===r[0]&&t[1]===r[1]&&t[2]===r[2]&&t[3]===r[3]&&t[4]===r[4]&&t[5]===r[5]&&t[6]===r[6]&&t[7]===r[7]},n.equals=function(t,r){var n=t[0],a=t[1],o=t[2],u=t[3],i=t[4],f=t[5],c=t[6],s=t[7],l=r[0],h=r[1],b=r[2],M=r[3],v=r[4],y=r[5],p=r[6],m=r[7];return Math.abs(n-l)<=e.EPSILON*Math.max(1,Math.abs(n),Math.abs(l))&&Math.abs(a-h)<=e.EPSILON*Math.max(1,Math.abs(a),Math.abs(h))&&Math.abs(o-b)<=e.EPSILON*Math.max(1,Math.abs(o),Math.abs(b))&&Math.abs(u-M)<=e.EPSILON*Math.max(1,Math.abs(u),Math.abs(M))&&Math.abs(i-v)<=e.EPSILON*Math.max(1,Math.abs(i),Math.abs(v))&&Math.abs(f-y)<=e.EPSILON*Math.max(1,Math.abs(f),Math.abs(y))&&Math.abs(c-p)<=e.EPSILON*Math.max(1,Math.abs(c),Math.abs(p))&&Math.abs(s-m)<=e.EPSILON*Math.max(1,Math.abs(s),Math.abs(m))},n.sqrLen=n.squaredLength=n.len=n.length=n.dot=n.mul=n.setReal=n.getReal=void 0;var e=f(t(\"c6b4e451bc\")),o=f(t(\"8b81ae2f8b\")),u=f(t(\"948401a902\"));function i(){if(\"function\"!=typeof WeakMap)return null;var t=new WeakMap;return i=function(){return t},t}function f(t){if(t&&t.__esModule)return t;if(null===t||\"object\"!==a(t)&&\"function\"!=typeof t)return{default:t};var r=i();if(r&&r.has(t))return r.get(t);var n={},e=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in t)if(Object.prototype.hasOwnProperty.call(t,o)){var u=e?Object.getOwnPropertyDescriptor(t,o):null;u&&(u.get||u.set)?Object.defineProperty(n,o,u):n[o]=t[o]}return n.default=t,r&&r.set(t,n),n}function c(t,r,n){var a=.5*n[0],e=.5*n[1],o=.5*n[2],u=r[0],i=r[1],f=r[2],c=r[3];return t[0]=u,t[1]=i,t[2]=f,t[3]=c,t[4]=a*c+e*f-o*i,t[5]=e*c+o*u-a*f,t[6]=o*c+a*i-e*u,t[7]=-a*u-e*i-o*f,t}function s(t,r){return t[0]=r[0],t[1]=r[1],t[2]=r[2],t[3]=r[3],t[4]=r[4],t[5]=r[5],t[6]=r[6],t[7]=r[7],t}var l=o.copy;n.getReal=l;var h=o.copy;function b(t,r,n){var a=r[0],e=r[1],o=r[2],u=r[3],i=n[4],f=n[5],c=n[6],s=n[7],l=r[4],h=r[5],b=r[6],M=r[7],v=n[0],y=n[1],p=n[2],m=n[3];return t[0]=a*m+u*v+e*p-o*y,t[1]=e*m+u*y+o*v-a*p,t[2]=o*m+u*p+a*y-e*v,t[3]=u*m-a*v-e*y-o*p,t[4]=a*s+u*i+e*c-o*f+l*m+M*v+h*p-b*y,t[5]=e*s+u*f+o*i-a*c+h*m+M*y+b*v-l*p,t[6]=o*s+u*c+a*f-e*i+b*m+M*p+l*y-h*v,t[7]=u*s-a*i-e*f-o*c+M*m-l*v-h*y-b*p,t}n.setReal=h;var M=b;n.mul=M;var v=o.dot;n.dot=v;var y=o.length;n.length=y;var p=y;n.len=p;var m=o.squaredLength;n.squaredLength=m;var P=m;n.sqrLen=P},\n", + " \"62ac52b540\": function _(t,n,r){function e(t){return(e=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t})(t)}r.create=o,r.clone=function(t){var n=new a.ARRAY_TYPE(2);return n[0]=t[0],n[1]=t[1],n},r.fromValues=function(t,n){var r=new a.ARRAY_TYPE(2);return r[0]=t,r[1]=n,r},r.copy=function(t,n){return t[0]=n[0],t[1]=n[1],t},r.set=function(t,n,r){return t[0]=n,t[1]=r,t},r.add=function(t,n,r){return t[0]=n[0]+r[0],t[1]=n[1]+r[1],t},r.subtract=i,r.multiply=c,r.divide=f,r.ceil=function(t,n){return t[0]=Math.ceil(n[0]),t[1]=Math.ceil(n[1]),t},r.floor=function(t,n){return t[0]=Math.floor(n[0]),t[1]=Math.floor(n[1]),t},r.min=function(t,n,r){return t[0]=Math.min(n[0],r[0]),t[1]=Math.min(n[1],r[1]),t},r.max=function(t,n,r){return t[0]=Math.max(n[0],r[0]),t[1]=Math.max(n[1],r[1]),t},r.round=function(t,n){return t[0]=Math.round(n[0]),t[1]=Math.round(n[1]),t},r.scale=function(t,n,r){return t[0]=n[0]*r,t[1]=n[1]*r,t},r.scaleAndAdd=function(t,n,r,e){return t[0]=n[0]+r[0]*e,t[1]=n[1]+r[1]*e,t},r.distance=s,r.squaredDistance=l,r.length=h,r.squaredLength=M,r.negate=function(t,n){return t[0]=-n[0],t[1]=-n[1],t},r.inverse=function(t,n){return t[0]=1/n[0],t[1]=1/n[1],t},r.normalize=function(t,n){var r=n[0],e=n[1],a=r*r+e*e;a>0&&(a=1/Math.sqrt(a));return t[0]=n[0]*a,t[1]=n[1]*a,t},r.dot=function(t,n){return t[0]*n[0]+t[1]*n[1]},r.cross=function(t,n,r){var e=n[0]*r[1]-n[1]*r[0];return t[0]=t[1]=0,t[2]=e,t},r.lerp=function(t,n,r,e){var a=n[0],u=n[1];return t[0]=a+e*(r[0]-a),t[1]=u+e*(r[1]-u),t},r.random=function(t,n){n=n||1;var r=2*a.RANDOM()*Math.PI;return t[0]=Math.cos(r)*n,t[1]=Math.sin(r)*n,t},r.transformMat2=function(t,n,r){var e=n[0],a=n[1];return t[0]=r[0]*e+r[2]*a,t[1]=r[1]*e+r[3]*a,t},r.transformMat2d=function(t,n,r){var e=n[0],a=n[1];return t[0]=r[0]*e+r[2]*a+r[4],t[1]=r[1]*e+r[3]*a+r[5],t},r.transformMat3=function(t,n,r){var e=n[0],a=n[1];return t[0]=r[0]*e+r[3]*a+r[6],t[1]=r[1]*e+r[4]*a+r[7],t},r.transformMat4=function(t,n,r){var e=n[0],a=n[1];return t[0]=r[0]*e+r[4]*a+r[12],t[1]=r[1]*e+r[5]*a+r[13],t},r.rotate=function(t,n,r,e){var a=n[0]-r[0],u=n[1]-r[1],o=Math.sin(e),i=Math.cos(e);return t[0]=a*i-u*o+r[0],t[1]=a*o+u*i+r[1],t},r.angle=function(t,n){var r=t[0],e=t[1],a=n[0],u=n[1],o=Math.sqrt(r*r+e*e)*Math.sqrt(a*a+u*u),i=o&&(r*a+e*u)/o;return Math.acos(Math.min(Math.max(i,-1),1))},r.zero=function(t){return t[0]=0,t[1]=0,t},r.str=function(t){return\"vec2(\"+t[0]+\", \"+t[1]+\")\"},r.exactEquals=function(t,n){return t[0]===n[0]&&t[1]===n[1]},r.equals=function(t,n){var r=t[0],e=t[1],u=n[0],o=n[1];return Math.abs(r-u)<=a.EPSILON*Math.max(1,Math.abs(r),Math.abs(u))&&Math.abs(e-o)<=a.EPSILON*Math.max(1,Math.abs(e),Math.abs(o))},r.forEach=r.sqrLen=r.sqrDist=r.dist=r.div=r.mul=r.sub=r.len=void 0;var a=function(t){if(t&&t.__esModule)return t;if(null===t||\"object\"!==e(t)&&\"function\"!=typeof t)return{default:t};var n=u();if(n&&n.has(t))return n.get(t);var r={},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in t)if(Object.prototype.hasOwnProperty.call(t,o)){var i=a?Object.getOwnPropertyDescriptor(t,o):null;i&&(i.get||i.set)?Object.defineProperty(r,o,i):r[o]=t[o]}r.default=t,n&&n.set(t,r);return r}(t(\"c6b4e451bc\"));function u(){if(\"function\"!=typeof WeakMap)return null;var t=new WeakMap;return u=function(){return t},t}function o(){var t=new a.ARRAY_TYPE(2);return a.ARRAY_TYPE!=Float32Array&&(t[0]=0,t[1]=0),t}function i(t,n,r){return t[0]=n[0]-r[0],t[1]=n[1]-r[1],t}function c(t,n,r){return t[0]=n[0]*r[0],t[1]=n[1]*r[1],t}function f(t,n,r){return t[0]=n[0]/r[0],t[1]=n[1]/r[1],t}function s(t,n){var r=n[0]-t[0],e=n[1]-t[1];return Math.hypot(r,e)}function l(t,n){var r=n[0]-t[0],e=n[1]-t[1];return r*r+e*e}function h(t){var n=t[0],r=t[1];return Math.hypot(n,r)}function M(t){var n=t[0],r=t[1];return n*n+r*r}var v=h;r.len=v;var m=i;r.sub=m;var d=c;r.mul=d;var y=f;r.div=y;var p=s;r.dist=p;var b=l;r.sqrDist=b;var A=M;r.sqrLen=A;var P,q=(P=o(),function(t,n,r,e,a,u){var o,i;for(n||(n=2),r||(r=0),i=e?Math.min(e*n+r,t.length):t.length,o=r;o\\n\"+\n \"

\\n\"+\n \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n \"

\\n\"+\n \"
    \\n\"+\n \"
  • re-rerun `output_notebook()` to attempt to load from CDN again, or
  • \\n\"+\n \"
  • use INLINE resources instead, as so:
  • \\n\"+\n \"
\\n\"+\n \"\\n\"+\n \"from bokeh.resources import INLINE\\n\"+\n \"output_notebook(resources=INLINE)\\n\"+\n \"\\n\"+\n \"\"}};\n\n function display_loaded() {\n var el = document.getElementById(\"1001\");\n if (el != null) {\n el.textContent = \"BokehJS is loading...\";\n }\n if (root.Bokeh !== undefined) {\n if (el != null) {\n el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(display_loaded, 100)\n }\n }\n\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls == null || js_urls.length === 0) {\n run_callbacks();\n return null;\n }\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n root._bokeh_is_loading = css_urls.length + js_urls.length;\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n\n function on_error() {\n console.error(\"failed to load \" + url);\n }\n\n for (var i = 0; i < css_urls.length; i++) {\n var url = css_urls[i];\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error;\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n }\n\n for (var i = 0; i < js_urls.length; i++) {\n var url = js_urls[i];\n var element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error;\n element.async = false;\n element.src = url;\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n };var element = document.getElementById(\"1001\");\n if (element == null) {\n console.error(\"Bokeh: ERROR: autoload.js configured with elementid '1001' but no matching script tag was found. \")\n return false;\n }\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n \n var js_urls = [\"https://cdn.pydata.org/bokeh/release/bokeh-1.4.0.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-widgets-1.4.0.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-tables-1.4.0.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-gl-1.4.0.min.js\"];\n var css_urls = [];\n \n\n var inline_js = [\n function(Bokeh) {\n inject_raw_css(\".widget-box {\\n\\tmin-height: 20px;\\n\\tbackground-color: #f5f5f5;\\n\\tborder: 1px solid #e3e3e3 !important;\\n\\tborder-radius: 4px;\\n\\t-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.05);\\n\\tbox-shadow: inset 0 1px 1px rgba(0,0,0,.05);\\n\\toverflow-x: hidden;\\n\\toverflow-y: hidden;\\n}\\n\\n.scrollable {\\n overflow: scroll;\\n}\\n\\nprogress {\\n\\tappearance: none;\\n\\t-moz-appearance: none;\\n\\t-webkit-appearance: none;\\n\\n\\tborder: none;\\n\\theight: 20px;\\n\\tbackground-color: whiteSmoke;\\n\\tborder-radius: 3px;\\n\\tbox-shadow: 0 2px 3px rgba(0,0,0,.5) inset;\\n\\tcolor: royalblue;\\n\\tposition: relative;\\n\\tmargin: 0 0 1.5em;\\n}\\n\\nprogress[value]::-webkit-progress-bar {\\n\\tbackground-color: whiteSmoke;\\n\\tborder-radius: 3px;\\n\\tbox-shadow: 0 2px 3px rgba(0,0,0,.5) inset;\\n}\\n\\nprogress[value]::-webkit-progress-value {\\n\\tposition: relative;\\n\\n\\tbackground-size: 35px 20px, 100% 100%, 100% 100%;\\n\\tborder-radius:3px;\\n}\\n\\nprogress.active:not([value])::before {\\n\\tbackground-position: 10%;\\n\\tanimation-name: stripes;\\n\\tanimation-duration: 3s;\\n\\tanimation-timing-function: linear;\\n\\tanimation-iteration-count: infinite;\\n}\\n\\nprogress[value]::-moz-progress-bar {\\n\\tbackground-size: 35px 20px, 100% 100%, 100% 100%;\\n\\tborder-radius:3px;\\n}\\n\\nprogress:not([value])::-moz-progress-bar {\\n\\tborder-radius:3px;\\n\\tbackground:\\n\\tlinear-gradient(-45deg, transparent 33%, rgba(0, 0, 0, 0.2) 33%, rgba(0, 0, 0, 0.2) 66%, transparent 66%) left/2.5em 1.5em;\\n\\n}\\n\\nprogress.active:not([value])::-moz-progress-bar {\\n\\tbackground-position: 10%;\\n\\tanimation-name: stripes;\\n\\tanimation-duration: 3s;\\n\\tanimation-timing-function: linear;\\n\\tanimation-iteration-count: infinite;\\n}\\n\\nprogress.active:not([value])::-webkit-progress-bar {\\n\\tbackground-position: 10%;\\n\\tanimation-name: stripes;\\n\\tanimation-duration: 3s;\\n\\tanimation-timing-function: linear;\\n\\tanimation-iteration-count: infinite;\\n}\\n\\nprogress.primary[value]::-webkit-progress-value { background-color: #007bff; }\\nprogress.primary:not([value])::before { background-color: #007bff; }\\nprogress.primary:not([value])::-webkit-progress-bar { background-color: #007bff; }\\nprogress.primary::-moz-progress-bar { background-color: #007bff; }\\n\\nprogress.secondary[value]::-webkit-progress-value { background-color: #6c757d; }\\nprogress.secondary:not([value])::before { background-color: #6c757d; }\\nprogress.secondary:not([value])::-webkit-progress-bar { background-color: #6c757d; }\\nprogress.secondary::-moz-progress-bar { background-color: #6c757d; }\\n\\nprogress.success[value]::-webkit-progress-value { background-color: #28a745; }\\nprogress.success:not([value])::before { background-color: #28a745; }\\nprogress.success:not([value])::-webkit-progress-bar { background-color: #28a745; }\\nprogress.success::-moz-progress-bar { background-color: #28a745; }\\n\\nprogress.danger[value]::-webkit-progress-value { background-color: #dc3545; }\\nprogress.danger:not([value])::before { background-color: #dc3545; }\\nprogress.danger:not([value])::-webkit-progress-bar { background-color: #dc3545; }\\nprogress.danger::-moz-progress-bar { background-color: #dc3545; }\\n\\nprogress.warning[value]::-webkit-progress-value { background-color: #ffc107; }\\nprogress.warning:not([value])::before { background-color: #ffc107; }\\nprogress.warning:not([value])::-webkit-progress-bar { background-color: #ffc107; }\\nprogress.warning::-moz-progress-bar { background-color: #ffc107; }\\n\\nprogress.info[value]::-webkit-progress-value { background-color: #17a2b8; }\\nprogress.info:not([value])::before { background-color: #17a2b8; }\\nprogress.info:not([value])::-webkit-progress-bar { background-color: #17a2b8; }\\nprogress.info::-moz-progress-bar { background-color: #17a2b8; }\\n\\nprogress.light[value]::-webkit-progress-value { background-color: #f8f9fa; }\\nprogress.light:not([value])::before { background-color: #f8f9fa; }\\nprogress.light:not([value])::-webkit-progress-bar { background-color: #f8f9fa; }\\nprogress.light::-moz-progress-bar { background-color: #f8f9fa; }\\n\\nprogress.dark[value]::-webkit-progress-value { background-color: #343a40; }\\nprogress.dark:not([value])::-webkit-progress-bar { background-color: #343a40; }\\nprogress.dark:not([value])::before { background-color: #343a40; }\\nprogress.dark::-moz-progress-bar { background-color: #343a40; }\\n\\nprogress:not([value])::-webkit-progress-bar {\\n\\tborder-radius: 3px;\\n\\tbackground:\\n\\tlinear-gradient(-45deg, transparent 33%, rgba(0, 0, 0, 0.2) 33%, rgba(0, 0, 0, 0.2) 66%, transparent 66%) left/2.5em 1.5em;\\n}\\nprogress:not([value])::before {\\n\\tcontent:\\\" \\\";\\n\\tposition:absolute;\\n\\theight: 20px;\\n\\ttop:0;\\n\\tleft:0;\\n\\tright:0;\\n\\tbottom:0;\\n\\tborder-radius: 3px;\\n\\tbackground:\\n\\tlinear-gradient(-45deg, transparent 33%, rgba(0, 0, 0, 0.2) 33%, rgba(0, 0, 0, 0.2) 66%, transparent 66%) left/2.5em 1.5em;\\n}\\n\\n@keyframes stripes {\\n from {background-position: 0%}\\n to {background-position: 100%}\\n}\");\n },\n function(Bokeh) {\n inject_raw_css(\".json-formatter-row {\\n font-family: monospace;\\n}\\n.json-formatter-row,\\n.json-formatter-row a,\\n.json-formatter-row a:hover {\\n color: black;\\n text-decoration: none;\\n}\\n.json-formatter-row .json-formatter-row {\\n margin-left: 1rem;\\n}\\n.json-formatter-row .json-formatter-children.json-formatter-empty {\\n opacity: 0.5;\\n margin-left: 1rem;\\n}\\n.json-formatter-row .json-formatter-children.json-formatter-empty:after {\\n display: none;\\n}\\n.json-formatter-row .json-formatter-children.json-formatter-empty.json-formatter-object:after {\\n content: \\\"No properties\\\";\\n}\\n.json-formatter-row .json-formatter-children.json-formatter-empty.json-formatter-array:after {\\n content: \\\"[]\\\";\\n}\\n.json-formatter-row .json-formatter-string,\\n.json-formatter-row .json-formatter-stringifiable {\\n color: green;\\n white-space: pre;\\n word-wrap: break-word;\\n}\\n.json-formatter-row .json-formatter-number {\\n color: blue;\\n}\\n.json-formatter-row .json-formatter-boolean {\\n color: red;\\n}\\n.json-formatter-row .json-formatter-null {\\n color: #855A00;\\n}\\n.json-formatter-row .json-formatter-undefined {\\n color: #ca0b69;\\n}\\n.json-formatter-row .json-formatter-function {\\n color: #FF20ED;\\n}\\n.json-formatter-row .json-formatter-date {\\n background-color: rgba(0, 0, 0, 0.05);\\n}\\n.json-formatter-row .json-formatter-url {\\n text-decoration: underline;\\n color: blue;\\n cursor: pointer;\\n}\\n.json-formatter-row .json-formatter-bracket {\\n color: blue;\\n}\\n.json-formatter-row .json-formatter-key {\\n color: #00008B;\\n padding-right: 0.2rem;\\n}\\n.json-formatter-row .json-formatter-toggler-link {\\n cursor: pointer;\\n}\\n.json-formatter-row .json-formatter-toggler {\\n line-height: 1.2rem;\\n font-size: 0.7rem;\\n vertical-align: middle;\\n opacity: 0.6;\\n cursor: pointer;\\n padding-right: 0.2rem;\\n}\\n.json-formatter-row .json-formatter-toggler:after {\\n display: inline-block;\\n transition: transform 100ms ease-in;\\n content: \\\"\\\\25BA\\\";\\n}\\n.json-formatter-row > a > .json-formatter-preview-text {\\n opacity: 0;\\n transition: opacity 0.15s ease-in;\\n font-style: italic;\\n}\\n.json-formatter-row:hover > a > .json-formatter-preview-text {\\n opacity: 0.6;\\n}\\n.json-formatter-row.json-formatter-open > .json-formatter-toggler-link .json-formatter-toggler:after {\\n transform: rotate(90deg);\\n}\\n.json-formatter-row.json-formatter-open > .json-formatter-children:after {\\n display: inline-block;\\n}\\n.json-formatter-row.json-formatter-open > a > .json-formatter-preview-text {\\n display: none;\\n}\\n.json-formatter-row.json-formatter-open.json-formatter-empty:after {\\n display: block;\\n}\\n.json-formatter-dark.json-formatter-row {\\n font-family: monospace;\\n}\\n.json-formatter-dark.json-formatter-row,\\n.json-formatter-dark.json-formatter-row a,\\n.json-formatter-dark.json-formatter-row a:hover {\\n color: white;\\n text-decoration: none;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-row {\\n margin-left: 1rem;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-children.json-formatter-empty {\\n opacity: 0.5;\\n margin-left: 1rem;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-children.json-formatter-empty:after {\\n display: none;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-children.json-formatter-empty.json-formatter-object:after {\\n content: \\\"No properties\\\";\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-children.json-formatter-empty.json-formatter-array:after {\\n content: \\\"[]\\\";\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-string,\\n.json-formatter-dark.json-formatter-row .json-formatter-stringifiable {\\n color: #31F031;\\n white-space: pre;\\n word-wrap: break-word;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-number {\\n color: #66C2FF;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-boolean {\\n color: #EC4242;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-null {\\n color: #EEC97D;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-undefined {\\n color: #ef8fbe;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-function {\\n color: #FD48CB;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-date {\\n background-color: rgba(255, 255, 255, 0.05);\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-url {\\n text-decoration: underline;\\n color: #027BFF;\\n cursor: pointer;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-bracket {\\n color: #9494FF;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-key {\\n color: #23A0DB;\\n padding-right: 0.2rem;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-toggler-link {\\n cursor: pointer;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-toggler {\\n line-height: 1.2rem;\\n font-size: 0.7rem;\\n vertical-align: middle;\\n opacity: 0.6;\\n cursor: pointer;\\n padding-right: 0.2rem;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-toggler:after {\\n display: inline-block;\\n transition: transform 100ms ease-in;\\n content: \\\"\\\\25BA\\\";\\n}\\n.json-formatter-dark.json-formatter-row > a > .json-formatter-preview-text {\\n opacity: 0;\\n transition: opacity 0.15s ease-in;\\n font-style: italic;\\n}\\n.json-formatter-dark.json-formatter-row:hover > a > .json-formatter-preview-text {\\n opacity: 0.6;\\n}\\n.json-formatter-dark.json-formatter-row.json-formatter-open > .json-formatter-toggler-link .json-formatter-toggler:after {\\n transform: rotate(90deg);\\n}\\n.json-formatter-dark.json-formatter-row.json-formatter-open > .json-formatter-children:after {\\n display: inline-block;\\n}\\n.json-formatter-dark.json-formatter-row.json-formatter-open > a > .json-formatter-preview-text {\\n display: none;\\n}\\n.json-formatter-dark.json-formatter-row.json-formatter-open.json-formatter-empty:after {\\n display: block;\\n}\\n\");\n },\n function(Bokeh) {\n inject_raw_css(\".codehilite .hll { background-color: #ffffcc }\\n.codehilite { background: #f8f8f8; }\\n.codehilite .c { color: #408080; font-style: italic } /* Comment */\\n.codehilite .err { border: 1px solid #FF0000 } /* Error */\\n.codehilite .k { color: #008000; font-weight: bold } /* Keyword */\\n.codehilite .o { color: #666666 } /* Operator */\\n.codehilite .ch { color: #408080; font-style: italic } /* Comment.Hashbang */\\n.codehilite .cm { color: #408080; font-style: italic } /* Comment.Multiline */\\n.codehilite .cp { color: #BC7A00 } /* Comment.Preproc */\\n.codehilite .cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */\\n.codehilite .c1 { color: #408080; font-style: italic } /* Comment.Single */\\n.codehilite .cs { color: #408080; font-style: italic } /* Comment.Special */\\n.codehilite .gd { color: #A00000 } /* Generic.Deleted */\\n.codehilite .ge { font-style: italic } /* Generic.Emph */\\n.codehilite .gr { color: #FF0000 } /* Generic.Error */\\n.codehilite .gh { color: #000080; font-weight: bold } /* Generic.Heading */\\n.codehilite .gi { color: #00A000 } /* Generic.Inserted */\\n.codehilite .go { color: #888888 } /* Generic.Output */\\n.codehilite .gp { color: #000080; font-weight: bold } /* Generic.Prompt */\\n.codehilite .gs { font-weight: bold } /* Generic.Strong */\\n.codehilite .gu { color: #800080; font-weight: bold } /* Generic.Subheading */\\n.codehilite .gt { color: #0044DD } /* Generic.Traceback */\\n.codehilite .kc { color: #008000; font-weight: bold } /* Keyword.Constant */\\n.codehilite .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */\\n.codehilite .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */\\n.codehilite .kp { color: #008000 } /* Keyword.Pseudo */\\n.codehilite .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */\\n.codehilite .kt { color: #B00040 } /* Keyword.Type */\\n.codehilite .m { color: #666666 } /* Literal.Number */\\n.codehilite .s { color: #BA2121 } /* Literal.String */\\n.codehilite .na { color: #7D9029 } /* Name.Attribute */\\n.codehilite .nb { color: #008000 } /* Name.Builtin */\\n.codehilite .nc { color: #0000FF; font-weight: bold } /* Name.Class */\\n.codehilite .no { color: #880000 } /* Name.Constant */\\n.codehilite .nd { color: #AA22FF } /* Name.Decorator */\\n.codehilite .ni { color: #999999; font-weight: bold } /* Name.Entity */\\n.codehilite .ne { color: #D2413A; font-weight: bold } /* Name.Exception */\\n.codehilite .nf { color: #0000FF } /* Name.Function */\\n.codehilite .nl { color: #A0A000 } /* Name.Label */\\n.codehilite .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */\\n.codehilite .nt { color: #008000; font-weight: bold } /* Name.Tag */\\n.codehilite .nv { color: #19177C } /* Name.Variable */\\n.codehilite .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */\\n.codehilite .w { color: #bbbbbb } /* Text.Whitespace */\\n.codehilite .mb { color: #666666 } /* Literal.Number.Bin */\\n.codehilite .mf { color: #666666 } /* Literal.Number.Float */\\n.codehilite .mh { color: #666666 } /* Literal.Number.Hex */\\n.codehilite .mi { color: #666666 } /* Literal.Number.Integer */\\n.codehilite .mo { color: #666666 } /* Literal.Number.Oct */\\n.codehilite .sa { color: #BA2121 } /* Literal.String.Affix */\\n.codehilite .sb { color: #BA2121 } /* Literal.String.Backtick */\\n.codehilite .sc { color: #BA2121 } /* Literal.String.Char */\\n.codehilite .dl { color: #BA2121 } /* Literal.String.Delimiter */\\n.codehilite .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */\\n.codehilite .s2 { color: #BA2121 } /* Literal.String.Double */\\n.codehilite .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */\\n.codehilite .sh { color: #BA2121 } /* Literal.String.Heredoc */\\n.codehilite .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */\\n.codehilite .sx { color: #008000 } /* Literal.String.Other */\\n.codehilite .sr { color: #BB6688 } /* Literal.String.Regex */\\n.codehilite .s1 { color: #BA2121 } /* Literal.String.Single */\\n.codehilite .ss { color: #19177C } /* Literal.String.Symbol */\\n.codehilite .bp { color: #008000 } /* Name.Builtin.Pseudo */\\n.codehilite .fm { color: #0000FF } /* Name.Function.Magic */\\n.codehilite .vc { color: #19177C } /* Name.Variable.Class */\\n.codehilite .vg { color: #19177C } /* Name.Variable.Global */\\n.codehilite .vi { color: #19177C } /* Name.Variable.Instance */\\n.codehilite .vm { color: #19177C } /* Name.Variable.Magic */\\n.codehilite .il { color: #666666 } /* Literal.Number.Integer.Long */\\n\\n.markdown h1 { margin-block-start: 0.34em }\\n.markdown h2 { margin-block-start: 0.42em }\\n.markdown h3 { margin-block-start: 0.5em }\\n.markdown h4 { margin-block-start: 0.67em }\\n.markdown h5 { margin-block-start: 0.84em }\\n.markdown h6 { margin-block-start: 1.17em }\\n.markdown ul { padding-inline-start: 2em }\\n.markdown ol { padding-inline-start: 2em }\\n.markdown strong { font-weight: 600 }\\n.markdown a { color: -webkit-link }\\n.markdown a { color: -moz-hyperlinkText }\\n\");\n },\n function(Bokeh) {\n inject_raw_css(\"table.panel-df {\\n margin-left: auto;\\n margin-right: auto;\\n border: none;\\n border-collapse: collapse;\\n border-spacing: 0;\\n color: black;\\n font-size: 12px;\\n table-layout: fixed;\\n width: 100%;\\n}\\n\\n.panel-df tr, th, td {\\n text-align: right;\\n vertical-align: middle;\\n padding: 0.5em 0.5em !important;\\n line-height: normal;\\n white-space: normal;\\n max-width: none;\\n border: none;\\n}\\n\\n.panel-df tbody {\\n display: table-row-group;\\n vertical-align: middle;\\n border-color: inherit;\\n}\\n\\n.panel-df tbody tr:nth-child(odd) {\\n background: #f5f5f5;\\n}\\n\\n.panel-df thead {\\n border-bottom: 1px solid black;\\n vertical-align: bottom;\\n}\\n\\n.panel-df tr:hover {\\n background: lightblue !important;\\n cursor: pointer;\\n}\\n\");\n },\n function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\n \n function(Bokeh) {\n /* BEGIN panel.min.js */\n /*!\n * Copyright (c) 2012 - 2019, Anaconda, Inc., and Bokeh Contributors\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * \n * Redistributions of source code must retain the above copyright notice,\n * this list of conditions and the following disclaimer.\n * \n * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n * \n * Neither the name of Anaconda nor the names of any contributors\n * may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF\n * THE POSSIBILITY OF SUCH DAMAGE.\n */\n (function(root, factory) {\n factory(root[\"Bokeh\"]);\n })(this, function(Bokeh) {\n var define;\n return (function(modules, entry, aliases, externals) {\n if (Bokeh != null) {\n return Bokeh.register_plugin(modules, entry, aliases, externals);\n } else {\n throw new Error(\"Cannot find Bokeh. You have to load it prior to loading plugins.\");\n }\n })\n ({\n \"aa4f566620\": function _(r,e,t){var n=(this&&this.__importStar||function(r){if(r&&r.__esModule)return r;var e={};if(null!=r)for(var t in r)Object.hasOwnProperty.call(r,t)&&(e[t]=r[t]);return e.default=r,e})(r(\"4d02676c49\"));t.Panel=n,r(\"@bokehjs/base\").register_models(n)},\n \"4d02676c49\": function _(a,e,r){var o=a(\"ff4b91e885\");r.AcePlot=o.AcePlot;var t=a(\"12e90a1b7e\");r.Audio=t.Audio;var c=a(\"cf3b018c7a\");r.DeckGLPlot=c.DeckGLPlot;var d=a(\"70a2bb70ef\");r.HTML=d.HTML;var v=a(\"dac8d750fa\");r.JSON=v.JSON;var P=a(\"c81021c8fd\");r.KaTeX=P.KaTeX;var b=a(\"a93ded647d\");r.MathJax=b.MathJax;var l=a(\"98100899bc\");r.Player=l.Player;var f=a(\"d46f026c83\");r.PlotlyPlot=f.PlotlyPlot;var i=a(\"d9b3a262de\");r.Progress=i.Progress;var n=a(\"4b4afba86a\");r.State=n.State;var S=a(\"14b669e6fc\");r.VegaPlot=S.VegaPlot;var V=a(\"71a2bbec38\");r.Video=V.Video;var s=a(\"76bc93d621\");r.VideoStream=s.VideoStream,function(a){for(var e in a)r.hasOwnProperty(e)||(r[e]=a[e])}(a(\"63070bc9ce\"))},\n \"ff4b91e885\": function _(t,e,o){var i,n=this&&this.__extends||(i=function(t,e){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var o in e)e.hasOwnProperty(o)&&(t[o]=e[o])})(t,e)},function(t,e){function o(){this.constructor=t}i(t,e),t.prototype=null===e?Object.create(e):(o.prototype=e.prototype,new o)}),r=(this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var o in t)Object.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e.default=t,e})(t(\"@bokehjs/core/properties\")),s=t(\"@bokehjs/models/layouts/html_box\"),a=t(\"@bokehjs/core/dom\");var c=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.initialize=function(){t.prototype.initialize.call(this),this._ace=window.ace,this._container=a.div({id:\"_\"+Math.random().toString(36).substr(2,9),style:{width:\"100%\",height:\"100%\"}})},e.prototype.connect_signals=function(){var e=this;t.prototype.connect_signals.call(this),this.connect(this.model.properties.code.change,function(){return e._update_code_from_model()}),this.connect(this.model.properties.theme.change,function(){return e._update_theme()}),this.connect(this.model.properties.language.change,function(){return e._update_language()}),this.connect(this.model.properties.annotations.change,function(){return e._add_annotations()}),this.connect(this.model.properties.readonly.change,function(){e._editor.setReadOnly(e.model.readonly)})},e.prototype.render=function(){var e=this;t.prototype.render.call(this),this._container!==this.el.childNodes[0]&&this.el.appendChild(this._container),this._container.textContent=this.model.code,this._editor=this._ace.edit(this._container.id),this._editor.setTheme(\"ace/theme/\"+this.model.theme),this._editor.session.setMode(\"ace/mode/\"+this.model.language),this._editor.setReadOnly(this.model.readonly),this._langTools=this._ace.require(\"ace/ext/language_tools\"),this._editor.setOptions({enableBasicAutocompletion:!0,enableSnippets:!0,fontFamily:\"monospace\"}),this._editor.on(\"change\",function(){return e._update_code_from_editor()})},e.prototype._update_code_from_model=function(){this._editor&&this._editor.getValue()!=this.model.code&&this._editor.setValue(this.model.code)},e.prototype._update_code_from_editor=function(){this._editor.getValue()!=this.model.code&&(this.model.code=this._editor.getValue())},e.prototype._update_theme=function(){this._editor.setTheme(\"ace/theme/\"+this.model.theme)},e.prototype._update_language=function(){this._editor.session.setMode(\"ace/mode/\"+this.model.language)},e.prototype._add_annotations=function(){this._editor.session.setAnnotations(this.model.annotations)},e.prototype.after_layout=function(){t.prototype.after_layout.call(this),this._editor.resize()},e.__name__=\"AcePlotView\",e}(t(\"ec60963462\").PanelHTMLBoxView);o.AcePlotView=c;var h=function(t){function e(e){return t.call(this,e)||this}return n(e,t),e.init_AcePlot=function(){this.prototype.default_view=c,this.define({code:[r.String],language:[r.String,\"python\"],theme:[r.String,\"chrome\"],annotations:[r.Array,[]],readonly:[r.Boolean,!1]}),this.override({height:300,width:300})},e.__name__=\"AcePlot\",e.__module__=\"panel.models.ace\",e}(s.HTMLBox);o.AcePlot=h,h.init_AcePlot()},\n \"ec60963462\": function _(e,t,i){var o,n=this&&this.__extends||(o=function(e,t){return(o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var i in t)t.hasOwnProperty(i)&&(e[i]=t[i])})(e,t)},function(e,t){function i(){this.constructor=e}o(e,t),e.prototype=null===t?Object.create(t):(i.prototype=t.prototype,new i)}),s=e(\"@bokehjs/core/layout/layoutable\"),h=e(\"@bokehjs/core/layout/types\"),r=e(\"@bokehjs/core/dom\"),a=e(\"@bokehjs/models/widgets/markup\"),_=e(\"@bokehjs/models/layouts/html_box\");function c(e,t){var i=null!=t.width?\"fixed\":\"fit\",o=null!=t.height?\"fixed\":\"fit\",n=t.sizing_mode;if(null!=n)if(\"fixed\"==n)i=o=\"fixed\";else if(\"stretch_both\"==n)i=o=\"max\";else if(\"stretch_width\"==n)i=\"max\";else if(\"stretch_height\"==n)o=\"max\";else switch(n){case\"scale_width\":i=\"max\",o=\"min\";break;case\"scale_height\":i=\"min\",o=\"max\";break;case\"scale_both\":i=\"max\",o=\"max\";break;default:throw new Error(\"unreachable\")}\"fixed\"==i&&t.width?e.style.width=t.width+\"px\":\"max\"==i&&(e.style.width=\"100%\"),\"fixed\"==o&&t.height?e.style.height=t.height+\"px\":\"max\"==o&&(e.style.height=\"100%\")}i.set_size=c;var l=function(e){function t(t,i,o){var n=e.call(this)||this;return n.el=t,n.sizing_mode=i,n.changed=o,n._cache={},n._cache_count={},n}return n(t,e),t.prototype._measure=function(e){var t=this,i=[e.width,e.height,this.sizing_mode].toString(),o=this.changed&&\"fixed\"!=this.sizing_mode&&null!=this.sizing_mode?1:0;if(i in this._cache&&this._cache_count[i]>=o)return this._cache_count[i]=this._cache_count[i]+1,this._cache[i];var n=new h.Sizeable(e).bounded_to(this.sizing.size),s=r.sized(this.el,n,function(){var e=new h.Sizeable(r.content_size(t.el)),i=r.extents(t.el),o=i.border,n=i.padding;return e.grow_by(o).grow_by(n).map(Math.ceil)});return this._cache[i]=s,this._cache_count[i]=0,s},t.__name__=\"CachedVariadicBox\",t}(s.Layoutable);i.CachedVariadicBox=l;var d=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n(t,e),t.prototype._update_layout=function(){var e=void 0!==this._prev_sizing_mode&&this._prev_sizing_mode!==this.model.sizing_mode;this._prev_sizing_mode=this.model.sizing_mode,this.layout=new l(this.el,this.model.sizing_mode,e),this.layout.set_sizing(this.box_sizing())},t.prototype.render=function(){e.prototype.render.call(this),c(this.markup_el,this.model)},t.__name__=\"PanelMarkupView\",t}(a.MarkupView);i.PanelMarkupView=d;var u=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n(t,e),t.prototype._update_layout=function(){var e=void 0!==this._prev_sizing_mode&&this._prev_sizing_mode!==this.model.sizing_mode;this._prev_sizing_mode=this.model.sizing_mode,this.layout=new l(this.el,this.model.sizing_mode,e),this.layout.set_sizing(this.box_sizing())},t.prototype.render=function(){e.prototype.render.call(this),c(this.el,this.model)},t.__name__=\"PanelHTMLBoxView\",t}(_.HTMLBoxView);i.PanelHTMLBoxView=u},\n \"12e90a1b7e\": function _(t,e,o){var i,n=this&&this.__extends||(i=function(t,e){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var o in e)e.hasOwnProperty(o)&&(t[o]=e[o])})(t,e)},function(t,e){function o(){this.constructor=t}i(t,e),t.prototype=null===e?Object.create(e):(o.prototype=e.prototype,new o)}),u=(this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var o in t)Object.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e.default=t,e})(t(\"@bokehjs/core/properties\")),l=t(\"@bokehjs/models/layouts/html_box\"),s=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.initialize=function(){t.prototype.initialize.call(this),this._blocked=!1,this._setting=!1,this._time=Date.now()},e.prototype.connect_signals=function(){var e=this;t.prototype.connect_signals.call(this),this.connect(this.model.properties.loop.change,function(){return e.set_loop()}),this.connect(this.model.properties.paused.change,function(){return e.set_paused()}),this.connect(this.model.properties.time.change,function(){return e.set_time()}),this.connect(this.model.properties.value.change,function(){return e.set_value()}),this.connect(this.model.properties.volume.change,function(){return e.set_volume()})},e.prototype.render=function(){var e=this;t.prototype.render.call(this),this.audioEl=document.createElement(\"audio\"),this.audioEl.controls=!0,this.audioEl.src=this.model.value,this.audioEl.currentTime=this.model.time,this.audioEl.loop=this.model.loop,null!=this.model.volume?this.audioEl.volume=this.model.volume/100:this.model.volume=100*this.audioEl.volume,this.audioEl.onpause=function(){return e.model.paused=!0},this.audioEl.onplay=function(){return e.model.paused=!1},this.audioEl.ontimeupdate=function(){return e.update_time(e)},this.audioEl.onvolumechange=function(){return e.update_volume(e)},this.el.appendChild(this.audioEl),this.model.paused||this.audioEl.play()},e.prototype.update_time=function(t){t._setting?t._setting=!1:Date.now()-t._time1&&\"number\"==typeof h[0]?l[u]=r.data[u].slice(c*h[1],c*h[1]+h[1]):l[u]=r.data[u][c]}a.push(l)}i.data=a}t&&this.updateDeck()},e.prototype._on_click_event=function(t){var e={coordinate:t.coordinate,lngLat:t.lngLat,index:t.index};this.model.clickState=e},e.prototype._on_hover_event=function(t){var e={coordinate:t.coordinate,lngLat:t.lngLat,index:t.index};this.model.hoverState=e},e.prototype._on_viewState_event=function(t){this.model.viewState=t.viewState},e.prototype.getData=function(){var t=this;return r(r({},this.model.data),{layers:this.model.layers,initialViewState:this.model.initialViewState,onViewStateChange:function(e){return t._on_viewState_event(e)},onClick:function(e){return t._on_click_event(e)},onHover:function(e){return t._on_hover_event(e)}})},e.prototype.updateDeck=function(){if(this.deckGL){var t=this.getData();if(d.updateDeck)d.updateDeck(t,this.deckGL);else{var e=this.jsonConverter.convert(t);this.deckGL.setProps(e)}}else this.render()},e.prototype.createDeck=function(t){var e,o=t.mapboxApiKey,n=t.container,i=t.jsonInput,a=t.tooltip;try{var s=this.jsonConverter.convert(i),c=u.makeTooltip(a);e=new d.DeckGL(r(r({},s),{map:f,mapboxApiAccessToken:o,container:n,getTooltip:c}))}catch(t){console.error(t)}return e},e.prototype.render=function(){t.prototype.render.call(this);var e=c.div({class:\"deckgl\"});_.set_size(e,this.model);var o=this.model.mapbox_api_key,n=this.model.tooltip,i=this.getData();d.createDeck?this.deckGL=d.createDeck({mapboxApiKey:o,container:e,jsonInput:i,tooltip:n}):this.deckGL=this.createDeck({mapboxApiKey:o,container:e,jsonInput:i,tooltip:n}),this.el.appendChild(e)},e.__name__=\"DeckGLPlotView\",e}(_.PanelHTMLBoxView);o.DeckGLPlotView=m;var k=function(t){function e(e){return t.call(this,e)||this}return i(e,t),e.init_DeckGLPlot=function(){this.prototype.default_view=m,this.define({data:[l.Any],data_sources:[l.Array,[]],clickState:[l.Any],hoverState:[l.Any],initialViewState:[l.Any],layers:[l.Array,[]],mapbox_api_key:[l.String],tooltip:[l.Any],viewState:[l.Any]}),this.override({height:400,width:600})},e.__name__=\"DeckGLPlot\",e.__module__=\"panel.models.deckgl\",e}(p.HTMLBox);o.DeckGLPlot=k,k.init_DeckGLPlot()},\n \"27d3545a25\": function _(e,t,n){var i,r,l={fontFamily:'\"Helvetica Neue\", Helvetica, Arial, sans-serif',display:\"flex\",flex:\"wrap\",maxWidth:\"500px\",flexDirection:\"column\",zIndex:2};function a(){return document.createElement(\"div\")}function o(e){if(!e.picked)return null;if(e.object===i)return r;var t={html:c(e.object),style:l};return r=t,i=e.object,t}n.getTooltipDefault=o;var s=new Set([\"position\",\"index\"]);function c(e){var t=a();for(var n in e)if(!s.has(n)){var i=a();i.className=\"header\",i.textContent=n;var r=a();r.className=\"value\",r.textContent=u(e[n]);var l=a();f(l,i,r),l.appendChild(i),l.appendChild(r),t.appendChild(l)}return t.innerHTML}function f(e,t,n){Object.assign(t.style,{fontWeight:700,marginRight:\"10px\",flex:\"1 1 0%\"}),Object.assign(n.style,{flex:\"none\",maxWidth:\"250px\",overflow:\"hidden\",whiteSpace:\"nowrap\",textOverflow:\"ellipsis\"}),Object.assign(e.style,{display:\"flex\",flexDirection:\"row\",justifyContent:\"space-between\",alignItems:\"stretch\"})}function u(e){var t;if(Array.isArray(e)&&e.length>4)t=\"Array<\"+e.length+\">\";else if(\"string\"==typeof e)t=e;else if(\"number\"==typeof e)t=String(e);else try{t=JSON.stringify(e)}catch(e){t=\"\"}return t.length>50&&(t=t.slice(0,50)),t}function p(e,t){var n=e;for(var i in t)n=n.replace(\"{\"+i+\"}\",t[i]);return n}n.tabularize=c,n.toText=u,n.substituteIn=p,n.makeTooltip=function(e){return e?e.html||e.text?function(t){if(!t.picked)return null;var n={style:e.style||l};return e.html?n.html=p(e.html,t.object):n.text=p(e.text,t.object),n}:o:null}},\n \"093eb75864\": function _(E,_,R){_.exports={DEPTH_BUFFER_BIT:256,STENCIL_BUFFER_BIT:1024,COLOR_BUFFER_BIT:16384,POINTS:0,LINES:1,LINE_LOOP:2,LINE_STRIP:3,TRIANGLES:4,TRIANGLE_STRIP:5,TRIANGLE_FAN:6,ZERO:0,ONE:1,SRC_COLOR:768,ONE_MINUS_SRC_COLOR:769,SRC_ALPHA:770,ONE_MINUS_SRC_ALPHA:771,DST_ALPHA:772,ONE_MINUS_DST_ALPHA:773,DST_COLOR:774,ONE_MINUS_DST_COLOR:775,SRC_ALPHA_SATURATE:776,CONSTANT_COLOR:32769,ONE_MINUS_CONSTANT_COLOR:32770,CONSTANT_ALPHA:32771,ONE_MINUS_CONSTANT_ALPHA:32772,FUNC_ADD:32774,FUNC_SUBTRACT:32778,FUNC_REVERSE_SUBTRACT:32779,BLEND_EQUATION:32777,BLEND_EQUATION_RGB:32777,BLEND_EQUATION_ALPHA:34877,BLEND_DST_RGB:32968,BLEND_SRC_RGB:32969,BLEND_DST_ALPHA:32970,BLEND_SRC_ALPHA:32971,BLEND_COLOR:32773,ARRAY_BUFFER_BINDING:34964,ELEMENT_ARRAY_BUFFER_BINDING:34965,LINE_WIDTH:2849,ALIASED_POINT_SIZE_RANGE:33901,ALIASED_LINE_WIDTH_RANGE:33902,CULL_FACE_MODE:2885,FRONT_FACE:2886,DEPTH_RANGE:2928,DEPTH_WRITEMASK:2930,DEPTH_CLEAR_VALUE:2931,DEPTH_FUNC:2932,STENCIL_CLEAR_VALUE:2961,STENCIL_FUNC:2962,STENCIL_FAIL:2964,STENCIL_PASS_DEPTH_FAIL:2965,STENCIL_PASS_DEPTH_PASS:2966,STENCIL_REF:2967,STENCIL_VALUE_MASK:2963,STENCIL_WRITEMASK:2968,STENCIL_BACK_FUNC:34816,STENCIL_BACK_FAIL:34817,STENCIL_BACK_PASS_DEPTH_FAIL:34818,STENCIL_BACK_PASS_DEPTH_PASS:34819,STENCIL_BACK_REF:36003,STENCIL_BACK_VALUE_MASK:36004,STENCIL_BACK_WRITEMASK:36005,VIEWPORT:2978,SCISSOR_BOX:3088,COLOR_CLEAR_VALUE:3106,COLOR_WRITEMASK:3107,UNPACK_ALIGNMENT:3317,PACK_ALIGNMENT:3333,MAX_TEXTURE_SIZE:3379,MAX_VIEWPORT_DIMS:3386,SUBPIXEL_BITS:3408,RED_BITS:3410,GREEN_BITS:3411,BLUE_BITS:3412,ALPHA_BITS:3413,DEPTH_BITS:3414,STENCIL_BITS:3415,POLYGON_OFFSET_UNITS:10752,POLYGON_OFFSET_FACTOR:32824,TEXTURE_BINDING_2D:32873,SAMPLE_BUFFERS:32936,SAMPLES:32937,SAMPLE_COVERAGE_VALUE:32938,SAMPLE_COVERAGE_INVERT:32939,COMPRESSED_TEXTURE_FORMATS:34467,VENDOR:7936,RENDERER:7937,VERSION:7938,IMPLEMENTATION_COLOR_READ_TYPE:35738,IMPLEMENTATION_COLOR_READ_FORMAT:35739,BROWSER_DEFAULT_WEBGL:37444,STATIC_DRAW:35044,STREAM_DRAW:35040,DYNAMIC_DRAW:35048,ARRAY_BUFFER:34962,ELEMENT_ARRAY_BUFFER:34963,BUFFER_SIZE:34660,BUFFER_USAGE:34661,CURRENT_VERTEX_ATTRIB:34342,VERTEX_ATTRIB_ARRAY_ENABLED:34338,VERTEX_ATTRIB_ARRAY_SIZE:34339,VERTEX_ATTRIB_ARRAY_STRIDE:34340,VERTEX_ATTRIB_ARRAY_TYPE:34341,VERTEX_ATTRIB_ARRAY_NORMALIZED:34922,VERTEX_ATTRIB_ARRAY_POINTER:34373,VERTEX_ATTRIB_ARRAY_BUFFER_BINDING:34975,CULL_FACE:2884,FRONT:1028,BACK:1029,FRONT_AND_BACK:1032,BLEND:3042,DEPTH_TEST:2929,DITHER:3024,POLYGON_OFFSET_FILL:32823,SAMPLE_ALPHA_TO_COVERAGE:32926,SAMPLE_COVERAGE:32928,SCISSOR_TEST:3089,STENCIL_TEST:2960,NO_ERROR:0,INVALID_ENUM:1280,INVALID_VALUE:1281,INVALID_OPERATION:1282,OUT_OF_MEMORY:1285,CONTEXT_LOST_WEBGL:37442,CW:2304,CCW:2305,DONT_CARE:4352,FASTEST:4353,NICEST:4354,GENERATE_MIPMAP_HINT:33170,BYTE:5120,UNSIGNED_BYTE:5121,SHORT:5122,UNSIGNED_SHORT:5123,INT:5124,UNSIGNED_INT:5125,FLOAT:5126,DOUBLE:5130,DEPTH_COMPONENT:6402,ALPHA:6406,RGB:6407,RGBA:6408,LUMINANCE:6409,LUMINANCE_ALPHA:6410,UNSIGNED_SHORT_4_4_4_4:32819,UNSIGNED_SHORT_5_5_5_1:32820,UNSIGNED_SHORT_5_6_5:33635,FRAGMENT_SHADER:35632,VERTEX_SHADER:35633,COMPILE_STATUS:35713,DELETE_STATUS:35712,LINK_STATUS:35714,VALIDATE_STATUS:35715,ATTACHED_SHADERS:35717,ACTIVE_ATTRIBUTES:35721,ACTIVE_UNIFORMS:35718,MAX_VERTEX_ATTRIBS:34921,MAX_VERTEX_UNIFORM_VECTORS:36347,MAX_VARYING_VECTORS:36348,MAX_COMBINED_TEXTURE_IMAGE_UNITS:35661,MAX_VERTEX_TEXTURE_IMAGE_UNITS:35660,MAX_TEXTURE_IMAGE_UNITS:34930,MAX_FRAGMENT_UNIFORM_VECTORS:36349,SHADER_TYPE:35663,SHADING_LANGUAGE_VERSION:35724,CURRENT_PROGRAM:35725,NEVER:512,ALWAYS:519,LESS:513,EQUAL:514,LEQUAL:515,GREATER:516,GEQUAL:518,NOTEQUAL:517,KEEP:7680,REPLACE:7681,INCR:7682,DECR:7683,INVERT:5386,INCR_WRAP:34055,DECR_WRAP:34056,NEAREST:9728,LINEAR:9729,NEAREST_MIPMAP_NEAREST:9984,LINEAR_MIPMAP_NEAREST:9985,NEAREST_MIPMAP_LINEAR:9986,LINEAR_MIPMAP_LINEAR:9987,TEXTURE_MAG_FILTER:10240,TEXTURE_MIN_FILTER:10241,TEXTURE_WRAP_S:10242,TEXTURE_WRAP_T:10243,TEXTURE_2D:3553,TEXTURE:5890,TEXTURE_CUBE_MAP:34067,TEXTURE_BINDING_CUBE_MAP:34068,TEXTURE_CUBE_MAP_POSITIVE_X:34069,TEXTURE_CUBE_MAP_NEGATIVE_X:34070,TEXTURE_CUBE_MAP_POSITIVE_Y:34071,TEXTURE_CUBE_MAP_NEGATIVE_Y:34072,TEXTURE_CUBE_MAP_POSITIVE_Z:34073,TEXTURE_CUBE_MAP_NEGATIVE_Z:34074,MAX_CUBE_MAP_TEXTURE_SIZE:34076,TEXTURE0:33984,ACTIVE_TEXTURE:34016,REPEAT:10497,CLAMP_TO_EDGE:33071,MIRRORED_REPEAT:33648,TEXTURE_WIDTH:4096,TEXTURE_HEIGHT:4097,FLOAT_VEC2:35664,FLOAT_VEC3:35665,FLOAT_VEC4:35666,INT_VEC2:35667,INT_VEC3:35668,INT_VEC4:35669,BOOL:35670,BOOL_VEC2:35671,BOOL_VEC3:35672,BOOL_VEC4:35673,FLOAT_MAT2:35674,FLOAT_MAT3:35675,FLOAT_MAT4:35676,SAMPLER_2D:35678,SAMPLER_CUBE:35680,LOW_FLOAT:36336,MEDIUM_FLOAT:36337,HIGH_FLOAT:36338,LOW_INT:36339,MEDIUM_INT:36340,HIGH_INT:36341,FRAMEBUFFER:36160,RENDERBUFFER:36161,RGBA4:32854,RGB5_A1:32855,RGB565:36194,DEPTH_COMPONENT16:33189,STENCIL_INDEX:6401,STENCIL_INDEX8:36168,DEPTH_STENCIL:34041,RENDERBUFFER_WIDTH:36162,RENDERBUFFER_HEIGHT:36163,RENDERBUFFER_INTERNAL_FORMAT:36164,RENDERBUFFER_RED_SIZE:36176,RENDERBUFFER_GREEN_SIZE:36177,RENDERBUFFER_BLUE_SIZE:36178,RENDERBUFFER_ALPHA_SIZE:36179,RENDERBUFFER_DEPTH_SIZE:36180,RENDERBUFFER_STENCIL_SIZE:36181,FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE:36048,FRAMEBUFFER_ATTACHMENT_OBJECT_NAME:36049,FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL:36050,FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE:36051,COLOR_ATTACHMENT0:36064,DEPTH_ATTACHMENT:36096,STENCIL_ATTACHMENT:36128,DEPTH_STENCIL_ATTACHMENT:33306,NONE:0,FRAMEBUFFER_COMPLETE:36053,FRAMEBUFFER_INCOMPLETE_ATTACHMENT:36054,FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:36055,FRAMEBUFFER_INCOMPLETE_DIMENSIONS:36057,FRAMEBUFFER_UNSUPPORTED:36061,FRAMEBUFFER_BINDING:36006,RENDERBUFFER_BINDING:36007,READ_FRAMEBUFFER:36008,DRAW_FRAMEBUFFER:36009,MAX_RENDERBUFFER_SIZE:34024,INVALID_FRAMEBUFFER_OPERATION:1286,UNPACK_FLIP_Y_WEBGL:37440,UNPACK_PREMULTIPLY_ALPHA_WEBGL:37441,UNPACK_COLORSPACE_CONVERSION_WEBGL:37443,READ_BUFFER:3074,UNPACK_ROW_LENGTH:3314,UNPACK_SKIP_ROWS:3315,UNPACK_SKIP_PIXELS:3316,PACK_ROW_LENGTH:3330,PACK_SKIP_ROWS:3331,PACK_SKIP_PIXELS:3332,TEXTURE_BINDING_3D:32874,UNPACK_SKIP_IMAGES:32877,UNPACK_IMAGE_HEIGHT:32878,MAX_3D_TEXTURE_SIZE:32883,MAX_ELEMENTS_VERTICES:33e3,MAX_ELEMENTS_INDICES:33001,MAX_TEXTURE_LOD_BIAS:34045,MAX_FRAGMENT_UNIFORM_COMPONENTS:35657,MAX_VERTEX_UNIFORM_COMPONENTS:35658,MAX_ARRAY_TEXTURE_LAYERS:35071,MIN_PROGRAM_TEXEL_OFFSET:35076,MAX_PROGRAM_TEXEL_OFFSET:35077,MAX_VARYING_COMPONENTS:35659,FRAGMENT_SHADER_DERIVATIVE_HINT:35723,RASTERIZER_DISCARD:35977,VERTEX_ARRAY_BINDING:34229,MAX_VERTEX_OUTPUT_COMPONENTS:37154,MAX_FRAGMENT_INPUT_COMPONENTS:37157,MAX_SERVER_WAIT_TIMEOUT:37137,MAX_ELEMENT_INDEX:36203,RED:6403,RGB8:32849,RGBA8:32856,RGB10_A2:32857,TEXTURE_3D:32879,TEXTURE_WRAP_R:32882,TEXTURE_MIN_LOD:33082,TEXTURE_MAX_LOD:33083,TEXTURE_BASE_LEVEL:33084,TEXTURE_MAX_LEVEL:33085,TEXTURE_COMPARE_MODE:34892,TEXTURE_COMPARE_FUNC:34893,SRGB:35904,SRGB8:35905,SRGB8_ALPHA8:35907,COMPARE_REF_TO_TEXTURE:34894,RGBA32F:34836,RGB32F:34837,RGBA16F:34842,RGB16F:34843,TEXTURE_2D_ARRAY:35866,TEXTURE_BINDING_2D_ARRAY:35869,R11F_G11F_B10F:35898,RGB9_E5:35901,RGBA32UI:36208,RGB32UI:36209,RGBA16UI:36214,RGB16UI:36215,RGBA8UI:36220,RGB8UI:36221,RGBA32I:36226,RGB32I:36227,RGBA16I:36232,RGB16I:36233,RGBA8I:36238,RGB8I:36239,RED_INTEGER:36244,RGB_INTEGER:36248,RGBA_INTEGER:36249,R8:33321,RG8:33323,R16F:33325,R32F:33326,RG16F:33327,RG32F:33328,R8I:33329,R8UI:33330,R16I:33331,R16UI:33332,R32I:33333,R32UI:33334,RG8I:33335,RG8UI:33336,RG16I:33337,RG16UI:33338,RG32I:33339,RG32UI:33340,R8_SNORM:36756,RG8_SNORM:36757,RGB8_SNORM:36758,RGBA8_SNORM:36759,RGB10_A2UI:36975,TEXTURE_IMMUTABLE_FORMAT:37167,TEXTURE_IMMUTABLE_LEVELS:33503,UNSIGNED_INT_2_10_10_10_REV:33640,UNSIGNED_INT_10F_11F_11F_REV:35899,UNSIGNED_INT_5_9_9_9_REV:35902,FLOAT_32_UNSIGNED_INT_24_8_REV:36269,UNSIGNED_INT_24_8:34042,HALF_FLOAT:5131,RG:33319,RG_INTEGER:33320,INT_2_10_10_10_REV:36255,CURRENT_QUERY:34917,QUERY_RESULT:34918,QUERY_RESULT_AVAILABLE:34919,ANY_SAMPLES_PASSED:35887,ANY_SAMPLES_PASSED_CONSERVATIVE:36202,MAX_DRAW_BUFFERS:34852,DRAW_BUFFER0:34853,DRAW_BUFFER1:34854,DRAW_BUFFER2:34855,DRAW_BUFFER3:34856,DRAW_BUFFER4:34857,DRAW_BUFFER5:34858,DRAW_BUFFER6:34859,DRAW_BUFFER7:34860,DRAW_BUFFER8:34861,DRAW_BUFFER9:34862,DRAW_BUFFER10:34863,DRAW_BUFFER11:34864,DRAW_BUFFER12:34865,DRAW_BUFFER13:34866,DRAW_BUFFER14:34867,DRAW_BUFFER15:34868,MAX_COLOR_ATTACHMENTS:36063,COLOR_ATTACHMENT1:36065,COLOR_ATTACHMENT2:36066,COLOR_ATTACHMENT3:36067,COLOR_ATTACHMENT4:36068,COLOR_ATTACHMENT5:36069,COLOR_ATTACHMENT6:36070,COLOR_ATTACHMENT7:36071,COLOR_ATTACHMENT8:36072,COLOR_ATTACHMENT9:36073,COLOR_ATTACHMENT10:36074,COLOR_ATTACHMENT11:36075,COLOR_ATTACHMENT12:36076,COLOR_ATTACHMENT13:36077,COLOR_ATTACHMENT14:36078,COLOR_ATTACHMENT15:36079,SAMPLER_3D:35679,SAMPLER_2D_SHADOW:35682,SAMPLER_2D_ARRAY:36289,SAMPLER_2D_ARRAY_SHADOW:36292,SAMPLER_CUBE_SHADOW:36293,INT_SAMPLER_2D:36298,INT_SAMPLER_3D:36299,INT_SAMPLER_CUBE:36300,INT_SAMPLER_2D_ARRAY:36303,UNSIGNED_INT_SAMPLER_2D:36306,UNSIGNED_INT_SAMPLER_3D:36307,UNSIGNED_INT_SAMPLER_CUBE:36308,UNSIGNED_INT_SAMPLER_2D_ARRAY:36311,MAX_SAMPLES:36183,SAMPLER_BINDING:35097,PIXEL_PACK_BUFFER:35051,PIXEL_UNPACK_BUFFER:35052,PIXEL_PACK_BUFFER_BINDING:35053,PIXEL_UNPACK_BUFFER_BINDING:35055,COPY_READ_BUFFER:36662,COPY_WRITE_BUFFER:36663,COPY_READ_BUFFER_BINDING:36662,COPY_WRITE_BUFFER_BINDING:36663,FLOAT_MAT2x3:35685,FLOAT_MAT2x4:35686,FLOAT_MAT3x2:35687,FLOAT_MAT3x4:35688,FLOAT_MAT4x2:35689,FLOAT_MAT4x3:35690,UNSIGNED_INT_VEC2:36294,UNSIGNED_INT_VEC3:36295,UNSIGNED_INT_VEC4:36296,UNSIGNED_NORMALIZED:35863,SIGNED_NORMALIZED:36764,VERTEX_ATTRIB_ARRAY_INTEGER:35069,VERTEX_ATTRIB_ARRAY_DIVISOR:35070,TRANSFORM_FEEDBACK_BUFFER_MODE:35967,MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS:35968,TRANSFORM_FEEDBACK_VARYINGS:35971,TRANSFORM_FEEDBACK_BUFFER_START:35972,TRANSFORM_FEEDBACK_BUFFER_SIZE:35973,TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN:35976,MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS:35978,MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS:35979,INTERLEAVED_ATTRIBS:35980,SEPARATE_ATTRIBS:35981,TRANSFORM_FEEDBACK_BUFFER:35982,TRANSFORM_FEEDBACK_BUFFER_BINDING:35983,TRANSFORM_FEEDBACK:36386,TRANSFORM_FEEDBACK_PAUSED:36387,TRANSFORM_FEEDBACK_ACTIVE:36388,TRANSFORM_FEEDBACK_BINDING:36389,FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING:33296,FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE:33297,FRAMEBUFFER_ATTACHMENT_RED_SIZE:33298,FRAMEBUFFER_ATTACHMENT_GREEN_SIZE:33299,FRAMEBUFFER_ATTACHMENT_BLUE_SIZE:33300,FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE:33301,FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE:33302,FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE:33303,FRAMEBUFFER_DEFAULT:33304,DEPTH24_STENCIL8:35056,DRAW_FRAMEBUFFER_BINDING:36006,READ_FRAMEBUFFER_BINDING:36010,RENDERBUFFER_SAMPLES:36011,FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER:36052,FRAMEBUFFER_INCOMPLETE_MULTISAMPLE:36182,UNIFORM_BUFFER:35345,UNIFORM_BUFFER_BINDING:35368,UNIFORM_BUFFER_START:35369,UNIFORM_BUFFER_SIZE:35370,MAX_VERTEX_UNIFORM_BLOCKS:35371,MAX_FRAGMENT_UNIFORM_BLOCKS:35373,MAX_COMBINED_UNIFORM_BLOCKS:35374,MAX_UNIFORM_BUFFER_BINDINGS:35375,MAX_UNIFORM_BLOCK_SIZE:35376,MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS:35377,MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS:35379,UNIFORM_BUFFER_OFFSET_ALIGNMENT:35380,ACTIVE_UNIFORM_BLOCKS:35382,UNIFORM_TYPE:35383,UNIFORM_SIZE:35384,UNIFORM_BLOCK_INDEX:35386,UNIFORM_OFFSET:35387,UNIFORM_ARRAY_STRIDE:35388,UNIFORM_MATRIX_STRIDE:35389,UNIFORM_IS_ROW_MAJOR:35390,UNIFORM_BLOCK_BINDING:35391,UNIFORM_BLOCK_DATA_SIZE:35392,UNIFORM_BLOCK_ACTIVE_UNIFORMS:35394,UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES:35395,UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER:35396,UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER:35398,OBJECT_TYPE:37138,SYNC_CONDITION:37139,SYNC_STATUS:37140,SYNC_FLAGS:37141,SYNC_FENCE:37142,SYNC_GPU_COMMANDS_COMPLETE:37143,UNSIGNALED:37144,SIGNALED:37145,ALREADY_SIGNALED:37146,TIMEOUT_EXPIRED:37147,CONDITION_SATISFIED:37148,WAIT_FAILED:37149,SYNC_FLUSH_COMMANDS_BIT:1,COLOR:6144,DEPTH:6145,STENCIL:6146,MIN:32775,MAX:32776,DEPTH_COMPONENT24:33190,STREAM_READ:35041,STREAM_COPY:35042,STATIC_READ:35045,STATIC_COPY:35046,DYNAMIC_READ:35049,DYNAMIC_COPY:35050,DEPTH_COMPONENT32F:36012,DEPTH32F_STENCIL8:36013,INVALID_INDEX:4294967295,TIMEOUT_IGNORED:-1,MAX_CLIENT_WAIT_TIMEOUT_WEBGL:37447,VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE:35070,UNMASKED_VENDOR_WEBGL:37445,UNMASKED_RENDERER_WEBGL:37446,MAX_TEXTURE_MAX_ANISOTROPY_EXT:34047,TEXTURE_MAX_ANISOTROPY_EXT:34046,COMPRESSED_RGB_S3TC_DXT1_EXT:33776,COMPRESSED_RGBA_S3TC_DXT1_EXT:33777,COMPRESSED_RGBA_S3TC_DXT3_EXT:33778,COMPRESSED_RGBA_S3TC_DXT5_EXT:33779,COMPRESSED_R11_EAC:37488,COMPRESSED_SIGNED_R11_EAC:37489,COMPRESSED_RG11_EAC:37490,COMPRESSED_SIGNED_RG11_EAC:37491,COMPRESSED_RGB8_ETC2:37492,COMPRESSED_RGBA8_ETC2_EAC:37493,COMPRESSED_SRGB8_ETC2:37494,COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:37495,COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2:37496,COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2:37497,COMPRESSED_RGB_PVRTC_4BPPV1_IMG:35840,COMPRESSED_RGBA_PVRTC_4BPPV1_IMG:35842,COMPRESSED_RGB_PVRTC_2BPPV1_IMG:35841,COMPRESSED_RGBA_PVRTC_2BPPV1_IMG:35843,COMPRESSED_RGB_ETC1_WEBGL:36196,COMPRESSED_RGB_ATC_WEBGL:35986,COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL:35986,COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL:34798,UNSIGNED_INT_24_8_WEBGL:34042,HALF_FLOAT_OES:36193,RGBA32F_EXT:34836,RGB32F_EXT:34837,FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE_EXT:33297,UNSIGNED_NORMALIZED_EXT:35863,MIN_EXT:32775,MAX_EXT:32776,SRGB_EXT:35904,SRGB_ALPHA_EXT:35906,SRGB8_ALPHA8_EXT:35907,FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT:33296,FRAGMENT_SHADER_DERIVATIVE_HINT_OES:35723,COLOR_ATTACHMENT0_WEBGL:36064,COLOR_ATTACHMENT1_WEBGL:36065,COLOR_ATTACHMENT2_WEBGL:36066,COLOR_ATTACHMENT3_WEBGL:36067,COLOR_ATTACHMENT4_WEBGL:36068,COLOR_ATTACHMENT5_WEBGL:36069,COLOR_ATTACHMENT6_WEBGL:36070,COLOR_ATTACHMENT7_WEBGL:36071,COLOR_ATTACHMENT8_WEBGL:36072,COLOR_ATTACHMENT9_WEBGL:36073,COLOR_ATTACHMENT10_WEBGL:36074,COLOR_ATTACHMENT11_WEBGL:36075,COLOR_ATTACHMENT12_WEBGL:36076,COLOR_ATTACHMENT13_WEBGL:36077,COLOR_ATTACHMENT14_WEBGL:36078,COLOR_ATTACHMENT15_WEBGL:36079,DRAW_BUFFER0_WEBGL:34853,DRAW_BUFFER1_WEBGL:34854,DRAW_BUFFER2_WEBGL:34855,DRAW_BUFFER3_WEBGL:34856,DRAW_BUFFER4_WEBGL:34857,DRAW_BUFFER5_WEBGL:34858,DRAW_BUFFER6_WEBGL:34859,DRAW_BUFFER7_WEBGL:34860,DRAW_BUFFER8_WEBGL:34861,DRAW_BUFFER9_WEBGL:34862,DRAW_BUFFER10_WEBGL:34863,DRAW_BUFFER11_WEBGL:34864,DRAW_BUFFER12_WEBGL:34865,DRAW_BUFFER13_WEBGL:34866,DRAW_BUFFER14_WEBGL:34867,DRAW_BUFFER15_WEBGL:34868,MAX_COLOR_ATTACHMENTS_WEBGL:36063,MAX_DRAW_BUFFERS_WEBGL:34852,VERTEX_ARRAY_BINDING_OES:34229,QUERY_COUNTER_BITS_EXT:34916,CURRENT_QUERY_EXT:34917,QUERY_RESULT_EXT:34918,QUERY_RESULT_AVAILABLE_EXT:34919,TIME_ELAPSED_EXT:35007,TIMESTAMP_EXT:36392,GPU_DISJOINT_EXT:36795}},\n \"70a2bb70ef\": function _(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=t(\"@bokehjs/models/widgets/markup\");var a=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.render=function(){t.prototype.render.call(this);var e,r=(e=this.model.text,(new DOMParser).parseFromString(e,\"text/html\").documentElement.textContent)||this.model.text;r?(this.markup_el.innerHTML=r,Array.from(this.markup_el.querySelectorAll(\"script\")).forEach(function(t){var e=document.createElement(\"script\");Array.from(t.attributes).forEach(function(t){return e.setAttribute(t.name,t.value)}),e.appendChild(document.createTextNode(t.innerHTML)),t.parentNode&&t.parentNode.replaceChild(e,t)})):this.markup_el.innerHTML=\"\"},e.__name__=\"HTMLView\",e}(t(\"ec60963462\").PanelMarkupView);r.HTMLView=a;var u=function(t){function e(e){return t.call(this,e)||this}return o(e,t),e.init_HTML=function(){this.prototype.default_view=a},e.__name__=\"HTML\",e.__module__=\"panel.models.markup\",e}(i.Markup);r.HTML=u,u.init_HTML()},\n \"dac8d750fa\": function _(e,t,r){var n,o=this&&this.__extends||(n=function(e,t){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])})(e,t)},function(e,t){function r(){this.constructor=e}n(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}},u=i(e(\"@bokehjs/core/properties\")),s=e(\"@bokehjs/models/widgets/markup\"),p=a(e(\"cb07e54f5a\")),l=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return o(t,e),t.prototype.render=function(){e.prototype.render.call(this);var t,r=this.model.text.replace(/(\\r\\n|\\n|\\r)/gm,\"\").replace(\"'\",'\"');try{t=window.JSON.parse(r)}catch(e){return void(this.markup_el.innerHTML=\"Invalid JSON: \"+e.toString())}var n={hoverPreviewEnabled:this.model.hover_preview,theme:this.model.theme},o=new p.default(t,this.model.depth,n).render(),i=\"border-radius: 5px; padding: 10px;\";\"dark\"==this.model.theme?o.style.cssText=\"background-color: rgb(30, 30, 30);\"+i:o.style.cssText=i,this.markup_el.append(o)},t.__name__=\"JSONView\",t}(e(\"ec60963462\").PanelMarkupView);r.JSONView=l;var _=[\"dark\",\"light\"],h=function(e){function t(t){return e.call(this,t)||this}return o(t,e),t.init_JSON=function(){this.prototype.default_view=l,this.define({depth:[u.Number,1],hover_preview:[u.Boolean,!1],theme:[u.Enum(_),\"dark\"]})},t.__name__=\"JSON\",t.__module__=\"panel.models.markup\",t}(s.Markup);r.JSON=h,h.init_JSON()},\n \"cb07e54f5a\": function _(t,e,r){function n(t){return null===t?\"null\":typeof t}function o(t){return!!t&&\"object\"==typeof t}function i(t){if(void 0===t)return\"\";if(null===t)return\"Object\";if(\"object\"==typeof t&&!t.constructor)return\"Object\";var e=/function ([^(]*)/.exec(t.constructor.toString());return e&&e.length>1?e[1]:\"\"}function s(t,e,r){return\"null\"===t||\"undefined\"===t?t:(\"string\"!==t&&\"stringifiable\"!==t||(r='\"'+function(t){return t.replace(/\"/g,'\\\\\"')}(r)+'\"'),\"function\"===t?e.toString().replace(/[\\r\\n]/g,\"\").replace(/\\{.*\\}/,\"\")+\"{…}\":r)}function a(t){var e=\"\";return o(t)?(e=i(t),Array.isArray(t)&&(e+=\"[\"+t.length+\"]\")):e=s(n(t),t,t),e}function f(t){return\"json-formatter-\"+t}function m(t,e,r){var n=document.createElement(t);return e&&n.classList.add(f(e)),void 0!==r&&(r instanceof Node?n.appendChild(r):n.appendChild(document.createTextNode(String(r)))),n}!function(t){if(t&&\"undefined\"!=typeof window){var e=document.createElement(\"style\");e.setAttribute(\"media\",\"screen\"),e.innerHTML=t,document.head.appendChild(e)}}('.json-formatter-row {\\n font-family: monospace;\\n}\\n.json-formatter-row,\\n.json-formatter-row a,\\n.json-formatter-row a:hover {\\n color: black;\\n text-decoration: none;\\n}\\n.json-formatter-row .json-formatter-row {\\n margin-left: 1rem;\\n}\\n.json-formatter-row .json-formatter-children.json-formatter-empty {\\n opacity: 0.5;\\n margin-left: 1rem;\\n}\\n.json-formatter-row .json-formatter-children.json-formatter-empty:after {\\n display: none;\\n}\\n.json-formatter-row .json-formatter-children.json-formatter-empty.json-formatter-object:after {\\n content: \"No properties\";\\n}\\n.json-formatter-row .json-formatter-children.json-formatter-empty.json-formatter-array:after {\\n content: \"[]\";\\n}\\n.json-formatter-row .json-formatter-string,\\n.json-formatter-row .json-formatter-stringifiable {\\n color: green;\\n white-space: pre;\\n word-wrap: break-word;\\n}\\n.json-formatter-row .json-formatter-number {\\n color: blue;\\n}\\n.json-formatter-row .json-formatter-boolean {\\n color: red;\\n}\\n.json-formatter-row .json-formatter-null {\\n color: #855A00;\\n}\\n.json-formatter-row .json-formatter-undefined {\\n color: #ca0b69;\\n}\\n.json-formatter-row .json-formatter-function {\\n color: #FF20ED;\\n}\\n.json-formatter-row .json-formatter-date {\\n background-color: rgba(0, 0, 0, 0.05);\\n}\\n.json-formatter-row .json-formatter-url {\\n text-decoration: underline;\\n color: blue;\\n cursor: pointer;\\n}\\n.json-formatter-row .json-formatter-bracket {\\n color: blue;\\n}\\n.json-formatter-row .json-formatter-key {\\n color: #00008B;\\n padding-right: 0.2rem;\\n}\\n.json-formatter-row .json-formatter-toggler-link {\\n cursor: pointer;\\n}\\n.json-formatter-row .json-formatter-toggler {\\n line-height: 1.2rem;\\n font-size: 0.7rem;\\n vertical-align: middle;\\n opacity: 0.6;\\n cursor: pointer;\\n padding-right: 0.2rem;\\n}\\n.json-formatter-row .json-formatter-toggler:after {\\n display: inline-block;\\n transition: transform 100ms ease-in;\\n content: \"►\";\\n}\\n.json-formatter-row > a > .json-formatter-preview-text {\\n opacity: 0;\\n transition: opacity 0.15s ease-in;\\n font-style: italic;\\n}\\n.json-formatter-row:hover > a > .json-formatter-preview-text {\\n opacity: 0.6;\\n}\\n.json-formatter-row.json-formatter-open > .json-formatter-toggler-link .json-formatter-toggler:after {\\n transform: rotate(90deg);\\n}\\n.json-formatter-row.json-formatter-open > .json-formatter-children:after {\\n display: inline-block;\\n}\\n.json-formatter-row.json-formatter-open > a > .json-formatter-preview-text {\\n display: none;\\n}\\n.json-formatter-row.json-formatter-open.json-formatter-empty:after {\\n display: block;\\n}\\n.json-formatter-dark.json-formatter-row {\\n font-family: monospace;\\n}\\n.json-formatter-dark.json-formatter-row,\\n.json-formatter-dark.json-formatter-row a,\\n.json-formatter-dark.json-formatter-row a:hover {\\n color: white;\\n text-decoration: none;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-row {\\n margin-left: 1rem;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-children.json-formatter-empty {\\n opacity: 0.5;\\n margin-left: 1rem;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-children.json-formatter-empty:after {\\n display: none;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-children.json-formatter-empty.json-formatter-object:after {\\n content: \"No properties\";\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-children.json-formatter-empty.json-formatter-array:after {\\n content: \"[]\";\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-string,\\n.json-formatter-dark.json-formatter-row .json-formatter-stringifiable {\\n color: #31F031;\\n white-space: pre;\\n word-wrap: break-word;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-number {\\n color: #66C2FF;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-boolean {\\n color: #EC4242;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-null {\\n color: #EEC97D;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-undefined {\\n color: #ef8fbe;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-function {\\n color: #FD48CB;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-date {\\n background-color: rgba(255, 255, 255, 0.05);\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-url {\\n text-decoration: underline;\\n color: #027BFF;\\n cursor: pointer;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-bracket {\\n color: #9494FF;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-key {\\n color: #23A0DB;\\n padding-right: 0.2rem;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-toggler-link {\\n cursor: pointer;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-toggler {\\n line-height: 1.2rem;\\n font-size: 0.7rem;\\n vertical-align: middle;\\n opacity: 0.6;\\n cursor: pointer;\\n padding-right: 0.2rem;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-toggler:after {\\n display: inline-block;\\n transition: transform 100ms ease-in;\\n content: \"►\";\\n}\\n.json-formatter-dark.json-formatter-row > a > .json-formatter-preview-text {\\n opacity: 0;\\n transition: opacity 0.15s ease-in;\\n font-style: italic;\\n}\\n.json-formatter-dark.json-formatter-row:hover > a > .json-formatter-preview-text {\\n opacity: 0.6;\\n}\\n.json-formatter-dark.json-formatter-row.json-formatter-open > .json-formatter-toggler-link .json-formatter-toggler:after {\\n transform: rotate(90deg);\\n}\\n.json-formatter-dark.json-formatter-row.json-formatter-open > .json-formatter-children:after {\\n display: inline-block;\\n}\\n.json-formatter-dark.json-formatter-row.json-formatter-open > a > .json-formatter-preview-text {\\n display: none;\\n}\\n.json-formatter-dark.json-formatter-row.json-formatter-open.json-formatter-empty:after {\\n display: block;\\n}\\n');var l=/(^\\d{1,4}[\\.|\\\\/|-]\\d{1,2}[\\.|\\\\/|-]\\d{1,4})(\\s*(?:0?[1-9]:[0-5]|1(?=[012])\\d:[0-5])\\d\\s*[ap]m)?$/,d=/\\d{2}:\\d{2}:\\d{2} GMT-\\d{4}/,c=/\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}.\\d{3}Z/,p=window.requestAnimationFrame||function(t){return t(),0},j={hoverPreviewEnabled:!1,hoverPreviewArrayCount:100,hoverPreviewFieldCount:5,animateOpen:!0,animateClose:!0,theme:null,useToJSON:!0,sortPropertiesBy:null},h=function(){function t(t,e,r,n){void 0===e&&(e=1),void 0===r&&(r=j),this.json=t,this.open=e,this.config=r,this.key=n,this._isOpen=null,void 0===this.config.hoverPreviewEnabled&&(this.config.hoverPreviewEnabled=j.hoverPreviewEnabled),void 0===this.config.hoverPreviewArrayCount&&(this.config.hoverPreviewArrayCount=j.hoverPreviewArrayCount),void 0===this.config.hoverPreviewFieldCount&&(this.config.hoverPreviewFieldCount=j.hoverPreviewFieldCount),void 0===this.config.useToJSON&&(this.config.useToJSON=j.useToJSON),\"\"===this.key&&(this.key='\"\"')}return Object.defineProperty(t.prototype,\"isOpen\",{get:function(){return null!==this._isOpen?this._isOpen:this.open>0},set:function(t){this._isOpen=t},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"isDate\",{get:function(){return this.json instanceof Date||\"string\"===this.type&&(l.test(this.json)||c.test(this.json)||d.test(this.json))},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"isUrl\",{get:function(){return\"string\"===this.type&&0===this.json.indexOf(\"http\")},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"isArray\",{get:function(){return Array.isArray(this.json)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"isObject\",{get:function(){return o(this.json)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"isEmptyObject\",{get:function(){return!this.keys.length&&!this.isArray},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"isEmpty\",{get:function(){return this.isEmptyObject||this.keys&&!this.keys.length&&this.isArray},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"useToJSON\",{get:function(){return this.config.useToJSON&&\"stringifiable\"===this.type},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"hasKey\",{get:function(){return void 0!==this.key},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"constructorName\",{get:function(){return i(this.json)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"type\",{get:function(){return this.config.useToJSON&&this.json&&this.json.toJSON?\"stringifiable\":n(this.json)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"keys\",{get:function(){if(this.isObject){var t=Object.keys(this.json);return!this.isArray&&this.config.sortPropertiesBy?t.sort(this.config.sortPropertiesBy):t}return[]},enumerable:!0,configurable:!0}),t.prototype.toggleOpen=function(){this.isOpen=!this.isOpen,this.element&&(this.isOpen?this.appendChildren(this.config.animateOpen):this.removeChildren(this.config.animateClose),this.element.classList.toggle(f(\"open\")))},t.prototype.openAtDepth=function(t){void 0===t&&(t=1),t<0||(this.open=t,this.isOpen=0!==t,this.element&&(this.removeChildren(!1),0===t?this.element.classList.remove(f(\"open\")):(this.appendChildren(this.config.animateOpen),this.element.classList.add(f(\"open\")))))},t.prototype.getInlinepreview=function(){var t=this;if(this.isArray)return this.json.length>this.config.hoverPreviewArrayCount?\"Array[\"+this.json.length+\"]\":\"[\"+this.json.map(a).join(\", \")+\"]\";var e=this.keys,r=e.slice(0,this.config.hoverPreviewFieldCount).map(function(e){return e+\":\"+a(t.json[e])}),n=e.length>=this.config.hoverPreviewFieldCount?\"…\":\"\";return\"{\"+r.join(\", \")+n+\"}\"},t.prototype.render=function(){this.element=m(\"div\",\"row\");var t=this.isObject?m(\"a\",\"toggler-link\"):m(\"span\");if(this.isObject&&!this.useToJSON&&t.appendChild(m(\"span\",\"toggler\")),this.hasKey&&t.appendChild(m(\"span\",\"key\",this.key+\":\")),this.isObject&&!this.useToJSON){var e=m(\"span\",\"value\"),r=m(\"span\"),n=m(\"span\",\"constructor-name\",this.constructorName);if(r.appendChild(n),this.isArray){var o=m(\"span\");o.appendChild(m(\"span\",\"bracket\",\"[\")),o.appendChild(m(\"span\",\"number\",this.json.length)),o.appendChild(m(\"span\",\"bracket\",\"]\")),r.appendChild(o)}e.appendChild(r),t.appendChild(e)}else{(e=this.isUrl?m(\"a\"):m(\"span\")).classList.add(f(this.type)),this.isDate&&e.classList.add(f(\"date\")),this.isUrl&&(e.classList.add(f(\"url\")),e.setAttribute(\"href\",this.json));var i=s(this.type,this.json,this.useToJSON?this.json.toJSON():this.json);e.appendChild(document.createTextNode(i)),t.appendChild(e)}if(this.isObject&&this.config.hoverPreviewEnabled){var a=m(\"span\",\"preview-text\");a.appendChild(document.createTextNode(this.getInlinepreview())),t.appendChild(a)}var l=m(\"div\",\"children\");return this.isObject&&l.classList.add(f(\"object\")),this.isArray&&l.classList.add(f(\"array\")),this.isEmpty&&l.classList.add(f(\"empty\")),this.config&&this.config.theme&&this.element.classList.add(f(this.config.theme)),this.isOpen&&this.element.classList.add(f(\"open\")),this.element.appendChild(t),this.element.appendChild(l),this.isObject&&this.isOpen&&this.appendChildren(),this.isObject&&!this.useToJSON&&t.addEventListener(\"click\",this.toggleOpen.bind(this)),this.element},t.prototype.appendChildren=function(e){var r=this;void 0===e&&(e=!1);var n=this.element.querySelector(\"div.\"+f(\"children\"));if(n&&!this.isEmpty)if(e){var o=0,i=function(){var e=r.keys[o],s=new t(r.json[e],r.open-1,r.config,e);n.appendChild(s.render()),(o+=1)10?i():p(i))};p(i)}else this.keys.forEach(function(e){var o=new t(r.json[e],r.open-1,r.config,e);n.appendChild(o.render())})},t.prototype.removeChildren=function(t){void 0===t&&(t=!1);var e=this.element.querySelector(\"div.\"+f(\"children\"));if(t){var r=0,n=function(){e&&e.children.length&&(e.removeChild(e.children[0]),(r+=1)>10?n():p(n))};p(n)}else e&&(e.innerHTML=\"\")},t}();e.exports=h},\n \"c81021c8fd\": function _(t,e,n){var i,r=this&&this.__extends||(i=function(t,e){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(t,e)},function(t,e){function n(){this.constructor=t}i(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}),o=t(\"@bokehjs/models/widgets/markup\"),a=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return r(e,t),e.prototype.render=function(){t.prototype.render.call(this),this.markup_el.innerHTML=this.model.text,window.renderMathInElement&&window.renderMathInElement(this.el,{delimiters:[{left:\"$$\",right:\"$$\",display:!0},{left:\"\\\\[\",right:\"\\\\]\",display:!0},{left:\"$\",right:\"$\",display:!1},{left:\"\\\\(\",right:\"\\\\)\",display:!1}]})},e.__name__=\"KaTeXView\",e}(t(\"ec60963462\").PanelMarkupView);n.KaTeXView=a;var l=function(t){function e(e){return t.call(this,e)||this}return r(e,t),e.init_KaTeX=function(){this.prototype.default_view=a},e.__name__=\"KaTeX\",e.__module__=\"panel.models.katex\",e}(o.Markup);n.KaTeX=l,l.init_KaTeX()},\n \"a93ded647d\": function _(t,e,n){var i,o=this&&this.__extends||(i=function(t,e){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(t,e)},function(t,e){function n(){this.constructor=t}i(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}),r=t(\"@bokehjs/models/widgets/markup\"),a=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.initialize=function(){t.prototype.initialize.call(this),this._hub=window.MathJax.Hub,this._hub.Config({tex2jax:{inlineMath:[[\"$\",\"$\"],[\"\\\\(\",\"\\\\)\"]]}})},e.prototype.render=function(){t.prototype.render.call(this),this._hub&&(this.markup_el.innerHTML=this.model.text,this._hub.Queue([\"Typeset\",this._hub,this.markup_el]))},e.__name__=\"MathJaxView\",e}(t(\"ec60963462\").PanelMarkupView);n.MathJaxView=a;var u=function(t){function e(e){return t.call(this,e)||this}return o(e,t),e.init_MathJax=function(){this.prototype.default_view=a},e.__name__=\"MathJax\",e.__module__=\"panel.models.mathjax\",e}(r.Markup);n.MathJax=u,u.init_MathJax()},\n \"98100899bc\": function _(t,e,i){var n,o=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var i in e)e.hasOwnProperty(i)&&(t[i]=e[i])})(t,e)},function(t,e){function i(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(i.prototype=e.prototype,new i)}),r=(this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var i in t)Object.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e.default=t,e})(t(\"@bokehjs/core/properties\")),s=t(\"@bokehjs/core/dom\"),a=t(\"@bokehjs/models/widgets/widget\"),l=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.connect_signals=function(){var e=this;t.prototype.connect_signals.call(this),this.connect(this.model.change,function(){return e.render()}),this.connect(this.model.properties.value.change,function(){return e.render()}),this.connect(this.model.properties.loop_policy.change,function(){return e.set_loop_state(e.model.loop_policy)})},e.prototype.get_height=function(){return 250},e.prototype.render=function(){var e=this;if(null!=this.sliderEl)return this.sliderEl.style.width=\"{this.model.width}px\",this.sliderEl.min=String(this.model.start),this.sliderEl.max=String(this.model.end),void(this.sliderEl.value=String(this.model.value));t.prototype.render.call(this),this.sliderEl=document.createElement(\"input\"),this.sliderEl.setAttribute(\"type\",\"range\"),this.sliderEl.style.width=this.model.width+\"px\",this.sliderEl.value=String(this.model.value),this.sliderEl.min=String(this.model.start),this.sliderEl.max=String(this.model.end),this.sliderEl.onchange=function(t){return e.set_frame(parseInt(t.target.value))};var i=s.div();i.style.cssText=\"margin: 0 auto; display: table; padding: 5px\";var n=\"text-align: center; min-width: 40px; margin: 2px\",o=document.createElement(\"button\");o.style.cssText=\"text-align: center; min-width: 20px\",o.appendChild(document.createTextNode(\"–\")),o.onclick=function(){return e.slower()},i.appendChild(o);var r=document.createElement(\"button\");r.style.cssText=n,r.appendChild(document.createTextNode(\"❚◀◀\")),r.onclick=function(){return e.first_frame()},i.appendChild(r);var a=document.createElement(\"button\");a.style.cssText=n,a.appendChild(document.createTextNode(\"❚◀\")),a.onclick=function(){return e.previous_frame()},i.appendChild(a);var l=document.createElement(\"button\");l.style.cssText=n,l.appendChild(document.createTextNode(\"◀\")),l.onclick=function(){return e.reverse_animation()},i.appendChild(l);var d=document.createElement(\"button\");d.style.cssText=n,d.appendChild(document.createTextNode(\"❚❚\")),d.onclick=function(){return e.pause_animation()},i.appendChild(d);var p=document.createElement(\"button\");p.style.cssText=n,p.appendChild(document.createTextNode(\"▶\")),p.onclick=function(){return e.play_animation()},i.appendChild(p);var c=document.createElement(\"button\");c.style.cssText=n,c.appendChild(document.createTextNode(\"▶❚\")),c.onclick=function(){return e.next_frame()},i.appendChild(c);var h=document.createElement(\"button\");h.style.cssText=n,h.appendChild(document.createTextNode(\"▶▶❚\")),h.onclick=function(){return e.last_frame()},i.appendChild(h);var u=document.createElement(\"button\");u.style.cssText=\"text-align: center; min-width: 20px\",u.appendChild(document.createTextNode(\"+\")),u.onclick=function(){return e.faster()},i.appendChild(u),this.loop_state=document.createElement(\"form\"),this.loop_state.style.cssText=\"margin: 0 auto; display: table\";var m=document.createElement(\"input\");m.type=\"radio\",m.value=\"once\",m.name=\"state\";var _=document.createElement(\"label\");_.innerHTML=\"Once\",_.style.cssText=\"padding: 0 10px 0 5px; user-select:none;\";var f=document.createElement(\"input\");f.setAttribute(\"type\",\"radio\"),f.setAttribute(\"value\",\"loop\"),f.setAttribute(\"name\",\"state\");var v=document.createElement(\"label\");v.innerHTML=\"Loop\",v.style.cssText=\"padding: 0 10px 0 5px; user-select:none;\";var y=document.createElement(\"input\");y.setAttribute(\"type\",\"radio\"),y.setAttribute(\"value\",\"reflect\"),y.setAttribute(\"name\",\"state\");var x=document.createElement(\"label\");x.innerHTML=\"Reflect\",x.style.cssText=\"padding: 0 10px 0 5px; user-select:none;\",\"once\"==this.model.loop_policy?m.checked=!0:\"loop\"==this.model.loop_policy?f.checked=!0:y.checked=!0,this.loop_state.appendChild(m),this.loop_state.appendChild(_),this.loop_state.appendChild(f),this.loop_state.appendChild(v),this.loop_state.appendChild(y),this.loop_state.appendChild(x),this.el.appendChild(this.sliderEl),this.el.appendChild(i),this.el.appendChild(this.loop_state)},e.prototype.set_frame=function(t){this.model.value!=t&&(this.model.value=t),this.sliderEl.value!=String(t)&&(this.sliderEl.value=String(t))},e.prototype.get_loop_state=function(){for(var t=this.loop_state.state,e=0;e0?this.play_animation():this.model.direction<0&&this.reverse_animation()},e.prototype.faster=function(){this.model.interval=Math.round(.7*this.model.interval),this.model.direction>0?this.play_animation():this.model.direction<0&&this.reverse_animation()},e.prototype.anim_step_forward=function(){if(this.model.valuethis.model.start)this.previous_frame();else{var t=this.get_loop_state();\"loop\"==t?this.last_frame():\"reflect\"==t?(this.first_frame(),this.play_animation()):(this.pause_animation(),this.first_frame())}},e.prototype.pause_animation=function(){this.model.direction=0,this.timer&&(clearInterval(this.timer),this.timer=null)},e.prototype.play_animation=function(){var t=this;this.pause_animation(),this.model.direction=1,this.timer||(this.timer=setInterval(function(){return t.anim_step_forward()},this.model.interval))},e.prototype.reverse_animation=function(){var t=this;this.pause_animation(),this.model.direction=-1,this.timer||(this.timer=setInterval(function(){return t.anim_step_reverse()},this.model.interval))},e.__name__=\"PlayerView\",e}(a.WidgetView);i.PlayerView=l;var d=function(t){function e(e){return t.call(this,e)||this}return o(e,t),e.init_Player=function(){this.prototype.default_view=l,this.define({direction:[r.Number,0],interval:[r.Number,500],start:[r.Number],end:[r.Number],step:[r.Number,1],loop_policy:[r.Any,\"once\"],value:[r.Any,0]}),this.override({width:400})},e.__name__=\"Player\",e.__module__=\"panel.models.widgets\",e}(a.Widget);i.Player=d,d.init_Player()},\n \"d46f026c83\": function _(t,e,o){var r,n=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var o in e)e.hasOwnProperty(o)&&(t[o]=e[o])})(t,e)},function(t,e){function o(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(o.prototype=e.prototype,new o)}),i=(this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var o in t)Object.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e.default=t,e})(t(\"@bokehjs/core/properties\")),l=t(\"@bokehjs/core/util/object\"),a=t(\"@bokehjs/core/util/eq\"),p=t(\"@bokehjs/models/layouts/html_box\"),s=t(\"99a25e6992\"),u=t(\"62ba79515f\"),c=t(\"ec60963462\"),_=window.Plotly,d=function(t,e,o){var r=Array.isArray(e)?[]:{};if(\"click\"===o||\"hover\"===o||\"selected\"===o){var n=[];if(null==e)return null;for(var i=t.data,l=0;l1){for(var u=[],c=0;c=0?t=setTimeout(i,l-c):(t=null,u||(r=n.apply(o,e),o=e=null))}null==l&&(l=100);var c=function(){o=this,e=arguments,a=Date.now();var c=u&&!t;return t||(t=setTimeout(i,l)),c&&(r=n.apply(o,e),o=e=null),r};return c.clear=function(){t&&(clearTimeout(t),t=null)},c.flush=function(){t&&(r=n.apply(o,e),o=e=null,clearTimeout(t),t=null)},c}t.debounce=t,l.exports=t},\n \"62ba79515f\": function _(t,r,n){n.get=function(t,r,n){void 0===n&&(n=void 0);var e=function(n){return String.prototype.split.call(r,n).filter(Boolean).reduce(function(t,r){return null!=t?t[r]:t},t)},o=e(/[,[\\]]+?/)||e(/[,[\\].]+?/);return void 0===o||o===t?n:o},n.throttle=function(t,r){var n=0;return function(){var e=Number(new Date);e-n>=r&&(t(),n=e)}},n.deepCopy=function t(r){var n;if(null==r||\"object\"!=typeof r)return r;if(r instanceof Array){n=[];for(var e=0,o=r.length;e0){var t=this._fetch_datasets();if(\"data\"in t&&(this.model.data.data.values=t.data,delete t.data),void 0!==this.model.data.data)for(var e=0,o=this.model.data.data;e0&&(this.timer=setInterval(function(){return t.snapshot()},this.model.timeout))},e.prototype.snapshot=function(){this.canvasEl.width=this.videoEl.videoWidth,this.canvasEl.height=this.videoEl.videoHeight;var t=this.canvasEl.getContext(\"2d\");t&&t.drawImage(this.videoEl,0,0,this.canvasEl.width,this.canvasEl.height),this.model.value=this.canvasEl.toDataURL(\"image/\"+this.model.format,.95)},e.prototype.remove=function(){t.prototype.remove.call(this),this.timer&&(clearInterval(this.timer),this.timer=null)},e.prototype.render=function(){var e=this;t.prototype.render.call(this),this.videoEl||(this.videoEl=document.createElement(\"video\"),this.model.sizing_mode&&\"fixed\"!==this.model.sizing_mode||(this.model.height&&(this.videoEl.height=this.model.height),this.model.width&&(this.videoEl.width=this.model.width)),this.videoEl.style.objectFit=\"fill\",this.videoEl.style.minWidth=\"100%\",this.videoEl.style.minHeight=\"100%\",this.canvasEl=document.createElement(\"canvas\"),this.el.appendChild(this.videoEl),navigator.mediaDevices.getUserMedia&&navigator.mediaDevices.getUserMedia(this.constraints).then(function(t){e.videoEl.srcObject=t,e.model.paused||e.videoEl.play()}).catch(console.error))},e.__name__=\"VideoStreamView\",e}(t(\"ec60963462\").PanelHTMLBoxView);i.VideoStreamView=h;var a=function(t){function e(e){return t.call(this,e)||this}return n(e,t),e.init_VideoStream=function(){this.prototype.default_view=h,this.define({format:[s.String,\"png\"],paused:[s.Boolean,!1],snapshot:[s.Boolean,!1],timeout:[s.Number,0],value:[s.Any]}),this.override({height:240,width:320})},e.__name__=\"VideoStream\",e.__module__=\"panel.models.widgets\",e}(r.HTMLBox);i.VideoStream=a,a.init_VideoStream()},\n \"63070bc9ce\": function _(V,o,e){var l=V(\"1a4b530306\");e.VTKPlot=l.VTKPlot;var K=V(\"b933e81f56\");e.VTKVolumePlot=K.VTKVolumePlot;var T=V(\"5bc27423fe\");e.VTKAxes=T.VTKAxes},\n \"1a4b530306\": function _(e,t,n){var i,o=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),r=(this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t})(e(\"@bokehjs/core/properties\")),a=e(\"@bokehjs/core/dom\"),s=e(\"7620c2cc05\"),c=e(\"3b847a648d\"),d=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t._axes_initialized=!1,t}return o(t,e),t.prototype.connect_signals=function(){var t=this;e.prototype.connect_signals.call(this),this.connect(this.model.properties.axes.change,function(){t._delete_axes(),t.model.axes&&t._set_axes(),t._vtk_renwin.getRenderWindow().render()}),this.el.addEventListener(\"mouseenter\",function(){var e=t._vtk_renwin.getInteractor();t.model.enable_keybindings&&(document.querySelector(\"body\").addEventListener(\"keypress\",e.handleKeyPress),document.querySelector(\"body\").addEventListener(\"keydown\",e.handleKeyDown),document.querySelector(\"body\").addEventListener(\"keyup\",e.handleKeyUp))}),this.el.addEventListener(\"mouseleave\",function(){var e=t._vtk_renwin.getInteractor();document.querySelector(\"body\").removeEventListener(\"keypress\",e.handleKeyPress),document.querySelector(\"body\").removeEventListener(\"keydown\",e.handleKeyDown),document.querySelector(\"body\").removeEventListener(\"keyup\",e.handleKeyUp)})},t.prototype.render=function(){e.prototype.render.call(this),this._axes=null,this._axes_initialized=!1,this._plot()},t.prototype.after_layout=function(){this._axes_initialized||(this._render_axes_canvas(),this._axes_initialized=!0)},t.prototype._render_axes_canvas=function(){var e=this,t=this._vtk_container.getElementsByTagName(\"canvas\");if(1!=t.length)throw Error(\"Error at initialization of the 3D scene, container should have one and only one canvas\");t[0].classList.add(\"scene3d-canvas\");var n=a.canvas({style:{position:\"absolute\",top:\"0\",left:\"0\",width:\"100%\",height:\"100%\"}});n.classList.add(\"axes-canvas\"),this._vtk_container.appendChild(n),this._vtk_renwin.setResizeCallback(function(){var t=e._vtk_container.getBoundingClientRect(),i=Math.floor(t.width*window.devicePixelRatio),o=Math.floor(t.height*window.devicePixelRatio);n.setAttribute(\"width\",i.toFixed()),n.setAttribute(\"height\",o.toFixed())})},t.prototype._delete_axes=function(){var e=this;if(null!=this._axes){Object.keys(this._axes).forEach(function(t){return e._vtk_renwin.getRenderer().removeActor(e._axes[t])});var t=this._vtk_renwin.getContainer().getElementsByClassName(\"axes-canvas\")[0],n=t.getContext(\"2d\");n&&n.clearRect(0,0,t.clientWidth*window.devicePixelRatio,t.clientHeight*window.devicePixelRatio),this._axes=null}},t.prototype._set_axes=function(){if(this.model.axes){var e=this._vtk_renwin.getContainer().getElementsByClassName(\"axes-canvas\")[0],t=this.model.axes.create_axes(e),n=t.psActor,i=t.axesActor,o=t.gridActor;this._axes={psActor:n,axesActor:i,gridActor:o},this._vtk_renwin.getRenderer().addActor(n),this._vtk_renwin.getRenderer().addActor(i),this._vtk_renwin.getRenderer().addActor(o)}},t.prototype._plot=function(){var e=this;if(this.model.data)var t=c.vtkns.DataAccessHelper.get(\"zip\",{zipContent:atob(this.model.data),callback:function(n){var i=c.vtkns.HttpSceneLoader.newInstance({renderer:e._vtk_renwin.getRenderer(),dataAccessHelper:t}),o=c.vtk.macro.debounce(function(){null==e._axes&&e.model.axes&&e._set_axes(),e.model.properties.camera.change.emit()},100);i.setUrl(\"index.json\"),i.onReady(o)}});else this._vtk_renwin.getRenderWindow().render()},t.__name__=\"VTKPlotView\",t}(s.AbstractVTKView);n.VTKPlotView=d;var l=function(e){function t(t){var n=e.call(this,t)||this;n.outline=c.vtkns.OutlineFilter.newInstance();var i=c.vtkns.Mapper.newInstance();return i.setInputConnection(n.outline.getOutputPort()),n.outline_actor=c.vtkns.Actor.newInstance(),n.outline_actor.setMapper(i),n}return o(t,e),t.init_VTKPlot=function(){this.prototype.default_view=d,this.define({data:[r.String],axes:[r.Instance],enable_keybindings:[r.Boolean,!1]})},t.__name__=\"VTKPlot\",t}(s.AbstractVTKPlot);n.VTKPlot=l,l.init_VTKPlot()},\n \"7620c2cc05\": function _(e,t,n){var i,r=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),o=(this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t})(e(\"@bokehjs/core/properties\")),a=e(\"@bokehjs/core/dom\"),s=e(\"@bokehjs/core/util/object\"),_=e(\"@bokehjs/models/layouts/html_box\"),c=e(\"ec60963462\"),d=e(\"3b847a648d\"),h=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t._setting_camera=!1,t}return r(t,e),t.prototype.connect_signals=function(){var t=this;e.prototype.connect_signals.call(this),this.connect(this.model.properties.data.change,function(){t.invalidate_render()}),this.connect(this.model.properties.orientation_widget.change,function(){t._orientation_widget_visibility(t.model.orientation_widget)}),this.connect(this.model.properties.camera.change,function(){return t._set_camera_state()})},t.prototype._orientation_widget_visibility=function(e){this._orientationWidget.setEnabled(e),e?this._widgetManager.enablePicking():this._widgetManager.disablePicking(),this._orientationWidget.updateMarkerOrientation(),this._vtk_renwin.getRenderWindow().render()},t.prototype._create_orientation_widget=function(){var e=this,t=d.vtkns.AxesActor.newInstance(),n=d.vtkns.OrientationMarkerWidget.newInstance({actor:t,interactor:this._vtk_renwin.getInteractor()});n.setEnabled(!0),n.setViewportCorner(d.vtkns.OrientationMarkerWidget.Corners.BOTTOM_RIGHT),n.setViewportSize(.15),n.setMinPixelSize(100),n.setMaxPixelSize(300),this._orientationWidget=n;var i=d.vtkns.WidgetManager.newInstance();i.setRenderer(n.getRenderer());var r=d.vtkns.InteractiveOrientationWidget.newInstance();r.placeWidget(t.getBounds()),r.setBounds(t.getBounds()),r.setPlaceFactor(1);var o=i.addWidget(r);this._widgetManager=i,o.onOrientationChange(function(t){var n=t.direction,i=e._vtk_renwin.getRenderer().getActiveCamera(),r=i.getFocalPoint(),o=i.getPosition(),a=i.getViewUp(),s=Math.sqrt(Math.pow(o[0]-r[0],2)+Math.pow(o[1]-r[1],2)+Math.pow(o[2]-r[2],2));i.setPosition(r[0]+n[0]*s,r[1]+n[1]*s,r[2]+n[2]*s),n[0]&&i.setViewUp(d.majorAxis(a,1,2)),n[1]&&i.setViewUp(d.majorAxis(a,0,2)),n[2]&&i.setViewUp(d.majorAxis(a,0,1)),e._orientationWidget.updateMarkerOrientation(),e._vtk_renwin.getRenderer().resetCameraClippingRange(),e._vtk_renwin.getRenderWindow().render()}),this._orientation_widget_visibility(this.model.orientation_widget)},t.prototype._get_camera_state=function(){if(!this._setting_camera){this._setting_camera=!0;var e=s.clone(this._vtk_renwin.getRenderer().getActiveCamera().get());delete e.classHierarchy,delete e.vtkObject,delete e.vtkCamera,delete e.viewPlaneNormal,this.model.camera=e,this._setting_camera=!1}},t.prototype._set_camera_state=function(){if(!this._setting_camera){this._setting_camera=!0;try{this.model.camera&&this._vtk_renwin.getRenderer().getActiveCamera().set(this.model.camera)}finally{this._setting_camera=!1}this._orientationWidget.updateMarkerOrientation(),this._vtk_renwin.getRenderer().resetCameraClippingRange(),this._vtk_renwin.getRenderWindow().render()}},t.prototype.render=function(){var t=this;e.prototype.render.call(this),this._orientationWidget=null,this._vtk_container=a.div(),c.set_size(this._vtk_container,this.model),this.el.appendChild(this._vtk_container),this._vtk_renwin=d.vtkns.FullScreenRenderWindow.newInstance({rootContainer:this.el,container:this._vtk_container}),this._remove_default_key_binding(),this._create_orientation_widget(),this._vtk_renwin.getRenderer().getActiveCamera().onModified(function(){return t._get_camera_state()}),this._set_camera_state(),this.model.renderer_el=this._vtk_renwin},t.prototype.after_layout=function(){e.prototype.after_layout.call(this),this._vtk_renwin.resize()},t.prototype._remove_default_key_binding=function(){var e=this._vtk_renwin.getInteractor();document.querySelector(\"body\").removeEventListener(\"keypress\",e.handleKeyPress),document.querySelector(\"body\").removeEventListener(\"keydown\",e.handleKeyDown),document.querySelector(\"body\").removeEventListener(\"keyup\",e.handleKeyUp)},t.__name__=\"AbstractVTKView\",t}(c.PanelHTMLBoxView);n.AbstractVTKView=h;var l=function(e){function t(t){return e.call(this,t)||this}return r(t,e),t.prototype.getActors=function(){return this.renderer_el.getRenderer().getActors()},t.init_AbstractVTKPlot=function(){this.define({orientation_widget:[o.Boolean,!1],camera:[o.Instance]}),this.override({height:300,width:300})},t.__name__=\"AbstractVTKPlot\",t.__module__=\"panel.models.vtk\",t}(_.HTMLBox);n.AbstractVTKPlot=l,l.init_AbstractVTKPlot()},\n \"3b847a648d\": function _(e,t,n){var r=e(\"@bokehjs/core/util/serialization\"),a=e(\"@bokehjs/core/util/array\");function o(e){var t=Math.min(Math.max(Math.round(e),0),255).toString(16);return 2==t.length?t:\"0\"+t}function i(e,t,n){return\"#\"+o(e)+o(t)+o(n)}function v(e){for(var t=new ArrayBuffer(e.length),n=new Uint8Array(t),r=0,a=e.length;rMath.abs(e[n])?t:n,o=e[a]>0?1:-1;return r[a]=o,r},n.cartesian_product=function(){for(var e=[],t=0;t=.005&&(e.model.sampling=t)}),Math.abs(this.model.sampling-Number(this.shadow_selector.value))>=.005&&this.model.properties.sampling.change.emit(),this.edge_gradient_slider.addEventListener(\"input\",function(){var t=Number(e.edge_gradient_slider.value);Math.abs(e.model.edge_gradient-t)>=.005&&(e.model.edge_gradient=t)}),Math.abs(this.model.edge_gradient-Number(this.edge_gradient_slider.value))>=.005&&this.model.properties.edge_gradient.change.emit()},t.prototype._plot_volume=function(){var e=this,t=this._vtk_image_data,n=a.vtkns.Volume.newInstance(),r=a.vtkns.VolumeMapper.newInstance();n.setMapper(r),r.setInputData(t);var i=(t.getPointData().getScalars()||t.getPointData().getArrays()[0]).getRange(),o=a.vtkns.ColorTransferFunction.newInstance();o.onModified(function(){return e.model.mapper=a.vtkLutToMapper(o)});var s=a.vtkns.PiecewiseFunction.newInstance(),l=.7*Math.sqrt(t.getSpacing().map(function(e){return e*e}).reduce(function(e,t){return e+t},0));r.setSampleDistance(l),n.getProperty().setRGBTransferFunction(0,o),n.getProperty().setScalarOpacity(0,s),n.getProperty().setInterpolationTypeToFastLinear(),n.getProperty().setScalarOpacityUnitDistance(0,a.vtkns.BoundingBox.getDiagonalLength(t.getBounds())/Math.max.apply(Math,t.getDimensions())),n.getProperty().setGradientOpacityMinimumValue(0,0),n.getProperty().setGradientOpacityMaximumValue(0,.05*(i[1]-i[0])),n.getProperty().setShade(this.model.shadow),n.getProperty().setUseGradientOpacity(0,!0),n.getProperty().setGradientOpacityMinimumOpacity(0,0),n.getProperty().setGradientOpacityMaximumOpacity(0,1),n.getProperty().setAmbient(this.model.ambient),n.getProperty().setDiffuse(this.model.diffuse),n.getProperty().setSpecular(this.model.specular),n.getProperty().setSpecularPower(this.model.specular_power),this._vtk_renwin.getRenderer().addVolume(n),this._controllerWidget.setupContent(this._vtk_renwin.getRenderWindow(),n,!0)},t.prototype._plot_slices=function(){var e=this._vtk_image_data,t=a.vtkns.ImageSlice.newInstance(),n=a.vtkns.ImageSlice.newInstance(),r=a.vtkns.ImageSlice.newInstance(),i=a.vtkns.ImageMapper.newInstance(),o=a.vtkns.ImageMapper.newInstance(),s=a.vtkns.ImageMapper.newInstance();i.setInputData(e),i.setISlice(this.model.slice_i),t.setMapper(i),o.setInputData(e),o.setJSlice(this.model.slice_j),n.setMapper(o),s.setInputData(e),s.setKSlice(this.model.slice_k),r.setMapper(s);var l=a.vtkns.PiecewiseFunction.newInstance();l.removeAllPoints(),l.addPoint(0,1);var c=this.volume.getProperty().getRGBTransferFunction(0),p=t.getProperty();n.setProperty(p),r.setProperty(p),p.setRGBTransferFunction(c),p.setScalarOpacity(l);var d=this._vtk_renwin.getRenderer();d.addActor(t),d.addActor(n),d.addActor(r)},t.prototype._set_volume_visibility=function(e){this.volume.setVisibility(e)},t.prototype._set_slices_visibility=function(e){this._vtk_renwin.getRenderer().getActors().map(function(t){return t.setVisibility(e)})},t.__name__=\"VTKVolumePlotView\",t}(s.AbstractVTKView);n.VTKVolumePlotView=l;var c=function(e){function t(t){return e.call(this,t)||this}return i(t,e),t.init_VTKVolumePlot=function(){this.prototype.default_view=l,this.define({data:[o.Instance],shadow:[o.Boolean,!0],sampling:[o.Number,.4],edge_gradient:[o.Number,.2],colormap:[o.String],rescale:[o.Boolean,!1],ambient:[o.Number,.2],diffuse:[o.Number,.7],specular:[o.Number,.3],specular_power:[o.Number,8],slice_i:[o.Int,0],slice_j:[o.Int,0],slice_k:[o.Int,0],display_volume:[o.Boolean,!0],display_slices:[o.Boolean,!1],render_background:[o.String,\"#52576e\"],interpolation:[o.Any,\"fast_linear\"],mapper:[o.Instance]})},t.__name__=\"VTKVolumePlot\",t}(s.AbstractVTKPlot);n.VTKVolumePlot=c,c.init_VTKVolumePlot()},\n \"5bc27423fe\": function _(t,e,i){var s,n=this&&this.__extends||(s=function(t,e){return(s=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var i in e)e.hasOwnProperty(i)&&(t[i]=e[i])})(t,e)},function(t,e){function i(){this.constructor=t}s(t,e),t.prototype=null===e?Object.create(e):(i.prototype=e.prototype,new i)}),r=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var i in t)Object.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e.default=t,e},a=t(\"66e1dbda7d\"),c=t(\"@bokehjs/model\"),o=r(t(\"@bokehjs/core/properties\")),l=t(\"3b847a648d\"),h=function(t){function e(e){return t.call(this,e)||this}return n(e,t),e.init_VTKAxes=function(){this.define({origin:[o.Array],xticker:[o.Instance],yticker:[o.Instance],zticker:[o.Instance],digits:[o.Number,1],show_grid:[o.Boolean,!0],grid_opacity:[o.Number,.1],axes_opacity:[o.Number,1],fontsize:[o.Number,12]})},Object.defineProperty(e.prototype,\"xticks\",{get:function(){return this.xticker.ticks},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"yticks\",{get:function(){return this.yticker.ticks},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"zticks\",{get:function(){return this.zticker.ticks},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"xlabels\",{get:function(){var t=this;return this.xticker.labels?this.xticker.labels:this.xticks.map(function(e){return e.toFixed(t.digits)})},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"ylabels\",{get:function(){var t=this;return this.yticker.labels?this.yticker.labels:this.yticks.map(function(e){return e.toFixed(t.digits)})},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"zlabels\",{get:function(){var t=this;return this.zticker.labels?this.zticker.labels:this.zticks.map(function(e){return e.toFixed(t.digits)})},enumerable:!0,configurable:!0}),e.prototype._make_grid_lines=function(t,e,i){for(var s=[],n=0;n=e.xticks.length&&i0?(n[0]=2*(M*h+c*r+s*u-f*e)/b,n[1]=2*(s*h+c*e+f*r-M*u)/b,n[2]=2*(f*h+c*u+M*e-s*r)/b):(n[0]=2*(M*h+c*r+s*u-f*e),n[1]=2*(s*h+c*e+f*r-M*u),n[2]=2*(f*h+c*u+M*e-s*r));return i(t,a,n),t},n.getTranslation=function(t,a){return t[0]=a[12],t[1]=a[13],t[2]=a[14],t},n.getScaling=M,n.getRotation=function(t,a){var n=new o.ARRAY_TYPE(3);M(n,a);var r=1/n[0],e=1/n[1],u=1/n[2],h=a[0]*r,i=a[1]*e,s=a[2]*u,f=a[4]*r,c=a[5]*e,b=a[6]*u,l=a[8]*r,v=a[9]*e,m=a[10]*u,p=h+c+m,y=0;p>0?(y=2*Math.sqrt(p+1),t[3]=.25*y,t[0]=(b-v)/y,t[1]=(l-s)/y,t[2]=(i-f)/y):h>c&&h>m?(y=2*Math.sqrt(1+h-c-m),t[3]=(b-v)/y,t[0]=.25*y,t[1]=(i+f)/y,t[2]=(l+s)/y):c>m?(y=2*Math.sqrt(1+c-h-m),t[3]=(l-s)/y,t[0]=(i+f)/y,t[1]=.25*y,t[2]=(b+v)/y):(y=2*Math.sqrt(1+m-h-c),t[3]=(i-f)/y,t[0]=(l+s)/y,t[1]=(b+v)/y,t[2]=.25*y);return t},n.fromRotationTranslationScale=function(t,a,n,r){var o=a[0],e=a[1],u=a[2],h=a[3],i=o+o,M=e+e,s=u+u,f=o*i,c=o*M,b=o*s,l=e*M,v=e*s,m=u*s,p=h*i,y=h*M,P=h*s,S=r[0],O=r[1],E=r[2];return t[0]=(1-(l+m))*S,t[1]=(c+P)*S,t[2]=(b-y)*S,t[3]=0,t[4]=(c-P)*O,t[5]=(1-(f+m))*O,t[6]=(v+p)*O,t[7]=0,t[8]=(b+y)*E,t[9]=(v-p)*E,t[10]=(1-(f+l))*E,t[11]=0,t[12]=n[0],t[13]=n[1],t[14]=n[2],t[15]=1,t},n.fromRotationTranslationScaleOrigin=function(t,a,n,r,o){var e=a[0],u=a[1],h=a[2],i=a[3],M=e+e,s=u+u,f=h+h,c=e*M,b=e*s,l=e*f,v=u*s,m=u*f,p=h*f,y=i*M,P=i*s,S=i*f,O=r[0],E=r[1],I=r[2],L=o[0],N=o[1],R=o[2],x=(1-(v+p))*O,d=(b+S)*O,g=(l-P)*O,A=(b-S)*E,Y=(1-(c+p))*E,T=(m+y)*E,w=(l+P)*I,_=(m-y)*I,q=(1-(c+v))*I;return t[0]=x,t[1]=d,t[2]=g,t[3]=0,t[4]=A,t[5]=Y,t[6]=T,t[7]=0,t[8]=w,t[9]=_,t[10]=q,t[11]=0,t[12]=n[0]+L-(x*L+A*N+w*R),t[13]=n[1]+N-(d*L+Y*N+_*R),t[14]=n[2]+R-(g*L+T*N+q*R),t[15]=1,t},n.fromQuat=function(t,a){var n=a[0],r=a[1],o=a[2],e=a[3],u=n+n,h=r+r,i=o+o,M=n*u,s=r*u,f=r*h,c=o*u,b=o*h,l=o*i,v=e*u,m=e*h,p=e*i;return t[0]=1-f-l,t[1]=s+p,t[2]=c-m,t[3]=0,t[4]=s-p,t[5]=1-M-l,t[6]=b+v,t[7]=0,t[8]=c+m,t[9]=b-v,t[10]=1-M-f,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},n.frustum=function(t,a,n,r,o,e,u){var h=1/(n-a),i=1/(o-r),M=1/(e-u);return t[0]=2*e*h,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=2*e*i,t[6]=0,t[7]=0,t[8]=(n+a)*h,t[9]=(o+r)*i,t[10]=(u+e)*M,t[11]=-1,t[12]=0,t[13]=0,t[14]=u*e*2*M,t[15]=0,t},n.perspective=function(t,a,n,r,o){var e,u=1/Math.tan(a/2);t[0]=u/n,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=u,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[11]=-1,t[12]=0,t[13]=0,t[15]=0,null!=o&&o!==1/0?(e=1/(r-o),t[10]=(o+r)*e,t[14]=2*o*r*e):(t[10]=-1,t[14]=-2*r);return t},n.perspectiveFromFieldOfView=function(t,a,n,r){var o=Math.tan(a.upDegrees*Math.PI/180),e=Math.tan(a.downDegrees*Math.PI/180),u=Math.tan(a.leftDegrees*Math.PI/180),h=Math.tan(a.rightDegrees*Math.PI/180),i=2/(u+h),M=2/(o+e);return t[0]=i,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=M,t[6]=0,t[7]=0,t[8]=-(u-h)*i*.5,t[9]=(o-e)*M*.5,t[10]=r/(n-r),t[11]=-1,t[12]=0,t[13]=0,t[14]=r*n/(n-r),t[15]=0,t},n.ortho=function(t,a,n,r,o,e,u){var h=1/(a-n),i=1/(r-o),M=1/(e-u);return t[0]=-2*h,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*i,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=2*M,t[11]=0,t[12]=(a+n)*h,t[13]=(o+r)*i,t[14]=(u+e)*M,t[15]=1,t},n.lookAt=function(t,a,n,r){var e,h,i,M,s,f,c,b,l,v,m=a[0],p=a[1],y=a[2],P=r[0],S=r[1],O=r[2],E=n[0],I=n[1],L=n[2];if(Math.abs(m-E)0&&(b=1/Math.sqrt(b),s*=b,f*=b,c*=b);var l=i*c-M*f,v=M*s-h*c,m=h*f-i*s;(b=l*l+v*v+m*m)>0&&(b=1/Math.sqrt(b),l*=b,v*=b,m*=b);return t[0]=l,t[1]=v,t[2]=m,t[3]=0,t[4]=f*m-c*v,t[5]=c*l-s*m,t[6]=s*v-f*l,t[7]=0,t[8]=s,t[9]=f,t[10]=c,t[11]=0,t[12]=o,t[13]=e,t[14]=u,t[15]=1,t},n.str=function(t){return\"mat4(\"+t[0]+\", \"+t[1]+\", \"+t[2]+\", \"+t[3]+\", \"+t[4]+\", \"+t[5]+\", \"+t[6]+\", \"+t[7]+\", \"+t[8]+\", \"+t[9]+\", \"+t[10]+\", \"+t[11]+\", \"+t[12]+\", \"+t[13]+\", \"+t[14]+\", \"+t[15]+\")\"},n.frob=function(t){return Math.hypot(t[0],t[1],t[2],t[3],t[4],t[5],t[6],t[7],t[8],t[9],t[10],t[11],t[12],t[13],t[14],t[15])},n.add=function(t,a,n){return t[0]=a[0]+n[0],t[1]=a[1]+n[1],t[2]=a[2]+n[2],t[3]=a[3]+n[3],t[4]=a[4]+n[4],t[5]=a[5]+n[5],t[6]=a[6]+n[6],t[7]=a[7]+n[7],t[8]=a[8]+n[8],t[9]=a[9]+n[9],t[10]=a[10]+n[10],t[11]=a[11]+n[11],t[12]=a[12]+n[12],t[13]=a[13]+n[13],t[14]=a[14]+n[14],t[15]=a[15]+n[15],t},n.subtract=s,n.multiplyScalar=function(t,a,n){return t[0]=a[0]*n,t[1]=a[1]*n,t[2]=a[2]*n,t[3]=a[3]*n,t[4]=a[4]*n,t[5]=a[5]*n,t[6]=a[6]*n,t[7]=a[7]*n,t[8]=a[8]*n,t[9]=a[9]*n,t[10]=a[10]*n,t[11]=a[11]*n,t[12]=a[12]*n,t[13]=a[13]*n,t[14]=a[14]*n,t[15]=a[15]*n,t},n.multiplyScalarAndAdd=function(t,a,n,r){return t[0]=a[0]+n[0]*r,t[1]=a[1]+n[1]*r,t[2]=a[2]+n[2]*r,t[3]=a[3]+n[3]*r,t[4]=a[4]+n[4]*r,t[5]=a[5]+n[5]*r,t[6]=a[6]+n[6]*r,t[7]=a[7]+n[7]*r,t[8]=a[8]+n[8]*r,t[9]=a[9]+n[9]*r,t[10]=a[10]+n[10]*r,t[11]=a[11]+n[11]*r,t[12]=a[12]+n[12]*r,t[13]=a[13]+n[13]*r,t[14]=a[14]+n[14]*r,t[15]=a[15]+n[15]*r,t},n.exactEquals=function(t,a){return t[0]===a[0]&&t[1]===a[1]&&t[2]===a[2]&&t[3]===a[3]&&t[4]===a[4]&&t[5]===a[5]&&t[6]===a[6]&&t[7]===a[7]&&t[8]===a[8]&&t[9]===a[9]&&t[10]===a[10]&&t[11]===a[11]&&t[12]===a[12]&&t[13]===a[13]&&t[14]===a[14]&&t[15]===a[15]},n.equals=function(t,a){var n=t[0],r=t[1],e=t[2],u=t[3],h=t[4],i=t[5],M=t[6],s=t[7],f=t[8],c=t[9],b=t[10],l=t[11],v=t[12],m=t[13],p=t[14],y=t[15],P=a[0],S=a[1],O=a[2],E=a[3],I=a[4],L=a[5],N=a[6],R=a[7],x=a[8],d=a[9],g=a[10],A=a[11],Y=a[12],T=a[13],w=a[14],_=a[15];return Math.abs(n-P)<=o.EPSILON*Math.max(1,Math.abs(n),Math.abs(P))&&Math.abs(r-S)<=o.EPSILON*Math.max(1,Math.abs(r),Math.abs(S))&&Math.abs(e-O)<=o.EPSILON*Math.max(1,Math.abs(e),Math.abs(O))&&Math.abs(u-E)<=o.EPSILON*Math.max(1,Math.abs(u),Math.abs(E))&&Math.abs(h-I)<=o.EPSILON*Math.max(1,Math.abs(h),Math.abs(I))&&Math.abs(i-L)<=o.EPSILON*Math.max(1,Math.abs(i),Math.abs(L))&&Math.abs(M-N)<=o.EPSILON*Math.max(1,Math.abs(M),Math.abs(N))&&Math.abs(s-R)<=o.EPSILON*Math.max(1,Math.abs(s),Math.abs(R))&&Math.abs(f-x)<=o.EPSILON*Math.max(1,Math.abs(f),Math.abs(x))&&Math.abs(c-d)<=o.EPSILON*Math.max(1,Math.abs(c),Math.abs(d))&&Math.abs(b-g)<=o.EPSILON*Math.max(1,Math.abs(b),Math.abs(g))&&Math.abs(l-A)<=o.EPSILON*Math.max(1,Math.abs(l),Math.abs(A))&&Math.abs(v-Y)<=o.EPSILON*Math.max(1,Math.abs(v),Math.abs(Y))&&Math.abs(m-T)<=o.EPSILON*Math.max(1,Math.abs(m),Math.abs(T))&&Math.abs(p-w)<=o.EPSILON*Math.max(1,Math.abs(p),Math.abs(w))&&Math.abs(y-_)<=o.EPSILON*Math.max(1,Math.abs(y),Math.abs(_))},n.sub=n.mul=void 0;var o=function(t){if(t&&t.__esModule)return t;if(null===t||\"object\"!==r(t)&&\"function\"!=typeof t)return{default:t};var a=e();if(a&&a.has(t))return a.get(t);var n={},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var u in t)if(Object.prototype.hasOwnProperty.call(t,u)){var h=o?Object.getOwnPropertyDescriptor(t,u):null;h&&(h.get||h.set)?Object.defineProperty(n,u,h):n[u]=t[u]}n.default=t,a&&a.set(t,n);return n}(t(\"c6b4e451bc\"));function e(){if(\"function\"!=typeof WeakMap)return null;var t=new WeakMap;return e=function(){return t},t}function u(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}function h(t,a,n){var r=a[0],o=a[1],e=a[2],u=a[3],h=a[4],i=a[5],M=a[6],s=a[7],f=a[8],c=a[9],b=a[10],l=a[11],v=a[12],m=a[13],p=a[14],y=a[15],P=n[0],S=n[1],O=n[2],E=n[3];return t[0]=P*r+S*h+O*f+E*v,t[1]=P*o+S*i+O*c+E*m,t[2]=P*e+S*M+O*b+E*p,t[3]=P*u+S*s+O*l+E*y,P=n[4],S=n[5],O=n[6],E=n[7],t[4]=P*r+S*h+O*f+E*v,t[5]=P*o+S*i+O*c+E*m,t[6]=P*e+S*M+O*b+E*p,t[7]=P*u+S*s+O*l+E*y,P=n[8],S=n[9],O=n[10],E=n[11],t[8]=P*r+S*h+O*f+E*v,t[9]=P*o+S*i+O*c+E*m,t[10]=P*e+S*M+O*b+E*p,t[11]=P*u+S*s+O*l+E*y,P=n[12],S=n[13],O=n[14],E=n[15],t[12]=P*r+S*h+O*f+E*v,t[13]=P*o+S*i+O*c+E*m,t[14]=P*e+S*M+O*b+E*p,t[15]=P*u+S*s+O*l+E*y,t}function i(t,a,n){var r=a[0],o=a[1],e=a[2],u=a[3],h=r+r,i=o+o,M=e+e,s=r*h,f=r*i,c=r*M,b=o*i,l=o*M,v=e*M,m=u*h,p=u*i,y=u*M;return t[0]=1-(b+v),t[1]=f+y,t[2]=c-p,t[3]=0,t[4]=f-y,t[5]=1-(s+v),t[6]=l+m,t[7]=0,t[8]=c+p,t[9]=l-m,t[10]=1-(s+b),t[11]=0,t[12]=n[0],t[13]=n[1],t[14]=n[2],t[15]=1,t}function M(t,a){var n=a[0],r=a[1],o=a[2],e=a[4],u=a[5],h=a[6],i=a[8],M=a[9],s=a[10];return t[0]=Math.hypot(n,r,o),t[1]=Math.hypot(e,u,h),t[2]=Math.hypot(i,M,s),t}function s(t,a,n){return t[0]=a[0]-n[0],t[1]=a[1]-n[1],t[2]=a[2]-n[2],t[3]=a[3]-n[3],t[4]=a[4]-n[4],t[5]=a[5]-n[5],t[6]=a[6]-n[6],t[7]=a[7]-n[7],t[8]=a[8]-n[8],t[9]=a[9]-n[9],t[10]=a[10]-n[10],t[11]=a[11]-n[11],t[12]=a[12]-n[12],t[13]=a[13]-n[13],t[14]=a[14]-n[14],t[15]=a[15]-n[15],t}var f=h;n.mul=f;var c=s;n.sub=c},\n \"8b81ae2f8b\": function _(t,r,n){function e(t){return(e=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t})(t)}n.create=l,n.identity=function(t){return t[0]=0,t[1]=0,t[2]=0,t[3]=1,t},n.setAxisAngle=f,n.getAxisAngle=function(t,r){var n=2*Math.acos(r[3]),e=Math.sin(n/2);e>a.EPSILON?(t[0]=r[0]/e,t[1]=r[1]/e,t[2]=r[2]/e):(t[0]=1,t[1]=0,t[2]=0);return n},n.getAngle=function(t,r){var n=O(t,r);return Math.acos(2*n*n-1)},n.multiply=h,n.rotateX=function(t,r,n){n*=.5;var e=r[0],a=r[1],o=r[2],u=r[3],s=Math.sin(n),c=Math.cos(n);return t[0]=e*c+u*s,t[1]=a*c+o*s,t[2]=o*c-a*s,t[3]=u*c-e*s,t},n.rotateY=function(t,r,n){n*=.5;var e=r[0],a=r[1],o=r[2],u=r[3],s=Math.sin(n),c=Math.cos(n);return t[0]=e*c-o*s,t[1]=a*c+u*s,t[2]=o*c+e*s,t[3]=u*c-a*s,t},n.rotateZ=function(t,r,n){n*=.5;var e=r[0],a=r[1],o=r[2],u=r[3],s=Math.sin(n),c=Math.cos(n);return t[0]=e*c+a*s,t[1]=a*c-e*s,t[2]=o*c+u*s,t[3]=u*c-o*s,t},n.calculateW=function(t,r){var n=r[0],e=r[1],a=r[2];return t[0]=n,t[1]=e,t[2]=a,t[3]=Math.sqrt(Math.abs(1-n*n-e*e-a*a)),t},n.exp=M,n.ln=v,n.pow=function(t,r,n){return v(t,r),P(t,t,n),M(t,t),t},n.slerp=p,n.random=function(t){var r=a.RANDOM(),n=a.RANDOM(),e=a.RANDOM(),o=Math.sqrt(1-r),u=Math.sqrt(r);return t[0]=o*Math.sin(2*Math.PI*n),t[1]=o*Math.cos(2*Math.PI*n),t[2]=u*Math.sin(2*Math.PI*e),t[3]=u*Math.cos(2*Math.PI*e),t},n.invert=function(t,r){var n=r[0],e=r[1],a=r[2],o=r[3],u=n*n+e*e+a*a+o*o,s=u?1/u:0;return t[0]=-n*s,t[1]=-e*s,t[2]=-a*s,t[3]=o*s,t},n.conjugate=function(t,r){return t[0]=-r[0],t[1]=-r[1],t[2]=-r[2],t[3]=r[3],t},n.fromMat3=y,n.fromEuler=function(t,r,n,e){var a=.5*Math.PI/180;r*=a,n*=a,e*=a;var o=Math.sin(r),u=Math.cos(r),s=Math.sin(n),c=Math.cos(n),i=Math.sin(e),l=Math.cos(e);return t[0]=o*c*l-u*s*i,t[1]=u*s*l+o*c*i,t[2]=u*c*i-o*s*l,t[3]=u*c*l+o*s*i,t},n.str=function(t){return\"quat(\"+t[0]+\", \"+t[1]+\", \"+t[2]+\", \"+t[3]+\")\"},n.setAxes=n.sqlerp=n.rotationTo=n.equals=n.exactEquals=n.normalize=n.sqrLen=n.squaredLength=n.len=n.length=n.lerp=n.dot=n.scale=n.mul=n.add=n.set=n.copy=n.fromValues=n.clone=void 0;var a=i(t(\"c6b4e451bc\")),o=i(t(\"4dc492e8e1\")),u=i(t(\"2e13827733\")),s=i(t(\"03254e8a21\"));function c(){if(\"function\"!=typeof WeakMap)return null;var t=new WeakMap;return c=function(){return t},t}function i(t){if(t&&t.__esModule)return t;if(null===t||\"object\"!==e(t)&&\"function\"!=typeof t)return{default:t};var r=c();if(r&&r.has(t))return r.get(t);var n={},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in t)if(Object.prototype.hasOwnProperty.call(t,o)){var u=a?Object.getOwnPropertyDescriptor(t,o):null;u&&(u.get||u.set)?Object.defineProperty(n,o,u):n[o]=t[o]}return n.default=t,r&&r.set(t,n),n}function l(){var t=new a.ARRAY_TYPE(4);return a.ARRAY_TYPE!=Float32Array&&(t[0]=0,t[1]=0,t[2]=0),t[3]=1,t}function f(t,r,n){n*=.5;var e=Math.sin(n);return t[0]=e*r[0],t[1]=e*r[1],t[2]=e*r[2],t[3]=Math.cos(n),t}function h(t,r,n){var e=r[0],a=r[1],o=r[2],u=r[3],s=n[0],c=n[1],i=n[2],l=n[3];return t[0]=e*l+u*s+a*i-o*c,t[1]=a*l+u*c+o*s-e*i,t[2]=o*l+u*i+e*c-a*s,t[3]=u*l-e*s-a*c-o*i,t}function M(t,r){var n=r[0],e=r[1],a=r[2],o=r[3],u=Math.sqrt(n*n+e*e+a*a),s=Math.exp(o),c=u>0?s*Math.sin(u)/u:0;return t[0]=n*c,t[1]=e*c,t[2]=a*c,t[3]=s*Math.cos(u),t}function v(t,r){var n=r[0],e=r[1],a=r[2],o=r[3],u=Math.sqrt(n*n+e*e+a*a),s=u>0?Math.atan2(u,o)/u:0;return t[0]=n*s,t[1]=e*s,t[2]=a*s,t[3]=.5*Math.log(n*n+e*e+a*a+o*o),t}function p(t,r,n,e){var o,u,s,c,i,l=r[0],f=r[1],h=r[2],M=r[3],v=n[0],p=n[1],y=n[2],d=n[3];return(u=l*v+f*p+h*y+M*d)<0&&(u=-u,v=-v,p=-p,y=-y,d=-d),1-u>a.EPSILON?(o=Math.acos(u),s=Math.sin(o),c=Math.sin((1-e)*o)/s,i=Math.sin(e*o)/s):(c=1-e,i=e),t[0]=c*l+i*v,t[1]=c*f+i*p,t[2]=c*h+i*y,t[3]=c*M+i*d,t}function y(t,r){var n,e=r[0]+r[4]+r[8];if(e>0)n=Math.sqrt(e+1),t[3]=.5*n,n=.5/n,t[0]=(r[5]-r[7])*n,t[1]=(r[6]-r[2])*n,t[2]=(r[1]-r[3])*n;else{var a=0;r[4]>r[0]&&(a=1),r[8]>r[3*a+a]&&(a=2);var o=(a+1)%3,u=(a+2)%3;n=Math.sqrt(r[3*a+a]-r[3*o+o]-r[3*u+u]+1),t[a]=.5*n,n=.5/n,t[3]=(r[3*o+u]-r[3*u+o])*n,t[o]=(r[3*o+a]+r[3*a+o])*n,t[u]=(r[3*u+a]+r[3*a+u])*n}return t}var d=s.clone;n.clone=d;var m=s.fromValues;n.fromValues=m;var q=s.copy;n.copy=q;var g=s.set;n.set=g;var b=s.add;n.add=b;var A=h;n.mul=A;var P=s.scale;n.scale=P;var O=s.dot;n.dot=O;var x=s.lerp;n.lerp=x;var E=s.length;n.length=E;var I=E;n.len=I;var j=s.squaredLength;n.squaredLength=j;var L=j;n.sqrLen=L;var R=s.normalize;n.normalize=R;var S=s.exactEquals;n.exactEquals=S;var w=s.equals;n.equals=w;var D,N,V,Y=(D=u.create(),N=u.fromValues(1,0,0),V=u.fromValues(0,1,0),function(t,r,n){var e=u.dot(r,n);return e<-.999999?(u.cross(D,N,r),u.len(D)<1e-6&&u.cross(D,V,r),u.normalize(D,D),f(t,D,Math.PI),t):e>.999999?(t[0]=0,t[1]=0,t[2]=0,t[3]=1,t):(u.cross(D,r,n),t[0]=D[0],t[1]=D[1],t[2]=D[2],t[3]=1+e,R(t,t))});n.rotationTo=Y;var _,z,T=(_=l(),z=l(),function(t,r,n,e,a,o){return p(_,r,a,o),p(z,n,e,o),p(t,_,z,2*o*(1-o)),t});n.sqlerp=T;var W,k=(W=o.create(),function(t,r,n,e){return W[0]=n[0],W[3]=n[1],W[6]=n[2],W[1]=e[0],W[4]=e[1],W[7]=e[2],W[2]=-r[0],W[5]=-r[1],W[8]=-r[2],R(t,y(t,W))});n.setAxes=k},\n \"2e13827733\": function _(t,n,r){function a(t){return(a=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t})(t)}r.create=o,r.clone=function(t){var n=new e.ARRAY_TYPE(3);return n[0]=t[0],n[1]=t[1],n[2]=t[2],n},r.length=i,r.fromValues=function(t,n,r){var a=new e.ARRAY_TYPE(3);return a[0]=t,a[1]=n,a[2]=r,a},r.copy=function(t,n){return t[0]=n[0],t[1]=n[1],t[2]=n[2],t},r.set=function(t,n,r,a){return t[0]=n,t[1]=r,t[2]=a,t},r.add=function(t,n,r){return t[0]=n[0]+r[0],t[1]=n[1]+r[1],t[2]=n[2]+r[2],t},r.subtract=c,r.multiply=f,r.divide=s,r.ceil=function(t,n){return t[0]=Math.ceil(n[0]),t[1]=Math.ceil(n[1]),t[2]=Math.ceil(n[2]),t},r.floor=function(t,n){return t[0]=Math.floor(n[0]),t[1]=Math.floor(n[1]),t[2]=Math.floor(n[2]),t},r.min=function(t,n,r){return t[0]=Math.min(n[0],r[0]),t[1]=Math.min(n[1],r[1]),t[2]=Math.min(n[2],r[2]),t},r.max=function(t,n,r){return t[0]=Math.max(n[0],r[0]),t[1]=Math.max(n[1],r[1]),t[2]=Math.max(n[2],r[2]),t},r.round=function(t,n){return t[0]=Math.round(n[0]),t[1]=Math.round(n[1]),t[2]=Math.round(n[2]),t},r.scale=function(t,n,r){return t[0]=n[0]*r,t[1]=n[1]*r,t[2]=n[2]*r,t},r.scaleAndAdd=function(t,n,r,a){return t[0]=n[0]+r[0]*a,t[1]=n[1]+r[1]*a,t[2]=n[2]+r[2]*a,t},r.distance=h,r.squaredDistance=M,r.squaredLength=l,r.negate=function(t,n){return t[0]=-n[0],t[1]=-n[1],t[2]=-n[2],t},r.inverse=function(t,n){return t[0]=1/n[0],t[1]=1/n[1],t[2]=1/n[2],t},r.normalize=function(t,n){var r=n[0],a=n[1],e=n[2],u=r*r+a*a+e*e;u>0&&(u=1/Math.sqrt(u));return t[0]=n[0]*u,t[1]=n[1]*u,t[2]=n[2]*u,t},r.dot=v,r.cross=function(t,n,r){var a=n[0],e=n[1],u=n[2],o=r[0],i=r[1],c=r[2];return t[0]=e*c-u*i,t[1]=u*o-a*c,t[2]=a*i-e*o,t},r.lerp=function(t,n,r,a){var e=n[0],u=n[1],o=n[2];return t[0]=e+a*(r[0]-e),t[1]=u+a*(r[1]-u),t[2]=o+a*(r[2]-o),t},r.hermite=function(t,n,r,a,e,u){var o=u*u,i=o*(2*u-3)+1,c=o*(u-2)+u,f=o*(u-1),s=o*(3-2*u);return t[0]=n[0]*i+r[0]*c+a[0]*f+e[0]*s,t[1]=n[1]*i+r[1]*c+a[1]*f+e[1]*s,t[2]=n[2]*i+r[2]*c+a[2]*f+e[2]*s,t},r.bezier=function(t,n,r,a,e,u){var o=1-u,i=o*o,c=u*u,f=i*o,s=3*u*i,h=3*c*o,M=c*u;return t[0]=n[0]*f+r[0]*s+a[0]*h+e[0]*M,t[1]=n[1]*f+r[1]*s+a[1]*h+e[1]*M,t[2]=n[2]*f+r[2]*s+a[2]*h+e[2]*M,t},r.random=function(t,n){n=n||1;var r=2*e.RANDOM()*Math.PI,a=2*e.RANDOM()-1,u=Math.sqrt(1-a*a)*n;return t[0]=Math.cos(r)*u,t[1]=Math.sin(r)*u,t[2]=a*n,t},r.transformMat4=function(t,n,r){var a=n[0],e=n[1],u=n[2],o=r[3]*a+r[7]*e+r[11]*u+r[15];return o=o||1,t[0]=(r[0]*a+r[4]*e+r[8]*u+r[12])/o,t[1]=(r[1]*a+r[5]*e+r[9]*u+r[13])/o,t[2]=(r[2]*a+r[6]*e+r[10]*u+r[14])/o,t},r.transformMat3=function(t,n,r){var a=n[0],e=n[1],u=n[2];return t[0]=a*r[0]+e*r[3]+u*r[6],t[1]=a*r[1]+e*r[4]+u*r[7],t[2]=a*r[2]+e*r[5]+u*r[8],t},r.transformQuat=function(t,n,r){var a=r[0],e=r[1],u=r[2],o=r[3],i=n[0],c=n[1],f=n[2],s=e*f-u*c,h=u*i-a*f,M=a*c-e*i,l=e*M-u*h,v=u*s-a*M,m=a*h-e*s,b=2*o;return s*=b,h*=b,M*=b,l*=2,v*=2,m*=2,t[0]=i+s+l,t[1]=c+h+v,t[2]=f+M+m,t},r.rotateX=function(t,n,r,a){var e=[],u=[];return e[0]=n[0]-r[0],e[1]=n[1]-r[1],e[2]=n[2]-r[2],u[0]=e[0],u[1]=e[1]*Math.cos(a)-e[2]*Math.sin(a),u[2]=e[1]*Math.sin(a)+e[2]*Math.cos(a),t[0]=u[0]+r[0],t[1]=u[1]+r[1],t[2]=u[2]+r[2],t},r.rotateY=function(t,n,r,a){var e=[],u=[];return e[0]=n[0]-r[0],e[1]=n[1]-r[1],e[2]=n[2]-r[2],u[0]=e[2]*Math.sin(a)+e[0]*Math.cos(a),u[1]=e[1],u[2]=e[2]*Math.cos(a)-e[0]*Math.sin(a),t[0]=u[0]+r[0],t[1]=u[1]+r[1],t[2]=u[2]+r[2],t},r.rotateZ=function(t,n,r,a){var e=[],u=[];return e[0]=n[0]-r[0],e[1]=n[1]-r[1],e[2]=n[2]-r[2],u[0]=e[0]*Math.cos(a)-e[1]*Math.sin(a),u[1]=e[0]*Math.sin(a)+e[1]*Math.cos(a),u[2]=e[2],t[0]=u[0]+r[0],t[1]=u[1]+r[1],t[2]=u[2]+r[2],t},r.angle=function(t,n){var r=t[0],a=t[1],e=t[2],u=n[0],o=n[1],i=n[2],c=Math.sqrt(r*r+a*a+e*e),f=Math.sqrt(u*u+o*o+i*i),s=c*f,h=s&&v(t,n)/s;return Math.acos(Math.min(Math.max(h,-1),1))},r.zero=function(t){return t[0]=0,t[1]=0,t[2]=0,t},r.str=function(t){return\"vec3(\"+t[0]+\", \"+t[1]+\", \"+t[2]+\")\"},r.exactEquals=function(t,n){return t[0]===n[0]&&t[1]===n[1]&&t[2]===n[2]},r.equals=function(t,n){var r=t[0],a=t[1],u=t[2],o=n[0],i=n[1],c=n[2];return Math.abs(r-o)<=e.EPSILON*Math.max(1,Math.abs(r),Math.abs(o))&&Math.abs(a-i)<=e.EPSILON*Math.max(1,Math.abs(a),Math.abs(i))&&Math.abs(u-c)<=e.EPSILON*Math.max(1,Math.abs(u),Math.abs(c))},r.forEach=r.sqrLen=r.len=r.sqrDist=r.dist=r.div=r.mul=r.sub=void 0;var e=function(t){if(t&&t.__esModule)return t;if(null===t||\"object\"!==a(t)&&\"function\"!=typeof t)return{default:t};var n=u();if(n&&n.has(t))return n.get(t);var r={},e=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in t)if(Object.prototype.hasOwnProperty.call(t,o)){var i=e?Object.getOwnPropertyDescriptor(t,o):null;i&&(i.get||i.set)?Object.defineProperty(r,o,i):r[o]=t[o]}r.default=t,n&&n.set(t,r);return r}(t(\"c6b4e451bc\"));function u(){if(\"function\"!=typeof WeakMap)return null;var t=new WeakMap;return u=function(){return t},t}function o(){var t=new e.ARRAY_TYPE(3);return e.ARRAY_TYPE!=Float32Array&&(t[0]=0,t[1]=0,t[2]=0),t}function i(t){var n=t[0],r=t[1],a=t[2];return Math.hypot(n,r,a)}function c(t,n,r){return t[0]=n[0]-r[0],t[1]=n[1]-r[1],t[2]=n[2]-r[2],t}function f(t,n,r){return t[0]=n[0]*r[0],t[1]=n[1]*r[1],t[2]=n[2]*r[2],t}function s(t,n,r){return t[0]=n[0]/r[0],t[1]=n[1]/r[1],t[2]=n[2]/r[2],t}function h(t,n){var r=n[0]-t[0],a=n[1]-t[1],e=n[2]-t[2];return Math.hypot(r,a,e)}function M(t,n){var r=n[0]-t[0],a=n[1]-t[1],e=n[2]-t[2];return r*r+a*a+e*e}function l(t){var n=t[0],r=t[1],a=t[2];return n*n+r*r+a*a}function v(t,n){return t[0]*n[0]+t[1]*n[1]+t[2]*n[2]}var m=c;r.sub=m;var b=f;r.mul=b;var d=s;r.div=d;var y=h;r.dist=y;var p=M;r.sqrDist=p;var A=i;r.len=A;var O=l;r.sqrLen=O;var P,q=(P=o(),function(t,n,r,a,e,u){var o,i;for(n||(n=3),r||(r=0),i=a?Math.min(a*n+r,t.length):t.length,o=r;o0&&(o=1/Math.sqrt(o));return t[0]=r*o,t[1]=a*o,t[2]=e*o,t[3]=u*o,t},r.dot=function(t,n){return t[0]*n[0]+t[1]*n[1]+t[2]*n[2]+t[3]*n[3]},r.cross=function(t,n,r,a){var e=r[0]*a[1]-r[1]*a[0],u=r[0]*a[2]-r[2]*a[0],o=r[0]*a[3]-r[3]*a[0],i=r[1]*a[2]-r[2]*a[1],c=r[1]*a[3]-r[3]*a[1],f=r[2]*a[3]-r[3]*a[2],h=n[0],s=n[1],M=n[2],l=n[3];return t[0]=s*f-M*c+l*i,t[1]=-h*f+M*o-l*u,t[2]=h*c-s*o+l*e,t[3]=-h*i+s*u-M*e,t},r.lerp=function(t,n,r,a){var e=n[0],u=n[1],o=n[2],i=n[3];return t[0]=e+a*(r[0]-e),t[1]=u+a*(r[1]-u),t[2]=o+a*(r[2]-o),t[3]=i+a*(r[3]-i),t},r.random=function(t,n){var r,a,u,o,i,c;n=n||1;do{r=2*e.RANDOM()-1,a=2*e.RANDOM()-1,i=r*r+a*a}while(i>=1);do{u=2*e.RANDOM()-1,o=2*e.RANDOM()-1,c=u*u+o*o}while(c>=1);var f=Math.sqrt((1-i)/c);return t[0]=n*r,t[1]=n*a,t[2]=n*u*f,t[3]=n*o*f,t},r.transformMat4=function(t,n,r){var a=n[0],e=n[1],u=n[2],o=n[3];return t[0]=r[0]*a+r[4]*e+r[8]*u+r[12]*o,t[1]=r[1]*a+r[5]*e+r[9]*u+r[13]*o,t[2]=r[2]*a+r[6]*e+r[10]*u+r[14]*o,t[3]=r[3]*a+r[7]*e+r[11]*u+r[15]*o,t},r.transformQuat=function(t,n,r){var a=n[0],e=n[1],u=n[2],o=r[0],i=r[1],c=r[2],f=r[3],h=f*a+i*u-c*e,s=f*e+c*a-o*u,M=f*u+o*e-i*a,l=-o*a-i*e-c*u;return t[0]=h*f+l*-o+s*-c-M*-i,t[1]=s*f+l*-i+M*-o-h*-c,t[2]=M*f+l*-c+h*-i-s*-o,t[3]=n[3],t},r.zero=function(t){return t[0]=0,t[1]=0,t[2]=0,t[3]=0,t},r.str=function(t){return\"vec4(\"+t[0]+\", \"+t[1]+\", \"+t[2]+\", \"+t[3]+\")\"},r.exactEquals=function(t,n){return t[0]===n[0]&&t[1]===n[1]&&t[2]===n[2]&&t[3]===n[3]},r.equals=function(t,n){var r=t[0],a=t[1],u=t[2],o=t[3],i=n[0],c=n[1],f=n[2],h=n[3];return Math.abs(r-i)<=e.EPSILON*Math.max(1,Math.abs(r),Math.abs(i))&&Math.abs(a-c)<=e.EPSILON*Math.max(1,Math.abs(a),Math.abs(c))&&Math.abs(u-f)<=e.EPSILON*Math.max(1,Math.abs(u),Math.abs(f))&&Math.abs(o-h)<=e.EPSILON*Math.max(1,Math.abs(o),Math.abs(h))},r.forEach=r.sqrLen=r.len=r.sqrDist=r.dist=r.div=r.mul=r.sub=void 0;var e=function(t){if(t&&t.__esModule)return t;if(null===t||\"object\"!==a(t)&&\"function\"!=typeof t)return{default:t};var n=u();if(n&&n.has(t))return n.get(t);var r={},e=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in t)if(Object.prototype.hasOwnProperty.call(t,o)){var i=e?Object.getOwnPropertyDescriptor(t,o):null;i&&(i.get||i.set)?Object.defineProperty(r,o,i):r[o]=t[o]}r.default=t,n&&n.set(t,r);return r}(t(\"c6b4e451bc\"));function u(){if(\"function\"!=typeof WeakMap)return null;var t=new WeakMap;return u=function(){return t},t}function o(){var t=new e.ARRAY_TYPE(4);return e.ARRAY_TYPE!=Float32Array&&(t[0]=0,t[1]=0,t[2]=0,t[3]=0),t}function i(t,n,r){return t[0]=n[0]-r[0],t[1]=n[1]-r[1],t[2]=n[2]-r[2],t[3]=n[3]-r[3],t}function c(t,n,r){return t[0]=n[0]*r[0],t[1]=n[1]*r[1],t[2]=n[2]*r[2],t[3]=n[3]*r[3],t}function f(t,n,r){return t[0]=n[0]/r[0],t[1]=n[1]/r[1],t[2]=n[2]/r[2],t[3]=n[3]/r[3],t}function h(t,n){var r=n[0]-t[0],a=n[1]-t[1],e=n[2]-t[2],u=n[3]-t[3];return Math.hypot(r,a,e,u)}function s(t,n){var r=n[0]-t[0],a=n[1]-t[1],e=n[2]-t[2],u=n[3]-t[3];return r*r+a*a+e*e+u*u}function M(t){var n=t[0],r=t[1],a=t[2],e=t[3];return Math.hypot(n,r,a,e)}function l(t){var n=t[0],r=t[1],a=t[2],e=t[3];return n*n+r*r+a*a+e*e}var v=i;r.sub=v;var b=c;r.mul=b;var m=f;r.div=m;var d=h;r.dist=d;var y=s;r.sqrDist=y;var p=M;r.len=p;var O=l;r.sqrLen=O;var A,P=(A=o(),function(t,n,r,a,e,u){var o,i;for(n||(n=4),r||(r=0),i=a?Math.min(a*n+r,t.length):t.length,o=r;o0){n=Math.sqrt(n);var a=r[0]/n,e=r[1]/n,o=r[2]/n,u=r[3]/n,i=r[4],f=r[5],c=r[6],s=r[7],l=a*i+e*f+o*c+u*s;t[0]=a,t[1]=e,t[2]=o,t[3]=u,t[4]=(i-a*l)/n,t[5]=(f-e*l)/n,t[6]=(c-o*l)/n,t[7]=(s-u*l)/n}return t},n.str=function(t){return\"quat2(\"+t[0]+\", \"+t[1]+\", \"+t[2]+\", \"+t[3]+\", \"+t[4]+\", \"+t[5]+\", \"+t[6]+\", \"+t[7]+\")\"},n.exactEquals=function(t,r){return t[0]===r[0]&&t[1]===r[1]&&t[2]===r[2]&&t[3]===r[3]&&t[4]===r[4]&&t[5]===r[5]&&t[6]===r[6]&&t[7]===r[7]},n.equals=function(t,r){var n=t[0],a=t[1],o=t[2],u=t[3],i=t[4],f=t[5],c=t[6],s=t[7],l=r[0],h=r[1],b=r[2],M=r[3],v=r[4],y=r[5],p=r[6],m=r[7];return Math.abs(n-l)<=e.EPSILON*Math.max(1,Math.abs(n),Math.abs(l))&&Math.abs(a-h)<=e.EPSILON*Math.max(1,Math.abs(a),Math.abs(h))&&Math.abs(o-b)<=e.EPSILON*Math.max(1,Math.abs(o),Math.abs(b))&&Math.abs(u-M)<=e.EPSILON*Math.max(1,Math.abs(u),Math.abs(M))&&Math.abs(i-v)<=e.EPSILON*Math.max(1,Math.abs(i),Math.abs(v))&&Math.abs(f-y)<=e.EPSILON*Math.max(1,Math.abs(f),Math.abs(y))&&Math.abs(c-p)<=e.EPSILON*Math.max(1,Math.abs(c),Math.abs(p))&&Math.abs(s-m)<=e.EPSILON*Math.max(1,Math.abs(s),Math.abs(m))},n.sqrLen=n.squaredLength=n.len=n.length=n.dot=n.mul=n.setReal=n.getReal=void 0;var e=f(t(\"c6b4e451bc\")),o=f(t(\"8b81ae2f8b\")),u=f(t(\"948401a902\"));function i(){if(\"function\"!=typeof WeakMap)return null;var t=new WeakMap;return i=function(){return t},t}function f(t){if(t&&t.__esModule)return t;if(null===t||\"object\"!==a(t)&&\"function\"!=typeof t)return{default:t};var r=i();if(r&&r.has(t))return r.get(t);var n={},e=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in t)if(Object.prototype.hasOwnProperty.call(t,o)){var u=e?Object.getOwnPropertyDescriptor(t,o):null;u&&(u.get||u.set)?Object.defineProperty(n,o,u):n[o]=t[o]}return n.default=t,r&&r.set(t,n),n}function c(t,r,n){var a=.5*n[0],e=.5*n[1],o=.5*n[2],u=r[0],i=r[1],f=r[2],c=r[3];return t[0]=u,t[1]=i,t[2]=f,t[3]=c,t[4]=a*c+e*f-o*i,t[5]=e*c+o*u-a*f,t[6]=o*c+a*i-e*u,t[7]=-a*u-e*i-o*f,t}function s(t,r){return t[0]=r[0],t[1]=r[1],t[2]=r[2],t[3]=r[3],t[4]=r[4],t[5]=r[5],t[6]=r[6],t[7]=r[7],t}var l=o.copy;n.getReal=l;var h=o.copy;function b(t,r,n){var a=r[0],e=r[1],o=r[2],u=r[3],i=n[4],f=n[5],c=n[6],s=n[7],l=r[4],h=r[5],b=r[6],M=r[7],v=n[0],y=n[1],p=n[2],m=n[3];return t[0]=a*m+u*v+e*p-o*y,t[1]=e*m+u*y+o*v-a*p,t[2]=o*m+u*p+a*y-e*v,t[3]=u*m-a*v-e*y-o*p,t[4]=a*s+u*i+e*c-o*f+l*m+M*v+h*p-b*y,t[5]=e*s+u*f+o*i-a*c+h*m+M*y+b*v-l*p,t[6]=o*s+u*c+a*f-e*i+b*m+M*p+l*y-h*v,t[7]=u*s-a*i-e*f-o*c+M*m-l*v-h*y-b*p,t}n.setReal=h;var M=b;n.mul=M;var v=o.dot;n.dot=v;var y=o.length;n.length=y;var p=y;n.len=p;var m=o.squaredLength;n.squaredLength=m;var P=m;n.sqrLen=P},\n \"62ac52b540\": function _(t,n,r){function e(t){return(e=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t})(t)}r.create=o,r.clone=function(t){var n=new a.ARRAY_TYPE(2);return n[0]=t[0],n[1]=t[1],n},r.fromValues=function(t,n){var r=new a.ARRAY_TYPE(2);return r[0]=t,r[1]=n,r},r.copy=function(t,n){return t[0]=n[0],t[1]=n[1],t},r.set=function(t,n,r){return t[0]=n,t[1]=r,t},r.add=function(t,n,r){return t[0]=n[0]+r[0],t[1]=n[1]+r[1],t},r.subtract=i,r.multiply=c,r.divide=f,r.ceil=function(t,n){return t[0]=Math.ceil(n[0]),t[1]=Math.ceil(n[1]),t},r.floor=function(t,n){return t[0]=Math.floor(n[0]),t[1]=Math.floor(n[1]),t},r.min=function(t,n,r){return t[0]=Math.min(n[0],r[0]),t[1]=Math.min(n[1],r[1]),t},r.max=function(t,n,r){return t[0]=Math.max(n[0],r[0]),t[1]=Math.max(n[1],r[1]),t},r.round=function(t,n){return t[0]=Math.round(n[0]),t[1]=Math.round(n[1]),t},r.scale=function(t,n,r){return t[0]=n[0]*r,t[1]=n[1]*r,t},r.scaleAndAdd=function(t,n,r,e){return t[0]=n[0]+r[0]*e,t[1]=n[1]+r[1]*e,t},r.distance=s,r.squaredDistance=l,r.length=h,r.squaredLength=M,r.negate=function(t,n){return t[0]=-n[0],t[1]=-n[1],t},r.inverse=function(t,n){return t[0]=1/n[0],t[1]=1/n[1],t},r.normalize=function(t,n){var r=n[0],e=n[1],a=r*r+e*e;a>0&&(a=1/Math.sqrt(a));return t[0]=n[0]*a,t[1]=n[1]*a,t},r.dot=function(t,n){return t[0]*n[0]+t[1]*n[1]},r.cross=function(t,n,r){var e=n[0]*r[1]-n[1]*r[0];return t[0]=t[1]=0,t[2]=e,t},r.lerp=function(t,n,r,e){var a=n[0],u=n[1];return t[0]=a+e*(r[0]-a),t[1]=u+e*(r[1]-u),t},r.random=function(t,n){n=n||1;var r=2*a.RANDOM()*Math.PI;return t[0]=Math.cos(r)*n,t[1]=Math.sin(r)*n,t},r.transformMat2=function(t,n,r){var e=n[0],a=n[1];return t[0]=r[0]*e+r[2]*a,t[1]=r[1]*e+r[3]*a,t},r.transformMat2d=function(t,n,r){var e=n[0],a=n[1];return t[0]=r[0]*e+r[2]*a+r[4],t[1]=r[1]*e+r[3]*a+r[5],t},r.transformMat3=function(t,n,r){var e=n[0],a=n[1];return t[0]=r[0]*e+r[3]*a+r[6],t[1]=r[1]*e+r[4]*a+r[7],t},r.transformMat4=function(t,n,r){var e=n[0],a=n[1];return t[0]=r[0]*e+r[4]*a+r[12],t[1]=r[1]*e+r[5]*a+r[13],t},r.rotate=function(t,n,r,e){var a=n[0]-r[0],u=n[1]-r[1],o=Math.sin(e),i=Math.cos(e);return t[0]=a*i-u*o+r[0],t[1]=a*o+u*i+r[1],t},r.angle=function(t,n){var r=t[0],e=t[1],a=n[0],u=n[1],o=Math.sqrt(r*r+e*e)*Math.sqrt(a*a+u*u),i=o&&(r*a+e*u)/o;return Math.acos(Math.min(Math.max(i,-1),1))},r.zero=function(t){return t[0]=0,t[1]=0,t},r.str=function(t){return\"vec2(\"+t[0]+\", \"+t[1]+\")\"},r.exactEquals=function(t,n){return t[0]===n[0]&&t[1]===n[1]},r.equals=function(t,n){var r=t[0],e=t[1],u=n[0],o=n[1];return Math.abs(r-u)<=a.EPSILON*Math.max(1,Math.abs(r),Math.abs(u))&&Math.abs(e-o)<=a.EPSILON*Math.max(1,Math.abs(e),Math.abs(o))},r.forEach=r.sqrLen=r.sqrDist=r.dist=r.div=r.mul=r.sub=r.len=void 0;var a=function(t){if(t&&t.__esModule)return t;if(null===t||\"object\"!==e(t)&&\"function\"!=typeof t)return{default:t};var n=u();if(n&&n.has(t))return n.get(t);var r={},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in t)if(Object.prototype.hasOwnProperty.call(t,o)){var i=a?Object.getOwnPropertyDescriptor(t,o):null;i&&(i.get||i.set)?Object.defineProperty(r,o,i):r[o]=t[o]}r.default=t,n&&n.set(t,r);return r}(t(\"c6b4e451bc\"));function u(){if(\"function\"!=typeof WeakMap)return null;var t=new WeakMap;return u=function(){return t},t}function o(){var t=new a.ARRAY_TYPE(2);return a.ARRAY_TYPE!=Float32Array&&(t[0]=0,t[1]=0),t}function i(t,n,r){return t[0]=n[0]-r[0],t[1]=n[1]-r[1],t}function c(t,n,r){return t[0]=n[0]*r[0],t[1]=n[1]*r[1],t}function f(t,n,r){return t[0]=n[0]/r[0],t[1]=n[1]/r[1],t}function s(t,n){var r=n[0]-t[0],e=n[1]-t[1];return Math.hypot(r,e)}function l(t,n){var r=n[0]-t[0],e=n[1]-t[1];return r*r+e*e}function h(t){var n=t[0],r=t[1];return Math.hypot(n,r)}function M(t){var n=t[0],r=t[1];return n*n+r*r}var v=h;r.len=v;var m=i;r.sub=m;var d=c;r.mul=d;var y=f;r.div=y;var p=s;r.dist=p;var b=l;r.sqrDist=b;var A=M;r.sqrLen=A;var P,q=(P=o(),function(t,n,r,e,a,u){var o,i;for(n||(n=2),r||(r=0),i=e?Math.min(e*n+r,t.length):t.length,o=r;o low_limit)\n", + " peak_vals = peak_vals[peak_idxs]\n", + " ratio = peak_vals.mean() / i_dat.mean()\n", + "\n", + " return peak_vals, peak_idxs, ratio\n", + "\n", + "def fit_limits(i0_data, peak_vals, i_low, i_high, bins=100):\n", + " \"\"\"Get the line fit and standard deviation of the plot of i0 vs int_intensities\"\"\"\n", + " m, b = np.polyfit(i0_data, peak_vals, 1)\n", + " x = np.linspace(i_low, i_high, bins)\n", + " sigma = np.std(peak_vals)\n", + " y = x * m + b\n", + "\n", + " return x, y, m, b, sigma\n", + "\n", + " ###### Bokeh Figures #######\n", + "\n", + "def peak_fig(signal, hist, edges, peak_idx, left, right):\n", + " \"\"\"General histogram plotter with peak location and left/right limits plotted\"\"\"\n", + " low = round(edges[left], 2)\n", + " hi = round(edges[right], 2)\n", + " fig = figure(\n", + " title='Used Intensity Distribution for {0}. Low/Hi: {1}/{2}'.format(signal, low, hi),\n", + " x_axis_label='Intensity Values',\n", + " y_axis_label='Counts'\n", + " )\n", + " fig.quad(top=hist, bottom=0, left=edges[:-1], right=edges[1:])\n", + " left_line = Span(location=edges[left], dimension='height', line_color='black')\n", + " right_line = Span(location=edges[right], dimension='height', line_color='black')\n", + " peak_line = Span(location=edges[peak_idx], dimension='height', line_color='red')\n", + " fig.renderers.extend([left_line, right_line, peak_line])\n", + "\n", + " return fig\n", + "\n", + "def azav_fig(ave_azav, peak, intensity, delta_bin):\n", + " \"\"\"Generate the azav fig for html file\"\"\"\n", + " x_vals = np.arange(len(ave_azav))\n", + " fig = figure(\n", + " title='Average Azimuthal Binned Array: Center - {0}, min/max - {1}/{2}, intensity - {3}'.format(peak, peak-delta_bin, peak+delta_bin, round(intensity, 2)),\n", + " x_axis_label='Bins',\n", + " y_axis_label='Intensity',\n", + " )\n", + "\n", + " peak_line = Span(location=peak, dimension='height', line_color='green', line_width=2)\n", + " lower_line = Span(location=peak-delta_bin, dimension='height', line_color='black')\n", + " upper_line = Span(location=peak+delta_bin, dimension='height', line_color='black')\n", + " ave_azav_curve = fig.scatter(x_vals, ave_azav)\n", + " fig.renderers.extend([peak_line, lower_line, upper_line])\n", + "\n", + " azav_legend = Legend(items=[\n", + " LegendItem(label='Azimuthal Average', renderers=[ave_azav_curve])\n", + " ])\n", + " fig.add_layout(azav_legend)\n", + "\n", + " return fig\n", + "\n", + "def intensity_hist(intensity_hist, edges):\n", + " fig = figure(\n", + " title='Intensity Histogram'\n", + " )\n", + " fig.quad(top=intensity_hist, bottom=0, left=edges[:-1], right=edges[1:])\n", + "\n", + " return fig\n", + "\n", + "def intensity_vs_peak_fig(intensity, peak_vals, x, y, slope, intercept, sigma):\n", + " \"\"\"Simple plot of intensity vs peak value\"\"\"\n", + " fig = figure(\n", + " title='Peak value vs Intensity. Slope = {0}, Intercept = {1}'.format(round(slope, 2), round(intercept, 2)),\n", + " x_axis_label='Intensity Monitor Value',\n", + " y_axis_label='Peak Values'\n", + " )\n", + " fig.x_range.range_padding = fig.y_range.range_padding = 0\n", + " h, y_edge, x_edge = np.histogram2d(peak_vals, intensity, bins=100)\n", + " fig.image(image=[h], x=x_edge[0], y=y_edge[0], dh=y_edge[-1]-y_edge[0], dw=x_edge[-1]-x_edge[0], palette=\"Spectral11\")\n", + " color_mapper = LinearColorMapper(palette=\"Spectral11\", low=h.min(), high=h.max())\n", + " color_bar = ColorBar(color_mapper=color_mapper, location=(0,0))\n", + " fig.xaxis.bounds = [i0_low, i0_high]\n", + " fig.add_layout(color_bar, 'right')\n", + " fig.line(x, y, color='red')\n", + " fig.line(x, y - 1 * sigma, color='orange')\n", + " fig.line(x, y + 1 * sigma, color='orange')\n", + " return fig" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "# Find I0 distribution and filter out unused values\n", + "i0_data = np.array(i0_data)\n", + "i0_hist, i0_edges, i0_peak_idx, i0_left_idx, i0_right_idx = peak_lr(i0_data)\n", + "i0_low = i0_edges[i0_left_idx]\n", + "i0_high = i0_edges[i0_right_idx]\n", + "i0_idxs = np.where((i0_data > i0_low) & (i0_data < i0_high))\n", + "i0_data_use = i0_data[i0_idxs]\n", + "\n", + "# Filter on I0 data to get points we will evaluate\n", + "hist_peak, edges_peak, peak_idx, left_peak, right_peak = peak_lr(i0_data_use)\n", + "p = peak_fig('gdet', hist_peak, edges_peak, peak_idx, left_peak, right_peak)\n", + "\n", + "# Get the azav value we'll use\n", + "azav_use = [azav_data[idx] for idx in i0_idxs[0]]\n", + "ave_azav = np.array((np.sum(azav_use, axis=0)) / len(azav_use))\n", + "# Find the peak bin from average azav values\n", + "peak = calc_azav_peak(ave_azav)\n", + "peak=25\n", + "\n", + "# Get the integrated intensity and generate fig\n", + "integrated_intensity = get_integrated_intensity(ave_azav, peak, DELTA_BIN)\n", + "p1 = azav_fig(ave_azav, peak, integrated_intensity, DELTA_BIN)\n", + "\n", + "\n", + "# Go back through indices and find peak values for all the intensities\n", + "low = peak - DELTA_BIN\n", + "high = peak + DELTA_BIN\n", + "peak_vals = [azav[low:high].sum(axis=0) for azav in azav_use]\n", + "# Now fit I0 vs diffraction intensities\n", + "x, y, slope, intercept, sigma = fit_limits(i0_data_use, peak_vals, i0_low, i0_high)\n", + "p2 = intensity_vs_peak_fig(i0_data_use, peak_vals, x, y, slope, intercept, sigma)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/javascript": [ + "(function(root) {\n", + " function embed_document(root) {\n", + " \n", + " var docs_json = {\"2fd031af-cc1a-4914-b0ef-7bc7295fc713\":{\"roots\":{\"references\":[{\"attributes\":{},\"id\":\"5426\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"5663\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"5662\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"5660\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"5423\",\"type\":\"PanTool\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"lightgrey\"},\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":{\"value\":1.0},\"line_color\":{\"value\":\"black\"},\"line_dash\":[4,4],\"line_width\":{\"value\":2},\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"5665\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"5664\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"5414\",\"type\":\"BasicTicker\"},{\"attributes\":{\"ticker\":{\"id\":\"5414\",\"type\":\"BasicTicker\"}},\"id\":\"5417\",\"type\":\"Grid\"},{\"attributes\":{\"callback\":null,\"data\":{\"left\":{\"__ndarray__\":\"AAC4T2y/2j9mZqH3lgXbP83Mip/BS9s/MzN0R+yR2z+amV3vFtjbPwAAR5dBHtw/ZmYwP2xk3D/NzBnnlqrcPzMzA4/B8Nw/mpnsNuw23T8AANbeFn3dP2Zmv4ZBw90/zcyoLmwJ3j8zM5LWlk/eP5qZe37Bld4/AABlJuzb3j9mZk7OFiLfP83MN3ZBaN8/MzMhHmyu3z+amQrGlvTfPwAA+rZgHeA/M7PuCnZA4D9mZuNei2PgP5oZ2LKghuA/zczMBrap4D8AgMFay8zgPzMztq7g7+A/ZuaqAvYS4T+amZ9WCzbhP81MlKogWeE/AACJ/jV84T8zs31SS5/hP2ZmcqZgwuE/mhln+nXl4T/NzFtOiwjiPwCAUKKgK+I/MzNF9rVO4j9m5jlKy3HiP5qZLp7glOI/zUwj8vW34j8AABhGC9viPzOzDJog/uI/ZmYB7jUh4z+aGfZBS0TjP83M6pVgZ+M/AIDf6XWK4z8zM9Q9i63jP2bmyJGg0OM/mpm95bXz4z/NTLI5yxbkPwAAp43gOeQ/M7Ob4fVc5D9mZpA1C4DkP5oZhYkgo+Q/zcx53TXG5D8AgG4xS+nkPzQzY4VgDOU/ZuZX2XUv5T+amUwti1LlP81MQYGgdeU/AAA21bWY5T80syopy7vlP2ZmH33g3uU/mhkU0fUB5j/NzAglCyXmPwCA/XggSOY/NDPyzDVr5j9m5uYgS47mP5qZ23RgseY/zUzQyHXU5j8AAMUci/fmPzSzuXCgGuc/ZmauxLU95z+aGaMYy2DnP83Ml2zgg+c/AICMwPWm5z80M4EUC8rnP2bmdWgg7ec/mplqvDUQ6D/NTF8QSzPoPwAAVGRgVug/NLNIuHV56D9mZj0Mi5zoP5oZMmCgv+g/zcwmtLXi6D8AgBsIywXpPzQzEFzgKOk/ZuYEsPVL6T+amfkDC2/pP81M7lcgkuk/AADjqzW16T80s9f/StjpP2ZmzFNg++k/mhnBp3Ue6j/NzLX7ikHqPwCAqk+gZOo/NDOfo7WH6j9m5pP3yqrqP5qZiEvgzeo/zUx9n/Xw6j8=\",\"dtype\":\"float64\",\"shape\":[100]},\"right\":{\"__ndarray__\":\"Zmah95YF2z/NzIqfwUvbPzMzdEfskds/mpld7xbY2z8AAEeXQR7cP2ZmMD9sZNw/zcwZ55aq3D8zMwOPwfDcP5qZ7DbsNt0/AADW3hZ93T9mZr+GQcPdP83MqC5sCd4/MzOS1pZP3j+amXt+wZXePwAAZSbs294/ZmZOzhYi3z/NzDd2QWjfPzMzIR5srt8/mpkKxpb03z8AAPq2YB3gPzOz7gp2QOA/ZmbjXotj4D+aGdiyoIbgP83MzAa2qeA/AIDBWsvM4D8zM7au4O/gP2bmqgL2EuE/mpmfVgs24T/NTJSqIFnhPwAAif41fOE/M7N9Ukuf4T9mZnKmYMLhP5oZZ/p15eE/zcxbTosI4j8AgFCioCviPzMzRfa1TuI/ZuY5Sstx4j+amS6e4JTiP81MI/L1t+I/AAAYRgvb4j8zswyaIP7iP2ZmAe41IeM/mhn2QUtE4z/NzOqVYGfjPwCA3+l1iuM/MzPUPYut4z9m5siRoNDjP5qZveW18+M/zUyyOcsW5D8AAKeN4DnkPzOzm+H1XOQ/ZmaQNQuA5D+aGYWJIKPkP83Med01xuQ/AIBuMUvp5D80M2OFYAzlP2bmV9l1L+U/mplMLYtS5T/NTEGBoHXlPwAANtW1mOU/NLMqKcu75T9mZh994N7lP5oZFNH1AeY/zcwIJQsl5j8AgP14IEjmPzQz8sw1a+Y/ZubmIEuO5j+amdt0YLHmP81M0Mh11OY/AADFHIv35j80s7lwoBrnP2ZmrsS1Pec/mhmjGMtg5z/NzJds4IPnPwCAjMD1puc/NDOBFAvK5z9m5nVoIO3nP5qZarw1EOg/zUxfEEsz6D8AAFRkYFboPzSzSLh1eeg/ZmY9DIuc6D+aGTJgoL/oP83MJrS14ug/AIAbCMsF6T80MxBc4CjpP2bmBLD1S+k/mpn5Awtv6T/NTO5XIJLpPwAA46s1tek/NLPX/0rY6T9mZsxTYPvpP5oZwad1Huo/zcy1+4pB6j8AgKpPoGTqPzQzn6O1h+o/ZuaT98qq6j+amYhL4M3qP81MfZ/18Oo/AABy8woU6z8=\",\"dtype\":\"float64\",\"shape\":[100]},\"top\":[2,5,4,2,2,3,2,1,4,6,2,4,4,5,2,3,2,13,5,7,5,7,3,2,2,3,7,6,6,7,5,9,5,11,7,7,8,9,9,11,7,7,6,12,12,9,12,12,13,18,7,15,10,12,15,12,20,18,18,20,5,11,16,11,25,23,11,20,19,17,20,16,12,16,12,15,9,24,13,10,13,7,8,12,14,10,4,7,12,10,6,6,5,5,2,5,5,6,0,4]},\"selected\":{\"id\":\"5663\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"5664\",\"type\":\"UnionRenderers\"}},\"id\":\"5436\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"bottom\":{\"value\":0},\"fill_color\":{\"value\":\"#1f77b4\"},\"left\":{\"field\":\"left\"},\"line_color\":{\"value\":\"#1f77b4\"},\"right\":{\"field\":\"right\"},\"top\":{\"field\":\"top\"}},\"id\":\"5437\",\"type\":\"Quad\"},{\"attributes\":{\"axis_label\":\"Intensity Values\",\"formatter\":{\"id\":\"5660\",\"type\":\"BasicTickFormatter\"},\"ticker\":{\"id\":\"5414\",\"type\":\"BasicTicker\"}},\"id\":\"5413\",\"type\":\"LinearAxis\"},{\"attributes\":{\"bottom\":{\"value\":0},\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"left\":{\"field\":\"left\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"right\":{\"field\":\"right\"},\"top\":{\"field\":\"top\"}},\"id\":\"5438\",\"type\":\"Quad\"},{\"attributes\":{\"data_source\":{\"id\":\"5436\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"5437\",\"type\":\"Quad\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"5438\",\"type\":\"Quad\"},\"selection_glyph\":null,\"view\":{\"id\":\"5440\",\"type\":\"CDSView\"}},\"id\":\"5439\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"axis_label\":\"Counts\",\"formatter\":{\"id\":\"5662\",\"type\":\"BasicTickFormatter\"},\"ticker\":{\"id\":\"5419\",\"type\":\"BasicTicker\"}},\"id\":\"5418\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"5419\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"5428\",\"type\":\"HelpTool\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_multi\":null,\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"5423\",\"type\":\"PanTool\"},{\"id\":\"5424\",\"type\":\"WheelZoomTool\"},{\"id\":\"5425\",\"type\":\"BoxZoomTool\"},{\"id\":\"5426\",\"type\":\"SaveTool\"},{\"id\":\"5427\",\"type\":\"ResetTool\"},{\"id\":\"5428\",\"type\":\"HelpTool\"}]},\"id\":\"5429\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"5411\",\"type\":\"LinearScale\"},{\"attributes\":{\"callback\":null},\"id\":\"5407\",\"type\":\"DataRange1d\"},{\"attributes\":{\"callback\":null},\"id\":\"5405\",\"type\":\"DataRange1d\"},{\"attributes\":{\"text\":\"Used Intensity Distribution for gdet. Low/Hi: 0.52/0.82\"},\"id\":\"5403\",\"type\":\"Title\"},{\"attributes\":{\"below\":[{\"id\":\"5413\",\"type\":\"LinearAxis\"}],\"center\":[{\"id\":\"5417\",\"type\":\"Grid\"},{\"id\":\"5422\",\"type\":\"Grid\"}],\"left\":[{\"id\":\"5418\",\"type\":\"LinearAxis\"}],\"renderers\":[{\"id\":\"5439\",\"type\":\"GlyphRenderer\"},{\"id\":\"5441\",\"type\":\"Span\"},{\"id\":\"5442\",\"type\":\"Span\"},{\"id\":\"5443\",\"type\":\"Span\"}],\"title\":{\"id\":\"5403\",\"type\":\"Title\"},\"toolbar\":{\"id\":\"5429\",\"type\":\"Toolbar\"},\"x_range\":{\"id\":\"5405\",\"type\":\"DataRange1d\"},\"x_scale\":{\"id\":\"5409\",\"type\":\"LinearScale\"},\"y_range\":{\"id\":\"5407\",\"type\":\"DataRange1d\"},\"y_scale\":{\"id\":\"5411\",\"type\":\"LinearScale\"}},\"id\":\"5402\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"dimension\":\"height\",\"line_color\":{\"value\":\"red\"},\"location\":0.6920219157531392},\"id\":\"5443\",\"type\":\"Span\"},{\"attributes\":{\"dimension\":\"height\",\"location\":0.8205008426870336},\"id\":\"5442\",\"type\":\"Span\"},{\"attributes\":{\"dimension\":\"height\",\"location\":0.5249993107390765},\"id\":\"5441\",\"type\":\"Span\"},{\"attributes\":{\"source\":{\"id\":\"5436\",\"type\":\"ColumnDataSource\"}},\"id\":\"5440\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"5409\",\"type\":\"LinearScale\"},{\"attributes\":{\"dimension\":1,\"ticker\":{\"id\":\"5419\",\"type\":\"BasicTicker\"}},\"id\":\"5422\",\"type\":\"Grid\"},{\"attributes\":{\"overlay\":{\"id\":\"5665\",\"type\":\"BoxAnnotation\"}},\"id\":\"5425\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"5424\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"5427\",\"type\":\"ResetTool\"}],\"root_ids\":[\"5402\"]},\"title\":\"Bokeh Application\",\"version\":\"1.4.0\"}};\n", + " var render_items = [{\"docid\":\"2fd031af-cc1a-4914-b0ef-7bc7295fc713\",\"roots\":{\"5402\":\"e7466a38-1419-48aa-bf1f-fa7eedf54a46\"}}];\n", + " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n", + "\n", + " }\n", + " if (root.Bokeh !== undefined) {\n", + " embed_document(root);\n", + " } else {\n", + " var attempts = 0;\n", + " var timer = setInterval(function(root) {\n", + " if (root.Bokeh !== undefined) {\n", + " clearInterval(timer);\n", + " embed_document(root);\n", + " } else {\n", + " attempts++;\n", + " if (attempts > 100) {\n", + " clearInterval(timer);\n", + " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n", + " }\n", + " }\n", + " }, 10, root)\n", + " }\n", + "})(window);" + ], + "application/vnd.bokehjs_exec.v0+json": "" + }, + "metadata": { + "application/vnd.bokehjs_exec.v0+json": { + "id": "5402" + } + }, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/javascript": [ + "(function(root) {\n", + " function embed_document(root) {\n", + " \n", + " var docs_json = {\"599beaa9-7838-41f5-ace1-10e5e0afb494\":{\"roots\":{\"references\":[{\"attributes\":{\"items\":[{\"id\":\"5486\",\"type\":\"LegendItem\"}]},\"id\":\"5487\",\"type\":\"Legend\"},{\"attributes\":{},\"id\":\"5838\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"5470\",\"type\":\"HelpTool\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_multi\":null,\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"5465\",\"type\":\"PanTool\"},{\"id\":\"5466\",\"type\":\"WheelZoomTool\"},{\"id\":\"5467\",\"type\":\"BoxZoomTool\"},{\"id\":\"5468\",\"type\":\"SaveTool\"},{\"id\":\"5469\",\"type\":\"ResetTool\"},{\"id\":\"5470\",\"type\":\"HelpTool\"}]},\"id\":\"5471\",\"type\":\"Toolbar\"},{\"attributes\":{\"below\":[{\"id\":\"5455\",\"type\":\"LinearAxis\"}],\"center\":[{\"id\":\"5459\",\"type\":\"Grid\"},{\"id\":\"5464\",\"type\":\"Grid\"},{\"id\":\"5487\",\"type\":\"Legend\"}],\"left\":[{\"id\":\"5460\",\"type\":\"LinearAxis\"}],\"renderers\":[{\"id\":\"5484\",\"type\":\"GlyphRenderer\"},{\"id\":\"5478\",\"type\":\"Span\"},{\"id\":\"5479\",\"type\":\"Span\"},{\"id\":\"5480\",\"type\":\"Span\"}],\"title\":{\"id\":\"5445\",\"type\":\"Title\"},\"toolbar\":{\"id\":\"5471\",\"type\":\"Toolbar\"},\"x_range\":{\"id\":\"5447\",\"type\":\"DataRange1d\"},\"x_scale\":{\"id\":\"5451\",\"type\":\"LinearScale\"},\"y_range\":{\"id\":\"5449\",\"type\":\"DataRange1d\"},\"y_scale\":{\"id\":\"5453\",\"type\":\"LinearScale\"}},\"id\":\"5444\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"dimension\":\"height\",\"line_color\":{\"value\":\"green\"},\"line_width\":{\"value\":2},\"location\":25},\"id\":\"5478\",\"type\":\"Span\"},{\"attributes\":{\"dimension\":\"height\",\"location\":20},\"id\":\"5479\",\"type\":\"Span\"},{\"attributes\":{\"ticker\":{\"id\":\"5456\",\"type\":\"BasicTicker\"}},\"id\":\"5459\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"5451\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"5453\",\"type\":\"LinearScale\"},{\"attributes\":{\"axis_label\":\"Bins\",\"formatter\":{\"id\":\"5836\",\"type\":\"BasicTickFormatter\"},\"ticker\":{\"id\":\"5456\",\"type\":\"BasicTicker\"}},\"id\":\"5455\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"5456\",\"type\":\"BasicTicker\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"lightgrey\"},\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":{\"value\":1.0},\"line_color\":{\"value\":\"black\"},\"line_dash\":[4,4],\"line_width\":{\"value\":2},\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"5841\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"5840\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"5461\",\"type\":\"BasicTicker\"},{\"attributes\":{\"axis_label\":\"Intensity\",\"formatter\":{\"id\":\"5838\",\"type\":\"BasicTickFormatter\"},\"ticker\":{\"id\":\"5461\",\"type\":\"BasicTicker\"}},\"id\":\"5460\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"5465\",\"type\":\"PanTool\"},{\"attributes\":{\"dimension\":1,\"ticker\":{\"id\":\"5461\",\"type\":\"BasicTicker\"}},\"id\":\"5464\",\"type\":\"Grid\"},{\"attributes\":{\"overlay\":{\"id\":\"5841\",\"type\":\"BoxAnnotation\"}},\"id\":\"5467\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"5466\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"5469\",\"type\":\"ResetTool\"},{\"attributes\":{\"label\":{\"value\":\"Azimuthal Average\"},\"renderers\":[{\"id\":\"5484\",\"type\":\"GlyphRenderer\"}]},\"id\":\"5486\",\"type\":\"LegendItem\"},{\"attributes\":{\"source\":{\"id\":\"5481\",\"type\":\"ColumnDataSource\"}},\"id\":\"5485\",\"type\":\"CDSView\"},{\"attributes\":{\"data_source\":{\"id\":\"5481\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"5482\",\"type\":\"Scatter\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"5483\",\"type\":\"Scatter\"},\"selection_glyph\":null,\"view\":{\"id\":\"5485\",\"type\":\"CDSView\"}},\"id\":\"5484\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"5483\",\"type\":\"Scatter\"},{\"attributes\":{\"fill_color\":{\"value\":\"#1f77b4\"},\"line_color\":{\"value\":\"#1f77b4\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"5482\",\"type\":\"Scatter\"},{\"attributes\":{\"callback\":null,\"data\":{\"x\":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99],\"y\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAK23aD5+iflB16GXQqvBvkIliMhCWDbQQiKN20LkNO5CuSoBQ/WWDUMZfh9DD8M2Q3QvU0MsU3hDPzKSQyJgrEN+DM1DsbzzQ5nSDkQcdSJE0cYxRBcCOkTjCTpETVIzROR0KER+3xtEmgAMRG9G+EMI5uVDEW/cQxFL1EPBIc1DJbLHQ4rvwEOMe7BD1xCgQ1jmn0O9JqJDG0ucQ9PikkMTc4dDRNp2Q5BSXkMaH0dDLN4zQ1ZUIkO9mhJDwwsFQ3wo8kL7q+BCkZfSQm38xUIjG7tCZ+2yQm+2rEJnKKdCB72gQnmzmkLE2JRCwDePQtOeh0KWJXpCCKFpQpzPXEJh/09CpCVIQrv4RkIuBElCHY9GQmflPEITsjRC64MuQmAlKEJMEidCK+cgQvITGELE3RFCxvkIQsVvAUJfF95BbYKmQT43f0HMZmNBV6VVQSRPO0EZTA1BdQDCQEyWnkA35opAkWhNQGXCpj9cOZQ9AAAAAAAAAAAAAAAAAAAAAA==\",\"dtype\":\"float32\",\"shape\":[100]}},\"selected\":{\"id\":\"5839\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"5840\",\"type\":\"UnionRenderers\"}},\"id\":\"5481\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"dimension\":\"height\",\"location\":30},\"id\":\"5480\",\"type\":\"Span\"},{\"attributes\":{},\"id\":\"5836\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"callback\":null},\"id\":\"5449\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"5468\",\"type\":\"SaveTool\"},{\"attributes\":{\"callback\":null},\"id\":\"5447\",\"type\":\"DataRange1d\"},{\"attributes\":{\"text\":\"Average Azimuthal Binned Array: Center - 25, min/max - 20/30, intensity - 6332.59\"},\"id\":\"5445\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"5839\",\"type\":\"Selection\"}],\"root_ids\":[\"5444\"]},\"title\":\"Bokeh Application\",\"version\":\"1.4.0\"}};\n", + " var render_items = [{\"docid\":\"599beaa9-7838-41f5-ace1-10e5e0afb494\",\"roots\":{\"5444\":\"d176dc66-a9cb-44f0-8a5f-feeb2621c872\"}}];\n", + " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n", + "\n", + " }\n", + " if (root.Bokeh !== undefined) {\n", + " embed_document(root);\n", + " } else {\n", + " var attempts = 0;\n", + " var timer = setInterval(function(root) {\n", + " if (root.Bokeh !== undefined) {\n", + " clearInterval(timer);\n", + " embed_document(root);\n", + " } else {\n", + " attempts++;\n", + " if (attempts > 100) {\n", + " clearInterval(timer);\n", + " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n", + " }\n", + " }\n", + " }, 10, root)\n", + " }\n", + "})(window);" + ], + "application/vnd.bokehjs_exec.v0+json": "" + }, + "metadata": { + "application/vnd.bokehjs_exec.v0+json": { + "id": "5444" + } + }, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "
\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/javascript": [ + "(function(root) {\n", + " function embed_document(root) {\n", + " \n", + " var docs_json = {\"9f622e40-9c1b-4df9-9c6c-1e117624b6da\":{\"roots\":{\"references\":[{\"attributes\":{\"text\":\"Peak value vs Intensity. Slope = 15036.02, Intercept = -3630.12\"},\"id\":\"5489\",\"type\":\"Title\"},{\"attributes\":{\"palette\":[\"#5e4fa2\",\"#3288bd\",\"#66c2a5\",\"#abdda4\",\"#e6f598\",\"#ffffbf\",\"#fee08b\",\"#fdae61\",\"#f46d43\",\"#d53e4f\",\"#9e0142\"]},\"id\":\"5526\",\"type\":\"LinearColorMapper\"},{\"attributes\":{\"data_source\":{\"id\":\"5531\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"5532\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"5533\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"5535\",\"type\":\"CDSView\"}},\"id\":\"5534\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"callback\":null,\"data\":{\"image\":[{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAQAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAPA/AAAAAAAA8D8AAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAQAAAAAAAAAAAAAAAAAAA8D8AAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAPA/AAAAAAAAAEAAAAAAAADwPwAAAAAAAPA/AAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAQAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAA8D8AAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAQAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAPA/AAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAEAAAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAADwPwAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAADwPwAAAAAAAPA/AAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAPA/AAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\",\"dtype\":\"float64\",\"shape\":[100,100]}]},\"selected\":{\"id\":\"6025\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"6026\",\"type\":\"UnionRenderers\"}},\"id\":\"5522\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"color_mapper\":{\"id\":\"5524\",\"type\":\"LinearColorMapper\"},\"dh\":{\"units\":\"data\",\"value\":15016.553024291992},\"dw\":{\"units\":\"data\",\"value\":0.428263089779648},\"image\":{\"field\":\"image\"},\"x\":{\"value\":0.41793353829416446},\"y\":{\"value\":78.65010070800781}},\"id\":\"5523\",\"type\":\"Image\"},{\"attributes\":{\"palette\":[\"#5e4fa2\",\"#3288bd\",\"#66c2a5\",\"#abdda4\",\"#e6f598\",\"#ffffbf\",\"#fee08b\",\"#fdae61\",\"#f46d43\",\"#d53e4f\",\"#9e0142\"]},\"id\":\"5524\",\"type\":\"LinearColorMapper\"},{\"attributes\":{\"axis_label\":\"Intensity Monitor Value\",\"bounds\":[0.41789974458224605,0.8466769609192851],\"formatter\":{\"id\":\"6022\",\"type\":\"BasicTickFormatter\"},\"ticker\":{\"id\":\"5500\",\"type\":\"BasicTicker\"}},\"id\":\"5499\",\"type\":\"LinearAxis\"},{\"attributes\":{\"dimension\":1,\"ticker\":{\"id\":\"5505\",\"type\":\"BasicTicker\"}},\"id\":\"5508\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"5509\",\"type\":\"PanTool\"},{\"attributes\":{\"source\":{\"id\":\"5522\",\"type\":\"ColumnDataSource\"}},\"id\":\"5528\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"5495\",\"type\":\"LinearScale\"},{\"attributes\":{\"axis_label\":\"Peak Values\",\"formatter\":{\"id\":\"6024\",\"type\":\"BasicTickFormatter\"},\"ticker\":{\"id\":\"5505\",\"type\":\"BasicTicker\"}},\"id\":\"5504\",\"type\":\"LinearAxis\"},{\"attributes\":{\"source\":{\"id\":\"5541\",\"type\":\"ColumnDataSource\"}},\"id\":\"5545\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"5513\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"5500\",\"type\":\"BasicTicker\"},{\"attributes\":{\"callback\":null,\"range_padding\":0},\"id\":\"5493\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"5497\",\"type\":\"LinearScale\"},{\"attributes\":{\"line_color\":\"orange\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"5542\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"5543\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"5536\",\"type\":\"ColumnDataSource\"}},\"id\":\"5540\",\"type\":\"CDSView\"},{\"attributes\":{\"callback\":null,\"data\":{\"x\":{\"__ndarray__\":\"MzP/kd6+2j8zM/Ny1AXbPzMz51PKTNs/MzPbNMCT2z8zM88VttrbPzMzw/arIdw/MzO316Fo3D8zM6u4l6/cPzMzn5mN9tw/MzOTeoM93T8zM4dbeYTdPzMzezxvy90/MzNvHWUS3j8zM2P+WlnePzMzV99QoN4/MzNLwEbn3j8zMz+hPC7fPzMzM4Iydd8/MzMnYyi83z+ZmQ0ijwHgP5mZhxIKJeA/mZkBA4VI4D+ZmXvz/2vgP5mZ9eN6j+A/mZlv1PWy4D+ZmenEcNbgP5mZY7Xr+eA/mZndpWYd4T+ZmVeW4UDhP5mZ0YZcZOE/mZlLd9eH4T+ZmcVnUqvhP5mZP1jNzuE/mZm5SEjy4T+ZmTM5wxXiP5mZrSk+OeI/mZknGrlc4j+ZmaEKNIDiP5mZG/uuo+I/mZmV6ynH4j+ZmQ/cpOriP5mZicwfDuM/mZkDvZox4z+ZmX2tFVXjP5mZ952QeOM/mZlxjguc4z+Zmet+hr/jP5mZZW8B4+M/mZnfX3wG5D+ZmVlQ9ynkP5mZ00ByTeQ/mZlNMe1w5D+ZmcchaJTkP5mZQRLjt+Q/mZm7Al7b5D+ZmTXz2P7kP5mZr+NTIuU/mZkp1M5F5T+ZmaPESWnlP5mZHbXEjOU/mZmXpT+w5T+ZmRGWutPlP5mZi4Y19+U/mZkFd7Aa5j+ZmX9nKz7mP5mZ+VemYeY/mZlzSCGF5j+Zme04nKjmP5mZZykXzOY/mZnhGZLv5j+ZmVsKDRPnP5mZ1fqHNuc/mZlP6wJa5z+ZmcnbfX3nP5mZQ8z4oOc/mZm9vHPE5z+ZmTet7ufnP5mZsZ1pC+g/mZkrjuQu6D+ZmaV+X1LoP5mZH2/adeg/mZmZX1WZ6D+ZmRNQ0LzoP5mZjUBL4Og/mZkHMcYD6T+ZmYEhQSfpP5mZ+xG8Suk/mZl1Ajdu6T+Zme/ysZHpP5mZaeMstek/mZnj06fY6T+ZmV3EIvzpP5mZ17SdH+o/mZlRpRhD6j+ZmcuVk2bqP5mZRYYOiuo/mJm/domt6j+YmTlnBNHqP5iZs1d/9Oo/mZktSPoX6z8=\",\"dtype\":\"float64\",\"shape\":[100]},\"y\":{\"__ndarray__\":\"/mrJPsJRt0DAskSK4ZK3QID6v9UA1LdAQEI7ISAVuEACirZsP1a4QMLRMbhel7hAhBmtA37YuEBEYShPnRm5QAapo5q8WrlAxvAe5tubuUCIOJox+9y5QEiAFX0aHrpACsiQyDlfukDKDwwUWaC6QIpXh1944bpATJ8Cq5ciu0AM5332tmO7QM4u+UHWpLtAjnZ0jfXlu0BOvu/YFCe8QBAGayQ0aLxA0E3mb1OpvECSlWG7cuq8QFLd3AaSK71AEiVYUrFsvUDUbNOd0K29QJS0Tunv7r1AVvzJNA8wvkAWREWALnG+QNiLwMtNsr5AmNM7F23zvkBaG7dijDS/QBpjMq6rdb9A3Kqt+cq2v0Cc8ihF6ve/QC8dUsiEHMBAD8EPbhQ9wEDwZM0TpF3AQNAIi7kzfsBAsaxIX8OewECRUAYFU7/AQHH0w6ri38BAUpiBUHIAwUAyPD/2ASHBQBPg/JuRQcFA84O6QSFiwUDUJ3jnsILBQLTLNY1Ao8FAlW/zMtDDwUB1E7HYX+TBQFW3bn7vBMJANlssJH8lwkAW/+nJDkbCQPeip2+eZsJA10ZlFS6HwkC46iK7vafCQJiO4GBNyMJAeTKeBt3owkBZ1lusbAnDQDp6GVL8KcNAGh7X94tKw0D6wZSdG2vDQNtlUkOri8NAuwkQ6Tqsw0Ccrc2OyszDQHxRizRa7cNAXfVI2ukNxEA9mQaAeS7EQB49xCUJT8RA/uCBy5hvxEDfhD9xKJDEQL8o/Ra4sMRAn8y6vEfRxECAcHhi1/HEQGAUNghnEsVAQbjzrfYyxUAhXLFThlPFQAIAb/kVdMVA4qMsn6WUxUDDR+pENbXFQKPrp+rE1cVAg49lkFT2xUBkMyM25BbGQETX4NtzN8ZAJXuegQNYxkAFH1wnk3jGQObCGc0imcZAxmbXcrK5xkCnCpUYQtrGQIeuUr7R+sZAaFIQZGEbx0BI9s0J8TvHQCiai6+AXMdACT5JVRB9x0Dp4Qb7n53HQMqFxKAvvsdAqSmCRr/ex0CKzT/sTv/HQGpx/ZHeH8hATBW7N25AyEA=\",\"dtype\":\"float64\",\"shape\":[100]}},\"selected\":{\"id\":\"6031\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"6032\",\"type\":\"UnionRenderers\"}},\"id\":\"5541\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data_source\":{\"id\":\"5541\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"5542\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"5543\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"5545\",\"type\":\"CDSView\"}},\"id\":\"5544\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"ticker\":{\"id\":\"5500\",\"type\":\"BasicTicker\"}},\"id\":\"5503\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"6028\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"6029\",\"type\":\"Selection\"},{\"attributes\":{\"data_source\":{\"id\":\"5522\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"5523\",\"type\":\"Image\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"5525\",\"type\":\"Image\"},\"selection_glyph\":null,\"view\":{\"id\":\"5528\",\"type\":\"CDSView\"}},\"id\":\"5527\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"6020\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"6022\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"6024\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"6025\",\"type\":\"Selection\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"5538\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"6027\",\"type\":\"Selection\"},{\"attributes\":{\"callback\":null,\"range_padding\":0},\"id\":\"5491\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"5505\",\"type\":\"BasicTicker\"},{\"attributes\":{\"line_color\":\"red\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"5532\",\"type\":\"Line\"},{\"attributes\":{\"callback\":null,\"data\":{\"x\":{\"__ndarray__\":\"MzP/kd6+2j8zM/Ny1AXbPzMz51PKTNs/MzPbNMCT2z8zM88VttrbPzMzw/arIdw/MzO316Fo3D8zM6u4l6/cPzMzn5mN9tw/MzOTeoM93T8zM4dbeYTdPzMzezxvy90/MzNvHWUS3j8zM2P+WlnePzMzV99QoN4/MzNLwEbn3j8zMz+hPC7fPzMzM4Iydd8/MzMnYyi83z+ZmQ0ijwHgP5mZhxIKJeA/mZkBA4VI4D+ZmXvz/2vgP5mZ9eN6j+A/mZlv1PWy4D+ZmenEcNbgP5mZY7Xr+eA/mZndpWYd4T+ZmVeW4UDhP5mZ0YZcZOE/mZlLd9eH4T+ZmcVnUqvhP5mZP1jNzuE/mZm5SEjy4T+ZmTM5wxXiP5mZrSk+OeI/mZknGrlc4j+ZmaEKNIDiP5mZG/uuo+I/mZmV6ynH4j+ZmQ/cpOriP5mZicwfDuM/mZkDvZox4z+ZmX2tFVXjP5mZ952QeOM/mZlxjguc4z+Zmet+hr/jP5mZZW8B4+M/mZnfX3wG5D+ZmVlQ9ynkP5mZ00ByTeQ/mZlNMe1w5D+ZmcchaJTkP5mZQRLjt+Q/mZm7Al7b5D+ZmTXz2P7kP5mZr+NTIuU/mZkp1M5F5T+ZmaPESWnlP5mZHbXEjOU/mZmXpT+w5T+ZmRGWutPlP5mZi4Y19+U/mZkFd7Aa5j+ZmX9nKz7mP5mZ+VemYeY/mZlzSCGF5j+Zme04nKjmP5mZZykXzOY/mZnhGZLv5j+ZmVsKDRPnP5mZ1fqHNuc/mZlP6wJa5z+ZmcnbfX3nP5mZQ8z4oOc/mZm9vHPE5z+ZmTet7ufnP5mZsZ1pC+g/mZkrjuQu6D+ZmaV+X1LoP5mZH2/adeg/mZmZX1WZ6D+ZmRNQ0LzoP5mZjUBL4Og/mZkHMcYD6T+ZmYEhQSfpP5mZ+xG8Suk/mZl1Ajdu6T+Zme/ysZHpP5mZaeMstek/mZnj06fY6T+ZmV3EIvzpP5mZ17SdH+o/mZlRpRhD6j+ZmcuVk2bqP5mZRYYOiuo/mJm/domt6j+YmTlnBNHqP5iZs1d/9Oo/mZktSPoX6z8=\",\"dtype\":\"float64\",\"shape\":[100]},\"y\":{\"__ndarray__\":\"/dWSfdu6pEB/ZYkUGj2lQP/0f6tYv6VAgYR2QpdBpkADFG3Z1cOmQIWjY3AURqdABzNaB1PIp0CJwlCekUqoQAtSRzXQzKhAjeE9zA5PqUAPcTRjTdGpQJEAK/qLU6pAE5AhkcrVqkCTHxgoCVirQBWvDr9H2qtAlz4FVoZcrEAZzvvsxN6sQJtd8oMDYa1AHe3oGkLjrUCdfN+xgGWuQB8M1ki/565AoZvM3/1pr0AjK8N2POyvQFLd3IY9N7BAEiVY0lx4sEDUbNMdfLmwQJS0Tmmb+rBAVvzJtLo7sUAWREUA2nyxQNiLwEv5vbFAmNM7lxj/sUBaG7fiN0CyQBpjMi5XgbJA3KqteXbCskCc8ijFlQOzQF46pBC1RLNAHoIfXNSFs0DgyZqn88azQKARFvMSCLRAYlmRPjJJtEAioQyKUYq0QOLoh9Vwy7RApDADIZAMtUBkeH5sr021QCbA+bfOjrVA5gd1A+7PtUCoT/BODRG2QGiXa5osUrZAKt/m5UuTtkDqJmIxa9S2QKpu3XyKFbdAbLZYyKlWt0As/tMTyZe3QO5FT1/o2LdAro3KqgcauEBw1UX2Jlu4QDAdwUFGnLhA8mQ8jWXduECyrLfYhB65QHT0MiSkX7lANDyub8OguUD0gym74uG5QLbLpAYCI7pAdhMgUiFkukA4W5udQKW6QPiiFulf5rpAuuqRNH8nu0B6Mg2Anmi7QDx6iMu9qbtA/MEDF93qu0C+CX9i/Cu8QH5R+q0bbbxAPpl1+TquvEAA4fBEWu+8QMAobJB5ML1AgnDn25hxvUBCuGInuLK9QAQA3nLX871AxEdZvvY0vkCGj9QJFna+QEbXT1U1t75ABh/LoFT4vkDIZkbsczm/QIiuwTeTer9ASvY8g7K7v0AKPrjO0fy/QObCGY34HsBAxmbXMog/wECnCpXYF2DAQIeuUn6ngMBAaFIQJDehwEBI9s3JxsHAQCiai29W4sBACT5JFeYCwUDp4Qa7dSPBQMqFxGAFRMFAqSmCBpVkwUCKzT+sJIXBQGpx/VG0pcFATBW790PGwUA=\",\"dtype\":\"float64\",\"shape\":[100]}},\"selected\":{\"id\":\"6027\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"6028\",\"type\":\"UnionRenderers\"}},\"id\":\"5531\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"color_mapper\":{\"id\":\"5529\",\"type\":\"LinearColorMapper\"},\"formatter\":{\"id\":\"6020\",\"type\":\"BasicTickFormatter\"},\"location\":[0,0],\"ticker\":{\"id\":\"6019\",\"type\":\"BasicTicker\"}},\"id\":\"5530\",\"type\":\"ColorBar\"},{\"attributes\":{\"line_color\":\"orange\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"5537\",\"type\":\"Line\"},{\"attributes\":{\"callback\":null,\"data\":{\"x\":{\"__ndarray__\":\"MzP/kd6+2j8zM/Ny1AXbPzMz51PKTNs/MzPbNMCT2z8zM88VttrbPzMzw/arIdw/MzO316Fo3D8zM6u4l6/cPzMzn5mN9tw/MzOTeoM93T8zM4dbeYTdPzMzezxvy90/MzNvHWUS3j8zM2P+WlnePzMzV99QoN4/MzNLwEbn3j8zMz+hPC7fPzMzM4Iydd8/MzMnYyi83z+ZmQ0ijwHgP5mZhxIKJeA/mZkBA4VI4D+ZmXvz/2vgP5mZ9eN6j+A/mZlv1PWy4D+ZmenEcNbgP5mZY7Xr+eA/mZndpWYd4T+ZmVeW4UDhP5mZ0YZcZOE/mZlLd9eH4T+ZmcVnUqvhP5mZP1jNzuE/mZm5SEjy4T+ZmTM5wxXiP5mZrSk+OeI/mZknGrlc4j+ZmaEKNIDiP5mZG/uuo+I/mZmV6ynH4j+ZmQ/cpOriP5mZicwfDuM/mZkDvZox4z+ZmX2tFVXjP5mZ952QeOM/mZlxjguc4z+Zmet+hr/jP5mZZW8B4+M/mZnfX3wG5D+ZmVlQ9ynkP5mZ00ByTeQ/mZlNMe1w5D+ZmcchaJTkP5mZQRLjt+Q/mZm7Al7b5D+ZmTXz2P7kP5mZr+NTIuU/mZkp1M5F5T+ZmaPESWnlP5mZHbXEjOU/mZmXpT+w5T+ZmRGWutPlP5mZi4Y19+U/mZkFd7Aa5j+ZmX9nKz7mP5mZ+VemYeY/mZlzSCGF5j+Zme04nKjmP5mZZykXzOY/mZnhGZLv5j+ZmVsKDRPnP5mZ1fqHNuc/mZlP6wJa5z+ZmcnbfX3nP5mZQ8z4oOc/mZm9vHPE5z+ZmTet7ufnP5mZsZ1pC+g/mZkrjuQu6D+ZmaV+X1LoP5mZH2/adeg/mZmZX1WZ6D+ZmRNQ0LzoP5mZjUBL4Og/mZkHMcYD6T+ZmYEhQSfpP5mZ+xG8Suk/mZl1Ajdu6T+Zme/ysZHpP5mZaeMstek/mZnj06fY6T+ZmV3EIvzpP5mZ17SdH+o/mZlRpRhD6j+ZmcuVk2bqP5mZRYYOiuo/mJm/domt6j+YmTlnBNHqP5iZs1d/9Oo/mZktSPoX6z8=\",\"dtype\":\"float64\",\"shape\":[100]},\"y\":{\"__ndarray__\":\"DKi0CTa3hMAEatqtO66CwAQsAFJBpYDA+NtL7I04fcDoX5c0mSZ5wNjj4nykFHXAyGcuxa8CccBw1/MaduFpwFDfiquMvWHAYM5DeEYzU8AA8Y7LnFsnwEAkwIq+uEpAYAIyJDKkXUAw+YGBAvZmQFDx6vDrGW9AuPQpsOqec0DIcN5n37B3QNjskh/UwntA6GhH18jUf0B08n3HXvOBQHwwWCNZ/INAhG4yf1MFhkCMrAzbTQ6IQJDq5jZIF4pAkCjBkkIgjECgZpvuPCmOQFDSOqUbGZBAWPEn05gdkUBYEBUBFiKSQGAvAi+TJpNAYE7vXBArlEBobdyKjS+VQGiMybgKNJZAcKu25oc4l0BwyqMUBT2YQHjpkEKCQZlAeAh+cP9FmkCAJ2uefEqbQIBGWMz5TpxAiGVF+nZTnUCIhDIo9FeeQIijH1ZxXJ9ASGEGQncwoEDI8PzYtbKgQEyA82/0NKFAzA/qBjO3oUBQn+CdcTmiQNAu1zSwu6JAVL7Ny+49o0DUTcRiLcCjQFTduvlrQqRA2GyxkKrEpEBY/Kcn6UalQNyLnr4nyaVAXBuVVWZLpkDgqovspM2mQGA6goPjT6dA5Ml4GiLSp0BkWW+xYFSoQOjoZUif1qhAaHhc391YqUDoB1N2HNupQGyXSQ1bXapA7CZApJnfqkBwtjY72GGrQPBFLdIW5KtAdNUjaVVmrED0ZBoAlOisQHj0EJfSaq1A+IMHLhHtrUB8E/7ET2+uQPyi9FuO8a5AfDLr8sxzr0AAwuGJC/avQMAobBAlPLBAgnDnW0R9sEBCuGKnY76wQAQA3vKC/7BAxEdZPqJAsUCGj9SJwYGxQEbXT9XgwrFABh/LIAAEskDIZkZsH0WyQIiuwbc+hrJASvY8A17HskAKPrhOfQizQMyFM5qcSbNAjM2u5buKs0BOFSox28uzQA5dpXz6DLRA0KQgyBlOtECQ7JsTOY+0QFA0F19Y0LRAEnySqncRtUDSww32llK1QJQLiUG2k7VAUlMEjdXUtUAUm3/Y9BW2QNTi+iMUV7ZAmCp2bzOYtkA=\",\"dtype\":\"float64\",\"shape\":[100]}},\"selected\":{\"id\":\"6029\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"6030\",\"type\":\"UnionRenderers\"}},\"id\":\"5536\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"5531\",\"type\":\"ColumnDataSource\"}},\"id\":\"5535\",\"type\":\"CDSView\"},{\"attributes\":{\"below\":[{\"id\":\"5499\",\"type\":\"LinearAxis\"}],\"center\":[{\"id\":\"5503\",\"type\":\"Grid\"},{\"id\":\"5508\",\"type\":\"Grid\"}],\"left\":[{\"id\":\"5504\",\"type\":\"LinearAxis\"}],\"renderers\":[{\"id\":\"5527\",\"type\":\"GlyphRenderer\"},{\"id\":\"5534\",\"type\":\"GlyphRenderer\"},{\"id\":\"5539\",\"type\":\"GlyphRenderer\"},{\"id\":\"5544\",\"type\":\"GlyphRenderer\"}],\"right\":[{\"id\":\"5530\",\"type\":\"ColorBar\"}],\"title\":{\"id\":\"5489\",\"type\":\"Title\"},\"toolbar\":{\"id\":\"5515\",\"type\":\"Toolbar\"},\"x_range\":{\"id\":\"5491\",\"type\":\"DataRange1d\"},\"x_scale\":{\"id\":\"5495\",\"type\":\"LinearScale\"},\"y_range\":{\"id\":\"5493\",\"type\":\"DataRange1d\"},\"y_scale\":{\"id\":\"5497\",\"type\":\"LinearScale\"}},\"id\":\"5488\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"overlay\":{\"id\":\"6033\",\"type\":\"BoxAnnotation\"}},\"id\":\"5511\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"5510\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"data_source\":{\"id\":\"5536\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"5537\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"5538\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"5540\",\"type\":\"CDSView\"}},\"id\":\"5539\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"5512\",\"type\":\"SaveTool\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_multi\":null,\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"5509\",\"type\":\"PanTool\"},{\"id\":\"5510\",\"type\":\"WheelZoomTool\"},{\"id\":\"5511\",\"type\":\"BoxZoomTool\"},{\"id\":\"5512\",\"type\":\"SaveTool\"},{\"id\":\"5513\",\"type\":\"ResetTool\"},{\"id\":\"5514\",\"type\":\"HelpTool\"}]},\"id\":\"5515\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"5514\",\"type\":\"HelpTool\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"5533\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"6019\",\"type\":\"BasicTicker\"},{\"attributes\":{\"high\":3.0,\"low\":0.0,\"palette\":[\"#5e4fa2\",\"#3288bd\",\"#66c2a5\",\"#abdda4\",\"#e6f598\",\"#ffffbf\",\"#fee08b\",\"#fdae61\",\"#f46d43\",\"#d53e4f\",\"#9e0142\"]},\"id\":\"5529\",\"type\":\"LinearColorMapper\"},{\"attributes\":{},\"id\":\"6026\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"lightgrey\"},\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":{\"value\":1.0},\"line_color\":{\"value\":\"black\"},\"line_dash\":[4,4],\"line_width\":{\"value\":2},\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"6033\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"6032\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"6031\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"6030\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"color_mapper\":{\"id\":\"5526\",\"type\":\"LinearColorMapper\"},\"dh\":{\"units\":\"data\",\"value\":15016.553024291992},\"dw\":{\"units\":\"data\",\"value\":0.428263089779648},\"image\":{\"field\":\"image\"},\"x\":{\"value\":0.41793353829416446},\"y\":{\"value\":78.65010070800781}},\"id\":\"5525\",\"type\":\"Image\"}],\"root_ids\":[\"5488\"]},\"title\":\"Bokeh Application\",\"version\":\"1.4.0\"}};\n", + " var render_items = [{\"docid\":\"9f622e40-9c1b-4df9-9c6c-1e117624b6da\",\"roots\":{\"5488\":\"c4ad9a76-f3c7-4ff2-8853-ea5f14511a39\"}}];\n", + " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n", + "\n", + " }\n", + " if (root.Bokeh !== undefined) {\n", + " embed_document(root);\n", + " } else {\n", + " var attempts = 0;\n", + " var timer = setInterval(function(root) {\n", + " if (root.Bokeh !== undefined) {\n", + " clearInterval(timer);\n", + " embed_document(root);\n", + " } else {\n", + " attempts++;\n", + " if (attempts > 100) {\n", + " clearInterval(timer);\n", + " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n", + " }\n", + " }\n", + " }, 10, root)\n", + " }\n", + "})(window);" + ], + "application/vnd.bokehjs_exec.v0+json": "" + }, + "metadata": { + "application/vnd.bokehjs_exec.v0+json": { + "id": "5488" + } + }, + "output_type": "display_data" + } + ], + "source": [ + "show(p)\n", + "show(p1)\n", + "show(p2)" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'low_intercept': -3630.119742500365, 'ave_peak_intensity': 6332.59, 'delta_bin': 5, 'high_i0': 0.8466769609192851, 'ave_i0': 0.6414089038877722, 'peak_bin': 25, 'low_slope': 15036.018845158875, 'low_i0': 0.41789974458224605}\n" + ] + } + ], + "source": [ + "results = {\n", + " 'low_slope': slope,\n", + " 'low_intercept': intercept,\n", + " 'low_i0': i0_low,\n", + " 'high_i0': i0_high,\n", + " 'ave_i0': i0_data.mean(),\n", + " 'ave_peak_intensity': integrated_intensity,\n", + " 'peak_bin': peak,\n", + " 'delta_bin': DELTA_BIN\n", + "}\n", + "\n", + "\n", + "#After processing\n", + "# Peak bin\n", + "# low and hi delta_r around peak bin\n", + "# Io low bound and high bound\n", + "# Average Io\n", + "# Average integrated intensity\n", + "# slope and intercept of fit of 2D plot\n", + "# sigma around line fit\n", + "# Run number\n", + "\n", + "print(results)" + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": {}, + "outputs": [ + { + "ename": "OSError", + "evalue": "[Errno 13] Permission denied: '/cds/home/opr/cxiopr/experiments/cxilv9518/jt_cal'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m\u001b[0m", + "\u001b[0;31mOSError\u001b[0mTraceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0mpath\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m'/cds/home/opr/cxiopr/experiments/cxilv9518/jt_cal/run148/'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mos\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpath\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0misdir\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mpath\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 7\u001b[0;31m \u001b[0mos\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmakedirs\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mpath\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 8\u001b[0m \u001b[0mgspec\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msave\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m''\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mjoin\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mpath\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'report.html'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/reg/g/psdm/sw/conda1/inst/miniconda2-prod-rhel7/envs/ana-2.0.11/lib/python2.7/os.pyc\u001b[0m in \u001b[0;36mmakedirs\u001b[0;34m(name, mode)\u001b[0m\n\u001b[1;32m 148\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mhead\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0mtail\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mpath\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mexists\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mhead\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 149\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 150\u001b[0;31m \u001b[0mmakedirs\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mhead\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmode\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 151\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mOSError\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 152\u001b[0m \u001b[0;31m# be happy if someone already created the path\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m/reg/g/psdm/sw/conda1/inst/miniconda2-prod-rhel7/envs/ana-2.0.11/lib/python2.7/os.pyc\u001b[0m in \u001b[0;36mmakedirs\u001b[0;34m(name, mode)\u001b[0m\n\u001b[1;32m 155\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mtail\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0mcurdir\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;31m# xxx/newdir/. exists if xxx/newdir exists\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 156\u001b[0m \u001b[0;32mreturn\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 157\u001b[0;31m \u001b[0mmkdir\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmode\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 158\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 159\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mremovedirs\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mOSError\u001b[0m: [Errno 13] Permission denied: '/cds/home/opr/cxiopr/experiments/cxilv9518/jt_cal'" + ] + } + ], + "source": [ + "gspec = pn.GridSpec(sizing_mode='stretch_both', max_height=1000)\n", + "gspec[0:3, 0:3] = p\n", + "gspec[4:6, 0:3] = p1\n", + "gspec[7:9, 0:3] = p2\n", + "path = '/cds/home/opr/cxiopr/experiments/cxilv9518/jt_cal/run148/'\n", + "if not os.path.isdir(path):\n", + " os.makedirs(path)\n", + "gspec.save(''.join([path, 'report.html']))" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "LCLS-I py2", + "language": "python", + "name": "ana1-current" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.15" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/jet_tracking/jet_tracking_cal/jt_cal.py b/jet_tracking/jet_tracking_cal/jt_cal.py new file mode 100644 index 0000000..a6f6695 --- /dev/null +++ b/jet_tracking/jet_tracking_cal/jt_cal.py @@ -0,0 +1,410 @@ +import h5py +import numpy as np +import matplotlib.pyplot as plt +import logging +import re +import time +import psana +import yaml +from scipy.optimize import curve_fit +from argparse import ArgumentParser +import json +import os +import sys +from bokeh.plotting import figure, show, output_file +from bokeh.models import Span, Legend, LegendItem, ColorBar, LinearColorMapper +from bokeh.io import output_notebook +import panel as pn +from scipy.stats import gaussian_kde + +logger = logging.getLogger(__name__) + +# Constants +# Location of my branch for testing +JT_LOC = '/cds/home/a/aegger/jet_tracking/jet_tracking/mpi_scripts/' +# Number of bins +BINS = 100 +# Number of events to process +EVENTS = 1000 +# Percent of max in histogram to reject for I0 data +LR_THRESH = 0.1 +# Number of points at each end of azav to fit +LINE_FIT_POINTS = 5 +# Number of bins around peak to include in integrated intensity +DELTA_BIN = 5 + +# For now hold equations here since, will consolidate + +def get_r_masks(shape, bins=100): + """Function to generate radial masks for pixels to include in azav""" + center = (shape[1] / 2, shape[0] / 2) + x, y = np.meshgrid(np.arange(shape[1]) - center[0], \ + np.arange(shape[0]) - center[1]) + r = np.sqrt(x**2 + y**2) + max_r = np.max(r) + min_r = np.min(r) + bin_size = (max_r - min_r) / bins + radii = np.arange(1, max_r, bin_size) + masks = [] + for i in radii: + mask = (np.greater(r, i - bin_size) & np.less(r, i + bin_size)) + masks.append(mask) + + return masks + +def gaussian(x, a, mean, std, m, b): + """ + Equation for gaussian with linear component + + Parameters + ---------- + x : float + X-coordinate. + + a : float + Amplitude of Gaussian. + + mean : float + Mean of Gaussian. + + std : float + Standard deviation of Gaussian. + + m : float + Slope of linear baseline. + + b : float + Y-intercept of linear baseline. + + Returns + ------- + y : float + The y-coordinate for the given x-coordinate as defined by the + parameters given for the Gaussian on a slope with offset. + """ + return (a * np.exp(-((x - mean) / 2 / std) ** 2)) + (m * x + b) + +def fit_line(ave_azav, fit_points=LINE_FIT_POINTS): + """ + Fit the line from edges of array + + Parameters + ---------- + ave_azav: ndarray + The average azimuthal average from calibration data 1D array of floats. + + fit_points: int (Default: 5) + Number of points at each end of average azimuthal average to fit. + + Returns + ------- + m: float + slope of the fit + + b: float + y intercept of fit + """ + azav_len = len(ave_azav) + x0 = fit_points / 2 + x1 = azav_len - (fit_points / 2) + y0 = np.mean(ave_azav[:fit_points]) + y1 = np.mean(ave_azav[azav_len - fit_points:]) + m, b = np.polyfit((x0, x1), (y0, y1), 1) + + return m, b + +def peak_lr(array_data, threshold=LR_THRESH, bins=BINS): + """Find max of normal distribution from histogram, + search right and left until population falls below threshold, + will run into problems with bimodal distribution. This is naive, + look at KDE + + Parameters + ---------- + array_data: array like + 1D array data to cut on + + threshold: float + percent of max population to throw out. Upper/lower + + bins: int + Number of bins to generate for histogram we cut on + + Returns + ------- + hist: np.histogram + Histogram from array_data and bins + + edges: ndarray + array of floats for edges of histogram fit + + peak_idx: int + peak index of histogram + + i0_low: float + lower i0 value of cut on histogram + + i0_high: float + upper i0 value of cut on histogram + + i0_med: float + median i0 value + """ + hist, edges = np.histogram(array_data, bins=bins) + + # Find peak information + peak_val = hist.max() + peak_idx = np.where(hist == peak_val)[0][0] + i0_med = edges[peak_idx] + + #search right + right = np.argmax(hist[peak_idx:] < threshold * peak_val) + right += peak_idx + i0_high = edges[right] + + # search left + left_array = hist[:peak_idx] + left = peak_idx - np.argmax(left_array[::-1] < threshold * peak_val) + i0_low = edges[left] + + return hist, peak_idx, i0_low, i0_high, i0_med + +def calc_azav_peak(ave_azav): + """ + Get the peak from the gaussian fit with linear offset, if this + fails, just use the max value. This could also use KDE. + + Parameters + ---------- + ave_azav: ndarray + radially binned average azimuthal intensity from used curves + + Returns + ------- + peak: int + index of the bin with the peak intensity + """ + azav_len = len(ave_azav) + # Fit the gaussian with line offset, fails for skewed gaussian + m, b = fit_line(ave_azav) + x = np.arange(azav_len) + mean = np.sum(x * ave_azav) / np.sum(ave_azav) + std = np.sqrt(np.sum((x - mean) ** 2 / azav_len)) + + # Try to get the peak from fit + try: + # Guass/w line args + p0 = [max(ave_azav), mean, std, m, b] + popt, _ = curve_fit(gaussian, x, ave_azav, p0=p0) + peak = int(round(popt[1])) + except Exception as e: + logger.info('Failed to fit Gaussian, using peak') + peak = np.argmax(ave_azav) + + return peak + +def get_integrated_intensity(ave_azav, peak_bin, delta_bin=DELTA_BIN): + """ + Get the average integrated intensity. Sum the bin values from + the peak bin to delta bin on each side. + + Parameters + ---------- + ave_azav: ndarray + radially binned average azimuthal intensity from used curves + + peak_bin: int + peak radial bin + + delta_bin: int + number of bins on each side of peak to include in sum + + Returns + ------- + integrated_intensity: float + the calculated integrated intensity + """ + low = peak_bin - delta_bin + high = peak_bin + delta_bin + integrated_intensity = ave_azav[low: high].sum(axis=0) + + return integrated_intensity + +def fit_limits(i0_data, peak_vals, i_low, i_high, bins=100): + """ + Get the line fit and standard deviation of the plot of i0 + vs int_intensities. This will give information about + distribution of integrated intensities for given i0 values + + Parameters + ---------- + i0_data: ndarray + Values of incoming intensities used in calibration + + peak_vals: ndarray + Values of the integrated intensities corrspeconding to i0 values + + """ + m, b = np.polyfit(i0_data, peak_vals, 1) + x = np.linspace(i_low, i_high, bins) + sigma = np.std(peak_vals) + y = x * m + b + + return x, y, m, b, sigma + + ###### Bokeh Figures ####### + +def peak_fig(signal, hist, edges, peak_idx, left, right): + """General histogram plotter with peak location and + left/right limits plotted""" + low = round(edges[left], 2) + hi = round(edges[right], 2) + fig = figure( + title='Used Intensity Distribution for {0}. \ + Low/Hi: {1}/{2}'.format(signal, low, hi), + x_axis_label='Intensity Values', + y_axis_label='Counts' + ) + fig.quad(top=hist, bottom=0, left=edges[:-1], right=edges[1:]) + left_line = Span(location=edges[left], dimension='height', \ + line_color='black') + right_line = Span(location=edges[right], dimension='height', \ + line_color='black') + peak_line = Span(location=edges[peak_idx], dimension='height', \ + line_color='red') + fig.renderers.extend([left_line, right_line, peak_line]) + + return fig + +def azav_fig(ave_azav, peak, intensity, delta_bin): + """Generate the azav fig for html file""" + x_vals = np.arange(len(ave_azav)) + fig = figure( + title='Average Azimuthal Binned Array: Center - {0}, min/max - {1}/{2}, intensity - {3}'.format(peak, peak-delta_bin, peak+delta_bin, round(intensity, 2)), + x_axis_label='Bins', + y_axis_label='Intensity', + ) + + peak_line = Span(location=peak, dimension='height', line_color='green', line_width=2) + lower_line = Span(location=peak-delta_bin, dimension='height', line_color='black') + upper_line = Span(location=peak+delta_bin, dimension='height', line_color='black') + ave_azav_curve = fig.scatter(x_vals, ave_azav) + fig.renderers.extend([peak_line, lower_line, upper_line]) + + azav_legend = Legend(items=[ + LegendItem(label='Azimuthal Average', renderers=[ave_azav_curve]) + ]) + fig.add_layout(azav_legend) + + return fig + +def intensity_hist(intensity_hist, edges): + fig = figure( + title='Intensity Histogram' + ) + fig.quad(top=intensity_hist, bottom=0, left=edges[:-1], right=edges[1:]) + + return fig + +def intensity_vs_peak_fig(intensity, peak_vals, x, y, slope, intercept, sigma): + """Simple plot of intensity vs peak value""" + fig = figure( + title='Peak value vs Intensity. Slope = {0}, Intercept = {1}'.format(round(slope, 2), round(intercept, 2)), + x_axis_label='Intensity Monitor Value', + y_axis_label='Peak Values' + ) + fig.x_range.range_padding = fig.y_range.range_padding = 0 + h, y_edge, x_edge = np.histogram2d(peak_vals, intensity, bins=100) + fig.image(image=[h], x=x_edge[0], y=y_edge[0], dh=y_edge[-1]-y_edge[0], dw=x_edge[-1]-x_edge[0], palette="Spectral11") + color_mapper = LinearColorMapper(palette="Spectral11", low=h.min(), high=h.max()) + color_bar = ColorBar(color_mapper=color_mapper, location=(0,0)) + fig.xaxis.bounds = [i0_low, i0_high] + fig.add_layout(color_bar, 'right') + fig.line(x, y, color='red') + fig.line(x, y - 1 * sigma, color='orange') + fig.line(x, y + 1 * sigma, color='orange') + return fig + # 2d histogram with limits plotted + # gspec[10:12, 0:3] = intensity_vs_peak_fig(i0_data_use, azav_intensity_vals, x, y, m, b, sigma) + + # results_dir = args.results_dir + # if not results_dir: + # results_dir = f'{results_path}/results.html' + + # if not os.path.exists(results_dir): + # logger.debug('results directory does not exist, creating') + # os.makedirs(results_dir) + + # logger.debug(f'Saving html file to {results_dir}') + # gspec.save(f'{results_path}/results.html') + + # results = { + # 'i0_low': i0_low, + # 'i0_high': i0_high, + # 'peak_azav_bin': peak_azav_bin, + # 'left_azav_bin': left_azav_bin, + # 'right_azav_bin': right_azav_bin, + # 'slope_fit': m, + # 'intercept': b, + # 'sigma': sigma + # } + # cal_dir = args.cal_dir + # if not cal_dir: + # cal_dir = f'{cal_path}/Run_{run}' + + # write_html(cal_dir, results, run) + +if __name__ == '__main__': + parser = ArgumentParser() + parser.add_argument('--exp', type=str, default=(os.environ['EXPERIMENT'])) + parser.add_argument('--run', type=str, default=(os.environ['RUN_NUM'])) + parser.add_argument('--cfg', type=str, \ + default=(''.join([JT_LOC, 'mpi_scripts/mpi_configs/default_config.yml']))) + args = parser.parse_args() + + with open(''.join(['mpi_configs/', args.cfg_file])) as f: + yml_dict = yaml.load(f, Loader=yaml.FullLoader) + api_port = yml_dict['api_msg']['port'] + det_map = yml_dict['det_map'] + ipm_name = yml_dict['ipm']['name'] + ipm_det = yml_dict['ipm']['det'] + hutch = yml_dict['hutch'] + + # Setup data source + exp_run = ''.join(['exp=', args.exp, ':run=', args.run]) + exp_dir = ''.join(['/reg/d/psdm/', hutch, '/', args.exp, '/xtc/']) + dsname = ''.join([exp_run, ':smd:', 'dir=', exp_dir]) + ds = psana.DataSource(dsname) + + # Get the detectors from the config + detector = psana.Detector(det_map['name']) + ipm = psana.Detector(ipm_name) + masks = get_r_masks((2203, 2299), BINS) + i0_data = [] + azav_data=[] + + # Find I0 distribution and filter out unused values + i0_data = np.array(i0_data) + i0_hist, i0_peak_idx, i0_low, i0_high, i0_med = peak_lr(i0_data) + i0_idxs = np.where((i0_data > i0_low) & (i0_data < i0_high)) + i0_data_use = i0_data[i0_idxs] + p = peak_fig('gdet', i0_hist, i0_peak_idx, i0_low, i0_high) + + # Get the azav value we'll use + azav_use = [azav_data[idx] for idx in i0_idxs[0]] + ave_azav = np.array((np.sum(azav_use, axis=0)) / len(azav_use)) + # Find the peak bin from average azav values + peak = calc_azav_peak(ave_azav) + + # Get the integrated intensity and generate fig + integrated_intensity = get_integrated_intensity(ave_azav, peak, DELTA_BIN) + p1 = azav_fig(ave_azav, peak, integrated_intensity, DELTA_BIN) + + + # Go back through indices and find peak values for all the intensities + low = peak - DELTA_BIN + high = peak + DELTA_BIN + peak_vals = [azav[low:high].sum(axis=0) for azav in azav_use] + # Now fit I0 vs diffraction intensities + x, y, slope, intercept, sigma = fit_limits(i0_data_use, peak_vals, i0_low, i0_high) + p2 = intensity_vs_peak_fig(i0_data_use, peak_vals, x, y, slope, intercept, sigma) \ No newline at end of file diff --git a/jet_tracking/jet_tracking_cal/jt_cal_arp.py b/jet_tracking/jet_tracking_cal/jt_cal_arp.py new file mode 100644 index 0000000..656589b --- /dev/null +++ b/jet_tracking/jet_tracking_cal/jt_cal_arp.py @@ -0,0 +1,17 @@ +# EXPRUN = 'exp=cxilv9518:run=148' +# INFO = re.split('=|:', EXPRUN) +# EXP = INFO[1] +# HUTCH = EXP[:3] +# # Number of bins +# BINS = 100 +# # Number of events to process +# EVENTS = 1000 +# EXPDIR = ''.join(['/reg/d/psdm/', HUTCH, '/', EXP, '/xtc/']) +# DSNAME = ''.join([EXPRUN, ':smd:', 'dir=', EXPDIR]) +import os +from argparse import ArgumentParser + +parser = ArgumentParser() +parser.add_argument('--exp', type=str, default=(os.environ['EXPERIMENT'])) +parser.add_argument('--run', type=str, default=(os.environ['RUN_NUM'])) +parser.add_argument('--cfg', type=str, default=('')) \ No newline at end of file diff --git a/jet_tracking/jet_tracking_cal/submit_jt_arp.sh b/jet_tracking/jet_tracking_cal/submit_jt_arp.sh new file mode 100644 index 0000000..206b931 --- /dev/null +++ b/jet_tracking/jet_tracking_cal/submit_jt_arp.sh @@ -0,0 +1,5 @@ +#!/bin/bash +# Script to get the data for a jet tracking calibration +source /reg/g/psdm/etc/psconda.sh +ABS_PATH=/cds/home/a/aegger/jet_tracking/jet_tracking/jet_tracking_cal +sbatch --nodes=2 --time=5 $ABS_PATH/jt_cal.py "$@" \ No newline at end of file From b05e02944f7566bc9a52c104443bb9aeb91dd28e Mon Sep 17 00:00:00 2001 From: Adam Date: Tue, 3 Nov 2020 12:27:39 -0800 Subject: [PATCH 02/23] starting to test --- jet_tracking/jet_tracking_cal/jt_cal.py | 36 ++++++++----------- jet_tracking/jet_tracking_cal/jt_cal_arp.py | 17 --------- .../jet_tracking_cal/submit_jt_arp.sh | 4 +-- 3 files changed, 17 insertions(+), 40 deletions(-) delete mode 100644 jet_tracking/jet_tracking_cal/jt_cal_arp.py mode change 100644 => 100755 jet_tracking/jet_tracking_cal/submit_jt_arp.sh diff --git a/jet_tracking/jet_tracking_cal/jt_cal.py b/jet_tracking/jet_tracking_cal/jt_cal.py index a6f6695..19dff6d 100644 --- a/jet_tracking/jet_tracking_cal/jt_cal.py +++ b/jet_tracking/jet_tracking_cal/jt_cal.py @@ -135,12 +135,6 @@ def peak_lr(array_data, threshold=LR_THRESH, bins=BINS): hist: np.histogram Histogram from array_data and bins - edges: ndarray - array of floats for edges of histogram fit - - peak_idx: int - peak index of histogram - i0_low: float lower i0 value of cut on histogram @@ -167,7 +161,7 @@ def peak_lr(array_data, threshold=LR_THRESH, bins=BINS): left = peak_idx - np.argmax(left_array[::-1] < threshold * peak_val) i0_low = edges[left] - return hist, peak_idx, i0_low, i0_high, i0_med + return hist, i0_low, i0_high, i0_med def calc_azav_peak(ave_azav): """ @@ -254,23 +248,21 @@ def fit_limits(i0_data, peak_vals, i_low, i_high, bins=100): ###### Bokeh Figures ####### -def peak_fig(signal, hist, edges, peak_idx, left, right): +def peak_fig(signal, hist, med, low, high): """General histogram plotter with peak location and left/right limits plotted""" - low = round(edges[left], 2) - hi = round(edges[right], 2) fig = figure( title='Used Intensity Distribution for {0}. \ - Low/Hi: {1}/{2}'.format(signal, low, hi), + Low/Hi: {1}/{2}'.format(signal, low, high), x_axis_label='Intensity Values', y_axis_label='Counts' ) fig.quad(top=hist, bottom=0, left=edges[:-1], right=edges[1:]) - left_line = Span(location=edges[left], dimension='height', \ + left_line = Span(location=low, dimension='height', \ line_color='black') - right_line = Span(location=edges[right], dimension='height', \ + right_line = Span(location=high, dimension='height', \ line_color='black') - peak_line = Span(location=edges[peak_idx], dimension='height', \ + peak_line = Span(location=med, dimension='height', \ line_color='red') fig.renderers.extend([left_line, right_line, peak_line]) @@ -356,13 +348,15 @@ def intensity_vs_peak_fig(intensity, peak_vals, x, y, slope, intercept, sigma): if __name__ == '__main__': parser = ArgumentParser() - parser.add_argument('--exp', type=str, default=(os.environ['EXPERIMENT'])) - parser.add_argument('--run', type=str, default=(os.environ['RUN_NUM'])) + parser.add_argument('--exp', type=str, default=(os.environ.get('EXPERIMENT', None))) + parser.add_argument('--run', type=str, default=(os.environ.get('RUN_NUM', None))) parser.add_argument('--cfg', type=str, \ default=(''.join([JT_LOC, 'mpi_scripts/mpi_configs/default_config.yml']))) args = parser.parse_args() - with open(''.join(['mpi_configs/', args.cfg_file])) as f: + # All useful information should come from the config file + # This will be source of truth for starting point for each hutch for now + with open(args.cfg) as f: yml_dict = yaml.load(f, Loader=yaml.FullLoader) api_port = yml_dict['api_msg']['port'] det_map = yml_dict['det_map'] @@ -385,10 +379,11 @@ def intensity_vs_peak_fig(intensity, peak_vals, x, y, slope, intercept, sigma): # Find I0 distribution and filter out unused values i0_data = np.array(i0_data) - i0_hist, i0_peak_idx, i0_low, i0_high, i0_med = peak_lr(i0_data) + i0_hist, i0_low, i0_high, i0_med = peak_lr(i0_data) i0_idxs = np.where((i0_data > i0_low) & (i0_data < i0_high)) i0_data_use = i0_data[i0_idxs] - p = peak_fig('gdet', i0_hist, i0_peak_idx, i0_low, i0_high) + # Generate figure for i0 params + p = peak_fig('i0 Values', i0_hist, i0_med, i0_low, i0_high) # Get the azav value we'll use azav_use = [azav_data[idx] for idx in i0_idxs[0]] @@ -400,11 +395,10 @@ def intensity_vs_peak_fig(intensity, peak_vals, x, y, slope, intercept, sigma): integrated_intensity = get_integrated_intensity(ave_azav, peak, DELTA_BIN) p1 = azav_fig(ave_azav, peak, integrated_intensity, DELTA_BIN) - # Go back through indices and find peak values for all the intensities low = peak - DELTA_BIN high = peak + DELTA_BIN peak_vals = [azav[low:high].sum(axis=0) for azav in azav_use] # Now fit I0 vs diffraction intensities x, y, slope, intercept, sigma = fit_limits(i0_data_use, peak_vals, i0_low, i0_high) - p2 = intensity_vs_peak_fig(i0_data_use, peak_vals, x, y, slope, intercept, sigma) \ No newline at end of file + p2 = intensity_vs_peak_fig(i0_data_use, peak_vals, x, y, slope, intercept, sigma) diff --git a/jet_tracking/jet_tracking_cal/jt_cal_arp.py b/jet_tracking/jet_tracking_cal/jt_cal_arp.py deleted file mode 100644 index 656589b..0000000 --- a/jet_tracking/jet_tracking_cal/jt_cal_arp.py +++ /dev/null @@ -1,17 +0,0 @@ -# EXPRUN = 'exp=cxilv9518:run=148' -# INFO = re.split('=|:', EXPRUN) -# EXP = INFO[1] -# HUTCH = EXP[:3] -# # Number of bins -# BINS = 100 -# # Number of events to process -# EVENTS = 1000 -# EXPDIR = ''.join(['/reg/d/psdm/', HUTCH, '/', EXP, '/xtc/']) -# DSNAME = ''.join([EXPRUN, ':smd:', 'dir=', EXPDIR]) -import os -from argparse import ArgumentParser - -parser = ArgumentParser() -parser.add_argument('--exp', type=str, default=(os.environ['EXPERIMENT'])) -parser.add_argument('--run', type=str, default=(os.environ['RUN_NUM'])) -parser.add_argument('--cfg', type=str, default=('')) \ No newline at end of file diff --git a/jet_tracking/jet_tracking_cal/submit_jt_arp.sh b/jet_tracking/jet_tracking_cal/submit_jt_arp.sh old mode 100644 new mode 100755 index 206b931..4e619d5 --- a/jet_tracking/jet_tracking_cal/submit_jt_arp.sh +++ b/jet_tracking/jet_tracking_cal/submit_jt_arp.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Script to get the data for a jet tracking calibration + source /reg/g/psdm/etc/psconda.sh ABS_PATH=/cds/home/a/aegger/jet_tracking/jet_tracking/jet_tracking_cal -sbatch --nodes=2 --time=5 $ABS_PATH/jt_cal.py "$@" \ No newline at end of file +sbatch --nodes=2 --time=5 $ABS_PATH/jt_cal.py "$@" From 9481a858f39e456674dc4acd0875ea5f24617960 Mon Sep 17 00:00:00 2001 From: Adam Egger Date: Tue, 3 Nov 2020 12:28:16 -0800 Subject: [PATCH 03/23] the default config file --- .../mpi_configs/default_config.yml | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 jet_tracking/mpi_scripts/mpi_configs/default_config.yml diff --git a/jet_tracking/mpi_scripts/mpi_configs/default_config.yml b/jet_tracking/mpi_scripts/mpi_configs/default_config.yml new file mode 100644 index 0000000..96034b1 --- /dev/null +++ b/jet_tracking/mpi_scripts/mpi_configs/default_config.yml @@ -0,0 +1,23 @@ +api_msg: + port: 5000 + +det_map: + name: 'jungfrau4M' + shape: + - 2203 + - 2299 + dtype: float32 + bins: 100 + +pv_map: + 1: 'CXI:JTRK:REQ:DIFF_INTENSITY' + 2: 'CXI:JTRK:REQ:I0' + +ipm: + name: 'FEEGasDetEnergy' + det: 'f_12_ENRC' + +hutch: 'cxi' +#ipm: +# name: 'CXI-DG2-BMMON' +# det: None From 576db3872ef43b046cdac6c8b635f1d7042c0329 Mon Sep 17 00:00:00 2001 From: Adam Date: Tue, 3 Nov 2020 12:58:45 -0800 Subject: [PATCH 04/23] correct conda env, fix bugs with plots --- jet_tracking/jet_tracking_cal/jt_cal.py | 48 +++++++++++++++---- .../jet_tracking_cal/submit_jt_arp.sh | 2 +- 2 files changed, 39 insertions(+), 11 deletions(-) diff --git a/jet_tracking/jet_tracking_cal/jt_cal.py b/jet_tracking/jet_tracking_cal/jt_cal.py index 19dff6d..e894410 100644 --- a/jet_tracking/jet_tracking_cal/jt_cal.py +++ b/jet_tracking/jet_tracking_cal/jt_cal.py @@ -21,7 +21,7 @@ # Constants # Location of my branch for testing -JT_LOC = '/cds/home/a/aegger/jet_tracking/jet_tracking/mpi_scripts/' +JT_LOC = '/cds/home/a/aegger/jet_tracking/jet_tracking/' # Number of bins BINS = 100 # Number of events to process @@ -257,7 +257,7 @@ def peak_fig(signal, hist, med, low, high): x_axis_label='Intensity Values', y_axis_label='Counts' ) - fig.quad(top=hist, bottom=0, left=edges[:-1], right=edges[1:]) + fig.quad(top=hist, bottom=0, left=low, right=high) left_line = Span(location=low, dimension='height', \ line_color='black') right_line = Span(location=high, dimension='height', \ @@ -272,14 +272,19 @@ def azav_fig(ave_azav, peak, intensity, delta_bin): """Generate the azav fig for html file""" x_vals = np.arange(len(ave_azav)) fig = figure( - title='Average Azimuthal Binned Array: Center - {0}, min/max - {1}/{2}, intensity - {3}'.format(peak, peak-delta_bin, peak+delta_bin, round(intensity, 2)), + title='Average Azimuthal Binned Array: Center - {0}, \ + min/max - {1}/{2}, intensity - {3}'.format(peak, \ + peak-delta_bin, peak+delta_bin, round(intensity, 2)), x_axis_label='Bins', y_axis_label='Intensity', ) - peak_line = Span(location=peak, dimension='height', line_color='green', line_width=2) - lower_line = Span(location=peak-delta_bin, dimension='height', line_color='black') - upper_line = Span(location=peak+delta_bin, dimension='height', line_color='black') + peak_line = Span(location=peak, dimension='height', \ + line_color='green', line_width=2) + lower_line = Span(location=peak-delta_bin, dimension='height', \ + line_color='black') + upper_line = Span(location=peak+delta_bin, dimension='height', \ + line_color='black') ave_azav_curve = fig.scatter(x_vals, ave_azav) fig.renderers.extend([peak_line, lower_line, upper_line]) @@ -301,13 +306,15 @@ def intensity_hist(intensity_hist, edges): def intensity_vs_peak_fig(intensity, peak_vals, x, y, slope, intercept, sigma): """Simple plot of intensity vs peak value""" fig = figure( - title='Peak value vs Intensity. Slope = {0}, Intercept = {1}'.format(round(slope, 2), round(intercept, 2)), + title='Peak value vs Intensity. Slope = {0}, Intercept = {1}'.\ + format(round(slope, 2), round(intercept, 2)), x_axis_label='Intensity Monitor Value', y_axis_label='Peak Values' ) fig.x_range.range_padding = fig.y_range.range_padding = 0 h, y_edge, x_edge = np.histogram2d(peak_vals, intensity, bins=100) - fig.image(image=[h], x=x_edge[0], y=y_edge[0], dh=y_edge[-1]-y_edge[0], dw=x_edge[-1]-x_edge[0], palette="Spectral11") + fig.image(image=[h], x=x_edge[0], y=y_edge[0], dh=y_edge[-1]-y_edge[0], \ + dw=x_edge[-1]-x_edge[0], palette="Spectral11") color_mapper = LinearColorMapper(palette="Spectral11", low=h.min(), high=h.max()) color_bar = ColorBar(color_mapper=color_mapper, location=(0,0)) fig.xaxis.bounds = [i0_low, i0_high] @@ -348,8 +355,10 @@ def intensity_vs_peak_fig(intensity, peak_vals, x, y, slope, intercept, sigma): if __name__ == '__main__': parser = ArgumentParser() - parser.add_argument('--exp', type=str, default=(os.environ.get('EXPERIMENT', None))) - parser.add_argument('--run', type=str, default=(os.environ.get('RUN_NUM', None))) + parser.add_argument('--exp', type=str, \ + default=(os.environ.get('EXPERIMENT', None))) + parser.add_argument('--run', type=str, \ + default=(os.environ.get('RUN_NUM', None))) parser.add_argument('--cfg', type=str, \ default=(''.join([JT_LOC, 'mpi_scripts/mpi_configs/default_config.yml']))) args = parser.parse_args() @@ -376,6 +385,25 @@ def intensity_vs_peak_fig(intensity, peak_vals, x, y, slope, intercept, sigma): masks = get_r_masks((2203, 2299), BINS) i0_data = [] azav_data=[] + ped = detector.pedestals(1)[0] + logger.info('starting to evaluate 1000 events') + print('starting to evaluate 1000 events') + for evt_idx, evt in enumerate(ds.events()): + if evt_idx % 100 == 0: + logger.info('finished {} events'.format(evt_idx)) + print('finished {} events'.format(evt_idx)) + raw = detector.raw_data(evt) - ped + image = detector.image(evt, raw) + azav = np.array([np.mean(image[mask]) for mask in masks]) + azav_data.append(azav) + try: + i0_data.append(ipm.get(evt).f_12_ENRC()) + except: + logger.warning('missing i0 for event {}'.format(evt_idx)) + i0_data.append(0.0) + + if evt_idx == 100: + break # Find I0 distribution and filter out unused values i0_data = np.array(i0_data) diff --git a/jet_tracking/jet_tracking_cal/submit_jt_arp.sh b/jet_tracking/jet_tracking_cal/submit_jt_arp.sh index 4e619d5..d6efc45 100755 --- a/jet_tracking/jet_tracking_cal/submit_jt_arp.sh +++ b/jet_tracking/jet_tracking_cal/submit_jt_arp.sh @@ -1,5 +1,5 @@ #!/bin/bash -source /reg/g/psdm/etc/psconda.sh +source /reg/g/psdm/sw/conda1/manage/bin/psconda.sh ABS_PATH=/cds/home/a/aegger/jet_tracking/jet_tracking/jet_tracking_cal sbatch --nodes=2 --time=5 $ABS_PATH/jt_cal.py "$@" From c5a57f7ce4287e46656bac812d3f7ed3b945429e Mon Sep 17 00:00:00 2001 From: Adam Date: Tue, 3 Nov 2020 16:14:23 -0800 Subject: [PATCH 05/23] couple of more args --- jet_tracking/jet_tracking_cal/jt_cal.py | 85 +++++++++++++------------ 1 file changed, 45 insertions(+), 40 deletions(-) diff --git a/jet_tracking/jet_tracking_cal/jt_cal.py b/jet_tracking/jet_tracking_cal/jt_cal.py index e894410..60777bb 100644 --- a/jet_tracking/jet_tracking_cal/jt_cal.py +++ b/jet_tracking/jet_tracking_cal/jt_cal.py @@ -323,35 +323,6 @@ def intensity_vs_peak_fig(intensity, peak_vals, x, y, slope, intercept, sigma): fig.line(x, y - 1 * sigma, color='orange') fig.line(x, y + 1 * sigma, color='orange') return fig - # 2d histogram with limits plotted - # gspec[10:12, 0:3] = intensity_vs_peak_fig(i0_data_use, azav_intensity_vals, x, y, m, b, sigma) - - # results_dir = args.results_dir - # if not results_dir: - # results_dir = f'{results_path}/results.html' - - # if not os.path.exists(results_dir): - # logger.debug('results directory does not exist, creating') - # os.makedirs(results_dir) - - # logger.debug(f'Saving html file to {results_dir}') - # gspec.save(f'{results_path}/results.html') - - # results = { - # 'i0_low': i0_low, - # 'i0_high': i0_high, - # 'peak_azav_bin': peak_azav_bin, - # 'left_azav_bin': left_azav_bin, - # 'right_azav_bin': right_azav_bin, - # 'slope_fit': m, - # 'intercept': b, - # 'sigma': sigma - # } - # cal_dir = args.cal_dir - # if not cal_dir: - # cal_dir = f'{cal_path}/Run_{run}' - - # write_html(cal_dir, results, run) if __name__ == '__main__': parser = ArgumentParser() @@ -361,28 +332,34 @@ def intensity_vs_peak_fig(intensity, peak_vals, x, y, slope, intercept, sigma): default=(os.environ.get('RUN_NUM', None))) parser.add_argument('--cfg', type=str, \ default=(''.join([JT_LOC, 'mpi_scripts/mpi_configs/default_config.yml']))) + parser.add_argument('--delta_bin', type=int, \ + default=(DELTA_BIN)) + parser.add_argument('--bins', type=int, \ + default=(BINS)) args = parser.parse_args() # All useful information should come from the config file # This will be source of truth for starting point for each hutch for now with open(args.cfg) as f: yml_dict = yaml.load(f, Loader=yaml.FullLoader) - api_port = yml_dict['api_msg']['port'] det_map = yml_dict['det_map'] ipm_name = yml_dict['ipm']['name'] ipm_det = yml_dict['ipm']['det'] hutch = yml_dict['hutch'] - # Setup data source + # Setup data source and write directories exp_run = ''.join(['exp=', args.exp, ':run=', args.run]) - exp_dir = ''.join(['/reg/d/psdm/', hutch, '/', args.exp, '/xtc/']) + base_dir = ''.join(['/cds/data/psdm/', hutch, '/', args.exp, '/']) + exp_dir = ''.join([base_dir, 'xtc/']) + plots_dir = ''.join([base_dir, 'stats/summary/']) + results_dir = ''.join([base_dir, 'results']) dsname = ''.join([exp_run, ':smd:', 'dir=', exp_dir]) ds = psana.DataSource(dsname) # Get the detectors from the config detector = psana.Detector(det_map['name']) ipm = psana.Detector(ipm_name) - masks = get_r_masks((2203, 2299), BINS) + masks = get_r_masks(det_map['shape'], args.bins) i0_data = [] azav_data=[] ped = detector.pedestals(1)[0] @@ -402,7 +379,7 @@ def intensity_vs_peak_fig(intensity, peak_vals, x, y, slope, intercept, sigma): logger.warning('missing i0 for event {}'.format(evt_idx)) i0_data.append(0.0) - if evt_idx == 100: + if evt_idx == 1000: break # Find I0 distribution and filter out unused values @@ -417,16 +394,44 @@ def intensity_vs_peak_fig(intensity, peak_vals, x, y, slope, intercept, sigma): azav_use = [azav_data[idx] for idx in i0_idxs[0]] ave_azav = np.array((np.sum(azav_use, axis=0)) / len(azav_use)) # Find the peak bin from average azav values - peak = calc_azav_peak(ave_azav) + peak_bin = calc_azav_peak(ave_azav) # Get the integrated intensity and generate fig - integrated_intensity = get_integrated_intensity(ave_azav, peak, DELTA_BIN) - p1 = azav_fig(ave_azav, peak, integrated_intensity, DELTA_BIN) + integrated_intensity = get_integrated_intensity(ave_azav, peak_bin, args.delta_bin) + p1 = azav_fig(ave_azav, peak_bin, integrated_intensity, args.delta_bin) # Go back through indices and find peak values for all the intensities - low = peak - DELTA_BIN - high = peak + DELTA_BIN - peak_vals = [azav[low:high].sum(axis=0) for azav in azav_use] + low_bin = peak_bin - args.delta_bin + high_bin = peak_bin + args.delta_bin + peak_vals = [azav[low_bin:high_bin].sum(axis=0) for azav in azav_use] # Now fit I0 vs diffraction intensities x, y, slope, intercept, sigma = fit_limits(i0_data_use, peak_vals, i0_low, i0_high) p2 = intensity_vs_peak_fig(i0_data_use, peak_vals, x, y, slope, intercept, sigma) + + # Ratio information + ratios = peak_vals / i0_data_use + mean_ratio = np.mean(ratios) + med_ratio = np.median(ratios) + std_ratio = np.std(ratios) + + # Accumulate results + results = { + 'i0_low': i0_low, + 'i0_high': i0_high, + 'peak_bin': peak_bin, + 'delta_bin': args.delta_bin, + 'mean_ratio': mean_ratio, + 'med_ratio': med_ratio, + 'std_ratio': std_ratio + } + + # Write results to file + with open(''.join([results_dir, '/', args.run, '_results']), 'w') as f: + json.dumps(results, f, sort_keys=True, indent=4) + + # Accumulate plots and write + gspec = pn.GridSpec() + gspec[0:3, 0:3] = p + gspec[4:6, 0:3] = p1 + gspec[7:9, 0:3] = p2 + gspec.save(''.join([plots_dir, 'results_', args.run, '.html'])) From 68ca13869a517b6a9a965f98a480904707dd6642 Mon Sep 17 00:00:00 2001 From: Adam Date: Tue, 3 Nov 2020 17:07:54 -0800 Subject: [PATCH 06/23] this is working --- jet_tracking/jet_tracking_cal/jt_cal.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/jet_tracking/jet_tracking_cal/jt_cal.py b/jet_tracking/jet_tracking_cal/jt_cal.py index 60777bb..1e1d6ca 100644 --- a/jet_tracking/jet_tracking_cal/jt_cal.py +++ b/jet_tracking/jet_tracking_cal/jt_cal.py @@ -364,7 +364,7 @@ def intensity_vs_peak_fig(intensity, peak_vals, x, y, slope, intercept, sigma): azav_data=[] ped = detector.pedestals(1)[0] logger.info('starting to evaluate 1000 events') - print('starting to evaluate 1000 events') + for evt_idx, evt in enumerate(ds.events()): if evt_idx % 100 == 0: logger.info('finished {} events'.format(evt_idx)) @@ -425,6 +425,8 @@ def intensity_vs_peak_fig(intensity, peak_vals, x, y, slope, intercept, sigma): 'std_ratio': std_ratio } + print(' found results ', results) + # Write results to file with open(''.join([results_dir, '/', args.run, '_results']), 'w') as f: json.dumps(results, f, sort_keys=True, indent=4) @@ -435,3 +437,5 @@ def intensity_vs_peak_fig(intensity, peak_vals, x, y, slope, intercept, sigma): gspec[4:6, 0:3] = p1 gspec[7:9, 0:3] = p2 gspec.save(''.join([plots_dir, 'results_', args.run, '.html'])) + + print('finished with calibration') From 709fb2744a7fbf2db66328f55bf59444ccd31e48 Mon Sep 17 00:00:00 2001 From: Adam Date: Wed, 25 Nov 2020 00:26:40 -0800 Subject: [PATCH 07/23] put all mpi work into repo --- jet_tracking/mpi_scripts/__init__.py | 0 jet_tracking/mpi_scripts/mpi_api.py | 35 +++++ .../mpi_configs/default_config.yml | 4 +- .../mpi_configs/smalldata_plot.yml | 71 +++++++++ jet_tracking/mpi_scripts/mpi_driver.py | 59 +++++++ jet_tracking/mpi_scripts/mpi_master.py | 145 ++++++++++++++++++ jet_tracking/mpi_scripts/mpi_worker.py | 137 +++++++++++++++++ jet_tracking/mpi_scripts/runMpiScript | 81 ++++++++++ jet_tracking/mpi_scripts/utils.py | 25 +++ 9 files changed, 554 insertions(+), 3 deletions(-) create mode 100644 jet_tracking/mpi_scripts/__init__.py create mode 100644 jet_tracking/mpi_scripts/mpi_api.py create mode 100644 jet_tracking/mpi_scripts/mpi_configs/smalldata_plot.yml create mode 100644 jet_tracking/mpi_scripts/mpi_driver.py create mode 100644 jet_tracking/mpi_scripts/mpi_master.py create mode 100644 jet_tracking/mpi_scripts/mpi_worker.py create mode 100755 jet_tracking/mpi_scripts/runMpiScript create mode 100644 jet_tracking/mpi_scripts/utils.py diff --git a/jet_tracking/mpi_scripts/__init__.py b/jet_tracking/mpi_scripts/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/jet_tracking/mpi_scripts/mpi_api.py b/jet_tracking/mpi_scripts/mpi_api.py new file mode 100644 index 0000000..17ee959 --- /dev/null +++ b/jet_tracking/mpi_scripts/mpi_api.py @@ -0,0 +1,35 @@ +import yaml +import zmq +import numpy as np +import argparse +parser = argparse.ArgumentParser() +parser.add_argument('--cfg_file', help='if specified, has information about what metadata to use', type=str, default='default_config.yml') +args = parser.parse_args() + +with open(''.join(['mpi_configs/', args.cfg_file])) as f: + yml_dict = yaml.load(f, Loader=yaml.FullLoader) + api_port = yml_dict['api_msg']['port'] + +context = zmq.Context() +socket = context.socket(zmq.PAIR) +socket.connect(''.join(['tcp://localhost:', str(api_port)])) + +# Example for subscribing to np arrays zmq +#context_data = zmq.Context() +#socket_data = context_data.socket(zmq.SUB) +#socket_data.connect(''.join(['tcp://localhost:', '8123'])) +#socket_data.subscribe("") # All topics +#while True: +# md = socket_data.recv_json(flags=0) +# msg = socket.recv(flags=0, copy=False, track=False) +# buf = memoryview(msg) +# data = np.frombuffer(buf, dtype=md['dtype']) +# print('data ', data.reshape(md['shape'])) + +def abort(): + """Abort MPI run""" + socket.send('abort') + +def pause(): + """Pause MPI run""" + socket.send('pause') diff --git a/jet_tracking/mpi_scripts/mpi_configs/default_config.yml b/jet_tracking/mpi_scripts/mpi_configs/default_config.yml index 96034b1..d1ee959 100644 --- a/jet_tracking/mpi_scripts/mpi_configs/default_config.yml +++ b/jet_tracking/mpi_scripts/mpi_configs/default_config.yml @@ -7,7 +7,7 @@ det_map: - 2203 - 2299 dtype: float32 - bins: 100 + bins: 50 pv_map: 1: 'CXI:JTRK:REQ:DIFF_INTENSITY' @@ -16,8 +16,6 @@ pv_map: ipm: name: 'FEEGasDetEnergy' det: 'f_12_ENRC' - -hutch: 'cxi' #ipm: # name: 'CXI-DG2-BMMON' # det: None diff --git a/jet_tracking/mpi_scripts/mpi_configs/smalldata_plot.yml b/jet_tracking/mpi_scripts/mpi_configs/smalldata_plot.yml new file mode 100644 index 0000000..8bc2555 --- /dev/null +++ b/jet_tracking/mpi_scripts/mpi_configs/smalldata_plot.yml @@ -0,0 +1,71 @@ +master: + server: daq-cxi-mon05 + port: 5000 + +ipm_ttampl: + port: 5014 + var1: ipm2__sum + var2: tt__AMPL + number_of_events: 1200 + width: 900 + height: 600 + updateRate: 2 + xRange: + - auto + - 0.4 + yRange: + - auto + - 2000. + +ipm_ROI: + port: 5015 + var1: ipm2__sum + var2: jungfrau512k__ROI_1 + number_of_events: 1200 + width: 900 + height: 600 + updateRate: 2 + xRange: + - auto + - 0.4 + yRange: + - auto + - 2000. + +ROI_scan: + port: 5016 + i0var: ipm2__sum + sigvar: jungfrau512k__ROI_1 + binWidth: 100 + binEntries: 50 + FilterVar: + - lightStatus__xray + - ipm2__sum + FilterVarMin: + - 0.5 + - 50 + FilterVarMax: + - 1.5 + - 1000000. + width: 900 + height: 600 + updateRate: 2 + xRange: + - auto + - 0.4 + yRange: + - auto + - 2000. + +tt_fltpos_time: + port: 5015 + var1: ttall + var1_idx: 0 + number_of_events: 14400 + width: 900 + height: 300 + updateRate: 5 + yRange: + - auto + - 2000. + diff --git a/jet_tracking/mpi_scripts/mpi_driver.py b/jet_tracking/mpi_scripts/mpi_driver.py new file mode 100644 index 0000000..94b80a2 --- /dev/null +++ b/jet_tracking/mpi_scripts/mpi_driver.py @@ -0,0 +1,59 @@ +# Local imports +from mpi_worker import MpiWorker +from mpi_master import MpiMaster +from utils import get_r_masks, get_evr_w_codes +from mpi4py import MPI +import psana +import yaml +import re +import argparse + +comm = MPI.COMM_WORLD +size = comm.Get_size() +rank = comm.Get_rank() + +# All the args +parser = argparse.ArgumentParser() +parser.add_argument('--exprun', help='psana experiment/run string (e.g. exp=xppd7114:run=43)', type=str, default='') +#parser.add_argument('--dsname', help='data source name', type=str, default='') +parser.add_argument('--nevts', help='number of events', default=50, type=int) +parser.add_argument('--cfg_file', help='if specified, has information about what metadata to use', type=str, default='default_config.yml') +args = parser.parse_args() + +# Two options for now, offline data or shared memory +if args.exprun: + info = re.split('=|:', args.exprun) + exp = info[1] + hutch = exp[:3] + exp_dir = ''.join(['/reg/d/psdm/', hutch, '/', exp, '/xtc/']) + dsname = ''.join([args.exprun, ':smd:', 'dir=', exp_dir]) +else: + dsname = 'shmem=psana.0:stop=no' + psana.setOption('psana.calib-dir', '/reg/d/psdm/cxi/cxilv9518/calib/') + +# Parse config file to hand to workers +with open(''.join(['mpi_configs/', args.cfg_file])) as f: + yml_dict = yaml.load(f, Loader=yaml.FullLoader) + api_port = yml_dict['api_msg']['port'] + det_map = yml_dict['det_map'] + ipm_name = yml_dict['ipm']['name'] + ipm_det = yml_dict['ipm']['det'] + pv_map = yml_dict['pv_map'] +print('here is pv map!!! ', pv_map) +# No way to do this only once with MPI +ds = psana.DataSource(dsname) +# Main detector we're looking at +detector = psana.Detector(det_map['name']) +# Intensity monitor, could be wave8 or gdet with detector +ipm = (psana.Detector(ipm_name), ipm_det) +# Because we never know hich evr will have event codes +evr = get_evr_w_codes(psana.DetNames()) +# Get the R masks, would be great to do this only once +r_mask = get_r_masks(det_map['shape']) +print(psana.DetNames()) +if rank == 0: + master = MpiMaster(rank, api_port, det_map, pv_map) + master.start_run() +else: + worker = MpiWorker(ds, args.nevts, detector, ipm, evr, r_mask) + worker.start_run() diff --git a/jet_tracking/mpi_scripts/mpi_master.py b/jet_tracking/mpi_scripts/mpi_master.py new file mode 100644 index 0000000..86bf061 --- /dev/null +++ b/jet_tracking/mpi_scripts/mpi_master.py @@ -0,0 +1,145 @@ +from mpi4py import MPI +import sys +import logging +import numpy as np +import zmq +import time +from epics import caput +from threading import Thread +from enum import Enum +from collections import deque + +f = '%(asctime)s - %(levelname)s - %(filename)s:%(funcName)s - %(message)s' +logging.basicConfig(level=logging.DEBUG, format=f) +logger = logging.getLogger(__name__) + + +class MpiMaster(object): + def __init__(self, rank, api_port, det_map, pv_map, psana=False, data_port=8123): + self._rank = rank + self._det_map = det_map + self._pv_map = pv_map + self._psana = psana + self._comm = MPI.COMM_WORLD + self._workers = range(self._comm.Get_size())[1:] + self._running = False + self._abort = False + self._queue = deque() + self._data_socket = self.get_data_socket() + self._msg_thread = Thread(target=self.start_msg_thread, args=(api_port,)) + self._msg_thread.start() + + @property + def rank(self): + """Master rank (should be 0)""" + return self._rank + + @property + def comm(self): + """Master communicator""" + return self._comm + + @property + def workers(self): + """Workers currently sending""" + return self._workers + + @property + def det_map(self): + """Detector info""" + return self._det_map + + @property + def queue(self): + """Queue for processing data from workers""" + return self._queue + + @property + def running(self): + """Check if master is running""" + return self._running + + @property + def abort(self): + """See if abort has been called""" + return self._abort + + @abort.setter + def abort(self, val): + """Set the abort flag""" + if isinstance(val, bool): + self._abort = val + + def get_data_socket(self, data_port=8123): + """Setup the socket we'll use for client data messaging""" + if self._psana: + context = zmq.Context() + socket = context.socket(zmq.PUB) + socket.bind(''.join(['tcp://*:', str(data_port)])) + return socket + + return None + + def start_run(self): + """Main process loop, we can probably get more async + but for now it's a one to one recive/send + """ + while not self.abort: + start = time.time() + # TODO: Generalize data length + data = np.empty(2, dtype=np.dtype(self.det_map['dtype'])) + req = self.comm.Irecv(data, source=MPI.ANY_SOURCE) + self.send_from_queue() + req.Wait() + self.queue.append(data) + print(time.time() - start) + MPI.Finalize() + +# status = MPI.Status() +# ready = self.comm.Iprobe(source=MPI.ANY_SOURCE, tag=MPI.ANY_TAG, status=status) +# if ready: +# data = np.empty(2, dtype=np.dtype(self.det_map['dtype'])) +# self.comm.Recv(data, source=status.Get_source(), tag=MPI.ANY_TAG, status=status) + + def start_msg_thread(self, api_port): + """The thread runs a PAIR communication and acts as server side, + this allows for control of the parameters during data aquisition + from some client (probably an API for user). Might do subpub if + we want messages to be handled by workers as well, or master can + broadcast information + """ + context = zmq.Context() + socket = context.socket(zmq.PAIR) + # TODO: make IP available arg + socket.bind(''.join(['tcp://*:', str(api_port)])) + while True: + message = socket.recv() + if message == 'abort': + self.abort = True + socket.send('aborted') + else: + print('Received Message with no definition ', message) + + def send_from_queue(self): + if len(self.queue) > 0: + data = self.queue.popleft() + if self._psana: + # Could need this if sending large arrays, + # Could end up getting md info from config file + md = dict( + dtype = str(data.dtype), + shape = data.shape + ) + self._data_socket.send_json(md, 0|zmq.NOBLOCK) + self._data_socket.send(data, 0, copy=False, track=False) + else: + # consider caput_many with lots, ok for now + #print('caputing data ', data) + #for k, v in self._pv_map: + #caput(v, data[k]) + ratio = data[1] / data[0] + caput('CXI:JTRK:REQ:DIFF_INTENSITY', data[1]) + caput('CXI:JTRK:REQ:I0', data[0]) + caput('CXI:JTRK:REQ:RATIO', ratio) + else: + pass diff --git a/jet_tracking/mpi_scripts/mpi_worker.py b/jet_tracking/mpi_scripts/mpi_worker.py new file mode 100644 index 0000000..bbc5c50 --- /dev/null +++ b/jet_tracking/mpi_scripts/mpi_worker.py @@ -0,0 +1,137 @@ +import psana +from psmon.plots import Image +import matplotlib.pyplot as plt +from matplotlib.colors import Normalize +from psmon import publish +import numpy as np +import os +import logging +import requests +import socket +import argparse +import sys +import time +import inspect +from mpi4py import MPI + +from smalldata_tools.SmallDataUtils import detData + +f = '%(asctime)s - %(levelname)s - %(filename)s:%(funcName)s - %(message)s' +logging.basicConfig(level=logging.DEBUG, format=f) +logger = logging.getLogger(__name__) + + +class MpiWorker(object): + """This worker will collect events and do whatever + necessary processing, then send to master""" + def __init__(self, ds, evnt_lim, detector, ipm, evr, r_mask, latency=0.5, event_code=40, plot=False, peak_bin=25, delta_bin=5): + self._ds = ds # We probably need to use kwargs to make this general + self._evnt_lim = evnt_lim + self._detector = detector + self._ipm = ipm + self._evr = evr + self._comm = MPI.COMM_WORLD + self._rank = self._comm.Get_rank() + self._r_mask = r_mask + self._plot = plot + self._latency = latency + self._event_code = event_code + self._peak_bin = peak_bin + self._delta_bin = delta_bin + self._state = None + + @property + def rank(self): + """Worker ID""" + return self._rank + + @property + def evnt_lim(self): + """Number of events for worker to process""" + return self._evnt_lim + + @property + def ds(self): + """DataSource object""" + return self._ds + + @property + def detector(self): + """Detectors to get data from""" + return self._detector + + @property + def comm(self): + """MPI communicator""" + return self._comm + + @property + def ipm(self): + """IPM Detector""" + return self._ipm + + @property + def evr(self): + """EVR detector""" + return self._evr + + @property + def plot(self): + """Whether we should plot detector""" + return self._plot + + @property + def latency(self): + """Max latency allowed between event and results""" + return self._latency + + @property + def event_code(self): + """Event Code to trigger data collection on""" + return self._event_code + + @property + def peak_bin(self): + return self._peak_bin + + @peak_bin.setter + def peak_bin(self, peak_bin): + try: + self._peak_bin = int(peak_bin) + except: + logger.warning('You must provide int for peak bin') + + @property + def delta_bin(self): + return self._delta_bin + + @delta_bin.setter + def delta_bin(self, delta_bin): + try: + self._delta_bin = int(delta_bin) + except: + logger.warning('You must provide int for delta bin') + + def start_run(self): + """Worker should handle any calculations""" + #mask_det = det.mask(188, unbond=True, unbondnbrs=True, status=True, edges=True, central=True) + ped = self.detector.pedestals(1)[0] + for evt_idx, evt in enumerate(self.ds.events()): + if self.event_code not in self.evr.eventCodes(evt): + continue + low_bin = self.peak_bin - self.delta_bin + hi_bin = self.peak_bin + self.delta_bin + raw = (self.detector.raw_data(evt) - ped) + data = self.detector.image(evt, raw) + az_bins = np.array([np.mean(data[mask]) for mask in self._r_mask[low_bin:hi_bin]]) + intensity = np.sum(az_bins) + try: + i0 = self.ipm[0].get(evt) + if self.ipm[1]: + det = getattr(i0, self.ipm[1]) + i0 = det() + except: + i0 = 0.0 + + packet = np.array([i0, intensity], dtype='float32') + self.comm.Isend(packet, dest=0, tag=self.rank) diff --git a/jet_tracking/mpi_scripts/runMpiScript b/jet_tracking/mpi_scripts/runMpiScript new file mode 100755 index 0000000..fa00b70 --- /dev/null +++ b/jet_tracking/mpi_scripts/runMpiScript @@ -0,0 +1,81 @@ +#!/bin/bash + +usage() +{ +cat << EOF +$(basename "$0"): + Script to launch an mpirun + + OPTIONS: + -h|--help + Definition of options + -e|--exprun + Experiment and run name in format exp=xppd7114:run=43 + -d|--dsname + Data source name to gather events from + -n|--nevts + Number of events for each worker to process + -c|--cfgfile + Config file to load with damage/vars, and other things to parse for data aquisition + -p|--processors + Number of cores to use (available workers -1 for master) +EOF +} + +for arg in "$@" +do + case $arg in + -h|--help) + usage exit + ;; + -e|--exprun) + EXPRUN="$2" + shift + shift + ;; + -d|--dsname) + DSNAME="$2" + shift + shift + ;; + -n|--nevts) + NEVTS="$2" + shift + shift + ;; + -c|--cfgfile) + CFGFILE="$2" + shift + shift + ;; + -p|--processors) + PROC="$2" + shift + shift + ;; + esac +done + +# Pull out mpi_driver.py args +ARGS='' +if [[ -v EXPRUN ]]; then + ARGS+=' --exprun '$EXPRUN +fi +if [[ -v DSNAME ]]; then + ARGS+=' --dsname '$DSNAME +fi +if [[ -v NEVTS ]]; then + ARGS+=' --nevts '$NEVTS +fi +if [[ -v CFGFILE ]]; then + ARGS+=' --cfg_file '$CFGFILE +fi + +# If user doesn't specify use minimum required +PROC=${PROC:='2'} + +source /reg/g/pcds/setup/pathmunge.sh +source /reg/g/psdm/sw/conda1/manage/bin/psconda.sh +cd /reg/neh/home/aegger/smalldata_tools/mpi_scripts +pythonpathmunge '/reg/neh/home/aegger/smalldata_tools' +`which mpirun` -n $PROC python mpi_driver.py $ARGS diff --git a/jet_tracking/mpi_scripts/utils.py b/jet_tracking/mpi_scripts/utils.py new file mode 100644 index 0000000..e859690 --- /dev/null +++ b/jet_tracking/mpi_scripts/utils.py @@ -0,0 +1,25 @@ +import numpy as np +import psana + +def get_r_masks(shape, bins=50): + """Function to generate radial masks for pixels to include in azav""" + center = (shape[1] / 2, shape[0] / 2) + x, y = np.meshgrid(np.arange(shape[1]) - center[0], np.arange(shape[0]) - center[1]) + R = np.sqrt(x**2 + y**2) + max_R = np.max(R) + min_R = np.min(R) + bin_size = (max_R - min_R) / bins + radii = np.arange(1, max_R, bin_size) + masks = [] + for i in radii: + mask = (np.greater(R, i - bin_size) & np.less(R, i + bin_size)) + masks.append(mask) + + return masks + +def get_evr_w_codes(det_names): + """Get the evr with the event codes, yes this changes...""" + evr_keys = [det[1] for det in det_names if 'evr' in det[1]] + evr_dict = {k: psana.Detector(k)._fetch_configs()[0].neventcodes() + for k in evr_keys} + return psana.Detector(max(evr_dict, key=evr_dict.get)) From 375e1eb694f92bc369443b520d00ca5f00e9d0b5 Mon Sep 17 00:00:00 2001 From: Adam Date: Wed, 10 Mar 2021 15:28:49 -0800 Subject: [PATCH 08/23] MNT: Remove notebook --- .../jet_tracking_cal/jet_tracking_cal.ipynb | 25803 ---------------- 1 file changed, 25803 deletions(-) delete mode 100644 jet_tracking/jet_tracking_cal/jet_tracking_cal.ipynb diff --git a/jet_tracking/jet_tracking_cal/jet_tracking_cal.ipynb b/jet_tracking/jet_tracking_cal/jet_tracking_cal.ipynb deleted file mode 100644 index 3851b40..0000000 --- a/jet_tracking/jet_tracking_cal/jet_tracking_cal.ipynb +++ /dev/null @@ -1,25803 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "
\n", - " \n", - " Loading BokehJS ...\n", - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/javascript": [ - "\n", - "(function(root) {\n", - " function now() {\n", - " return new Date();\n", - " }\n", - "\n", - " var force = true;\n", - "\n", - " if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n", - " root._bokeh_onload_callbacks = [];\n", - " root._bokeh_is_loading = undefined;\n", - " }\n", - "\n", - " var JS_MIME_TYPE = 'application/javascript';\n", - " var HTML_MIME_TYPE = 'text/html';\n", - " var EXEC_MIME_TYPE = 'application/vnd.bokehjs_exec.v0+json';\n", - " var CLASS_NAME = 'output_bokeh rendered_html';\n", - "\n", - " /**\n", - " * Render data to the DOM node\n", - " */\n", - " function render(props, node) {\n", - " var script = document.createElement(\"script\");\n", - " node.appendChild(script);\n", - " }\n", - "\n", - " /**\n", - " * Handle when an output is cleared or removed\n", - " */\n", - " function handleClearOutput(event, handle) {\n", - " var cell = handle.cell;\n", - "\n", - " var id = cell.output_area._bokeh_element_id;\n", - " var server_id = cell.output_area._bokeh_server_id;\n", - " // Clean up Bokeh references\n", - " if (id != null && id in Bokeh.index) {\n", - " Bokeh.index[id].model.document.clear();\n", - " delete Bokeh.index[id];\n", - " }\n", - "\n", - " if (server_id !== undefined) {\n", - " // Clean up Bokeh references\n", - " var cmd = \"from bokeh.io.state import curstate; print(curstate().uuid_to_server['\" + server_id + \"'].get_sessions()[0].document.roots[0]._id)\";\n", - " cell.notebook.kernel.execute(cmd, {\n", - " iopub: {\n", - " output: function(msg) {\n", - " var id = msg.content.text.trim();\n", - " if (id in Bokeh.index) {\n", - " Bokeh.index[id].model.document.clear();\n", - " delete Bokeh.index[id];\n", - " }\n", - " }\n", - " }\n", - " });\n", - " // Destroy server and session\n", - " var cmd = \"import bokeh.io.notebook as ion; ion.destroy_server('\" + server_id + \"')\";\n", - " cell.notebook.kernel.execute(cmd);\n", - " }\n", - " }\n", - "\n", - " /**\n", - " * Handle when a new output is added\n", - " */\n", - " function handleAddOutput(event, handle) {\n", - " var output_area = handle.output_area;\n", - " var output = handle.output;\n", - "\n", - " // limit handleAddOutput to display_data with EXEC_MIME_TYPE content only\n", - " if ((output.output_type != \"display_data\") || (!output.data.hasOwnProperty(EXEC_MIME_TYPE))) {\n", - " return\n", - " }\n", - "\n", - " var toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n", - "\n", - " if (output.metadata[EXEC_MIME_TYPE][\"id\"] !== undefined) {\n", - " toinsert[toinsert.length - 1].firstChild.textContent = output.data[JS_MIME_TYPE];\n", - " // store reference to embed id on output_area\n", - " output_area._bokeh_element_id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n", - " }\n", - " if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n", - " var bk_div = document.createElement(\"div\");\n", - " bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n", - " var script_attrs = bk_div.children[0].attributes;\n", - " for (var i = 0; i < script_attrs.length; i++) {\n", - " toinsert[toinsert.length - 1].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\n", - " }\n", - " // store reference to server id on output_area\n", - " output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n", - " }\n", - " }\n", - "\n", - " function register_renderer(events, OutputArea) {\n", - "\n", - " function append_mime(data, metadata, element) {\n", - " // create a DOM node to render to\n", - " var toinsert = this.create_output_subarea(\n", - " metadata,\n", - " CLASS_NAME,\n", - " EXEC_MIME_TYPE\n", - " );\n", - " this.keyboard_manager.register_events(toinsert);\n", - " // Render to node\n", - " var props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n", - " render(props, toinsert[toinsert.length - 1]);\n", - " element.append(toinsert);\n", - " return toinsert\n", - " }\n", - "\n", - " /* Handle when an output is cleared or removed */\n", - " events.on('clear_output.CodeCell', handleClearOutput);\n", - " events.on('delete.Cell', handleClearOutput);\n", - "\n", - " /* Handle when a new output is added */\n", - " events.on('output_added.OutputArea', handleAddOutput);\n", - "\n", - " /**\n", - " * Register the mime type and append_mime function with output_area\n", - " */\n", - " OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n", - " /* Is output safe? */\n", - " safe: true,\n", - " /* Index of renderer in `output_area.display_order` */\n", - " index: 0\n", - " });\n", - " }\n", - "\n", - " // register the mime type if in Jupyter Notebook environment and previously unregistered\n", - " if (root.Jupyter !== undefined) {\n", - " var events = require('base/js/events');\n", - " var OutputArea = require('notebook/js/outputarea').OutputArea;\n", - "\n", - " if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n", - " register_renderer(events, OutputArea);\n", - " }\n", - " }\n", - "\n", - " \n", - " if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n", - " root._bokeh_timeout = Date.now() + 5000;\n", - " root._bokeh_failed_load = false;\n", - " }\n", - "\n", - " var NB_LOAD_WARNING = {'data': {'text/html':\n", - " \"
\\n\"+\n", - " \"

\\n\"+\n", - " \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n", - " \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n", - " \"

\\n\"+\n", - " \"
    \\n\"+\n", - " \"
  • re-rerun `output_notebook()` to attempt to load from CDN again, or
  • \\n\"+\n", - " \"
  • use INLINE resources instead, as so:
  • \\n\"+\n", - " \"
\\n\"+\n", - " \"\\n\"+\n", - " \"from bokeh.resources import INLINE\\n\"+\n", - " \"output_notebook(resources=INLINE)\\n\"+\n", - " \"\\n\"+\n", - " \"
\"}};\n", - "\n", - " function display_loaded() {\n", - " var el = document.getElementById(\"1001\");\n", - " if (el != null) {\n", - " el.textContent = \"BokehJS is loading...\";\n", - " }\n", - " if (root.Bokeh !== undefined) {\n", - " if (el != null) {\n", - " el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n", - " }\n", - " } else if (Date.now() < root._bokeh_timeout) {\n", - " setTimeout(display_loaded, 100)\n", - " }\n", - " }\n", - "\n", - "\n", - " function run_callbacks() {\n", - " try {\n", - " root._bokeh_onload_callbacks.forEach(function(callback) {\n", - " if (callback != null)\n", - " callback();\n", - " });\n", - " } finally {\n", - " delete root._bokeh_onload_callbacks\n", - " }\n", - " console.debug(\"Bokeh: all callbacks have finished\");\n", - " }\n", - "\n", - " function load_libs(css_urls, js_urls, callback) {\n", - " if (css_urls == null) css_urls = [];\n", - " if (js_urls == null) js_urls = [];\n", - "\n", - " root._bokeh_onload_callbacks.push(callback);\n", - " if (root._bokeh_is_loading > 0) {\n", - " console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n", - " return null;\n", - " }\n", - " if (js_urls == null || js_urls.length === 0) {\n", - " run_callbacks();\n", - " return null;\n", - " }\n", - " console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n", - " root._bokeh_is_loading = css_urls.length + js_urls.length;\n", - "\n", - " function on_load() {\n", - " root._bokeh_is_loading--;\n", - " if (root._bokeh_is_loading === 0) {\n", - " console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n", - " run_callbacks()\n", - " }\n", - " }\n", - "\n", - " function on_error() {\n", - " console.error(\"failed to load \" + url);\n", - " }\n", - "\n", - " for (var i = 0; i < css_urls.length; i++) {\n", - " var url = css_urls[i];\n", - " const element = document.createElement(\"link\");\n", - " element.onload = on_load;\n", - " element.onerror = on_error;\n", - " element.rel = \"stylesheet\";\n", - " element.type = \"text/css\";\n", - " element.href = url;\n", - " console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n", - " document.body.appendChild(element);\n", - " }\n", - "\n", - " for (var i = 0; i < js_urls.length; i++) {\n", - " var url = js_urls[i];\n", - " var element = document.createElement('script');\n", - " element.onload = on_load;\n", - " element.onerror = on_error;\n", - " element.async = false;\n", - " element.src = url;\n", - " console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n", - " document.head.appendChild(element);\n", - " }\n", - " };var element = document.getElementById(\"1001\");\n", - " if (element == null) {\n", - " console.error(\"Bokeh: ERROR: autoload.js configured with elementid '1001' but no matching script tag was found. \")\n", - " return false;\n", - " }\n", - "\n", - " function inject_raw_css(css) {\n", - " const element = document.createElement(\"style\");\n", - " element.appendChild(document.createTextNode(css));\n", - " document.body.appendChild(element);\n", - " }\n", - "\n", - " \n", - " var js_urls = [\"https://cdn.pydata.org/bokeh/release/bokeh-1.4.0.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-widgets-1.4.0.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-tables-1.4.0.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-gl-1.4.0.min.js\"];\n", - " var css_urls = [];\n", - " \n", - "\n", - " var inline_js = [\n", - " function(Bokeh) {\n", - " inject_raw_css(\".widget-box {\\n\\tmin-height: 20px;\\n\\tbackground-color: #f5f5f5;\\n\\tborder: 1px solid #e3e3e3 !important;\\n\\tborder-radius: 4px;\\n\\t-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.05);\\n\\tbox-shadow: inset 0 1px 1px rgba(0,0,0,.05);\\n\\toverflow-x: hidden;\\n\\toverflow-y: hidden;\\n}\\n\\n.scrollable {\\n overflow: scroll;\\n}\\n\\nprogress {\\n\\tappearance: none;\\n\\t-moz-appearance: none;\\n\\t-webkit-appearance: none;\\n\\n\\tborder: none;\\n\\theight: 20px;\\n\\tbackground-color: whiteSmoke;\\n\\tborder-radius: 3px;\\n\\tbox-shadow: 0 2px 3px rgba(0,0,0,.5) inset;\\n\\tcolor: royalblue;\\n\\tposition: relative;\\n\\tmargin: 0 0 1.5em;\\n}\\n\\nprogress[value]::-webkit-progress-bar {\\n\\tbackground-color: whiteSmoke;\\n\\tborder-radius: 3px;\\n\\tbox-shadow: 0 2px 3px rgba(0,0,0,.5) inset;\\n}\\n\\nprogress[value]::-webkit-progress-value {\\n\\tposition: relative;\\n\\n\\tbackground-size: 35px 20px, 100% 100%, 100% 100%;\\n\\tborder-radius:3px;\\n}\\n\\nprogress.active:not([value])::before {\\n\\tbackground-position: 10%;\\n\\tanimation-name: stripes;\\n\\tanimation-duration: 3s;\\n\\tanimation-timing-function: linear;\\n\\tanimation-iteration-count: infinite;\\n}\\n\\nprogress[value]::-moz-progress-bar {\\n\\tbackground-size: 35px 20px, 100% 100%, 100% 100%;\\n\\tborder-radius:3px;\\n}\\n\\nprogress:not([value])::-moz-progress-bar {\\n\\tborder-radius:3px;\\n\\tbackground:\\n\\tlinear-gradient(-45deg, transparent 33%, rgba(0, 0, 0, 0.2) 33%, rgba(0, 0, 0, 0.2) 66%, transparent 66%) left/2.5em 1.5em;\\n\\n}\\n\\nprogress.active:not([value])::-moz-progress-bar {\\n\\tbackground-position: 10%;\\n\\tanimation-name: stripes;\\n\\tanimation-duration: 3s;\\n\\tanimation-timing-function: linear;\\n\\tanimation-iteration-count: infinite;\\n}\\n\\nprogress.active:not([value])::-webkit-progress-bar {\\n\\tbackground-position: 10%;\\n\\tanimation-name: stripes;\\n\\tanimation-duration: 3s;\\n\\tanimation-timing-function: linear;\\n\\tanimation-iteration-count: infinite;\\n}\\n\\nprogress.primary[value]::-webkit-progress-value { background-color: #007bff; }\\nprogress.primary:not([value])::before { background-color: #007bff; }\\nprogress.primary:not([value])::-webkit-progress-bar { background-color: #007bff; }\\nprogress.primary::-moz-progress-bar { background-color: #007bff; }\\n\\nprogress.secondary[value]::-webkit-progress-value { background-color: #6c757d; }\\nprogress.secondary:not([value])::before { background-color: #6c757d; }\\nprogress.secondary:not([value])::-webkit-progress-bar { background-color: #6c757d; }\\nprogress.secondary::-moz-progress-bar { background-color: #6c757d; }\\n\\nprogress.success[value]::-webkit-progress-value { background-color: #28a745; }\\nprogress.success:not([value])::before { background-color: #28a745; }\\nprogress.success:not([value])::-webkit-progress-bar { background-color: #28a745; }\\nprogress.success::-moz-progress-bar { background-color: #28a745; }\\n\\nprogress.danger[value]::-webkit-progress-value { background-color: #dc3545; }\\nprogress.danger:not([value])::before { background-color: #dc3545; }\\nprogress.danger:not([value])::-webkit-progress-bar { background-color: #dc3545; }\\nprogress.danger::-moz-progress-bar { background-color: #dc3545; }\\n\\nprogress.warning[value]::-webkit-progress-value { background-color: #ffc107; }\\nprogress.warning:not([value])::before { background-color: #ffc107; }\\nprogress.warning:not([value])::-webkit-progress-bar { background-color: #ffc107; }\\nprogress.warning::-moz-progress-bar { background-color: #ffc107; }\\n\\nprogress.info[value]::-webkit-progress-value { background-color: #17a2b8; }\\nprogress.info:not([value])::before { background-color: #17a2b8; }\\nprogress.info:not([value])::-webkit-progress-bar { background-color: #17a2b8; }\\nprogress.info::-moz-progress-bar { background-color: #17a2b8; }\\n\\nprogress.light[value]::-webkit-progress-value { background-color: #f8f9fa; }\\nprogress.light:not([value])::before { background-color: #f8f9fa; }\\nprogress.light:not([value])::-webkit-progress-bar { background-color: #f8f9fa; }\\nprogress.light::-moz-progress-bar { background-color: #f8f9fa; }\\n\\nprogress.dark[value]::-webkit-progress-value { background-color: #343a40; }\\nprogress.dark:not([value])::-webkit-progress-bar { background-color: #343a40; }\\nprogress.dark:not([value])::before { background-color: #343a40; }\\nprogress.dark::-moz-progress-bar { background-color: #343a40; }\\n\\nprogress:not([value])::-webkit-progress-bar {\\n\\tborder-radius: 3px;\\n\\tbackground:\\n\\tlinear-gradient(-45deg, transparent 33%, rgba(0, 0, 0, 0.2) 33%, rgba(0, 0, 0, 0.2) 66%, transparent 66%) left/2.5em 1.5em;\\n}\\nprogress:not([value])::before {\\n\\tcontent:\\\" \\\";\\n\\tposition:absolute;\\n\\theight: 20px;\\n\\ttop:0;\\n\\tleft:0;\\n\\tright:0;\\n\\tbottom:0;\\n\\tborder-radius: 3px;\\n\\tbackground:\\n\\tlinear-gradient(-45deg, transparent 33%, rgba(0, 0, 0, 0.2) 33%, rgba(0, 0, 0, 0.2) 66%, transparent 66%) left/2.5em 1.5em;\\n}\\n\\n@keyframes stripes {\\n from {background-position: 0%}\\n to {background-position: 100%}\\n}\");\n", - " },\n", - " function(Bokeh) {\n", - " inject_raw_css(\".json-formatter-row {\\n font-family: monospace;\\n}\\n.json-formatter-row,\\n.json-formatter-row a,\\n.json-formatter-row a:hover {\\n color: black;\\n text-decoration: none;\\n}\\n.json-formatter-row .json-formatter-row {\\n margin-left: 1rem;\\n}\\n.json-formatter-row .json-formatter-children.json-formatter-empty {\\n opacity: 0.5;\\n margin-left: 1rem;\\n}\\n.json-formatter-row .json-formatter-children.json-formatter-empty:after {\\n display: none;\\n}\\n.json-formatter-row .json-formatter-children.json-formatter-empty.json-formatter-object:after {\\n content: \\\"No properties\\\";\\n}\\n.json-formatter-row .json-formatter-children.json-formatter-empty.json-formatter-array:after {\\n content: \\\"[]\\\";\\n}\\n.json-formatter-row .json-formatter-string,\\n.json-formatter-row .json-formatter-stringifiable {\\n color: green;\\n white-space: pre;\\n word-wrap: break-word;\\n}\\n.json-formatter-row .json-formatter-number {\\n color: blue;\\n}\\n.json-formatter-row .json-formatter-boolean {\\n color: red;\\n}\\n.json-formatter-row .json-formatter-null {\\n color: #855A00;\\n}\\n.json-formatter-row .json-formatter-undefined {\\n color: #ca0b69;\\n}\\n.json-formatter-row .json-formatter-function {\\n color: #FF20ED;\\n}\\n.json-formatter-row .json-formatter-date {\\n background-color: rgba(0, 0, 0, 0.05);\\n}\\n.json-formatter-row .json-formatter-url {\\n text-decoration: underline;\\n color: blue;\\n cursor: pointer;\\n}\\n.json-formatter-row .json-formatter-bracket {\\n color: blue;\\n}\\n.json-formatter-row .json-formatter-key {\\n color: #00008B;\\n padding-right: 0.2rem;\\n}\\n.json-formatter-row .json-formatter-toggler-link {\\n cursor: pointer;\\n}\\n.json-formatter-row .json-formatter-toggler {\\n line-height: 1.2rem;\\n font-size: 0.7rem;\\n vertical-align: middle;\\n opacity: 0.6;\\n cursor: pointer;\\n padding-right: 0.2rem;\\n}\\n.json-formatter-row .json-formatter-toggler:after {\\n display: inline-block;\\n transition: transform 100ms ease-in;\\n content: \\\"\\\\25BA\\\";\\n}\\n.json-formatter-row > a > .json-formatter-preview-text {\\n opacity: 0;\\n transition: opacity 0.15s ease-in;\\n font-style: italic;\\n}\\n.json-formatter-row:hover > a > .json-formatter-preview-text {\\n opacity: 0.6;\\n}\\n.json-formatter-row.json-formatter-open > .json-formatter-toggler-link .json-formatter-toggler:after {\\n transform: rotate(90deg);\\n}\\n.json-formatter-row.json-formatter-open > .json-formatter-children:after {\\n display: inline-block;\\n}\\n.json-formatter-row.json-formatter-open > a > .json-formatter-preview-text {\\n display: none;\\n}\\n.json-formatter-row.json-formatter-open.json-formatter-empty:after {\\n display: block;\\n}\\n.json-formatter-dark.json-formatter-row {\\n font-family: monospace;\\n}\\n.json-formatter-dark.json-formatter-row,\\n.json-formatter-dark.json-formatter-row a,\\n.json-formatter-dark.json-formatter-row a:hover {\\n color: white;\\n text-decoration: none;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-row {\\n margin-left: 1rem;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-children.json-formatter-empty {\\n opacity: 0.5;\\n margin-left: 1rem;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-children.json-formatter-empty:after {\\n display: none;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-children.json-formatter-empty.json-formatter-object:after {\\n content: \\\"No properties\\\";\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-children.json-formatter-empty.json-formatter-array:after {\\n content: \\\"[]\\\";\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-string,\\n.json-formatter-dark.json-formatter-row .json-formatter-stringifiable {\\n color: #31F031;\\n white-space: pre;\\n word-wrap: break-word;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-number {\\n color: #66C2FF;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-boolean {\\n color: #EC4242;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-null {\\n color: #EEC97D;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-undefined {\\n color: #ef8fbe;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-function {\\n color: #FD48CB;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-date {\\n background-color: rgba(255, 255, 255, 0.05);\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-url {\\n text-decoration: underline;\\n color: #027BFF;\\n cursor: pointer;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-bracket {\\n color: #9494FF;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-key {\\n color: #23A0DB;\\n padding-right: 0.2rem;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-toggler-link {\\n cursor: pointer;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-toggler {\\n line-height: 1.2rem;\\n font-size: 0.7rem;\\n vertical-align: middle;\\n opacity: 0.6;\\n cursor: pointer;\\n padding-right: 0.2rem;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-toggler:after {\\n display: inline-block;\\n transition: transform 100ms ease-in;\\n content: \\\"\\\\25BA\\\";\\n}\\n.json-formatter-dark.json-formatter-row > a > .json-formatter-preview-text {\\n opacity: 0;\\n transition: opacity 0.15s ease-in;\\n font-style: italic;\\n}\\n.json-formatter-dark.json-formatter-row:hover > a > .json-formatter-preview-text {\\n opacity: 0.6;\\n}\\n.json-formatter-dark.json-formatter-row.json-formatter-open > .json-formatter-toggler-link .json-formatter-toggler:after {\\n transform: rotate(90deg);\\n}\\n.json-formatter-dark.json-formatter-row.json-formatter-open > .json-formatter-children:after {\\n display: inline-block;\\n}\\n.json-formatter-dark.json-formatter-row.json-formatter-open > a > .json-formatter-preview-text {\\n display: none;\\n}\\n.json-formatter-dark.json-formatter-row.json-formatter-open.json-formatter-empty:after {\\n display: block;\\n}\\n\");\n", - " },\n", - " function(Bokeh) {\n", - " inject_raw_css(\".codehilite .hll { background-color: #ffffcc }\\n.codehilite { background: #f8f8f8; }\\n.codehilite .c { color: #408080; font-style: italic } /* Comment */\\n.codehilite .err { border: 1px solid #FF0000 } /* Error */\\n.codehilite .k { color: #008000; font-weight: bold } /* Keyword */\\n.codehilite .o { color: #666666 } /* Operator */\\n.codehilite .ch { color: #408080; font-style: italic } /* Comment.Hashbang */\\n.codehilite .cm { color: #408080; font-style: italic } /* Comment.Multiline */\\n.codehilite .cp { color: #BC7A00 } /* Comment.Preproc */\\n.codehilite .cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */\\n.codehilite .c1 { color: #408080; font-style: italic } /* Comment.Single */\\n.codehilite .cs { color: #408080; font-style: italic } /* Comment.Special */\\n.codehilite .gd { color: #A00000 } /* Generic.Deleted */\\n.codehilite .ge { font-style: italic } /* Generic.Emph */\\n.codehilite .gr { color: #FF0000 } /* Generic.Error */\\n.codehilite .gh { color: #000080; font-weight: bold } /* Generic.Heading */\\n.codehilite .gi { color: #00A000 } /* Generic.Inserted */\\n.codehilite .go { color: #888888 } /* Generic.Output */\\n.codehilite .gp { color: #000080; font-weight: bold } /* Generic.Prompt */\\n.codehilite .gs { font-weight: bold } /* Generic.Strong */\\n.codehilite .gu { color: #800080; font-weight: bold } /* Generic.Subheading */\\n.codehilite .gt { color: #0044DD } /* Generic.Traceback */\\n.codehilite .kc { color: #008000; font-weight: bold } /* Keyword.Constant */\\n.codehilite .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */\\n.codehilite .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */\\n.codehilite .kp { color: #008000 } /* Keyword.Pseudo */\\n.codehilite .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */\\n.codehilite .kt { color: #B00040 } /* Keyword.Type */\\n.codehilite .m { color: #666666 } /* Literal.Number */\\n.codehilite .s { color: #BA2121 } /* Literal.String */\\n.codehilite .na { color: #7D9029 } /* Name.Attribute */\\n.codehilite .nb { color: #008000 } /* Name.Builtin */\\n.codehilite .nc { color: #0000FF; font-weight: bold } /* Name.Class */\\n.codehilite .no { color: #880000 } /* Name.Constant */\\n.codehilite .nd { color: #AA22FF } /* Name.Decorator */\\n.codehilite .ni { color: #999999; font-weight: bold } /* Name.Entity */\\n.codehilite .ne { color: #D2413A; font-weight: bold } /* Name.Exception */\\n.codehilite .nf { color: #0000FF } /* Name.Function */\\n.codehilite .nl { color: #A0A000 } /* Name.Label */\\n.codehilite .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */\\n.codehilite .nt { color: #008000; font-weight: bold } /* Name.Tag */\\n.codehilite .nv { color: #19177C } /* Name.Variable */\\n.codehilite .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */\\n.codehilite .w { color: #bbbbbb } /* Text.Whitespace */\\n.codehilite .mb { color: #666666 } /* Literal.Number.Bin */\\n.codehilite .mf { color: #666666 } /* Literal.Number.Float */\\n.codehilite .mh { color: #666666 } /* Literal.Number.Hex */\\n.codehilite .mi { color: #666666 } /* Literal.Number.Integer */\\n.codehilite .mo { color: #666666 } /* Literal.Number.Oct */\\n.codehilite .sa { color: #BA2121 } /* Literal.String.Affix */\\n.codehilite .sb { color: #BA2121 } /* Literal.String.Backtick */\\n.codehilite .sc { color: #BA2121 } /* Literal.String.Char */\\n.codehilite .dl { color: #BA2121 } /* Literal.String.Delimiter */\\n.codehilite .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */\\n.codehilite .s2 { color: #BA2121 } /* Literal.String.Double */\\n.codehilite .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */\\n.codehilite .sh { color: #BA2121 } /* Literal.String.Heredoc */\\n.codehilite .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */\\n.codehilite .sx { color: #008000 } /* Literal.String.Other */\\n.codehilite .sr { color: #BB6688 } /* Literal.String.Regex */\\n.codehilite .s1 { color: #BA2121 } /* Literal.String.Single */\\n.codehilite .ss { color: #19177C } /* Literal.String.Symbol */\\n.codehilite .bp { color: #008000 } /* Name.Builtin.Pseudo */\\n.codehilite .fm { color: #0000FF } /* Name.Function.Magic */\\n.codehilite .vc { color: #19177C } /* Name.Variable.Class */\\n.codehilite .vg { color: #19177C } /* Name.Variable.Global */\\n.codehilite .vi { color: #19177C } /* Name.Variable.Instance */\\n.codehilite .vm { color: #19177C } /* Name.Variable.Magic */\\n.codehilite .il { color: #666666 } /* Literal.Number.Integer.Long */\\n\\n.markdown h1 { margin-block-start: 0.34em }\\n.markdown h2 { margin-block-start: 0.42em }\\n.markdown h3 { margin-block-start: 0.5em }\\n.markdown h4 { margin-block-start: 0.67em }\\n.markdown h5 { margin-block-start: 0.84em }\\n.markdown h6 { margin-block-start: 1.17em }\\n.markdown ul { padding-inline-start: 2em }\\n.markdown ol { padding-inline-start: 2em }\\n.markdown strong { font-weight: 600 }\\n.markdown a { color: -webkit-link }\\n.markdown a { color: -moz-hyperlinkText }\\n\");\n", - " },\n", - " function(Bokeh) {\n", - " inject_raw_css(\"table.panel-df {\\n margin-left: auto;\\n margin-right: auto;\\n border: none;\\n border-collapse: collapse;\\n border-spacing: 0;\\n color: black;\\n font-size: 12px;\\n table-layout: fixed;\\n width: 100%;\\n}\\n\\n.panel-df tr, th, td {\\n text-align: right;\\n vertical-align: middle;\\n padding: 0.5em 0.5em !important;\\n line-height: normal;\\n white-space: normal;\\n max-width: none;\\n border: none;\\n}\\n\\n.panel-df tbody {\\n display: table-row-group;\\n vertical-align: middle;\\n border-color: inherit;\\n}\\n\\n.panel-df tbody tr:nth-child(odd) {\\n background: #f5f5f5;\\n}\\n\\n.panel-df thead {\\n border-bottom: 1px solid black;\\n vertical-align: bottom;\\n}\\n\\n.panel-df tr:hover {\\n background: lightblue !important;\\n cursor: pointer;\\n}\\n\");\n", - " },\n", - " function(Bokeh) {\n", - " Bokeh.set_log_level(\"info\");\n", - " },\n", - " \n", - " function(Bokeh) {\n", - " /* BEGIN panel.min.js */\n", - " /*!\n", - " * Copyright (c) 2012 - 2019, Anaconda, Inc., and Bokeh Contributors\n", - " * All rights reserved.\n", - " * \n", - " * Redistribution and use in source and binary forms, with or without modification,\n", - " * are permitted provided that the following conditions are met:\n", - " * \n", - " * Redistributions of source code must retain the above copyright notice,\n", - " * this list of conditions and the following disclaimer.\n", - " * \n", - " * Redistributions in binary form must reproduce the above copyright notice,\n", - " * this list of conditions and the following disclaimer in the documentation\n", - " * and/or other materials provided with the distribution.\n", - " * \n", - " * Neither the name of Anaconda nor the names of any contributors\n", - " * may be used to endorse or promote products derived from this software\n", - " * without specific prior written permission.\n", - " * \n", - " * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n", - " * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n", - " * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n", - " * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\n", - " * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n", - " * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n", - " * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n", - " * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n", - " * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n", - " * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF\n", - " * THE POSSIBILITY OF SUCH DAMAGE.\n", - " */\n", - " (function(root, factory) {\n", - " factory(root[\"Bokeh\"]);\n", - " })(this, function(Bokeh) {\n", - " var define;\n", - " return (function(modules, entry, aliases, externals) {\n", - " if (Bokeh != null) {\n", - " return Bokeh.register_plugin(modules, entry, aliases, externals);\n", - " } else {\n", - " throw new Error(\"Cannot find Bokeh. You have to load it prior to loading plugins.\");\n", - " }\n", - " })\n", - " ({\n", - " \"aa4f566620\": function _(r,e,t){var n=(this&&this.__importStar||function(r){if(r&&r.__esModule)return r;var e={};if(null!=r)for(var t in r)Object.hasOwnProperty.call(r,t)&&(e[t]=r[t]);return e.default=r,e})(r(\"4d02676c49\"));t.Panel=n,r(\"@bokehjs/base\").register_models(n)},\n", - " \"4d02676c49\": function _(a,e,r){var o=a(\"ff4b91e885\");r.AcePlot=o.AcePlot;var t=a(\"12e90a1b7e\");r.Audio=t.Audio;var c=a(\"cf3b018c7a\");r.DeckGLPlot=c.DeckGLPlot;var d=a(\"70a2bb70ef\");r.HTML=d.HTML;var v=a(\"dac8d750fa\");r.JSON=v.JSON;var P=a(\"c81021c8fd\");r.KaTeX=P.KaTeX;var b=a(\"a93ded647d\");r.MathJax=b.MathJax;var l=a(\"98100899bc\");r.Player=l.Player;var f=a(\"d46f026c83\");r.PlotlyPlot=f.PlotlyPlot;var i=a(\"d9b3a262de\");r.Progress=i.Progress;var n=a(\"4b4afba86a\");r.State=n.State;var S=a(\"14b669e6fc\");r.VegaPlot=S.VegaPlot;var V=a(\"71a2bbec38\");r.Video=V.Video;var s=a(\"76bc93d621\");r.VideoStream=s.VideoStream,function(a){for(var e in a)r.hasOwnProperty(e)||(r[e]=a[e])}(a(\"63070bc9ce\"))},\n", - " \"ff4b91e885\": function _(t,e,o){var i,n=this&&this.__extends||(i=function(t,e){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var o in e)e.hasOwnProperty(o)&&(t[o]=e[o])})(t,e)},function(t,e){function o(){this.constructor=t}i(t,e),t.prototype=null===e?Object.create(e):(o.prototype=e.prototype,new o)}),r=(this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var o in t)Object.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e.default=t,e})(t(\"@bokehjs/core/properties\")),s=t(\"@bokehjs/models/layouts/html_box\"),a=t(\"@bokehjs/core/dom\");var c=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.initialize=function(){t.prototype.initialize.call(this),this._ace=window.ace,this._container=a.div({id:\"_\"+Math.random().toString(36).substr(2,9),style:{width:\"100%\",height:\"100%\"}})},e.prototype.connect_signals=function(){var e=this;t.prototype.connect_signals.call(this),this.connect(this.model.properties.code.change,function(){return e._update_code_from_model()}),this.connect(this.model.properties.theme.change,function(){return e._update_theme()}),this.connect(this.model.properties.language.change,function(){return e._update_language()}),this.connect(this.model.properties.annotations.change,function(){return e._add_annotations()}),this.connect(this.model.properties.readonly.change,function(){e._editor.setReadOnly(e.model.readonly)})},e.prototype.render=function(){var e=this;t.prototype.render.call(this),this._container!==this.el.childNodes[0]&&this.el.appendChild(this._container),this._container.textContent=this.model.code,this._editor=this._ace.edit(this._container.id),this._editor.setTheme(\"ace/theme/\"+this.model.theme),this._editor.session.setMode(\"ace/mode/\"+this.model.language),this._editor.setReadOnly(this.model.readonly),this._langTools=this._ace.require(\"ace/ext/language_tools\"),this._editor.setOptions({enableBasicAutocompletion:!0,enableSnippets:!0,fontFamily:\"monospace\"}),this._editor.on(\"change\",function(){return e._update_code_from_editor()})},e.prototype._update_code_from_model=function(){this._editor&&this._editor.getValue()!=this.model.code&&this._editor.setValue(this.model.code)},e.prototype._update_code_from_editor=function(){this._editor.getValue()!=this.model.code&&(this.model.code=this._editor.getValue())},e.prototype._update_theme=function(){this._editor.setTheme(\"ace/theme/\"+this.model.theme)},e.prototype._update_language=function(){this._editor.session.setMode(\"ace/mode/\"+this.model.language)},e.prototype._add_annotations=function(){this._editor.session.setAnnotations(this.model.annotations)},e.prototype.after_layout=function(){t.prototype.after_layout.call(this),this._editor.resize()},e.__name__=\"AcePlotView\",e}(t(\"ec60963462\").PanelHTMLBoxView);o.AcePlotView=c;var h=function(t){function e(e){return t.call(this,e)||this}return n(e,t),e.init_AcePlot=function(){this.prototype.default_view=c,this.define({code:[r.String],language:[r.String,\"python\"],theme:[r.String,\"chrome\"],annotations:[r.Array,[]],readonly:[r.Boolean,!1]}),this.override({height:300,width:300})},e.__name__=\"AcePlot\",e.__module__=\"panel.models.ace\",e}(s.HTMLBox);o.AcePlot=h,h.init_AcePlot()},\n", - " \"ec60963462\": function _(e,t,i){var o,n=this&&this.__extends||(o=function(e,t){return(o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var i in t)t.hasOwnProperty(i)&&(e[i]=t[i])})(e,t)},function(e,t){function i(){this.constructor=e}o(e,t),e.prototype=null===t?Object.create(t):(i.prototype=t.prototype,new i)}),s=e(\"@bokehjs/core/layout/layoutable\"),h=e(\"@bokehjs/core/layout/types\"),r=e(\"@bokehjs/core/dom\"),a=e(\"@bokehjs/models/widgets/markup\"),_=e(\"@bokehjs/models/layouts/html_box\");function c(e,t){var i=null!=t.width?\"fixed\":\"fit\",o=null!=t.height?\"fixed\":\"fit\",n=t.sizing_mode;if(null!=n)if(\"fixed\"==n)i=o=\"fixed\";else if(\"stretch_both\"==n)i=o=\"max\";else if(\"stretch_width\"==n)i=\"max\";else if(\"stretch_height\"==n)o=\"max\";else switch(n){case\"scale_width\":i=\"max\",o=\"min\";break;case\"scale_height\":i=\"min\",o=\"max\";break;case\"scale_both\":i=\"max\",o=\"max\";break;default:throw new Error(\"unreachable\")}\"fixed\"==i&&t.width?e.style.width=t.width+\"px\":\"max\"==i&&(e.style.width=\"100%\"),\"fixed\"==o&&t.height?e.style.height=t.height+\"px\":\"max\"==o&&(e.style.height=\"100%\")}i.set_size=c;var l=function(e){function t(t,i,o){var n=e.call(this)||this;return n.el=t,n.sizing_mode=i,n.changed=o,n._cache={},n._cache_count={},n}return n(t,e),t.prototype._measure=function(e){var t=this,i=[e.width,e.height,this.sizing_mode].toString(),o=this.changed&&\"fixed\"!=this.sizing_mode&&null!=this.sizing_mode?1:0;if(i in this._cache&&this._cache_count[i]>=o)return this._cache_count[i]=this._cache_count[i]+1,this._cache[i];var n=new h.Sizeable(e).bounded_to(this.sizing.size),s=r.sized(this.el,n,function(){var e=new h.Sizeable(r.content_size(t.el)),i=r.extents(t.el),o=i.border,n=i.padding;return e.grow_by(o).grow_by(n).map(Math.ceil)});return this._cache[i]=s,this._cache_count[i]=0,s},t.__name__=\"CachedVariadicBox\",t}(s.Layoutable);i.CachedVariadicBox=l;var d=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n(t,e),t.prototype._update_layout=function(){var e=void 0!==this._prev_sizing_mode&&this._prev_sizing_mode!==this.model.sizing_mode;this._prev_sizing_mode=this.model.sizing_mode,this.layout=new l(this.el,this.model.sizing_mode,e),this.layout.set_sizing(this.box_sizing())},t.prototype.render=function(){e.prototype.render.call(this),c(this.markup_el,this.model)},t.__name__=\"PanelMarkupView\",t}(a.MarkupView);i.PanelMarkupView=d;var u=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n(t,e),t.prototype._update_layout=function(){var e=void 0!==this._prev_sizing_mode&&this._prev_sizing_mode!==this.model.sizing_mode;this._prev_sizing_mode=this.model.sizing_mode,this.layout=new l(this.el,this.model.sizing_mode,e),this.layout.set_sizing(this.box_sizing())},t.prototype.render=function(){e.prototype.render.call(this),c(this.el,this.model)},t.__name__=\"PanelHTMLBoxView\",t}(_.HTMLBoxView);i.PanelHTMLBoxView=u},\n", - " \"12e90a1b7e\": function _(t,e,o){var i,n=this&&this.__extends||(i=function(t,e){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var o in e)e.hasOwnProperty(o)&&(t[o]=e[o])})(t,e)},function(t,e){function o(){this.constructor=t}i(t,e),t.prototype=null===e?Object.create(e):(o.prototype=e.prototype,new o)}),u=(this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var o in t)Object.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e.default=t,e})(t(\"@bokehjs/core/properties\")),l=t(\"@bokehjs/models/layouts/html_box\"),s=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.initialize=function(){t.prototype.initialize.call(this),this._blocked=!1,this._setting=!1,this._time=Date.now()},e.prototype.connect_signals=function(){var e=this;t.prototype.connect_signals.call(this),this.connect(this.model.properties.loop.change,function(){return e.set_loop()}),this.connect(this.model.properties.paused.change,function(){return e.set_paused()}),this.connect(this.model.properties.time.change,function(){return e.set_time()}),this.connect(this.model.properties.value.change,function(){return e.set_value()}),this.connect(this.model.properties.volume.change,function(){return e.set_volume()})},e.prototype.render=function(){var e=this;t.prototype.render.call(this),this.audioEl=document.createElement(\"audio\"),this.audioEl.controls=!0,this.audioEl.src=this.model.value,this.audioEl.currentTime=this.model.time,this.audioEl.loop=this.model.loop,null!=this.model.volume?this.audioEl.volume=this.model.volume/100:this.model.volume=100*this.audioEl.volume,this.audioEl.onpause=function(){return e.model.paused=!0},this.audioEl.onplay=function(){return e.model.paused=!1},this.audioEl.ontimeupdate=function(){return e.update_time(e)},this.audioEl.onvolumechange=function(){return e.update_volume(e)},this.el.appendChild(this.audioEl),this.model.paused||this.audioEl.play()},e.prototype.update_time=function(t){t._setting?t._setting=!1:Date.now()-t._time1&&\"number\"==typeof h[0]?l[u]=r.data[u].slice(c*h[1],c*h[1]+h[1]):l[u]=r.data[u][c]}a.push(l)}i.data=a}t&&this.updateDeck()},e.prototype._on_click_event=function(t){var e={coordinate:t.coordinate,lngLat:t.lngLat,index:t.index};this.model.clickState=e},e.prototype._on_hover_event=function(t){var e={coordinate:t.coordinate,lngLat:t.lngLat,index:t.index};this.model.hoverState=e},e.prototype._on_viewState_event=function(t){this.model.viewState=t.viewState},e.prototype.getData=function(){var t=this;return r(r({},this.model.data),{layers:this.model.layers,initialViewState:this.model.initialViewState,onViewStateChange:function(e){return t._on_viewState_event(e)},onClick:function(e){return t._on_click_event(e)},onHover:function(e){return t._on_hover_event(e)}})},e.prototype.updateDeck=function(){if(this.deckGL){var t=this.getData();if(d.updateDeck)d.updateDeck(t,this.deckGL);else{var e=this.jsonConverter.convert(t);this.deckGL.setProps(e)}}else this.render()},e.prototype.createDeck=function(t){var e,o=t.mapboxApiKey,n=t.container,i=t.jsonInput,a=t.tooltip;try{var s=this.jsonConverter.convert(i),c=u.makeTooltip(a);e=new d.DeckGL(r(r({},s),{map:f,mapboxApiAccessToken:o,container:n,getTooltip:c}))}catch(t){console.error(t)}return e},e.prototype.render=function(){t.prototype.render.call(this);var e=c.div({class:\"deckgl\"});_.set_size(e,this.model);var o=this.model.mapbox_api_key,n=this.model.tooltip,i=this.getData();d.createDeck?this.deckGL=d.createDeck({mapboxApiKey:o,container:e,jsonInput:i,tooltip:n}):this.deckGL=this.createDeck({mapboxApiKey:o,container:e,jsonInput:i,tooltip:n}),this.el.appendChild(e)},e.__name__=\"DeckGLPlotView\",e}(_.PanelHTMLBoxView);o.DeckGLPlotView=m;var k=function(t){function e(e){return t.call(this,e)||this}return i(e,t),e.init_DeckGLPlot=function(){this.prototype.default_view=m,this.define({data:[l.Any],data_sources:[l.Array,[]],clickState:[l.Any],hoverState:[l.Any],initialViewState:[l.Any],layers:[l.Array,[]],mapbox_api_key:[l.String],tooltip:[l.Any],viewState:[l.Any]}),this.override({height:400,width:600})},e.__name__=\"DeckGLPlot\",e.__module__=\"panel.models.deckgl\",e}(p.HTMLBox);o.DeckGLPlot=k,k.init_DeckGLPlot()},\n", - " \"27d3545a25\": function _(e,t,n){var i,r,l={fontFamily:'\"Helvetica Neue\", Helvetica, Arial, sans-serif',display:\"flex\",flex:\"wrap\",maxWidth:\"500px\",flexDirection:\"column\",zIndex:2};function a(){return document.createElement(\"div\")}function o(e){if(!e.picked)return null;if(e.object===i)return r;var t={html:c(e.object),style:l};return r=t,i=e.object,t}n.getTooltipDefault=o;var s=new Set([\"position\",\"index\"]);function c(e){var t=a();for(var n in e)if(!s.has(n)){var i=a();i.className=\"header\",i.textContent=n;var r=a();r.className=\"value\",r.textContent=u(e[n]);var l=a();f(l,i,r),l.appendChild(i),l.appendChild(r),t.appendChild(l)}return t.innerHTML}function f(e,t,n){Object.assign(t.style,{fontWeight:700,marginRight:\"10px\",flex:\"1 1 0%\"}),Object.assign(n.style,{flex:\"none\",maxWidth:\"250px\",overflow:\"hidden\",whiteSpace:\"nowrap\",textOverflow:\"ellipsis\"}),Object.assign(e.style,{display:\"flex\",flexDirection:\"row\",justifyContent:\"space-between\",alignItems:\"stretch\"})}function u(e){var t;if(Array.isArray(e)&&e.length>4)t=\"Array<\"+e.length+\">\";else if(\"string\"==typeof e)t=e;else if(\"number\"==typeof e)t=String(e);else try{t=JSON.stringify(e)}catch(e){t=\"\"}return t.length>50&&(t=t.slice(0,50)),t}function p(e,t){var n=e;for(var i in t)n=n.replace(\"{\"+i+\"}\",t[i]);return n}n.tabularize=c,n.toText=u,n.substituteIn=p,n.makeTooltip=function(e){return e?e.html||e.text?function(t){if(!t.picked)return null;var n={style:e.style||l};return e.html?n.html=p(e.html,t.object):n.text=p(e.text,t.object),n}:o:null}},\n", - " \"093eb75864\": function _(E,_,R){_.exports={DEPTH_BUFFER_BIT:256,STENCIL_BUFFER_BIT:1024,COLOR_BUFFER_BIT:16384,POINTS:0,LINES:1,LINE_LOOP:2,LINE_STRIP:3,TRIANGLES:4,TRIANGLE_STRIP:5,TRIANGLE_FAN:6,ZERO:0,ONE:1,SRC_COLOR:768,ONE_MINUS_SRC_COLOR:769,SRC_ALPHA:770,ONE_MINUS_SRC_ALPHA:771,DST_ALPHA:772,ONE_MINUS_DST_ALPHA:773,DST_COLOR:774,ONE_MINUS_DST_COLOR:775,SRC_ALPHA_SATURATE:776,CONSTANT_COLOR:32769,ONE_MINUS_CONSTANT_COLOR:32770,CONSTANT_ALPHA:32771,ONE_MINUS_CONSTANT_ALPHA:32772,FUNC_ADD:32774,FUNC_SUBTRACT:32778,FUNC_REVERSE_SUBTRACT:32779,BLEND_EQUATION:32777,BLEND_EQUATION_RGB:32777,BLEND_EQUATION_ALPHA:34877,BLEND_DST_RGB:32968,BLEND_SRC_RGB:32969,BLEND_DST_ALPHA:32970,BLEND_SRC_ALPHA:32971,BLEND_COLOR:32773,ARRAY_BUFFER_BINDING:34964,ELEMENT_ARRAY_BUFFER_BINDING:34965,LINE_WIDTH:2849,ALIASED_POINT_SIZE_RANGE:33901,ALIASED_LINE_WIDTH_RANGE:33902,CULL_FACE_MODE:2885,FRONT_FACE:2886,DEPTH_RANGE:2928,DEPTH_WRITEMASK:2930,DEPTH_CLEAR_VALUE:2931,DEPTH_FUNC:2932,STENCIL_CLEAR_VALUE:2961,STENCIL_FUNC:2962,STENCIL_FAIL:2964,STENCIL_PASS_DEPTH_FAIL:2965,STENCIL_PASS_DEPTH_PASS:2966,STENCIL_REF:2967,STENCIL_VALUE_MASK:2963,STENCIL_WRITEMASK:2968,STENCIL_BACK_FUNC:34816,STENCIL_BACK_FAIL:34817,STENCIL_BACK_PASS_DEPTH_FAIL:34818,STENCIL_BACK_PASS_DEPTH_PASS:34819,STENCIL_BACK_REF:36003,STENCIL_BACK_VALUE_MASK:36004,STENCIL_BACK_WRITEMASK:36005,VIEWPORT:2978,SCISSOR_BOX:3088,COLOR_CLEAR_VALUE:3106,COLOR_WRITEMASK:3107,UNPACK_ALIGNMENT:3317,PACK_ALIGNMENT:3333,MAX_TEXTURE_SIZE:3379,MAX_VIEWPORT_DIMS:3386,SUBPIXEL_BITS:3408,RED_BITS:3410,GREEN_BITS:3411,BLUE_BITS:3412,ALPHA_BITS:3413,DEPTH_BITS:3414,STENCIL_BITS:3415,POLYGON_OFFSET_UNITS:10752,POLYGON_OFFSET_FACTOR:32824,TEXTURE_BINDING_2D:32873,SAMPLE_BUFFERS:32936,SAMPLES:32937,SAMPLE_COVERAGE_VALUE:32938,SAMPLE_COVERAGE_INVERT:32939,COMPRESSED_TEXTURE_FORMATS:34467,VENDOR:7936,RENDERER:7937,VERSION:7938,IMPLEMENTATION_COLOR_READ_TYPE:35738,IMPLEMENTATION_COLOR_READ_FORMAT:35739,BROWSER_DEFAULT_WEBGL:37444,STATIC_DRAW:35044,STREAM_DRAW:35040,DYNAMIC_DRAW:35048,ARRAY_BUFFER:34962,ELEMENT_ARRAY_BUFFER:34963,BUFFER_SIZE:34660,BUFFER_USAGE:34661,CURRENT_VERTEX_ATTRIB:34342,VERTEX_ATTRIB_ARRAY_ENABLED:34338,VERTEX_ATTRIB_ARRAY_SIZE:34339,VERTEX_ATTRIB_ARRAY_STRIDE:34340,VERTEX_ATTRIB_ARRAY_TYPE:34341,VERTEX_ATTRIB_ARRAY_NORMALIZED:34922,VERTEX_ATTRIB_ARRAY_POINTER:34373,VERTEX_ATTRIB_ARRAY_BUFFER_BINDING:34975,CULL_FACE:2884,FRONT:1028,BACK:1029,FRONT_AND_BACK:1032,BLEND:3042,DEPTH_TEST:2929,DITHER:3024,POLYGON_OFFSET_FILL:32823,SAMPLE_ALPHA_TO_COVERAGE:32926,SAMPLE_COVERAGE:32928,SCISSOR_TEST:3089,STENCIL_TEST:2960,NO_ERROR:0,INVALID_ENUM:1280,INVALID_VALUE:1281,INVALID_OPERATION:1282,OUT_OF_MEMORY:1285,CONTEXT_LOST_WEBGL:37442,CW:2304,CCW:2305,DONT_CARE:4352,FASTEST:4353,NICEST:4354,GENERATE_MIPMAP_HINT:33170,BYTE:5120,UNSIGNED_BYTE:5121,SHORT:5122,UNSIGNED_SHORT:5123,INT:5124,UNSIGNED_INT:5125,FLOAT:5126,DOUBLE:5130,DEPTH_COMPONENT:6402,ALPHA:6406,RGB:6407,RGBA:6408,LUMINANCE:6409,LUMINANCE_ALPHA:6410,UNSIGNED_SHORT_4_4_4_4:32819,UNSIGNED_SHORT_5_5_5_1:32820,UNSIGNED_SHORT_5_6_5:33635,FRAGMENT_SHADER:35632,VERTEX_SHADER:35633,COMPILE_STATUS:35713,DELETE_STATUS:35712,LINK_STATUS:35714,VALIDATE_STATUS:35715,ATTACHED_SHADERS:35717,ACTIVE_ATTRIBUTES:35721,ACTIVE_UNIFORMS:35718,MAX_VERTEX_ATTRIBS:34921,MAX_VERTEX_UNIFORM_VECTORS:36347,MAX_VARYING_VECTORS:36348,MAX_COMBINED_TEXTURE_IMAGE_UNITS:35661,MAX_VERTEX_TEXTURE_IMAGE_UNITS:35660,MAX_TEXTURE_IMAGE_UNITS:34930,MAX_FRAGMENT_UNIFORM_VECTORS:36349,SHADER_TYPE:35663,SHADING_LANGUAGE_VERSION:35724,CURRENT_PROGRAM:35725,NEVER:512,ALWAYS:519,LESS:513,EQUAL:514,LEQUAL:515,GREATER:516,GEQUAL:518,NOTEQUAL:517,KEEP:7680,REPLACE:7681,INCR:7682,DECR:7683,INVERT:5386,INCR_WRAP:34055,DECR_WRAP:34056,NEAREST:9728,LINEAR:9729,NEAREST_MIPMAP_NEAREST:9984,LINEAR_MIPMAP_NEAREST:9985,NEAREST_MIPMAP_LINEAR:9986,LINEAR_MIPMAP_LINEAR:9987,TEXTURE_MAG_FILTER:10240,TEXTURE_MIN_FILTER:10241,TEXTURE_WRAP_S:10242,TEXTURE_WRAP_T:10243,TEXTURE_2D:3553,TEXTURE:5890,TEXTURE_CUBE_MAP:34067,TEXTURE_BINDING_CUBE_MAP:34068,TEXTURE_CUBE_MAP_POSITIVE_X:34069,TEXTURE_CUBE_MAP_NEGATIVE_X:34070,TEXTURE_CUBE_MAP_POSITIVE_Y:34071,TEXTURE_CUBE_MAP_NEGATIVE_Y:34072,TEXTURE_CUBE_MAP_POSITIVE_Z:34073,TEXTURE_CUBE_MAP_NEGATIVE_Z:34074,MAX_CUBE_MAP_TEXTURE_SIZE:34076,TEXTURE0:33984,ACTIVE_TEXTURE:34016,REPEAT:10497,CLAMP_TO_EDGE:33071,MIRRORED_REPEAT:33648,TEXTURE_WIDTH:4096,TEXTURE_HEIGHT:4097,FLOAT_VEC2:35664,FLOAT_VEC3:35665,FLOAT_VEC4:35666,INT_VEC2:35667,INT_VEC3:35668,INT_VEC4:35669,BOOL:35670,BOOL_VEC2:35671,BOOL_VEC3:35672,BOOL_VEC4:35673,FLOAT_MAT2:35674,FLOAT_MAT3:35675,FLOAT_MAT4:35676,SAMPLER_2D:35678,SAMPLER_CUBE:35680,LOW_FLOAT:36336,MEDIUM_FLOAT:36337,HIGH_FLOAT:36338,LOW_INT:36339,MEDIUM_INT:36340,HIGH_INT:36341,FRAMEBUFFER:36160,RENDERBUFFER:36161,RGBA4:32854,RGB5_A1:32855,RGB565:36194,DEPTH_COMPONENT16:33189,STENCIL_INDEX:6401,STENCIL_INDEX8:36168,DEPTH_STENCIL:34041,RENDERBUFFER_WIDTH:36162,RENDERBUFFER_HEIGHT:36163,RENDERBUFFER_INTERNAL_FORMAT:36164,RENDERBUFFER_RED_SIZE:36176,RENDERBUFFER_GREEN_SIZE:36177,RENDERBUFFER_BLUE_SIZE:36178,RENDERBUFFER_ALPHA_SIZE:36179,RENDERBUFFER_DEPTH_SIZE:36180,RENDERBUFFER_STENCIL_SIZE:36181,FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE:36048,FRAMEBUFFER_ATTACHMENT_OBJECT_NAME:36049,FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL:36050,FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE:36051,COLOR_ATTACHMENT0:36064,DEPTH_ATTACHMENT:36096,STENCIL_ATTACHMENT:36128,DEPTH_STENCIL_ATTACHMENT:33306,NONE:0,FRAMEBUFFER_COMPLETE:36053,FRAMEBUFFER_INCOMPLETE_ATTACHMENT:36054,FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:36055,FRAMEBUFFER_INCOMPLETE_DIMENSIONS:36057,FRAMEBUFFER_UNSUPPORTED:36061,FRAMEBUFFER_BINDING:36006,RENDERBUFFER_BINDING:36007,READ_FRAMEBUFFER:36008,DRAW_FRAMEBUFFER:36009,MAX_RENDERBUFFER_SIZE:34024,INVALID_FRAMEBUFFER_OPERATION:1286,UNPACK_FLIP_Y_WEBGL:37440,UNPACK_PREMULTIPLY_ALPHA_WEBGL:37441,UNPACK_COLORSPACE_CONVERSION_WEBGL:37443,READ_BUFFER:3074,UNPACK_ROW_LENGTH:3314,UNPACK_SKIP_ROWS:3315,UNPACK_SKIP_PIXELS:3316,PACK_ROW_LENGTH:3330,PACK_SKIP_ROWS:3331,PACK_SKIP_PIXELS:3332,TEXTURE_BINDING_3D:32874,UNPACK_SKIP_IMAGES:32877,UNPACK_IMAGE_HEIGHT:32878,MAX_3D_TEXTURE_SIZE:32883,MAX_ELEMENTS_VERTICES:33e3,MAX_ELEMENTS_INDICES:33001,MAX_TEXTURE_LOD_BIAS:34045,MAX_FRAGMENT_UNIFORM_COMPONENTS:35657,MAX_VERTEX_UNIFORM_COMPONENTS:35658,MAX_ARRAY_TEXTURE_LAYERS:35071,MIN_PROGRAM_TEXEL_OFFSET:35076,MAX_PROGRAM_TEXEL_OFFSET:35077,MAX_VARYING_COMPONENTS:35659,FRAGMENT_SHADER_DERIVATIVE_HINT:35723,RASTERIZER_DISCARD:35977,VERTEX_ARRAY_BINDING:34229,MAX_VERTEX_OUTPUT_COMPONENTS:37154,MAX_FRAGMENT_INPUT_COMPONENTS:37157,MAX_SERVER_WAIT_TIMEOUT:37137,MAX_ELEMENT_INDEX:36203,RED:6403,RGB8:32849,RGBA8:32856,RGB10_A2:32857,TEXTURE_3D:32879,TEXTURE_WRAP_R:32882,TEXTURE_MIN_LOD:33082,TEXTURE_MAX_LOD:33083,TEXTURE_BASE_LEVEL:33084,TEXTURE_MAX_LEVEL:33085,TEXTURE_COMPARE_MODE:34892,TEXTURE_COMPARE_FUNC:34893,SRGB:35904,SRGB8:35905,SRGB8_ALPHA8:35907,COMPARE_REF_TO_TEXTURE:34894,RGBA32F:34836,RGB32F:34837,RGBA16F:34842,RGB16F:34843,TEXTURE_2D_ARRAY:35866,TEXTURE_BINDING_2D_ARRAY:35869,R11F_G11F_B10F:35898,RGB9_E5:35901,RGBA32UI:36208,RGB32UI:36209,RGBA16UI:36214,RGB16UI:36215,RGBA8UI:36220,RGB8UI:36221,RGBA32I:36226,RGB32I:36227,RGBA16I:36232,RGB16I:36233,RGBA8I:36238,RGB8I:36239,RED_INTEGER:36244,RGB_INTEGER:36248,RGBA_INTEGER:36249,R8:33321,RG8:33323,R16F:33325,R32F:33326,RG16F:33327,RG32F:33328,R8I:33329,R8UI:33330,R16I:33331,R16UI:33332,R32I:33333,R32UI:33334,RG8I:33335,RG8UI:33336,RG16I:33337,RG16UI:33338,RG32I:33339,RG32UI:33340,R8_SNORM:36756,RG8_SNORM:36757,RGB8_SNORM:36758,RGBA8_SNORM:36759,RGB10_A2UI:36975,TEXTURE_IMMUTABLE_FORMAT:37167,TEXTURE_IMMUTABLE_LEVELS:33503,UNSIGNED_INT_2_10_10_10_REV:33640,UNSIGNED_INT_10F_11F_11F_REV:35899,UNSIGNED_INT_5_9_9_9_REV:35902,FLOAT_32_UNSIGNED_INT_24_8_REV:36269,UNSIGNED_INT_24_8:34042,HALF_FLOAT:5131,RG:33319,RG_INTEGER:33320,INT_2_10_10_10_REV:36255,CURRENT_QUERY:34917,QUERY_RESULT:34918,QUERY_RESULT_AVAILABLE:34919,ANY_SAMPLES_PASSED:35887,ANY_SAMPLES_PASSED_CONSERVATIVE:36202,MAX_DRAW_BUFFERS:34852,DRAW_BUFFER0:34853,DRAW_BUFFER1:34854,DRAW_BUFFER2:34855,DRAW_BUFFER3:34856,DRAW_BUFFER4:34857,DRAW_BUFFER5:34858,DRAW_BUFFER6:34859,DRAW_BUFFER7:34860,DRAW_BUFFER8:34861,DRAW_BUFFER9:34862,DRAW_BUFFER10:34863,DRAW_BUFFER11:34864,DRAW_BUFFER12:34865,DRAW_BUFFER13:34866,DRAW_BUFFER14:34867,DRAW_BUFFER15:34868,MAX_COLOR_ATTACHMENTS:36063,COLOR_ATTACHMENT1:36065,COLOR_ATTACHMENT2:36066,COLOR_ATTACHMENT3:36067,COLOR_ATTACHMENT4:36068,COLOR_ATTACHMENT5:36069,COLOR_ATTACHMENT6:36070,COLOR_ATTACHMENT7:36071,COLOR_ATTACHMENT8:36072,COLOR_ATTACHMENT9:36073,COLOR_ATTACHMENT10:36074,COLOR_ATTACHMENT11:36075,COLOR_ATTACHMENT12:36076,COLOR_ATTACHMENT13:36077,COLOR_ATTACHMENT14:36078,COLOR_ATTACHMENT15:36079,SAMPLER_3D:35679,SAMPLER_2D_SHADOW:35682,SAMPLER_2D_ARRAY:36289,SAMPLER_2D_ARRAY_SHADOW:36292,SAMPLER_CUBE_SHADOW:36293,INT_SAMPLER_2D:36298,INT_SAMPLER_3D:36299,INT_SAMPLER_CUBE:36300,INT_SAMPLER_2D_ARRAY:36303,UNSIGNED_INT_SAMPLER_2D:36306,UNSIGNED_INT_SAMPLER_3D:36307,UNSIGNED_INT_SAMPLER_CUBE:36308,UNSIGNED_INT_SAMPLER_2D_ARRAY:36311,MAX_SAMPLES:36183,SAMPLER_BINDING:35097,PIXEL_PACK_BUFFER:35051,PIXEL_UNPACK_BUFFER:35052,PIXEL_PACK_BUFFER_BINDING:35053,PIXEL_UNPACK_BUFFER_BINDING:35055,COPY_READ_BUFFER:36662,COPY_WRITE_BUFFER:36663,COPY_READ_BUFFER_BINDING:36662,COPY_WRITE_BUFFER_BINDING:36663,FLOAT_MAT2x3:35685,FLOAT_MAT2x4:35686,FLOAT_MAT3x2:35687,FLOAT_MAT3x4:35688,FLOAT_MAT4x2:35689,FLOAT_MAT4x3:35690,UNSIGNED_INT_VEC2:36294,UNSIGNED_INT_VEC3:36295,UNSIGNED_INT_VEC4:36296,UNSIGNED_NORMALIZED:35863,SIGNED_NORMALIZED:36764,VERTEX_ATTRIB_ARRAY_INTEGER:35069,VERTEX_ATTRIB_ARRAY_DIVISOR:35070,TRANSFORM_FEEDBACK_BUFFER_MODE:35967,MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS:35968,TRANSFORM_FEEDBACK_VARYINGS:35971,TRANSFORM_FEEDBACK_BUFFER_START:35972,TRANSFORM_FEEDBACK_BUFFER_SIZE:35973,TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN:35976,MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS:35978,MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS:35979,INTERLEAVED_ATTRIBS:35980,SEPARATE_ATTRIBS:35981,TRANSFORM_FEEDBACK_BUFFER:35982,TRANSFORM_FEEDBACK_BUFFER_BINDING:35983,TRANSFORM_FEEDBACK:36386,TRANSFORM_FEEDBACK_PAUSED:36387,TRANSFORM_FEEDBACK_ACTIVE:36388,TRANSFORM_FEEDBACK_BINDING:36389,FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING:33296,FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE:33297,FRAMEBUFFER_ATTACHMENT_RED_SIZE:33298,FRAMEBUFFER_ATTACHMENT_GREEN_SIZE:33299,FRAMEBUFFER_ATTACHMENT_BLUE_SIZE:33300,FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE:33301,FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE:33302,FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE:33303,FRAMEBUFFER_DEFAULT:33304,DEPTH24_STENCIL8:35056,DRAW_FRAMEBUFFER_BINDING:36006,READ_FRAMEBUFFER_BINDING:36010,RENDERBUFFER_SAMPLES:36011,FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER:36052,FRAMEBUFFER_INCOMPLETE_MULTISAMPLE:36182,UNIFORM_BUFFER:35345,UNIFORM_BUFFER_BINDING:35368,UNIFORM_BUFFER_START:35369,UNIFORM_BUFFER_SIZE:35370,MAX_VERTEX_UNIFORM_BLOCKS:35371,MAX_FRAGMENT_UNIFORM_BLOCKS:35373,MAX_COMBINED_UNIFORM_BLOCKS:35374,MAX_UNIFORM_BUFFER_BINDINGS:35375,MAX_UNIFORM_BLOCK_SIZE:35376,MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS:35377,MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS:35379,UNIFORM_BUFFER_OFFSET_ALIGNMENT:35380,ACTIVE_UNIFORM_BLOCKS:35382,UNIFORM_TYPE:35383,UNIFORM_SIZE:35384,UNIFORM_BLOCK_INDEX:35386,UNIFORM_OFFSET:35387,UNIFORM_ARRAY_STRIDE:35388,UNIFORM_MATRIX_STRIDE:35389,UNIFORM_IS_ROW_MAJOR:35390,UNIFORM_BLOCK_BINDING:35391,UNIFORM_BLOCK_DATA_SIZE:35392,UNIFORM_BLOCK_ACTIVE_UNIFORMS:35394,UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES:35395,UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER:35396,UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER:35398,OBJECT_TYPE:37138,SYNC_CONDITION:37139,SYNC_STATUS:37140,SYNC_FLAGS:37141,SYNC_FENCE:37142,SYNC_GPU_COMMANDS_COMPLETE:37143,UNSIGNALED:37144,SIGNALED:37145,ALREADY_SIGNALED:37146,TIMEOUT_EXPIRED:37147,CONDITION_SATISFIED:37148,WAIT_FAILED:37149,SYNC_FLUSH_COMMANDS_BIT:1,COLOR:6144,DEPTH:6145,STENCIL:6146,MIN:32775,MAX:32776,DEPTH_COMPONENT24:33190,STREAM_READ:35041,STREAM_COPY:35042,STATIC_READ:35045,STATIC_COPY:35046,DYNAMIC_READ:35049,DYNAMIC_COPY:35050,DEPTH_COMPONENT32F:36012,DEPTH32F_STENCIL8:36013,INVALID_INDEX:4294967295,TIMEOUT_IGNORED:-1,MAX_CLIENT_WAIT_TIMEOUT_WEBGL:37447,VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE:35070,UNMASKED_VENDOR_WEBGL:37445,UNMASKED_RENDERER_WEBGL:37446,MAX_TEXTURE_MAX_ANISOTROPY_EXT:34047,TEXTURE_MAX_ANISOTROPY_EXT:34046,COMPRESSED_RGB_S3TC_DXT1_EXT:33776,COMPRESSED_RGBA_S3TC_DXT1_EXT:33777,COMPRESSED_RGBA_S3TC_DXT3_EXT:33778,COMPRESSED_RGBA_S3TC_DXT5_EXT:33779,COMPRESSED_R11_EAC:37488,COMPRESSED_SIGNED_R11_EAC:37489,COMPRESSED_RG11_EAC:37490,COMPRESSED_SIGNED_RG11_EAC:37491,COMPRESSED_RGB8_ETC2:37492,COMPRESSED_RGBA8_ETC2_EAC:37493,COMPRESSED_SRGB8_ETC2:37494,COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:37495,COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2:37496,COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2:37497,COMPRESSED_RGB_PVRTC_4BPPV1_IMG:35840,COMPRESSED_RGBA_PVRTC_4BPPV1_IMG:35842,COMPRESSED_RGB_PVRTC_2BPPV1_IMG:35841,COMPRESSED_RGBA_PVRTC_2BPPV1_IMG:35843,COMPRESSED_RGB_ETC1_WEBGL:36196,COMPRESSED_RGB_ATC_WEBGL:35986,COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL:35986,COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL:34798,UNSIGNED_INT_24_8_WEBGL:34042,HALF_FLOAT_OES:36193,RGBA32F_EXT:34836,RGB32F_EXT:34837,FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE_EXT:33297,UNSIGNED_NORMALIZED_EXT:35863,MIN_EXT:32775,MAX_EXT:32776,SRGB_EXT:35904,SRGB_ALPHA_EXT:35906,SRGB8_ALPHA8_EXT:35907,FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT:33296,FRAGMENT_SHADER_DERIVATIVE_HINT_OES:35723,COLOR_ATTACHMENT0_WEBGL:36064,COLOR_ATTACHMENT1_WEBGL:36065,COLOR_ATTACHMENT2_WEBGL:36066,COLOR_ATTACHMENT3_WEBGL:36067,COLOR_ATTACHMENT4_WEBGL:36068,COLOR_ATTACHMENT5_WEBGL:36069,COLOR_ATTACHMENT6_WEBGL:36070,COLOR_ATTACHMENT7_WEBGL:36071,COLOR_ATTACHMENT8_WEBGL:36072,COLOR_ATTACHMENT9_WEBGL:36073,COLOR_ATTACHMENT10_WEBGL:36074,COLOR_ATTACHMENT11_WEBGL:36075,COLOR_ATTACHMENT12_WEBGL:36076,COLOR_ATTACHMENT13_WEBGL:36077,COLOR_ATTACHMENT14_WEBGL:36078,COLOR_ATTACHMENT15_WEBGL:36079,DRAW_BUFFER0_WEBGL:34853,DRAW_BUFFER1_WEBGL:34854,DRAW_BUFFER2_WEBGL:34855,DRAW_BUFFER3_WEBGL:34856,DRAW_BUFFER4_WEBGL:34857,DRAW_BUFFER5_WEBGL:34858,DRAW_BUFFER6_WEBGL:34859,DRAW_BUFFER7_WEBGL:34860,DRAW_BUFFER8_WEBGL:34861,DRAW_BUFFER9_WEBGL:34862,DRAW_BUFFER10_WEBGL:34863,DRAW_BUFFER11_WEBGL:34864,DRAW_BUFFER12_WEBGL:34865,DRAW_BUFFER13_WEBGL:34866,DRAW_BUFFER14_WEBGL:34867,DRAW_BUFFER15_WEBGL:34868,MAX_COLOR_ATTACHMENTS_WEBGL:36063,MAX_DRAW_BUFFERS_WEBGL:34852,VERTEX_ARRAY_BINDING_OES:34229,QUERY_COUNTER_BITS_EXT:34916,CURRENT_QUERY_EXT:34917,QUERY_RESULT_EXT:34918,QUERY_RESULT_AVAILABLE_EXT:34919,TIME_ELAPSED_EXT:35007,TIMESTAMP_EXT:36392,GPU_DISJOINT_EXT:36795}},\n", - " \"70a2bb70ef\": function _(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=t(\"@bokehjs/models/widgets/markup\");var a=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.render=function(){t.prototype.render.call(this);var e,r=(e=this.model.text,(new DOMParser).parseFromString(e,\"text/html\").documentElement.textContent)||this.model.text;r?(this.markup_el.innerHTML=r,Array.from(this.markup_el.querySelectorAll(\"script\")).forEach(function(t){var e=document.createElement(\"script\");Array.from(t.attributes).forEach(function(t){return e.setAttribute(t.name,t.value)}),e.appendChild(document.createTextNode(t.innerHTML)),t.parentNode&&t.parentNode.replaceChild(e,t)})):this.markup_el.innerHTML=\"\"},e.__name__=\"HTMLView\",e}(t(\"ec60963462\").PanelMarkupView);r.HTMLView=a;var u=function(t){function e(e){return t.call(this,e)||this}return o(e,t),e.init_HTML=function(){this.prototype.default_view=a},e.__name__=\"HTML\",e.__module__=\"panel.models.markup\",e}(i.Markup);r.HTML=u,u.init_HTML()},\n", - " \"dac8d750fa\": function _(e,t,r){var n,o=this&&this.__extends||(n=function(e,t){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])})(e,t)},function(e,t){function r(){this.constructor=e}n(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}},u=i(e(\"@bokehjs/core/properties\")),s=e(\"@bokehjs/models/widgets/markup\"),p=a(e(\"cb07e54f5a\")),l=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return o(t,e),t.prototype.render=function(){e.prototype.render.call(this);var t,r=this.model.text.replace(/(\\r\\n|\\n|\\r)/gm,\"\").replace(\"'\",'\"');try{t=window.JSON.parse(r)}catch(e){return void(this.markup_el.innerHTML=\"Invalid JSON: \"+e.toString())}var n={hoverPreviewEnabled:this.model.hover_preview,theme:this.model.theme},o=new p.default(t,this.model.depth,n).render(),i=\"border-radius: 5px; padding: 10px;\";\"dark\"==this.model.theme?o.style.cssText=\"background-color: rgb(30, 30, 30);\"+i:o.style.cssText=i,this.markup_el.append(o)},t.__name__=\"JSONView\",t}(e(\"ec60963462\").PanelMarkupView);r.JSONView=l;var _=[\"dark\",\"light\"],h=function(e){function t(t){return e.call(this,t)||this}return o(t,e),t.init_JSON=function(){this.prototype.default_view=l,this.define({depth:[u.Number,1],hover_preview:[u.Boolean,!1],theme:[u.Enum(_),\"dark\"]})},t.__name__=\"JSON\",t.__module__=\"panel.models.markup\",t}(s.Markup);r.JSON=h,h.init_JSON()},\n", - " \"cb07e54f5a\": function _(t,e,r){function n(t){return null===t?\"null\":typeof t}function o(t){return!!t&&\"object\"==typeof t}function i(t){if(void 0===t)return\"\";if(null===t)return\"Object\";if(\"object\"==typeof t&&!t.constructor)return\"Object\";var e=/function ([^(]*)/.exec(t.constructor.toString());return e&&e.length>1?e[1]:\"\"}function s(t,e,r){return\"null\"===t||\"undefined\"===t?t:(\"string\"!==t&&\"stringifiable\"!==t||(r='\"'+function(t){return t.replace(/\"/g,'\\\\\"')}(r)+'\"'),\"function\"===t?e.toString().replace(/[\\r\\n]/g,\"\").replace(/\\{.*\\}/,\"\")+\"{…}\":r)}function a(t){var e=\"\";return o(t)?(e=i(t),Array.isArray(t)&&(e+=\"[\"+t.length+\"]\")):e=s(n(t),t,t),e}function f(t){return\"json-formatter-\"+t}function m(t,e,r){var n=document.createElement(t);return e&&n.classList.add(f(e)),void 0!==r&&(r instanceof Node?n.appendChild(r):n.appendChild(document.createTextNode(String(r)))),n}!function(t){if(t&&\"undefined\"!=typeof window){var e=document.createElement(\"style\");e.setAttribute(\"media\",\"screen\"),e.innerHTML=t,document.head.appendChild(e)}}('.json-formatter-row {\\n font-family: monospace;\\n}\\n.json-formatter-row,\\n.json-formatter-row a,\\n.json-formatter-row a:hover {\\n color: black;\\n text-decoration: none;\\n}\\n.json-formatter-row .json-formatter-row {\\n margin-left: 1rem;\\n}\\n.json-formatter-row .json-formatter-children.json-formatter-empty {\\n opacity: 0.5;\\n margin-left: 1rem;\\n}\\n.json-formatter-row .json-formatter-children.json-formatter-empty:after {\\n display: none;\\n}\\n.json-formatter-row .json-formatter-children.json-formatter-empty.json-formatter-object:after {\\n content: \"No properties\";\\n}\\n.json-formatter-row .json-formatter-children.json-formatter-empty.json-formatter-array:after {\\n content: \"[]\";\\n}\\n.json-formatter-row .json-formatter-string,\\n.json-formatter-row .json-formatter-stringifiable {\\n color: green;\\n white-space: pre;\\n word-wrap: break-word;\\n}\\n.json-formatter-row .json-formatter-number {\\n color: blue;\\n}\\n.json-formatter-row .json-formatter-boolean {\\n color: red;\\n}\\n.json-formatter-row .json-formatter-null {\\n color: #855A00;\\n}\\n.json-formatter-row .json-formatter-undefined {\\n color: #ca0b69;\\n}\\n.json-formatter-row .json-formatter-function {\\n color: #FF20ED;\\n}\\n.json-formatter-row .json-formatter-date {\\n background-color: rgba(0, 0, 0, 0.05);\\n}\\n.json-formatter-row .json-formatter-url {\\n text-decoration: underline;\\n color: blue;\\n cursor: pointer;\\n}\\n.json-formatter-row .json-formatter-bracket {\\n color: blue;\\n}\\n.json-formatter-row .json-formatter-key {\\n color: #00008B;\\n padding-right: 0.2rem;\\n}\\n.json-formatter-row .json-formatter-toggler-link {\\n cursor: pointer;\\n}\\n.json-formatter-row .json-formatter-toggler {\\n line-height: 1.2rem;\\n font-size: 0.7rem;\\n vertical-align: middle;\\n opacity: 0.6;\\n cursor: pointer;\\n padding-right: 0.2rem;\\n}\\n.json-formatter-row .json-formatter-toggler:after {\\n display: inline-block;\\n transition: transform 100ms ease-in;\\n content: \"►\";\\n}\\n.json-formatter-row > a > .json-formatter-preview-text {\\n opacity: 0;\\n transition: opacity 0.15s ease-in;\\n font-style: italic;\\n}\\n.json-formatter-row:hover > a > .json-formatter-preview-text {\\n opacity: 0.6;\\n}\\n.json-formatter-row.json-formatter-open > .json-formatter-toggler-link .json-formatter-toggler:after {\\n transform: rotate(90deg);\\n}\\n.json-formatter-row.json-formatter-open > .json-formatter-children:after {\\n display: inline-block;\\n}\\n.json-formatter-row.json-formatter-open > a > .json-formatter-preview-text {\\n display: none;\\n}\\n.json-formatter-row.json-formatter-open.json-formatter-empty:after {\\n display: block;\\n}\\n.json-formatter-dark.json-formatter-row {\\n font-family: monospace;\\n}\\n.json-formatter-dark.json-formatter-row,\\n.json-formatter-dark.json-formatter-row a,\\n.json-formatter-dark.json-formatter-row a:hover {\\n color: white;\\n text-decoration: none;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-row {\\n margin-left: 1rem;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-children.json-formatter-empty {\\n opacity: 0.5;\\n margin-left: 1rem;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-children.json-formatter-empty:after {\\n display: none;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-children.json-formatter-empty.json-formatter-object:after {\\n content: \"No properties\";\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-children.json-formatter-empty.json-formatter-array:after {\\n content: \"[]\";\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-string,\\n.json-formatter-dark.json-formatter-row .json-formatter-stringifiable {\\n color: #31F031;\\n white-space: pre;\\n word-wrap: break-word;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-number {\\n color: #66C2FF;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-boolean {\\n color: #EC4242;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-null {\\n color: #EEC97D;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-undefined {\\n color: #ef8fbe;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-function {\\n color: #FD48CB;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-date {\\n background-color: rgba(255, 255, 255, 0.05);\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-url {\\n text-decoration: underline;\\n color: #027BFF;\\n cursor: pointer;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-bracket {\\n color: #9494FF;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-key {\\n color: #23A0DB;\\n padding-right: 0.2rem;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-toggler-link {\\n cursor: pointer;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-toggler {\\n line-height: 1.2rem;\\n font-size: 0.7rem;\\n vertical-align: middle;\\n opacity: 0.6;\\n cursor: pointer;\\n padding-right: 0.2rem;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-toggler:after {\\n display: inline-block;\\n transition: transform 100ms ease-in;\\n content: \"►\";\\n}\\n.json-formatter-dark.json-formatter-row > a > .json-formatter-preview-text {\\n opacity: 0;\\n transition: opacity 0.15s ease-in;\\n font-style: italic;\\n}\\n.json-formatter-dark.json-formatter-row:hover > a > .json-formatter-preview-text {\\n opacity: 0.6;\\n}\\n.json-formatter-dark.json-formatter-row.json-formatter-open > .json-formatter-toggler-link .json-formatter-toggler:after {\\n transform: rotate(90deg);\\n}\\n.json-formatter-dark.json-formatter-row.json-formatter-open > .json-formatter-children:after {\\n display: inline-block;\\n}\\n.json-formatter-dark.json-formatter-row.json-formatter-open > a > .json-formatter-preview-text {\\n display: none;\\n}\\n.json-formatter-dark.json-formatter-row.json-formatter-open.json-formatter-empty:after {\\n display: block;\\n}\\n');var l=/(^\\d{1,4}[\\.|\\\\/|-]\\d{1,2}[\\.|\\\\/|-]\\d{1,4})(\\s*(?:0?[1-9]:[0-5]|1(?=[012])\\d:[0-5])\\d\\s*[ap]m)?$/,d=/\\d{2}:\\d{2}:\\d{2} GMT-\\d{4}/,c=/\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}.\\d{3}Z/,p=window.requestAnimationFrame||function(t){return t(),0},j={hoverPreviewEnabled:!1,hoverPreviewArrayCount:100,hoverPreviewFieldCount:5,animateOpen:!0,animateClose:!0,theme:null,useToJSON:!0,sortPropertiesBy:null},h=function(){function t(t,e,r,n){void 0===e&&(e=1),void 0===r&&(r=j),this.json=t,this.open=e,this.config=r,this.key=n,this._isOpen=null,void 0===this.config.hoverPreviewEnabled&&(this.config.hoverPreviewEnabled=j.hoverPreviewEnabled),void 0===this.config.hoverPreviewArrayCount&&(this.config.hoverPreviewArrayCount=j.hoverPreviewArrayCount),void 0===this.config.hoverPreviewFieldCount&&(this.config.hoverPreviewFieldCount=j.hoverPreviewFieldCount),void 0===this.config.useToJSON&&(this.config.useToJSON=j.useToJSON),\"\"===this.key&&(this.key='\"\"')}return Object.defineProperty(t.prototype,\"isOpen\",{get:function(){return null!==this._isOpen?this._isOpen:this.open>0},set:function(t){this._isOpen=t},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"isDate\",{get:function(){return this.json instanceof Date||\"string\"===this.type&&(l.test(this.json)||c.test(this.json)||d.test(this.json))},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"isUrl\",{get:function(){return\"string\"===this.type&&0===this.json.indexOf(\"http\")},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"isArray\",{get:function(){return Array.isArray(this.json)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"isObject\",{get:function(){return o(this.json)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"isEmptyObject\",{get:function(){return!this.keys.length&&!this.isArray},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"isEmpty\",{get:function(){return this.isEmptyObject||this.keys&&!this.keys.length&&this.isArray},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"useToJSON\",{get:function(){return this.config.useToJSON&&\"stringifiable\"===this.type},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"hasKey\",{get:function(){return void 0!==this.key},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"constructorName\",{get:function(){return i(this.json)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"type\",{get:function(){return this.config.useToJSON&&this.json&&this.json.toJSON?\"stringifiable\":n(this.json)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"keys\",{get:function(){if(this.isObject){var t=Object.keys(this.json);return!this.isArray&&this.config.sortPropertiesBy?t.sort(this.config.sortPropertiesBy):t}return[]},enumerable:!0,configurable:!0}),t.prototype.toggleOpen=function(){this.isOpen=!this.isOpen,this.element&&(this.isOpen?this.appendChildren(this.config.animateOpen):this.removeChildren(this.config.animateClose),this.element.classList.toggle(f(\"open\")))},t.prototype.openAtDepth=function(t){void 0===t&&(t=1),t<0||(this.open=t,this.isOpen=0!==t,this.element&&(this.removeChildren(!1),0===t?this.element.classList.remove(f(\"open\")):(this.appendChildren(this.config.animateOpen),this.element.classList.add(f(\"open\")))))},t.prototype.getInlinepreview=function(){var t=this;if(this.isArray)return this.json.length>this.config.hoverPreviewArrayCount?\"Array[\"+this.json.length+\"]\":\"[\"+this.json.map(a).join(\", \")+\"]\";var e=this.keys,r=e.slice(0,this.config.hoverPreviewFieldCount).map(function(e){return e+\":\"+a(t.json[e])}),n=e.length>=this.config.hoverPreviewFieldCount?\"…\":\"\";return\"{\"+r.join(\", \")+n+\"}\"},t.prototype.render=function(){this.element=m(\"div\",\"row\");var t=this.isObject?m(\"a\",\"toggler-link\"):m(\"span\");if(this.isObject&&!this.useToJSON&&t.appendChild(m(\"span\",\"toggler\")),this.hasKey&&t.appendChild(m(\"span\",\"key\",this.key+\":\")),this.isObject&&!this.useToJSON){var e=m(\"span\",\"value\"),r=m(\"span\"),n=m(\"span\",\"constructor-name\",this.constructorName);if(r.appendChild(n),this.isArray){var o=m(\"span\");o.appendChild(m(\"span\",\"bracket\",\"[\")),o.appendChild(m(\"span\",\"number\",this.json.length)),o.appendChild(m(\"span\",\"bracket\",\"]\")),r.appendChild(o)}e.appendChild(r),t.appendChild(e)}else{(e=this.isUrl?m(\"a\"):m(\"span\")).classList.add(f(this.type)),this.isDate&&e.classList.add(f(\"date\")),this.isUrl&&(e.classList.add(f(\"url\")),e.setAttribute(\"href\",this.json));var i=s(this.type,this.json,this.useToJSON?this.json.toJSON():this.json);e.appendChild(document.createTextNode(i)),t.appendChild(e)}if(this.isObject&&this.config.hoverPreviewEnabled){var a=m(\"span\",\"preview-text\");a.appendChild(document.createTextNode(this.getInlinepreview())),t.appendChild(a)}var l=m(\"div\",\"children\");return this.isObject&&l.classList.add(f(\"object\")),this.isArray&&l.classList.add(f(\"array\")),this.isEmpty&&l.classList.add(f(\"empty\")),this.config&&this.config.theme&&this.element.classList.add(f(this.config.theme)),this.isOpen&&this.element.classList.add(f(\"open\")),this.element.appendChild(t),this.element.appendChild(l),this.isObject&&this.isOpen&&this.appendChildren(),this.isObject&&!this.useToJSON&&t.addEventListener(\"click\",this.toggleOpen.bind(this)),this.element},t.prototype.appendChildren=function(e){var r=this;void 0===e&&(e=!1);var n=this.element.querySelector(\"div.\"+f(\"children\"));if(n&&!this.isEmpty)if(e){var o=0,i=function(){var e=r.keys[o],s=new t(r.json[e],r.open-1,r.config,e);n.appendChild(s.render()),(o+=1)10?i():p(i))};p(i)}else this.keys.forEach(function(e){var o=new t(r.json[e],r.open-1,r.config,e);n.appendChild(o.render())})},t.prototype.removeChildren=function(t){void 0===t&&(t=!1);var e=this.element.querySelector(\"div.\"+f(\"children\"));if(t){var r=0,n=function(){e&&e.children.length&&(e.removeChild(e.children[0]),(r+=1)>10?n():p(n))};p(n)}else e&&(e.innerHTML=\"\")},t}();e.exports=h},\n", - " \"c81021c8fd\": function _(t,e,n){var i,r=this&&this.__extends||(i=function(t,e){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(t,e)},function(t,e){function n(){this.constructor=t}i(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}),o=t(\"@bokehjs/models/widgets/markup\"),a=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return r(e,t),e.prototype.render=function(){t.prototype.render.call(this),this.markup_el.innerHTML=this.model.text,window.renderMathInElement&&window.renderMathInElement(this.el,{delimiters:[{left:\"$$\",right:\"$$\",display:!0},{left:\"\\\\[\",right:\"\\\\]\",display:!0},{left:\"$\",right:\"$\",display:!1},{left:\"\\\\(\",right:\"\\\\)\",display:!1}]})},e.__name__=\"KaTeXView\",e}(t(\"ec60963462\").PanelMarkupView);n.KaTeXView=a;var l=function(t){function e(e){return t.call(this,e)||this}return r(e,t),e.init_KaTeX=function(){this.prototype.default_view=a},e.__name__=\"KaTeX\",e.__module__=\"panel.models.katex\",e}(o.Markup);n.KaTeX=l,l.init_KaTeX()},\n", - " \"a93ded647d\": function _(t,e,n){var i,o=this&&this.__extends||(i=function(t,e){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(t,e)},function(t,e){function n(){this.constructor=t}i(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}),r=t(\"@bokehjs/models/widgets/markup\"),a=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.initialize=function(){t.prototype.initialize.call(this),this._hub=window.MathJax.Hub,this._hub.Config({tex2jax:{inlineMath:[[\"$\",\"$\"],[\"\\\\(\",\"\\\\)\"]]}})},e.prototype.render=function(){t.prototype.render.call(this),this._hub&&(this.markup_el.innerHTML=this.model.text,this._hub.Queue([\"Typeset\",this._hub,this.markup_el]))},e.__name__=\"MathJaxView\",e}(t(\"ec60963462\").PanelMarkupView);n.MathJaxView=a;var u=function(t){function e(e){return t.call(this,e)||this}return o(e,t),e.init_MathJax=function(){this.prototype.default_view=a},e.__name__=\"MathJax\",e.__module__=\"panel.models.mathjax\",e}(r.Markup);n.MathJax=u,u.init_MathJax()},\n", - " \"98100899bc\": function _(t,e,i){var n,o=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var i in e)e.hasOwnProperty(i)&&(t[i]=e[i])})(t,e)},function(t,e){function i(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(i.prototype=e.prototype,new i)}),r=(this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var i in t)Object.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e.default=t,e})(t(\"@bokehjs/core/properties\")),s=t(\"@bokehjs/core/dom\"),a=t(\"@bokehjs/models/widgets/widget\"),l=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.connect_signals=function(){var e=this;t.prototype.connect_signals.call(this),this.connect(this.model.change,function(){return e.render()}),this.connect(this.model.properties.value.change,function(){return e.render()}),this.connect(this.model.properties.loop_policy.change,function(){return e.set_loop_state(e.model.loop_policy)})},e.prototype.get_height=function(){return 250},e.prototype.render=function(){var e=this;if(null!=this.sliderEl)return this.sliderEl.style.width=\"{this.model.width}px\",this.sliderEl.min=String(this.model.start),this.sliderEl.max=String(this.model.end),void(this.sliderEl.value=String(this.model.value));t.prototype.render.call(this),this.sliderEl=document.createElement(\"input\"),this.sliderEl.setAttribute(\"type\",\"range\"),this.sliderEl.style.width=this.model.width+\"px\",this.sliderEl.value=String(this.model.value),this.sliderEl.min=String(this.model.start),this.sliderEl.max=String(this.model.end),this.sliderEl.onchange=function(t){return e.set_frame(parseInt(t.target.value))};var i=s.div();i.style.cssText=\"margin: 0 auto; display: table; padding: 5px\";var n=\"text-align: center; min-width: 40px; margin: 2px\",o=document.createElement(\"button\");o.style.cssText=\"text-align: center; min-width: 20px\",o.appendChild(document.createTextNode(\"–\")),o.onclick=function(){return e.slower()},i.appendChild(o);var r=document.createElement(\"button\");r.style.cssText=n,r.appendChild(document.createTextNode(\"❚◀◀\")),r.onclick=function(){return e.first_frame()},i.appendChild(r);var a=document.createElement(\"button\");a.style.cssText=n,a.appendChild(document.createTextNode(\"❚◀\")),a.onclick=function(){return e.previous_frame()},i.appendChild(a);var l=document.createElement(\"button\");l.style.cssText=n,l.appendChild(document.createTextNode(\"◀\")),l.onclick=function(){return e.reverse_animation()},i.appendChild(l);var d=document.createElement(\"button\");d.style.cssText=n,d.appendChild(document.createTextNode(\"❚❚\")),d.onclick=function(){return e.pause_animation()},i.appendChild(d);var p=document.createElement(\"button\");p.style.cssText=n,p.appendChild(document.createTextNode(\"▶\")),p.onclick=function(){return e.play_animation()},i.appendChild(p);var c=document.createElement(\"button\");c.style.cssText=n,c.appendChild(document.createTextNode(\"▶❚\")),c.onclick=function(){return e.next_frame()},i.appendChild(c);var h=document.createElement(\"button\");h.style.cssText=n,h.appendChild(document.createTextNode(\"▶▶❚\")),h.onclick=function(){return e.last_frame()},i.appendChild(h);var u=document.createElement(\"button\");u.style.cssText=\"text-align: center; min-width: 20px\",u.appendChild(document.createTextNode(\"+\")),u.onclick=function(){return e.faster()},i.appendChild(u),this.loop_state=document.createElement(\"form\"),this.loop_state.style.cssText=\"margin: 0 auto; display: table\";var m=document.createElement(\"input\");m.type=\"radio\",m.value=\"once\",m.name=\"state\";var _=document.createElement(\"label\");_.innerHTML=\"Once\",_.style.cssText=\"padding: 0 10px 0 5px; user-select:none;\";var f=document.createElement(\"input\");f.setAttribute(\"type\",\"radio\"),f.setAttribute(\"value\",\"loop\"),f.setAttribute(\"name\",\"state\");var v=document.createElement(\"label\");v.innerHTML=\"Loop\",v.style.cssText=\"padding: 0 10px 0 5px; user-select:none;\";var y=document.createElement(\"input\");y.setAttribute(\"type\",\"radio\"),y.setAttribute(\"value\",\"reflect\"),y.setAttribute(\"name\",\"state\");var x=document.createElement(\"label\");x.innerHTML=\"Reflect\",x.style.cssText=\"padding: 0 10px 0 5px; user-select:none;\",\"once\"==this.model.loop_policy?m.checked=!0:\"loop\"==this.model.loop_policy?f.checked=!0:y.checked=!0,this.loop_state.appendChild(m),this.loop_state.appendChild(_),this.loop_state.appendChild(f),this.loop_state.appendChild(v),this.loop_state.appendChild(y),this.loop_state.appendChild(x),this.el.appendChild(this.sliderEl),this.el.appendChild(i),this.el.appendChild(this.loop_state)},e.prototype.set_frame=function(t){this.model.value!=t&&(this.model.value=t),this.sliderEl.value!=String(t)&&(this.sliderEl.value=String(t))},e.prototype.get_loop_state=function(){for(var t=this.loop_state.state,e=0;e0?this.play_animation():this.model.direction<0&&this.reverse_animation()},e.prototype.faster=function(){this.model.interval=Math.round(.7*this.model.interval),this.model.direction>0?this.play_animation():this.model.direction<0&&this.reverse_animation()},e.prototype.anim_step_forward=function(){if(this.model.valuethis.model.start)this.previous_frame();else{var t=this.get_loop_state();\"loop\"==t?this.last_frame():\"reflect\"==t?(this.first_frame(),this.play_animation()):(this.pause_animation(),this.first_frame())}},e.prototype.pause_animation=function(){this.model.direction=0,this.timer&&(clearInterval(this.timer),this.timer=null)},e.prototype.play_animation=function(){var t=this;this.pause_animation(),this.model.direction=1,this.timer||(this.timer=setInterval(function(){return t.anim_step_forward()},this.model.interval))},e.prototype.reverse_animation=function(){var t=this;this.pause_animation(),this.model.direction=-1,this.timer||(this.timer=setInterval(function(){return t.anim_step_reverse()},this.model.interval))},e.__name__=\"PlayerView\",e}(a.WidgetView);i.PlayerView=l;var d=function(t){function e(e){return t.call(this,e)||this}return o(e,t),e.init_Player=function(){this.prototype.default_view=l,this.define({direction:[r.Number,0],interval:[r.Number,500],start:[r.Number],end:[r.Number],step:[r.Number,1],loop_policy:[r.Any,\"once\"],value:[r.Any,0]}),this.override({width:400})},e.__name__=\"Player\",e.__module__=\"panel.models.widgets\",e}(a.Widget);i.Player=d,d.init_Player()},\n", - " \"d46f026c83\": function _(t,e,o){var r,n=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var o in e)e.hasOwnProperty(o)&&(t[o]=e[o])})(t,e)},function(t,e){function o(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(o.prototype=e.prototype,new o)}),i=(this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var o in t)Object.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e.default=t,e})(t(\"@bokehjs/core/properties\")),l=t(\"@bokehjs/core/util/object\"),a=t(\"@bokehjs/core/util/eq\"),p=t(\"@bokehjs/models/layouts/html_box\"),s=t(\"99a25e6992\"),u=t(\"62ba79515f\"),c=t(\"ec60963462\"),_=window.Plotly,d=function(t,e,o){var r=Array.isArray(e)?[]:{};if(\"click\"===o||\"hover\"===o||\"selected\"===o){var n=[];if(null==e)return null;for(var i=t.data,l=0;l1){for(var u=[],c=0;c=0?t=setTimeout(i,l-c):(t=null,u||(r=n.apply(o,e),o=e=null))}null==l&&(l=100);var c=function(){o=this,e=arguments,a=Date.now();var c=u&&!t;return t||(t=setTimeout(i,l)),c&&(r=n.apply(o,e),o=e=null),r};return c.clear=function(){t&&(clearTimeout(t),t=null)},c.flush=function(){t&&(r=n.apply(o,e),o=e=null,clearTimeout(t),t=null)},c}t.debounce=t,l.exports=t},\n", - " \"62ba79515f\": function _(t,r,n){n.get=function(t,r,n){void 0===n&&(n=void 0);var e=function(n){return String.prototype.split.call(r,n).filter(Boolean).reduce(function(t,r){return null!=t?t[r]:t},t)},o=e(/[,[\\]]+?/)||e(/[,[\\].]+?/);return void 0===o||o===t?n:o},n.throttle=function(t,r){var n=0;return function(){var e=Number(new Date);e-n>=r&&(t(),n=e)}},n.deepCopy=function t(r){var n;if(null==r||\"object\"!=typeof r)return r;if(r instanceof Array){n=[];for(var e=0,o=r.length;e0){var t=this._fetch_datasets();if(\"data\"in t&&(this.model.data.data.values=t.data,delete t.data),void 0!==this.model.data.data)for(var e=0,o=this.model.data.data;e0&&(this.timer=setInterval(function(){return t.snapshot()},this.model.timeout))},e.prototype.snapshot=function(){this.canvasEl.width=this.videoEl.videoWidth,this.canvasEl.height=this.videoEl.videoHeight;var t=this.canvasEl.getContext(\"2d\");t&&t.drawImage(this.videoEl,0,0,this.canvasEl.width,this.canvasEl.height),this.model.value=this.canvasEl.toDataURL(\"image/\"+this.model.format,.95)},e.prototype.remove=function(){t.prototype.remove.call(this),this.timer&&(clearInterval(this.timer),this.timer=null)},e.prototype.render=function(){var e=this;t.prototype.render.call(this),this.videoEl||(this.videoEl=document.createElement(\"video\"),this.model.sizing_mode&&\"fixed\"!==this.model.sizing_mode||(this.model.height&&(this.videoEl.height=this.model.height),this.model.width&&(this.videoEl.width=this.model.width)),this.videoEl.style.objectFit=\"fill\",this.videoEl.style.minWidth=\"100%\",this.videoEl.style.minHeight=\"100%\",this.canvasEl=document.createElement(\"canvas\"),this.el.appendChild(this.videoEl),navigator.mediaDevices.getUserMedia&&navigator.mediaDevices.getUserMedia(this.constraints).then(function(t){e.videoEl.srcObject=t,e.model.paused||e.videoEl.play()}).catch(console.error))},e.__name__=\"VideoStreamView\",e}(t(\"ec60963462\").PanelHTMLBoxView);i.VideoStreamView=h;var a=function(t){function e(e){return t.call(this,e)||this}return n(e,t),e.init_VideoStream=function(){this.prototype.default_view=h,this.define({format:[s.String,\"png\"],paused:[s.Boolean,!1],snapshot:[s.Boolean,!1],timeout:[s.Number,0],value:[s.Any]}),this.override({height:240,width:320})},e.__name__=\"VideoStream\",e.__module__=\"panel.models.widgets\",e}(r.HTMLBox);i.VideoStream=a,a.init_VideoStream()},\n", - " \"63070bc9ce\": function _(V,o,e){var l=V(\"1a4b530306\");e.VTKPlot=l.VTKPlot;var K=V(\"b933e81f56\");e.VTKVolumePlot=K.VTKVolumePlot;var T=V(\"5bc27423fe\");e.VTKAxes=T.VTKAxes},\n", - " \"1a4b530306\": function _(e,t,n){var i,o=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),r=(this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t})(e(\"@bokehjs/core/properties\")),a=e(\"@bokehjs/core/dom\"),s=e(\"7620c2cc05\"),c=e(\"3b847a648d\"),d=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t._axes_initialized=!1,t}return o(t,e),t.prototype.connect_signals=function(){var t=this;e.prototype.connect_signals.call(this),this.connect(this.model.properties.axes.change,function(){t._delete_axes(),t.model.axes&&t._set_axes(),t._vtk_renwin.getRenderWindow().render()}),this.el.addEventListener(\"mouseenter\",function(){var e=t._vtk_renwin.getInteractor();t.model.enable_keybindings&&(document.querySelector(\"body\").addEventListener(\"keypress\",e.handleKeyPress),document.querySelector(\"body\").addEventListener(\"keydown\",e.handleKeyDown),document.querySelector(\"body\").addEventListener(\"keyup\",e.handleKeyUp))}),this.el.addEventListener(\"mouseleave\",function(){var e=t._vtk_renwin.getInteractor();document.querySelector(\"body\").removeEventListener(\"keypress\",e.handleKeyPress),document.querySelector(\"body\").removeEventListener(\"keydown\",e.handleKeyDown),document.querySelector(\"body\").removeEventListener(\"keyup\",e.handleKeyUp)})},t.prototype.render=function(){e.prototype.render.call(this),this._axes=null,this._axes_initialized=!1,this._plot()},t.prototype.after_layout=function(){this._axes_initialized||(this._render_axes_canvas(),this._axes_initialized=!0)},t.prototype._render_axes_canvas=function(){var e=this,t=this._vtk_container.getElementsByTagName(\"canvas\");if(1!=t.length)throw Error(\"Error at initialization of the 3D scene, container should have one and only one canvas\");t[0].classList.add(\"scene3d-canvas\");var n=a.canvas({style:{position:\"absolute\",top:\"0\",left:\"0\",width:\"100%\",height:\"100%\"}});n.classList.add(\"axes-canvas\"),this._vtk_container.appendChild(n),this._vtk_renwin.setResizeCallback(function(){var t=e._vtk_container.getBoundingClientRect(),i=Math.floor(t.width*window.devicePixelRatio),o=Math.floor(t.height*window.devicePixelRatio);n.setAttribute(\"width\",i.toFixed()),n.setAttribute(\"height\",o.toFixed())})},t.prototype._delete_axes=function(){var e=this;if(null!=this._axes){Object.keys(this._axes).forEach(function(t){return e._vtk_renwin.getRenderer().removeActor(e._axes[t])});var t=this._vtk_renwin.getContainer().getElementsByClassName(\"axes-canvas\")[0],n=t.getContext(\"2d\");n&&n.clearRect(0,0,t.clientWidth*window.devicePixelRatio,t.clientHeight*window.devicePixelRatio),this._axes=null}},t.prototype._set_axes=function(){if(this.model.axes){var e=this._vtk_renwin.getContainer().getElementsByClassName(\"axes-canvas\")[0],t=this.model.axes.create_axes(e),n=t.psActor,i=t.axesActor,o=t.gridActor;this._axes={psActor:n,axesActor:i,gridActor:o},this._vtk_renwin.getRenderer().addActor(n),this._vtk_renwin.getRenderer().addActor(i),this._vtk_renwin.getRenderer().addActor(o)}},t.prototype._plot=function(){var e=this;if(this.model.data)var t=c.vtkns.DataAccessHelper.get(\"zip\",{zipContent:atob(this.model.data),callback:function(n){var i=c.vtkns.HttpSceneLoader.newInstance({renderer:e._vtk_renwin.getRenderer(),dataAccessHelper:t}),o=c.vtk.macro.debounce(function(){null==e._axes&&e.model.axes&&e._set_axes(),e.model.properties.camera.change.emit()},100);i.setUrl(\"index.json\"),i.onReady(o)}});else this._vtk_renwin.getRenderWindow().render()},t.__name__=\"VTKPlotView\",t}(s.AbstractVTKView);n.VTKPlotView=d;var l=function(e){function t(t){var n=e.call(this,t)||this;n.outline=c.vtkns.OutlineFilter.newInstance();var i=c.vtkns.Mapper.newInstance();return i.setInputConnection(n.outline.getOutputPort()),n.outline_actor=c.vtkns.Actor.newInstance(),n.outline_actor.setMapper(i),n}return o(t,e),t.init_VTKPlot=function(){this.prototype.default_view=d,this.define({data:[r.String],axes:[r.Instance],enable_keybindings:[r.Boolean,!1]})},t.__name__=\"VTKPlot\",t}(s.AbstractVTKPlot);n.VTKPlot=l,l.init_VTKPlot()},\n", - " \"7620c2cc05\": function _(e,t,n){var i,r=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),o=(this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t})(e(\"@bokehjs/core/properties\")),a=e(\"@bokehjs/core/dom\"),s=e(\"@bokehjs/core/util/object\"),_=e(\"@bokehjs/models/layouts/html_box\"),c=e(\"ec60963462\"),d=e(\"3b847a648d\"),h=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t._setting_camera=!1,t}return r(t,e),t.prototype.connect_signals=function(){var t=this;e.prototype.connect_signals.call(this),this.connect(this.model.properties.data.change,function(){t.invalidate_render()}),this.connect(this.model.properties.orientation_widget.change,function(){t._orientation_widget_visibility(t.model.orientation_widget)}),this.connect(this.model.properties.camera.change,function(){return t._set_camera_state()})},t.prototype._orientation_widget_visibility=function(e){this._orientationWidget.setEnabled(e),e?this._widgetManager.enablePicking():this._widgetManager.disablePicking(),this._orientationWidget.updateMarkerOrientation(),this._vtk_renwin.getRenderWindow().render()},t.prototype._create_orientation_widget=function(){var e=this,t=d.vtkns.AxesActor.newInstance(),n=d.vtkns.OrientationMarkerWidget.newInstance({actor:t,interactor:this._vtk_renwin.getInteractor()});n.setEnabled(!0),n.setViewportCorner(d.vtkns.OrientationMarkerWidget.Corners.BOTTOM_RIGHT),n.setViewportSize(.15),n.setMinPixelSize(100),n.setMaxPixelSize(300),this._orientationWidget=n;var i=d.vtkns.WidgetManager.newInstance();i.setRenderer(n.getRenderer());var r=d.vtkns.InteractiveOrientationWidget.newInstance();r.placeWidget(t.getBounds()),r.setBounds(t.getBounds()),r.setPlaceFactor(1);var o=i.addWidget(r);this._widgetManager=i,o.onOrientationChange(function(t){var n=t.direction,i=e._vtk_renwin.getRenderer().getActiveCamera(),r=i.getFocalPoint(),o=i.getPosition(),a=i.getViewUp(),s=Math.sqrt(Math.pow(o[0]-r[0],2)+Math.pow(o[1]-r[1],2)+Math.pow(o[2]-r[2],2));i.setPosition(r[0]+n[0]*s,r[1]+n[1]*s,r[2]+n[2]*s),n[0]&&i.setViewUp(d.majorAxis(a,1,2)),n[1]&&i.setViewUp(d.majorAxis(a,0,2)),n[2]&&i.setViewUp(d.majorAxis(a,0,1)),e._orientationWidget.updateMarkerOrientation(),e._vtk_renwin.getRenderer().resetCameraClippingRange(),e._vtk_renwin.getRenderWindow().render()}),this._orientation_widget_visibility(this.model.orientation_widget)},t.prototype._get_camera_state=function(){if(!this._setting_camera){this._setting_camera=!0;var e=s.clone(this._vtk_renwin.getRenderer().getActiveCamera().get());delete e.classHierarchy,delete e.vtkObject,delete e.vtkCamera,delete e.viewPlaneNormal,this.model.camera=e,this._setting_camera=!1}},t.prototype._set_camera_state=function(){if(!this._setting_camera){this._setting_camera=!0;try{this.model.camera&&this._vtk_renwin.getRenderer().getActiveCamera().set(this.model.camera)}finally{this._setting_camera=!1}this._orientationWidget.updateMarkerOrientation(),this._vtk_renwin.getRenderer().resetCameraClippingRange(),this._vtk_renwin.getRenderWindow().render()}},t.prototype.render=function(){var t=this;e.prototype.render.call(this),this._orientationWidget=null,this._vtk_container=a.div(),c.set_size(this._vtk_container,this.model),this.el.appendChild(this._vtk_container),this._vtk_renwin=d.vtkns.FullScreenRenderWindow.newInstance({rootContainer:this.el,container:this._vtk_container}),this._remove_default_key_binding(),this._create_orientation_widget(),this._vtk_renwin.getRenderer().getActiveCamera().onModified(function(){return t._get_camera_state()}),this._set_camera_state(),this.model.renderer_el=this._vtk_renwin},t.prototype.after_layout=function(){e.prototype.after_layout.call(this),this._vtk_renwin.resize()},t.prototype._remove_default_key_binding=function(){var e=this._vtk_renwin.getInteractor();document.querySelector(\"body\").removeEventListener(\"keypress\",e.handleKeyPress),document.querySelector(\"body\").removeEventListener(\"keydown\",e.handleKeyDown),document.querySelector(\"body\").removeEventListener(\"keyup\",e.handleKeyUp)},t.__name__=\"AbstractVTKView\",t}(c.PanelHTMLBoxView);n.AbstractVTKView=h;var l=function(e){function t(t){return e.call(this,t)||this}return r(t,e),t.prototype.getActors=function(){return this.renderer_el.getRenderer().getActors()},t.init_AbstractVTKPlot=function(){this.define({orientation_widget:[o.Boolean,!1],camera:[o.Instance]}),this.override({height:300,width:300})},t.__name__=\"AbstractVTKPlot\",t.__module__=\"panel.models.vtk\",t}(_.HTMLBox);n.AbstractVTKPlot=l,l.init_AbstractVTKPlot()},\n", - " \"3b847a648d\": function _(e,t,n){var r=e(\"@bokehjs/core/util/serialization\"),a=e(\"@bokehjs/core/util/array\");function o(e){var t=Math.min(Math.max(Math.round(e),0),255).toString(16);return 2==t.length?t:\"0\"+t}function i(e,t,n){return\"#\"+o(e)+o(t)+o(n)}function v(e){for(var t=new ArrayBuffer(e.length),n=new Uint8Array(t),r=0,a=e.length;rMath.abs(e[n])?t:n,o=e[a]>0?1:-1;return r[a]=o,r},n.cartesian_product=function(){for(var e=[],t=0;t=.005&&(e.model.sampling=t)}),Math.abs(this.model.sampling-Number(this.shadow_selector.value))>=.005&&this.model.properties.sampling.change.emit(),this.edge_gradient_slider.addEventListener(\"input\",function(){var t=Number(e.edge_gradient_slider.value);Math.abs(e.model.edge_gradient-t)>=.005&&(e.model.edge_gradient=t)}),Math.abs(this.model.edge_gradient-Number(this.edge_gradient_slider.value))>=.005&&this.model.properties.edge_gradient.change.emit()},t.prototype._plot_volume=function(){var e=this,t=this._vtk_image_data,n=a.vtkns.Volume.newInstance(),r=a.vtkns.VolumeMapper.newInstance();n.setMapper(r),r.setInputData(t);var i=(t.getPointData().getScalars()||t.getPointData().getArrays()[0]).getRange(),o=a.vtkns.ColorTransferFunction.newInstance();o.onModified(function(){return e.model.mapper=a.vtkLutToMapper(o)});var s=a.vtkns.PiecewiseFunction.newInstance(),l=.7*Math.sqrt(t.getSpacing().map(function(e){return e*e}).reduce(function(e,t){return e+t},0));r.setSampleDistance(l),n.getProperty().setRGBTransferFunction(0,o),n.getProperty().setScalarOpacity(0,s),n.getProperty().setInterpolationTypeToFastLinear(),n.getProperty().setScalarOpacityUnitDistance(0,a.vtkns.BoundingBox.getDiagonalLength(t.getBounds())/Math.max.apply(Math,t.getDimensions())),n.getProperty().setGradientOpacityMinimumValue(0,0),n.getProperty().setGradientOpacityMaximumValue(0,.05*(i[1]-i[0])),n.getProperty().setShade(this.model.shadow),n.getProperty().setUseGradientOpacity(0,!0),n.getProperty().setGradientOpacityMinimumOpacity(0,0),n.getProperty().setGradientOpacityMaximumOpacity(0,1),n.getProperty().setAmbient(this.model.ambient),n.getProperty().setDiffuse(this.model.diffuse),n.getProperty().setSpecular(this.model.specular),n.getProperty().setSpecularPower(this.model.specular_power),this._vtk_renwin.getRenderer().addVolume(n),this._controllerWidget.setupContent(this._vtk_renwin.getRenderWindow(),n,!0)},t.prototype._plot_slices=function(){var e=this._vtk_image_data,t=a.vtkns.ImageSlice.newInstance(),n=a.vtkns.ImageSlice.newInstance(),r=a.vtkns.ImageSlice.newInstance(),i=a.vtkns.ImageMapper.newInstance(),o=a.vtkns.ImageMapper.newInstance(),s=a.vtkns.ImageMapper.newInstance();i.setInputData(e),i.setISlice(this.model.slice_i),t.setMapper(i),o.setInputData(e),o.setJSlice(this.model.slice_j),n.setMapper(o),s.setInputData(e),s.setKSlice(this.model.slice_k),r.setMapper(s);var l=a.vtkns.PiecewiseFunction.newInstance();l.removeAllPoints(),l.addPoint(0,1);var c=this.volume.getProperty().getRGBTransferFunction(0),p=t.getProperty();n.setProperty(p),r.setProperty(p),p.setRGBTransferFunction(c),p.setScalarOpacity(l);var d=this._vtk_renwin.getRenderer();d.addActor(t),d.addActor(n),d.addActor(r)},t.prototype._set_volume_visibility=function(e){this.volume.setVisibility(e)},t.prototype._set_slices_visibility=function(e){this._vtk_renwin.getRenderer().getActors().map(function(t){return t.setVisibility(e)})},t.__name__=\"VTKVolumePlotView\",t}(s.AbstractVTKView);n.VTKVolumePlotView=l;var c=function(e){function t(t){return e.call(this,t)||this}return i(t,e),t.init_VTKVolumePlot=function(){this.prototype.default_view=l,this.define({data:[o.Instance],shadow:[o.Boolean,!0],sampling:[o.Number,.4],edge_gradient:[o.Number,.2],colormap:[o.String],rescale:[o.Boolean,!1],ambient:[o.Number,.2],diffuse:[o.Number,.7],specular:[o.Number,.3],specular_power:[o.Number,8],slice_i:[o.Int,0],slice_j:[o.Int,0],slice_k:[o.Int,0],display_volume:[o.Boolean,!0],display_slices:[o.Boolean,!1],render_background:[o.String,\"#52576e\"],interpolation:[o.Any,\"fast_linear\"],mapper:[o.Instance]})},t.__name__=\"VTKVolumePlot\",t}(s.AbstractVTKPlot);n.VTKVolumePlot=c,c.init_VTKVolumePlot()},\n", - " \"5bc27423fe\": function _(t,e,i){var s,n=this&&this.__extends||(s=function(t,e){return(s=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var i in e)e.hasOwnProperty(i)&&(t[i]=e[i])})(t,e)},function(t,e){function i(){this.constructor=t}s(t,e),t.prototype=null===e?Object.create(e):(i.prototype=e.prototype,new i)}),r=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var i in t)Object.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e.default=t,e},a=t(\"66e1dbda7d\"),c=t(\"@bokehjs/model\"),o=r(t(\"@bokehjs/core/properties\")),l=t(\"3b847a648d\"),h=function(t){function e(e){return t.call(this,e)||this}return n(e,t),e.init_VTKAxes=function(){this.define({origin:[o.Array],xticker:[o.Instance],yticker:[o.Instance],zticker:[o.Instance],digits:[o.Number,1],show_grid:[o.Boolean,!0],grid_opacity:[o.Number,.1],axes_opacity:[o.Number,1],fontsize:[o.Number,12]})},Object.defineProperty(e.prototype,\"xticks\",{get:function(){return this.xticker.ticks},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"yticks\",{get:function(){return this.yticker.ticks},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"zticks\",{get:function(){return this.zticker.ticks},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"xlabels\",{get:function(){var t=this;return this.xticker.labels?this.xticker.labels:this.xticks.map(function(e){return e.toFixed(t.digits)})},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"ylabels\",{get:function(){var t=this;return this.yticker.labels?this.yticker.labels:this.yticks.map(function(e){return e.toFixed(t.digits)})},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"zlabels\",{get:function(){var t=this;return this.zticker.labels?this.zticker.labels:this.zticks.map(function(e){return e.toFixed(t.digits)})},enumerable:!0,configurable:!0}),e.prototype._make_grid_lines=function(t,e,i){for(var s=[],n=0;n=e.xticks.length&&i0?(n[0]=2*(M*h+c*r+s*u-f*e)/b,n[1]=2*(s*h+c*e+f*r-M*u)/b,n[2]=2*(f*h+c*u+M*e-s*r)/b):(n[0]=2*(M*h+c*r+s*u-f*e),n[1]=2*(s*h+c*e+f*r-M*u),n[2]=2*(f*h+c*u+M*e-s*r));return i(t,a,n),t},n.getTranslation=function(t,a){return t[0]=a[12],t[1]=a[13],t[2]=a[14],t},n.getScaling=M,n.getRotation=function(t,a){var n=new o.ARRAY_TYPE(3);M(n,a);var r=1/n[0],e=1/n[1],u=1/n[2],h=a[0]*r,i=a[1]*e,s=a[2]*u,f=a[4]*r,c=a[5]*e,b=a[6]*u,l=a[8]*r,v=a[9]*e,m=a[10]*u,p=h+c+m,y=0;p>0?(y=2*Math.sqrt(p+1),t[3]=.25*y,t[0]=(b-v)/y,t[1]=(l-s)/y,t[2]=(i-f)/y):h>c&&h>m?(y=2*Math.sqrt(1+h-c-m),t[3]=(b-v)/y,t[0]=.25*y,t[1]=(i+f)/y,t[2]=(l+s)/y):c>m?(y=2*Math.sqrt(1+c-h-m),t[3]=(l-s)/y,t[0]=(i+f)/y,t[1]=.25*y,t[2]=(b+v)/y):(y=2*Math.sqrt(1+m-h-c),t[3]=(i-f)/y,t[0]=(l+s)/y,t[1]=(b+v)/y,t[2]=.25*y);return t},n.fromRotationTranslationScale=function(t,a,n,r){var o=a[0],e=a[1],u=a[2],h=a[3],i=o+o,M=e+e,s=u+u,f=o*i,c=o*M,b=o*s,l=e*M,v=e*s,m=u*s,p=h*i,y=h*M,P=h*s,S=r[0],O=r[1],E=r[2];return t[0]=(1-(l+m))*S,t[1]=(c+P)*S,t[2]=(b-y)*S,t[3]=0,t[4]=(c-P)*O,t[5]=(1-(f+m))*O,t[6]=(v+p)*O,t[7]=0,t[8]=(b+y)*E,t[9]=(v-p)*E,t[10]=(1-(f+l))*E,t[11]=0,t[12]=n[0],t[13]=n[1],t[14]=n[2],t[15]=1,t},n.fromRotationTranslationScaleOrigin=function(t,a,n,r,o){var e=a[0],u=a[1],h=a[2],i=a[3],M=e+e,s=u+u,f=h+h,c=e*M,b=e*s,l=e*f,v=u*s,m=u*f,p=h*f,y=i*M,P=i*s,S=i*f,O=r[0],E=r[1],I=r[2],L=o[0],N=o[1],R=o[2],x=(1-(v+p))*O,d=(b+S)*O,g=(l-P)*O,A=(b-S)*E,Y=(1-(c+p))*E,T=(m+y)*E,w=(l+P)*I,_=(m-y)*I,q=(1-(c+v))*I;return t[0]=x,t[1]=d,t[2]=g,t[3]=0,t[4]=A,t[5]=Y,t[6]=T,t[7]=0,t[8]=w,t[9]=_,t[10]=q,t[11]=0,t[12]=n[0]+L-(x*L+A*N+w*R),t[13]=n[1]+N-(d*L+Y*N+_*R),t[14]=n[2]+R-(g*L+T*N+q*R),t[15]=1,t},n.fromQuat=function(t,a){var n=a[0],r=a[1],o=a[2],e=a[3],u=n+n,h=r+r,i=o+o,M=n*u,s=r*u,f=r*h,c=o*u,b=o*h,l=o*i,v=e*u,m=e*h,p=e*i;return t[0]=1-f-l,t[1]=s+p,t[2]=c-m,t[3]=0,t[4]=s-p,t[5]=1-M-l,t[6]=b+v,t[7]=0,t[8]=c+m,t[9]=b-v,t[10]=1-M-f,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},n.frustum=function(t,a,n,r,o,e,u){var h=1/(n-a),i=1/(o-r),M=1/(e-u);return t[0]=2*e*h,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=2*e*i,t[6]=0,t[7]=0,t[8]=(n+a)*h,t[9]=(o+r)*i,t[10]=(u+e)*M,t[11]=-1,t[12]=0,t[13]=0,t[14]=u*e*2*M,t[15]=0,t},n.perspective=function(t,a,n,r,o){var e,u=1/Math.tan(a/2);t[0]=u/n,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=u,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[11]=-1,t[12]=0,t[13]=0,t[15]=0,null!=o&&o!==1/0?(e=1/(r-o),t[10]=(o+r)*e,t[14]=2*o*r*e):(t[10]=-1,t[14]=-2*r);return t},n.perspectiveFromFieldOfView=function(t,a,n,r){var o=Math.tan(a.upDegrees*Math.PI/180),e=Math.tan(a.downDegrees*Math.PI/180),u=Math.tan(a.leftDegrees*Math.PI/180),h=Math.tan(a.rightDegrees*Math.PI/180),i=2/(u+h),M=2/(o+e);return t[0]=i,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=M,t[6]=0,t[7]=0,t[8]=-(u-h)*i*.5,t[9]=(o-e)*M*.5,t[10]=r/(n-r),t[11]=-1,t[12]=0,t[13]=0,t[14]=r*n/(n-r),t[15]=0,t},n.ortho=function(t,a,n,r,o,e,u){var h=1/(a-n),i=1/(r-o),M=1/(e-u);return t[0]=-2*h,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*i,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=2*M,t[11]=0,t[12]=(a+n)*h,t[13]=(o+r)*i,t[14]=(u+e)*M,t[15]=1,t},n.lookAt=function(t,a,n,r){var e,h,i,M,s,f,c,b,l,v,m=a[0],p=a[1],y=a[2],P=r[0],S=r[1],O=r[2],E=n[0],I=n[1],L=n[2];if(Math.abs(m-E)0&&(b=1/Math.sqrt(b),s*=b,f*=b,c*=b);var l=i*c-M*f,v=M*s-h*c,m=h*f-i*s;(b=l*l+v*v+m*m)>0&&(b=1/Math.sqrt(b),l*=b,v*=b,m*=b);return t[0]=l,t[1]=v,t[2]=m,t[3]=0,t[4]=f*m-c*v,t[5]=c*l-s*m,t[6]=s*v-f*l,t[7]=0,t[8]=s,t[9]=f,t[10]=c,t[11]=0,t[12]=o,t[13]=e,t[14]=u,t[15]=1,t},n.str=function(t){return\"mat4(\"+t[0]+\", \"+t[1]+\", \"+t[2]+\", \"+t[3]+\", \"+t[4]+\", \"+t[5]+\", \"+t[6]+\", \"+t[7]+\", \"+t[8]+\", \"+t[9]+\", \"+t[10]+\", \"+t[11]+\", \"+t[12]+\", \"+t[13]+\", \"+t[14]+\", \"+t[15]+\")\"},n.frob=function(t){return Math.hypot(t[0],t[1],t[2],t[3],t[4],t[5],t[6],t[7],t[8],t[9],t[10],t[11],t[12],t[13],t[14],t[15])},n.add=function(t,a,n){return t[0]=a[0]+n[0],t[1]=a[1]+n[1],t[2]=a[2]+n[2],t[3]=a[3]+n[3],t[4]=a[4]+n[4],t[5]=a[5]+n[5],t[6]=a[6]+n[6],t[7]=a[7]+n[7],t[8]=a[8]+n[8],t[9]=a[9]+n[9],t[10]=a[10]+n[10],t[11]=a[11]+n[11],t[12]=a[12]+n[12],t[13]=a[13]+n[13],t[14]=a[14]+n[14],t[15]=a[15]+n[15],t},n.subtract=s,n.multiplyScalar=function(t,a,n){return t[0]=a[0]*n,t[1]=a[1]*n,t[2]=a[2]*n,t[3]=a[3]*n,t[4]=a[4]*n,t[5]=a[5]*n,t[6]=a[6]*n,t[7]=a[7]*n,t[8]=a[8]*n,t[9]=a[9]*n,t[10]=a[10]*n,t[11]=a[11]*n,t[12]=a[12]*n,t[13]=a[13]*n,t[14]=a[14]*n,t[15]=a[15]*n,t},n.multiplyScalarAndAdd=function(t,a,n,r){return t[0]=a[0]+n[0]*r,t[1]=a[1]+n[1]*r,t[2]=a[2]+n[2]*r,t[3]=a[3]+n[3]*r,t[4]=a[4]+n[4]*r,t[5]=a[5]+n[5]*r,t[6]=a[6]+n[6]*r,t[7]=a[7]+n[7]*r,t[8]=a[8]+n[8]*r,t[9]=a[9]+n[9]*r,t[10]=a[10]+n[10]*r,t[11]=a[11]+n[11]*r,t[12]=a[12]+n[12]*r,t[13]=a[13]+n[13]*r,t[14]=a[14]+n[14]*r,t[15]=a[15]+n[15]*r,t},n.exactEquals=function(t,a){return t[0]===a[0]&&t[1]===a[1]&&t[2]===a[2]&&t[3]===a[3]&&t[4]===a[4]&&t[5]===a[5]&&t[6]===a[6]&&t[7]===a[7]&&t[8]===a[8]&&t[9]===a[9]&&t[10]===a[10]&&t[11]===a[11]&&t[12]===a[12]&&t[13]===a[13]&&t[14]===a[14]&&t[15]===a[15]},n.equals=function(t,a){var n=t[0],r=t[1],e=t[2],u=t[3],h=t[4],i=t[5],M=t[6],s=t[7],f=t[8],c=t[9],b=t[10],l=t[11],v=t[12],m=t[13],p=t[14],y=t[15],P=a[0],S=a[1],O=a[2],E=a[3],I=a[4],L=a[5],N=a[6],R=a[7],x=a[8],d=a[9],g=a[10],A=a[11],Y=a[12],T=a[13],w=a[14],_=a[15];return Math.abs(n-P)<=o.EPSILON*Math.max(1,Math.abs(n),Math.abs(P))&&Math.abs(r-S)<=o.EPSILON*Math.max(1,Math.abs(r),Math.abs(S))&&Math.abs(e-O)<=o.EPSILON*Math.max(1,Math.abs(e),Math.abs(O))&&Math.abs(u-E)<=o.EPSILON*Math.max(1,Math.abs(u),Math.abs(E))&&Math.abs(h-I)<=o.EPSILON*Math.max(1,Math.abs(h),Math.abs(I))&&Math.abs(i-L)<=o.EPSILON*Math.max(1,Math.abs(i),Math.abs(L))&&Math.abs(M-N)<=o.EPSILON*Math.max(1,Math.abs(M),Math.abs(N))&&Math.abs(s-R)<=o.EPSILON*Math.max(1,Math.abs(s),Math.abs(R))&&Math.abs(f-x)<=o.EPSILON*Math.max(1,Math.abs(f),Math.abs(x))&&Math.abs(c-d)<=o.EPSILON*Math.max(1,Math.abs(c),Math.abs(d))&&Math.abs(b-g)<=o.EPSILON*Math.max(1,Math.abs(b),Math.abs(g))&&Math.abs(l-A)<=o.EPSILON*Math.max(1,Math.abs(l),Math.abs(A))&&Math.abs(v-Y)<=o.EPSILON*Math.max(1,Math.abs(v),Math.abs(Y))&&Math.abs(m-T)<=o.EPSILON*Math.max(1,Math.abs(m),Math.abs(T))&&Math.abs(p-w)<=o.EPSILON*Math.max(1,Math.abs(p),Math.abs(w))&&Math.abs(y-_)<=o.EPSILON*Math.max(1,Math.abs(y),Math.abs(_))},n.sub=n.mul=void 0;var o=function(t){if(t&&t.__esModule)return t;if(null===t||\"object\"!==r(t)&&\"function\"!=typeof t)return{default:t};var a=e();if(a&&a.has(t))return a.get(t);var n={},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var u in t)if(Object.prototype.hasOwnProperty.call(t,u)){var h=o?Object.getOwnPropertyDescriptor(t,u):null;h&&(h.get||h.set)?Object.defineProperty(n,u,h):n[u]=t[u]}n.default=t,a&&a.set(t,n);return n}(t(\"c6b4e451bc\"));function e(){if(\"function\"!=typeof WeakMap)return null;var t=new WeakMap;return e=function(){return t},t}function u(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}function h(t,a,n){var r=a[0],o=a[1],e=a[2],u=a[3],h=a[4],i=a[5],M=a[6],s=a[7],f=a[8],c=a[9],b=a[10],l=a[11],v=a[12],m=a[13],p=a[14],y=a[15],P=n[0],S=n[1],O=n[2],E=n[3];return t[0]=P*r+S*h+O*f+E*v,t[1]=P*o+S*i+O*c+E*m,t[2]=P*e+S*M+O*b+E*p,t[3]=P*u+S*s+O*l+E*y,P=n[4],S=n[5],O=n[6],E=n[7],t[4]=P*r+S*h+O*f+E*v,t[5]=P*o+S*i+O*c+E*m,t[6]=P*e+S*M+O*b+E*p,t[7]=P*u+S*s+O*l+E*y,P=n[8],S=n[9],O=n[10],E=n[11],t[8]=P*r+S*h+O*f+E*v,t[9]=P*o+S*i+O*c+E*m,t[10]=P*e+S*M+O*b+E*p,t[11]=P*u+S*s+O*l+E*y,P=n[12],S=n[13],O=n[14],E=n[15],t[12]=P*r+S*h+O*f+E*v,t[13]=P*o+S*i+O*c+E*m,t[14]=P*e+S*M+O*b+E*p,t[15]=P*u+S*s+O*l+E*y,t}function i(t,a,n){var r=a[0],o=a[1],e=a[2],u=a[3],h=r+r,i=o+o,M=e+e,s=r*h,f=r*i,c=r*M,b=o*i,l=o*M,v=e*M,m=u*h,p=u*i,y=u*M;return t[0]=1-(b+v),t[1]=f+y,t[2]=c-p,t[3]=0,t[4]=f-y,t[5]=1-(s+v),t[6]=l+m,t[7]=0,t[8]=c+p,t[9]=l-m,t[10]=1-(s+b),t[11]=0,t[12]=n[0],t[13]=n[1],t[14]=n[2],t[15]=1,t}function M(t,a){var n=a[0],r=a[1],o=a[2],e=a[4],u=a[5],h=a[6],i=a[8],M=a[9],s=a[10];return t[0]=Math.hypot(n,r,o),t[1]=Math.hypot(e,u,h),t[2]=Math.hypot(i,M,s),t}function s(t,a,n){return t[0]=a[0]-n[0],t[1]=a[1]-n[1],t[2]=a[2]-n[2],t[3]=a[3]-n[3],t[4]=a[4]-n[4],t[5]=a[5]-n[5],t[6]=a[6]-n[6],t[7]=a[7]-n[7],t[8]=a[8]-n[8],t[9]=a[9]-n[9],t[10]=a[10]-n[10],t[11]=a[11]-n[11],t[12]=a[12]-n[12],t[13]=a[13]-n[13],t[14]=a[14]-n[14],t[15]=a[15]-n[15],t}var f=h;n.mul=f;var c=s;n.sub=c},\n", - " \"8b81ae2f8b\": function _(t,r,n){function e(t){return(e=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t})(t)}n.create=l,n.identity=function(t){return t[0]=0,t[1]=0,t[2]=0,t[3]=1,t},n.setAxisAngle=f,n.getAxisAngle=function(t,r){var n=2*Math.acos(r[3]),e=Math.sin(n/2);e>a.EPSILON?(t[0]=r[0]/e,t[1]=r[1]/e,t[2]=r[2]/e):(t[0]=1,t[1]=0,t[2]=0);return n},n.getAngle=function(t,r){var n=O(t,r);return Math.acos(2*n*n-1)},n.multiply=h,n.rotateX=function(t,r,n){n*=.5;var e=r[0],a=r[1],o=r[2],u=r[3],s=Math.sin(n),c=Math.cos(n);return t[0]=e*c+u*s,t[1]=a*c+o*s,t[2]=o*c-a*s,t[3]=u*c-e*s,t},n.rotateY=function(t,r,n){n*=.5;var e=r[0],a=r[1],o=r[2],u=r[3],s=Math.sin(n),c=Math.cos(n);return t[0]=e*c-o*s,t[1]=a*c+u*s,t[2]=o*c+e*s,t[3]=u*c-a*s,t},n.rotateZ=function(t,r,n){n*=.5;var e=r[0],a=r[1],o=r[2],u=r[3],s=Math.sin(n),c=Math.cos(n);return t[0]=e*c+a*s,t[1]=a*c-e*s,t[2]=o*c+u*s,t[3]=u*c-o*s,t},n.calculateW=function(t,r){var n=r[0],e=r[1],a=r[2];return t[0]=n,t[1]=e,t[2]=a,t[3]=Math.sqrt(Math.abs(1-n*n-e*e-a*a)),t},n.exp=M,n.ln=v,n.pow=function(t,r,n){return v(t,r),P(t,t,n),M(t,t),t},n.slerp=p,n.random=function(t){var r=a.RANDOM(),n=a.RANDOM(),e=a.RANDOM(),o=Math.sqrt(1-r),u=Math.sqrt(r);return t[0]=o*Math.sin(2*Math.PI*n),t[1]=o*Math.cos(2*Math.PI*n),t[2]=u*Math.sin(2*Math.PI*e),t[3]=u*Math.cos(2*Math.PI*e),t},n.invert=function(t,r){var n=r[0],e=r[1],a=r[2],o=r[3],u=n*n+e*e+a*a+o*o,s=u?1/u:0;return t[0]=-n*s,t[1]=-e*s,t[2]=-a*s,t[3]=o*s,t},n.conjugate=function(t,r){return t[0]=-r[0],t[1]=-r[1],t[2]=-r[2],t[3]=r[3],t},n.fromMat3=y,n.fromEuler=function(t,r,n,e){var a=.5*Math.PI/180;r*=a,n*=a,e*=a;var o=Math.sin(r),u=Math.cos(r),s=Math.sin(n),c=Math.cos(n),i=Math.sin(e),l=Math.cos(e);return t[0]=o*c*l-u*s*i,t[1]=u*s*l+o*c*i,t[2]=u*c*i-o*s*l,t[3]=u*c*l+o*s*i,t},n.str=function(t){return\"quat(\"+t[0]+\", \"+t[1]+\", \"+t[2]+\", \"+t[3]+\")\"},n.setAxes=n.sqlerp=n.rotationTo=n.equals=n.exactEquals=n.normalize=n.sqrLen=n.squaredLength=n.len=n.length=n.lerp=n.dot=n.scale=n.mul=n.add=n.set=n.copy=n.fromValues=n.clone=void 0;var a=i(t(\"c6b4e451bc\")),o=i(t(\"4dc492e8e1\")),u=i(t(\"2e13827733\")),s=i(t(\"03254e8a21\"));function c(){if(\"function\"!=typeof WeakMap)return null;var t=new WeakMap;return c=function(){return t},t}function i(t){if(t&&t.__esModule)return t;if(null===t||\"object\"!==e(t)&&\"function\"!=typeof t)return{default:t};var r=c();if(r&&r.has(t))return r.get(t);var n={},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in t)if(Object.prototype.hasOwnProperty.call(t,o)){var u=a?Object.getOwnPropertyDescriptor(t,o):null;u&&(u.get||u.set)?Object.defineProperty(n,o,u):n[o]=t[o]}return n.default=t,r&&r.set(t,n),n}function l(){var t=new a.ARRAY_TYPE(4);return a.ARRAY_TYPE!=Float32Array&&(t[0]=0,t[1]=0,t[2]=0),t[3]=1,t}function f(t,r,n){n*=.5;var e=Math.sin(n);return t[0]=e*r[0],t[1]=e*r[1],t[2]=e*r[2],t[3]=Math.cos(n),t}function h(t,r,n){var e=r[0],a=r[1],o=r[2],u=r[3],s=n[0],c=n[1],i=n[2],l=n[3];return t[0]=e*l+u*s+a*i-o*c,t[1]=a*l+u*c+o*s-e*i,t[2]=o*l+u*i+e*c-a*s,t[3]=u*l-e*s-a*c-o*i,t}function M(t,r){var n=r[0],e=r[1],a=r[2],o=r[3],u=Math.sqrt(n*n+e*e+a*a),s=Math.exp(o),c=u>0?s*Math.sin(u)/u:0;return t[0]=n*c,t[1]=e*c,t[2]=a*c,t[3]=s*Math.cos(u),t}function v(t,r){var n=r[0],e=r[1],a=r[2],o=r[3],u=Math.sqrt(n*n+e*e+a*a),s=u>0?Math.atan2(u,o)/u:0;return t[0]=n*s,t[1]=e*s,t[2]=a*s,t[3]=.5*Math.log(n*n+e*e+a*a+o*o),t}function p(t,r,n,e){var o,u,s,c,i,l=r[0],f=r[1],h=r[2],M=r[3],v=n[0],p=n[1],y=n[2],d=n[3];return(u=l*v+f*p+h*y+M*d)<0&&(u=-u,v=-v,p=-p,y=-y,d=-d),1-u>a.EPSILON?(o=Math.acos(u),s=Math.sin(o),c=Math.sin((1-e)*o)/s,i=Math.sin(e*o)/s):(c=1-e,i=e),t[0]=c*l+i*v,t[1]=c*f+i*p,t[2]=c*h+i*y,t[3]=c*M+i*d,t}function y(t,r){var n,e=r[0]+r[4]+r[8];if(e>0)n=Math.sqrt(e+1),t[3]=.5*n,n=.5/n,t[0]=(r[5]-r[7])*n,t[1]=(r[6]-r[2])*n,t[2]=(r[1]-r[3])*n;else{var a=0;r[4]>r[0]&&(a=1),r[8]>r[3*a+a]&&(a=2);var o=(a+1)%3,u=(a+2)%3;n=Math.sqrt(r[3*a+a]-r[3*o+o]-r[3*u+u]+1),t[a]=.5*n,n=.5/n,t[3]=(r[3*o+u]-r[3*u+o])*n,t[o]=(r[3*o+a]+r[3*a+o])*n,t[u]=(r[3*u+a]+r[3*a+u])*n}return t}var d=s.clone;n.clone=d;var m=s.fromValues;n.fromValues=m;var q=s.copy;n.copy=q;var g=s.set;n.set=g;var b=s.add;n.add=b;var A=h;n.mul=A;var P=s.scale;n.scale=P;var O=s.dot;n.dot=O;var x=s.lerp;n.lerp=x;var E=s.length;n.length=E;var I=E;n.len=I;var j=s.squaredLength;n.squaredLength=j;var L=j;n.sqrLen=L;var R=s.normalize;n.normalize=R;var S=s.exactEquals;n.exactEquals=S;var w=s.equals;n.equals=w;var D,N,V,Y=(D=u.create(),N=u.fromValues(1,0,0),V=u.fromValues(0,1,0),function(t,r,n){var e=u.dot(r,n);return e<-.999999?(u.cross(D,N,r),u.len(D)<1e-6&&u.cross(D,V,r),u.normalize(D,D),f(t,D,Math.PI),t):e>.999999?(t[0]=0,t[1]=0,t[2]=0,t[3]=1,t):(u.cross(D,r,n),t[0]=D[0],t[1]=D[1],t[2]=D[2],t[3]=1+e,R(t,t))});n.rotationTo=Y;var _,z,T=(_=l(),z=l(),function(t,r,n,e,a,o){return p(_,r,a,o),p(z,n,e,o),p(t,_,z,2*o*(1-o)),t});n.sqlerp=T;var W,k=(W=o.create(),function(t,r,n,e){return W[0]=n[0],W[3]=n[1],W[6]=n[2],W[1]=e[0],W[4]=e[1],W[7]=e[2],W[2]=-r[0],W[5]=-r[1],W[8]=-r[2],R(t,y(t,W))});n.setAxes=k},\n", - " \"2e13827733\": function _(t,n,r){function a(t){return(a=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t})(t)}r.create=o,r.clone=function(t){var n=new e.ARRAY_TYPE(3);return n[0]=t[0],n[1]=t[1],n[2]=t[2],n},r.length=i,r.fromValues=function(t,n,r){var a=new e.ARRAY_TYPE(3);return a[0]=t,a[1]=n,a[2]=r,a},r.copy=function(t,n){return t[0]=n[0],t[1]=n[1],t[2]=n[2],t},r.set=function(t,n,r,a){return t[0]=n,t[1]=r,t[2]=a,t},r.add=function(t,n,r){return t[0]=n[0]+r[0],t[1]=n[1]+r[1],t[2]=n[2]+r[2],t},r.subtract=c,r.multiply=f,r.divide=s,r.ceil=function(t,n){return t[0]=Math.ceil(n[0]),t[1]=Math.ceil(n[1]),t[2]=Math.ceil(n[2]),t},r.floor=function(t,n){return t[0]=Math.floor(n[0]),t[1]=Math.floor(n[1]),t[2]=Math.floor(n[2]),t},r.min=function(t,n,r){return t[0]=Math.min(n[0],r[0]),t[1]=Math.min(n[1],r[1]),t[2]=Math.min(n[2],r[2]),t},r.max=function(t,n,r){return t[0]=Math.max(n[0],r[0]),t[1]=Math.max(n[1],r[1]),t[2]=Math.max(n[2],r[2]),t},r.round=function(t,n){return t[0]=Math.round(n[0]),t[1]=Math.round(n[1]),t[2]=Math.round(n[2]),t},r.scale=function(t,n,r){return t[0]=n[0]*r,t[1]=n[1]*r,t[2]=n[2]*r,t},r.scaleAndAdd=function(t,n,r,a){return t[0]=n[0]+r[0]*a,t[1]=n[1]+r[1]*a,t[2]=n[2]+r[2]*a,t},r.distance=h,r.squaredDistance=M,r.squaredLength=l,r.negate=function(t,n){return t[0]=-n[0],t[1]=-n[1],t[2]=-n[2],t},r.inverse=function(t,n){return t[0]=1/n[0],t[1]=1/n[1],t[2]=1/n[2],t},r.normalize=function(t,n){var r=n[0],a=n[1],e=n[2],u=r*r+a*a+e*e;u>0&&(u=1/Math.sqrt(u));return t[0]=n[0]*u,t[1]=n[1]*u,t[2]=n[2]*u,t},r.dot=v,r.cross=function(t,n,r){var a=n[0],e=n[1],u=n[2],o=r[0],i=r[1],c=r[2];return t[0]=e*c-u*i,t[1]=u*o-a*c,t[2]=a*i-e*o,t},r.lerp=function(t,n,r,a){var e=n[0],u=n[1],o=n[2];return t[0]=e+a*(r[0]-e),t[1]=u+a*(r[1]-u),t[2]=o+a*(r[2]-o),t},r.hermite=function(t,n,r,a,e,u){var o=u*u,i=o*(2*u-3)+1,c=o*(u-2)+u,f=o*(u-1),s=o*(3-2*u);return t[0]=n[0]*i+r[0]*c+a[0]*f+e[0]*s,t[1]=n[1]*i+r[1]*c+a[1]*f+e[1]*s,t[2]=n[2]*i+r[2]*c+a[2]*f+e[2]*s,t},r.bezier=function(t,n,r,a,e,u){var o=1-u,i=o*o,c=u*u,f=i*o,s=3*u*i,h=3*c*o,M=c*u;return t[0]=n[0]*f+r[0]*s+a[0]*h+e[0]*M,t[1]=n[1]*f+r[1]*s+a[1]*h+e[1]*M,t[2]=n[2]*f+r[2]*s+a[2]*h+e[2]*M,t},r.random=function(t,n){n=n||1;var r=2*e.RANDOM()*Math.PI,a=2*e.RANDOM()-1,u=Math.sqrt(1-a*a)*n;return t[0]=Math.cos(r)*u,t[1]=Math.sin(r)*u,t[2]=a*n,t},r.transformMat4=function(t,n,r){var a=n[0],e=n[1],u=n[2],o=r[3]*a+r[7]*e+r[11]*u+r[15];return o=o||1,t[0]=(r[0]*a+r[4]*e+r[8]*u+r[12])/o,t[1]=(r[1]*a+r[5]*e+r[9]*u+r[13])/o,t[2]=(r[2]*a+r[6]*e+r[10]*u+r[14])/o,t},r.transformMat3=function(t,n,r){var a=n[0],e=n[1],u=n[2];return t[0]=a*r[0]+e*r[3]+u*r[6],t[1]=a*r[1]+e*r[4]+u*r[7],t[2]=a*r[2]+e*r[5]+u*r[8],t},r.transformQuat=function(t,n,r){var a=r[0],e=r[1],u=r[2],o=r[3],i=n[0],c=n[1],f=n[2],s=e*f-u*c,h=u*i-a*f,M=a*c-e*i,l=e*M-u*h,v=u*s-a*M,m=a*h-e*s,b=2*o;return s*=b,h*=b,M*=b,l*=2,v*=2,m*=2,t[0]=i+s+l,t[1]=c+h+v,t[2]=f+M+m,t},r.rotateX=function(t,n,r,a){var e=[],u=[];return e[0]=n[0]-r[0],e[1]=n[1]-r[1],e[2]=n[2]-r[2],u[0]=e[0],u[1]=e[1]*Math.cos(a)-e[2]*Math.sin(a),u[2]=e[1]*Math.sin(a)+e[2]*Math.cos(a),t[0]=u[0]+r[0],t[1]=u[1]+r[1],t[2]=u[2]+r[2],t},r.rotateY=function(t,n,r,a){var e=[],u=[];return e[0]=n[0]-r[0],e[1]=n[1]-r[1],e[2]=n[2]-r[2],u[0]=e[2]*Math.sin(a)+e[0]*Math.cos(a),u[1]=e[1],u[2]=e[2]*Math.cos(a)-e[0]*Math.sin(a),t[0]=u[0]+r[0],t[1]=u[1]+r[1],t[2]=u[2]+r[2],t},r.rotateZ=function(t,n,r,a){var e=[],u=[];return e[0]=n[0]-r[0],e[1]=n[1]-r[1],e[2]=n[2]-r[2],u[0]=e[0]*Math.cos(a)-e[1]*Math.sin(a),u[1]=e[0]*Math.sin(a)+e[1]*Math.cos(a),u[2]=e[2],t[0]=u[0]+r[0],t[1]=u[1]+r[1],t[2]=u[2]+r[2],t},r.angle=function(t,n){var r=t[0],a=t[1],e=t[2],u=n[0],o=n[1],i=n[2],c=Math.sqrt(r*r+a*a+e*e),f=Math.sqrt(u*u+o*o+i*i),s=c*f,h=s&&v(t,n)/s;return Math.acos(Math.min(Math.max(h,-1),1))},r.zero=function(t){return t[0]=0,t[1]=0,t[2]=0,t},r.str=function(t){return\"vec3(\"+t[0]+\", \"+t[1]+\", \"+t[2]+\")\"},r.exactEquals=function(t,n){return t[0]===n[0]&&t[1]===n[1]&&t[2]===n[2]},r.equals=function(t,n){var r=t[0],a=t[1],u=t[2],o=n[0],i=n[1],c=n[2];return Math.abs(r-o)<=e.EPSILON*Math.max(1,Math.abs(r),Math.abs(o))&&Math.abs(a-i)<=e.EPSILON*Math.max(1,Math.abs(a),Math.abs(i))&&Math.abs(u-c)<=e.EPSILON*Math.max(1,Math.abs(u),Math.abs(c))},r.forEach=r.sqrLen=r.len=r.sqrDist=r.dist=r.div=r.mul=r.sub=void 0;var e=function(t){if(t&&t.__esModule)return t;if(null===t||\"object\"!==a(t)&&\"function\"!=typeof t)return{default:t};var n=u();if(n&&n.has(t))return n.get(t);var r={},e=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in t)if(Object.prototype.hasOwnProperty.call(t,o)){var i=e?Object.getOwnPropertyDescriptor(t,o):null;i&&(i.get||i.set)?Object.defineProperty(r,o,i):r[o]=t[o]}r.default=t,n&&n.set(t,r);return r}(t(\"c6b4e451bc\"));function u(){if(\"function\"!=typeof WeakMap)return null;var t=new WeakMap;return u=function(){return t},t}function o(){var t=new e.ARRAY_TYPE(3);return e.ARRAY_TYPE!=Float32Array&&(t[0]=0,t[1]=0,t[2]=0),t}function i(t){var n=t[0],r=t[1],a=t[2];return Math.hypot(n,r,a)}function c(t,n,r){return t[0]=n[0]-r[0],t[1]=n[1]-r[1],t[2]=n[2]-r[2],t}function f(t,n,r){return t[0]=n[0]*r[0],t[1]=n[1]*r[1],t[2]=n[2]*r[2],t}function s(t,n,r){return t[0]=n[0]/r[0],t[1]=n[1]/r[1],t[2]=n[2]/r[2],t}function h(t,n){var r=n[0]-t[0],a=n[1]-t[1],e=n[2]-t[2];return Math.hypot(r,a,e)}function M(t,n){var r=n[0]-t[0],a=n[1]-t[1],e=n[2]-t[2];return r*r+a*a+e*e}function l(t){var n=t[0],r=t[1],a=t[2];return n*n+r*r+a*a}function v(t,n){return t[0]*n[0]+t[1]*n[1]+t[2]*n[2]}var m=c;r.sub=m;var b=f;r.mul=b;var d=s;r.div=d;var y=h;r.dist=y;var p=M;r.sqrDist=p;var A=i;r.len=A;var O=l;r.sqrLen=O;var P,q=(P=o(),function(t,n,r,a,e,u){var o,i;for(n||(n=3),r||(r=0),i=a?Math.min(a*n+r,t.length):t.length,o=r;o0&&(o=1/Math.sqrt(o));return t[0]=r*o,t[1]=a*o,t[2]=e*o,t[3]=u*o,t},r.dot=function(t,n){return t[0]*n[0]+t[1]*n[1]+t[2]*n[2]+t[3]*n[3]},r.cross=function(t,n,r,a){var e=r[0]*a[1]-r[1]*a[0],u=r[0]*a[2]-r[2]*a[0],o=r[0]*a[3]-r[3]*a[0],i=r[1]*a[2]-r[2]*a[1],c=r[1]*a[3]-r[3]*a[1],f=r[2]*a[3]-r[3]*a[2],h=n[0],s=n[1],M=n[2],l=n[3];return t[0]=s*f-M*c+l*i,t[1]=-h*f+M*o-l*u,t[2]=h*c-s*o+l*e,t[3]=-h*i+s*u-M*e,t},r.lerp=function(t,n,r,a){var e=n[0],u=n[1],o=n[2],i=n[3];return t[0]=e+a*(r[0]-e),t[1]=u+a*(r[1]-u),t[2]=o+a*(r[2]-o),t[3]=i+a*(r[3]-i),t},r.random=function(t,n){var r,a,u,o,i,c;n=n||1;do{r=2*e.RANDOM()-1,a=2*e.RANDOM()-1,i=r*r+a*a}while(i>=1);do{u=2*e.RANDOM()-1,o=2*e.RANDOM()-1,c=u*u+o*o}while(c>=1);var f=Math.sqrt((1-i)/c);return t[0]=n*r,t[1]=n*a,t[2]=n*u*f,t[3]=n*o*f,t},r.transformMat4=function(t,n,r){var a=n[0],e=n[1],u=n[2],o=n[3];return t[0]=r[0]*a+r[4]*e+r[8]*u+r[12]*o,t[1]=r[1]*a+r[5]*e+r[9]*u+r[13]*o,t[2]=r[2]*a+r[6]*e+r[10]*u+r[14]*o,t[3]=r[3]*a+r[7]*e+r[11]*u+r[15]*o,t},r.transformQuat=function(t,n,r){var a=n[0],e=n[1],u=n[2],o=r[0],i=r[1],c=r[2],f=r[3],h=f*a+i*u-c*e,s=f*e+c*a-o*u,M=f*u+o*e-i*a,l=-o*a-i*e-c*u;return t[0]=h*f+l*-o+s*-c-M*-i,t[1]=s*f+l*-i+M*-o-h*-c,t[2]=M*f+l*-c+h*-i-s*-o,t[3]=n[3],t},r.zero=function(t){return t[0]=0,t[1]=0,t[2]=0,t[3]=0,t},r.str=function(t){return\"vec4(\"+t[0]+\", \"+t[1]+\", \"+t[2]+\", \"+t[3]+\")\"},r.exactEquals=function(t,n){return t[0]===n[0]&&t[1]===n[1]&&t[2]===n[2]&&t[3]===n[3]},r.equals=function(t,n){var r=t[0],a=t[1],u=t[2],o=t[3],i=n[0],c=n[1],f=n[2],h=n[3];return Math.abs(r-i)<=e.EPSILON*Math.max(1,Math.abs(r),Math.abs(i))&&Math.abs(a-c)<=e.EPSILON*Math.max(1,Math.abs(a),Math.abs(c))&&Math.abs(u-f)<=e.EPSILON*Math.max(1,Math.abs(u),Math.abs(f))&&Math.abs(o-h)<=e.EPSILON*Math.max(1,Math.abs(o),Math.abs(h))},r.forEach=r.sqrLen=r.len=r.sqrDist=r.dist=r.div=r.mul=r.sub=void 0;var e=function(t){if(t&&t.__esModule)return t;if(null===t||\"object\"!==a(t)&&\"function\"!=typeof t)return{default:t};var n=u();if(n&&n.has(t))return n.get(t);var r={},e=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in t)if(Object.prototype.hasOwnProperty.call(t,o)){var i=e?Object.getOwnPropertyDescriptor(t,o):null;i&&(i.get||i.set)?Object.defineProperty(r,o,i):r[o]=t[o]}r.default=t,n&&n.set(t,r);return r}(t(\"c6b4e451bc\"));function u(){if(\"function\"!=typeof WeakMap)return null;var t=new WeakMap;return u=function(){return t},t}function o(){var t=new e.ARRAY_TYPE(4);return e.ARRAY_TYPE!=Float32Array&&(t[0]=0,t[1]=0,t[2]=0,t[3]=0),t}function i(t,n,r){return t[0]=n[0]-r[0],t[1]=n[1]-r[1],t[2]=n[2]-r[2],t[3]=n[3]-r[3],t}function c(t,n,r){return t[0]=n[0]*r[0],t[1]=n[1]*r[1],t[2]=n[2]*r[2],t[3]=n[3]*r[3],t}function f(t,n,r){return t[0]=n[0]/r[0],t[1]=n[1]/r[1],t[2]=n[2]/r[2],t[3]=n[3]/r[3],t}function h(t,n){var r=n[0]-t[0],a=n[1]-t[1],e=n[2]-t[2],u=n[3]-t[3];return Math.hypot(r,a,e,u)}function s(t,n){var r=n[0]-t[0],a=n[1]-t[1],e=n[2]-t[2],u=n[3]-t[3];return r*r+a*a+e*e+u*u}function M(t){var n=t[0],r=t[1],a=t[2],e=t[3];return Math.hypot(n,r,a,e)}function l(t){var n=t[0],r=t[1],a=t[2],e=t[3];return n*n+r*r+a*a+e*e}var v=i;r.sub=v;var b=c;r.mul=b;var m=f;r.div=m;var d=h;r.dist=d;var y=s;r.sqrDist=y;var p=M;r.len=p;var O=l;r.sqrLen=O;var A,P=(A=o(),function(t,n,r,a,e,u){var o,i;for(n||(n=4),r||(r=0),i=a?Math.min(a*n+r,t.length):t.length,o=r;o0){n=Math.sqrt(n);var a=r[0]/n,e=r[1]/n,o=r[2]/n,u=r[3]/n,i=r[4],f=r[5],c=r[6],s=r[7],l=a*i+e*f+o*c+u*s;t[0]=a,t[1]=e,t[2]=o,t[3]=u,t[4]=(i-a*l)/n,t[5]=(f-e*l)/n,t[6]=(c-o*l)/n,t[7]=(s-u*l)/n}return t},n.str=function(t){return\"quat2(\"+t[0]+\", \"+t[1]+\", \"+t[2]+\", \"+t[3]+\", \"+t[4]+\", \"+t[5]+\", \"+t[6]+\", \"+t[7]+\")\"},n.exactEquals=function(t,r){return t[0]===r[0]&&t[1]===r[1]&&t[2]===r[2]&&t[3]===r[3]&&t[4]===r[4]&&t[5]===r[5]&&t[6]===r[6]&&t[7]===r[7]},n.equals=function(t,r){var n=t[0],a=t[1],o=t[2],u=t[3],i=t[4],f=t[5],c=t[6],s=t[7],l=r[0],h=r[1],b=r[2],M=r[3],v=r[4],y=r[5],p=r[6],m=r[7];return Math.abs(n-l)<=e.EPSILON*Math.max(1,Math.abs(n),Math.abs(l))&&Math.abs(a-h)<=e.EPSILON*Math.max(1,Math.abs(a),Math.abs(h))&&Math.abs(o-b)<=e.EPSILON*Math.max(1,Math.abs(o),Math.abs(b))&&Math.abs(u-M)<=e.EPSILON*Math.max(1,Math.abs(u),Math.abs(M))&&Math.abs(i-v)<=e.EPSILON*Math.max(1,Math.abs(i),Math.abs(v))&&Math.abs(f-y)<=e.EPSILON*Math.max(1,Math.abs(f),Math.abs(y))&&Math.abs(c-p)<=e.EPSILON*Math.max(1,Math.abs(c),Math.abs(p))&&Math.abs(s-m)<=e.EPSILON*Math.max(1,Math.abs(s),Math.abs(m))},n.sqrLen=n.squaredLength=n.len=n.length=n.dot=n.mul=n.setReal=n.getReal=void 0;var e=f(t(\"c6b4e451bc\")),o=f(t(\"8b81ae2f8b\")),u=f(t(\"948401a902\"));function i(){if(\"function\"!=typeof WeakMap)return null;var t=new WeakMap;return i=function(){return t},t}function f(t){if(t&&t.__esModule)return t;if(null===t||\"object\"!==a(t)&&\"function\"!=typeof t)return{default:t};var r=i();if(r&&r.has(t))return r.get(t);var n={},e=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in t)if(Object.prototype.hasOwnProperty.call(t,o)){var u=e?Object.getOwnPropertyDescriptor(t,o):null;u&&(u.get||u.set)?Object.defineProperty(n,o,u):n[o]=t[o]}return n.default=t,r&&r.set(t,n),n}function c(t,r,n){var a=.5*n[0],e=.5*n[1],o=.5*n[2],u=r[0],i=r[1],f=r[2],c=r[3];return t[0]=u,t[1]=i,t[2]=f,t[3]=c,t[4]=a*c+e*f-o*i,t[5]=e*c+o*u-a*f,t[6]=o*c+a*i-e*u,t[7]=-a*u-e*i-o*f,t}function s(t,r){return t[0]=r[0],t[1]=r[1],t[2]=r[2],t[3]=r[3],t[4]=r[4],t[5]=r[5],t[6]=r[6],t[7]=r[7],t}var l=o.copy;n.getReal=l;var h=o.copy;function b(t,r,n){var a=r[0],e=r[1],o=r[2],u=r[3],i=n[4],f=n[5],c=n[6],s=n[7],l=r[4],h=r[5],b=r[6],M=r[7],v=n[0],y=n[1],p=n[2],m=n[3];return t[0]=a*m+u*v+e*p-o*y,t[1]=e*m+u*y+o*v-a*p,t[2]=o*m+u*p+a*y-e*v,t[3]=u*m-a*v-e*y-o*p,t[4]=a*s+u*i+e*c-o*f+l*m+M*v+h*p-b*y,t[5]=e*s+u*f+o*i-a*c+h*m+M*y+b*v-l*p,t[6]=o*s+u*c+a*f-e*i+b*m+M*p+l*y-h*v,t[7]=u*s-a*i-e*f-o*c+M*m-l*v-h*y-b*p,t}n.setReal=h;var M=b;n.mul=M;var v=o.dot;n.dot=v;var y=o.length;n.length=y;var p=y;n.len=p;var m=o.squaredLength;n.squaredLength=m;var P=m;n.sqrLen=P},\n", - " \"62ac52b540\": function _(t,n,r){function e(t){return(e=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t})(t)}r.create=o,r.clone=function(t){var n=new a.ARRAY_TYPE(2);return n[0]=t[0],n[1]=t[1],n},r.fromValues=function(t,n){var r=new a.ARRAY_TYPE(2);return r[0]=t,r[1]=n,r},r.copy=function(t,n){return t[0]=n[0],t[1]=n[1],t},r.set=function(t,n,r){return t[0]=n,t[1]=r,t},r.add=function(t,n,r){return t[0]=n[0]+r[0],t[1]=n[1]+r[1],t},r.subtract=i,r.multiply=c,r.divide=f,r.ceil=function(t,n){return t[0]=Math.ceil(n[0]),t[1]=Math.ceil(n[1]),t},r.floor=function(t,n){return t[0]=Math.floor(n[0]),t[1]=Math.floor(n[1]),t},r.min=function(t,n,r){return t[0]=Math.min(n[0],r[0]),t[1]=Math.min(n[1],r[1]),t},r.max=function(t,n,r){return t[0]=Math.max(n[0],r[0]),t[1]=Math.max(n[1],r[1]),t},r.round=function(t,n){return t[0]=Math.round(n[0]),t[1]=Math.round(n[1]),t},r.scale=function(t,n,r){return t[0]=n[0]*r,t[1]=n[1]*r,t},r.scaleAndAdd=function(t,n,r,e){return t[0]=n[0]+r[0]*e,t[1]=n[1]+r[1]*e,t},r.distance=s,r.squaredDistance=l,r.length=h,r.squaredLength=M,r.negate=function(t,n){return t[0]=-n[0],t[1]=-n[1],t},r.inverse=function(t,n){return t[0]=1/n[0],t[1]=1/n[1],t},r.normalize=function(t,n){var r=n[0],e=n[1],a=r*r+e*e;a>0&&(a=1/Math.sqrt(a));return t[0]=n[0]*a,t[1]=n[1]*a,t},r.dot=function(t,n){return t[0]*n[0]+t[1]*n[1]},r.cross=function(t,n,r){var e=n[0]*r[1]-n[1]*r[0];return t[0]=t[1]=0,t[2]=e,t},r.lerp=function(t,n,r,e){var a=n[0],u=n[1];return t[0]=a+e*(r[0]-a),t[1]=u+e*(r[1]-u),t},r.random=function(t,n){n=n||1;var r=2*a.RANDOM()*Math.PI;return t[0]=Math.cos(r)*n,t[1]=Math.sin(r)*n,t},r.transformMat2=function(t,n,r){var e=n[0],a=n[1];return t[0]=r[0]*e+r[2]*a,t[1]=r[1]*e+r[3]*a,t},r.transformMat2d=function(t,n,r){var e=n[0],a=n[1];return t[0]=r[0]*e+r[2]*a+r[4],t[1]=r[1]*e+r[3]*a+r[5],t},r.transformMat3=function(t,n,r){var e=n[0],a=n[1];return t[0]=r[0]*e+r[3]*a+r[6],t[1]=r[1]*e+r[4]*a+r[7],t},r.transformMat4=function(t,n,r){var e=n[0],a=n[1];return t[0]=r[0]*e+r[4]*a+r[12],t[1]=r[1]*e+r[5]*a+r[13],t},r.rotate=function(t,n,r,e){var a=n[0]-r[0],u=n[1]-r[1],o=Math.sin(e),i=Math.cos(e);return t[0]=a*i-u*o+r[0],t[1]=a*o+u*i+r[1],t},r.angle=function(t,n){var r=t[0],e=t[1],a=n[0],u=n[1],o=Math.sqrt(r*r+e*e)*Math.sqrt(a*a+u*u),i=o&&(r*a+e*u)/o;return Math.acos(Math.min(Math.max(i,-1),1))},r.zero=function(t){return t[0]=0,t[1]=0,t},r.str=function(t){return\"vec2(\"+t[0]+\", \"+t[1]+\")\"},r.exactEquals=function(t,n){return t[0]===n[0]&&t[1]===n[1]},r.equals=function(t,n){var r=t[0],e=t[1],u=n[0],o=n[1];return Math.abs(r-u)<=a.EPSILON*Math.max(1,Math.abs(r),Math.abs(u))&&Math.abs(e-o)<=a.EPSILON*Math.max(1,Math.abs(e),Math.abs(o))},r.forEach=r.sqrLen=r.sqrDist=r.dist=r.div=r.mul=r.sub=r.len=void 0;var a=function(t){if(t&&t.__esModule)return t;if(null===t||\"object\"!==e(t)&&\"function\"!=typeof t)return{default:t};var n=u();if(n&&n.has(t))return n.get(t);var r={},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in t)if(Object.prototype.hasOwnProperty.call(t,o)){var i=a?Object.getOwnPropertyDescriptor(t,o):null;i&&(i.get||i.set)?Object.defineProperty(r,o,i):r[o]=t[o]}r.default=t,n&&n.set(t,r);return r}(t(\"c6b4e451bc\"));function u(){if(\"function\"!=typeof WeakMap)return null;var t=new WeakMap;return u=function(){return t},t}function o(){var t=new a.ARRAY_TYPE(2);return a.ARRAY_TYPE!=Float32Array&&(t[0]=0,t[1]=0),t}function i(t,n,r){return t[0]=n[0]-r[0],t[1]=n[1]-r[1],t}function c(t,n,r){return t[0]=n[0]*r[0],t[1]=n[1]*r[1],t}function f(t,n,r){return t[0]=n[0]/r[0],t[1]=n[1]/r[1],t}function s(t,n){var r=n[0]-t[0],e=n[1]-t[1];return Math.hypot(r,e)}function l(t,n){var r=n[0]-t[0],e=n[1]-t[1];return r*r+e*e}function h(t){var n=t[0],r=t[1];return Math.hypot(n,r)}function M(t){var n=t[0],r=t[1];return n*n+r*r}var v=h;r.len=v;var m=i;r.sub=m;var d=c;r.mul=d;var y=f;r.div=y;var p=s;r.dist=p;var b=l;r.sqrDist=b;var A=M;r.sqrLen=A;var P,q=(P=o(),function(t,n,r,e,a,u){var o,i;for(n||(n=2),r||(r=0),i=e?Math.min(e*n+r,t.length):t.length,o=r;o\\n\"+\n \"

\\n\"+\n \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n \"

\\n\"+\n \"
    \\n\"+\n \"
  • re-rerun `output_notebook()` to attempt to load from CDN again, or
  • \\n\"+\n \"
  • use INLINE resources instead, as so:
  • \\n\"+\n \"
\\n\"+\n \"\\n\"+\n \"from bokeh.resources import INLINE\\n\"+\n \"output_notebook(resources=INLINE)\\n\"+\n \"\\n\"+\n \"\"}};\n\n function display_loaded() {\n var el = document.getElementById(\"1001\");\n if (el != null) {\n el.textContent = \"BokehJS is loading...\";\n }\n if (root.Bokeh !== undefined) {\n if (el != null) {\n el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(display_loaded, 100)\n }\n }\n\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls == null || js_urls.length === 0) {\n run_callbacks();\n return null;\n }\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n root._bokeh_is_loading = css_urls.length + js_urls.length;\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n\n function on_error() {\n console.error(\"failed to load \" + url);\n }\n\n for (var i = 0; i < css_urls.length; i++) {\n var url = css_urls[i];\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error;\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n }\n\n for (var i = 0; i < js_urls.length; i++) {\n var url = js_urls[i];\n var element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error;\n element.async = false;\n element.src = url;\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n };var element = document.getElementById(\"1001\");\n if (element == null) {\n console.error(\"Bokeh: ERROR: autoload.js configured with elementid '1001' but no matching script tag was found. \")\n return false;\n }\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n \n var js_urls = [\"https://cdn.pydata.org/bokeh/release/bokeh-1.4.0.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-widgets-1.4.0.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-tables-1.4.0.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-gl-1.4.0.min.js\"];\n var css_urls = [];\n \n\n var inline_js = [\n function(Bokeh) {\n inject_raw_css(\".widget-box {\\n\\tmin-height: 20px;\\n\\tbackground-color: #f5f5f5;\\n\\tborder: 1px solid #e3e3e3 !important;\\n\\tborder-radius: 4px;\\n\\t-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.05);\\n\\tbox-shadow: inset 0 1px 1px rgba(0,0,0,.05);\\n\\toverflow-x: hidden;\\n\\toverflow-y: hidden;\\n}\\n\\n.scrollable {\\n overflow: scroll;\\n}\\n\\nprogress {\\n\\tappearance: none;\\n\\t-moz-appearance: none;\\n\\t-webkit-appearance: none;\\n\\n\\tborder: none;\\n\\theight: 20px;\\n\\tbackground-color: whiteSmoke;\\n\\tborder-radius: 3px;\\n\\tbox-shadow: 0 2px 3px rgba(0,0,0,.5) inset;\\n\\tcolor: royalblue;\\n\\tposition: relative;\\n\\tmargin: 0 0 1.5em;\\n}\\n\\nprogress[value]::-webkit-progress-bar {\\n\\tbackground-color: whiteSmoke;\\n\\tborder-radius: 3px;\\n\\tbox-shadow: 0 2px 3px rgba(0,0,0,.5) inset;\\n}\\n\\nprogress[value]::-webkit-progress-value {\\n\\tposition: relative;\\n\\n\\tbackground-size: 35px 20px, 100% 100%, 100% 100%;\\n\\tborder-radius:3px;\\n}\\n\\nprogress.active:not([value])::before {\\n\\tbackground-position: 10%;\\n\\tanimation-name: stripes;\\n\\tanimation-duration: 3s;\\n\\tanimation-timing-function: linear;\\n\\tanimation-iteration-count: infinite;\\n}\\n\\nprogress[value]::-moz-progress-bar {\\n\\tbackground-size: 35px 20px, 100% 100%, 100% 100%;\\n\\tborder-radius:3px;\\n}\\n\\nprogress:not([value])::-moz-progress-bar {\\n\\tborder-radius:3px;\\n\\tbackground:\\n\\tlinear-gradient(-45deg, transparent 33%, rgba(0, 0, 0, 0.2) 33%, rgba(0, 0, 0, 0.2) 66%, transparent 66%) left/2.5em 1.5em;\\n\\n}\\n\\nprogress.active:not([value])::-moz-progress-bar {\\n\\tbackground-position: 10%;\\n\\tanimation-name: stripes;\\n\\tanimation-duration: 3s;\\n\\tanimation-timing-function: linear;\\n\\tanimation-iteration-count: infinite;\\n}\\n\\nprogress.active:not([value])::-webkit-progress-bar {\\n\\tbackground-position: 10%;\\n\\tanimation-name: stripes;\\n\\tanimation-duration: 3s;\\n\\tanimation-timing-function: linear;\\n\\tanimation-iteration-count: infinite;\\n}\\n\\nprogress.primary[value]::-webkit-progress-value { background-color: #007bff; }\\nprogress.primary:not([value])::before { background-color: #007bff; }\\nprogress.primary:not([value])::-webkit-progress-bar { background-color: #007bff; }\\nprogress.primary::-moz-progress-bar { background-color: #007bff; }\\n\\nprogress.secondary[value]::-webkit-progress-value { background-color: #6c757d; }\\nprogress.secondary:not([value])::before { background-color: #6c757d; }\\nprogress.secondary:not([value])::-webkit-progress-bar { background-color: #6c757d; }\\nprogress.secondary::-moz-progress-bar { background-color: #6c757d; }\\n\\nprogress.success[value]::-webkit-progress-value { background-color: #28a745; }\\nprogress.success:not([value])::before { background-color: #28a745; }\\nprogress.success:not([value])::-webkit-progress-bar { background-color: #28a745; }\\nprogress.success::-moz-progress-bar { background-color: #28a745; }\\n\\nprogress.danger[value]::-webkit-progress-value { background-color: #dc3545; }\\nprogress.danger:not([value])::before { background-color: #dc3545; }\\nprogress.danger:not([value])::-webkit-progress-bar { background-color: #dc3545; }\\nprogress.danger::-moz-progress-bar { background-color: #dc3545; }\\n\\nprogress.warning[value]::-webkit-progress-value { background-color: #ffc107; }\\nprogress.warning:not([value])::before { background-color: #ffc107; }\\nprogress.warning:not([value])::-webkit-progress-bar { background-color: #ffc107; }\\nprogress.warning::-moz-progress-bar { background-color: #ffc107; }\\n\\nprogress.info[value]::-webkit-progress-value { background-color: #17a2b8; }\\nprogress.info:not([value])::before { background-color: #17a2b8; }\\nprogress.info:not([value])::-webkit-progress-bar { background-color: #17a2b8; }\\nprogress.info::-moz-progress-bar { background-color: #17a2b8; }\\n\\nprogress.light[value]::-webkit-progress-value { background-color: #f8f9fa; }\\nprogress.light:not([value])::before { background-color: #f8f9fa; }\\nprogress.light:not([value])::-webkit-progress-bar { background-color: #f8f9fa; }\\nprogress.light::-moz-progress-bar { background-color: #f8f9fa; }\\n\\nprogress.dark[value]::-webkit-progress-value { background-color: #343a40; }\\nprogress.dark:not([value])::-webkit-progress-bar { background-color: #343a40; }\\nprogress.dark:not([value])::before { background-color: #343a40; }\\nprogress.dark::-moz-progress-bar { background-color: #343a40; }\\n\\nprogress:not([value])::-webkit-progress-bar {\\n\\tborder-radius: 3px;\\n\\tbackground:\\n\\tlinear-gradient(-45deg, transparent 33%, rgba(0, 0, 0, 0.2) 33%, rgba(0, 0, 0, 0.2) 66%, transparent 66%) left/2.5em 1.5em;\\n}\\nprogress:not([value])::before {\\n\\tcontent:\\\" \\\";\\n\\tposition:absolute;\\n\\theight: 20px;\\n\\ttop:0;\\n\\tleft:0;\\n\\tright:0;\\n\\tbottom:0;\\n\\tborder-radius: 3px;\\n\\tbackground:\\n\\tlinear-gradient(-45deg, transparent 33%, rgba(0, 0, 0, 0.2) 33%, rgba(0, 0, 0, 0.2) 66%, transparent 66%) left/2.5em 1.5em;\\n}\\n\\n@keyframes stripes {\\n from {background-position: 0%}\\n to {background-position: 100%}\\n}\");\n },\n function(Bokeh) {\n inject_raw_css(\".json-formatter-row {\\n font-family: monospace;\\n}\\n.json-formatter-row,\\n.json-formatter-row a,\\n.json-formatter-row a:hover {\\n color: black;\\n text-decoration: none;\\n}\\n.json-formatter-row .json-formatter-row {\\n margin-left: 1rem;\\n}\\n.json-formatter-row .json-formatter-children.json-formatter-empty {\\n opacity: 0.5;\\n margin-left: 1rem;\\n}\\n.json-formatter-row .json-formatter-children.json-formatter-empty:after {\\n display: none;\\n}\\n.json-formatter-row .json-formatter-children.json-formatter-empty.json-formatter-object:after {\\n content: \\\"No properties\\\";\\n}\\n.json-formatter-row .json-formatter-children.json-formatter-empty.json-formatter-array:after {\\n content: \\\"[]\\\";\\n}\\n.json-formatter-row .json-formatter-string,\\n.json-formatter-row .json-formatter-stringifiable {\\n color: green;\\n white-space: pre;\\n word-wrap: break-word;\\n}\\n.json-formatter-row .json-formatter-number {\\n color: blue;\\n}\\n.json-formatter-row .json-formatter-boolean {\\n color: red;\\n}\\n.json-formatter-row .json-formatter-null {\\n color: #855A00;\\n}\\n.json-formatter-row .json-formatter-undefined {\\n color: #ca0b69;\\n}\\n.json-formatter-row .json-formatter-function {\\n color: #FF20ED;\\n}\\n.json-formatter-row .json-formatter-date {\\n background-color: rgba(0, 0, 0, 0.05);\\n}\\n.json-formatter-row .json-formatter-url {\\n text-decoration: underline;\\n color: blue;\\n cursor: pointer;\\n}\\n.json-formatter-row .json-formatter-bracket {\\n color: blue;\\n}\\n.json-formatter-row .json-formatter-key {\\n color: #00008B;\\n padding-right: 0.2rem;\\n}\\n.json-formatter-row .json-formatter-toggler-link {\\n cursor: pointer;\\n}\\n.json-formatter-row .json-formatter-toggler {\\n line-height: 1.2rem;\\n font-size: 0.7rem;\\n vertical-align: middle;\\n opacity: 0.6;\\n cursor: pointer;\\n padding-right: 0.2rem;\\n}\\n.json-formatter-row .json-formatter-toggler:after {\\n display: inline-block;\\n transition: transform 100ms ease-in;\\n content: \\\"\\\\25BA\\\";\\n}\\n.json-formatter-row > a > .json-formatter-preview-text {\\n opacity: 0;\\n transition: opacity 0.15s ease-in;\\n font-style: italic;\\n}\\n.json-formatter-row:hover > a > .json-formatter-preview-text {\\n opacity: 0.6;\\n}\\n.json-formatter-row.json-formatter-open > .json-formatter-toggler-link .json-formatter-toggler:after {\\n transform: rotate(90deg);\\n}\\n.json-formatter-row.json-formatter-open > .json-formatter-children:after {\\n display: inline-block;\\n}\\n.json-formatter-row.json-formatter-open > a > .json-formatter-preview-text {\\n display: none;\\n}\\n.json-formatter-row.json-formatter-open.json-formatter-empty:after {\\n display: block;\\n}\\n.json-formatter-dark.json-formatter-row {\\n font-family: monospace;\\n}\\n.json-formatter-dark.json-formatter-row,\\n.json-formatter-dark.json-formatter-row a,\\n.json-formatter-dark.json-formatter-row a:hover {\\n color: white;\\n text-decoration: none;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-row {\\n margin-left: 1rem;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-children.json-formatter-empty {\\n opacity: 0.5;\\n margin-left: 1rem;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-children.json-formatter-empty:after {\\n display: none;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-children.json-formatter-empty.json-formatter-object:after {\\n content: \\\"No properties\\\";\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-children.json-formatter-empty.json-formatter-array:after {\\n content: \\\"[]\\\";\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-string,\\n.json-formatter-dark.json-formatter-row .json-formatter-stringifiable {\\n color: #31F031;\\n white-space: pre;\\n word-wrap: break-word;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-number {\\n color: #66C2FF;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-boolean {\\n color: #EC4242;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-null {\\n color: #EEC97D;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-undefined {\\n color: #ef8fbe;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-function {\\n color: #FD48CB;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-date {\\n background-color: rgba(255, 255, 255, 0.05);\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-url {\\n text-decoration: underline;\\n color: #027BFF;\\n cursor: pointer;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-bracket {\\n color: #9494FF;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-key {\\n color: #23A0DB;\\n padding-right: 0.2rem;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-toggler-link {\\n cursor: pointer;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-toggler {\\n line-height: 1.2rem;\\n font-size: 0.7rem;\\n vertical-align: middle;\\n opacity: 0.6;\\n cursor: pointer;\\n padding-right: 0.2rem;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-toggler:after {\\n display: inline-block;\\n transition: transform 100ms ease-in;\\n content: \\\"\\\\25BA\\\";\\n}\\n.json-formatter-dark.json-formatter-row > a > .json-formatter-preview-text {\\n opacity: 0;\\n transition: opacity 0.15s ease-in;\\n font-style: italic;\\n}\\n.json-formatter-dark.json-formatter-row:hover > a > .json-formatter-preview-text {\\n opacity: 0.6;\\n}\\n.json-formatter-dark.json-formatter-row.json-formatter-open > .json-formatter-toggler-link .json-formatter-toggler:after {\\n transform: rotate(90deg);\\n}\\n.json-formatter-dark.json-formatter-row.json-formatter-open > .json-formatter-children:after {\\n display: inline-block;\\n}\\n.json-formatter-dark.json-formatter-row.json-formatter-open > a > .json-formatter-preview-text {\\n display: none;\\n}\\n.json-formatter-dark.json-formatter-row.json-formatter-open.json-formatter-empty:after {\\n display: block;\\n}\\n\");\n },\n function(Bokeh) {\n inject_raw_css(\".codehilite .hll { background-color: #ffffcc }\\n.codehilite { background: #f8f8f8; }\\n.codehilite .c { color: #408080; font-style: italic } /* Comment */\\n.codehilite .err { border: 1px solid #FF0000 } /* Error */\\n.codehilite .k { color: #008000; font-weight: bold } /* Keyword */\\n.codehilite .o { color: #666666 } /* Operator */\\n.codehilite .ch { color: #408080; font-style: italic } /* Comment.Hashbang */\\n.codehilite .cm { color: #408080; font-style: italic } /* Comment.Multiline */\\n.codehilite .cp { color: #BC7A00 } /* Comment.Preproc */\\n.codehilite .cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */\\n.codehilite .c1 { color: #408080; font-style: italic } /* Comment.Single */\\n.codehilite .cs { color: #408080; font-style: italic } /* Comment.Special */\\n.codehilite .gd { color: #A00000 } /* Generic.Deleted */\\n.codehilite .ge { font-style: italic } /* Generic.Emph */\\n.codehilite .gr { color: #FF0000 } /* Generic.Error */\\n.codehilite .gh { color: #000080; font-weight: bold } /* Generic.Heading */\\n.codehilite .gi { color: #00A000 } /* Generic.Inserted */\\n.codehilite .go { color: #888888 } /* Generic.Output */\\n.codehilite .gp { color: #000080; font-weight: bold } /* Generic.Prompt */\\n.codehilite .gs { font-weight: bold } /* Generic.Strong */\\n.codehilite .gu { color: #800080; font-weight: bold } /* Generic.Subheading */\\n.codehilite .gt { color: #0044DD } /* Generic.Traceback */\\n.codehilite .kc { color: #008000; font-weight: bold } /* Keyword.Constant */\\n.codehilite .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */\\n.codehilite .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */\\n.codehilite .kp { color: #008000 } /* Keyword.Pseudo */\\n.codehilite .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */\\n.codehilite .kt { color: #B00040 } /* Keyword.Type */\\n.codehilite .m { color: #666666 } /* Literal.Number */\\n.codehilite .s { color: #BA2121 } /* Literal.String */\\n.codehilite .na { color: #7D9029 } /* Name.Attribute */\\n.codehilite .nb { color: #008000 } /* Name.Builtin */\\n.codehilite .nc { color: #0000FF; font-weight: bold } /* Name.Class */\\n.codehilite .no { color: #880000 } /* Name.Constant */\\n.codehilite .nd { color: #AA22FF } /* Name.Decorator */\\n.codehilite .ni { color: #999999; font-weight: bold } /* Name.Entity */\\n.codehilite .ne { color: #D2413A; font-weight: bold } /* Name.Exception */\\n.codehilite .nf { color: #0000FF } /* Name.Function */\\n.codehilite .nl { color: #A0A000 } /* Name.Label */\\n.codehilite .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */\\n.codehilite .nt { color: #008000; font-weight: bold } /* Name.Tag */\\n.codehilite .nv { color: #19177C } /* Name.Variable */\\n.codehilite .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */\\n.codehilite .w { color: #bbbbbb } /* Text.Whitespace */\\n.codehilite .mb { color: #666666 } /* Literal.Number.Bin */\\n.codehilite .mf { color: #666666 } /* Literal.Number.Float */\\n.codehilite .mh { color: #666666 } /* Literal.Number.Hex */\\n.codehilite .mi { color: #666666 } /* Literal.Number.Integer */\\n.codehilite .mo { color: #666666 } /* Literal.Number.Oct */\\n.codehilite .sa { color: #BA2121 } /* Literal.String.Affix */\\n.codehilite .sb { color: #BA2121 } /* Literal.String.Backtick */\\n.codehilite .sc { color: #BA2121 } /* Literal.String.Char */\\n.codehilite .dl { color: #BA2121 } /* Literal.String.Delimiter */\\n.codehilite .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */\\n.codehilite .s2 { color: #BA2121 } /* Literal.String.Double */\\n.codehilite .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */\\n.codehilite .sh { color: #BA2121 } /* Literal.String.Heredoc */\\n.codehilite .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */\\n.codehilite .sx { color: #008000 } /* Literal.String.Other */\\n.codehilite .sr { color: #BB6688 } /* Literal.String.Regex */\\n.codehilite .s1 { color: #BA2121 } /* Literal.String.Single */\\n.codehilite .ss { color: #19177C } /* Literal.String.Symbol */\\n.codehilite .bp { color: #008000 } /* Name.Builtin.Pseudo */\\n.codehilite .fm { color: #0000FF } /* Name.Function.Magic */\\n.codehilite .vc { color: #19177C } /* Name.Variable.Class */\\n.codehilite .vg { color: #19177C } /* Name.Variable.Global */\\n.codehilite .vi { color: #19177C } /* Name.Variable.Instance */\\n.codehilite .vm { color: #19177C } /* Name.Variable.Magic */\\n.codehilite .il { color: #666666 } /* Literal.Number.Integer.Long */\\n\\n.markdown h1 { margin-block-start: 0.34em }\\n.markdown h2 { margin-block-start: 0.42em }\\n.markdown h3 { margin-block-start: 0.5em }\\n.markdown h4 { margin-block-start: 0.67em }\\n.markdown h5 { margin-block-start: 0.84em }\\n.markdown h6 { margin-block-start: 1.17em }\\n.markdown ul { padding-inline-start: 2em }\\n.markdown ol { padding-inline-start: 2em }\\n.markdown strong { font-weight: 600 }\\n.markdown a { color: -webkit-link }\\n.markdown a { color: -moz-hyperlinkText }\\n\");\n },\n function(Bokeh) {\n inject_raw_css(\"table.panel-df {\\n margin-left: auto;\\n margin-right: auto;\\n border: none;\\n border-collapse: collapse;\\n border-spacing: 0;\\n color: black;\\n font-size: 12px;\\n table-layout: fixed;\\n width: 100%;\\n}\\n\\n.panel-df tr, th, td {\\n text-align: right;\\n vertical-align: middle;\\n padding: 0.5em 0.5em !important;\\n line-height: normal;\\n white-space: normal;\\n max-width: none;\\n border: none;\\n}\\n\\n.panel-df tbody {\\n display: table-row-group;\\n vertical-align: middle;\\n border-color: inherit;\\n}\\n\\n.panel-df tbody tr:nth-child(odd) {\\n background: #f5f5f5;\\n}\\n\\n.panel-df thead {\\n border-bottom: 1px solid black;\\n vertical-align: bottom;\\n}\\n\\n.panel-df tr:hover {\\n background: lightblue !important;\\n cursor: pointer;\\n}\\n\");\n },\n function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\n \n function(Bokeh) {\n /* BEGIN panel.min.js */\n /*!\n * Copyright (c) 2012 - 2019, Anaconda, Inc., and Bokeh Contributors\n * All rights reserved.\n * \n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * \n * Redistributions of source code must retain the above copyright notice,\n * this list of conditions and the following disclaimer.\n * \n * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation\n * and/or other materials provided with the distribution.\n * \n * Neither the name of Anaconda nor the names of any contributors\n * may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF\n * THE POSSIBILITY OF SUCH DAMAGE.\n */\n (function(root, factory) {\n factory(root[\"Bokeh\"]);\n })(this, function(Bokeh) {\n var define;\n return (function(modules, entry, aliases, externals) {\n if (Bokeh != null) {\n return Bokeh.register_plugin(modules, entry, aliases, externals);\n } else {\n throw new Error(\"Cannot find Bokeh. You have to load it prior to loading plugins.\");\n }\n })\n ({\n \"aa4f566620\": function _(r,e,t){var n=(this&&this.__importStar||function(r){if(r&&r.__esModule)return r;var e={};if(null!=r)for(var t in r)Object.hasOwnProperty.call(r,t)&&(e[t]=r[t]);return e.default=r,e})(r(\"4d02676c49\"));t.Panel=n,r(\"@bokehjs/base\").register_models(n)},\n \"4d02676c49\": function _(a,e,r){var o=a(\"ff4b91e885\");r.AcePlot=o.AcePlot;var t=a(\"12e90a1b7e\");r.Audio=t.Audio;var c=a(\"cf3b018c7a\");r.DeckGLPlot=c.DeckGLPlot;var d=a(\"70a2bb70ef\");r.HTML=d.HTML;var v=a(\"dac8d750fa\");r.JSON=v.JSON;var P=a(\"c81021c8fd\");r.KaTeX=P.KaTeX;var b=a(\"a93ded647d\");r.MathJax=b.MathJax;var l=a(\"98100899bc\");r.Player=l.Player;var f=a(\"d46f026c83\");r.PlotlyPlot=f.PlotlyPlot;var i=a(\"d9b3a262de\");r.Progress=i.Progress;var n=a(\"4b4afba86a\");r.State=n.State;var S=a(\"14b669e6fc\");r.VegaPlot=S.VegaPlot;var V=a(\"71a2bbec38\");r.Video=V.Video;var s=a(\"76bc93d621\");r.VideoStream=s.VideoStream,function(a){for(var e in a)r.hasOwnProperty(e)||(r[e]=a[e])}(a(\"63070bc9ce\"))},\n \"ff4b91e885\": function _(t,e,o){var i,n=this&&this.__extends||(i=function(t,e){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var o in e)e.hasOwnProperty(o)&&(t[o]=e[o])})(t,e)},function(t,e){function o(){this.constructor=t}i(t,e),t.prototype=null===e?Object.create(e):(o.prototype=e.prototype,new o)}),r=(this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var o in t)Object.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e.default=t,e})(t(\"@bokehjs/core/properties\")),s=t(\"@bokehjs/models/layouts/html_box\"),a=t(\"@bokehjs/core/dom\");var c=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.initialize=function(){t.prototype.initialize.call(this),this._ace=window.ace,this._container=a.div({id:\"_\"+Math.random().toString(36).substr(2,9),style:{width:\"100%\",height:\"100%\"}})},e.prototype.connect_signals=function(){var e=this;t.prototype.connect_signals.call(this),this.connect(this.model.properties.code.change,function(){return e._update_code_from_model()}),this.connect(this.model.properties.theme.change,function(){return e._update_theme()}),this.connect(this.model.properties.language.change,function(){return e._update_language()}),this.connect(this.model.properties.annotations.change,function(){return e._add_annotations()}),this.connect(this.model.properties.readonly.change,function(){e._editor.setReadOnly(e.model.readonly)})},e.prototype.render=function(){var e=this;t.prototype.render.call(this),this._container!==this.el.childNodes[0]&&this.el.appendChild(this._container),this._container.textContent=this.model.code,this._editor=this._ace.edit(this._container.id),this._editor.setTheme(\"ace/theme/\"+this.model.theme),this._editor.session.setMode(\"ace/mode/\"+this.model.language),this._editor.setReadOnly(this.model.readonly),this._langTools=this._ace.require(\"ace/ext/language_tools\"),this._editor.setOptions({enableBasicAutocompletion:!0,enableSnippets:!0,fontFamily:\"monospace\"}),this._editor.on(\"change\",function(){return e._update_code_from_editor()})},e.prototype._update_code_from_model=function(){this._editor&&this._editor.getValue()!=this.model.code&&this._editor.setValue(this.model.code)},e.prototype._update_code_from_editor=function(){this._editor.getValue()!=this.model.code&&(this.model.code=this._editor.getValue())},e.prototype._update_theme=function(){this._editor.setTheme(\"ace/theme/\"+this.model.theme)},e.prototype._update_language=function(){this._editor.session.setMode(\"ace/mode/\"+this.model.language)},e.prototype._add_annotations=function(){this._editor.session.setAnnotations(this.model.annotations)},e.prototype.after_layout=function(){t.prototype.after_layout.call(this),this._editor.resize()},e.__name__=\"AcePlotView\",e}(t(\"ec60963462\").PanelHTMLBoxView);o.AcePlotView=c;var h=function(t){function e(e){return t.call(this,e)||this}return n(e,t),e.init_AcePlot=function(){this.prototype.default_view=c,this.define({code:[r.String],language:[r.String,\"python\"],theme:[r.String,\"chrome\"],annotations:[r.Array,[]],readonly:[r.Boolean,!1]}),this.override({height:300,width:300})},e.__name__=\"AcePlot\",e.__module__=\"panel.models.ace\",e}(s.HTMLBox);o.AcePlot=h,h.init_AcePlot()},\n \"ec60963462\": function _(e,t,i){var o,n=this&&this.__extends||(o=function(e,t){return(o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var i in t)t.hasOwnProperty(i)&&(e[i]=t[i])})(e,t)},function(e,t){function i(){this.constructor=e}o(e,t),e.prototype=null===t?Object.create(t):(i.prototype=t.prototype,new i)}),s=e(\"@bokehjs/core/layout/layoutable\"),h=e(\"@bokehjs/core/layout/types\"),r=e(\"@bokehjs/core/dom\"),a=e(\"@bokehjs/models/widgets/markup\"),_=e(\"@bokehjs/models/layouts/html_box\");function c(e,t){var i=null!=t.width?\"fixed\":\"fit\",o=null!=t.height?\"fixed\":\"fit\",n=t.sizing_mode;if(null!=n)if(\"fixed\"==n)i=o=\"fixed\";else if(\"stretch_both\"==n)i=o=\"max\";else if(\"stretch_width\"==n)i=\"max\";else if(\"stretch_height\"==n)o=\"max\";else switch(n){case\"scale_width\":i=\"max\",o=\"min\";break;case\"scale_height\":i=\"min\",o=\"max\";break;case\"scale_both\":i=\"max\",o=\"max\";break;default:throw new Error(\"unreachable\")}\"fixed\"==i&&t.width?e.style.width=t.width+\"px\":\"max\"==i&&(e.style.width=\"100%\"),\"fixed\"==o&&t.height?e.style.height=t.height+\"px\":\"max\"==o&&(e.style.height=\"100%\")}i.set_size=c;var l=function(e){function t(t,i,o){var n=e.call(this)||this;return n.el=t,n.sizing_mode=i,n.changed=o,n._cache={},n._cache_count={},n}return n(t,e),t.prototype._measure=function(e){var t=this,i=[e.width,e.height,this.sizing_mode].toString(),o=this.changed&&\"fixed\"!=this.sizing_mode&&null!=this.sizing_mode?1:0;if(i in this._cache&&this._cache_count[i]>=o)return this._cache_count[i]=this._cache_count[i]+1,this._cache[i];var n=new h.Sizeable(e).bounded_to(this.sizing.size),s=r.sized(this.el,n,function(){var e=new h.Sizeable(r.content_size(t.el)),i=r.extents(t.el),o=i.border,n=i.padding;return e.grow_by(o).grow_by(n).map(Math.ceil)});return this._cache[i]=s,this._cache_count[i]=0,s},t.__name__=\"CachedVariadicBox\",t}(s.Layoutable);i.CachedVariadicBox=l;var d=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n(t,e),t.prototype._update_layout=function(){var e=void 0!==this._prev_sizing_mode&&this._prev_sizing_mode!==this.model.sizing_mode;this._prev_sizing_mode=this.model.sizing_mode,this.layout=new l(this.el,this.model.sizing_mode,e),this.layout.set_sizing(this.box_sizing())},t.prototype.render=function(){e.prototype.render.call(this),c(this.markup_el,this.model)},t.__name__=\"PanelMarkupView\",t}(a.MarkupView);i.PanelMarkupView=d;var u=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n(t,e),t.prototype._update_layout=function(){var e=void 0!==this._prev_sizing_mode&&this._prev_sizing_mode!==this.model.sizing_mode;this._prev_sizing_mode=this.model.sizing_mode,this.layout=new l(this.el,this.model.sizing_mode,e),this.layout.set_sizing(this.box_sizing())},t.prototype.render=function(){e.prototype.render.call(this),c(this.el,this.model)},t.__name__=\"PanelHTMLBoxView\",t}(_.HTMLBoxView);i.PanelHTMLBoxView=u},\n \"12e90a1b7e\": function _(t,e,o){var i,n=this&&this.__extends||(i=function(t,e){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var o in e)e.hasOwnProperty(o)&&(t[o]=e[o])})(t,e)},function(t,e){function o(){this.constructor=t}i(t,e),t.prototype=null===e?Object.create(e):(o.prototype=e.prototype,new o)}),u=(this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var o in t)Object.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e.default=t,e})(t(\"@bokehjs/core/properties\")),l=t(\"@bokehjs/models/layouts/html_box\"),s=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return n(e,t),e.prototype.initialize=function(){t.prototype.initialize.call(this),this._blocked=!1,this._setting=!1,this._time=Date.now()},e.prototype.connect_signals=function(){var e=this;t.prototype.connect_signals.call(this),this.connect(this.model.properties.loop.change,function(){return e.set_loop()}),this.connect(this.model.properties.paused.change,function(){return e.set_paused()}),this.connect(this.model.properties.time.change,function(){return e.set_time()}),this.connect(this.model.properties.value.change,function(){return e.set_value()}),this.connect(this.model.properties.volume.change,function(){return e.set_volume()})},e.prototype.render=function(){var e=this;t.prototype.render.call(this),this.audioEl=document.createElement(\"audio\"),this.audioEl.controls=!0,this.audioEl.src=this.model.value,this.audioEl.currentTime=this.model.time,this.audioEl.loop=this.model.loop,null!=this.model.volume?this.audioEl.volume=this.model.volume/100:this.model.volume=100*this.audioEl.volume,this.audioEl.onpause=function(){return e.model.paused=!0},this.audioEl.onplay=function(){return e.model.paused=!1},this.audioEl.ontimeupdate=function(){return e.update_time(e)},this.audioEl.onvolumechange=function(){return e.update_volume(e)},this.el.appendChild(this.audioEl),this.model.paused||this.audioEl.play()},e.prototype.update_time=function(t){t._setting?t._setting=!1:Date.now()-t._time1&&\"number\"==typeof h[0]?l[u]=r.data[u].slice(c*h[1],c*h[1]+h[1]):l[u]=r.data[u][c]}a.push(l)}i.data=a}t&&this.updateDeck()},e.prototype._on_click_event=function(t){var e={coordinate:t.coordinate,lngLat:t.lngLat,index:t.index};this.model.clickState=e},e.prototype._on_hover_event=function(t){var e={coordinate:t.coordinate,lngLat:t.lngLat,index:t.index};this.model.hoverState=e},e.prototype._on_viewState_event=function(t){this.model.viewState=t.viewState},e.prototype.getData=function(){var t=this;return r(r({},this.model.data),{layers:this.model.layers,initialViewState:this.model.initialViewState,onViewStateChange:function(e){return t._on_viewState_event(e)},onClick:function(e){return t._on_click_event(e)},onHover:function(e){return t._on_hover_event(e)}})},e.prototype.updateDeck=function(){if(this.deckGL){var t=this.getData();if(d.updateDeck)d.updateDeck(t,this.deckGL);else{var e=this.jsonConverter.convert(t);this.deckGL.setProps(e)}}else this.render()},e.prototype.createDeck=function(t){var e,o=t.mapboxApiKey,n=t.container,i=t.jsonInput,a=t.tooltip;try{var s=this.jsonConverter.convert(i),c=u.makeTooltip(a);e=new d.DeckGL(r(r({},s),{map:f,mapboxApiAccessToken:o,container:n,getTooltip:c}))}catch(t){console.error(t)}return e},e.prototype.render=function(){t.prototype.render.call(this);var e=c.div({class:\"deckgl\"});_.set_size(e,this.model);var o=this.model.mapbox_api_key,n=this.model.tooltip,i=this.getData();d.createDeck?this.deckGL=d.createDeck({mapboxApiKey:o,container:e,jsonInput:i,tooltip:n}):this.deckGL=this.createDeck({mapboxApiKey:o,container:e,jsonInput:i,tooltip:n}),this.el.appendChild(e)},e.__name__=\"DeckGLPlotView\",e}(_.PanelHTMLBoxView);o.DeckGLPlotView=m;var k=function(t){function e(e){return t.call(this,e)||this}return i(e,t),e.init_DeckGLPlot=function(){this.prototype.default_view=m,this.define({data:[l.Any],data_sources:[l.Array,[]],clickState:[l.Any],hoverState:[l.Any],initialViewState:[l.Any],layers:[l.Array,[]],mapbox_api_key:[l.String],tooltip:[l.Any],viewState:[l.Any]}),this.override({height:400,width:600})},e.__name__=\"DeckGLPlot\",e.__module__=\"panel.models.deckgl\",e}(p.HTMLBox);o.DeckGLPlot=k,k.init_DeckGLPlot()},\n \"27d3545a25\": function _(e,t,n){var i,r,l={fontFamily:'\"Helvetica Neue\", Helvetica, Arial, sans-serif',display:\"flex\",flex:\"wrap\",maxWidth:\"500px\",flexDirection:\"column\",zIndex:2};function a(){return document.createElement(\"div\")}function o(e){if(!e.picked)return null;if(e.object===i)return r;var t={html:c(e.object),style:l};return r=t,i=e.object,t}n.getTooltipDefault=o;var s=new Set([\"position\",\"index\"]);function c(e){var t=a();for(var n in e)if(!s.has(n)){var i=a();i.className=\"header\",i.textContent=n;var r=a();r.className=\"value\",r.textContent=u(e[n]);var l=a();f(l,i,r),l.appendChild(i),l.appendChild(r),t.appendChild(l)}return t.innerHTML}function f(e,t,n){Object.assign(t.style,{fontWeight:700,marginRight:\"10px\",flex:\"1 1 0%\"}),Object.assign(n.style,{flex:\"none\",maxWidth:\"250px\",overflow:\"hidden\",whiteSpace:\"nowrap\",textOverflow:\"ellipsis\"}),Object.assign(e.style,{display:\"flex\",flexDirection:\"row\",justifyContent:\"space-between\",alignItems:\"stretch\"})}function u(e){var t;if(Array.isArray(e)&&e.length>4)t=\"Array<\"+e.length+\">\";else if(\"string\"==typeof e)t=e;else if(\"number\"==typeof e)t=String(e);else try{t=JSON.stringify(e)}catch(e){t=\"\"}return t.length>50&&(t=t.slice(0,50)),t}function p(e,t){var n=e;for(var i in t)n=n.replace(\"{\"+i+\"}\",t[i]);return n}n.tabularize=c,n.toText=u,n.substituteIn=p,n.makeTooltip=function(e){return e?e.html||e.text?function(t){if(!t.picked)return null;var n={style:e.style||l};return e.html?n.html=p(e.html,t.object):n.text=p(e.text,t.object),n}:o:null}},\n \"093eb75864\": function _(E,_,R){_.exports={DEPTH_BUFFER_BIT:256,STENCIL_BUFFER_BIT:1024,COLOR_BUFFER_BIT:16384,POINTS:0,LINES:1,LINE_LOOP:2,LINE_STRIP:3,TRIANGLES:4,TRIANGLE_STRIP:5,TRIANGLE_FAN:6,ZERO:0,ONE:1,SRC_COLOR:768,ONE_MINUS_SRC_COLOR:769,SRC_ALPHA:770,ONE_MINUS_SRC_ALPHA:771,DST_ALPHA:772,ONE_MINUS_DST_ALPHA:773,DST_COLOR:774,ONE_MINUS_DST_COLOR:775,SRC_ALPHA_SATURATE:776,CONSTANT_COLOR:32769,ONE_MINUS_CONSTANT_COLOR:32770,CONSTANT_ALPHA:32771,ONE_MINUS_CONSTANT_ALPHA:32772,FUNC_ADD:32774,FUNC_SUBTRACT:32778,FUNC_REVERSE_SUBTRACT:32779,BLEND_EQUATION:32777,BLEND_EQUATION_RGB:32777,BLEND_EQUATION_ALPHA:34877,BLEND_DST_RGB:32968,BLEND_SRC_RGB:32969,BLEND_DST_ALPHA:32970,BLEND_SRC_ALPHA:32971,BLEND_COLOR:32773,ARRAY_BUFFER_BINDING:34964,ELEMENT_ARRAY_BUFFER_BINDING:34965,LINE_WIDTH:2849,ALIASED_POINT_SIZE_RANGE:33901,ALIASED_LINE_WIDTH_RANGE:33902,CULL_FACE_MODE:2885,FRONT_FACE:2886,DEPTH_RANGE:2928,DEPTH_WRITEMASK:2930,DEPTH_CLEAR_VALUE:2931,DEPTH_FUNC:2932,STENCIL_CLEAR_VALUE:2961,STENCIL_FUNC:2962,STENCIL_FAIL:2964,STENCIL_PASS_DEPTH_FAIL:2965,STENCIL_PASS_DEPTH_PASS:2966,STENCIL_REF:2967,STENCIL_VALUE_MASK:2963,STENCIL_WRITEMASK:2968,STENCIL_BACK_FUNC:34816,STENCIL_BACK_FAIL:34817,STENCIL_BACK_PASS_DEPTH_FAIL:34818,STENCIL_BACK_PASS_DEPTH_PASS:34819,STENCIL_BACK_REF:36003,STENCIL_BACK_VALUE_MASK:36004,STENCIL_BACK_WRITEMASK:36005,VIEWPORT:2978,SCISSOR_BOX:3088,COLOR_CLEAR_VALUE:3106,COLOR_WRITEMASK:3107,UNPACK_ALIGNMENT:3317,PACK_ALIGNMENT:3333,MAX_TEXTURE_SIZE:3379,MAX_VIEWPORT_DIMS:3386,SUBPIXEL_BITS:3408,RED_BITS:3410,GREEN_BITS:3411,BLUE_BITS:3412,ALPHA_BITS:3413,DEPTH_BITS:3414,STENCIL_BITS:3415,POLYGON_OFFSET_UNITS:10752,POLYGON_OFFSET_FACTOR:32824,TEXTURE_BINDING_2D:32873,SAMPLE_BUFFERS:32936,SAMPLES:32937,SAMPLE_COVERAGE_VALUE:32938,SAMPLE_COVERAGE_INVERT:32939,COMPRESSED_TEXTURE_FORMATS:34467,VENDOR:7936,RENDERER:7937,VERSION:7938,IMPLEMENTATION_COLOR_READ_TYPE:35738,IMPLEMENTATION_COLOR_READ_FORMAT:35739,BROWSER_DEFAULT_WEBGL:37444,STATIC_DRAW:35044,STREAM_DRAW:35040,DYNAMIC_DRAW:35048,ARRAY_BUFFER:34962,ELEMENT_ARRAY_BUFFER:34963,BUFFER_SIZE:34660,BUFFER_USAGE:34661,CURRENT_VERTEX_ATTRIB:34342,VERTEX_ATTRIB_ARRAY_ENABLED:34338,VERTEX_ATTRIB_ARRAY_SIZE:34339,VERTEX_ATTRIB_ARRAY_STRIDE:34340,VERTEX_ATTRIB_ARRAY_TYPE:34341,VERTEX_ATTRIB_ARRAY_NORMALIZED:34922,VERTEX_ATTRIB_ARRAY_POINTER:34373,VERTEX_ATTRIB_ARRAY_BUFFER_BINDING:34975,CULL_FACE:2884,FRONT:1028,BACK:1029,FRONT_AND_BACK:1032,BLEND:3042,DEPTH_TEST:2929,DITHER:3024,POLYGON_OFFSET_FILL:32823,SAMPLE_ALPHA_TO_COVERAGE:32926,SAMPLE_COVERAGE:32928,SCISSOR_TEST:3089,STENCIL_TEST:2960,NO_ERROR:0,INVALID_ENUM:1280,INVALID_VALUE:1281,INVALID_OPERATION:1282,OUT_OF_MEMORY:1285,CONTEXT_LOST_WEBGL:37442,CW:2304,CCW:2305,DONT_CARE:4352,FASTEST:4353,NICEST:4354,GENERATE_MIPMAP_HINT:33170,BYTE:5120,UNSIGNED_BYTE:5121,SHORT:5122,UNSIGNED_SHORT:5123,INT:5124,UNSIGNED_INT:5125,FLOAT:5126,DOUBLE:5130,DEPTH_COMPONENT:6402,ALPHA:6406,RGB:6407,RGBA:6408,LUMINANCE:6409,LUMINANCE_ALPHA:6410,UNSIGNED_SHORT_4_4_4_4:32819,UNSIGNED_SHORT_5_5_5_1:32820,UNSIGNED_SHORT_5_6_5:33635,FRAGMENT_SHADER:35632,VERTEX_SHADER:35633,COMPILE_STATUS:35713,DELETE_STATUS:35712,LINK_STATUS:35714,VALIDATE_STATUS:35715,ATTACHED_SHADERS:35717,ACTIVE_ATTRIBUTES:35721,ACTIVE_UNIFORMS:35718,MAX_VERTEX_ATTRIBS:34921,MAX_VERTEX_UNIFORM_VECTORS:36347,MAX_VARYING_VECTORS:36348,MAX_COMBINED_TEXTURE_IMAGE_UNITS:35661,MAX_VERTEX_TEXTURE_IMAGE_UNITS:35660,MAX_TEXTURE_IMAGE_UNITS:34930,MAX_FRAGMENT_UNIFORM_VECTORS:36349,SHADER_TYPE:35663,SHADING_LANGUAGE_VERSION:35724,CURRENT_PROGRAM:35725,NEVER:512,ALWAYS:519,LESS:513,EQUAL:514,LEQUAL:515,GREATER:516,GEQUAL:518,NOTEQUAL:517,KEEP:7680,REPLACE:7681,INCR:7682,DECR:7683,INVERT:5386,INCR_WRAP:34055,DECR_WRAP:34056,NEAREST:9728,LINEAR:9729,NEAREST_MIPMAP_NEAREST:9984,LINEAR_MIPMAP_NEAREST:9985,NEAREST_MIPMAP_LINEAR:9986,LINEAR_MIPMAP_LINEAR:9987,TEXTURE_MAG_FILTER:10240,TEXTURE_MIN_FILTER:10241,TEXTURE_WRAP_S:10242,TEXTURE_WRAP_T:10243,TEXTURE_2D:3553,TEXTURE:5890,TEXTURE_CUBE_MAP:34067,TEXTURE_BINDING_CUBE_MAP:34068,TEXTURE_CUBE_MAP_POSITIVE_X:34069,TEXTURE_CUBE_MAP_NEGATIVE_X:34070,TEXTURE_CUBE_MAP_POSITIVE_Y:34071,TEXTURE_CUBE_MAP_NEGATIVE_Y:34072,TEXTURE_CUBE_MAP_POSITIVE_Z:34073,TEXTURE_CUBE_MAP_NEGATIVE_Z:34074,MAX_CUBE_MAP_TEXTURE_SIZE:34076,TEXTURE0:33984,ACTIVE_TEXTURE:34016,REPEAT:10497,CLAMP_TO_EDGE:33071,MIRRORED_REPEAT:33648,TEXTURE_WIDTH:4096,TEXTURE_HEIGHT:4097,FLOAT_VEC2:35664,FLOAT_VEC3:35665,FLOAT_VEC4:35666,INT_VEC2:35667,INT_VEC3:35668,INT_VEC4:35669,BOOL:35670,BOOL_VEC2:35671,BOOL_VEC3:35672,BOOL_VEC4:35673,FLOAT_MAT2:35674,FLOAT_MAT3:35675,FLOAT_MAT4:35676,SAMPLER_2D:35678,SAMPLER_CUBE:35680,LOW_FLOAT:36336,MEDIUM_FLOAT:36337,HIGH_FLOAT:36338,LOW_INT:36339,MEDIUM_INT:36340,HIGH_INT:36341,FRAMEBUFFER:36160,RENDERBUFFER:36161,RGBA4:32854,RGB5_A1:32855,RGB565:36194,DEPTH_COMPONENT16:33189,STENCIL_INDEX:6401,STENCIL_INDEX8:36168,DEPTH_STENCIL:34041,RENDERBUFFER_WIDTH:36162,RENDERBUFFER_HEIGHT:36163,RENDERBUFFER_INTERNAL_FORMAT:36164,RENDERBUFFER_RED_SIZE:36176,RENDERBUFFER_GREEN_SIZE:36177,RENDERBUFFER_BLUE_SIZE:36178,RENDERBUFFER_ALPHA_SIZE:36179,RENDERBUFFER_DEPTH_SIZE:36180,RENDERBUFFER_STENCIL_SIZE:36181,FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE:36048,FRAMEBUFFER_ATTACHMENT_OBJECT_NAME:36049,FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL:36050,FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE:36051,COLOR_ATTACHMENT0:36064,DEPTH_ATTACHMENT:36096,STENCIL_ATTACHMENT:36128,DEPTH_STENCIL_ATTACHMENT:33306,NONE:0,FRAMEBUFFER_COMPLETE:36053,FRAMEBUFFER_INCOMPLETE_ATTACHMENT:36054,FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:36055,FRAMEBUFFER_INCOMPLETE_DIMENSIONS:36057,FRAMEBUFFER_UNSUPPORTED:36061,FRAMEBUFFER_BINDING:36006,RENDERBUFFER_BINDING:36007,READ_FRAMEBUFFER:36008,DRAW_FRAMEBUFFER:36009,MAX_RENDERBUFFER_SIZE:34024,INVALID_FRAMEBUFFER_OPERATION:1286,UNPACK_FLIP_Y_WEBGL:37440,UNPACK_PREMULTIPLY_ALPHA_WEBGL:37441,UNPACK_COLORSPACE_CONVERSION_WEBGL:37443,READ_BUFFER:3074,UNPACK_ROW_LENGTH:3314,UNPACK_SKIP_ROWS:3315,UNPACK_SKIP_PIXELS:3316,PACK_ROW_LENGTH:3330,PACK_SKIP_ROWS:3331,PACK_SKIP_PIXELS:3332,TEXTURE_BINDING_3D:32874,UNPACK_SKIP_IMAGES:32877,UNPACK_IMAGE_HEIGHT:32878,MAX_3D_TEXTURE_SIZE:32883,MAX_ELEMENTS_VERTICES:33e3,MAX_ELEMENTS_INDICES:33001,MAX_TEXTURE_LOD_BIAS:34045,MAX_FRAGMENT_UNIFORM_COMPONENTS:35657,MAX_VERTEX_UNIFORM_COMPONENTS:35658,MAX_ARRAY_TEXTURE_LAYERS:35071,MIN_PROGRAM_TEXEL_OFFSET:35076,MAX_PROGRAM_TEXEL_OFFSET:35077,MAX_VARYING_COMPONENTS:35659,FRAGMENT_SHADER_DERIVATIVE_HINT:35723,RASTERIZER_DISCARD:35977,VERTEX_ARRAY_BINDING:34229,MAX_VERTEX_OUTPUT_COMPONENTS:37154,MAX_FRAGMENT_INPUT_COMPONENTS:37157,MAX_SERVER_WAIT_TIMEOUT:37137,MAX_ELEMENT_INDEX:36203,RED:6403,RGB8:32849,RGBA8:32856,RGB10_A2:32857,TEXTURE_3D:32879,TEXTURE_WRAP_R:32882,TEXTURE_MIN_LOD:33082,TEXTURE_MAX_LOD:33083,TEXTURE_BASE_LEVEL:33084,TEXTURE_MAX_LEVEL:33085,TEXTURE_COMPARE_MODE:34892,TEXTURE_COMPARE_FUNC:34893,SRGB:35904,SRGB8:35905,SRGB8_ALPHA8:35907,COMPARE_REF_TO_TEXTURE:34894,RGBA32F:34836,RGB32F:34837,RGBA16F:34842,RGB16F:34843,TEXTURE_2D_ARRAY:35866,TEXTURE_BINDING_2D_ARRAY:35869,R11F_G11F_B10F:35898,RGB9_E5:35901,RGBA32UI:36208,RGB32UI:36209,RGBA16UI:36214,RGB16UI:36215,RGBA8UI:36220,RGB8UI:36221,RGBA32I:36226,RGB32I:36227,RGBA16I:36232,RGB16I:36233,RGBA8I:36238,RGB8I:36239,RED_INTEGER:36244,RGB_INTEGER:36248,RGBA_INTEGER:36249,R8:33321,RG8:33323,R16F:33325,R32F:33326,RG16F:33327,RG32F:33328,R8I:33329,R8UI:33330,R16I:33331,R16UI:33332,R32I:33333,R32UI:33334,RG8I:33335,RG8UI:33336,RG16I:33337,RG16UI:33338,RG32I:33339,RG32UI:33340,R8_SNORM:36756,RG8_SNORM:36757,RGB8_SNORM:36758,RGBA8_SNORM:36759,RGB10_A2UI:36975,TEXTURE_IMMUTABLE_FORMAT:37167,TEXTURE_IMMUTABLE_LEVELS:33503,UNSIGNED_INT_2_10_10_10_REV:33640,UNSIGNED_INT_10F_11F_11F_REV:35899,UNSIGNED_INT_5_9_9_9_REV:35902,FLOAT_32_UNSIGNED_INT_24_8_REV:36269,UNSIGNED_INT_24_8:34042,HALF_FLOAT:5131,RG:33319,RG_INTEGER:33320,INT_2_10_10_10_REV:36255,CURRENT_QUERY:34917,QUERY_RESULT:34918,QUERY_RESULT_AVAILABLE:34919,ANY_SAMPLES_PASSED:35887,ANY_SAMPLES_PASSED_CONSERVATIVE:36202,MAX_DRAW_BUFFERS:34852,DRAW_BUFFER0:34853,DRAW_BUFFER1:34854,DRAW_BUFFER2:34855,DRAW_BUFFER3:34856,DRAW_BUFFER4:34857,DRAW_BUFFER5:34858,DRAW_BUFFER6:34859,DRAW_BUFFER7:34860,DRAW_BUFFER8:34861,DRAW_BUFFER9:34862,DRAW_BUFFER10:34863,DRAW_BUFFER11:34864,DRAW_BUFFER12:34865,DRAW_BUFFER13:34866,DRAW_BUFFER14:34867,DRAW_BUFFER15:34868,MAX_COLOR_ATTACHMENTS:36063,COLOR_ATTACHMENT1:36065,COLOR_ATTACHMENT2:36066,COLOR_ATTACHMENT3:36067,COLOR_ATTACHMENT4:36068,COLOR_ATTACHMENT5:36069,COLOR_ATTACHMENT6:36070,COLOR_ATTACHMENT7:36071,COLOR_ATTACHMENT8:36072,COLOR_ATTACHMENT9:36073,COLOR_ATTACHMENT10:36074,COLOR_ATTACHMENT11:36075,COLOR_ATTACHMENT12:36076,COLOR_ATTACHMENT13:36077,COLOR_ATTACHMENT14:36078,COLOR_ATTACHMENT15:36079,SAMPLER_3D:35679,SAMPLER_2D_SHADOW:35682,SAMPLER_2D_ARRAY:36289,SAMPLER_2D_ARRAY_SHADOW:36292,SAMPLER_CUBE_SHADOW:36293,INT_SAMPLER_2D:36298,INT_SAMPLER_3D:36299,INT_SAMPLER_CUBE:36300,INT_SAMPLER_2D_ARRAY:36303,UNSIGNED_INT_SAMPLER_2D:36306,UNSIGNED_INT_SAMPLER_3D:36307,UNSIGNED_INT_SAMPLER_CUBE:36308,UNSIGNED_INT_SAMPLER_2D_ARRAY:36311,MAX_SAMPLES:36183,SAMPLER_BINDING:35097,PIXEL_PACK_BUFFER:35051,PIXEL_UNPACK_BUFFER:35052,PIXEL_PACK_BUFFER_BINDING:35053,PIXEL_UNPACK_BUFFER_BINDING:35055,COPY_READ_BUFFER:36662,COPY_WRITE_BUFFER:36663,COPY_READ_BUFFER_BINDING:36662,COPY_WRITE_BUFFER_BINDING:36663,FLOAT_MAT2x3:35685,FLOAT_MAT2x4:35686,FLOAT_MAT3x2:35687,FLOAT_MAT3x4:35688,FLOAT_MAT4x2:35689,FLOAT_MAT4x3:35690,UNSIGNED_INT_VEC2:36294,UNSIGNED_INT_VEC3:36295,UNSIGNED_INT_VEC4:36296,UNSIGNED_NORMALIZED:35863,SIGNED_NORMALIZED:36764,VERTEX_ATTRIB_ARRAY_INTEGER:35069,VERTEX_ATTRIB_ARRAY_DIVISOR:35070,TRANSFORM_FEEDBACK_BUFFER_MODE:35967,MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS:35968,TRANSFORM_FEEDBACK_VARYINGS:35971,TRANSFORM_FEEDBACK_BUFFER_START:35972,TRANSFORM_FEEDBACK_BUFFER_SIZE:35973,TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN:35976,MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS:35978,MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS:35979,INTERLEAVED_ATTRIBS:35980,SEPARATE_ATTRIBS:35981,TRANSFORM_FEEDBACK_BUFFER:35982,TRANSFORM_FEEDBACK_BUFFER_BINDING:35983,TRANSFORM_FEEDBACK:36386,TRANSFORM_FEEDBACK_PAUSED:36387,TRANSFORM_FEEDBACK_ACTIVE:36388,TRANSFORM_FEEDBACK_BINDING:36389,FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING:33296,FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE:33297,FRAMEBUFFER_ATTACHMENT_RED_SIZE:33298,FRAMEBUFFER_ATTACHMENT_GREEN_SIZE:33299,FRAMEBUFFER_ATTACHMENT_BLUE_SIZE:33300,FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE:33301,FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE:33302,FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE:33303,FRAMEBUFFER_DEFAULT:33304,DEPTH24_STENCIL8:35056,DRAW_FRAMEBUFFER_BINDING:36006,READ_FRAMEBUFFER_BINDING:36010,RENDERBUFFER_SAMPLES:36011,FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER:36052,FRAMEBUFFER_INCOMPLETE_MULTISAMPLE:36182,UNIFORM_BUFFER:35345,UNIFORM_BUFFER_BINDING:35368,UNIFORM_BUFFER_START:35369,UNIFORM_BUFFER_SIZE:35370,MAX_VERTEX_UNIFORM_BLOCKS:35371,MAX_FRAGMENT_UNIFORM_BLOCKS:35373,MAX_COMBINED_UNIFORM_BLOCKS:35374,MAX_UNIFORM_BUFFER_BINDINGS:35375,MAX_UNIFORM_BLOCK_SIZE:35376,MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS:35377,MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS:35379,UNIFORM_BUFFER_OFFSET_ALIGNMENT:35380,ACTIVE_UNIFORM_BLOCKS:35382,UNIFORM_TYPE:35383,UNIFORM_SIZE:35384,UNIFORM_BLOCK_INDEX:35386,UNIFORM_OFFSET:35387,UNIFORM_ARRAY_STRIDE:35388,UNIFORM_MATRIX_STRIDE:35389,UNIFORM_IS_ROW_MAJOR:35390,UNIFORM_BLOCK_BINDING:35391,UNIFORM_BLOCK_DATA_SIZE:35392,UNIFORM_BLOCK_ACTIVE_UNIFORMS:35394,UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES:35395,UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER:35396,UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER:35398,OBJECT_TYPE:37138,SYNC_CONDITION:37139,SYNC_STATUS:37140,SYNC_FLAGS:37141,SYNC_FENCE:37142,SYNC_GPU_COMMANDS_COMPLETE:37143,UNSIGNALED:37144,SIGNALED:37145,ALREADY_SIGNALED:37146,TIMEOUT_EXPIRED:37147,CONDITION_SATISFIED:37148,WAIT_FAILED:37149,SYNC_FLUSH_COMMANDS_BIT:1,COLOR:6144,DEPTH:6145,STENCIL:6146,MIN:32775,MAX:32776,DEPTH_COMPONENT24:33190,STREAM_READ:35041,STREAM_COPY:35042,STATIC_READ:35045,STATIC_COPY:35046,DYNAMIC_READ:35049,DYNAMIC_COPY:35050,DEPTH_COMPONENT32F:36012,DEPTH32F_STENCIL8:36013,INVALID_INDEX:4294967295,TIMEOUT_IGNORED:-1,MAX_CLIENT_WAIT_TIMEOUT_WEBGL:37447,VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE:35070,UNMASKED_VENDOR_WEBGL:37445,UNMASKED_RENDERER_WEBGL:37446,MAX_TEXTURE_MAX_ANISOTROPY_EXT:34047,TEXTURE_MAX_ANISOTROPY_EXT:34046,COMPRESSED_RGB_S3TC_DXT1_EXT:33776,COMPRESSED_RGBA_S3TC_DXT1_EXT:33777,COMPRESSED_RGBA_S3TC_DXT3_EXT:33778,COMPRESSED_RGBA_S3TC_DXT5_EXT:33779,COMPRESSED_R11_EAC:37488,COMPRESSED_SIGNED_R11_EAC:37489,COMPRESSED_RG11_EAC:37490,COMPRESSED_SIGNED_RG11_EAC:37491,COMPRESSED_RGB8_ETC2:37492,COMPRESSED_RGBA8_ETC2_EAC:37493,COMPRESSED_SRGB8_ETC2:37494,COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:37495,COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2:37496,COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2:37497,COMPRESSED_RGB_PVRTC_4BPPV1_IMG:35840,COMPRESSED_RGBA_PVRTC_4BPPV1_IMG:35842,COMPRESSED_RGB_PVRTC_2BPPV1_IMG:35841,COMPRESSED_RGBA_PVRTC_2BPPV1_IMG:35843,COMPRESSED_RGB_ETC1_WEBGL:36196,COMPRESSED_RGB_ATC_WEBGL:35986,COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL:35986,COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL:34798,UNSIGNED_INT_24_8_WEBGL:34042,HALF_FLOAT_OES:36193,RGBA32F_EXT:34836,RGB32F_EXT:34837,FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE_EXT:33297,UNSIGNED_NORMALIZED_EXT:35863,MIN_EXT:32775,MAX_EXT:32776,SRGB_EXT:35904,SRGB_ALPHA_EXT:35906,SRGB8_ALPHA8_EXT:35907,FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT:33296,FRAGMENT_SHADER_DERIVATIVE_HINT_OES:35723,COLOR_ATTACHMENT0_WEBGL:36064,COLOR_ATTACHMENT1_WEBGL:36065,COLOR_ATTACHMENT2_WEBGL:36066,COLOR_ATTACHMENT3_WEBGL:36067,COLOR_ATTACHMENT4_WEBGL:36068,COLOR_ATTACHMENT5_WEBGL:36069,COLOR_ATTACHMENT6_WEBGL:36070,COLOR_ATTACHMENT7_WEBGL:36071,COLOR_ATTACHMENT8_WEBGL:36072,COLOR_ATTACHMENT9_WEBGL:36073,COLOR_ATTACHMENT10_WEBGL:36074,COLOR_ATTACHMENT11_WEBGL:36075,COLOR_ATTACHMENT12_WEBGL:36076,COLOR_ATTACHMENT13_WEBGL:36077,COLOR_ATTACHMENT14_WEBGL:36078,COLOR_ATTACHMENT15_WEBGL:36079,DRAW_BUFFER0_WEBGL:34853,DRAW_BUFFER1_WEBGL:34854,DRAW_BUFFER2_WEBGL:34855,DRAW_BUFFER3_WEBGL:34856,DRAW_BUFFER4_WEBGL:34857,DRAW_BUFFER5_WEBGL:34858,DRAW_BUFFER6_WEBGL:34859,DRAW_BUFFER7_WEBGL:34860,DRAW_BUFFER8_WEBGL:34861,DRAW_BUFFER9_WEBGL:34862,DRAW_BUFFER10_WEBGL:34863,DRAW_BUFFER11_WEBGL:34864,DRAW_BUFFER12_WEBGL:34865,DRAW_BUFFER13_WEBGL:34866,DRAW_BUFFER14_WEBGL:34867,DRAW_BUFFER15_WEBGL:34868,MAX_COLOR_ATTACHMENTS_WEBGL:36063,MAX_DRAW_BUFFERS_WEBGL:34852,VERTEX_ARRAY_BINDING_OES:34229,QUERY_COUNTER_BITS_EXT:34916,CURRENT_QUERY_EXT:34917,QUERY_RESULT_EXT:34918,QUERY_RESULT_AVAILABLE_EXT:34919,TIME_ELAPSED_EXT:35007,TIMESTAMP_EXT:36392,GPU_DISJOINT_EXT:36795}},\n \"70a2bb70ef\": function _(t,e,r){var n,o=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)e.hasOwnProperty(r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),i=t(\"@bokehjs/models/widgets/markup\");var a=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.render=function(){t.prototype.render.call(this);var e,r=(e=this.model.text,(new DOMParser).parseFromString(e,\"text/html\").documentElement.textContent)||this.model.text;r?(this.markup_el.innerHTML=r,Array.from(this.markup_el.querySelectorAll(\"script\")).forEach(function(t){var e=document.createElement(\"script\");Array.from(t.attributes).forEach(function(t){return e.setAttribute(t.name,t.value)}),e.appendChild(document.createTextNode(t.innerHTML)),t.parentNode&&t.parentNode.replaceChild(e,t)})):this.markup_el.innerHTML=\"\"},e.__name__=\"HTMLView\",e}(t(\"ec60963462\").PanelMarkupView);r.HTMLView=a;var u=function(t){function e(e){return t.call(this,e)||this}return o(e,t),e.init_HTML=function(){this.prototype.default_view=a},e.__name__=\"HTML\",e.__module__=\"panel.models.markup\",e}(i.Markup);r.HTML=u,u.init_HTML()},\n \"dac8d750fa\": function _(e,t,r){var n,o=this&&this.__extends||(n=function(e,t){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])})(e,t)},function(e,t){function r(){this.constructor=e}n(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}},u=i(e(\"@bokehjs/core/properties\")),s=e(\"@bokehjs/models/widgets/markup\"),p=a(e(\"cb07e54f5a\")),l=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return o(t,e),t.prototype.render=function(){e.prototype.render.call(this);var t,r=this.model.text.replace(/(\\r\\n|\\n|\\r)/gm,\"\").replace(\"'\",'\"');try{t=window.JSON.parse(r)}catch(e){return void(this.markup_el.innerHTML=\"Invalid JSON: \"+e.toString())}var n={hoverPreviewEnabled:this.model.hover_preview,theme:this.model.theme},o=new p.default(t,this.model.depth,n).render(),i=\"border-radius: 5px; padding: 10px;\";\"dark\"==this.model.theme?o.style.cssText=\"background-color: rgb(30, 30, 30);\"+i:o.style.cssText=i,this.markup_el.append(o)},t.__name__=\"JSONView\",t}(e(\"ec60963462\").PanelMarkupView);r.JSONView=l;var _=[\"dark\",\"light\"],h=function(e){function t(t){return e.call(this,t)||this}return o(t,e),t.init_JSON=function(){this.prototype.default_view=l,this.define({depth:[u.Number,1],hover_preview:[u.Boolean,!1],theme:[u.Enum(_),\"dark\"]})},t.__name__=\"JSON\",t.__module__=\"panel.models.markup\",t}(s.Markup);r.JSON=h,h.init_JSON()},\n \"cb07e54f5a\": function _(t,e,r){function n(t){return null===t?\"null\":typeof t}function o(t){return!!t&&\"object\"==typeof t}function i(t){if(void 0===t)return\"\";if(null===t)return\"Object\";if(\"object\"==typeof t&&!t.constructor)return\"Object\";var e=/function ([^(]*)/.exec(t.constructor.toString());return e&&e.length>1?e[1]:\"\"}function s(t,e,r){return\"null\"===t||\"undefined\"===t?t:(\"string\"!==t&&\"stringifiable\"!==t||(r='\"'+function(t){return t.replace(/\"/g,'\\\\\"')}(r)+'\"'),\"function\"===t?e.toString().replace(/[\\r\\n]/g,\"\").replace(/\\{.*\\}/,\"\")+\"{…}\":r)}function a(t){var e=\"\";return o(t)?(e=i(t),Array.isArray(t)&&(e+=\"[\"+t.length+\"]\")):e=s(n(t),t,t),e}function f(t){return\"json-formatter-\"+t}function m(t,e,r){var n=document.createElement(t);return e&&n.classList.add(f(e)),void 0!==r&&(r instanceof Node?n.appendChild(r):n.appendChild(document.createTextNode(String(r)))),n}!function(t){if(t&&\"undefined\"!=typeof window){var e=document.createElement(\"style\");e.setAttribute(\"media\",\"screen\"),e.innerHTML=t,document.head.appendChild(e)}}('.json-formatter-row {\\n font-family: monospace;\\n}\\n.json-formatter-row,\\n.json-formatter-row a,\\n.json-formatter-row a:hover {\\n color: black;\\n text-decoration: none;\\n}\\n.json-formatter-row .json-formatter-row {\\n margin-left: 1rem;\\n}\\n.json-formatter-row .json-formatter-children.json-formatter-empty {\\n opacity: 0.5;\\n margin-left: 1rem;\\n}\\n.json-formatter-row .json-formatter-children.json-formatter-empty:after {\\n display: none;\\n}\\n.json-formatter-row .json-formatter-children.json-formatter-empty.json-formatter-object:after {\\n content: \"No properties\";\\n}\\n.json-formatter-row .json-formatter-children.json-formatter-empty.json-formatter-array:after {\\n content: \"[]\";\\n}\\n.json-formatter-row .json-formatter-string,\\n.json-formatter-row .json-formatter-stringifiable {\\n color: green;\\n white-space: pre;\\n word-wrap: break-word;\\n}\\n.json-formatter-row .json-formatter-number {\\n color: blue;\\n}\\n.json-formatter-row .json-formatter-boolean {\\n color: red;\\n}\\n.json-formatter-row .json-formatter-null {\\n color: #855A00;\\n}\\n.json-formatter-row .json-formatter-undefined {\\n color: #ca0b69;\\n}\\n.json-formatter-row .json-formatter-function {\\n color: #FF20ED;\\n}\\n.json-formatter-row .json-formatter-date {\\n background-color: rgba(0, 0, 0, 0.05);\\n}\\n.json-formatter-row .json-formatter-url {\\n text-decoration: underline;\\n color: blue;\\n cursor: pointer;\\n}\\n.json-formatter-row .json-formatter-bracket {\\n color: blue;\\n}\\n.json-formatter-row .json-formatter-key {\\n color: #00008B;\\n padding-right: 0.2rem;\\n}\\n.json-formatter-row .json-formatter-toggler-link {\\n cursor: pointer;\\n}\\n.json-formatter-row .json-formatter-toggler {\\n line-height: 1.2rem;\\n font-size: 0.7rem;\\n vertical-align: middle;\\n opacity: 0.6;\\n cursor: pointer;\\n padding-right: 0.2rem;\\n}\\n.json-formatter-row .json-formatter-toggler:after {\\n display: inline-block;\\n transition: transform 100ms ease-in;\\n content: \"►\";\\n}\\n.json-formatter-row > a > .json-formatter-preview-text {\\n opacity: 0;\\n transition: opacity 0.15s ease-in;\\n font-style: italic;\\n}\\n.json-formatter-row:hover > a > .json-formatter-preview-text {\\n opacity: 0.6;\\n}\\n.json-formatter-row.json-formatter-open > .json-formatter-toggler-link .json-formatter-toggler:after {\\n transform: rotate(90deg);\\n}\\n.json-formatter-row.json-formatter-open > .json-formatter-children:after {\\n display: inline-block;\\n}\\n.json-formatter-row.json-formatter-open > a > .json-formatter-preview-text {\\n display: none;\\n}\\n.json-formatter-row.json-formatter-open.json-formatter-empty:after {\\n display: block;\\n}\\n.json-formatter-dark.json-formatter-row {\\n font-family: monospace;\\n}\\n.json-formatter-dark.json-formatter-row,\\n.json-formatter-dark.json-formatter-row a,\\n.json-formatter-dark.json-formatter-row a:hover {\\n color: white;\\n text-decoration: none;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-row {\\n margin-left: 1rem;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-children.json-formatter-empty {\\n opacity: 0.5;\\n margin-left: 1rem;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-children.json-formatter-empty:after {\\n display: none;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-children.json-formatter-empty.json-formatter-object:after {\\n content: \"No properties\";\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-children.json-formatter-empty.json-formatter-array:after {\\n content: \"[]\";\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-string,\\n.json-formatter-dark.json-formatter-row .json-formatter-stringifiable {\\n color: #31F031;\\n white-space: pre;\\n word-wrap: break-word;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-number {\\n color: #66C2FF;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-boolean {\\n color: #EC4242;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-null {\\n color: #EEC97D;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-undefined {\\n color: #ef8fbe;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-function {\\n color: #FD48CB;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-date {\\n background-color: rgba(255, 255, 255, 0.05);\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-url {\\n text-decoration: underline;\\n color: #027BFF;\\n cursor: pointer;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-bracket {\\n color: #9494FF;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-key {\\n color: #23A0DB;\\n padding-right: 0.2rem;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-toggler-link {\\n cursor: pointer;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-toggler {\\n line-height: 1.2rem;\\n font-size: 0.7rem;\\n vertical-align: middle;\\n opacity: 0.6;\\n cursor: pointer;\\n padding-right: 0.2rem;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-toggler:after {\\n display: inline-block;\\n transition: transform 100ms ease-in;\\n content: \"►\";\\n}\\n.json-formatter-dark.json-formatter-row > a > .json-formatter-preview-text {\\n opacity: 0;\\n transition: opacity 0.15s ease-in;\\n font-style: italic;\\n}\\n.json-formatter-dark.json-formatter-row:hover > a > .json-formatter-preview-text {\\n opacity: 0.6;\\n}\\n.json-formatter-dark.json-formatter-row.json-formatter-open > .json-formatter-toggler-link .json-formatter-toggler:after {\\n transform: rotate(90deg);\\n}\\n.json-formatter-dark.json-formatter-row.json-formatter-open > .json-formatter-children:after {\\n display: inline-block;\\n}\\n.json-formatter-dark.json-formatter-row.json-formatter-open > a > .json-formatter-preview-text {\\n display: none;\\n}\\n.json-formatter-dark.json-formatter-row.json-formatter-open.json-formatter-empty:after {\\n display: block;\\n}\\n');var l=/(^\\d{1,4}[\\.|\\\\/|-]\\d{1,2}[\\.|\\\\/|-]\\d{1,4})(\\s*(?:0?[1-9]:[0-5]|1(?=[012])\\d:[0-5])\\d\\s*[ap]m)?$/,d=/\\d{2}:\\d{2}:\\d{2} GMT-\\d{4}/,c=/\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}.\\d{3}Z/,p=window.requestAnimationFrame||function(t){return t(),0},j={hoverPreviewEnabled:!1,hoverPreviewArrayCount:100,hoverPreviewFieldCount:5,animateOpen:!0,animateClose:!0,theme:null,useToJSON:!0,sortPropertiesBy:null},h=function(){function t(t,e,r,n){void 0===e&&(e=1),void 0===r&&(r=j),this.json=t,this.open=e,this.config=r,this.key=n,this._isOpen=null,void 0===this.config.hoverPreviewEnabled&&(this.config.hoverPreviewEnabled=j.hoverPreviewEnabled),void 0===this.config.hoverPreviewArrayCount&&(this.config.hoverPreviewArrayCount=j.hoverPreviewArrayCount),void 0===this.config.hoverPreviewFieldCount&&(this.config.hoverPreviewFieldCount=j.hoverPreviewFieldCount),void 0===this.config.useToJSON&&(this.config.useToJSON=j.useToJSON),\"\"===this.key&&(this.key='\"\"')}return Object.defineProperty(t.prototype,\"isOpen\",{get:function(){return null!==this._isOpen?this._isOpen:this.open>0},set:function(t){this._isOpen=t},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"isDate\",{get:function(){return this.json instanceof Date||\"string\"===this.type&&(l.test(this.json)||c.test(this.json)||d.test(this.json))},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"isUrl\",{get:function(){return\"string\"===this.type&&0===this.json.indexOf(\"http\")},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"isArray\",{get:function(){return Array.isArray(this.json)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"isObject\",{get:function(){return o(this.json)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"isEmptyObject\",{get:function(){return!this.keys.length&&!this.isArray},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"isEmpty\",{get:function(){return this.isEmptyObject||this.keys&&!this.keys.length&&this.isArray},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"useToJSON\",{get:function(){return this.config.useToJSON&&\"stringifiable\"===this.type},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"hasKey\",{get:function(){return void 0!==this.key},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"constructorName\",{get:function(){return i(this.json)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"type\",{get:function(){return this.config.useToJSON&&this.json&&this.json.toJSON?\"stringifiable\":n(this.json)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"keys\",{get:function(){if(this.isObject){var t=Object.keys(this.json);return!this.isArray&&this.config.sortPropertiesBy?t.sort(this.config.sortPropertiesBy):t}return[]},enumerable:!0,configurable:!0}),t.prototype.toggleOpen=function(){this.isOpen=!this.isOpen,this.element&&(this.isOpen?this.appendChildren(this.config.animateOpen):this.removeChildren(this.config.animateClose),this.element.classList.toggle(f(\"open\")))},t.prototype.openAtDepth=function(t){void 0===t&&(t=1),t<0||(this.open=t,this.isOpen=0!==t,this.element&&(this.removeChildren(!1),0===t?this.element.classList.remove(f(\"open\")):(this.appendChildren(this.config.animateOpen),this.element.classList.add(f(\"open\")))))},t.prototype.getInlinepreview=function(){var t=this;if(this.isArray)return this.json.length>this.config.hoverPreviewArrayCount?\"Array[\"+this.json.length+\"]\":\"[\"+this.json.map(a).join(\", \")+\"]\";var e=this.keys,r=e.slice(0,this.config.hoverPreviewFieldCount).map(function(e){return e+\":\"+a(t.json[e])}),n=e.length>=this.config.hoverPreviewFieldCount?\"…\":\"\";return\"{\"+r.join(\", \")+n+\"}\"},t.prototype.render=function(){this.element=m(\"div\",\"row\");var t=this.isObject?m(\"a\",\"toggler-link\"):m(\"span\");if(this.isObject&&!this.useToJSON&&t.appendChild(m(\"span\",\"toggler\")),this.hasKey&&t.appendChild(m(\"span\",\"key\",this.key+\":\")),this.isObject&&!this.useToJSON){var e=m(\"span\",\"value\"),r=m(\"span\"),n=m(\"span\",\"constructor-name\",this.constructorName);if(r.appendChild(n),this.isArray){var o=m(\"span\");o.appendChild(m(\"span\",\"bracket\",\"[\")),o.appendChild(m(\"span\",\"number\",this.json.length)),o.appendChild(m(\"span\",\"bracket\",\"]\")),r.appendChild(o)}e.appendChild(r),t.appendChild(e)}else{(e=this.isUrl?m(\"a\"):m(\"span\")).classList.add(f(this.type)),this.isDate&&e.classList.add(f(\"date\")),this.isUrl&&(e.classList.add(f(\"url\")),e.setAttribute(\"href\",this.json));var i=s(this.type,this.json,this.useToJSON?this.json.toJSON():this.json);e.appendChild(document.createTextNode(i)),t.appendChild(e)}if(this.isObject&&this.config.hoverPreviewEnabled){var a=m(\"span\",\"preview-text\");a.appendChild(document.createTextNode(this.getInlinepreview())),t.appendChild(a)}var l=m(\"div\",\"children\");return this.isObject&&l.classList.add(f(\"object\")),this.isArray&&l.classList.add(f(\"array\")),this.isEmpty&&l.classList.add(f(\"empty\")),this.config&&this.config.theme&&this.element.classList.add(f(this.config.theme)),this.isOpen&&this.element.classList.add(f(\"open\")),this.element.appendChild(t),this.element.appendChild(l),this.isObject&&this.isOpen&&this.appendChildren(),this.isObject&&!this.useToJSON&&t.addEventListener(\"click\",this.toggleOpen.bind(this)),this.element},t.prototype.appendChildren=function(e){var r=this;void 0===e&&(e=!1);var n=this.element.querySelector(\"div.\"+f(\"children\"));if(n&&!this.isEmpty)if(e){var o=0,i=function(){var e=r.keys[o],s=new t(r.json[e],r.open-1,r.config,e);n.appendChild(s.render()),(o+=1)10?i():p(i))};p(i)}else this.keys.forEach(function(e){var o=new t(r.json[e],r.open-1,r.config,e);n.appendChild(o.render())})},t.prototype.removeChildren=function(t){void 0===t&&(t=!1);var e=this.element.querySelector(\"div.\"+f(\"children\"));if(t){var r=0,n=function(){e&&e.children.length&&(e.removeChild(e.children[0]),(r+=1)>10?n():p(n))};p(n)}else e&&(e.innerHTML=\"\")},t}();e.exports=h},\n \"c81021c8fd\": function _(t,e,n){var i,r=this&&this.__extends||(i=function(t,e){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(t,e)},function(t,e){function n(){this.constructor=t}i(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}),o=t(\"@bokehjs/models/widgets/markup\"),a=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return r(e,t),e.prototype.render=function(){t.prototype.render.call(this),this.markup_el.innerHTML=this.model.text,window.renderMathInElement&&window.renderMathInElement(this.el,{delimiters:[{left:\"$$\",right:\"$$\",display:!0},{left:\"\\\\[\",right:\"\\\\]\",display:!0},{left:\"$\",right:\"$\",display:!1},{left:\"\\\\(\",right:\"\\\\)\",display:!1}]})},e.__name__=\"KaTeXView\",e}(t(\"ec60963462\").PanelMarkupView);n.KaTeXView=a;var l=function(t){function e(e){return t.call(this,e)||this}return r(e,t),e.init_KaTeX=function(){this.prototype.default_view=a},e.__name__=\"KaTeX\",e.__module__=\"panel.models.katex\",e}(o.Markup);n.KaTeX=l,l.init_KaTeX()},\n \"a93ded647d\": function _(t,e,n){var i,o=this&&this.__extends||(i=function(t,e){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(t,e)},function(t,e){function n(){this.constructor=t}i(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}),r=t(\"@bokehjs/models/widgets/markup\"),a=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.initialize=function(){t.prototype.initialize.call(this),this._hub=window.MathJax.Hub,this._hub.Config({tex2jax:{inlineMath:[[\"$\",\"$\"],[\"\\\\(\",\"\\\\)\"]]}})},e.prototype.render=function(){t.prototype.render.call(this),this._hub&&(this.markup_el.innerHTML=this.model.text,this._hub.Queue([\"Typeset\",this._hub,this.markup_el]))},e.__name__=\"MathJaxView\",e}(t(\"ec60963462\").PanelMarkupView);n.MathJaxView=a;var u=function(t){function e(e){return t.call(this,e)||this}return o(e,t),e.init_MathJax=function(){this.prototype.default_view=a},e.__name__=\"MathJax\",e.__module__=\"panel.models.mathjax\",e}(r.Markup);n.MathJax=u,u.init_MathJax()},\n \"98100899bc\": function _(t,e,i){var n,o=this&&this.__extends||(n=function(t,e){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var i in e)e.hasOwnProperty(i)&&(t[i]=e[i])})(t,e)},function(t,e){function i(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(i.prototype=e.prototype,new i)}),r=(this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var i in t)Object.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e.default=t,e})(t(\"@bokehjs/core/properties\")),s=t(\"@bokehjs/core/dom\"),a=t(\"@bokehjs/models/widgets/widget\"),l=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return o(e,t),e.prototype.connect_signals=function(){var e=this;t.prototype.connect_signals.call(this),this.connect(this.model.change,function(){return e.render()}),this.connect(this.model.properties.value.change,function(){return e.render()}),this.connect(this.model.properties.loop_policy.change,function(){return e.set_loop_state(e.model.loop_policy)})},e.prototype.get_height=function(){return 250},e.prototype.render=function(){var e=this;if(null!=this.sliderEl)return this.sliderEl.style.width=\"{this.model.width}px\",this.sliderEl.min=String(this.model.start),this.sliderEl.max=String(this.model.end),void(this.sliderEl.value=String(this.model.value));t.prototype.render.call(this),this.sliderEl=document.createElement(\"input\"),this.sliderEl.setAttribute(\"type\",\"range\"),this.sliderEl.style.width=this.model.width+\"px\",this.sliderEl.value=String(this.model.value),this.sliderEl.min=String(this.model.start),this.sliderEl.max=String(this.model.end),this.sliderEl.onchange=function(t){return e.set_frame(parseInt(t.target.value))};var i=s.div();i.style.cssText=\"margin: 0 auto; display: table; padding: 5px\";var n=\"text-align: center; min-width: 40px; margin: 2px\",o=document.createElement(\"button\");o.style.cssText=\"text-align: center; min-width: 20px\",o.appendChild(document.createTextNode(\"–\")),o.onclick=function(){return e.slower()},i.appendChild(o);var r=document.createElement(\"button\");r.style.cssText=n,r.appendChild(document.createTextNode(\"❚◀◀\")),r.onclick=function(){return e.first_frame()},i.appendChild(r);var a=document.createElement(\"button\");a.style.cssText=n,a.appendChild(document.createTextNode(\"❚◀\")),a.onclick=function(){return e.previous_frame()},i.appendChild(a);var l=document.createElement(\"button\");l.style.cssText=n,l.appendChild(document.createTextNode(\"◀\")),l.onclick=function(){return e.reverse_animation()},i.appendChild(l);var d=document.createElement(\"button\");d.style.cssText=n,d.appendChild(document.createTextNode(\"❚❚\")),d.onclick=function(){return e.pause_animation()},i.appendChild(d);var p=document.createElement(\"button\");p.style.cssText=n,p.appendChild(document.createTextNode(\"▶\")),p.onclick=function(){return e.play_animation()},i.appendChild(p);var c=document.createElement(\"button\");c.style.cssText=n,c.appendChild(document.createTextNode(\"▶❚\")),c.onclick=function(){return e.next_frame()},i.appendChild(c);var h=document.createElement(\"button\");h.style.cssText=n,h.appendChild(document.createTextNode(\"▶▶❚\")),h.onclick=function(){return e.last_frame()},i.appendChild(h);var u=document.createElement(\"button\");u.style.cssText=\"text-align: center; min-width: 20px\",u.appendChild(document.createTextNode(\"+\")),u.onclick=function(){return e.faster()},i.appendChild(u),this.loop_state=document.createElement(\"form\"),this.loop_state.style.cssText=\"margin: 0 auto; display: table\";var m=document.createElement(\"input\");m.type=\"radio\",m.value=\"once\",m.name=\"state\";var _=document.createElement(\"label\");_.innerHTML=\"Once\",_.style.cssText=\"padding: 0 10px 0 5px; user-select:none;\";var f=document.createElement(\"input\");f.setAttribute(\"type\",\"radio\"),f.setAttribute(\"value\",\"loop\"),f.setAttribute(\"name\",\"state\");var v=document.createElement(\"label\");v.innerHTML=\"Loop\",v.style.cssText=\"padding: 0 10px 0 5px; user-select:none;\";var y=document.createElement(\"input\");y.setAttribute(\"type\",\"radio\"),y.setAttribute(\"value\",\"reflect\"),y.setAttribute(\"name\",\"state\");var x=document.createElement(\"label\");x.innerHTML=\"Reflect\",x.style.cssText=\"padding: 0 10px 0 5px; user-select:none;\",\"once\"==this.model.loop_policy?m.checked=!0:\"loop\"==this.model.loop_policy?f.checked=!0:y.checked=!0,this.loop_state.appendChild(m),this.loop_state.appendChild(_),this.loop_state.appendChild(f),this.loop_state.appendChild(v),this.loop_state.appendChild(y),this.loop_state.appendChild(x),this.el.appendChild(this.sliderEl),this.el.appendChild(i),this.el.appendChild(this.loop_state)},e.prototype.set_frame=function(t){this.model.value!=t&&(this.model.value=t),this.sliderEl.value!=String(t)&&(this.sliderEl.value=String(t))},e.prototype.get_loop_state=function(){for(var t=this.loop_state.state,e=0;e0?this.play_animation():this.model.direction<0&&this.reverse_animation()},e.prototype.faster=function(){this.model.interval=Math.round(.7*this.model.interval),this.model.direction>0?this.play_animation():this.model.direction<0&&this.reverse_animation()},e.prototype.anim_step_forward=function(){if(this.model.valuethis.model.start)this.previous_frame();else{var t=this.get_loop_state();\"loop\"==t?this.last_frame():\"reflect\"==t?(this.first_frame(),this.play_animation()):(this.pause_animation(),this.first_frame())}},e.prototype.pause_animation=function(){this.model.direction=0,this.timer&&(clearInterval(this.timer),this.timer=null)},e.prototype.play_animation=function(){var t=this;this.pause_animation(),this.model.direction=1,this.timer||(this.timer=setInterval(function(){return t.anim_step_forward()},this.model.interval))},e.prototype.reverse_animation=function(){var t=this;this.pause_animation(),this.model.direction=-1,this.timer||(this.timer=setInterval(function(){return t.anim_step_reverse()},this.model.interval))},e.__name__=\"PlayerView\",e}(a.WidgetView);i.PlayerView=l;var d=function(t){function e(e){return t.call(this,e)||this}return o(e,t),e.init_Player=function(){this.prototype.default_view=l,this.define({direction:[r.Number,0],interval:[r.Number,500],start:[r.Number],end:[r.Number],step:[r.Number,1],loop_policy:[r.Any,\"once\"],value:[r.Any,0]}),this.override({width:400})},e.__name__=\"Player\",e.__module__=\"panel.models.widgets\",e}(a.Widget);i.Player=d,d.init_Player()},\n \"d46f026c83\": function _(t,e,o){var r,n=this&&this.__extends||(r=function(t,e){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var o in e)e.hasOwnProperty(o)&&(t[o]=e[o])})(t,e)},function(t,e){function o(){this.constructor=t}r(t,e),t.prototype=null===e?Object.create(e):(o.prototype=e.prototype,new o)}),i=(this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var o in t)Object.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e.default=t,e})(t(\"@bokehjs/core/properties\")),l=t(\"@bokehjs/core/util/object\"),a=t(\"@bokehjs/core/util/eq\"),p=t(\"@bokehjs/models/layouts/html_box\"),s=t(\"99a25e6992\"),u=t(\"62ba79515f\"),c=t(\"ec60963462\"),_=window.Plotly,d=function(t,e,o){var r=Array.isArray(e)?[]:{};if(\"click\"===o||\"hover\"===o||\"selected\"===o){var n=[];if(null==e)return null;for(var i=t.data,l=0;l1){for(var u=[],c=0;c=0?t=setTimeout(i,l-c):(t=null,u||(r=n.apply(o,e),o=e=null))}null==l&&(l=100);var c=function(){o=this,e=arguments,a=Date.now();var c=u&&!t;return t||(t=setTimeout(i,l)),c&&(r=n.apply(o,e),o=e=null),r};return c.clear=function(){t&&(clearTimeout(t),t=null)},c.flush=function(){t&&(r=n.apply(o,e),o=e=null,clearTimeout(t),t=null)},c}t.debounce=t,l.exports=t},\n \"62ba79515f\": function _(t,r,n){n.get=function(t,r,n){void 0===n&&(n=void 0);var e=function(n){return String.prototype.split.call(r,n).filter(Boolean).reduce(function(t,r){return null!=t?t[r]:t},t)},o=e(/[,[\\]]+?/)||e(/[,[\\].]+?/);return void 0===o||o===t?n:o},n.throttle=function(t,r){var n=0;return function(){var e=Number(new Date);e-n>=r&&(t(),n=e)}},n.deepCopy=function t(r){var n;if(null==r||\"object\"!=typeof r)return r;if(r instanceof Array){n=[];for(var e=0,o=r.length;e0){var t=this._fetch_datasets();if(\"data\"in t&&(this.model.data.data.values=t.data,delete t.data),void 0!==this.model.data.data)for(var e=0,o=this.model.data.data;e0&&(this.timer=setInterval(function(){return t.snapshot()},this.model.timeout))},e.prototype.snapshot=function(){this.canvasEl.width=this.videoEl.videoWidth,this.canvasEl.height=this.videoEl.videoHeight;var t=this.canvasEl.getContext(\"2d\");t&&t.drawImage(this.videoEl,0,0,this.canvasEl.width,this.canvasEl.height),this.model.value=this.canvasEl.toDataURL(\"image/\"+this.model.format,.95)},e.prototype.remove=function(){t.prototype.remove.call(this),this.timer&&(clearInterval(this.timer),this.timer=null)},e.prototype.render=function(){var e=this;t.prototype.render.call(this),this.videoEl||(this.videoEl=document.createElement(\"video\"),this.model.sizing_mode&&\"fixed\"!==this.model.sizing_mode||(this.model.height&&(this.videoEl.height=this.model.height),this.model.width&&(this.videoEl.width=this.model.width)),this.videoEl.style.objectFit=\"fill\",this.videoEl.style.minWidth=\"100%\",this.videoEl.style.minHeight=\"100%\",this.canvasEl=document.createElement(\"canvas\"),this.el.appendChild(this.videoEl),navigator.mediaDevices.getUserMedia&&navigator.mediaDevices.getUserMedia(this.constraints).then(function(t){e.videoEl.srcObject=t,e.model.paused||e.videoEl.play()}).catch(console.error))},e.__name__=\"VideoStreamView\",e}(t(\"ec60963462\").PanelHTMLBoxView);i.VideoStreamView=h;var a=function(t){function e(e){return t.call(this,e)||this}return n(e,t),e.init_VideoStream=function(){this.prototype.default_view=h,this.define({format:[s.String,\"png\"],paused:[s.Boolean,!1],snapshot:[s.Boolean,!1],timeout:[s.Number,0],value:[s.Any]}),this.override({height:240,width:320})},e.__name__=\"VideoStream\",e.__module__=\"panel.models.widgets\",e}(r.HTMLBox);i.VideoStream=a,a.init_VideoStream()},\n \"63070bc9ce\": function _(V,o,e){var l=V(\"1a4b530306\");e.VTKPlot=l.VTKPlot;var K=V(\"b933e81f56\");e.VTKVolumePlot=K.VTKVolumePlot;var T=V(\"5bc27423fe\");e.VTKAxes=T.VTKAxes},\n \"1a4b530306\": function _(e,t,n){var i,o=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),r=(this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t})(e(\"@bokehjs/core/properties\")),a=e(\"@bokehjs/core/dom\"),s=e(\"7620c2cc05\"),c=e(\"3b847a648d\"),d=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t._axes_initialized=!1,t}return o(t,e),t.prototype.connect_signals=function(){var t=this;e.prototype.connect_signals.call(this),this.connect(this.model.properties.axes.change,function(){t._delete_axes(),t.model.axes&&t._set_axes(),t._vtk_renwin.getRenderWindow().render()}),this.el.addEventListener(\"mouseenter\",function(){var e=t._vtk_renwin.getInteractor();t.model.enable_keybindings&&(document.querySelector(\"body\").addEventListener(\"keypress\",e.handleKeyPress),document.querySelector(\"body\").addEventListener(\"keydown\",e.handleKeyDown),document.querySelector(\"body\").addEventListener(\"keyup\",e.handleKeyUp))}),this.el.addEventListener(\"mouseleave\",function(){var e=t._vtk_renwin.getInteractor();document.querySelector(\"body\").removeEventListener(\"keypress\",e.handleKeyPress),document.querySelector(\"body\").removeEventListener(\"keydown\",e.handleKeyDown),document.querySelector(\"body\").removeEventListener(\"keyup\",e.handleKeyUp)})},t.prototype.render=function(){e.prototype.render.call(this),this._axes=null,this._axes_initialized=!1,this._plot()},t.prototype.after_layout=function(){this._axes_initialized||(this._render_axes_canvas(),this._axes_initialized=!0)},t.prototype._render_axes_canvas=function(){var e=this,t=this._vtk_container.getElementsByTagName(\"canvas\");if(1!=t.length)throw Error(\"Error at initialization of the 3D scene, container should have one and only one canvas\");t[0].classList.add(\"scene3d-canvas\");var n=a.canvas({style:{position:\"absolute\",top:\"0\",left:\"0\",width:\"100%\",height:\"100%\"}});n.classList.add(\"axes-canvas\"),this._vtk_container.appendChild(n),this._vtk_renwin.setResizeCallback(function(){var t=e._vtk_container.getBoundingClientRect(),i=Math.floor(t.width*window.devicePixelRatio),o=Math.floor(t.height*window.devicePixelRatio);n.setAttribute(\"width\",i.toFixed()),n.setAttribute(\"height\",o.toFixed())})},t.prototype._delete_axes=function(){var e=this;if(null!=this._axes){Object.keys(this._axes).forEach(function(t){return e._vtk_renwin.getRenderer().removeActor(e._axes[t])});var t=this._vtk_renwin.getContainer().getElementsByClassName(\"axes-canvas\")[0],n=t.getContext(\"2d\");n&&n.clearRect(0,0,t.clientWidth*window.devicePixelRatio,t.clientHeight*window.devicePixelRatio),this._axes=null}},t.prototype._set_axes=function(){if(this.model.axes){var e=this._vtk_renwin.getContainer().getElementsByClassName(\"axes-canvas\")[0],t=this.model.axes.create_axes(e),n=t.psActor,i=t.axesActor,o=t.gridActor;this._axes={psActor:n,axesActor:i,gridActor:o},this._vtk_renwin.getRenderer().addActor(n),this._vtk_renwin.getRenderer().addActor(i),this._vtk_renwin.getRenderer().addActor(o)}},t.prototype._plot=function(){var e=this;if(this.model.data)var t=c.vtkns.DataAccessHelper.get(\"zip\",{zipContent:atob(this.model.data),callback:function(n){var i=c.vtkns.HttpSceneLoader.newInstance({renderer:e._vtk_renwin.getRenderer(),dataAccessHelper:t}),o=c.vtk.macro.debounce(function(){null==e._axes&&e.model.axes&&e._set_axes(),e.model.properties.camera.change.emit()},100);i.setUrl(\"index.json\"),i.onReady(o)}});else this._vtk_renwin.getRenderWindow().render()},t.__name__=\"VTKPlotView\",t}(s.AbstractVTKView);n.VTKPlotView=d;var l=function(e){function t(t){var n=e.call(this,t)||this;n.outline=c.vtkns.OutlineFilter.newInstance();var i=c.vtkns.Mapper.newInstance();return i.setInputConnection(n.outline.getOutputPort()),n.outline_actor=c.vtkns.Actor.newInstance(),n.outline_actor.setMapper(i),n}return o(t,e),t.init_VTKPlot=function(){this.prototype.default_view=d,this.define({data:[r.String],axes:[r.Instance],enable_keybindings:[r.Boolean,!1]})},t.__name__=\"VTKPlot\",t}(s.AbstractVTKPlot);n.VTKPlot=l,l.init_VTKPlot()},\n \"7620c2cc05\": function _(e,t,n){var i,r=this&&this.__extends||(i=function(e,t){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function n(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),o=(this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t})(e(\"@bokehjs/core/properties\")),a=e(\"@bokehjs/core/dom\"),s=e(\"@bokehjs/core/util/object\"),_=e(\"@bokehjs/models/layouts/html_box\"),c=e(\"ec60963462\"),d=e(\"3b847a648d\"),h=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t._setting_camera=!1,t}return r(t,e),t.prototype.connect_signals=function(){var t=this;e.prototype.connect_signals.call(this),this.connect(this.model.properties.data.change,function(){t.invalidate_render()}),this.connect(this.model.properties.orientation_widget.change,function(){t._orientation_widget_visibility(t.model.orientation_widget)}),this.connect(this.model.properties.camera.change,function(){return t._set_camera_state()})},t.prototype._orientation_widget_visibility=function(e){this._orientationWidget.setEnabled(e),e?this._widgetManager.enablePicking():this._widgetManager.disablePicking(),this._orientationWidget.updateMarkerOrientation(),this._vtk_renwin.getRenderWindow().render()},t.prototype._create_orientation_widget=function(){var e=this,t=d.vtkns.AxesActor.newInstance(),n=d.vtkns.OrientationMarkerWidget.newInstance({actor:t,interactor:this._vtk_renwin.getInteractor()});n.setEnabled(!0),n.setViewportCorner(d.vtkns.OrientationMarkerWidget.Corners.BOTTOM_RIGHT),n.setViewportSize(.15),n.setMinPixelSize(100),n.setMaxPixelSize(300),this._orientationWidget=n;var i=d.vtkns.WidgetManager.newInstance();i.setRenderer(n.getRenderer());var r=d.vtkns.InteractiveOrientationWidget.newInstance();r.placeWidget(t.getBounds()),r.setBounds(t.getBounds()),r.setPlaceFactor(1);var o=i.addWidget(r);this._widgetManager=i,o.onOrientationChange(function(t){var n=t.direction,i=e._vtk_renwin.getRenderer().getActiveCamera(),r=i.getFocalPoint(),o=i.getPosition(),a=i.getViewUp(),s=Math.sqrt(Math.pow(o[0]-r[0],2)+Math.pow(o[1]-r[1],2)+Math.pow(o[2]-r[2],2));i.setPosition(r[0]+n[0]*s,r[1]+n[1]*s,r[2]+n[2]*s),n[0]&&i.setViewUp(d.majorAxis(a,1,2)),n[1]&&i.setViewUp(d.majorAxis(a,0,2)),n[2]&&i.setViewUp(d.majorAxis(a,0,1)),e._orientationWidget.updateMarkerOrientation(),e._vtk_renwin.getRenderer().resetCameraClippingRange(),e._vtk_renwin.getRenderWindow().render()}),this._orientation_widget_visibility(this.model.orientation_widget)},t.prototype._get_camera_state=function(){if(!this._setting_camera){this._setting_camera=!0;var e=s.clone(this._vtk_renwin.getRenderer().getActiveCamera().get());delete e.classHierarchy,delete e.vtkObject,delete e.vtkCamera,delete e.viewPlaneNormal,this.model.camera=e,this._setting_camera=!1}},t.prototype._set_camera_state=function(){if(!this._setting_camera){this._setting_camera=!0;try{this.model.camera&&this._vtk_renwin.getRenderer().getActiveCamera().set(this.model.camera)}finally{this._setting_camera=!1}this._orientationWidget.updateMarkerOrientation(),this._vtk_renwin.getRenderer().resetCameraClippingRange(),this._vtk_renwin.getRenderWindow().render()}},t.prototype.render=function(){var t=this;e.prototype.render.call(this),this._orientationWidget=null,this._vtk_container=a.div(),c.set_size(this._vtk_container,this.model),this.el.appendChild(this._vtk_container),this._vtk_renwin=d.vtkns.FullScreenRenderWindow.newInstance({rootContainer:this.el,container:this._vtk_container}),this._remove_default_key_binding(),this._create_orientation_widget(),this._vtk_renwin.getRenderer().getActiveCamera().onModified(function(){return t._get_camera_state()}),this._set_camera_state(),this.model.renderer_el=this._vtk_renwin},t.prototype.after_layout=function(){e.prototype.after_layout.call(this),this._vtk_renwin.resize()},t.prototype._remove_default_key_binding=function(){var e=this._vtk_renwin.getInteractor();document.querySelector(\"body\").removeEventListener(\"keypress\",e.handleKeyPress),document.querySelector(\"body\").removeEventListener(\"keydown\",e.handleKeyDown),document.querySelector(\"body\").removeEventListener(\"keyup\",e.handleKeyUp)},t.__name__=\"AbstractVTKView\",t}(c.PanelHTMLBoxView);n.AbstractVTKView=h;var l=function(e){function t(t){return e.call(this,t)||this}return r(t,e),t.prototype.getActors=function(){return this.renderer_el.getRenderer().getActors()},t.init_AbstractVTKPlot=function(){this.define({orientation_widget:[o.Boolean,!1],camera:[o.Instance]}),this.override({height:300,width:300})},t.__name__=\"AbstractVTKPlot\",t.__module__=\"panel.models.vtk\",t}(_.HTMLBox);n.AbstractVTKPlot=l,l.init_AbstractVTKPlot()},\n \"3b847a648d\": function _(e,t,n){var r=e(\"@bokehjs/core/util/serialization\"),a=e(\"@bokehjs/core/util/array\");function o(e){var t=Math.min(Math.max(Math.round(e),0),255).toString(16);return 2==t.length?t:\"0\"+t}function i(e,t,n){return\"#\"+o(e)+o(t)+o(n)}function v(e){for(var t=new ArrayBuffer(e.length),n=new Uint8Array(t),r=0,a=e.length;rMath.abs(e[n])?t:n,o=e[a]>0?1:-1;return r[a]=o,r},n.cartesian_product=function(){for(var e=[],t=0;t=.005&&(e.model.sampling=t)}),Math.abs(this.model.sampling-Number(this.shadow_selector.value))>=.005&&this.model.properties.sampling.change.emit(),this.edge_gradient_slider.addEventListener(\"input\",function(){var t=Number(e.edge_gradient_slider.value);Math.abs(e.model.edge_gradient-t)>=.005&&(e.model.edge_gradient=t)}),Math.abs(this.model.edge_gradient-Number(this.edge_gradient_slider.value))>=.005&&this.model.properties.edge_gradient.change.emit()},t.prototype._plot_volume=function(){var e=this,t=this._vtk_image_data,n=a.vtkns.Volume.newInstance(),r=a.vtkns.VolumeMapper.newInstance();n.setMapper(r),r.setInputData(t);var i=(t.getPointData().getScalars()||t.getPointData().getArrays()[0]).getRange(),o=a.vtkns.ColorTransferFunction.newInstance();o.onModified(function(){return e.model.mapper=a.vtkLutToMapper(o)});var s=a.vtkns.PiecewiseFunction.newInstance(),l=.7*Math.sqrt(t.getSpacing().map(function(e){return e*e}).reduce(function(e,t){return e+t},0));r.setSampleDistance(l),n.getProperty().setRGBTransferFunction(0,o),n.getProperty().setScalarOpacity(0,s),n.getProperty().setInterpolationTypeToFastLinear(),n.getProperty().setScalarOpacityUnitDistance(0,a.vtkns.BoundingBox.getDiagonalLength(t.getBounds())/Math.max.apply(Math,t.getDimensions())),n.getProperty().setGradientOpacityMinimumValue(0,0),n.getProperty().setGradientOpacityMaximumValue(0,.05*(i[1]-i[0])),n.getProperty().setShade(this.model.shadow),n.getProperty().setUseGradientOpacity(0,!0),n.getProperty().setGradientOpacityMinimumOpacity(0,0),n.getProperty().setGradientOpacityMaximumOpacity(0,1),n.getProperty().setAmbient(this.model.ambient),n.getProperty().setDiffuse(this.model.diffuse),n.getProperty().setSpecular(this.model.specular),n.getProperty().setSpecularPower(this.model.specular_power),this._vtk_renwin.getRenderer().addVolume(n),this._controllerWidget.setupContent(this._vtk_renwin.getRenderWindow(),n,!0)},t.prototype._plot_slices=function(){var e=this._vtk_image_data,t=a.vtkns.ImageSlice.newInstance(),n=a.vtkns.ImageSlice.newInstance(),r=a.vtkns.ImageSlice.newInstance(),i=a.vtkns.ImageMapper.newInstance(),o=a.vtkns.ImageMapper.newInstance(),s=a.vtkns.ImageMapper.newInstance();i.setInputData(e),i.setISlice(this.model.slice_i),t.setMapper(i),o.setInputData(e),o.setJSlice(this.model.slice_j),n.setMapper(o),s.setInputData(e),s.setKSlice(this.model.slice_k),r.setMapper(s);var l=a.vtkns.PiecewiseFunction.newInstance();l.removeAllPoints(),l.addPoint(0,1);var c=this.volume.getProperty().getRGBTransferFunction(0),p=t.getProperty();n.setProperty(p),r.setProperty(p),p.setRGBTransferFunction(c),p.setScalarOpacity(l);var d=this._vtk_renwin.getRenderer();d.addActor(t),d.addActor(n),d.addActor(r)},t.prototype._set_volume_visibility=function(e){this.volume.setVisibility(e)},t.prototype._set_slices_visibility=function(e){this._vtk_renwin.getRenderer().getActors().map(function(t){return t.setVisibility(e)})},t.__name__=\"VTKVolumePlotView\",t}(s.AbstractVTKView);n.VTKVolumePlotView=l;var c=function(e){function t(t){return e.call(this,t)||this}return i(t,e),t.init_VTKVolumePlot=function(){this.prototype.default_view=l,this.define({data:[o.Instance],shadow:[o.Boolean,!0],sampling:[o.Number,.4],edge_gradient:[o.Number,.2],colormap:[o.String],rescale:[o.Boolean,!1],ambient:[o.Number,.2],diffuse:[o.Number,.7],specular:[o.Number,.3],specular_power:[o.Number,8],slice_i:[o.Int,0],slice_j:[o.Int,0],slice_k:[o.Int,0],display_volume:[o.Boolean,!0],display_slices:[o.Boolean,!1],render_background:[o.String,\"#52576e\"],interpolation:[o.Any,\"fast_linear\"],mapper:[o.Instance]})},t.__name__=\"VTKVolumePlot\",t}(s.AbstractVTKPlot);n.VTKVolumePlot=c,c.init_VTKVolumePlot()},\n \"5bc27423fe\": function _(t,e,i){var s,n=this&&this.__extends||(s=function(t,e){return(s=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var i in e)e.hasOwnProperty(i)&&(t[i]=e[i])})(t,e)},function(t,e){function i(){this.constructor=t}s(t,e),t.prototype=null===e?Object.create(e):(i.prototype=e.prototype,new i)}),r=this&&this.__importStar||function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var i in t)Object.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e.default=t,e},a=t(\"66e1dbda7d\"),c=t(\"@bokehjs/model\"),o=r(t(\"@bokehjs/core/properties\")),l=t(\"3b847a648d\"),h=function(t){function e(e){return t.call(this,e)||this}return n(e,t),e.init_VTKAxes=function(){this.define({origin:[o.Array],xticker:[o.Instance],yticker:[o.Instance],zticker:[o.Instance],digits:[o.Number,1],show_grid:[o.Boolean,!0],grid_opacity:[o.Number,.1],axes_opacity:[o.Number,1],fontsize:[o.Number,12]})},Object.defineProperty(e.prototype,\"xticks\",{get:function(){return this.xticker.ticks},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"yticks\",{get:function(){return this.yticker.ticks},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"zticks\",{get:function(){return this.zticker.ticks},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"xlabels\",{get:function(){var t=this;return this.xticker.labels?this.xticker.labels:this.xticks.map(function(e){return e.toFixed(t.digits)})},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"ylabels\",{get:function(){var t=this;return this.yticker.labels?this.yticker.labels:this.yticks.map(function(e){return e.toFixed(t.digits)})},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,\"zlabels\",{get:function(){var t=this;return this.zticker.labels?this.zticker.labels:this.zticks.map(function(e){return e.toFixed(t.digits)})},enumerable:!0,configurable:!0}),e.prototype._make_grid_lines=function(t,e,i){for(var s=[],n=0;n=e.xticks.length&&i0?(n[0]=2*(M*h+c*r+s*u-f*e)/b,n[1]=2*(s*h+c*e+f*r-M*u)/b,n[2]=2*(f*h+c*u+M*e-s*r)/b):(n[0]=2*(M*h+c*r+s*u-f*e),n[1]=2*(s*h+c*e+f*r-M*u),n[2]=2*(f*h+c*u+M*e-s*r));return i(t,a,n),t},n.getTranslation=function(t,a){return t[0]=a[12],t[1]=a[13],t[2]=a[14],t},n.getScaling=M,n.getRotation=function(t,a){var n=new o.ARRAY_TYPE(3);M(n,a);var r=1/n[0],e=1/n[1],u=1/n[2],h=a[0]*r,i=a[1]*e,s=a[2]*u,f=a[4]*r,c=a[5]*e,b=a[6]*u,l=a[8]*r,v=a[9]*e,m=a[10]*u,p=h+c+m,y=0;p>0?(y=2*Math.sqrt(p+1),t[3]=.25*y,t[0]=(b-v)/y,t[1]=(l-s)/y,t[2]=(i-f)/y):h>c&&h>m?(y=2*Math.sqrt(1+h-c-m),t[3]=(b-v)/y,t[0]=.25*y,t[1]=(i+f)/y,t[2]=(l+s)/y):c>m?(y=2*Math.sqrt(1+c-h-m),t[3]=(l-s)/y,t[0]=(i+f)/y,t[1]=.25*y,t[2]=(b+v)/y):(y=2*Math.sqrt(1+m-h-c),t[3]=(i-f)/y,t[0]=(l+s)/y,t[1]=(b+v)/y,t[2]=.25*y);return t},n.fromRotationTranslationScale=function(t,a,n,r){var o=a[0],e=a[1],u=a[2],h=a[3],i=o+o,M=e+e,s=u+u,f=o*i,c=o*M,b=o*s,l=e*M,v=e*s,m=u*s,p=h*i,y=h*M,P=h*s,S=r[0],O=r[1],E=r[2];return t[0]=(1-(l+m))*S,t[1]=(c+P)*S,t[2]=(b-y)*S,t[3]=0,t[4]=(c-P)*O,t[5]=(1-(f+m))*O,t[6]=(v+p)*O,t[7]=0,t[8]=(b+y)*E,t[9]=(v-p)*E,t[10]=(1-(f+l))*E,t[11]=0,t[12]=n[0],t[13]=n[1],t[14]=n[2],t[15]=1,t},n.fromRotationTranslationScaleOrigin=function(t,a,n,r,o){var e=a[0],u=a[1],h=a[2],i=a[3],M=e+e,s=u+u,f=h+h,c=e*M,b=e*s,l=e*f,v=u*s,m=u*f,p=h*f,y=i*M,P=i*s,S=i*f,O=r[0],E=r[1],I=r[2],L=o[0],N=o[1],R=o[2],x=(1-(v+p))*O,d=(b+S)*O,g=(l-P)*O,A=(b-S)*E,Y=(1-(c+p))*E,T=(m+y)*E,w=(l+P)*I,_=(m-y)*I,q=(1-(c+v))*I;return t[0]=x,t[1]=d,t[2]=g,t[3]=0,t[4]=A,t[5]=Y,t[6]=T,t[7]=0,t[8]=w,t[9]=_,t[10]=q,t[11]=0,t[12]=n[0]+L-(x*L+A*N+w*R),t[13]=n[1]+N-(d*L+Y*N+_*R),t[14]=n[2]+R-(g*L+T*N+q*R),t[15]=1,t},n.fromQuat=function(t,a){var n=a[0],r=a[1],o=a[2],e=a[3],u=n+n,h=r+r,i=o+o,M=n*u,s=r*u,f=r*h,c=o*u,b=o*h,l=o*i,v=e*u,m=e*h,p=e*i;return t[0]=1-f-l,t[1]=s+p,t[2]=c-m,t[3]=0,t[4]=s-p,t[5]=1-M-l,t[6]=b+v,t[7]=0,t[8]=c+m,t[9]=b-v,t[10]=1-M-f,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},n.frustum=function(t,a,n,r,o,e,u){var h=1/(n-a),i=1/(o-r),M=1/(e-u);return t[0]=2*e*h,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=2*e*i,t[6]=0,t[7]=0,t[8]=(n+a)*h,t[9]=(o+r)*i,t[10]=(u+e)*M,t[11]=-1,t[12]=0,t[13]=0,t[14]=u*e*2*M,t[15]=0,t},n.perspective=function(t,a,n,r,o){var e,u=1/Math.tan(a/2);t[0]=u/n,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=u,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[11]=-1,t[12]=0,t[13]=0,t[15]=0,null!=o&&o!==1/0?(e=1/(r-o),t[10]=(o+r)*e,t[14]=2*o*r*e):(t[10]=-1,t[14]=-2*r);return t},n.perspectiveFromFieldOfView=function(t,a,n,r){var o=Math.tan(a.upDegrees*Math.PI/180),e=Math.tan(a.downDegrees*Math.PI/180),u=Math.tan(a.leftDegrees*Math.PI/180),h=Math.tan(a.rightDegrees*Math.PI/180),i=2/(u+h),M=2/(o+e);return t[0]=i,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=M,t[6]=0,t[7]=0,t[8]=-(u-h)*i*.5,t[9]=(o-e)*M*.5,t[10]=r/(n-r),t[11]=-1,t[12]=0,t[13]=0,t[14]=r*n/(n-r),t[15]=0,t},n.ortho=function(t,a,n,r,o,e,u){var h=1/(a-n),i=1/(r-o),M=1/(e-u);return t[0]=-2*h,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*i,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=2*M,t[11]=0,t[12]=(a+n)*h,t[13]=(o+r)*i,t[14]=(u+e)*M,t[15]=1,t},n.lookAt=function(t,a,n,r){var e,h,i,M,s,f,c,b,l,v,m=a[0],p=a[1],y=a[2],P=r[0],S=r[1],O=r[2],E=n[0],I=n[1],L=n[2];if(Math.abs(m-E)0&&(b=1/Math.sqrt(b),s*=b,f*=b,c*=b);var l=i*c-M*f,v=M*s-h*c,m=h*f-i*s;(b=l*l+v*v+m*m)>0&&(b=1/Math.sqrt(b),l*=b,v*=b,m*=b);return t[0]=l,t[1]=v,t[2]=m,t[3]=0,t[4]=f*m-c*v,t[5]=c*l-s*m,t[6]=s*v-f*l,t[7]=0,t[8]=s,t[9]=f,t[10]=c,t[11]=0,t[12]=o,t[13]=e,t[14]=u,t[15]=1,t},n.str=function(t){return\"mat4(\"+t[0]+\", \"+t[1]+\", \"+t[2]+\", \"+t[3]+\", \"+t[4]+\", \"+t[5]+\", \"+t[6]+\", \"+t[7]+\", \"+t[8]+\", \"+t[9]+\", \"+t[10]+\", \"+t[11]+\", \"+t[12]+\", \"+t[13]+\", \"+t[14]+\", \"+t[15]+\")\"},n.frob=function(t){return Math.hypot(t[0],t[1],t[2],t[3],t[4],t[5],t[6],t[7],t[8],t[9],t[10],t[11],t[12],t[13],t[14],t[15])},n.add=function(t,a,n){return t[0]=a[0]+n[0],t[1]=a[1]+n[1],t[2]=a[2]+n[2],t[3]=a[3]+n[3],t[4]=a[4]+n[4],t[5]=a[5]+n[5],t[6]=a[6]+n[6],t[7]=a[7]+n[7],t[8]=a[8]+n[8],t[9]=a[9]+n[9],t[10]=a[10]+n[10],t[11]=a[11]+n[11],t[12]=a[12]+n[12],t[13]=a[13]+n[13],t[14]=a[14]+n[14],t[15]=a[15]+n[15],t},n.subtract=s,n.multiplyScalar=function(t,a,n){return t[0]=a[0]*n,t[1]=a[1]*n,t[2]=a[2]*n,t[3]=a[3]*n,t[4]=a[4]*n,t[5]=a[5]*n,t[6]=a[6]*n,t[7]=a[7]*n,t[8]=a[8]*n,t[9]=a[9]*n,t[10]=a[10]*n,t[11]=a[11]*n,t[12]=a[12]*n,t[13]=a[13]*n,t[14]=a[14]*n,t[15]=a[15]*n,t},n.multiplyScalarAndAdd=function(t,a,n,r){return t[0]=a[0]+n[0]*r,t[1]=a[1]+n[1]*r,t[2]=a[2]+n[2]*r,t[3]=a[3]+n[3]*r,t[4]=a[4]+n[4]*r,t[5]=a[5]+n[5]*r,t[6]=a[6]+n[6]*r,t[7]=a[7]+n[7]*r,t[8]=a[8]+n[8]*r,t[9]=a[9]+n[9]*r,t[10]=a[10]+n[10]*r,t[11]=a[11]+n[11]*r,t[12]=a[12]+n[12]*r,t[13]=a[13]+n[13]*r,t[14]=a[14]+n[14]*r,t[15]=a[15]+n[15]*r,t},n.exactEquals=function(t,a){return t[0]===a[0]&&t[1]===a[1]&&t[2]===a[2]&&t[3]===a[3]&&t[4]===a[4]&&t[5]===a[5]&&t[6]===a[6]&&t[7]===a[7]&&t[8]===a[8]&&t[9]===a[9]&&t[10]===a[10]&&t[11]===a[11]&&t[12]===a[12]&&t[13]===a[13]&&t[14]===a[14]&&t[15]===a[15]},n.equals=function(t,a){var n=t[0],r=t[1],e=t[2],u=t[3],h=t[4],i=t[5],M=t[6],s=t[7],f=t[8],c=t[9],b=t[10],l=t[11],v=t[12],m=t[13],p=t[14],y=t[15],P=a[0],S=a[1],O=a[2],E=a[3],I=a[4],L=a[5],N=a[6],R=a[7],x=a[8],d=a[9],g=a[10],A=a[11],Y=a[12],T=a[13],w=a[14],_=a[15];return Math.abs(n-P)<=o.EPSILON*Math.max(1,Math.abs(n),Math.abs(P))&&Math.abs(r-S)<=o.EPSILON*Math.max(1,Math.abs(r),Math.abs(S))&&Math.abs(e-O)<=o.EPSILON*Math.max(1,Math.abs(e),Math.abs(O))&&Math.abs(u-E)<=o.EPSILON*Math.max(1,Math.abs(u),Math.abs(E))&&Math.abs(h-I)<=o.EPSILON*Math.max(1,Math.abs(h),Math.abs(I))&&Math.abs(i-L)<=o.EPSILON*Math.max(1,Math.abs(i),Math.abs(L))&&Math.abs(M-N)<=o.EPSILON*Math.max(1,Math.abs(M),Math.abs(N))&&Math.abs(s-R)<=o.EPSILON*Math.max(1,Math.abs(s),Math.abs(R))&&Math.abs(f-x)<=o.EPSILON*Math.max(1,Math.abs(f),Math.abs(x))&&Math.abs(c-d)<=o.EPSILON*Math.max(1,Math.abs(c),Math.abs(d))&&Math.abs(b-g)<=o.EPSILON*Math.max(1,Math.abs(b),Math.abs(g))&&Math.abs(l-A)<=o.EPSILON*Math.max(1,Math.abs(l),Math.abs(A))&&Math.abs(v-Y)<=o.EPSILON*Math.max(1,Math.abs(v),Math.abs(Y))&&Math.abs(m-T)<=o.EPSILON*Math.max(1,Math.abs(m),Math.abs(T))&&Math.abs(p-w)<=o.EPSILON*Math.max(1,Math.abs(p),Math.abs(w))&&Math.abs(y-_)<=o.EPSILON*Math.max(1,Math.abs(y),Math.abs(_))},n.sub=n.mul=void 0;var o=function(t){if(t&&t.__esModule)return t;if(null===t||\"object\"!==r(t)&&\"function\"!=typeof t)return{default:t};var a=e();if(a&&a.has(t))return a.get(t);var n={},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var u in t)if(Object.prototype.hasOwnProperty.call(t,u)){var h=o?Object.getOwnPropertyDescriptor(t,u):null;h&&(h.get||h.set)?Object.defineProperty(n,u,h):n[u]=t[u]}n.default=t,a&&a.set(t,n);return n}(t(\"c6b4e451bc\"));function e(){if(\"function\"!=typeof WeakMap)return null;var t=new WeakMap;return e=function(){return t},t}function u(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}function h(t,a,n){var r=a[0],o=a[1],e=a[2],u=a[3],h=a[4],i=a[5],M=a[6],s=a[7],f=a[8],c=a[9],b=a[10],l=a[11],v=a[12],m=a[13],p=a[14],y=a[15],P=n[0],S=n[1],O=n[2],E=n[3];return t[0]=P*r+S*h+O*f+E*v,t[1]=P*o+S*i+O*c+E*m,t[2]=P*e+S*M+O*b+E*p,t[3]=P*u+S*s+O*l+E*y,P=n[4],S=n[5],O=n[6],E=n[7],t[4]=P*r+S*h+O*f+E*v,t[5]=P*o+S*i+O*c+E*m,t[6]=P*e+S*M+O*b+E*p,t[7]=P*u+S*s+O*l+E*y,P=n[8],S=n[9],O=n[10],E=n[11],t[8]=P*r+S*h+O*f+E*v,t[9]=P*o+S*i+O*c+E*m,t[10]=P*e+S*M+O*b+E*p,t[11]=P*u+S*s+O*l+E*y,P=n[12],S=n[13],O=n[14],E=n[15],t[12]=P*r+S*h+O*f+E*v,t[13]=P*o+S*i+O*c+E*m,t[14]=P*e+S*M+O*b+E*p,t[15]=P*u+S*s+O*l+E*y,t}function i(t,a,n){var r=a[0],o=a[1],e=a[2],u=a[3],h=r+r,i=o+o,M=e+e,s=r*h,f=r*i,c=r*M,b=o*i,l=o*M,v=e*M,m=u*h,p=u*i,y=u*M;return t[0]=1-(b+v),t[1]=f+y,t[2]=c-p,t[3]=0,t[4]=f-y,t[5]=1-(s+v),t[6]=l+m,t[7]=0,t[8]=c+p,t[9]=l-m,t[10]=1-(s+b),t[11]=0,t[12]=n[0],t[13]=n[1],t[14]=n[2],t[15]=1,t}function M(t,a){var n=a[0],r=a[1],o=a[2],e=a[4],u=a[5],h=a[6],i=a[8],M=a[9],s=a[10];return t[0]=Math.hypot(n,r,o),t[1]=Math.hypot(e,u,h),t[2]=Math.hypot(i,M,s),t}function s(t,a,n){return t[0]=a[0]-n[0],t[1]=a[1]-n[1],t[2]=a[2]-n[2],t[3]=a[3]-n[3],t[4]=a[4]-n[4],t[5]=a[5]-n[5],t[6]=a[6]-n[6],t[7]=a[7]-n[7],t[8]=a[8]-n[8],t[9]=a[9]-n[9],t[10]=a[10]-n[10],t[11]=a[11]-n[11],t[12]=a[12]-n[12],t[13]=a[13]-n[13],t[14]=a[14]-n[14],t[15]=a[15]-n[15],t}var f=h;n.mul=f;var c=s;n.sub=c},\n \"8b81ae2f8b\": function _(t,r,n){function e(t){return(e=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t})(t)}n.create=l,n.identity=function(t){return t[0]=0,t[1]=0,t[2]=0,t[3]=1,t},n.setAxisAngle=f,n.getAxisAngle=function(t,r){var n=2*Math.acos(r[3]),e=Math.sin(n/2);e>a.EPSILON?(t[0]=r[0]/e,t[1]=r[1]/e,t[2]=r[2]/e):(t[0]=1,t[1]=0,t[2]=0);return n},n.getAngle=function(t,r){var n=O(t,r);return Math.acos(2*n*n-1)},n.multiply=h,n.rotateX=function(t,r,n){n*=.5;var e=r[0],a=r[1],o=r[2],u=r[3],s=Math.sin(n),c=Math.cos(n);return t[0]=e*c+u*s,t[1]=a*c+o*s,t[2]=o*c-a*s,t[3]=u*c-e*s,t},n.rotateY=function(t,r,n){n*=.5;var e=r[0],a=r[1],o=r[2],u=r[3],s=Math.sin(n),c=Math.cos(n);return t[0]=e*c-o*s,t[1]=a*c+u*s,t[2]=o*c+e*s,t[3]=u*c-a*s,t},n.rotateZ=function(t,r,n){n*=.5;var e=r[0],a=r[1],o=r[2],u=r[3],s=Math.sin(n),c=Math.cos(n);return t[0]=e*c+a*s,t[1]=a*c-e*s,t[2]=o*c+u*s,t[3]=u*c-o*s,t},n.calculateW=function(t,r){var n=r[0],e=r[1],a=r[2];return t[0]=n,t[1]=e,t[2]=a,t[3]=Math.sqrt(Math.abs(1-n*n-e*e-a*a)),t},n.exp=M,n.ln=v,n.pow=function(t,r,n){return v(t,r),P(t,t,n),M(t,t),t},n.slerp=p,n.random=function(t){var r=a.RANDOM(),n=a.RANDOM(),e=a.RANDOM(),o=Math.sqrt(1-r),u=Math.sqrt(r);return t[0]=o*Math.sin(2*Math.PI*n),t[1]=o*Math.cos(2*Math.PI*n),t[2]=u*Math.sin(2*Math.PI*e),t[3]=u*Math.cos(2*Math.PI*e),t},n.invert=function(t,r){var n=r[0],e=r[1],a=r[2],o=r[3],u=n*n+e*e+a*a+o*o,s=u?1/u:0;return t[0]=-n*s,t[1]=-e*s,t[2]=-a*s,t[3]=o*s,t},n.conjugate=function(t,r){return t[0]=-r[0],t[1]=-r[1],t[2]=-r[2],t[3]=r[3],t},n.fromMat3=y,n.fromEuler=function(t,r,n,e){var a=.5*Math.PI/180;r*=a,n*=a,e*=a;var o=Math.sin(r),u=Math.cos(r),s=Math.sin(n),c=Math.cos(n),i=Math.sin(e),l=Math.cos(e);return t[0]=o*c*l-u*s*i,t[1]=u*s*l+o*c*i,t[2]=u*c*i-o*s*l,t[3]=u*c*l+o*s*i,t},n.str=function(t){return\"quat(\"+t[0]+\", \"+t[1]+\", \"+t[2]+\", \"+t[3]+\")\"},n.setAxes=n.sqlerp=n.rotationTo=n.equals=n.exactEquals=n.normalize=n.sqrLen=n.squaredLength=n.len=n.length=n.lerp=n.dot=n.scale=n.mul=n.add=n.set=n.copy=n.fromValues=n.clone=void 0;var a=i(t(\"c6b4e451bc\")),o=i(t(\"4dc492e8e1\")),u=i(t(\"2e13827733\")),s=i(t(\"03254e8a21\"));function c(){if(\"function\"!=typeof WeakMap)return null;var t=new WeakMap;return c=function(){return t},t}function i(t){if(t&&t.__esModule)return t;if(null===t||\"object\"!==e(t)&&\"function\"!=typeof t)return{default:t};var r=c();if(r&&r.has(t))return r.get(t);var n={},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in t)if(Object.prototype.hasOwnProperty.call(t,o)){var u=a?Object.getOwnPropertyDescriptor(t,o):null;u&&(u.get||u.set)?Object.defineProperty(n,o,u):n[o]=t[o]}return n.default=t,r&&r.set(t,n),n}function l(){var t=new a.ARRAY_TYPE(4);return a.ARRAY_TYPE!=Float32Array&&(t[0]=0,t[1]=0,t[2]=0),t[3]=1,t}function f(t,r,n){n*=.5;var e=Math.sin(n);return t[0]=e*r[0],t[1]=e*r[1],t[2]=e*r[2],t[3]=Math.cos(n),t}function h(t,r,n){var e=r[0],a=r[1],o=r[2],u=r[3],s=n[0],c=n[1],i=n[2],l=n[3];return t[0]=e*l+u*s+a*i-o*c,t[1]=a*l+u*c+o*s-e*i,t[2]=o*l+u*i+e*c-a*s,t[3]=u*l-e*s-a*c-o*i,t}function M(t,r){var n=r[0],e=r[1],a=r[2],o=r[3],u=Math.sqrt(n*n+e*e+a*a),s=Math.exp(o),c=u>0?s*Math.sin(u)/u:0;return t[0]=n*c,t[1]=e*c,t[2]=a*c,t[3]=s*Math.cos(u),t}function v(t,r){var n=r[0],e=r[1],a=r[2],o=r[3],u=Math.sqrt(n*n+e*e+a*a),s=u>0?Math.atan2(u,o)/u:0;return t[0]=n*s,t[1]=e*s,t[2]=a*s,t[3]=.5*Math.log(n*n+e*e+a*a+o*o),t}function p(t,r,n,e){var o,u,s,c,i,l=r[0],f=r[1],h=r[2],M=r[3],v=n[0],p=n[1],y=n[2],d=n[3];return(u=l*v+f*p+h*y+M*d)<0&&(u=-u,v=-v,p=-p,y=-y,d=-d),1-u>a.EPSILON?(o=Math.acos(u),s=Math.sin(o),c=Math.sin((1-e)*o)/s,i=Math.sin(e*o)/s):(c=1-e,i=e),t[0]=c*l+i*v,t[1]=c*f+i*p,t[2]=c*h+i*y,t[3]=c*M+i*d,t}function y(t,r){var n,e=r[0]+r[4]+r[8];if(e>0)n=Math.sqrt(e+1),t[3]=.5*n,n=.5/n,t[0]=(r[5]-r[7])*n,t[1]=(r[6]-r[2])*n,t[2]=(r[1]-r[3])*n;else{var a=0;r[4]>r[0]&&(a=1),r[8]>r[3*a+a]&&(a=2);var o=(a+1)%3,u=(a+2)%3;n=Math.sqrt(r[3*a+a]-r[3*o+o]-r[3*u+u]+1),t[a]=.5*n,n=.5/n,t[3]=(r[3*o+u]-r[3*u+o])*n,t[o]=(r[3*o+a]+r[3*a+o])*n,t[u]=(r[3*u+a]+r[3*a+u])*n}return t}var d=s.clone;n.clone=d;var m=s.fromValues;n.fromValues=m;var q=s.copy;n.copy=q;var g=s.set;n.set=g;var b=s.add;n.add=b;var A=h;n.mul=A;var P=s.scale;n.scale=P;var O=s.dot;n.dot=O;var x=s.lerp;n.lerp=x;var E=s.length;n.length=E;var I=E;n.len=I;var j=s.squaredLength;n.squaredLength=j;var L=j;n.sqrLen=L;var R=s.normalize;n.normalize=R;var S=s.exactEquals;n.exactEquals=S;var w=s.equals;n.equals=w;var D,N,V,Y=(D=u.create(),N=u.fromValues(1,0,0),V=u.fromValues(0,1,0),function(t,r,n){var e=u.dot(r,n);return e<-.999999?(u.cross(D,N,r),u.len(D)<1e-6&&u.cross(D,V,r),u.normalize(D,D),f(t,D,Math.PI),t):e>.999999?(t[0]=0,t[1]=0,t[2]=0,t[3]=1,t):(u.cross(D,r,n),t[0]=D[0],t[1]=D[1],t[2]=D[2],t[3]=1+e,R(t,t))});n.rotationTo=Y;var _,z,T=(_=l(),z=l(),function(t,r,n,e,a,o){return p(_,r,a,o),p(z,n,e,o),p(t,_,z,2*o*(1-o)),t});n.sqlerp=T;var W,k=(W=o.create(),function(t,r,n,e){return W[0]=n[0],W[3]=n[1],W[6]=n[2],W[1]=e[0],W[4]=e[1],W[7]=e[2],W[2]=-r[0],W[5]=-r[1],W[8]=-r[2],R(t,y(t,W))});n.setAxes=k},\n \"2e13827733\": function _(t,n,r){function a(t){return(a=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t})(t)}r.create=o,r.clone=function(t){var n=new e.ARRAY_TYPE(3);return n[0]=t[0],n[1]=t[1],n[2]=t[2],n},r.length=i,r.fromValues=function(t,n,r){var a=new e.ARRAY_TYPE(3);return a[0]=t,a[1]=n,a[2]=r,a},r.copy=function(t,n){return t[0]=n[0],t[1]=n[1],t[2]=n[2],t},r.set=function(t,n,r,a){return t[0]=n,t[1]=r,t[2]=a,t},r.add=function(t,n,r){return t[0]=n[0]+r[0],t[1]=n[1]+r[1],t[2]=n[2]+r[2],t},r.subtract=c,r.multiply=f,r.divide=s,r.ceil=function(t,n){return t[0]=Math.ceil(n[0]),t[1]=Math.ceil(n[1]),t[2]=Math.ceil(n[2]),t},r.floor=function(t,n){return t[0]=Math.floor(n[0]),t[1]=Math.floor(n[1]),t[2]=Math.floor(n[2]),t},r.min=function(t,n,r){return t[0]=Math.min(n[0],r[0]),t[1]=Math.min(n[1],r[1]),t[2]=Math.min(n[2],r[2]),t},r.max=function(t,n,r){return t[0]=Math.max(n[0],r[0]),t[1]=Math.max(n[1],r[1]),t[2]=Math.max(n[2],r[2]),t},r.round=function(t,n){return t[0]=Math.round(n[0]),t[1]=Math.round(n[1]),t[2]=Math.round(n[2]),t},r.scale=function(t,n,r){return t[0]=n[0]*r,t[1]=n[1]*r,t[2]=n[2]*r,t},r.scaleAndAdd=function(t,n,r,a){return t[0]=n[0]+r[0]*a,t[1]=n[1]+r[1]*a,t[2]=n[2]+r[2]*a,t},r.distance=h,r.squaredDistance=M,r.squaredLength=l,r.negate=function(t,n){return t[0]=-n[0],t[1]=-n[1],t[2]=-n[2],t},r.inverse=function(t,n){return t[0]=1/n[0],t[1]=1/n[1],t[2]=1/n[2],t},r.normalize=function(t,n){var r=n[0],a=n[1],e=n[2],u=r*r+a*a+e*e;u>0&&(u=1/Math.sqrt(u));return t[0]=n[0]*u,t[1]=n[1]*u,t[2]=n[2]*u,t},r.dot=v,r.cross=function(t,n,r){var a=n[0],e=n[1],u=n[2],o=r[0],i=r[1],c=r[2];return t[0]=e*c-u*i,t[1]=u*o-a*c,t[2]=a*i-e*o,t},r.lerp=function(t,n,r,a){var e=n[0],u=n[1],o=n[2];return t[0]=e+a*(r[0]-e),t[1]=u+a*(r[1]-u),t[2]=o+a*(r[2]-o),t},r.hermite=function(t,n,r,a,e,u){var o=u*u,i=o*(2*u-3)+1,c=o*(u-2)+u,f=o*(u-1),s=o*(3-2*u);return t[0]=n[0]*i+r[0]*c+a[0]*f+e[0]*s,t[1]=n[1]*i+r[1]*c+a[1]*f+e[1]*s,t[2]=n[2]*i+r[2]*c+a[2]*f+e[2]*s,t},r.bezier=function(t,n,r,a,e,u){var o=1-u,i=o*o,c=u*u,f=i*o,s=3*u*i,h=3*c*o,M=c*u;return t[0]=n[0]*f+r[0]*s+a[0]*h+e[0]*M,t[1]=n[1]*f+r[1]*s+a[1]*h+e[1]*M,t[2]=n[2]*f+r[2]*s+a[2]*h+e[2]*M,t},r.random=function(t,n){n=n||1;var r=2*e.RANDOM()*Math.PI,a=2*e.RANDOM()-1,u=Math.sqrt(1-a*a)*n;return t[0]=Math.cos(r)*u,t[1]=Math.sin(r)*u,t[2]=a*n,t},r.transformMat4=function(t,n,r){var a=n[0],e=n[1],u=n[2],o=r[3]*a+r[7]*e+r[11]*u+r[15];return o=o||1,t[0]=(r[0]*a+r[4]*e+r[8]*u+r[12])/o,t[1]=(r[1]*a+r[5]*e+r[9]*u+r[13])/o,t[2]=(r[2]*a+r[6]*e+r[10]*u+r[14])/o,t},r.transformMat3=function(t,n,r){var a=n[0],e=n[1],u=n[2];return t[0]=a*r[0]+e*r[3]+u*r[6],t[1]=a*r[1]+e*r[4]+u*r[7],t[2]=a*r[2]+e*r[5]+u*r[8],t},r.transformQuat=function(t,n,r){var a=r[0],e=r[1],u=r[2],o=r[3],i=n[0],c=n[1],f=n[2],s=e*f-u*c,h=u*i-a*f,M=a*c-e*i,l=e*M-u*h,v=u*s-a*M,m=a*h-e*s,b=2*o;return s*=b,h*=b,M*=b,l*=2,v*=2,m*=2,t[0]=i+s+l,t[1]=c+h+v,t[2]=f+M+m,t},r.rotateX=function(t,n,r,a){var e=[],u=[];return e[0]=n[0]-r[0],e[1]=n[1]-r[1],e[2]=n[2]-r[2],u[0]=e[0],u[1]=e[1]*Math.cos(a)-e[2]*Math.sin(a),u[2]=e[1]*Math.sin(a)+e[2]*Math.cos(a),t[0]=u[0]+r[0],t[1]=u[1]+r[1],t[2]=u[2]+r[2],t},r.rotateY=function(t,n,r,a){var e=[],u=[];return e[0]=n[0]-r[0],e[1]=n[1]-r[1],e[2]=n[2]-r[2],u[0]=e[2]*Math.sin(a)+e[0]*Math.cos(a),u[1]=e[1],u[2]=e[2]*Math.cos(a)-e[0]*Math.sin(a),t[0]=u[0]+r[0],t[1]=u[1]+r[1],t[2]=u[2]+r[2],t},r.rotateZ=function(t,n,r,a){var e=[],u=[];return e[0]=n[0]-r[0],e[1]=n[1]-r[1],e[2]=n[2]-r[2],u[0]=e[0]*Math.cos(a)-e[1]*Math.sin(a),u[1]=e[0]*Math.sin(a)+e[1]*Math.cos(a),u[2]=e[2],t[0]=u[0]+r[0],t[1]=u[1]+r[1],t[2]=u[2]+r[2],t},r.angle=function(t,n){var r=t[0],a=t[1],e=t[2],u=n[0],o=n[1],i=n[2],c=Math.sqrt(r*r+a*a+e*e),f=Math.sqrt(u*u+o*o+i*i),s=c*f,h=s&&v(t,n)/s;return Math.acos(Math.min(Math.max(h,-1),1))},r.zero=function(t){return t[0]=0,t[1]=0,t[2]=0,t},r.str=function(t){return\"vec3(\"+t[0]+\", \"+t[1]+\", \"+t[2]+\")\"},r.exactEquals=function(t,n){return t[0]===n[0]&&t[1]===n[1]&&t[2]===n[2]},r.equals=function(t,n){var r=t[0],a=t[1],u=t[2],o=n[0],i=n[1],c=n[2];return Math.abs(r-o)<=e.EPSILON*Math.max(1,Math.abs(r),Math.abs(o))&&Math.abs(a-i)<=e.EPSILON*Math.max(1,Math.abs(a),Math.abs(i))&&Math.abs(u-c)<=e.EPSILON*Math.max(1,Math.abs(u),Math.abs(c))},r.forEach=r.sqrLen=r.len=r.sqrDist=r.dist=r.div=r.mul=r.sub=void 0;var e=function(t){if(t&&t.__esModule)return t;if(null===t||\"object\"!==a(t)&&\"function\"!=typeof t)return{default:t};var n=u();if(n&&n.has(t))return n.get(t);var r={},e=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in t)if(Object.prototype.hasOwnProperty.call(t,o)){var i=e?Object.getOwnPropertyDescriptor(t,o):null;i&&(i.get||i.set)?Object.defineProperty(r,o,i):r[o]=t[o]}r.default=t,n&&n.set(t,r);return r}(t(\"c6b4e451bc\"));function u(){if(\"function\"!=typeof WeakMap)return null;var t=new WeakMap;return u=function(){return t},t}function o(){var t=new e.ARRAY_TYPE(3);return e.ARRAY_TYPE!=Float32Array&&(t[0]=0,t[1]=0,t[2]=0),t}function i(t){var n=t[0],r=t[1],a=t[2];return Math.hypot(n,r,a)}function c(t,n,r){return t[0]=n[0]-r[0],t[1]=n[1]-r[1],t[2]=n[2]-r[2],t}function f(t,n,r){return t[0]=n[0]*r[0],t[1]=n[1]*r[1],t[2]=n[2]*r[2],t}function s(t,n,r){return t[0]=n[0]/r[0],t[1]=n[1]/r[1],t[2]=n[2]/r[2],t}function h(t,n){var r=n[0]-t[0],a=n[1]-t[1],e=n[2]-t[2];return Math.hypot(r,a,e)}function M(t,n){var r=n[0]-t[0],a=n[1]-t[1],e=n[2]-t[2];return r*r+a*a+e*e}function l(t){var n=t[0],r=t[1],a=t[2];return n*n+r*r+a*a}function v(t,n){return t[0]*n[0]+t[1]*n[1]+t[2]*n[2]}var m=c;r.sub=m;var b=f;r.mul=b;var d=s;r.div=d;var y=h;r.dist=y;var p=M;r.sqrDist=p;var A=i;r.len=A;var O=l;r.sqrLen=O;var P,q=(P=o(),function(t,n,r,a,e,u){var o,i;for(n||(n=3),r||(r=0),i=a?Math.min(a*n+r,t.length):t.length,o=r;o0&&(o=1/Math.sqrt(o));return t[0]=r*o,t[1]=a*o,t[2]=e*o,t[3]=u*o,t},r.dot=function(t,n){return t[0]*n[0]+t[1]*n[1]+t[2]*n[2]+t[3]*n[3]},r.cross=function(t,n,r,a){var e=r[0]*a[1]-r[1]*a[0],u=r[0]*a[2]-r[2]*a[0],o=r[0]*a[3]-r[3]*a[0],i=r[1]*a[2]-r[2]*a[1],c=r[1]*a[3]-r[3]*a[1],f=r[2]*a[3]-r[3]*a[2],h=n[0],s=n[1],M=n[2],l=n[3];return t[0]=s*f-M*c+l*i,t[1]=-h*f+M*o-l*u,t[2]=h*c-s*o+l*e,t[3]=-h*i+s*u-M*e,t},r.lerp=function(t,n,r,a){var e=n[0],u=n[1],o=n[2],i=n[3];return t[0]=e+a*(r[0]-e),t[1]=u+a*(r[1]-u),t[2]=o+a*(r[2]-o),t[3]=i+a*(r[3]-i),t},r.random=function(t,n){var r,a,u,o,i,c;n=n||1;do{r=2*e.RANDOM()-1,a=2*e.RANDOM()-1,i=r*r+a*a}while(i>=1);do{u=2*e.RANDOM()-1,o=2*e.RANDOM()-1,c=u*u+o*o}while(c>=1);var f=Math.sqrt((1-i)/c);return t[0]=n*r,t[1]=n*a,t[2]=n*u*f,t[3]=n*o*f,t},r.transformMat4=function(t,n,r){var a=n[0],e=n[1],u=n[2],o=n[3];return t[0]=r[0]*a+r[4]*e+r[8]*u+r[12]*o,t[1]=r[1]*a+r[5]*e+r[9]*u+r[13]*o,t[2]=r[2]*a+r[6]*e+r[10]*u+r[14]*o,t[3]=r[3]*a+r[7]*e+r[11]*u+r[15]*o,t},r.transformQuat=function(t,n,r){var a=n[0],e=n[1],u=n[2],o=r[0],i=r[1],c=r[2],f=r[3],h=f*a+i*u-c*e,s=f*e+c*a-o*u,M=f*u+o*e-i*a,l=-o*a-i*e-c*u;return t[0]=h*f+l*-o+s*-c-M*-i,t[1]=s*f+l*-i+M*-o-h*-c,t[2]=M*f+l*-c+h*-i-s*-o,t[3]=n[3],t},r.zero=function(t){return t[0]=0,t[1]=0,t[2]=0,t[3]=0,t},r.str=function(t){return\"vec4(\"+t[0]+\", \"+t[1]+\", \"+t[2]+\", \"+t[3]+\")\"},r.exactEquals=function(t,n){return t[0]===n[0]&&t[1]===n[1]&&t[2]===n[2]&&t[3]===n[3]},r.equals=function(t,n){var r=t[0],a=t[1],u=t[2],o=t[3],i=n[0],c=n[1],f=n[2],h=n[3];return Math.abs(r-i)<=e.EPSILON*Math.max(1,Math.abs(r),Math.abs(i))&&Math.abs(a-c)<=e.EPSILON*Math.max(1,Math.abs(a),Math.abs(c))&&Math.abs(u-f)<=e.EPSILON*Math.max(1,Math.abs(u),Math.abs(f))&&Math.abs(o-h)<=e.EPSILON*Math.max(1,Math.abs(o),Math.abs(h))},r.forEach=r.sqrLen=r.len=r.sqrDist=r.dist=r.div=r.mul=r.sub=void 0;var e=function(t){if(t&&t.__esModule)return t;if(null===t||\"object\"!==a(t)&&\"function\"!=typeof t)return{default:t};var n=u();if(n&&n.has(t))return n.get(t);var r={},e=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in t)if(Object.prototype.hasOwnProperty.call(t,o)){var i=e?Object.getOwnPropertyDescriptor(t,o):null;i&&(i.get||i.set)?Object.defineProperty(r,o,i):r[o]=t[o]}r.default=t,n&&n.set(t,r);return r}(t(\"c6b4e451bc\"));function u(){if(\"function\"!=typeof WeakMap)return null;var t=new WeakMap;return u=function(){return t},t}function o(){var t=new e.ARRAY_TYPE(4);return e.ARRAY_TYPE!=Float32Array&&(t[0]=0,t[1]=0,t[2]=0,t[3]=0),t}function i(t,n,r){return t[0]=n[0]-r[0],t[1]=n[1]-r[1],t[2]=n[2]-r[2],t[3]=n[3]-r[3],t}function c(t,n,r){return t[0]=n[0]*r[0],t[1]=n[1]*r[1],t[2]=n[2]*r[2],t[3]=n[3]*r[3],t}function f(t,n,r){return t[0]=n[0]/r[0],t[1]=n[1]/r[1],t[2]=n[2]/r[2],t[3]=n[3]/r[3],t}function h(t,n){var r=n[0]-t[0],a=n[1]-t[1],e=n[2]-t[2],u=n[3]-t[3];return Math.hypot(r,a,e,u)}function s(t,n){var r=n[0]-t[0],a=n[1]-t[1],e=n[2]-t[2],u=n[3]-t[3];return r*r+a*a+e*e+u*u}function M(t){var n=t[0],r=t[1],a=t[2],e=t[3];return Math.hypot(n,r,a,e)}function l(t){var n=t[0],r=t[1],a=t[2],e=t[3];return n*n+r*r+a*a+e*e}var v=i;r.sub=v;var b=c;r.mul=b;var m=f;r.div=m;var d=h;r.dist=d;var y=s;r.sqrDist=y;var p=M;r.len=p;var O=l;r.sqrLen=O;var A,P=(A=o(),function(t,n,r,a,e,u){var o,i;for(n||(n=4),r||(r=0),i=a?Math.min(a*n+r,t.length):t.length,o=r;o0){n=Math.sqrt(n);var a=r[0]/n,e=r[1]/n,o=r[2]/n,u=r[3]/n,i=r[4],f=r[5],c=r[6],s=r[7],l=a*i+e*f+o*c+u*s;t[0]=a,t[1]=e,t[2]=o,t[3]=u,t[4]=(i-a*l)/n,t[5]=(f-e*l)/n,t[6]=(c-o*l)/n,t[7]=(s-u*l)/n}return t},n.str=function(t){return\"quat2(\"+t[0]+\", \"+t[1]+\", \"+t[2]+\", \"+t[3]+\", \"+t[4]+\", \"+t[5]+\", \"+t[6]+\", \"+t[7]+\")\"},n.exactEquals=function(t,r){return t[0]===r[0]&&t[1]===r[1]&&t[2]===r[2]&&t[3]===r[3]&&t[4]===r[4]&&t[5]===r[5]&&t[6]===r[6]&&t[7]===r[7]},n.equals=function(t,r){var n=t[0],a=t[1],o=t[2],u=t[3],i=t[4],f=t[5],c=t[6],s=t[7],l=r[0],h=r[1],b=r[2],M=r[3],v=r[4],y=r[5],p=r[6],m=r[7];return Math.abs(n-l)<=e.EPSILON*Math.max(1,Math.abs(n),Math.abs(l))&&Math.abs(a-h)<=e.EPSILON*Math.max(1,Math.abs(a),Math.abs(h))&&Math.abs(o-b)<=e.EPSILON*Math.max(1,Math.abs(o),Math.abs(b))&&Math.abs(u-M)<=e.EPSILON*Math.max(1,Math.abs(u),Math.abs(M))&&Math.abs(i-v)<=e.EPSILON*Math.max(1,Math.abs(i),Math.abs(v))&&Math.abs(f-y)<=e.EPSILON*Math.max(1,Math.abs(f),Math.abs(y))&&Math.abs(c-p)<=e.EPSILON*Math.max(1,Math.abs(c),Math.abs(p))&&Math.abs(s-m)<=e.EPSILON*Math.max(1,Math.abs(s),Math.abs(m))},n.sqrLen=n.squaredLength=n.len=n.length=n.dot=n.mul=n.setReal=n.getReal=void 0;var e=f(t(\"c6b4e451bc\")),o=f(t(\"8b81ae2f8b\")),u=f(t(\"948401a902\"));function i(){if(\"function\"!=typeof WeakMap)return null;var t=new WeakMap;return i=function(){return t},t}function f(t){if(t&&t.__esModule)return t;if(null===t||\"object\"!==a(t)&&\"function\"!=typeof t)return{default:t};var r=i();if(r&&r.has(t))return r.get(t);var n={},e=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in t)if(Object.prototype.hasOwnProperty.call(t,o)){var u=e?Object.getOwnPropertyDescriptor(t,o):null;u&&(u.get||u.set)?Object.defineProperty(n,o,u):n[o]=t[o]}return n.default=t,r&&r.set(t,n),n}function c(t,r,n){var a=.5*n[0],e=.5*n[1],o=.5*n[2],u=r[0],i=r[1],f=r[2],c=r[3];return t[0]=u,t[1]=i,t[2]=f,t[3]=c,t[4]=a*c+e*f-o*i,t[5]=e*c+o*u-a*f,t[6]=o*c+a*i-e*u,t[7]=-a*u-e*i-o*f,t}function s(t,r){return t[0]=r[0],t[1]=r[1],t[2]=r[2],t[3]=r[3],t[4]=r[4],t[5]=r[5],t[6]=r[6],t[7]=r[7],t}var l=o.copy;n.getReal=l;var h=o.copy;function b(t,r,n){var a=r[0],e=r[1],o=r[2],u=r[3],i=n[4],f=n[5],c=n[6],s=n[7],l=r[4],h=r[5],b=r[6],M=r[7],v=n[0],y=n[1],p=n[2],m=n[3];return t[0]=a*m+u*v+e*p-o*y,t[1]=e*m+u*y+o*v-a*p,t[2]=o*m+u*p+a*y-e*v,t[3]=u*m-a*v-e*y-o*p,t[4]=a*s+u*i+e*c-o*f+l*m+M*v+h*p-b*y,t[5]=e*s+u*f+o*i-a*c+h*m+M*y+b*v-l*p,t[6]=o*s+u*c+a*f-e*i+b*m+M*p+l*y-h*v,t[7]=u*s-a*i-e*f-o*c+M*m-l*v-h*y-b*p,t}n.setReal=h;var M=b;n.mul=M;var v=o.dot;n.dot=v;var y=o.length;n.length=y;var p=y;n.len=p;var m=o.squaredLength;n.squaredLength=m;var P=m;n.sqrLen=P},\n \"62ac52b540\": function _(t,n,r){function e(t){return(e=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&\"function\"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?\"symbol\":typeof t})(t)}r.create=o,r.clone=function(t){var n=new a.ARRAY_TYPE(2);return n[0]=t[0],n[1]=t[1],n},r.fromValues=function(t,n){var r=new a.ARRAY_TYPE(2);return r[0]=t,r[1]=n,r},r.copy=function(t,n){return t[0]=n[0],t[1]=n[1],t},r.set=function(t,n,r){return t[0]=n,t[1]=r,t},r.add=function(t,n,r){return t[0]=n[0]+r[0],t[1]=n[1]+r[1],t},r.subtract=i,r.multiply=c,r.divide=f,r.ceil=function(t,n){return t[0]=Math.ceil(n[0]),t[1]=Math.ceil(n[1]),t},r.floor=function(t,n){return t[0]=Math.floor(n[0]),t[1]=Math.floor(n[1]),t},r.min=function(t,n,r){return t[0]=Math.min(n[0],r[0]),t[1]=Math.min(n[1],r[1]),t},r.max=function(t,n,r){return t[0]=Math.max(n[0],r[0]),t[1]=Math.max(n[1],r[1]),t},r.round=function(t,n){return t[0]=Math.round(n[0]),t[1]=Math.round(n[1]),t},r.scale=function(t,n,r){return t[0]=n[0]*r,t[1]=n[1]*r,t},r.scaleAndAdd=function(t,n,r,e){return t[0]=n[0]+r[0]*e,t[1]=n[1]+r[1]*e,t},r.distance=s,r.squaredDistance=l,r.length=h,r.squaredLength=M,r.negate=function(t,n){return t[0]=-n[0],t[1]=-n[1],t},r.inverse=function(t,n){return t[0]=1/n[0],t[1]=1/n[1],t},r.normalize=function(t,n){var r=n[0],e=n[1],a=r*r+e*e;a>0&&(a=1/Math.sqrt(a));return t[0]=n[0]*a,t[1]=n[1]*a,t},r.dot=function(t,n){return t[0]*n[0]+t[1]*n[1]},r.cross=function(t,n,r){var e=n[0]*r[1]-n[1]*r[0];return t[0]=t[1]=0,t[2]=e,t},r.lerp=function(t,n,r,e){var a=n[0],u=n[1];return t[0]=a+e*(r[0]-a),t[1]=u+e*(r[1]-u),t},r.random=function(t,n){n=n||1;var r=2*a.RANDOM()*Math.PI;return t[0]=Math.cos(r)*n,t[1]=Math.sin(r)*n,t},r.transformMat2=function(t,n,r){var e=n[0],a=n[1];return t[0]=r[0]*e+r[2]*a,t[1]=r[1]*e+r[3]*a,t},r.transformMat2d=function(t,n,r){var e=n[0],a=n[1];return t[0]=r[0]*e+r[2]*a+r[4],t[1]=r[1]*e+r[3]*a+r[5],t},r.transformMat3=function(t,n,r){var e=n[0],a=n[1];return t[0]=r[0]*e+r[3]*a+r[6],t[1]=r[1]*e+r[4]*a+r[7],t},r.transformMat4=function(t,n,r){var e=n[0],a=n[1];return t[0]=r[0]*e+r[4]*a+r[12],t[1]=r[1]*e+r[5]*a+r[13],t},r.rotate=function(t,n,r,e){var a=n[0]-r[0],u=n[1]-r[1],o=Math.sin(e),i=Math.cos(e);return t[0]=a*i-u*o+r[0],t[1]=a*o+u*i+r[1],t},r.angle=function(t,n){var r=t[0],e=t[1],a=n[0],u=n[1],o=Math.sqrt(r*r+e*e)*Math.sqrt(a*a+u*u),i=o&&(r*a+e*u)/o;return Math.acos(Math.min(Math.max(i,-1),1))},r.zero=function(t){return t[0]=0,t[1]=0,t},r.str=function(t){return\"vec2(\"+t[0]+\", \"+t[1]+\")\"},r.exactEquals=function(t,n){return t[0]===n[0]&&t[1]===n[1]},r.equals=function(t,n){var r=t[0],e=t[1],u=n[0],o=n[1];return Math.abs(r-u)<=a.EPSILON*Math.max(1,Math.abs(r),Math.abs(u))&&Math.abs(e-o)<=a.EPSILON*Math.max(1,Math.abs(e),Math.abs(o))},r.forEach=r.sqrLen=r.sqrDist=r.dist=r.div=r.mul=r.sub=r.len=void 0;var a=function(t){if(t&&t.__esModule)return t;if(null===t||\"object\"!==e(t)&&\"function\"!=typeof t)return{default:t};var n=u();if(n&&n.has(t))return n.get(t);var r={},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in t)if(Object.prototype.hasOwnProperty.call(t,o)){var i=a?Object.getOwnPropertyDescriptor(t,o):null;i&&(i.get||i.set)?Object.defineProperty(r,o,i):r[o]=t[o]}r.default=t,n&&n.set(t,r);return r}(t(\"c6b4e451bc\"));function u(){if(\"function\"!=typeof WeakMap)return null;var t=new WeakMap;return u=function(){return t},t}function o(){var t=new a.ARRAY_TYPE(2);return a.ARRAY_TYPE!=Float32Array&&(t[0]=0,t[1]=0),t}function i(t,n,r){return t[0]=n[0]-r[0],t[1]=n[1]-r[1],t}function c(t,n,r){return t[0]=n[0]*r[0],t[1]=n[1]*r[1],t}function f(t,n,r){return t[0]=n[0]/r[0],t[1]=n[1]/r[1],t}function s(t,n){var r=n[0]-t[0],e=n[1]-t[1];return Math.hypot(r,e)}function l(t,n){var r=n[0]-t[0],e=n[1]-t[1];return r*r+e*e}function h(t){var n=t[0],r=t[1];return Math.hypot(n,r)}function M(t){var n=t[0],r=t[1];return n*n+r*r}var v=h;r.len=v;var m=i;r.sub=m;var d=c;r.mul=d;var y=f;r.div=y;var p=s;r.dist=p;var b=l;r.sqrDist=b;var A=M;r.sqrLen=A;var P,q=(P=o(),function(t,n,r,e,a,u){var o,i;for(n||(n=2),r||(r=0),i=e?Math.min(e*n+r,t.length):t.length,o=r;o low_limit)\n", - " peak_vals = peak_vals[peak_idxs]\n", - " ratio = peak_vals.mean() / i_dat.mean()\n", - "\n", - " return peak_vals, peak_idxs, ratio\n", - "\n", - "def fit_limits(i0_data, peak_vals, i_low, i_high, bins=100):\n", - " \"\"\"Get the line fit and standard deviation of the plot of i0 vs int_intensities\"\"\"\n", - " m, b = np.polyfit(i0_data, peak_vals, 1)\n", - " x = np.linspace(i_low, i_high, bins)\n", - " sigma = np.std(peak_vals)\n", - " y = x * m + b\n", - "\n", - " return x, y, m, b, sigma\n", - "\n", - " ###### Bokeh Figures #######\n", - "\n", - "def peak_fig(signal, hist, edges, peak_idx, left, right):\n", - " \"\"\"General histogram plotter with peak location and left/right limits plotted\"\"\"\n", - " low = round(edges[left], 2)\n", - " hi = round(edges[right], 2)\n", - " fig = figure(\n", - " title='Used Intensity Distribution for {0}. Low/Hi: {1}/{2}'.format(signal, low, hi),\n", - " x_axis_label='Intensity Values',\n", - " y_axis_label='Counts'\n", - " )\n", - " fig.quad(top=hist, bottom=0, left=edges[:-1], right=edges[1:])\n", - " left_line = Span(location=edges[left], dimension='height', line_color='black')\n", - " right_line = Span(location=edges[right], dimension='height', line_color='black')\n", - " peak_line = Span(location=edges[peak_idx], dimension='height', line_color='red')\n", - " fig.renderers.extend([left_line, right_line, peak_line])\n", - "\n", - " return fig\n", - "\n", - "def azav_fig(ave_azav, peak, intensity, delta_bin):\n", - " \"\"\"Generate the azav fig for html file\"\"\"\n", - " x_vals = np.arange(len(ave_azav))\n", - " fig = figure(\n", - " title='Average Azimuthal Binned Array: Center - {0}, min/max - {1}/{2}, intensity - {3}'.format(peak, peak-delta_bin, peak+delta_bin, round(intensity, 2)),\n", - " x_axis_label='Bins',\n", - " y_axis_label='Intensity',\n", - " )\n", - "\n", - " peak_line = Span(location=peak, dimension='height', line_color='green', line_width=2)\n", - " lower_line = Span(location=peak-delta_bin, dimension='height', line_color='black')\n", - " upper_line = Span(location=peak+delta_bin, dimension='height', line_color='black')\n", - " ave_azav_curve = fig.scatter(x_vals, ave_azav)\n", - " fig.renderers.extend([peak_line, lower_line, upper_line])\n", - "\n", - " azav_legend = Legend(items=[\n", - " LegendItem(label='Azimuthal Average', renderers=[ave_azav_curve])\n", - " ])\n", - " fig.add_layout(azav_legend)\n", - "\n", - " return fig\n", - "\n", - "def intensity_hist(intensity_hist, edges):\n", - " fig = figure(\n", - " title='Intensity Histogram'\n", - " )\n", - " fig.quad(top=intensity_hist, bottom=0, left=edges[:-1], right=edges[1:])\n", - "\n", - " return fig\n", - "\n", - "def intensity_vs_peak_fig(intensity, peak_vals, x, y, slope, intercept, sigma):\n", - " \"\"\"Simple plot of intensity vs peak value\"\"\"\n", - " fig = figure(\n", - " title='Peak value vs Intensity. Slope = {0}, Intercept = {1}'.format(round(slope, 2), round(intercept, 2)),\n", - " x_axis_label='Intensity Monitor Value',\n", - " y_axis_label='Peak Values'\n", - " )\n", - " fig.x_range.range_padding = fig.y_range.range_padding = 0\n", - " h, y_edge, x_edge = np.histogram2d(peak_vals, intensity, bins=100)\n", - " fig.image(image=[h], x=x_edge[0], y=y_edge[0], dh=y_edge[-1]-y_edge[0], dw=x_edge[-1]-x_edge[0], palette=\"Spectral11\")\n", - " color_mapper = LinearColorMapper(palette=\"Spectral11\", low=h.min(), high=h.max())\n", - " color_bar = ColorBar(color_mapper=color_mapper, location=(0,0))\n", - " fig.xaxis.bounds = [i0_low, i0_high]\n", - " fig.add_layout(color_bar, 'right')\n", - " fig.line(x, y, color='red')\n", - " fig.line(x, y - 1 * sigma, color='orange')\n", - " fig.line(x, y + 1 * sigma, color='orange')\n", - " return fig" - ] - }, - { - "cell_type": "code", - "execution_count": 45, - "metadata": { - "scrolled": true - }, - "outputs": [], - "source": [ - "# Find I0 distribution and filter out unused values\n", - "i0_data = np.array(i0_data)\n", - "i0_hist, i0_edges, i0_peak_idx, i0_left_idx, i0_right_idx = peak_lr(i0_data)\n", - "i0_low = i0_edges[i0_left_idx]\n", - "i0_high = i0_edges[i0_right_idx]\n", - "i0_idxs = np.where((i0_data > i0_low) & (i0_data < i0_high))\n", - "i0_data_use = i0_data[i0_idxs]\n", - "\n", - "# Filter on I0 data to get points we will evaluate\n", - "hist_peak, edges_peak, peak_idx, left_peak, right_peak = peak_lr(i0_data_use)\n", - "p = peak_fig('gdet', hist_peak, edges_peak, peak_idx, left_peak, right_peak)\n", - "\n", - "# Get the azav value we'll use\n", - "azav_use = [azav_data[idx] for idx in i0_idxs[0]]\n", - "ave_azav = np.array((np.sum(azav_use, axis=0)) / len(azav_use))\n", - "# Find the peak bin from average azav values\n", - "peak = calc_azav_peak(ave_azav)\n", - "peak=25\n", - "\n", - "# Get the integrated intensity and generate fig\n", - "integrated_intensity = get_integrated_intensity(ave_azav, peak, DELTA_BIN)\n", - "p1 = azav_fig(ave_azav, peak, integrated_intensity, DELTA_BIN)\n", - "\n", - "\n", - "# Go back through indices and find peak values for all the intensities\n", - "low = peak - DELTA_BIN\n", - "high = peak + DELTA_BIN\n", - "peak_vals = [azav[low:high].sum(axis=0) for azav in azav_use]\n", - "# Now fit I0 vs diffraction intensities\n", - "x, y, slope, intercept, sigma = fit_limits(i0_data_use, peak_vals, i0_low, i0_high)\n", - "p2 = intensity_vs_peak_fig(i0_data_use, peak_vals, x, y, slope, intercept, sigma)\n" - ] - }, - { - "cell_type": "code", - "execution_count": 46, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/javascript": [ - "(function(root) {\n", - " function embed_document(root) {\n", - " \n", - " var docs_json = {\"2fd031af-cc1a-4914-b0ef-7bc7295fc713\":{\"roots\":{\"references\":[{\"attributes\":{},\"id\":\"5426\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"5663\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"5662\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"5660\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"5423\",\"type\":\"PanTool\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"lightgrey\"},\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":{\"value\":1.0},\"line_color\":{\"value\":\"black\"},\"line_dash\":[4,4],\"line_width\":{\"value\":2},\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"5665\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"5664\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"5414\",\"type\":\"BasicTicker\"},{\"attributes\":{\"ticker\":{\"id\":\"5414\",\"type\":\"BasicTicker\"}},\"id\":\"5417\",\"type\":\"Grid\"},{\"attributes\":{\"callback\":null,\"data\":{\"left\":{\"__ndarray__\":\"AAC4T2y/2j9mZqH3lgXbP83Mip/BS9s/MzN0R+yR2z+amV3vFtjbPwAAR5dBHtw/ZmYwP2xk3D/NzBnnlqrcPzMzA4/B8Nw/mpnsNuw23T8AANbeFn3dP2Zmv4ZBw90/zcyoLmwJ3j8zM5LWlk/eP5qZe37Bld4/AABlJuzb3j9mZk7OFiLfP83MN3ZBaN8/MzMhHmyu3z+amQrGlvTfPwAA+rZgHeA/M7PuCnZA4D9mZuNei2PgP5oZ2LKghuA/zczMBrap4D8AgMFay8zgPzMztq7g7+A/ZuaqAvYS4T+amZ9WCzbhP81MlKogWeE/AACJ/jV84T8zs31SS5/hP2ZmcqZgwuE/mhln+nXl4T/NzFtOiwjiPwCAUKKgK+I/MzNF9rVO4j9m5jlKy3HiP5qZLp7glOI/zUwj8vW34j8AABhGC9viPzOzDJog/uI/ZmYB7jUh4z+aGfZBS0TjP83M6pVgZ+M/AIDf6XWK4z8zM9Q9i63jP2bmyJGg0OM/mpm95bXz4z/NTLI5yxbkPwAAp43gOeQ/M7Ob4fVc5D9mZpA1C4DkP5oZhYkgo+Q/zcx53TXG5D8AgG4xS+nkPzQzY4VgDOU/ZuZX2XUv5T+amUwti1LlP81MQYGgdeU/AAA21bWY5T80syopy7vlP2ZmH33g3uU/mhkU0fUB5j/NzAglCyXmPwCA/XggSOY/NDPyzDVr5j9m5uYgS47mP5qZ23RgseY/zUzQyHXU5j8AAMUci/fmPzSzuXCgGuc/ZmauxLU95z+aGaMYy2DnP83Ml2zgg+c/AICMwPWm5z80M4EUC8rnP2bmdWgg7ec/mplqvDUQ6D/NTF8QSzPoPwAAVGRgVug/NLNIuHV56D9mZj0Mi5zoP5oZMmCgv+g/zcwmtLXi6D8AgBsIywXpPzQzEFzgKOk/ZuYEsPVL6T+amfkDC2/pP81M7lcgkuk/AADjqzW16T80s9f/StjpP2ZmzFNg++k/mhnBp3Ue6j/NzLX7ikHqPwCAqk+gZOo/NDOfo7WH6j9m5pP3yqrqP5qZiEvgzeo/zUx9n/Xw6j8=\",\"dtype\":\"float64\",\"shape\":[100]},\"right\":{\"__ndarray__\":\"Zmah95YF2z/NzIqfwUvbPzMzdEfskds/mpld7xbY2z8AAEeXQR7cP2ZmMD9sZNw/zcwZ55aq3D8zMwOPwfDcP5qZ7DbsNt0/AADW3hZ93T9mZr+GQcPdP83MqC5sCd4/MzOS1pZP3j+amXt+wZXePwAAZSbs294/ZmZOzhYi3z/NzDd2QWjfPzMzIR5srt8/mpkKxpb03z8AAPq2YB3gPzOz7gp2QOA/ZmbjXotj4D+aGdiyoIbgP83MzAa2qeA/AIDBWsvM4D8zM7au4O/gP2bmqgL2EuE/mpmfVgs24T/NTJSqIFnhPwAAif41fOE/M7N9Ukuf4T9mZnKmYMLhP5oZZ/p15eE/zcxbTosI4j8AgFCioCviPzMzRfa1TuI/ZuY5Sstx4j+amS6e4JTiP81MI/L1t+I/AAAYRgvb4j8zswyaIP7iP2ZmAe41IeM/mhn2QUtE4z/NzOqVYGfjPwCA3+l1iuM/MzPUPYut4z9m5siRoNDjP5qZveW18+M/zUyyOcsW5D8AAKeN4DnkPzOzm+H1XOQ/ZmaQNQuA5D+aGYWJIKPkP83Med01xuQ/AIBuMUvp5D80M2OFYAzlP2bmV9l1L+U/mplMLYtS5T/NTEGBoHXlPwAANtW1mOU/NLMqKcu75T9mZh994N7lP5oZFNH1AeY/zcwIJQsl5j8AgP14IEjmPzQz8sw1a+Y/ZubmIEuO5j+amdt0YLHmP81M0Mh11OY/AADFHIv35j80s7lwoBrnP2ZmrsS1Pec/mhmjGMtg5z/NzJds4IPnPwCAjMD1puc/NDOBFAvK5z9m5nVoIO3nP5qZarw1EOg/zUxfEEsz6D8AAFRkYFboPzSzSLh1eeg/ZmY9DIuc6D+aGTJgoL/oP83MJrS14ug/AIAbCMsF6T80MxBc4CjpP2bmBLD1S+k/mpn5Awtv6T/NTO5XIJLpPwAA46s1tek/NLPX/0rY6T9mZsxTYPvpP5oZwad1Huo/zcy1+4pB6j8AgKpPoGTqPzQzn6O1h+o/ZuaT98qq6j+amYhL4M3qP81MfZ/18Oo/AABy8woU6z8=\",\"dtype\":\"float64\",\"shape\":[100]},\"top\":[2,5,4,2,2,3,2,1,4,6,2,4,4,5,2,3,2,13,5,7,5,7,3,2,2,3,7,6,6,7,5,9,5,11,7,7,8,9,9,11,7,7,6,12,12,9,12,12,13,18,7,15,10,12,15,12,20,18,18,20,5,11,16,11,25,23,11,20,19,17,20,16,12,16,12,15,9,24,13,10,13,7,8,12,14,10,4,7,12,10,6,6,5,5,2,5,5,6,0,4]},\"selected\":{\"id\":\"5663\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"5664\",\"type\":\"UnionRenderers\"}},\"id\":\"5436\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"bottom\":{\"value\":0},\"fill_color\":{\"value\":\"#1f77b4\"},\"left\":{\"field\":\"left\"},\"line_color\":{\"value\":\"#1f77b4\"},\"right\":{\"field\":\"right\"},\"top\":{\"field\":\"top\"}},\"id\":\"5437\",\"type\":\"Quad\"},{\"attributes\":{\"axis_label\":\"Intensity Values\",\"formatter\":{\"id\":\"5660\",\"type\":\"BasicTickFormatter\"},\"ticker\":{\"id\":\"5414\",\"type\":\"BasicTicker\"}},\"id\":\"5413\",\"type\":\"LinearAxis\"},{\"attributes\":{\"bottom\":{\"value\":0},\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"left\":{\"field\":\"left\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"right\":{\"field\":\"right\"},\"top\":{\"field\":\"top\"}},\"id\":\"5438\",\"type\":\"Quad\"},{\"attributes\":{\"data_source\":{\"id\":\"5436\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"5437\",\"type\":\"Quad\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"5438\",\"type\":\"Quad\"},\"selection_glyph\":null,\"view\":{\"id\":\"5440\",\"type\":\"CDSView\"}},\"id\":\"5439\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"axis_label\":\"Counts\",\"formatter\":{\"id\":\"5662\",\"type\":\"BasicTickFormatter\"},\"ticker\":{\"id\":\"5419\",\"type\":\"BasicTicker\"}},\"id\":\"5418\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"5419\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"5428\",\"type\":\"HelpTool\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_multi\":null,\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"5423\",\"type\":\"PanTool\"},{\"id\":\"5424\",\"type\":\"WheelZoomTool\"},{\"id\":\"5425\",\"type\":\"BoxZoomTool\"},{\"id\":\"5426\",\"type\":\"SaveTool\"},{\"id\":\"5427\",\"type\":\"ResetTool\"},{\"id\":\"5428\",\"type\":\"HelpTool\"}]},\"id\":\"5429\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"5411\",\"type\":\"LinearScale\"},{\"attributes\":{\"callback\":null},\"id\":\"5407\",\"type\":\"DataRange1d\"},{\"attributes\":{\"callback\":null},\"id\":\"5405\",\"type\":\"DataRange1d\"},{\"attributes\":{\"text\":\"Used Intensity Distribution for gdet. Low/Hi: 0.52/0.82\"},\"id\":\"5403\",\"type\":\"Title\"},{\"attributes\":{\"below\":[{\"id\":\"5413\",\"type\":\"LinearAxis\"}],\"center\":[{\"id\":\"5417\",\"type\":\"Grid\"},{\"id\":\"5422\",\"type\":\"Grid\"}],\"left\":[{\"id\":\"5418\",\"type\":\"LinearAxis\"}],\"renderers\":[{\"id\":\"5439\",\"type\":\"GlyphRenderer\"},{\"id\":\"5441\",\"type\":\"Span\"},{\"id\":\"5442\",\"type\":\"Span\"},{\"id\":\"5443\",\"type\":\"Span\"}],\"title\":{\"id\":\"5403\",\"type\":\"Title\"},\"toolbar\":{\"id\":\"5429\",\"type\":\"Toolbar\"},\"x_range\":{\"id\":\"5405\",\"type\":\"DataRange1d\"},\"x_scale\":{\"id\":\"5409\",\"type\":\"LinearScale\"},\"y_range\":{\"id\":\"5407\",\"type\":\"DataRange1d\"},\"y_scale\":{\"id\":\"5411\",\"type\":\"LinearScale\"}},\"id\":\"5402\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"dimension\":\"height\",\"line_color\":{\"value\":\"red\"},\"location\":0.6920219157531392},\"id\":\"5443\",\"type\":\"Span\"},{\"attributes\":{\"dimension\":\"height\",\"location\":0.8205008426870336},\"id\":\"5442\",\"type\":\"Span\"},{\"attributes\":{\"dimension\":\"height\",\"location\":0.5249993107390765},\"id\":\"5441\",\"type\":\"Span\"},{\"attributes\":{\"source\":{\"id\":\"5436\",\"type\":\"ColumnDataSource\"}},\"id\":\"5440\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"5409\",\"type\":\"LinearScale\"},{\"attributes\":{\"dimension\":1,\"ticker\":{\"id\":\"5419\",\"type\":\"BasicTicker\"}},\"id\":\"5422\",\"type\":\"Grid\"},{\"attributes\":{\"overlay\":{\"id\":\"5665\",\"type\":\"BoxAnnotation\"}},\"id\":\"5425\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"5424\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"5427\",\"type\":\"ResetTool\"}],\"root_ids\":[\"5402\"]},\"title\":\"Bokeh Application\",\"version\":\"1.4.0\"}};\n", - " var render_items = [{\"docid\":\"2fd031af-cc1a-4914-b0ef-7bc7295fc713\",\"roots\":{\"5402\":\"e7466a38-1419-48aa-bf1f-fa7eedf54a46\"}}];\n", - " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n", - "\n", - " }\n", - " if (root.Bokeh !== undefined) {\n", - " embed_document(root);\n", - " } else {\n", - " var attempts = 0;\n", - " var timer = setInterval(function(root) {\n", - " if (root.Bokeh !== undefined) {\n", - " clearInterval(timer);\n", - " embed_document(root);\n", - " } else {\n", - " attempts++;\n", - " if (attempts > 100) {\n", - " clearInterval(timer);\n", - " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n", - " }\n", - " }\n", - " }, 10, root)\n", - " }\n", - "})(window);" - ], - "application/vnd.bokehjs_exec.v0+json": "" - }, - "metadata": { - "application/vnd.bokehjs_exec.v0+json": { - "id": "5402" - } - }, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/javascript": [ - "(function(root) {\n", - " function embed_document(root) {\n", - " \n", - " var docs_json = {\"599beaa9-7838-41f5-ace1-10e5e0afb494\":{\"roots\":{\"references\":[{\"attributes\":{\"items\":[{\"id\":\"5486\",\"type\":\"LegendItem\"}]},\"id\":\"5487\",\"type\":\"Legend\"},{\"attributes\":{},\"id\":\"5838\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"5470\",\"type\":\"HelpTool\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_multi\":null,\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"5465\",\"type\":\"PanTool\"},{\"id\":\"5466\",\"type\":\"WheelZoomTool\"},{\"id\":\"5467\",\"type\":\"BoxZoomTool\"},{\"id\":\"5468\",\"type\":\"SaveTool\"},{\"id\":\"5469\",\"type\":\"ResetTool\"},{\"id\":\"5470\",\"type\":\"HelpTool\"}]},\"id\":\"5471\",\"type\":\"Toolbar\"},{\"attributes\":{\"below\":[{\"id\":\"5455\",\"type\":\"LinearAxis\"}],\"center\":[{\"id\":\"5459\",\"type\":\"Grid\"},{\"id\":\"5464\",\"type\":\"Grid\"},{\"id\":\"5487\",\"type\":\"Legend\"}],\"left\":[{\"id\":\"5460\",\"type\":\"LinearAxis\"}],\"renderers\":[{\"id\":\"5484\",\"type\":\"GlyphRenderer\"},{\"id\":\"5478\",\"type\":\"Span\"},{\"id\":\"5479\",\"type\":\"Span\"},{\"id\":\"5480\",\"type\":\"Span\"}],\"title\":{\"id\":\"5445\",\"type\":\"Title\"},\"toolbar\":{\"id\":\"5471\",\"type\":\"Toolbar\"},\"x_range\":{\"id\":\"5447\",\"type\":\"DataRange1d\"},\"x_scale\":{\"id\":\"5451\",\"type\":\"LinearScale\"},\"y_range\":{\"id\":\"5449\",\"type\":\"DataRange1d\"},\"y_scale\":{\"id\":\"5453\",\"type\":\"LinearScale\"}},\"id\":\"5444\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"dimension\":\"height\",\"line_color\":{\"value\":\"green\"},\"line_width\":{\"value\":2},\"location\":25},\"id\":\"5478\",\"type\":\"Span\"},{\"attributes\":{\"dimension\":\"height\",\"location\":20},\"id\":\"5479\",\"type\":\"Span\"},{\"attributes\":{\"ticker\":{\"id\":\"5456\",\"type\":\"BasicTicker\"}},\"id\":\"5459\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"5451\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"5453\",\"type\":\"LinearScale\"},{\"attributes\":{\"axis_label\":\"Bins\",\"formatter\":{\"id\":\"5836\",\"type\":\"BasicTickFormatter\"},\"ticker\":{\"id\":\"5456\",\"type\":\"BasicTicker\"}},\"id\":\"5455\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"5456\",\"type\":\"BasicTicker\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"lightgrey\"},\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":{\"value\":1.0},\"line_color\":{\"value\":\"black\"},\"line_dash\":[4,4],\"line_width\":{\"value\":2},\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"5841\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"5840\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"5461\",\"type\":\"BasicTicker\"},{\"attributes\":{\"axis_label\":\"Intensity\",\"formatter\":{\"id\":\"5838\",\"type\":\"BasicTickFormatter\"},\"ticker\":{\"id\":\"5461\",\"type\":\"BasicTicker\"}},\"id\":\"5460\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"5465\",\"type\":\"PanTool\"},{\"attributes\":{\"dimension\":1,\"ticker\":{\"id\":\"5461\",\"type\":\"BasicTicker\"}},\"id\":\"5464\",\"type\":\"Grid\"},{\"attributes\":{\"overlay\":{\"id\":\"5841\",\"type\":\"BoxAnnotation\"}},\"id\":\"5467\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"5466\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"5469\",\"type\":\"ResetTool\"},{\"attributes\":{\"label\":{\"value\":\"Azimuthal Average\"},\"renderers\":[{\"id\":\"5484\",\"type\":\"GlyphRenderer\"}]},\"id\":\"5486\",\"type\":\"LegendItem\"},{\"attributes\":{\"source\":{\"id\":\"5481\",\"type\":\"ColumnDataSource\"}},\"id\":\"5485\",\"type\":\"CDSView\"},{\"attributes\":{\"data_source\":{\"id\":\"5481\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"5482\",\"type\":\"Scatter\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"5483\",\"type\":\"Scatter\"},\"selection_glyph\":null,\"view\":{\"id\":\"5485\",\"type\":\"CDSView\"}},\"id\":\"5484\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"5483\",\"type\":\"Scatter\"},{\"attributes\":{\"fill_color\":{\"value\":\"#1f77b4\"},\"line_color\":{\"value\":\"#1f77b4\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"5482\",\"type\":\"Scatter\"},{\"attributes\":{\"callback\":null,\"data\":{\"x\":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99],\"y\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAK23aD5+iflB16GXQqvBvkIliMhCWDbQQiKN20LkNO5CuSoBQ/WWDUMZfh9DD8M2Q3QvU0MsU3hDPzKSQyJgrEN+DM1DsbzzQ5nSDkQcdSJE0cYxRBcCOkTjCTpETVIzROR0KER+3xtEmgAMRG9G+EMI5uVDEW/cQxFL1EPBIc1DJbLHQ4rvwEOMe7BD1xCgQ1jmn0O9JqJDG0ucQ9PikkMTc4dDRNp2Q5BSXkMaH0dDLN4zQ1ZUIkO9mhJDwwsFQ3wo8kL7q+BCkZfSQm38xUIjG7tCZ+2yQm+2rEJnKKdCB72gQnmzmkLE2JRCwDePQtOeh0KWJXpCCKFpQpzPXEJh/09CpCVIQrv4RkIuBElCHY9GQmflPEITsjRC64MuQmAlKEJMEidCK+cgQvITGELE3RFCxvkIQsVvAUJfF95BbYKmQT43f0HMZmNBV6VVQSRPO0EZTA1BdQDCQEyWnkA35opAkWhNQGXCpj9cOZQ9AAAAAAAAAAAAAAAAAAAAAA==\",\"dtype\":\"float32\",\"shape\":[100]}},\"selected\":{\"id\":\"5839\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"5840\",\"type\":\"UnionRenderers\"}},\"id\":\"5481\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"dimension\":\"height\",\"location\":30},\"id\":\"5480\",\"type\":\"Span\"},{\"attributes\":{},\"id\":\"5836\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"callback\":null},\"id\":\"5449\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"5468\",\"type\":\"SaveTool\"},{\"attributes\":{\"callback\":null},\"id\":\"5447\",\"type\":\"DataRange1d\"},{\"attributes\":{\"text\":\"Average Azimuthal Binned Array: Center - 25, min/max - 20/30, intensity - 6332.59\"},\"id\":\"5445\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"5839\",\"type\":\"Selection\"}],\"root_ids\":[\"5444\"]},\"title\":\"Bokeh Application\",\"version\":\"1.4.0\"}};\n", - " var render_items = [{\"docid\":\"599beaa9-7838-41f5-ace1-10e5e0afb494\",\"roots\":{\"5444\":\"d176dc66-a9cb-44f0-8a5f-feeb2621c872\"}}];\n", - " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n", - "\n", - " }\n", - " if (root.Bokeh !== undefined) {\n", - " embed_document(root);\n", - " } else {\n", - " var attempts = 0;\n", - " var timer = setInterval(function(root) {\n", - " if (root.Bokeh !== undefined) {\n", - " clearInterval(timer);\n", - " embed_document(root);\n", - " } else {\n", - " attempts++;\n", - " if (attempts > 100) {\n", - " clearInterval(timer);\n", - " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n", - " }\n", - " }\n", - " }, 10, root)\n", - " }\n", - "})(window);" - ], - "application/vnd.bokehjs_exec.v0+json": "" - }, - "metadata": { - "application/vnd.bokehjs_exec.v0+json": { - "id": "5444" - } - }, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
\n" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/javascript": [ - "(function(root) {\n", - " function embed_document(root) {\n", - " \n", - " var docs_json = {\"9f622e40-9c1b-4df9-9c6c-1e117624b6da\":{\"roots\":{\"references\":[{\"attributes\":{\"text\":\"Peak value vs Intensity. Slope = 15036.02, Intercept = -3630.12\"},\"id\":\"5489\",\"type\":\"Title\"},{\"attributes\":{\"palette\":[\"#5e4fa2\",\"#3288bd\",\"#66c2a5\",\"#abdda4\",\"#e6f598\",\"#ffffbf\",\"#fee08b\",\"#fdae61\",\"#f46d43\",\"#d53e4f\",\"#9e0142\"]},\"id\":\"5526\",\"type\":\"LinearColorMapper\"},{\"attributes\":{\"data_source\":{\"id\":\"5531\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"5532\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"5533\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"5535\",\"type\":\"CDSView\"}},\"id\":\"5534\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"callback\":null,\"data\":{\"image\":[{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAQAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAPA/AAAAAAAA8D8AAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAQAAAAAAAAAAAAAAAAAAA8D8AAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAPA/AAAAAAAAAEAAAAAAAADwPwAAAAAAAPA/AAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAQAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAA8D8AAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAQAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAPA/AAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAEAAAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAADwPwAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAPA/AAAAAAAAAAAAAAAAAADwPwAAAAAAAPA/AAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAPA/AAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\",\"dtype\":\"float64\",\"shape\":[100,100]}]},\"selected\":{\"id\":\"6025\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"6026\",\"type\":\"UnionRenderers\"}},\"id\":\"5522\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"color_mapper\":{\"id\":\"5524\",\"type\":\"LinearColorMapper\"},\"dh\":{\"units\":\"data\",\"value\":15016.553024291992},\"dw\":{\"units\":\"data\",\"value\":0.428263089779648},\"image\":{\"field\":\"image\"},\"x\":{\"value\":0.41793353829416446},\"y\":{\"value\":78.65010070800781}},\"id\":\"5523\",\"type\":\"Image\"},{\"attributes\":{\"palette\":[\"#5e4fa2\",\"#3288bd\",\"#66c2a5\",\"#abdda4\",\"#e6f598\",\"#ffffbf\",\"#fee08b\",\"#fdae61\",\"#f46d43\",\"#d53e4f\",\"#9e0142\"]},\"id\":\"5524\",\"type\":\"LinearColorMapper\"},{\"attributes\":{\"axis_label\":\"Intensity Monitor Value\",\"bounds\":[0.41789974458224605,0.8466769609192851],\"formatter\":{\"id\":\"6022\",\"type\":\"BasicTickFormatter\"},\"ticker\":{\"id\":\"5500\",\"type\":\"BasicTicker\"}},\"id\":\"5499\",\"type\":\"LinearAxis\"},{\"attributes\":{\"dimension\":1,\"ticker\":{\"id\":\"5505\",\"type\":\"BasicTicker\"}},\"id\":\"5508\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"5509\",\"type\":\"PanTool\"},{\"attributes\":{\"source\":{\"id\":\"5522\",\"type\":\"ColumnDataSource\"}},\"id\":\"5528\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"5495\",\"type\":\"LinearScale\"},{\"attributes\":{\"axis_label\":\"Peak Values\",\"formatter\":{\"id\":\"6024\",\"type\":\"BasicTickFormatter\"},\"ticker\":{\"id\":\"5505\",\"type\":\"BasicTicker\"}},\"id\":\"5504\",\"type\":\"LinearAxis\"},{\"attributes\":{\"source\":{\"id\":\"5541\",\"type\":\"ColumnDataSource\"}},\"id\":\"5545\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"5513\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"5500\",\"type\":\"BasicTicker\"},{\"attributes\":{\"callback\":null,\"range_padding\":0},\"id\":\"5493\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"5497\",\"type\":\"LinearScale\"},{\"attributes\":{\"line_color\":\"orange\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"5542\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"5543\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"5536\",\"type\":\"ColumnDataSource\"}},\"id\":\"5540\",\"type\":\"CDSView\"},{\"attributes\":{\"callback\":null,\"data\":{\"x\":{\"__ndarray__\":\"MzP/kd6+2j8zM/Ny1AXbPzMz51PKTNs/MzPbNMCT2z8zM88VttrbPzMzw/arIdw/MzO316Fo3D8zM6u4l6/cPzMzn5mN9tw/MzOTeoM93T8zM4dbeYTdPzMzezxvy90/MzNvHWUS3j8zM2P+WlnePzMzV99QoN4/MzNLwEbn3j8zMz+hPC7fPzMzM4Iydd8/MzMnYyi83z+ZmQ0ijwHgP5mZhxIKJeA/mZkBA4VI4D+ZmXvz/2vgP5mZ9eN6j+A/mZlv1PWy4D+ZmenEcNbgP5mZY7Xr+eA/mZndpWYd4T+ZmVeW4UDhP5mZ0YZcZOE/mZlLd9eH4T+ZmcVnUqvhP5mZP1jNzuE/mZm5SEjy4T+ZmTM5wxXiP5mZrSk+OeI/mZknGrlc4j+ZmaEKNIDiP5mZG/uuo+I/mZmV6ynH4j+ZmQ/cpOriP5mZicwfDuM/mZkDvZox4z+ZmX2tFVXjP5mZ952QeOM/mZlxjguc4z+Zmet+hr/jP5mZZW8B4+M/mZnfX3wG5D+ZmVlQ9ynkP5mZ00ByTeQ/mZlNMe1w5D+ZmcchaJTkP5mZQRLjt+Q/mZm7Al7b5D+ZmTXz2P7kP5mZr+NTIuU/mZkp1M5F5T+ZmaPESWnlP5mZHbXEjOU/mZmXpT+w5T+ZmRGWutPlP5mZi4Y19+U/mZkFd7Aa5j+ZmX9nKz7mP5mZ+VemYeY/mZlzSCGF5j+Zme04nKjmP5mZZykXzOY/mZnhGZLv5j+ZmVsKDRPnP5mZ1fqHNuc/mZlP6wJa5z+ZmcnbfX3nP5mZQ8z4oOc/mZm9vHPE5z+ZmTet7ufnP5mZsZ1pC+g/mZkrjuQu6D+ZmaV+X1LoP5mZH2/adeg/mZmZX1WZ6D+ZmRNQ0LzoP5mZjUBL4Og/mZkHMcYD6T+ZmYEhQSfpP5mZ+xG8Suk/mZl1Ajdu6T+Zme/ysZHpP5mZaeMstek/mZnj06fY6T+ZmV3EIvzpP5mZ17SdH+o/mZlRpRhD6j+ZmcuVk2bqP5mZRYYOiuo/mJm/domt6j+YmTlnBNHqP5iZs1d/9Oo/mZktSPoX6z8=\",\"dtype\":\"float64\",\"shape\":[100]},\"y\":{\"__ndarray__\":\"/mrJPsJRt0DAskSK4ZK3QID6v9UA1LdAQEI7ISAVuEACirZsP1a4QMLRMbhel7hAhBmtA37YuEBEYShPnRm5QAapo5q8WrlAxvAe5tubuUCIOJox+9y5QEiAFX0aHrpACsiQyDlfukDKDwwUWaC6QIpXh1944bpATJ8Cq5ciu0AM5332tmO7QM4u+UHWpLtAjnZ0jfXlu0BOvu/YFCe8QBAGayQ0aLxA0E3mb1OpvECSlWG7cuq8QFLd3AaSK71AEiVYUrFsvUDUbNOd0K29QJS0Tunv7r1AVvzJNA8wvkAWREWALnG+QNiLwMtNsr5AmNM7F23zvkBaG7dijDS/QBpjMq6rdb9A3Kqt+cq2v0Cc8ihF6ve/QC8dUsiEHMBAD8EPbhQ9wEDwZM0TpF3AQNAIi7kzfsBAsaxIX8OewECRUAYFU7/AQHH0w6ri38BAUpiBUHIAwUAyPD/2ASHBQBPg/JuRQcFA84O6QSFiwUDUJ3jnsILBQLTLNY1Ao8FAlW/zMtDDwUB1E7HYX+TBQFW3bn7vBMJANlssJH8lwkAW/+nJDkbCQPeip2+eZsJA10ZlFS6HwkC46iK7vafCQJiO4GBNyMJAeTKeBt3owkBZ1lusbAnDQDp6GVL8KcNAGh7X94tKw0D6wZSdG2vDQNtlUkOri8NAuwkQ6Tqsw0Ccrc2OyszDQHxRizRa7cNAXfVI2ukNxEA9mQaAeS7EQB49xCUJT8RA/uCBy5hvxEDfhD9xKJDEQL8o/Ra4sMRAn8y6vEfRxECAcHhi1/HEQGAUNghnEsVAQbjzrfYyxUAhXLFThlPFQAIAb/kVdMVA4qMsn6WUxUDDR+pENbXFQKPrp+rE1cVAg49lkFT2xUBkMyM25BbGQETX4NtzN8ZAJXuegQNYxkAFH1wnk3jGQObCGc0imcZAxmbXcrK5xkCnCpUYQtrGQIeuUr7R+sZAaFIQZGEbx0BI9s0J8TvHQCiai6+AXMdACT5JVRB9x0Dp4Qb7n53HQMqFxKAvvsdAqSmCRr/ex0CKzT/sTv/HQGpx/ZHeH8hATBW7N25AyEA=\",\"dtype\":\"float64\",\"shape\":[100]}},\"selected\":{\"id\":\"6031\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"6032\",\"type\":\"UnionRenderers\"}},\"id\":\"5541\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data_source\":{\"id\":\"5541\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"5542\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"5543\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"5545\",\"type\":\"CDSView\"}},\"id\":\"5544\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"ticker\":{\"id\":\"5500\",\"type\":\"BasicTicker\"}},\"id\":\"5503\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"6028\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"6029\",\"type\":\"Selection\"},{\"attributes\":{\"data_source\":{\"id\":\"5522\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"5523\",\"type\":\"Image\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"5525\",\"type\":\"Image\"},\"selection_glyph\":null,\"view\":{\"id\":\"5528\",\"type\":\"CDSView\"}},\"id\":\"5527\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"6020\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"6022\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"6024\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"6025\",\"type\":\"Selection\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"5538\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"6027\",\"type\":\"Selection\"},{\"attributes\":{\"callback\":null,\"range_padding\":0},\"id\":\"5491\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"5505\",\"type\":\"BasicTicker\"},{\"attributes\":{\"line_color\":\"red\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"5532\",\"type\":\"Line\"},{\"attributes\":{\"callback\":null,\"data\":{\"x\":{\"__ndarray__\":\"MzP/kd6+2j8zM/Ny1AXbPzMz51PKTNs/MzPbNMCT2z8zM88VttrbPzMzw/arIdw/MzO316Fo3D8zM6u4l6/cPzMzn5mN9tw/MzOTeoM93T8zM4dbeYTdPzMzezxvy90/MzNvHWUS3j8zM2P+WlnePzMzV99QoN4/MzNLwEbn3j8zMz+hPC7fPzMzM4Iydd8/MzMnYyi83z+ZmQ0ijwHgP5mZhxIKJeA/mZkBA4VI4D+ZmXvz/2vgP5mZ9eN6j+A/mZlv1PWy4D+ZmenEcNbgP5mZY7Xr+eA/mZndpWYd4T+ZmVeW4UDhP5mZ0YZcZOE/mZlLd9eH4T+ZmcVnUqvhP5mZP1jNzuE/mZm5SEjy4T+ZmTM5wxXiP5mZrSk+OeI/mZknGrlc4j+ZmaEKNIDiP5mZG/uuo+I/mZmV6ynH4j+ZmQ/cpOriP5mZicwfDuM/mZkDvZox4z+ZmX2tFVXjP5mZ952QeOM/mZlxjguc4z+Zmet+hr/jP5mZZW8B4+M/mZnfX3wG5D+ZmVlQ9ynkP5mZ00ByTeQ/mZlNMe1w5D+ZmcchaJTkP5mZQRLjt+Q/mZm7Al7b5D+ZmTXz2P7kP5mZr+NTIuU/mZkp1M5F5T+ZmaPESWnlP5mZHbXEjOU/mZmXpT+w5T+ZmRGWutPlP5mZi4Y19+U/mZkFd7Aa5j+ZmX9nKz7mP5mZ+VemYeY/mZlzSCGF5j+Zme04nKjmP5mZZykXzOY/mZnhGZLv5j+ZmVsKDRPnP5mZ1fqHNuc/mZlP6wJa5z+ZmcnbfX3nP5mZQ8z4oOc/mZm9vHPE5z+ZmTet7ufnP5mZsZ1pC+g/mZkrjuQu6D+ZmaV+X1LoP5mZH2/adeg/mZmZX1WZ6D+ZmRNQ0LzoP5mZjUBL4Og/mZkHMcYD6T+ZmYEhQSfpP5mZ+xG8Suk/mZl1Ajdu6T+Zme/ysZHpP5mZaeMstek/mZnj06fY6T+ZmV3EIvzpP5mZ17SdH+o/mZlRpRhD6j+ZmcuVk2bqP5mZRYYOiuo/mJm/domt6j+YmTlnBNHqP5iZs1d/9Oo/mZktSPoX6z8=\",\"dtype\":\"float64\",\"shape\":[100]},\"y\":{\"__ndarray__\":\"/dWSfdu6pEB/ZYkUGj2lQP/0f6tYv6VAgYR2QpdBpkADFG3Z1cOmQIWjY3AURqdABzNaB1PIp0CJwlCekUqoQAtSRzXQzKhAjeE9zA5PqUAPcTRjTdGpQJEAK/qLU6pAE5AhkcrVqkCTHxgoCVirQBWvDr9H2qtAlz4FVoZcrEAZzvvsxN6sQJtd8oMDYa1AHe3oGkLjrUCdfN+xgGWuQB8M1ki/565AoZvM3/1pr0AjK8N2POyvQFLd3IY9N7BAEiVY0lx4sEDUbNMdfLmwQJS0Tmmb+rBAVvzJtLo7sUAWREUA2nyxQNiLwEv5vbFAmNM7lxj/sUBaG7fiN0CyQBpjMi5XgbJA3KqteXbCskCc8ijFlQOzQF46pBC1RLNAHoIfXNSFs0DgyZqn88azQKARFvMSCLRAYlmRPjJJtEAioQyKUYq0QOLoh9Vwy7RApDADIZAMtUBkeH5sr021QCbA+bfOjrVA5gd1A+7PtUCoT/BODRG2QGiXa5osUrZAKt/m5UuTtkDqJmIxa9S2QKpu3XyKFbdAbLZYyKlWt0As/tMTyZe3QO5FT1/o2LdAro3KqgcauEBw1UX2Jlu4QDAdwUFGnLhA8mQ8jWXduECyrLfYhB65QHT0MiSkX7lANDyub8OguUD0gym74uG5QLbLpAYCI7pAdhMgUiFkukA4W5udQKW6QPiiFulf5rpAuuqRNH8nu0B6Mg2Anmi7QDx6iMu9qbtA/MEDF93qu0C+CX9i/Cu8QH5R+q0bbbxAPpl1+TquvEAA4fBEWu+8QMAobJB5ML1AgnDn25hxvUBCuGInuLK9QAQA3nLX871AxEdZvvY0vkCGj9QJFna+QEbXT1U1t75ABh/LoFT4vkDIZkbsczm/QIiuwTeTer9ASvY8g7K7v0AKPrjO0fy/QObCGY34HsBAxmbXMog/wECnCpXYF2DAQIeuUn6ngMBAaFIQJDehwEBI9s3JxsHAQCiai29W4sBACT5JFeYCwUDp4Qa7dSPBQMqFxGAFRMFAqSmCBpVkwUCKzT+sJIXBQGpx/VG0pcFATBW790PGwUA=\",\"dtype\":\"float64\",\"shape\":[100]}},\"selected\":{\"id\":\"6027\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"6028\",\"type\":\"UnionRenderers\"}},\"id\":\"5531\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"color_mapper\":{\"id\":\"5529\",\"type\":\"LinearColorMapper\"},\"formatter\":{\"id\":\"6020\",\"type\":\"BasicTickFormatter\"},\"location\":[0,0],\"ticker\":{\"id\":\"6019\",\"type\":\"BasicTicker\"}},\"id\":\"5530\",\"type\":\"ColorBar\"},{\"attributes\":{\"line_color\":\"orange\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"5537\",\"type\":\"Line\"},{\"attributes\":{\"callback\":null,\"data\":{\"x\":{\"__ndarray__\":\"MzP/kd6+2j8zM/Ny1AXbPzMz51PKTNs/MzPbNMCT2z8zM88VttrbPzMzw/arIdw/MzO316Fo3D8zM6u4l6/cPzMzn5mN9tw/MzOTeoM93T8zM4dbeYTdPzMzezxvy90/MzNvHWUS3j8zM2P+WlnePzMzV99QoN4/MzNLwEbn3j8zMz+hPC7fPzMzM4Iydd8/MzMnYyi83z+ZmQ0ijwHgP5mZhxIKJeA/mZkBA4VI4D+ZmXvz/2vgP5mZ9eN6j+A/mZlv1PWy4D+ZmenEcNbgP5mZY7Xr+eA/mZndpWYd4T+ZmVeW4UDhP5mZ0YZcZOE/mZlLd9eH4T+ZmcVnUqvhP5mZP1jNzuE/mZm5SEjy4T+ZmTM5wxXiP5mZrSk+OeI/mZknGrlc4j+ZmaEKNIDiP5mZG/uuo+I/mZmV6ynH4j+ZmQ/cpOriP5mZicwfDuM/mZkDvZox4z+ZmX2tFVXjP5mZ952QeOM/mZlxjguc4z+Zmet+hr/jP5mZZW8B4+M/mZnfX3wG5D+ZmVlQ9ynkP5mZ00ByTeQ/mZlNMe1w5D+ZmcchaJTkP5mZQRLjt+Q/mZm7Al7b5D+ZmTXz2P7kP5mZr+NTIuU/mZkp1M5F5T+ZmaPESWnlP5mZHbXEjOU/mZmXpT+w5T+ZmRGWutPlP5mZi4Y19+U/mZkFd7Aa5j+ZmX9nKz7mP5mZ+VemYeY/mZlzSCGF5j+Zme04nKjmP5mZZykXzOY/mZnhGZLv5j+ZmVsKDRPnP5mZ1fqHNuc/mZlP6wJa5z+ZmcnbfX3nP5mZQ8z4oOc/mZm9vHPE5z+ZmTet7ufnP5mZsZ1pC+g/mZkrjuQu6D+ZmaV+X1LoP5mZH2/adeg/mZmZX1WZ6D+ZmRNQ0LzoP5mZjUBL4Og/mZkHMcYD6T+ZmYEhQSfpP5mZ+xG8Suk/mZl1Ajdu6T+Zme/ysZHpP5mZaeMstek/mZnj06fY6T+ZmV3EIvzpP5mZ17SdH+o/mZlRpRhD6j+ZmcuVk2bqP5mZRYYOiuo/mJm/domt6j+YmTlnBNHqP5iZs1d/9Oo/mZktSPoX6z8=\",\"dtype\":\"float64\",\"shape\":[100]},\"y\":{\"__ndarray__\":\"DKi0CTa3hMAEatqtO66CwAQsAFJBpYDA+NtL7I04fcDoX5c0mSZ5wNjj4nykFHXAyGcuxa8CccBw1/MaduFpwFDfiquMvWHAYM5DeEYzU8AA8Y7LnFsnwEAkwIq+uEpAYAIyJDKkXUAw+YGBAvZmQFDx6vDrGW9AuPQpsOqec0DIcN5n37B3QNjskh/UwntA6GhH18jUf0B08n3HXvOBQHwwWCNZ/INAhG4yf1MFhkCMrAzbTQ6IQJDq5jZIF4pAkCjBkkIgjECgZpvuPCmOQFDSOqUbGZBAWPEn05gdkUBYEBUBFiKSQGAvAi+TJpNAYE7vXBArlEBobdyKjS+VQGiMybgKNJZAcKu25oc4l0BwyqMUBT2YQHjpkEKCQZlAeAh+cP9FmkCAJ2uefEqbQIBGWMz5TpxAiGVF+nZTnUCIhDIo9FeeQIijH1ZxXJ9ASGEGQncwoEDI8PzYtbKgQEyA82/0NKFAzA/qBjO3oUBQn+CdcTmiQNAu1zSwu6JAVL7Ny+49o0DUTcRiLcCjQFTduvlrQqRA2GyxkKrEpEBY/Kcn6UalQNyLnr4nyaVAXBuVVWZLpkDgqovspM2mQGA6goPjT6dA5Ml4GiLSp0BkWW+xYFSoQOjoZUif1qhAaHhc391YqUDoB1N2HNupQGyXSQ1bXapA7CZApJnfqkBwtjY72GGrQPBFLdIW5KtAdNUjaVVmrED0ZBoAlOisQHj0EJfSaq1A+IMHLhHtrUB8E/7ET2+uQPyi9FuO8a5AfDLr8sxzr0AAwuGJC/avQMAobBAlPLBAgnDnW0R9sEBCuGKnY76wQAQA3vKC/7BAxEdZPqJAsUCGj9SJwYGxQEbXT9XgwrFABh/LIAAEskDIZkZsH0WyQIiuwbc+hrJASvY8A17HskAKPrhOfQizQMyFM5qcSbNAjM2u5buKs0BOFSox28uzQA5dpXz6DLRA0KQgyBlOtECQ7JsTOY+0QFA0F19Y0LRAEnySqncRtUDSww32llK1QJQLiUG2k7VAUlMEjdXUtUAUm3/Y9BW2QNTi+iMUV7ZAmCp2bzOYtkA=\",\"dtype\":\"float64\",\"shape\":[100]}},\"selected\":{\"id\":\"6029\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"6030\",\"type\":\"UnionRenderers\"}},\"id\":\"5536\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"5531\",\"type\":\"ColumnDataSource\"}},\"id\":\"5535\",\"type\":\"CDSView\"},{\"attributes\":{\"below\":[{\"id\":\"5499\",\"type\":\"LinearAxis\"}],\"center\":[{\"id\":\"5503\",\"type\":\"Grid\"},{\"id\":\"5508\",\"type\":\"Grid\"}],\"left\":[{\"id\":\"5504\",\"type\":\"LinearAxis\"}],\"renderers\":[{\"id\":\"5527\",\"type\":\"GlyphRenderer\"},{\"id\":\"5534\",\"type\":\"GlyphRenderer\"},{\"id\":\"5539\",\"type\":\"GlyphRenderer\"},{\"id\":\"5544\",\"type\":\"GlyphRenderer\"}],\"right\":[{\"id\":\"5530\",\"type\":\"ColorBar\"}],\"title\":{\"id\":\"5489\",\"type\":\"Title\"},\"toolbar\":{\"id\":\"5515\",\"type\":\"Toolbar\"},\"x_range\":{\"id\":\"5491\",\"type\":\"DataRange1d\"},\"x_scale\":{\"id\":\"5495\",\"type\":\"LinearScale\"},\"y_range\":{\"id\":\"5493\",\"type\":\"DataRange1d\"},\"y_scale\":{\"id\":\"5497\",\"type\":\"LinearScale\"}},\"id\":\"5488\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"overlay\":{\"id\":\"6033\",\"type\":\"BoxAnnotation\"}},\"id\":\"5511\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"5510\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"data_source\":{\"id\":\"5536\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"5537\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"5538\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"5540\",\"type\":\"CDSView\"}},\"id\":\"5539\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"5512\",\"type\":\"SaveTool\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_multi\":null,\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"5509\",\"type\":\"PanTool\"},{\"id\":\"5510\",\"type\":\"WheelZoomTool\"},{\"id\":\"5511\",\"type\":\"BoxZoomTool\"},{\"id\":\"5512\",\"type\":\"SaveTool\"},{\"id\":\"5513\",\"type\":\"ResetTool\"},{\"id\":\"5514\",\"type\":\"HelpTool\"}]},\"id\":\"5515\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"5514\",\"type\":\"HelpTool\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"5533\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"6019\",\"type\":\"BasicTicker\"},{\"attributes\":{\"high\":3.0,\"low\":0.0,\"palette\":[\"#5e4fa2\",\"#3288bd\",\"#66c2a5\",\"#abdda4\",\"#e6f598\",\"#ffffbf\",\"#fee08b\",\"#fdae61\",\"#f46d43\",\"#d53e4f\",\"#9e0142\"]},\"id\":\"5529\",\"type\":\"LinearColorMapper\"},{\"attributes\":{},\"id\":\"6026\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"lightgrey\"},\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":{\"value\":1.0},\"line_color\":{\"value\":\"black\"},\"line_dash\":[4,4],\"line_width\":{\"value\":2},\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"6033\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"6032\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"6031\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"6030\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"color_mapper\":{\"id\":\"5526\",\"type\":\"LinearColorMapper\"},\"dh\":{\"units\":\"data\",\"value\":15016.553024291992},\"dw\":{\"units\":\"data\",\"value\":0.428263089779648},\"image\":{\"field\":\"image\"},\"x\":{\"value\":0.41793353829416446},\"y\":{\"value\":78.65010070800781}},\"id\":\"5525\",\"type\":\"Image\"}],\"root_ids\":[\"5488\"]},\"title\":\"Bokeh Application\",\"version\":\"1.4.0\"}};\n", - " var render_items = [{\"docid\":\"9f622e40-9c1b-4df9-9c6c-1e117624b6da\",\"roots\":{\"5488\":\"c4ad9a76-f3c7-4ff2-8853-ea5f14511a39\"}}];\n", - " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n", - "\n", - " }\n", - " if (root.Bokeh !== undefined) {\n", - " embed_document(root);\n", - " } else {\n", - " var attempts = 0;\n", - " var timer = setInterval(function(root) {\n", - " if (root.Bokeh !== undefined) {\n", - " clearInterval(timer);\n", - " embed_document(root);\n", - " } else {\n", - " attempts++;\n", - " if (attempts > 100) {\n", - " clearInterval(timer);\n", - " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n", - " }\n", - " }\n", - " }, 10, root)\n", - " }\n", - "})(window);" - ], - "application/vnd.bokehjs_exec.v0+json": "" - }, - "metadata": { - "application/vnd.bokehjs_exec.v0+json": { - "id": "5488" - } - }, - "output_type": "display_data" - } - ], - "source": [ - "show(p)\n", - "show(p1)\n", - "show(p2)" - ] - }, - { - "cell_type": "code", - "execution_count": 56, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'low_intercept': -3630.119742500365, 'ave_peak_intensity': 6332.59, 'delta_bin': 5, 'high_i0': 0.8466769609192851, 'ave_i0': 0.6414089038877722, 'peak_bin': 25, 'low_slope': 15036.018845158875, 'low_i0': 0.41789974458224605}\n" - ] - } - ], - "source": [ - "results = {\n", - " 'low_slope': slope,\n", - " 'low_intercept': intercept,\n", - " 'low_i0': i0_low,\n", - " 'high_i0': i0_high,\n", - " 'ave_i0': i0_data.mean(),\n", - " 'ave_peak_intensity': integrated_intensity,\n", - " 'peak_bin': peak,\n", - " 'delta_bin': DELTA_BIN\n", - "}\n", - "\n", - "\n", - "#After processing\n", - "# Peak bin\n", - "# low and hi delta_r around peak bin\n", - "# Io low bound and high bound\n", - "# Average Io\n", - "# Average integrated intensity\n", - "# slope and intercept of fit of 2D plot\n", - "# sigma around line fit\n", - "# Run number\n", - "\n", - "print(results)" - ] - }, - { - "cell_type": "code", - "execution_count": 54, - "metadata": {}, - "outputs": [ - { - "ename": "OSError", - "evalue": "[Errno 13] Permission denied: '/cds/home/opr/cxiopr/experiments/cxilv9518/jt_cal'", - "output_type": "error", - "traceback": [ - "\u001b[0;31m\u001b[0m", - "\u001b[0;31mOSError\u001b[0mTraceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0mpath\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m'/cds/home/opr/cxiopr/experiments/cxilv9518/jt_cal/run148/'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mos\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpath\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0misdir\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mpath\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 7\u001b[0;31m \u001b[0mos\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmakedirs\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mpath\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 8\u001b[0m \u001b[0mgspec\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msave\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m''\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mjoin\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mpath\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'report.html'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/reg/g/psdm/sw/conda1/inst/miniconda2-prod-rhel7/envs/ana-2.0.11/lib/python2.7/os.pyc\u001b[0m in \u001b[0;36mmakedirs\u001b[0;34m(name, mode)\u001b[0m\n\u001b[1;32m 148\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mhead\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0mtail\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mpath\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mexists\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mhead\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 149\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 150\u001b[0;31m \u001b[0mmakedirs\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mhead\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmode\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 151\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mOSError\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 152\u001b[0m \u001b[0;31m# be happy if someone already created the path\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/reg/g/psdm/sw/conda1/inst/miniconda2-prod-rhel7/envs/ana-2.0.11/lib/python2.7/os.pyc\u001b[0m in \u001b[0;36mmakedirs\u001b[0;34m(name, mode)\u001b[0m\n\u001b[1;32m 155\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mtail\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0mcurdir\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;31m# xxx/newdir/. exists if xxx/newdir exists\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 156\u001b[0m \u001b[0;32mreturn\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 157\u001b[0;31m \u001b[0mmkdir\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmode\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 158\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 159\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mremovedirs\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mOSError\u001b[0m: [Errno 13] Permission denied: '/cds/home/opr/cxiopr/experiments/cxilv9518/jt_cal'" - ] - } - ], - "source": [ - "gspec = pn.GridSpec(sizing_mode='stretch_both', max_height=1000)\n", - "gspec[0:3, 0:3] = p\n", - "gspec[4:6, 0:3] = p1\n", - "gspec[7:9, 0:3] = p2\n", - "path = '/cds/home/opr/cxiopr/experiments/cxilv9518/jt_cal/run148/'\n", - "if not os.path.isdir(path):\n", - " os.makedirs(path)\n", - "gspec.save(''.join([path, 'report.html']))" - ] - }, - { - "cell_type": "code", - "execution_count": 51, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "LCLS-I py2", - "language": "python", - "name": "ana1-current" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 2 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.15" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} From 6d4d6be7d46d0393e44b5a0f56a2dbdcf95c5bad Mon Sep 17 00:00:00 2001 From: Adam Date: Wed, 10 Mar 2021 15:35:35 -0800 Subject: [PATCH 09/23] MNT: Remove unused config file --- .../mpi_configs/smalldata_plot.yml | 71 ------------------- 1 file changed, 71 deletions(-) delete mode 100644 jet_tracking/mpi_scripts/mpi_configs/smalldata_plot.yml diff --git a/jet_tracking/mpi_scripts/mpi_configs/smalldata_plot.yml b/jet_tracking/mpi_scripts/mpi_configs/smalldata_plot.yml deleted file mode 100644 index 8bc2555..0000000 --- a/jet_tracking/mpi_scripts/mpi_configs/smalldata_plot.yml +++ /dev/null @@ -1,71 +0,0 @@ -master: - server: daq-cxi-mon05 - port: 5000 - -ipm_ttampl: - port: 5014 - var1: ipm2__sum - var2: tt__AMPL - number_of_events: 1200 - width: 900 - height: 600 - updateRate: 2 - xRange: - - auto - - 0.4 - yRange: - - auto - - 2000. - -ipm_ROI: - port: 5015 - var1: ipm2__sum - var2: jungfrau512k__ROI_1 - number_of_events: 1200 - width: 900 - height: 600 - updateRate: 2 - xRange: - - auto - - 0.4 - yRange: - - auto - - 2000. - -ROI_scan: - port: 5016 - i0var: ipm2__sum - sigvar: jungfrau512k__ROI_1 - binWidth: 100 - binEntries: 50 - FilterVar: - - lightStatus__xray - - ipm2__sum - FilterVarMin: - - 0.5 - - 50 - FilterVarMax: - - 1.5 - - 1000000. - width: 900 - height: 600 - updateRate: 2 - xRange: - - auto - - 0.4 - yRange: - - auto - - 2000. - -tt_fltpos_time: - port: 5015 - var1: ttall - var1_idx: 0 - number_of_events: 14400 - width: 900 - height: 300 - updateRate: 5 - yRange: - - auto - - 2000. - From 88143c7b7a83bf81560d92482e9ed89d75810515 Mon Sep 17 00:00:00 2001 From: Adam Date: Sat, 13 Mar 2021 16:57:50 -0800 Subject: [PATCH 10/23] new config file --- jet_tracking/jet_tracking_cal/jt_cal.py | 9 ++++---- .../{default_config.yml => cxi_config.yml} | 0 .../mpi_scripts/mpi_configs/xcs_config.yml | 23 +++++++++++++++++++ 3 files changed, 28 insertions(+), 4 deletions(-) rename jet_tracking/mpi_scripts/mpi_configs/{default_config.yml => cxi_config.yml} (100%) create mode 100644 jet_tracking/mpi_scripts/mpi_configs/xcs_config.yml diff --git a/jet_tracking/jet_tracking_cal/jt_cal.py b/jet_tracking/jet_tracking_cal/jt_cal.py index 1e1d6ca..42cb5cb 100644 --- a/jet_tracking/jet_tracking_cal/jt_cal.py +++ b/jet_tracking/jet_tracking_cal/jt_cal.py @@ -21,7 +21,7 @@ # Constants # Location of my branch for testing -JT_LOC = '/cds/home/a/aegger/jet_tracking/jet_tracking/' +JT_LOC = '/cds/group/pcds/epics-dev/aegger/jet_tracking/jet_tracking/' # Number of bins BINS = 100 # Number of events to process @@ -331,7 +331,7 @@ def intensity_vs_peak_fig(intensity, peak_vals, x, y, slope, intercept, sigma): parser.add_argument('--run', type=str, \ default=(os.environ.get('RUN_NUM', None))) parser.add_argument('--cfg', type=str, \ - default=(''.join([JT_LOC, 'mpi_scripts/mpi_configs/default_config.yml']))) + default=(''.join([JT_LOC, 'mpi_scripts/mpi_configs/xcs_config.yml']))) parser.add_argument('--delta_bin', type=int, \ default=(DELTA_BIN)) parser.add_argument('--bins', type=int, \ @@ -362,7 +362,7 @@ def intensity_vs_peak_fig(intensity, peak_vals, x, y, slope, intercept, sigma): masks = get_r_masks(det_map['shape'], args.bins) i0_data = [] azav_data=[] - ped = detector.pedestals(1)[0] + ped = detector.pedestals(int(args.run))[0] logger.info('starting to evaluate 1000 events') for evt_idx, evt in enumerate(ds.events()): @@ -374,7 +374,8 @@ def intensity_vs_peak_fig(intensity, peak_vals, x, y, slope, intercept, sigma): azav = np.array([np.mean(image[mask]) for mask in masks]) azav_data.append(azav) try: - i0_data.append(ipm.get(evt).f_12_ENRC()) + #i0_data.append(ipm.get(evt).f_12_ENRC()) + i0_data.append(getattr(ipm.get(evt), ipm_det)()) except: logger.warning('missing i0 for event {}'.format(evt_idx)) i0_data.append(0.0) diff --git a/jet_tracking/mpi_scripts/mpi_configs/default_config.yml b/jet_tracking/mpi_scripts/mpi_configs/cxi_config.yml similarity index 100% rename from jet_tracking/mpi_scripts/mpi_configs/default_config.yml rename to jet_tracking/mpi_scripts/mpi_configs/cxi_config.yml diff --git a/jet_tracking/mpi_scripts/mpi_configs/xcs_config.yml b/jet_tracking/mpi_scripts/mpi_configs/xcs_config.yml new file mode 100644 index 0000000..8ec9418 --- /dev/null +++ b/jet_tracking/mpi_scripts/mpi_configs/xcs_config.yml @@ -0,0 +1,23 @@ +api_msg: + port: 5000 + +hutch: 'xcs' + +det_map: + name: 'epix10k2M' + shape: + - 1667 + - 1668 + dtype: float32 + bins: 100 + +pv_map: + 1: 'CXI:JTRK:REQ:DIFF_INTENSITY' + 2: 'CXI:JTRK:REQ:I0' + +ipm: + name: 'XCS-SB2-BMMON' + det: 'TotalIntensity' +#ipm: +# name: 'CXI-DG2-BMMON' +# det: None From ebe057d3bad152982b3f31fe0edba46991d1fcbf Mon Sep 17 00:00:00 2001 From: Adam Date: Sat, 13 Mar 2021 16:59:07 -0800 Subject: [PATCH 11/23] unused import --- jet_tracking/mpi_scripts/mpi_worker.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/jet_tracking/mpi_scripts/mpi_worker.py b/jet_tracking/mpi_scripts/mpi_worker.py index bbc5c50..5134f7e 100644 --- a/jet_tracking/mpi_scripts/mpi_worker.py +++ b/jet_tracking/mpi_scripts/mpi_worker.py @@ -14,8 +14,6 @@ import inspect from mpi4py import MPI -from smalldata_tools.SmallDataUtils import detData - f = '%(asctime)s - %(levelname)s - %(filename)s:%(funcName)s - %(message)s' logging.basicConfig(level=logging.DEBUG, format=f) logger = logging.getLogger(__name__) From 3ae700e3a6aeb36158ba296c30e609430333ae04 Mon Sep 17 00:00:00 2001 From: Adam Date: Sat, 13 Mar 2021 17:16:16 -0800 Subject: [PATCH 12/23] working xcs version --- jet_tracking/mpi_scripts/mpi_driver.py | 4 +- jet_tracking/mpi_scripts/mpi_master.py | 8 +- jet_tracking/mpi_scripts/mpi_worker.py | 2 +- jet_tracking/mpi_scripts/runMpiScript | 4 +- jet_tracking/psana/__init__.py | 1 - jet_tracking/psana/psana2epics.py | 381 ------------------------- jet_tracking/psana/psana2epics.sh | 26 -- jet_tracking/psana/psana2epics_sc3.py | 381 ------------------------- jet_tracking/psana/psana2epics_sc3.sh | 26 -- jet_tracking/psana/shmem_notes | 85 ------ 10 files changed, 9 insertions(+), 909 deletions(-) delete mode 100644 jet_tracking/psana/__init__.py delete mode 100644 jet_tracking/psana/psana2epics.py delete mode 100755 jet_tracking/psana/psana2epics.sh delete mode 100644 jet_tracking/psana/psana2epics_sc3.py delete mode 100755 jet_tracking/psana/psana2epics_sc3.sh delete mode 100644 jet_tracking/psana/shmem_notes diff --git a/jet_tracking/mpi_scripts/mpi_driver.py b/jet_tracking/mpi_scripts/mpi_driver.py index 94b80a2..90d171b 100644 --- a/jet_tracking/mpi_scripts/mpi_driver.py +++ b/jet_tracking/mpi_scripts/mpi_driver.py @@ -17,7 +17,7 @@ parser.add_argument('--exprun', help='psana experiment/run string (e.g. exp=xppd7114:run=43)', type=str, default='') #parser.add_argument('--dsname', help='data source name', type=str, default='') parser.add_argument('--nevts', help='number of events', default=50, type=int) -parser.add_argument('--cfg_file', help='if specified, has information about what metadata to use', type=str, default='default_config.yml') +parser.add_argument('--cfg_file', help='if specified, has information about what metadata to use', type=str, default='xcs_config.yml') args = parser.parse_args() # Two options for now, offline data or shared memory @@ -29,7 +29,7 @@ dsname = ''.join([args.exprun, ':smd:', 'dir=', exp_dir]) else: dsname = 'shmem=psana.0:stop=no' - psana.setOption('psana.calib-dir', '/reg/d/psdm/cxi/cxilv9518/calib/') + psana.setOption('psana.calib-dir', '/reg/d/psdm/xcs/xcsx39718/calib/') # Parse config file to hand to workers with open(''.join(['mpi_configs/', args.cfg_file])) as f: diff --git a/jet_tracking/mpi_scripts/mpi_master.py b/jet_tracking/mpi_scripts/mpi_master.py index 86bf061..10f8a39 100644 --- a/jet_tracking/mpi_scripts/mpi_master.py +++ b/jet_tracking/mpi_scripts/mpi_master.py @@ -137,9 +137,9 @@ def send_from_queue(self): #print('caputing data ', data) #for k, v in self._pv_map: #caput(v, data[k]) - ratio = data[1] / data[0] - caput('CXI:JTRK:REQ:DIFF_INTENSITY', data[1]) - caput('CXI:JTRK:REQ:I0', data[0]) - caput('CXI:JTRK:REQ:RATIO', ratio) + #ratio = data[1] / data[0] + caput('XCS:JTRK:REQ:DIFF_INTENSITY', data[1]) + caput('XCS:JTRK:REQ:I0', data[0]) + #caput('CXI:JTRK:REQ:RATIO', ratio) else: pass diff --git a/jet_tracking/mpi_scripts/mpi_worker.py b/jet_tracking/mpi_scripts/mpi_worker.py index 5134f7e..48765a3 100644 --- a/jet_tracking/mpi_scripts/mpi_worker.py +++ b/jet_tracking/mpi_scripts/mpi_worker.py @@ -113,7 +113,7 @@ def delta_bin(self, delta_bin): def start_run(self): """Worker should handle any calculations""" #mask_det = det.mask(188, unbond=True, unbondnbrs=True, status=True, edges=True, central=True) - ped = self.detector.pedestals(1)[0] + ped = self.detector.pedestals(48)[0] for evt_idx, evt in enumerate(self.ds.events()): if self.event_code not in self.evr.eventCodes(evt): continue diff --git a/jet_tracking/mpi_scripts/runMpiScript b/jet_tracking/mpi_scripts/runMpiScript index fa00b70..9b82e14 100755 --- a/jet_tracking/mpi_scripts/runMpiScript +++ b/jet_tracking/mpi_scripts/runMpiScript @@ -76,6 +76,6 @@ PROC=${PROC:='2'} source /reg/g/pcds/setup/pathmunge.sh source /reg/g/psdm/sw/conda1/manage/bin/psconda.sh -cd /reg/neh/home/aegger/smalldata_tools/mpi_scripts -pythonpathmunge '/reg/neh/home/aegger/smalldata_tools' +cd /cds/group/pcds/epics-dev/aegger/jet_tracking/jet_tracking/mpi_scripts +pythonpathmunge '/cds/group/pcds/epics-dev/aegger/jet_tracking/jet_tracking' `which mpirun` -n $PROC python mpi_driver.py $ARGS diff --git a/jet_tracking/psana/__init__.py b/jet_tracking/psana/__init__.py deleted file mode 100644 index df15f9d..0000000 --- a/jet_tracking/psana/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from .psana2epics import * # noqa diff --git a/jet_tracking/psana/psana2epics.py b/jet_tracking/psana/psana2epics.py deleted file mode 100644 index 4fbb4af..0000000 --- a/jet_tracking/psana/psana2epics.py +++ /dev/null @@ -1,381 +0,0 @@ -import argparse -import sys -import time - -import numpy as np -import pandas as pd -from epics import PV -from scipy.signal import peak_widths, periodogram - -time0 = time.time() - - -def initArgs(): - """Initialize argparse arguments. - """ - parser = argparse.ArgumentParser() - parser.add_argument("--calc_streak", action="store_true", default=False, - help='Calculate streak') - parser.add_argument("--calc_period", action="store_true", default=False, - help='Calculate periodogram') - parser.add_argument("--plot", action="store_true", default=False, - help='Plot normalized spectrum') - parser.add_argument("--nevents", type=int, default=10, - help='Number of events to average') - parser.add_argument("--exp", type=str, default='cxilr6716', - help='Experiment') - parser.add_argument("--run", type=int, - help='Run') - parser.add_argument("--instrument", type=str, default='cxi', - help='Instrument') - parser.add_argument("--pvbase", type=str, default='CXI:SC1:DIFFRACT', - help='pvbase') - parser.add_argument("--alias", type=str, default='DscCsPad', - help='detector alias') - return parser.parse_args() - - -def DataSource(exp=None, run=None, **kwargs): - """ - Wrapper for loading PyDataSource DataSource - """ - import PyDataSource - if exp and run: - print('Loading DataSource for {:} run {:}'.format(exp, run)) - ds = PyDataSource.DataSource(exp=exp, run=int(run)) - elif exp: - print('Loading DataSource for shared memory with expiment {:}' - ''.format(exp)) - ds = PyDataSource.DataSource(exp=exp) - else: - print('Loading DataSource for shared memory') - ds = PyDataSource.DataSource() - - print(ds.configData.show_info()) - print('') - print('Load time: {:} sec'.format(time.time() - time0)) - return ds - - -def output_cspad_sum(ds=None, alias='DscCsPad', - pvbase='CXI:SC1:DIFFRACT', calc_period=True, calc_streak=False, - psd_events=None, psd_rate=None, psd_resolution=None, **kwargs): - """Outputs cspad sum and certain statistics as PVs - - Parameters - ---------- - ds : DataSource, optional - DataSource object, if not specified, loads it using kwargs - alias : str, optional - Name for CsPad data - pvbase : str, optional - Base for PV names - calc_period : bool, optional - Determines the execution of frequency analysis - psd_events : int, optional - Number of events for frequency analysis, default is 240 - psd_rate : int or float, optional - Event rate [Hz], default is 120 - psd_resolution : int, optional - Resolution setting will perform rolling mean [Hz] - """ - - # Configure epics PVs - print('Initializing epics PVs') - cspad_sum_pv = PV(':'.join([pvbase, 'TOTAL_ADU'])) - streak_fraction_pv = PV(':'.join([pvbase, 'STREAK_FRACTION'])) - stats_mean_pv = PV(':'.join([pvbase, 'STATS_MEAN'])) - stats_std_pv = PV(':'.join([pvbase, 'STATS_STD'])) - stats_min_pv = PV(':'.join([pvbase, 'STATS_MIN'])) - stats_max_pv = PV(':'.join([pvbase, 'STATS_MAX'])) - psd_frequency_pv = PV(':'.join([pvbase, 'PSD_FREQUENCY'])) - psd_amplitude_pv = PV(':'.join([pvbase, 'PSD_AMPLITUDE'])) - psd_rate_pv = PV(':'.join([pvbase, 'PSD_RATE'])) - psd_events_pv = PV(':'.join([pvbase, 'PSD_EVENTS'])) - psd_resolution_pv = PV(':'.join([pvbase, 'PSD_RESOLUTION'])) - psd_freq_min_pv = PV(':'.join([pvbase, 'PSD_FREQ_MIN'])) - psd_freq_wf_pv = PV(':'.join([pvbase, 'PSD_FREQ_WF'])) - psd_amp_wf_pv = PV(':'.join([pvbase, 'PSD_AMP_WF'])) - # psd_amp_array_pv = PV(':'.join([pvbase,'PSD_AMP_ARRAY'])) - - if psd_rate: - psd_rate_pv.put(psd_rate) - - psd_rate = psd_rate_pv.get() - if psd_rate > 360 or psd_rate < 10: - psd_rate = 120. - psd_rate_pv.put(psd_rate) - - if psd_events: - psd_events_pv.put(psd_events) - - psd_events = psd_events_pv.get() - if psd_events > 1200 or psd_events < 60: - psd_events = psd_rate * 2. - psd_events_pv.put(psd_events) - - if psd_resolution: - psd_resolution_pv.put(psd_resolution) - - psd_resolution = psd_resolution_pv.get() - if psd_resolution > 5 or psd_resolution < 0.1: - psd_resolution = psd_rate / float(psd_events) - psd_resolution_pv.put(psd_resolution) - - nroll = int(psd_resolution * psd_events / float(psd_rate)) - - psd_freq_min = psd_freq_min_pv.get() - if psd_freq_min > 40 or psd_freq_min < 2: - psd_freq_min = 5. - psd_freq_min_pv.put(psd_freq_min) - - if0 = int(psd_freq_min / float(psd_rate) * psd_events) - - psd_freq_wf = np.arange(psd_events / 2. + 1.) * \ - float(psd_rate) / float(psd_events) - psd_freq_wf_pv.put(psd_freq_wf) - - print('Events = {}'.format(psd_events)) - - print('... done') - - if not ds: - ds = DataSource(**kwargs) - print('... done') - - detector = ds._detectors[alias] - - detector.next() - detector.add.property(asic) - detector.add.property(streak_present) - try: - no_streak = [] - iloop = 0 - icheck = 0 - streaks = 0 - time0 = time.time() - time_last = time0 - sums = [] - # aPxx = [] - # atime = [] - while True: - cspad_sum = detector.corr.sum() - sums.append(cspad_sum) - cspad_sum_pv.put(cspad_sum) - if calc_streak: - streak = detector.streak_present - streaks += streak - if not streak: - no_streak.append(iloop) - - iloop += 1 - icheck += 1 - if not iloop % psd_events: - sums = np.asarray(sums) - det_avg = sums.mean() - det_std = sums.std() - det_max = sums.max() - det_min = sums.min() - stats_mean_pv.put(det_avg) - stats_max_pv.put(det_max) - stats_min_pv.put(det_min) - stats_std_pv.put(det_std) - - if calc_period: - # f should be same as psd_freq_wf - f, Pxx = periodogram(sums, psd_rate) - if nroll > 1: - Pxx = pd.DataFrame(Pxx).rolling( - nroll).mean().values[nroll:, 0] - f = f[nroll:] - psd_frequency = f[Pxx[if0:].argmax() + if0] - psd_amplitude = Pxx[if0:].max() / 4 * psd_rate / psd_events - psd_frequency_pv.put(psd_frequency) - psd_amplitude_pv.put(psd_amplitude) - psd_amp_wf_pv.put(Pxx) - time_next = time.time() - evtrate = icheck / (time_next - time_last) - icheck = 0 - time_last = time_next - print('{:8.1f} Hz - {:8.1f} {:12} {:12} {:12}' - ''.format(evtrate, psd_frequency, psd_amplitude, - det_avg, det_std)) -# -# Need to makd sure right shape before outputting array -# aPxx.append(Pxx) -# psd_amp_array_pv.put(np.asarray(aPxx)) - - if calc_streak: - streak_fraction = streaks / psd_events - streak_fraction_pv.put(streak_fraction) - - sums = [] - # aPxx = [] - # atime = [] - streaks = 0 - no_streak = [] - - # Change to evt.next() in future and count damage - detector.next() - - except KeyboardInterrupt: - return - except Exception as e: - print(e) - - -def output_cspad_streak(ds=None, alias='DscCsPad', - pvbase='CXI:SC1:DIFFRACT', nevents=10, **kwargs): - """ - Output cspad jet streak information - """ - - beam_x_pv = PV(':'.join([pvbase, 'X0'])) - beam_y_pv = PV(':'.join([pvbase, 'Y0'])) - streak_angle_pv = PV(':'.join([pvbase, 'STREAK_PHI'])) - streak_intensity_pv = PV(':'.join([pvbase, 'STREAK_INTENSITY'])) - streak_width_pv = PV(':'.join([pvbase, 'STREAK_WIDTH'])) - if not ds: - ds = DataSource(**kwargs) - -# Now set in epics -- update as needed from epics. -# beam_x_pv.put(2094.9301668334006) # run 104 -# beam_y_pv.put(-1796.5697333657126) - - detector = ds._detectors[alias] - detector.next() - - detector.add.property(asic) - cy, cx = get_center(detector, beam_x_pv, beam_y_pv) - j_map_1, j_map_2 = find_proj_mapping(cy, cx) - detector.add.parameter(proj_map_1=j_map_1, proj_map_2=j_map_2) - detector.add.property(streak_angle_raw) - detector.add.property(streak_present) - try: - iloop = 0 - time0 = time.time() - while True: - streak_angle = detector.streak_angle_raw[0] - streak_intensity = detector.streak_angle_raw[1] - streak_width = detector.streak_angle_raw[2] - streak_angle_pv.put(streak_angle) - streak_intensity_pv.put(streak_intensity) - streak_width_pv.put(streak_width) - if not (iloop + 1) % nevents and detector.streak_present: - evt_rate = iloop / (time.time() - time0) - print('{:15} {:6.1f} Hz {:5.1f} {:5.1f} {:5.3f} {}' - ''.format(iloop, evt_rate, streak_angle, - streak_intensity, streak_width, - int(detector.streak_present))) - iloop += 1 - detector.next() - - except KeyboardInterrupt: - return - - -def streak_present(self): - im1 = self.asic[0] - im2 = self.asic[2] - return streak_present_im(im1) and streak_present_im(im2) - - -def streak_present_im(im): - '''im is 2D np-array''' - s = im[-10:].sum(axis=0) - s -= s.mean() - s /= np.roll(s, 10 - s.argmax())[20:].std() - return s.max() > 5 - - -def get_center(self, x0_pv, y0_pv): - center = (y0_pv.get(), x0_pv.get()) - cy, cx = get_center_coords(self, center) - cy -= 185 - return cy, cx - - -def to_pad_coord(det, point, i): - '''Point: (y,x)''' - - pad = [1, 9, 17, 25][i] - origin = np.asarray( - (det.calibData.coords_x[pad, 0, 0], det.calibData.coords_y[pad, 0, 0])) - unit_y = ((det.calibData.coords_x[pad, 1, 0] - det.calibData.coords_x[pad, 0, 0]), - (det.calibData.coords_y[pad, 1, 0] - det.calibData.coords_y[pad, 0, 0])) - unit_x = ((det.calibData.coords_x[pad, 0, 1] - det.calibData.coords_x[pad, 0, 0]), - (det.calibData.coords_y[pad, 0, 1] - det.calibData.coords_y[pad, 0, 0])) - matrix = np.asarray([[unit_y[0], unit_x[0]], [unit_y[1], unit_x[1]]]) - pos = np.linalg.solve(matrix, np.asarray(point) - origin) - return pos - - -def get_center_coords(det, center): - cy = np.zeros(4) - cx = np.zeros(4) - for i in range(4): - pos = to_pad_coord(det, center, i) - cy[i], cx[i] = pos[0], pos[1] - return cy, cx - - -def find_proj_mapping(cy, cx): - sq = 0 - - j_index_1 = np.zeros((100, 80), dtype=np.int64) - j_index_2 = np.zeros((100, 80), dtype=np.int64) - for a in range(-40, 40): - ang = np.radians(float(a) / 2) - for i in range(100): - j = int(np.tan(ang) * (100 - i + cy[sq]) + cx[sq]) % 100 - j_index_1[i, a + 40] = j - j = int(np.tan(ang) * - (100 - i + cy[(sq + 2) % 4]) + cx[(sq + 2) % 4]) % 100 - j_index_2[i, a + 40] = j - return j_index_1, j_index_2 - - -def asic(self, attr='corr'): - """ - Select inner asics - """ - return getattr(self, attr)[[1, 9, 17, 25], :, 0:194] - - -def streak_angle_raw(self): - """ - Jet streak calculation - Returns: jet angle, jet intensity (as standard deviations from the mean), - jet width - - """ - sq = 0 - - asic = self.asic - im1 = asic[sq][-100:, :100] - im2 = asic[(sq + 2) % 4][-100:, :100] - proj1 = np.zeros((100, 80)) - proj2 = np.zeros((100, 80)) - for a in range(-40, 40): - for i in range(im1.shape[0]): - proj1[i, a + 40] = im1[i, self.proj_map_1[i, a + 40]] - proj2[i, a + 40] = im2[i, self.proj_map_2[i, a + 40]] - s = proj1.sum(axis=0) + proj2.sum(axis=0) - s -= s.mean() - s /= np.roll(s, 10 - s.argmax())[20:].std() - peak = s[1:-1].argmax() + 1 - try: - peakwidth = peak_widths(s, [peak])[0][0] - except Exception: - peakwidth = 5 - return (np.pi * (peak - 40) / 360.0, s.max(), peakwidth) - - -if __name__ == "__main__": - args = initArgs() - print('Initializing args: {}'.format(args)) - sys.exit(output_cspad_sum(alias=args.alias, pvbase=args.pvbase, - exp=args.exp, run=args.run, - calc_period=args.calc_period, - calc_streak=args.calc_streak, - nevents=args.nevents, plot=args.plot)) diff --git a/jet_tracking/psana/psana2epics.sh b/jet_tracking/psana/psana2epics.sh deleted file mode 100755 index 71439cd..0000000 --- a/jet_tracking/psana/psana2epics.sh +++ /dev/null @@ -1,26 +0,0 @@ -#!/bin/bash - -unset PYTHONPATH -unset LD_LIBRARY_PATH - -export set EPICS_SITE_CONFIG=/reg/g/pcds/package/epics/3.14/RELEASE_SITE -source /reg/g/pcds/setup/epicsenv-cur.sh -export EPICS_CA_MAX_ARRAY_BYTES=12000000 - -source /reg/g/psdm/etc/psconda.sh > /dev/null - -SOURCE="${BASH_SOURCE[0]}" -# resolve $SOURCE until the file is no longer a symlink -while [ -h "$SOURCE" ]; do - DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )" - SOURCE="$(readlink "$SOURCE")" - [[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE" - # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located -done - -DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )" - -cd $DIR - -args="$@" -python psana2epics.py $args diff --git a/jet_tracking/psana/psana2epics_sc3.py b/jet_tracking/psana/psana2epics_sc3.py deleted file mode 100644 index a7115e8..0000000 --- a/jet_tracking/psana/psana2epics_sc3.py +++ /dev/null @@ -1,381 +0,0 @@ -import argparse -import sys -import time - -import numpy as np -import pandas as pd -from epics import PV -from scipy.signal import peak_widths, periodogram - -time0 = time.time() - - -def initArgs(): - """Initialize argparse arguments. - """ - parser = argparse.ArgumentParser() - parser.add_argument("--calc_streak", action="store_true", default=False, - help='Calculate streak') - parser.add_argument("--calc_period", action="store_true", default=False, - help='Calculate periodogram') - parser.add_argument("--plot", action="store_true", default=False, - help='Plot normalized spectrum') - parser.add_argument("--nevents", type=int, default=10, - help='Number of events to average') - parser.add_argument("--exp", type=str, default='cxix34517', - help='Experiment') - parser.add_argument("--run", type=int, - help='Run') - parser.add_argument("--instrument", type=str, default='cxi', - help='Instrument') - parser.add_argument("--pvbase", type=str, default='CXI:SC3:DIFFRACT', - help='pvbase') - parser.add_argument("--alias", type=str, default='DsdCsPad', - help='detector alias') - return parser.parse_args() - - -def DataSource(exp=None, run=None, **kwargs): - """ - Wrapper for loading PyDataSource DataSource - """ - import PyDataSource - if exp and run: - print('Loading DataSource for {:} run {:}'.format(exp, run)) - ds = PyDataSource.DataSource(exp=exp, run=int(run)) - elif exp: - print('Loading DataSource for shared memory with expiment {:}' - ''.format(exp)) - ds = PyDataSource.DataSource(exp=exp) - else: - print('Loading DataSource for shared memory') - ds = PyDataSource.DataSource() - - print(ds.configData.show_info()) - print('') - print('Load time: {:} sec'.format(time.time() - time0)) - return ds - - -def output_cspad_sum(ds=None, alias='DsdCsPad', - pvbase='CXI:SC3:DIFFRACT', calc_period=True, calc_streak=False, - psd_events=None, psd_rate=None, psd_resolution=None, **kwargs): - """Outputs cspad sum and certain statistics as PVs - - Parameters - ---------- - ds : DataSource, optional - DataSource object, if not specified, loads it using kwargs - alias : str, optional - Name for CsPad data - pvbase : str, optional - Base for PV names - calc_period : bool, optional - Determines the execution of frequency analysis - psd_events : int, optional - Number of events for frequency analysis, default is 240 - psd_rate : int or float, optional - Event rate [Hz], default is 120 - psd_resolution : int, optional - Resolution setting will perform rolling mean [Hz] - """ - - # Configure epics PVs - print('Initializing epics PVs') - cspad_sum_pv = PV(':'.join([pvbase, 'TOTAL_ADU'])) - streak_fraction_pv = PV(':'.join([pvbase, 'STREAK_FRACTION'])) - stats_mean_pv = PV(':'.join([pvbase, 'STATS_MEAN'])) - stats_std_pv = PV(':'.join([pvbase, 'STATS_STD'])) - stats_min_pv = PV(':'.join([pvbase, 'STATS_MIN'])) - stats_max_pv = PV(':'.join([pvbase, 'STATS_MAX'])) - psd_frequency_pv = PV(':'.join([pvbase, 'PSD_FREQUENCY'])) - psd_amplitude_pv = PV(':'.join([pvbase, 'PSD_AMPLITUDE'])) - psd_rate_pv = PV(':'.join([pvbase, 'PSD_RATE'])) - psd_events_pv = PV(':'.join([pvbase, 'PSD_EVENTS'])) - psd_resolution_pv = PV(':'.join([pvbase, 'PSD_RESOLUTION'])) - psd_freq_min_pv = PV(':'.join([pvbase, 'PSD_FREQ_MIN'])) - psd_freq_wf_pv = PV(':'.join([pvbase, 'PSD_FREQ_WF'])) - psd_amp_wf_pv = PV(':'.join([pvbase, 'PSD_AMP_WF'])) - # psd_amp_array_pv = PV(':'.join([pvbase,'PSD_AMP_ARRAY'])) - - if psd_rate: - psd_rate_pv.put(psd_rate) - - psd_rate = psd_rate_pv.get() - if psd_rate > 360 or psd_rate < 10: - psd_rate = 120. - psd_rate_pv.put(psd_rate) - - if psd_events: - psd_events_pv.put(psd_events) - - psd_events = psd_events_pv.get() - if psd_events > 1200 or psd_events < 60: - psd_events = psd_rate * 2. - psd_events_pv.put(psd_events) - - if psd_resolution: - psd_resolution_pv.put(psd_resolution) - - psd_resolution = psd_resolution_pv.get() - if psd_resolution > 5 or psd_resolution < 0.1: - psd_resolution = psd_rate / float(psd_events) - psd_resolution_pv.put(psd_resolution) - - nroll = int(psd_resolution * psd_events / float(psd_rate)) - - psd_freq_min = psd_freq_min_pv.get() - if psd_freq_min > 40 or psd_freq_min < 2: - psd_freq_min = 5. - psd_freq_min_pv.put(psd_freq_min) - - if0 = int(psd_freq_min / float(psd_rate) * psd_events) - - psd_freq_wf = np.arange(psd_events / 2. + 1.) * \ - float(psd_rate) / float(psd_events) - psd_freq_wf_pv.put(psd_freq_wf) - - print('Events = {}'.format(psd_events)) - - print('... done') - - if not ds: - ds = DataSource(**kwargs) - print('... done') - - detector = ds._detectors[alias] - - detector.next() - detector.add.property(asic) - detector.add.property(streak_present) - try: - no_streak = [] - iloop = 0 - icheck = 0 - streaks = 0 - time0 = time.time() - time_last = time0 - sums = [] - # aPxx = [] - # atime = [] - while True: - cspad_sum = detector.corr.sum() - sums.append(cspad_sum) - cspad_sum_pv.put(cspad_sum) - if calc_streak: - streak = detector.streak_present - streaks += streak - if not streak: - no_streak.append(iloop) - - iloop += 1 - icheck += 1 - if not iloop % psd_events: - sums = np.asarray(sums) - det_avg = sums.mean() - det_std = sums.std() - det_max = sums.max() - det_min = sums.min() - stats_mean_pv.put(det_avg) - stats_max_pv.put(det_max) - stats_min_pv.put(det_min) - stats_std_pv.put(det_std) - - if calc_period: - # f should be same as psd_freq_wf - f, Pxx = periodogram(sums, psd_rate) - if nroll > 1: - Pxx = pd.DataFrame(Pxx).rolling( - nroll).mean().values[nroll:, 0] - f = f[nroll:] - psd_frequency = f[Pxx[if0:].argmax() + if0] - psd_amplitude = Pxx[if0:].max() / 4 * psd_rate / psd_events - psd_frequency_pv.put(psd_frequency) - psd_amplitude_pv.put(psd_amplitude) - psd_amp_wf_pv.put(Pxx) - time_next = time.time() - evtrate = icheck / (time_next - time_last) - icheck = 0 - time_last = time_next - print('{:8.1f} Hz - {:8.1f} {:12} {:12} {:12}' - ''.format(evtrate, psd_frequency, psd_amplitude, - det_avg, det_std)) -# -# Need to makd sure right shape before outputting array -# aPxx.append(Pxx) -# psd_amp_array_pv.put(np.asarray(aPxx)) - - if calc_streak: - streak_fraction = streaks / psd_events - streak_fraction_pv.put(streak_fraction) - - sums = [] - # aPxx = [] - # atime = [] - streaks = 0 - no_streak = [] - - # Change to evt.next() in future and count damage - detector.next() - - except KeyboardInterrupt: - return - except Exception as e: - print(e) - - -def output_cspad_streak(ds=None, alias='DsdCsPad', - pvbase='CXI:SC3:DIFFRACT', nevents=10, **kwargs): - """ - Output cspad jet streak information - """ - - beam_x_pv = PV(':'.join([pvbase, 'X0'])) - beam_y_pv = PV(':'.join([pvbase, 'Y0'])) - streak_angle_pv = PV(':'.join([pvbase, 'STREAK_PHI'])) - streak_intensity_pv = PV(':'.join([pvbase, 'STREAK_INTENSITY'])) - streak_width_pv = PV(':'.join([pvbase, 'STREAK_WIDTH'])) - if not ds: - ds = DataSource(**kwargs) - -# Now set in epics -- update as needed from epics. -# beam_x_pv.put(2094.9301668334006) # run 104 -# beam_y_pv.put(-1796.5697333657126) - - detector = ds._detectors[alias] - detector.next() - - detector.add.property(asic) - cy, cx = get_center(detector, beam_x_pv, beam_y_pv) - j_map_1, j_map_2 = find_proj_mapping(cy, cx) - detector.add.parameter(proj_map_1=j_map_1, proj_map_2=j_map_2) - detector.add.property(streak_angle_raw) - detector.add.property(streak_present) - try: - iloop = 0 - time0 = time.time() - while True: - streak_angle = detector.streak_angle_raw[0] - streak_intensity = detector.streak_angle_raw[1] - streak_width = detector.streak_angle_raw[2] - streak_angle_pv.put(streak_angle) - streak_intensity_pv.put(streak_intensity) - streak_width_pv.put(streak_width) - if not (iloop + 1) % nevents and detector.streak_present: - evt_rate = iloop / (time.time() - time0) - print('{:15} {:6.1f} Hz {:5.1f} {:5.1f} {:5.3f} {}' - ''.format(iloop, evt_rate, streak_angle, - streak_intensity, streak_width, - int(detector.streak_present))) - iloop += 1 - detector.next() - - except KeyboardInterrupt: - return - - -def streak_present(self): - im1 = self.asic[0] - im2 = self.asic[2] - return streak_present_im(im1) and streak_present_im(im2) - - -def streak_present_im(im): - '''im is 2D np-array''' - s = im[-10:].sum(axis=0) - s -= s.mean() - s /= np.roll(s, 10 - s.argmax())[20:].std() - return s.max() > 5 - - -def get_center(self, x0_pv, y0_pv): - center = (y0_pv.get(), x0_pv.get()) - cy, cx = get_center_coords(self, center) - cy -= 185 - return cy, cx - - -def to_pad_coord(det, point, i): - '''Point: (y,x)''' - - pad = [1, 9, 17, 25][i] - origin = np.asarray( - (det.calibData.coords_x[pad, 0, 0], det.calibData.coords_y[pad, 0, 0])) - unit_y = ((det.calibData.coords_x[pad, 1, 0] - det.calibData.coords_x[pad, 0, 0]), - (det.calibData.coords_y[pad, 1, 0] - det.calibData.coords_y[pad, 0, 0])) - unit_x = ((det.calibData.coords_x[pad, 0, 1] - det.calibData.coords_x[pad, 0, 0]), - (det.calibData.coords_y[pad, 0, 1] - det.calibData.coords_y[pad, 0, 0])) - matrix = np.asarray([[unit_y[0], unit_x[0]], [unit_y[1], unit_x[1]]]) - pos = np.linalg.solve(matrix, np.asarray(point) - origin) - return pos - - -def get_center_coords(det, center): - cy = np.zeros(4) - cx = np.zeros(4) - for i in range(4): - pos = to_pad_coord(det, center, i) - cy[i], cx[i] = pos[0], pos[1] - return cy, cx - - -def find_proj_mapping(cy, cx): - sq = 0 - - j_index_1 = np.zeros((100, 80), dtype=np.int64) - j_index_2 = np.zeros((100, 80), dtype=np.int64) - for a in range(-40, 40): - ang = np.radians(float(a) / 2) - for i in range(100): - j = int(np.tan(ang) * (100 - i + cy[sq]) + cx[sq]) % 100 - j_index_1[i, a + 40] = j - j = int(np.tan(ang) * - (100 - i + cy[(sq + 2) % 4]) + cx[(sq + 2) % 4]) % 100 - j_index_2[i, a + 40] = j - return j_index_1, j_index_2 - - -def asic(self, attr='corr'): - """ - Select inner asics - """ - return getattr(self, attr)[[1, 9, 17, 25], :, 0:194] - - -def streak_angle_raw(self): - """ - Jet streak calculation - Returns: jet angle, jet intensity (as standard deviations from the mean), - jet width - - """ - sq = 0 - - asic = self.asic - im1 = asic[sq][-100:, :100] - im2 = asic[(sq + 2) % 4][-100:, :100] - proj1 = np.zeros((100, 80)) - proj2 = np.zeros((100, 80)) - for a in range(-40, 40): - for i in range(im1.shape[0]): - proj1[i, a + 40] = im1[i, self.proj_map_1[i, a + 40]] - proj2[i, a + 40] = im2[i, self.proj_map_2[i, a + 40]] - s = proj1.sum(axis=0) + proj2.sum(axis=0) - s -= s.mean() - s /= np.roll(s, 10 - s.argmax())[20:].std() - peak = s[1:-1].argmax() + 1 - try: - peakwidth = peak_widths(s, [peak])[0][0] - except Exception: - peakwidth = 5 - return (np.pi * (peak - 40) / 360.0, s.max(), peakwidth) - - -if __name__ == "__main__": - args = initArgs() - print('Initializing args: {}'.format(args)) - sys.exit(output_cspad_sum(alias=args.alias, pvbase=args.pvbase, - exp=args.exp, run=args.run, - calc_period=args.calc_period, - calc_streak=args.calc_streak, - nevents=args.nevents, plot=args.plot)) diff --git a/jet_tracking/psana/psana2epics_sc3.sh b/jet_tracking/psana/psana2epics_sc3.sh deleted file mode 100755 index 1e00816..0000000 --- a/jet_tracking/psana/psana2epics_sc3.sh +++ /dev/null @@ -1,26 +0,0 @@ -#!/bin/bash - -unset PYTHONPATH -unset LD_LIBRARY_PATH - -export set EPICS_SITE_CONFIG=/reg/g/pcds/package/epics/3.14/RELEASE_SITE -source /reg/g/pcds/setup/epicsenv-cur.sh -export EPICS_CA_MAX_ARRAY_BYTES=12000000 - -source /reg/g/psdm/etc/psconda.sh > /dev/null - -SOURCE="${BASH_SOURCE[0]}" -# resolve $SOURCE until the file is no longer a symlink -while [ -h "$SOURCE" ]; do - DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )" - SOURCE="$(readlink "$SOURCE")" - [[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE" - # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located -done - -DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )" - -cd $DIR - -args="$@" -python psana2epics_sc3.py $args diff --git a/jet_tracking/psana/shmem_notes b/jet_tracking/psana/shmem_notes deleted file mode 100644 index 265bbde..0000000 --- a/jet_tracking/psana/shmem_notes +++ /dev/null @@ -1,85 +0,0 @@ -Notes for auto jet tracking - -See HXR Jet Tracking google drive for project notes: -- https://drive.google.com/drive/folders/1TJdb9qK85oxeFpoPQ5m080HZw-Dptm7e - -Shared memory application analysis based on GDVN for cxilr6716: -- see also: /reg/neh/operator/cxiopr/experiments/cxilr6716/src/README - -pvNotepad pvs hosted by the ioc-mfx-cspadPV ioc: -/reg/g/pcds/package/epics/3.14-dev/ioc/mfx/pvNotepad/current/ioc-mfx-cspadPV.cfg - ------------------------ -Running psana with output to shared memory - -psana2epics.sh example will output the sum of the CSPAD intensity to a PV. - -e.g., for start of Run 17 we are using SC2 - -[koglin@daq-cxi-mon01 ~ 09:34:39] /reg/g/pcds/pyps/apps/hutch-python/cxi/cxi/jet_tracking/psana/psana2epics.sh --alias='DsaCsPad' --pvbase='CXI:SC2:DIFFRACT' -Initializing args Namespace(alias='DsaCsPad', calc_period=False, calc_streak=False, exp='cxilr6716', instrument='cxi', nevents=10, plot=False, pvbase='CXI:SC2:DIFFRACT', run=None) -Initializing epics PVs -Events = 240.0 -... done -Loading DataSource for shared memory with expiment cxilr6716 -No data source specified, so assume this is shared memory. -setting calibDir cxilr6716 /reg/d/psdm/cxi/cxilr6716/calib -Opened queue /PdsFromMonitorDiscovery_psana (9) -Opening shared memory /PdsMonitorSharedMemory_psana of size 0x4c800000 (0x22 * 0x2400000) -Shared memory at 0x7f7c473dc000 -Opened queue /PdsToMonitorEvQueue_psana_0 (21) -Opened queue /PdsToMonitorEvQueue_psana_1 (22) --------------------------------------------------------------------------------- -Source Information: ------------------- -*Detectors in group 0 are "BLD" data recorded at 120 Hz on event code 40 -*Detectors listed as Controls are controls devices with unknown event code (but likely 40). - -Alias Grp Description Code Pol Delay [s] Width [s] Source ------------------------------------------------------------------------------------------------------- -CXI_DG2_BMMON 1 BldInfo(CXI-DG2-BMMON) -DsaCsPad 1 120 Hz 40 Neg 0.000790723 0.000040000 DetInfo(CxiDs2.0:Cspad.0) -EBeam 1 BldInfo(EBeam) -FEEGasDetEnergy 1 BldInfo(FEEGasDetEnergy) -HFX_DG2_BMMON 1 BldInfo(HFX-DG2-BMMON) -HX2_SB1_BMMON 1 BldInfo(HX2-SB1-BMMON) -KbEncoder 1 120 Hz 40 Pos 0.000490723 0.000010000 DetInfo(CxiEndstation.0:USDUSB.0) -PhaseCavity 1 BldInfo(PhaseCavity) -Sc2Inline 1 120 Hz 40 Pos 0.000790723 0.007000000 DetInfo(CxiSc2.0:Opal1000.0) -XCS_SB1_BMMON 1 BldInfo(XCS-SB1-BMMON) --------------------------------------------------------------------------------- -Event Code Information: ------------------- -code group type description ----------------------------------------------------------- - 40 1 Readout 120 Hz - -Load time: 11.4506380558 sec -... done --------------------------------------------------------------------------- - - - -For CXI, monitor PV from cxi control room machine - -cxi-daq:cxi> camonitor CXI:SC2:DIFFRACT:TOTAL_ADU -CXI:SC2:DIFFRACT:TOTAL_ADU 2018-09-06 21:35:01.535993 5.33097e+06 -CXI:SC2:DIFFRACT:TOTAL_ADU 2018-09-06 21:35:01.579956 4.1387e+06 -CXI:SC2:DIFFRACT:TOTAL_ADU 2018-09-06 21:35:01.591779 4.3779e+06 -CXI:SC2:DIFFRACT:TOTAL_ADU 2018-09-06 21:35:01.603362 4.53231e+06 -CXI:SC2:DIFFRACT:TOTAL_ADU 2018-09-06 21:35:01.614737 3.38e+06 -... - -cxi-daq:cxi> caEventRate CXI:SC2:DIFFRACT:TOTAL_ADU.VAL -Connecting to CA Channel "CXI:SC2:DIFFRACT:TOTAL_ADU.VAL" 1 times. done(0.028546 sec). -Subscribing 1 times. done(0.000059 sec). -Waiting for initial value events. done(0.010099 sec). -CA Event Rate (Hz): current 40.9977 mean 40.9977 std dev 0 -CA Event Rate (Hz): current 39.4983 mean 40.248 std dev 0.749664 -CA Event Rate (Hz): current 38.4994 mean 39.6651 std dev 1.02671 -... - - -For mfx on daq-mfx-mon02: - -daq-mfx-mon02> /reg/g/pcds/pyps/apps/hutch-python/mfx/mfx/jet_tracking/psana/psana2epics.sh --alias='Rayonix' --pvbase='MFX:DET:DIFFRACT' --exp='mfxlt3017' From b251e77a53f4f1dbcd7926fce48f5796c45d260c Mon Sep 17 00:00:00 2001 From: Adam Date: Wed, 14 Apr 2021 08:48:54 -0700 Subject: [PATCH 13/23] move configs to generally accessible place, fix arp bash script --- .../jet_tracking_cal/submit_jt_arp.sh | 5 -- .../jet_tracking_cal/submit_jt_cal_arp.sh | 71 +++++++++++++++++++ .../mpi_configs => jt_configs}/cxi_config.yml | 0 .../mpi_configs => jt_configs}/xcs_config.yml | 5 +- jet_tracking/mpi_scripts/mpi_worker.py | 2 +- 5 files changed, 75 insertions(+), 8 deletions(-) delete mode 100755 jet_tracking/jet_tracking_cal/submit_jt_arp.sh create mode 100755 jet_tracking/jet_tracking_cal/submit_jt_cal_arp.sh rename jet_tracking/{mpi_scripts/mpi_configs => jt_configs}/cxi_config.yml (100%) rename jet_tracking/{mpi_scripts/mpi_configs => jt_configs}/xcs_config.yml (74%) diff --git a/jet_tracking/jet_tracking_cal/submit_jt_arp.sh b/jet_tracking/jet_tracking_cal/submit_jt_arp.sh deleted file mode 100755 index d6efc45..0000000 --- a/jet_tracking/jet_tracking_cal/submit_jt_arp.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash - -source /reg/g/psdm/sw/conda1/manage/bin/psconda.sh -ABS_PATH=/cds/home/a/aegger/jet_tracking/jet_tracking/jet_tracking_cal -sbatch --nodes=2 --time=5 $ABS_PATH/jt_cal.py "$@" diff --git a/jet_tracking/jet_tracking_cal/submit_jt_cal_arp.sh b/jet_tracking/jet_tracking_cal/submit_jt_cal_arp.sh new file mode 100755 index 0000000..013ccc3 --- /dev/null +++ b/jet_tracking/jet_tracking_cal/submit_jt_cal_arp.sh @@ -0,0 +1,71 @@ +#!/bin/bash + +usage() +{ +cat << EOF +$(basename "$0"): + Script to launch a smalldata_tools run analysis + + OPTIONS: + -h|--help + Definition of options + -q|--queue + Queue to use on SLURM + -t|--tasks + Number of parallel tasks + -s|--script + Script to run with full path + -c|--config + Configuration file you want to use for jt cal +EOF + +} + +source /reg/g/psdm/etc/psconda.sh + +# Use getopts when we get a chance +POSITIONAL=() +while [[ $# -gt 0 ]] +do + key="$1" + + case $key in + -h|--help) + usage + exit + ;; + -q|--queue) + QUEUE="$2" + shift + shift + ;; + -t|--tasks) + TASKS="$2" + shift + shift + ;; + -s|--script) + SCRIPT="$2" + shift + shift + ;; + -c|--config) + CONFIG="$2" + shift + shift + ;; + *) + POSITIONAL+=("$1") + shift + ;; + esac +done +set -- "${POSITIONAL[@]}" + +# Need to setup for FFB +QUEUE=${QUEUE:='psanaq'} +TASKS=${TASKS:=10} +SCRIPT=${SCRIPT:=/cds/group/pcds/epics-dev/aegger/jet_tracking/jet_tracking/jet_tracking_cal/jt_cal.py} +CONFIG=${CONFIG:=/cds/group/pcds/epics-dev/aegger/jet_tracking/jet_tracking/jt_configs/xcs_config.yml} + +sbatch -p $QUEUE --ntasks $TASKS --wrap="mpirun python -u $SCRIPT $CONFIG" diff --git a/jet_tracking/mpi_scripts/mpi_configs/cxi_config.yml b/jet_tracking/jt_configs/cxi_config.yml similarity index 100% rename from jet_tracking/mpi_scripts/mpi_configs/cxi_config.yml rename to jet_tracking/jt_configs/cxi_config.yml diff --git a/jet_tracking/mpi_scripts/mpi_configs/xcs_config.yml b/jet_tracking/jt_configs/xcs_config.yml similarity index 74% rename from jet_tracking/mpi_scripts/mpi_configs/xcs_config.yml rename to jet_tracking/jt_configs/xcs_config.yml index 8ec9418..a963401 100644 --- a/jet_tracking/mpi_scripts/mpi_configs/xcs_config.yml +++ b/jet_tracking/jt_configs/xcs_config.yml @@ -2,6 +2,7 @@ api_msg: port: 5000 hutch: 'xcs' +experiment: 'xcsx39718' det_map: name: 'epix10k2M' @@ -12,8 +13,8 @@ det_map: bins: 100 pv_map: - 1: 'CXI:JTRK:REQ:DIFF_INTENSITY' - 2: 'CXI:JTRK:REQ:I0' + 1: 'XCS:JTRK:REQ:DIFF_INTENSITY' + 2: 'XCS:JTRK:REQ:I0' ipm: name: 'XCS-SB2-BMMON' diff --git a/jet_tracking/mpi_scripts/mpi_worker.py b/jet_tracking/mpi_scripts/mpi_worker.py index 48765a3..afa252e 100644 --- a/jet_tracking/mpi_scripts/mpi_worker.py +++ b/jet_tracking/mpi_scripts/mpi_worker.py @@ -113,7 +113,7 @@ def delta_bin(self, delta_bin): def start_run(self): """Worker should handle any calculations""" #mask_det = det.mask(188, unbond=True, unbondnbrs=True, status=True, edges=True, central=True) - ped = self.detector.pedestals(48)[0] + ped = self.detector.pedestals(218)[0] for evt_idx, evt in enumerate(self.ds.events()): if self.event_code not in self.evr.eventCodes(evt): continue From 8ec79257ec856961ede4a1caabb95b43af0ec9d0 Mon Sep 17 00:00:00 2001 From: Adam Date: Wed, 14 Apr 2021 14:48:28 -0700 Subject: [PATCH 14/23] runs through cal and produces results with MPIDataSource on ARP --- jet_tracking/jet_tracking_cal/jt_cal.py | 245 ++++++++++-------- .../jet_tracking_cal/submit_jt_cal_arp.sh | 4 +- jet_tracking/jt_configs/xcs_config.yml | 13 + 3 files changed, 147 insertions(+), 115 deletions(-) diff --git a/jet_tracking/jet_tracking_cal/jt_cal.py b/jet_tracking/jet_tracking_cal/jt_cal.py index 42cb5cb..bad3521 100644 --- a/jet_tracking/jet_tracking_cal/jt_cal.py +++ b/jet_tracking/jet_tracking_cal/jt_cal.py @@ -1,9 +1,7 @@ import h5py +from mpi4py import MPI import numpy as np -import matplotlib.pyplot as plt import logging -import re -import time import psana import yaml from scipy.optimize import curve_fit @@ -15,25 +13,16 @@ from bokeh.models import Span, Legend, LegendItem, ColorBar, LinearColorMapper from bokeh.io import output_notebook import panel as pn -from scipy.stats import gaussian_kde +# Need to go to stdout for arp/sbatch logger = logging.getLogger(__name__) +logger.setLevel(logging.DEBUG) +handler = logging.StreamHandler(sys.stdout) +handler.setLevel(logging.DEBUG) +logger.addHandler(handler) -# Constants -# Location of my branch for testing JT_LOC = '/cds/group/pcds/epics-dev/aegger/jet_tracking/jet_tracking/' -# Number of bins -BINS = 100 -# Number of events to process -EVENTS = 1000 -# Percent of max in histogram to reject for I0 data -LR_THRESH = 0.1 -# Number of points at each end of azav to fit -LINE_FIT_POINTS = 5 -# Number of bins around peak to include in integrated intensity -DELTA_BIN = 5 - -# For now hold equations here since, will consolidate +SD_LOC = '/reg/data/ana15/' def get_r_masks(shape, bins=100): """Function to generate radial masks for pixels to include in azav""" @@ -84,7 +73,7 @@ def gaussian(x, a, mean, std, m, b): """ return (a * np.exp(-((x - mean) / 2 / std) ** 2)) + (m * x + b) -def fit_line(ave_azav, fit_points=LINE_FIT_POINTS): +def fit_line(ave_azav, fit_points=5): """ Fit the line from edges of array @@ -113,7 +102,7 @@ def fit_line(ave_azav, fit_points=LINE_FIT_POINTS): return m, b -def peak_lr(array_data, threshold=LR_THRESH, bins=BINS): +def peak_lr(array_data, threshold=0.1, bins=20): """Find max of normal distribution from histogram, search right and left until population falls below threshold, will run into problems with bimodal distribution. This is naive, @@ -197,7 +186,7 @@ def calc_azav_peak(ave_azav): return peak -def get_integrated_intensity(ave_azav, peak_bin, delta_bin=DELTA_BIN): +def get_integrated_intensity(ave_azav, peak_bin, delta_bin=3): """ Get the average integrated intensity. Sum the bin values from the peak bin to delta bin on each side. @@ -326,117 +315,147 @@ def intensity_vs_peak_fig(intensity, peak_vals, x, y, slope, intercept, sigma): if __name__ == '__main__': parser = ArgumentParser() - parser.add_argument('--exp', type=str, \ - default=(os.environ.get('EXPERIMENT', None))) - parser.add_argument('--run', type=str, \ - default=(os.environ.get('RUN_NUM', None))) parser.add_argument('--cfg', type=str, \ - default=(''.join([JT_LOC, 'mpi_scripts/mpi_configs/xcs_config.yml']))) - parser.add_argument('--delta_bin', type=int, \ - default=(DELTA_BIN)) - parser.add_argument('--bins', type=int, \ - default=(BINS)) + default=(''.join([JT_LOC, 'jt_configs/xcs_config.yml']))) args = parser.parse_args() + # Start spinning up processes + comm = MPI.COMM_WORLD + rank = comm.Get_rank() + size = comm.Get_size() + # All useful information should come from the config file # This will be source of truth for starting point for each hutch for now + # Can definitely be cleaned up/use environment variables for arp exp/run with open(args.cfg) as f: yml_dict = yaml.load(f, Loader=yaml.FullLoader) det_map = yml_dict['det_map'] ipm_name = yml_dict['ipm']['name'] ipm_det = yml_dict['ipm']['det'] + jet_cam_name = yml_dict['jet_cam']['name'] + jet_cam_axis = yml_dict['jet_cam']['axis'] hutch = yml_dict['hutch'] + exp = os.environ.get('EXPERIMENT', yml_dict['experiment']) + run = os.environ.get('RUN_NUM', yml_dict['run']) + cal_params = yml_dict['cal_params'] + + # Setup MPI data source + ds_name = ''.join(['exp=', exp, ':run=', run, ':smd']) + try: + ds = psana.MPIDataSource(ds_name) + except Exception as e: + logger.warning('Could not use MPI Data Source: {}'.format(e)) + sys.exit() - # Setup data source and write directories - exp_run = ''.join(['exp=', args.exp, ':run=', args.run]) - base_dir = ''.join(['/cds/data/psdm/', hutch, '/', args.exp, '/']) - exp_dir = ''.join([base_dir, 'xtc/']) - plots_dir = ''.join([base_dir, 'stats/summary/']) - results_dir = ''.join([base_dir, 'results']) - dsname = ''.join([exp_run, ':smd:', 'dir=', exp_dir]) - ds = psana.DataSource(dsname) + # Setup smd saver + jt_file = 'run{}_jt_cal.h5'.format(run) + jt_file_path = ''.join([SD_LOC, hutch, '/', exp, '/scratch/', jt_file]) + if rank == 0: + logger.info('Will save small data to {}'.format(jt_file_path)) + smd = ds.small_data(jt_file, gather_interval=100) # Get the detectors from the config - detector = psana.Detector(det_map['name']) - ipm = psana.Detector(ipm_name) - masks = get_r_masks(det_map['shape'], args.bins) - i0_data = [] - azav_data=[] - ped = detector.pedestals(int(args.run))[0] - logger.info('starting to evaluate 1000 events') - + try: + detector = psana.Detector(det_map['name']) + ipm = psana.Detector(ipm_name) + jet_cam = psana.Detector(jet_cam_name) + masks = get_r_masks(det_map['shape'], cal_params['azav_bins']) + except Exception as e: + logger.warning('Unable to create psana detectors: {}'.format(e)) + + if rank == 0: + logger.info('Gathering small data for exp: {}, run: {}, events: {}'.format(exp, run, cal_params['events'])) + logger.info('Detectors Available: {}'.format(psana.DetNames())) + + # Iterate through and pull out small data for evt_idx, evt in enumerate(ds.events()): - if evt_idx % 100 == 0: - logger.info('finished {} events'.format(evt_idx)) - print('finished {} events'.format(evt_idx)) - raw = detector.raw_data(evt) - ped - image = detector.image(evt, raw) - azav = np.array([np.mean(image[mask]) for mask in masks]) - azav_data.append(azav) try: - #i0_data.append(ipm.get(evt).f_12_ENRC()) - i0_data.append(getattr(ipm.get(evt), ipm_det)()) - except: - logger.warning('missing i0 for event {}'.format(evt_idx)) - i0_data.append(0.0) - - if evt_idx == 1000: + # Get image and azav + calib = detector.calib(evt) + det_image = detector.image(evt, calib) + azav = np.array([np.mean(det_image[mask]) for mask in masks]) + + # Get i0 Data + i0_data = getattr(ipm.get(evt), ipm_det)() + + # Get jet projection and location + jet_proj = jet_cam.image(evt).sum(axis=jet_cam_axis) + max_jet_val = np.amax(jet_proj) + max_jet_idx = np.where(max_jet_val == max_jet_val)[0] + smd.event(azav=azav, i0=i0_data, jet_peak=max_jet_val, jet_loc=max_jet_idx) + except Exception as e: + logger.info('Unable to process event {}: {}'.format(evt_idx, e)) + + if evt_idx == cal_params['events']: break - - # Find I0 distribution and filter out unused values - i0_data = np.array(i0_data) - i0_hist, i0_low, i0_high, i0_med = peak_lr(i0_data) - i0_idxs = np.where((i0_data > i0_low) & (i0_data < i0_high)) - i0_data_use = i0_data[i0_idxs] - # Generate figure for i0 params - p = peak_fig('i0 Values', i0_hist, i0_med, i0_low, i0_high) - - # Get the azav value we'll use - azav_use = [azav_data[idx] for idx in i0_idxs[0]] - ave_azav = np.array((np.sum(azav_use, axis=0)) / len(azav_use)) - # Find the peak bin from average azav values - peak_bin = calc_azav_peak(ave_azav) - - # Get the integrated intensity and generate fig - integrated_intensity = get_integrated_intensity(ave_azav, peak_bin, args.delta_bin) - p1 = azav_fig(ave_azav, peak_bin, integrated_intensity, args.delta_bin) - - # Go back through indices and find peak values for all the intensities - low_bin = peak_bin - args.delta_bin - high_bin = peak_bin + args.delta_bin - peak_vals = [azav[low_bin:high_bin].sum(axis=0) for azav in azav_use] - # Now fit I0 vs diffraction intensities - x, y, slope, intercept, sigma = fit_limits(i0_data_use, peak_vals, i0_low, i0_high) - p2 = intensity_vs_peak_fig(i0_data_use, peak_vals, x, y, slope, intercept, sigma) - - # Ratio information - ratios = peak_vals / i0_data_use - mean_ratio = np.mean(ratios) - med_ratio = np.median(ratios) - std_ratio = np.std(ratios) - - # Accumulate results - results = { - 'i0_low': i0_low, - 'i0_high': i0_high, - 'peak_bin': peak_bin, - 'delta_bin': args.delta_bin, - 'mean_ratio': mean_ratio, - 'med_ratio': med_ratio, - 'std_ratio': std_ratio - } - - print(' found results ', results) + + smd.save() + if rank == 0: + logger.info('Saved Small Data, Processing...') + while not os.path.exists(jt_file_path): + time.sleep(0.1) + + f = h5py.File(jt_file_path, 'r') + i0_data = np.array(f['i0']) + azav_data = np.array(f['azav']) + jet_loc = np.array(f['jet_loc']) + jet_peak = np.array(f['jet_peak']) + + # Find I0 distribution and filter out unused values + i0_data = np.array(i0_data) + i0_hist, i0_low, i0_high, i0_med = peak_lr(i0_data) + i0_idxs = np.where((i0_data > i0_low) & (i0_data < i0_high)) + i0_data_use = i0_data[i0_idxs] + + # Generate figure for i0 params + p = peak_fig('i0 Values', i0_hist, i0_med, i0_low, i0_high) + + # Get the azav value we'll use + azav_use = [azav_data[idx] for idx in i0_idxs[0]] + ave_azav = np.array((np.sum(azav_use, axis=0)) / len(azav_use)) + # Find the peak bin from average azav values + peak_bin = calc_azav_peak(ave_azav) + + # Get the integrated intensity and generate fig + integrated_intensity = get_integrated_intensity(ave_azav, peak_bin, cal_params['delta_bin']) + p1 = azav_fig(ave_azav, peak_bin, integrated_intensity, cal_params['delta_bin']) + + # Go back through indices and find peak values for all the intensities + low_bin = peak_bin - cal_params['delta_bin'] + high_bin = peak_bin + cal_params['delta_bin'] + peak_vals = [azav[low_bin:high_bin].sum(axis=0) for azav in azav_use] + # Now fit I0 vs diffraction intensities + x, y, slope, intercept, sigma = fit_limits(i0_data_use, peak_vals, i0_low, i0_high) + p2 = intensity_vs_peak_fig(i0_data_use, peak_vals, x, y, slope, intercept, sigma) + + # Ratio information + ratios = peak_vals / i0_data_use + mean_ratio = np.mean(ratios) + med_ratio = np.median(ratios) + std_ratio = np.std(ratios) + + # Accumulate results + results = { + 'i0_low': i0_low, + 'i0_high': i0_high, + 'peak_bin': peak_bin, + 'delta_bin': cal_params['delta_bin'], + 'mean_ratio': mean_ratio, + 'med_ratio': med_ratio, + 'std_ratio': std_ratio + } + + print(' found results ', results) # Write results to file - with open(''.join([results_dir, '/', args.run, '_results']), 'w') as f: - json.dumps(results, f, sort_keys=True, indent=4) + #with open(''.join([results_dir, '/', args.run, '_results']), 'w') as f: + # json.dumps(results, f, sort_keys=True, indent=4) # Accumulate plots and write - gspec = pn.GridSpec() - gspec[0:3, 0:3] = p - gspec[4:6, 0:3] = p1 - gspec[7:9, 0:3] = p2 - gspec.save(''.join([plots_dir, 'results_', args.run, '.html'])) + #gspec = pn.GridSpec() + #gspec[0:3, 0:3] = p + #gspec[4:6, 0:3] = p1 + #gspec[7:9, 0:3] = p2 + #gspec.save(''.join([plots_dir, 'results_', args.run, '.html'])) - print('finished with calibration') + print('finished with calibration') diff --git a/jet_tracking/jet_tracking_cal/submit_jt_cal_arp.sh b/jet_tracking/jet_tracking_cal/submit_jt_cal_arp.sh index 013ccc3..8ee1c5f 100755 --- a/jet_tracking/jet_tracking_cal/submit_jt_cal_arp.sh +++ b/jet_tracking/jet_tracking_cal/submit_jt_cal_arp.sh @@ -63,9 +63,9 @@ done set -- "${POSITIONAL[@]}" # Need to setup for FFB -QUEUE=${QUEUE:='psanaq'} +QUEUE=${QUEUE:='psfehhiprioq'} TASKS=${TASKS:=10} SCRIPT=${SCRIPT:=/cds/group/pcds/epics-dev/aegger/jet_tracking/jet_tracking/jet_tracking_cal/jt_cal.py} CONFIG=${CONFIG:=/cds/group/pcds/epics-dev/aegger/jet_tracking/jet_tracking/jt_configs/xcs_config.yml} -sbatch -p $QUEUE --ntasks $TASKS --wrap="mpirun python -u $SCRIPT $CONFIG" +sbatch -p $QUEUE --ntasks $TASKS --wrap="mpirun python -u $SCRIPT --cfg $CONFIG" diff --git a/jet_tracking/jt_configs/xcs_config.yml b/jet_tracking/jt_configs/xcs_config.yml index a963401..da1199e 100644 --- a/jet_tracking/jt_configs/xcs_config.yml +++ b/jet_tracking/jt_configs/xcs_config.yml @@ -3,6 +3,7 @@ api_msg: hutch: 'xcs' experiment: 'xcsx39718' +run: '10' det_map: name: 'epix10k2M' @@ -19,6 +20,18 @@ pv_map: ipm: name: 'XCS-SB2-BMMON' det: 'TotalIntensity' + +jet_cam: + name: 'opal_1' + axis: 0 + +cal_params: + azav_bins: 100 + events: 50 + i0_bins: 20 # Number of bins for i0 hist cuts + i0_reject: 0.1 # Percent below peak pin to make cut + fit_points: 5 # Number of points at start and end of azav array to do line fit + delta_bin: 3 # Number of azav bins around peak used for integration #ipm: # name: 'CXI-DG2-BMMON' # det: None From 2c3123276221a2a6c4e339cda51f681d586749e5 Mon Sep 17 00:00:00 2001 From: Adam Date: Fri, 16 Apr 2021 14:52:01 -0700 Subject: [PATCH 15/23] final jt cal state before I leave --- jet_tracking/jet_tracking_cal/jt_cal.py | 57 +++++++++++++------ .../jet_tracking_cal/submit_jt_cal_arp.sh | 3 +- jet_tracking/jt_configs/xcs_config.yml | 2 + 3 files changed, 45 insertions(+), 17 deletions(-) diff --git a/jet_tracking/jet_tracking_cal/jt_cal.py b/jet_tracking/jet_tracking_cal/jt_cal.py index bad3521..30939a2 100644 --- a/jet_tracking/jet_tracking_cal/jt_cal.py +++ b/jet_tracking/jet_tracking_cal/jt_cal.py @@ -13,6 +13,7 @@ from bokeh.models import Span, Legend, LegendItem, ColorBar, LinearColorMapper from bokeh.io import output_notebook import panel as pn +import matplotlib.pyplot as plt # Need to go to stdout for arp/sbatch logger = logging.getLogger(__name__) @@ -22,7 +23,7 @@ logger.addHandler(handler) JT_LOC = '/cds/group/pcds/epics-dev/aegger/jet_tracking/jet_tracking/' -SD_LOC = '/reg/data/ana15/' +SD_LOC = '/reg/d/psdm/' def get_r_masks(shape, bins=100): """Function to generate radial masks for pixels to include in azav""" @@ -102,7 +103,7 @@ def fit_line(ave_azav, fit_points=5): return m, b -def peak_lr(array_data, threshold=0.1, bins=20): +def peak_lr(array_data, threshold=0.1, bins=50): """Find max of normal distribution from histogram, search right and left until population falls below threshold, will run into problems with bimodal distribution. This is naive, @@ -150,7 +151,7 @@ def peak_lr(array_data, threshold=0.1, bins=20): left = peak_idx - np.argmax(left_array[::-1] < threshold * peak_val) i0_low = edges[left] - return hist, i0_low, i0_high, i0_med + return hist, edges, i0_low, i0_high, i0_med def calc_azav_peak(ave_azav): """ @@ -237,7 +238,7 @@ def fit_limits(i0_data, peak_vals, i_low, i_high, bins=100): ###### Bokeh Figures ####### -def peak_fig(signal, hist, med, low, high): +def peak_fig(signal, hist, edges, med, low, high): """General histogram plotter with peak location and left/right limits plotted""" fig = figure( @@ -246,7 +247,7 @@ def peak_fig(signal, hist, med, low, high): x_axis_label='Intensity Values', y_axis_label='Counts' ) - fig.quad(top=hist, bottom=0, left=low, right=high) + fig.quad(top=hist, bottom=0, left=edges[:-1], right=edges[1:]) left_line = Span(location=low, dimension='height', \ line_color='black') right_line = Span(location=high, dimension='height', \ @@ -354,6 +355,9 @@ def intensity_vs_peak_fig(intensity, peak_vals, x, y, slope, intercept, sigma): logger.info('Will save small data to {}'.format(jt_file_path)) smd = ds.small_data(jt_file, gather_interval=100) + # Set report directory + results_dir = ''.join(['/reg/d/psdm/', hutch, '/', exp, '/stats/summary/JT_Cal_Run', run]) + # Get the detectors from the config try: detector = psana.Detector(det_map['name']) @@ -377,11 +381,13 @@ def intensity_vs_peak_fig(intensity, peak_vals, x, y, slope, intercept, sigma): # Get i0 Data i0_data = getattr(ipm.get(evt), ipm_det)() + if evt_idx == 5: + print('i0 data ', i0_data) # Get jet projection and location jet_proj = jet_cam.image(evt).sum(axis=jet_cam_axis) max_jet_val = np.amax(jet_proj) - max_jet_idx = np.where(max_jet_val == max_jet_val)[0] + max_jet_idx = np.where(max_jet_val==max_jet_val)[0] smd.event(azav=azav, i0=i0_data, jet_peak=max_jet_val, jet_loc=max_jet_idx) except Exception as e: logger.info('Unable to process event {}: {}'.format(evt_idx, e)) @@ -403,12 +409,19 @@ def intensity_vs_peak_fig(intensity, peak_vals, x, y, slope, intercept, sigma): # Find I0 distribution and filter out unused values i0_data = np.array(i0_data) - i0_hist, i0_low, i0_high, i0_med = peak_lr(i0_data) + i0_hist, edges, i0_low, i0_high, i0_med = peak_lr(i0_data) i0_idxs = np.where((i0_data > i0_low) & (i0_data < i0_high)) i0_data_use = i0_data[i0_idxs] - + + jet_loc_use = jet_loc[i0_idxs] + jet_loc_mean = np.mean(jet_loc_use) + jet_loc_std = np.std(jet_loc_use) + jet_peak_use = jet_peak[i0_idxs] + jet_peak_mean = np.mean(jet_peak_use) + jet_peak_std = np.std(jet_peak_use) + # Generate figure for i0 params - p = peak_fig('i0 Values', i0_hist, i0_med, i0_low, i0_high) + p = peak_fig('{}'.format(ipm_name), i0_hist, edges, i0_med, i0_low, i0_high) # Get the azav value we'll use azav_use = [azav_data[idx] for idx in i0_idxs[0]] @@ -438,24 +451,36 @@ def intensity_vs_peak_fig(intensity, peak_vals, x, y, slope, intercept, sigma): results = { 'i0_low': i0_low, 'i0_high': i0_high, + 'i0_median': i0_med, 'peak_bin': peak_bin, 'delta_bin': cal_params['delta_bin'], 'mean_ratio': mean_ratio, 'med_ratio': med_ratio, - 'std_ratio': std_ratio + 'std_ratio': std_ratio, + 'jet_location_mean': jet_loc_mean, + 'jet_location_std': jet_loc_std, + 'jet_peak_mean': jet_peak_mean, + 'jet_peak_std': jet_peak_std } - print(' found results ', results) + logger.info('Results: {}'.format(results)) # Write results to file #with open(''.join([results_dir, '/', args.run, '_results']), 'w') as f: # json.dumps(results, f, sort_keys=True, indent=4) # Accumulate plots and write - #gspec = pn.GridSpec() - #gspec[0:3, 0:3] = p - #gspec[4:6, 0:3] = p1 - #gspec[7:9, 0:3] = p2 - #gspec.save(''.join([plots_dir, 'results_', args.run, '.html'])) + gspec = pn.GridSpec(sizing_mode='stretch_both', name='JT Cal Results: Run {}'.format(run)) + gspec[0:3, 0:3] = p + gspec[4:6, 0:3] = p1 + gspec[7:12, 0:3] = p2 + tabs = pn.Tabs(gspec) + if not os.path.isdir(results_dir): + logger.info('Creating Path {}'.format(results_dir)) + os.makedirs(results_dir) + + results_file = ''.join([results_dir, '/report.html']) + logger.info('Saving results to {}'.format(results_file)) + tabs.save(results_file) print('finished with calibration') diff --git a/jet_tracking/jet_tracking_cal/submit_jt_cal_arp.sh b/jet_tracking/jet_tracking_cal/submit_jt_cal_arp.sh index 8ee1c5f..36f9879 100755 --- a/jet_tracking/jet_tracking_cal/submit_jt_cal_arp.sh +++ b/jet_tracking/jet_tracking_cal/submit_jt_cal_arp.sh @@ -21,7 +21,8 @@ EOF } -source /reg/g/psdm/etc/psconda.sh +source /reg/g/psdm/etc/psconda.sh -py3 +#conda activate ana-4.0.15-py3 # Use getopts when we get a chance POSITIONAL=() diff --git a/jet_tracking/jt_configs/xcs_config.yml b/jet_tracking/jt_configs/xcs_config.yml index da1199e..d1026f9 100644 --- a/jet_tracking/jt_configs/xcs_config.yml +++ b/jet_tracking/jt_configs/xcs_config.yml @@ -20,6 +20,8 @@ pv_map: ipm: name: 'XCS-SB2-BMMON' det: 'TotalIntensity' + #name: 'XCS-IPM-03' + #det: 'sum' jet_cam: name: 'opal_1' From f8b8d2f60ac969b7b34976ba401108c37cdfdd68 Mon Sep 17 00:00:00 2001 From: Adam Date: Tue, 20 Apr 2021 10:48:26 -0700 Subject: [PATCH 16/23] finish file saving, all to psana, give results via api call --- jet_tracking/jet_tracking_cal/jt_cal.py | 37 ++++++++++--------- .../jet_tracking_cal/submit_jt_cal_arp.sh | 4 +- jet_tracking/jt_configs/xcs_config.yml | 5 +-- 3 files changed, 23 insertions(+), 23 deletions(-) diff --git a/jet_tracking/jet_tracking_cal/jt_cal.py b/jet_tracking/jet_tracking_cal/jt_cal.py index 30939a2..23ca35a 100644 --- a/jet_tracking/jet_tracking_cal/jt_cal.py +++ b/jet_tracking/jet_tracking_cal/jt_cal.py @@ -340,6 +340,9 @@ def intensity_vs_peak_fig(intensity, peak_vals, x, y, slope, intercept, sigma): run = os.environ.get('RUN_NUM', yml_dict['run']) cal_params = yml_dict['cal_params'] + # Get Events for each worker + num_events = int(cal_params['events'] / size) + # Setup MPI data source ds_name = ''.join(['exp=', exp, ':run=', run, ':smd']) try: @@ -356,7 +359,7 @@ def intensity_vs_peak_fig(intensity, peak_vals, x, y, slope, intercept, sigma): smd = ds.small_data(jt_file, gather_interval=100) # Set report directory - results_dir = ''.join(['/reg/d/psdm/', hutch, '/', exp, '/stats/summary/JT_Cal_Run', run]) + results_dir = ''.join([SD_LOC, hutch, '/', exp, '/stats/summary/JT_Cal_Run', run]) # Get the detectors from the config try: @@ -379,20 +382,19 @@ def intensity_vs_peak_fig(intensity, peak_vals, x, y, slope, intercept, sigma): det_image = detector.image(evt, calib) azav = np.array([np.mean(det_image[mask]) for mask in masks]) - # Get i0 Data + # Get i0 Data this is different for differe ipm detectors + # Be nice not to waste cycles on getattr at some point i0_data = getattr(ipm.get(evt), ipm_det)() - if evt_idx == 5: - print('i0 data ', i0_data) # Get jet projection and location jet_proj = jet_cam.image(evt).sum(axis=jet_cam_axis) max_jet_val = np.amax(jet_proj) - max_jet_idx = np.where(max_jet_val==max_jet_val)[0] + max_jet_idx = np.where(jet_proj==max_jet_val)[0][0] smd.event(azav=azav, i0=i0_data, jet_peak=max_jet_val, jet_loc=max_jet_idx) except Exception as e: logger.info('Unable to process event {}: {}'.format(evt_idx, e)) - if evt_idx == cal_params['events']: + if evt_idx == num_events: break smd.save() @@ -465,22 +467,23 @@ def intensity_vs_peak_fig(intensity, peak_vals, x, y, slope, intercept, sigma): logger.info('Results: {}'.format(results)) - # Write results to file - #with open(''.join([results_dir, '/', args.run, '_results']), 'w') as f: - # json.dumps(results, f, sort_keys=True, indent=4) + if not os.path.isdir(results_dir): + logger.info('Creating Path {}'.format(results_dir)) + os.makedirs(results_dir) + + # Write metadata to file + with open(''.join([results_dir_dir, '/jt_cal_', run, '_results']), 'w') as f: + json.dumps(results, f, sort_keys=True, indent=4) - # Accumulate plots and write + # Accumulate plots and write report gspec = pn.GridSpec(sizing_mode='stretch_both', name='JT Cal Results: Run {}'.format(run)) gspec[0:3, 0:3] = p gspec[4:6, 0:3] = p1 gspec[7:12, 0:3] = p2 tabs = pn.Tabs(gspec) - if not os.path.isdir(results_dir): - logger.info('Creating Path {}'.format(results_dir)) - os.makedirs(results_dir) - results_file = ''.join([results_dir, '/report.html']) - logger.info('Saving results to {}'.format(results_file)) - tabs.save(results_file) + report_file = ''.join([results_dir, '/report.html']) + logger.info('Saving report to {}'.format(report_file)) + tabs.save(report_file) - print('finished with calibration') + logger.info('finished with jet tracking calibration') diff --git a/jet_tracking/jet_tracking_cal/submit_jt_cal_arp.sh b/jet_tracking/jet_tracking_cal/submit_jt_cal_arp.sh index 36f9879..73e76ba 100755 --- a/jet_tracking/jet_tracking_cal/submit_jt_cal_arp.sh +++ b/jet_tracking/jet_tracking_cal/submit_jt_cal_arp.sh @@ -64,9 +64,9 @@ done set -- "${POSITIONAL[@]}" # Need to setup for FFB -QUEUE=${QUEUE:='psfehhiprioq'} +QUEUE=${QUEUE:='psanaq'} TASKS=${TASKS:=10} SCRIPT=${SCRIPT:=/cds/group/pcds/epics-dev/aegger/jet_tracking/jet_tracking/jet_tracking_cal/jt_cal.py} CONFIG=${CONFIG:=/cds/group/pcds/epics-dev/aegger/jet_tracking/jet_tracking/jt_configs/xcs_config.yml} -sbatch -p $QUEUE --ntasks $TASKS --wrap="mpirun python -u $SCRIPT --cfg $CONFIG" +sbatch -p $QUEUE --ntasks $TASKS --job-name="jet track cal" --wrap="mpirun python -u $SCRIPT --cfg $CONFIG" diff --git a/jet_tracking/jt_configs/xcs_config.yml b/jet_tracking/jt_configs/xcs_config.yml index d1026f9..259adc8 100644 --- a/jet_tracking/jt_configs/xcs_config.yml +++ b/jet_tracking/jt_configs/xcs_config.yml @@ -29,11 +29,8 @@ jet_cam: cal_params: azav_bins: 100 - events: 50 + events: 500 i0_bins: 20 # Number of bins for i0 hist cuts i0_reject: 0.1 # Percent below peak pin to make cut fit_points: 5 # Number of points at start and end of azav array to do line fit delta_bin: 3 # Number of azav bins around peak used for integration -#ipm: -# name: 'CXI-DG2-BMMON' -# det: None From 195a788c109c8103457860644304318724f94d2d Mon Sep 17 00:00:00 2001 From: Adam Date: Tue, 20 Apr 2021 12:05:46 -0700 Subject: [PATCH 17/23] writing results in psana --- jet_tracking/jet_tracking_cal/jt_cal.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/jet_tracking/jet_tracking_cal/jt_cal.py b/jet_tracking/jet_tracking_cal/jt_cal.py index 23ca35a..008d457 100644 --- a/jet_tracking/jet_tracking_cal/jt_cal.py +++ b/jet_tracking/jet_tracking_cal/jt_cal.py @@ -472,8 +472,9 @@ def intensity_vs_peak_fig(intensity, peak_vals, x, y, slope, intercept, sigma): os.makedirs(results_dir) # Write metadata to file - with open(''.join([results_dir_dir, '/jt_cal_', run, '_results']), 'w') as f: - json.dumps(results, f, sort_keys=True, indent=4) + with open(''.join([results_dir, '/jt_cal_', run, '_results']), 'w') as f: + results = {k: str(v) for k, v in results.items()} + json.dump(results, f) # Accumulate plots and write report gspec = pn.GridSpec(sizing_mode='stretch_both', name='JT Cal Results: Run {}'.format(run)) From 2320869513564bac077166eff4ef0c6b66c8860c Mon Sep 17 00:00:00 2001 From: Adam Date: Thu, 22 Apr 2021 09:21:28 -0700 Subject: [PATCH 18/23] good stopping point before working on API --- jet_tracking/jet_tracking_cal/jt_cal.py | 16 +++- .../jet_tracking_cal/submit_jt_cal_arp.sh | 1 - jet_tracking/jt_configs/xcs_config.yml | 3 + jet_tracking/mpi_scripts/mpi_driver.py | 68 ++++++++++------ jet_tracking/mpi_scripts/mpi_master.py | 22 +++-- jet_tracking/mpi_scripts/mpi_worker.py | 66 ++++++++------- jet_tracking/mpi_scripts/runMpiScript | 81 ------------------- jet_tracking/mpi_scripts/run_mpi_script | 49 +++++++++++ 8 files changed, 152 insertions(+), 154 deletions(-) delete mode 100755 jet_tracking/mpi_scripts/runMpiScript create mode 100755 jet_tracking/mpi_scripts/run_mpi_script diff --git a/jet_tracking/jet_tracking_cal/jt_cal.py b/jet_tracking/jet_tracking_cal/jt_cal.py index 008d457..b0138b2 100644 --- a/jet_tracking/jet_tracking_cal/jt_cal.py +++ b/jet_tracking/jet_tracking_cal/jt_cal.py @@ -358,9 +358,6 @@ def intensity_vs_peak_fig(intensity, peak_vals, x, y, slope, intercept, sigma): logger.info('Will save small data to {}'.format(jt_file_path)) smd = ds.small_data(jt_file, gather_interval=100) - # Set report directory - results_dir = ''.join([SD_LOC, hutch, '/', exp, '/stats/summary/JT_Cal_Run', run]) - # Get the detectors from the config try: detector = psana.Detector(det_map['name']) @@ -369,6 +366,7 @@ def intensity_vs_peak_fig(intensity, peak_vals, x, y, slope, intercept, sigma): masks = get_r_masks(det_map['shape'], cal_params['azav_bins']) except Exception as e: logger.warning('Unable to create psana detectors: {}'.format(e)) + sys.exit() if rank == 0: logger.info('Gathering small data for exp: {}, run: {}, events: {}'.format(exp, run, cal_params['events'])) @@ -467,12 +465,22 @@ def intensity_vs_peak_fig(intensity, peak_vals, x, y, slope, intercept, sigma): logger.info('Results: {}'.format(results)) + # Set report directory + results_dir = ''.join([SD_LOC, hutch, '/', exp, '/stats/summary/jt_cal_run_', run]) + + # Get calib dir for meta data saving + calib_dir = ''.join([SD_LOC, hutch, '/', exp, '/calib/jt_results/']) + if not os.path.isdir(results_dir): logger.info('Creating Path {}'.format(results_dir)) os.makedirs(results_dir) + if not os.path.isdir(calib_dir): + logger.info('Creating Path {}'.format(calib_dir)) + os.makedirs(calib_dir) + # Write metadata to file - with open(''.join([results_dir, '/jt_cal_', run, '_results']), 'w') as f: + with open(''.join([calib_dir, '/jt_cal_', run, '_results']), 'w') as f: results = {k: str(v) for k, v in results.items()} json.dump(results, f) diff --git a/jet_tracking/jet_tracking_cal/submit_jt_cal_arp.sh b/jet_tracking/jet_tracking_cal/submit_jt_cal_arp.sh index 73e76ba..727404a 100755 --- a/jet_tracking/jet_tracking_cal/submit_jt_cal_arp.sh +++ b/jet_tracking/jet_tracking_cal/submit_jt_cal_arp.sh @@ -22,7 +22,6 @@ EOF } source /reg/g/psdm/etc/psconda.sh -py3 -#conda activate ana-4.0.15-py3 # Use getopts when we get a chance POSITIONAL=() diff --git a/jet_tracking/jt_configs/xcs_config.yml b/jet_tracking/jt_configs/xcs_config.yml index 259adc8..de44d42 100644 --- a/jet_tracking/jt_configs/xcs_config.yml +++ b/jet_tracking/jt_configs/xcs_config.yml @@ -4,6 +4,7 @@ api_msg: hutch: 'xcs' experiment: 'xcsx39718' run: '10' +sim: true det_map: name: 'epix10k2M' @@ -16,6 +17,8 @@ det_map: pv_map: 1: 'XCS:JTRK:REQ:DIFF_INTENSITY' 2: 'XCS:JTRK:REQ:I0' + 3: 'XCS:JTRK:REQ:JET_PEAK' + 4: 'XCS:JTRK:REQ:JET_LOC' ipm: name: 'XCS-SB2-BMMON' diff --git a/jet_tracking/mpi_scripts/mpi_driver.py b/jet_tracking/mpi_scripts/mpi_driver.py index 90d171b..61b040a 100644 --- a/jet_tracking/mpi_scripts/mpi_driver.py +++ b/jet_tracking/mpi_scripts/mpi_driver.py @@ -1,4 +1,3 @@ -# Local imports from mpi_worker import MpiWorker from mpi_master import MpiMaster from utils import get_r_masks, get_evr_w_codes @@ -6,7 +5,13 @@ import psana import yaml import re +import json import argparse +import os +import sys +import logging + +logger = logging.getLogger(__name__) comm = MPI.COMM_WORLD size = comm.Get_size() @@ -14,46 +19,59 @@ # All the args parser = argparse.ArgumentParser() -parser.add_argument('--exprun', help='psana experiment/run string (e.g. exp=xppd7114:run=43)', type=str, default='') -#parser.add_argument('--dsname', help='data source name', type=str, default='') -parser.add_argument('--nevts', help='number of events', default=50, type=int) parser.add_argument('--cfg_file', help='if specified, has information about what metadata to use', type=str, default='xcs_config.yml') args = parser.parse_args() -# Two options for now, offline data or shared memory -if args.exprun: - info = re.split('=|:', args.exprun) - exp = info[1] - hutch = exp[:3] - exp_dir = ''.join(['/reg/d/psdm/', hutch, '/', exp, '/xtc/']) - dsname = ''.join([args.exprun, ':smd:', 'dir=', exp_dir]) -else: - dsname = 'shmem=psana.0:stop=no' - psana.setOption('psana.calib-dir', '/reg/d/psdm/xcs/xcsx39718/calib/') - # Parse config file to hand to workers -with open(''.join(['mpi_configs/', args.cfg_file])) as f: +with open(args.cfg_file) as f: yml_dict = yaml.load(f, Loader=yaml.FullLoader) api_port = yml_dict['api_msg']['port'] det_map = yml_dict['det_map'] ipm_name = yml_dict['ipm']['name'] ipm_det = yml_dict['ipm']['det'] pv_map = yml_dict['pv_map'] -print('here is pv map!!! ', pv_map) -# No way to do this only once with MPI + jet_cam_name = yml_dict['jet_cam']['name'] + jet_cam_axis = yml_dict['jet_cam']['axis'] + sim = yml_dict['sim'] + hutch = yml_dict['hutch'] + exp = yml_dict['experiment'] + run = yml_dict['run'] + +# Get calibration results +calib_dir = ''.join(['/cds/data/psdm/', hutch, '/', exp, '/calib/']) +jt_dir = ''.join([calib_dir, 'jt_results/']) + +cal_files = sorted(os.listdir(jt_dir)) +if cal_files: + cal_file = cal_files[-1] + cal_file_path = ''.join([jt_dir, cal_file]) + with open(cal_file_path) as f: + cal_results = json.load(f) +else: + logger.warning('You must run a calibration before starting jet tracking') + sys.exit() + +if sim: + # Run from offline data + exp_dir = ''.join(['/cds/data/psdm/', hutch, '/', exp, '/xtc/']) + dsname = ''.join(['exp=', exp, ':run=', run, ':smd:', 'dir=', exp_dir]) +else: + # Run on shared memeory + dsname = 'shmem=psana.0:stop=no' + psana.setOption('psana.calib-dir', calib_dir) + ds = psana.DataSource(dsname) -# Main detector we're looking at detector = psana.Detector(det_map['name']) -# Intensity monitor, could be wave8 or gdet with detector ipm = (psana.Detector(ipm_name), ipm_det) -# Because we never know hich evr will have event codes +jet_cam = psana.Detector(jet_cam_name) evr = get_evr_w_codes(psana.DetNames()) -# Get the R masks, would be great to do this only once r_mask = get_r_masks(det_map['shape']) -print(psana.DetNames()) + if rank == 0: - master = MpiMaster(rank, api_port, det_map, pv_map) + master = MpiMaster(rank, api_port, det_map, pv_map, sim=sim) master.start_run() else: - worker = MpiWorker(ds, args.nevts, detector, ipm, evr, r_mask) + peak_bin = int(cal_results['peak_bin']) + delta_bin = int(cal_results['delta_bin']) + worker = MpiWorker(ds, detector, ipm, jet_cam, jet_cam_axis, evr, r_mask, peak_bin=peak_bin, delta_bin=delta_bin) worker.start_run() diff --git a/jet_tracking/mpi_scripts/mpi_master.py b/jet_tracking/mpi_scripts/mpi_master.py index 10f8a39..d2650e5 100644 --- a/jet_tracking/mpi_scripts/mpi_master.py +++ b/jet_tracking/mpi_scripts/mpi_master.py @@ -15,11 +15,11 @@ class MpiMaster(object): - def __init__(self, rank, api_port, det_map, pv_map, psana=False, data_port=8123): + def __init__(self, rank, api_port, det_map, pv_map, sim=True, data_port=8123): self._rank = rank self._det_map = det_map self._pv_map = pv_map - self._psana = psana + self._sim = sim self._comm = MPI.COMM_WORLD self._workers = range(self._comm.Get_size())[1:] self._running = False @@ -72,7 +72,7 @@ def abort(self, val): def get_data_socket(self, data_port=8123): """Setup the socket we'll use for client data messaging""" - if self._psana: + if self._sim: context = zmq.Context() socket = context.socket(zmq.PUB) socket.bind(''.join(['tcp://*:', str(data_port)])) @@ -86,8 +86,7 @@ def start_run(self): """ while not self.abort: start = time.time() - # TODO: Generalize data length - data = np.empty(2, dtype=np.dtype(self.det_map['dtype'])) + data = np.empty(len(self._pv_map), dtype=np.dtype(self.det_map['dtype'])) req = self.comm.Irecv(data, source=MPI.ANY_SOURCE) self.send_from_queue() req.Wait() @@ -123,7 +122,7 @@ def start_msg_thread(self, api_port): def send_from_queue(self): if len(self.queue) > 0: data = self.queue.popleft() - if self._psana: + if self._sim: # Could need this if sending large arrays, # Could end up getting md info from config file md = dict( @@ -134,12 +133,9 @@ def send_from_queue(self): self._data_socket.send(data, 0, copy=False, track=False) else: # consider caput_many with lots, ok for now - #print('caputing data ', data) - #for k, v in self._pv_map: - #caput(v, data[k]) - #ratio = data[1] / data[0] - caput('XCS:JTRK:REQ:DIFF_INTENSITY', data[1]) - caput('XCS:JTRK:REQ:I0', data[0]) - #caput('CXI:JTRK:REQ:RATIO', ratio) + for k, v in self._pv_map.items(): + caput(v, data[k]) + #caput('XCS:JTRK:REQ:DIFF_INTENSITY', data[1]) + #caput('XCS:JTRK:REQ:I0', data[0]) else: pass diff --git a/jet_tracking/mpi_scripts/mpi_worker.py b/jet_tracking/mpi_scripts/mpi_worker.py index afa252e..5a678a4 100644 --- a/jet_tracking/mpi_scripts/mpi_worker.py +++ b/jet_tracking/mpi_scripts/mpi_worker.py @@ -22,17 +22,17 @@ class MpiWorker(object): """This worker will collect events and do whatever necessary processing, then send to master""" - def __init__(self, ds, evnt_lim, detector, ipm, evr, r_mask, latency=0.5, event_code=40, plot=False, peak_bin=25, delta_bin=5): + def __init__(self, ds, detector, ipm, jet_cam, jet_cam_axis, evr, r_mask, event_code=40, plot=False, peak_bin=25, delta_bin=5): self._ds = ds # We probably need to use kwargs to make this general - self._evnt_lim = evnt_lim self._detector = detector self._ipm = ipm + self._jet_cam = jet_cam + self._jet_cam_axis = jet_cam_axis self._evr = evr self._comm = MPI.COMM_WORLD self._rank = self._comm.Get_rank() self._r_mask = r_mask self._plot = plot - self._latency = latency self._event_code = event_code self._peak_bin = peak_bin self._delta_bin = delta_bin @@ -43,11 +43,6 @@ def rank(self): """Worker ID""" return self._rank - @property - def evnt_lim(self): - """Number of events for worker to process""" - return self._evnt_lim - @property def ds(self): """DataSource object""" @@ -78,11 +73,6 @@ def plot(self): """Whether we should plot detector""" return self._plot - @property - def latency(self): - """Max latency allowed between event and results""" - return self._latency - @property def event_code(self): """Event Code to trigger data collection on""" @@ -110,26 +100,42 @@ def delta_bin(self, delta_bin): except: logger.warning('You must provide int for delta bin') + @property + def jet_cam(self): + return self._jet_cam + + @property + def jet_cam_axis(self): + return self._jet_cam_axis + def start_run(self): """Worker should handle any calculations""" #mask_det = det.mask(188, unbond=True, unbondnbrs=True, status=True, edges=True, central=True) ped = self.detector.pedestals(218)[0] for evt_idx, evt in enumerate(self.ds.events()): - if self.event_code not in self.evr.eventCodes(evt): - continue - low_bin = self.peak_bin - self.delta_bin - hi_bin = self.peak_bin + self.delta_bin - raw = (self.detector.raw_data(evt) - ped) - data = self.detector.image(evt, raw) - az_bins = np.array([np.mean(data[mask]) for mask in self._r_mask[low_bin:hi_bin]]) - intensity = np.sum(az_bins) + # Definitely not a fan of wrapping the world in a try/except + # but too many possible failure modes from the data try: - i0 = self.ipm[0].get(evt) - if self.ipm[1]: - det = getattr(i0, self.ipm[1]) - i0 = det() - except: - i0 = 0.0 - - packet = np.array([i0, intensity], dtype='float32') - self.comm.Isend(packet, dest=0, tag=self.rank) + if self.event_code not in self.evr.eventCodes(evt): + continue + + low_bin = self.peak_bin - self.delta_bin + hi_bin = self.peak_bin + self.delta_bin + calib = self.detector.calib(evt) + det_image = self.detector.image(evt, calib) + az_bins = np.array([np.mean(det_image[mask]) for mask in self._r_mask[low_bin:hi_bin]]) + intensity = np.sum(az_bins) + + # Get i0 Data this is different for differe ipm detectors + i0 = getattr(self.ipm[0].get(evt), self.ipm[1])() + + # Get jet projection peak and location + jet_proj = self.jet_cam.image(evt).sum(axis=self.jet_cam_axis) + max_jet_val = np.amax(jet_proj) + max_jet_idx = np.where(jet_proj==max_jet_val)[0][0] + + packet = np.array([i0, intensity, max_jet_val, max_jet_idx], dtype='float32') + self.comm.Isend(packet, dest=0, tag=self.rank) + except Exception as e: + logger.warning('Unable to Process Event: {}'.format(e)) + continue diff --git a/jet_tracking/mpi_scripts/runMpiScript b/jet_tracking/mpi_scripts/runMpiScript deleted file mode 100755 index 9b82e14..0000000 --- a/jet_tracking/mpi_scripts/runMpiScript +++ /dev/null @@ -1,81 +0,0 @@ -#!/bin/bash - -usage() -{ -cat << EOF -$(basename "$0"): - Script to launch an mpirun - - OPTIONS: - -h|--help - Definition of options - -e|--exprun - Experiment and run name in format exp=xppd7114:run=43 - -d|--dsname - Data source name to gather events from - -n|--nevts - Number of events for each worker to process - -c|--cfgfile - Config file to load with damage/vars, and other things to parse for data aquisition - -p|--processors - Number of cores to use (available workers -1 for master) -EOF -} - -for arg in "$@" -do - case $arg in - -h|--help) - usage exit - ;; - -e|--exprun) - EXPRUN="$2" - shift - shift - ;; - -d|--dsname) - DSNAME="$2" - shift - shift - ;; - -n|--nevts) - NEVTS="$2" - shift - shift - ;; - -c|--cfgfile) - CFGFILE="$2" - shift - shift - ;; - -p|--processors) - PROC="$2" - shift - shift - ;; - esac -done - -# Pull out mpi_driver.py args -ARGS='' -if [[ -v EXPRUN ]]; then - ARGS+=' --exprun '$EXPRUN -fi -if [[ -v DSNAME ]]; then - ARGS+=' --dsname '$DSNAME -fi -if [[ -v NEVTS ]]; then - ARGS+=' --nevts '$NEVTS -fi -if [[ -v CFGFILE ]]; then - ARGS+=' --cfg_file '$CFGFILE -fi - -# If user doesn't specify use minimum required -PROC=${PROC:='2'} - -source /reg/g/pcds/setup/pathmunge.sh -source /reg/g/psdm/sw/conda1/manage/bin/psconda.sh -cd /cds/group/pcds/epics-dev/aegger/jet_tracking/jet_tracking/mpi_scripts -pythonpathmunge '/cds/group/pcds/epics-dev/aegger/jet_tracking/jet_tracking' -`which mpirun` -n $PROC python mpi_driver.py $ARGS diff --git a/jet_tracking/mpi_scripts/run_mpi_script b/jet_tracking/mpi_scripts/run_mpi_script new file mode 100755 index 0000000..2a776b8 --- /dev/null +++ b/jet_tracking/mpi_scripts/run_mpi_script @@ -0,0 +1,49 @@ +#!/bin/bash + +usage() +{ +cat << EOF +$(basename "$0"): + Script to launch an mpirun + + OPTIONS: + -h|--help + Definition of options + -c|--cfgfile + Config file to load with damage/vars, and other things to parse for data aquisition + -p|--processors + Number of cores to use (available workers -1 for master) +EOF +} + +for arg in "$@" +do + case $arg in + -h|--help) + usage exit + ;; + -c|--cfgfile) + CFGFILE="$2" + shift + shift + ;; + -p|--processors) + PROC="$2" + shift + shift + ;; + esac +done + +source /reg/g/psdm/etc/psconda.sh -py3 + +# If user doesn't specify use minimum required +PROC=${PROC:='2'} + +#source /reg/g/pcds/setup/pathmunge.sh +#source /reg/g/psdm/sw/conda1/manage/bin/psconda.sh +#cd /cds/group/pcds/epics-dev/aegger/jet_tracking/jet_tracking/mpi_scripts +#pythonpathmunge '/cds/group/pcds/epics-dev/aegger/jet_tracking/jet_tracking' +CONFIG=${CONFIG:=/cds/group/pcds/epics-dev/aegger/jet_tracking/jet_tracking/jt_configs/xcs_config.yml} + +`which mpirun` -n $PROC python mpi_driver.py --cfg_file $CONFIG From 1e75ae8905ec393178495d2c3f7386eaabc9194b Mon Sep 17 00:00:00 2001 From: Adam Date: Thu, 22 Apr 2021 10:12:31 -0700 Subject: [PATCH 19/23] adding API calls --- jet_tracking/mpi_scripts/mpi_api.py | 13 ++++++++----- jet_tracking/mpi_scripts/mpi_master.py | 16 +++++++++++++--- 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/jet_tracking/mpi_scripts/mpi_api.py b/jet_tracking/mpi_scripts/mpi_api.py index 17ee959..beda047 100644 --- a/jet_tracking/mpi_scripts/mpi_api.py +++ b/jet_tracking/mpi_scripts/mpi_api.py @@ -3,10 +3,10 @@ import numpy as np import argparse parser = argparse.ArgumentParser() -parser.add_argument('--cfg_file', help='if specified, has information about what metadata to use', type=str, default='default_config.yml') +parser.add_argument('--cfg_file', help='if specified, has information about what metadata to use', type=str, default='xcs_config.yml') args = parser.parse_args() -with open(''.join(['mpi_configs/', args.cfg_file])) as f: +with open(''.join(['../jt_configs/', args.cfg_file])) as f: yml_dict = yaml.load(f, Loader=yaml.FullLoader) api_port = yml_dict['api_msg']['port'] @@ -28,8 +28,11 @@ def abort(): """Abort MPI run""" - socket.send('abort') + socket.send_pyobj({'cmd': 'abort', 'value': True}) -def pause(): +def set_peak_bin(peak_bin): """Pause MPI run""" - socket.send('pause') + socket.send_pyobj({'cmd': 'peak_bin', 'value': peak_bin}) + +def set_delta_bin(delta_bin): + socket.send_pyobj({'cmd': 'delta_bin', 'value': delta_bin}) diff --git a/jet_tracking/mpi_scripts/mpi_master.py b/jet_tracking/mpi_scripts/mpi_master.py index d2650e5..696962f 100644 --- a/jet_tracking/mpi_scripts/mpi_master.py +++ b/jet_tracking/mpi_scripts/mpi_master.py @@ -26,6 +26,7 @@ def __init__(self, rank, api_port, det_map, pv_map, sim=True, data_port=8123): self._abort = False self._queue = deque() self._data_socket = self.get_data_socket() + self._pub_socket = self.get_pub_socket() self._msg_thread = Thread(target=self.start_msg_thread, args=(api_port,)) self._msg_thread.start() @@ -80,6 +81,13 @@ def get_data_socket(self, data_port=8123): return None + def get_pub_socket(self, data_port=1234): + """Socket for publishing API calls to workers""" + context = zmq.Context() + socket = context.socket(zmq.PUB) + socket.bind(''.join(['tcp://*:', str(data_port)])) + return socket + def start_run(self): """Main process loop, we can probably get more async but for now it's a one to one recive/send @@ -112,9 +120,11 @@ def start_msg_thread(self, api_port): # TODO: make IP available arg socket.bind(''.join(['tcp://*:', str(api_port)])) while True: - message = socket.recv() - if message == 'abort': - self.abort = True + message = socket.recv_pyobj() + cmd = message['cmd'] + value = message['value'] + if cmd == 'abort': + self._pub_socket.send_pyobj(message) socket.send('aborted') else: print('Received Message with no definition ', message) From 46e16089bcb302b045c574d40bb60a6553f0be53 Mon Sep 17 00:00:00 2001 From: Adam Date: Thu, 22 Apr 2021 10:36:32 -0700 Subject: [PATCH 20/23] sim running ok on UI --- jet_tracking/datastream.py | 31 +++++++++++++------------- jet_tracking/mpi_scripts/mpi_master.py | 3 ++- 2 files changed, 18 insertions(+), 16 deletions(-) diff --git a/jet_tracking/datastream.py b/jet_tracking/datastream.py index 2599783..f435148 100644 --- a/jet_tracking/datastream.py +++ b/jet_tracking/datastream.py @@ -9,6 +9,7 @@ from PyQt5.QtGui import * from num_gen import sinwv import collections +import zmq logging = logging.getLogger('ophyd') logging.setLevel('CRITICAL') @@ -74,24 +75,24 @@ def live_data_stream(self): self.diff = self.signal_diff.get() def sim_data_stream(self): - """ + """Run with offline data""" context_data = zmq.Context() socket_data = context_data.socket(zmq.SUB) - socket_data.connect(".join(['tcp://localhost:', '8123'])") + socket_data.connect(''.join(['tcp://localhost:', '8123'])) socket_data.subscribe("") - while True: - md = socket_data.rev_json(flags=0) - msg = socket.recv(flags=0,copy=false, track=false) - buf = memoryview(msg) - data = np.frombuffer(buf, dtype=md['dtype']) - data = np.ndarray.tolist(data.reshape(md['shape'])) - self.gatt = data[0] - self.diff = data[1] - """ - x = 0.8 - y = 0.4 - self.gatt = sinwv(x) - self.diff = sinwv(y) + #while True: + md = socket_data.recv_json(flags=0) + msg = socket_data.recv(flags=0, copy=False, track=False) + buf = memoryview(msg) + data = np.frombuffer(buf, dtype=md['dtype']) + data = np.ndarray.tolist(data.reshape(md['shape'])) + self.gatt = data[0] + self.diff = data[1] + #time.sleep(0.1) + #x = 0.8 + #y = 0.4 + #self.gatt = sinwv(x) + #self.diff = sinwv(y) def read_value(self): # needs to initialize first maybe using a decorator? if self.live_data: diff --git a/jet_tracking/mpi_scripts/mpi_master.py b/jet_tracking/mpi_scripts/mpi_master.py index 696962f..07c49d1 100644 --- a/jet_tracking/mpi_scripts/mpi_master.py +++ b/jet_tracking/mpi_scripts/mpi_master.py @@ -125,7 +125,8 @@ def start_msg_thread(self, api_port): value = message['value'] if cmd == 'abort': self._pub_socket.send_pyobj(message) - socket.send('aborted') + socket.send(b'aborted') + print('received abort') else: print('Received Message with no definition ', message) From 23db9b56a7a6f540b4f2c0bbc928fdc13d9f4ac0 Mon Sep 17 00:00:00 2001 From: Adam Date: Fri, 23 Apr 2021 10:26:54 -0700 Subject: [PATCH 21/23] add basic api --- jet_tracking/datastream.py | 36 +++++++++++++++++-- jet_tracking/jet_tracking_cal/jt_cal.py | 5 +++ jet_tracking/jt_configs/xcs_config.yml | 2 +- jet_tracking/mpi_scripts/mpi_master.py | 47 +++++++++++++++---------- jet_tracking/mpi_scripts/mpi_worker.py | 38 +++++++++++++++++++- 5 files changed, 106 insertions(+), 22 deletions(-) diff --git a/jet_tracking/datastream.py b/jet_tracking/datastream.py index f435148..00a8468 100644 --- a/jet_tracking/datastream.py +++ b/jet_tracking/datastream.py @@ -10,12 +10,45 @@ from num_gen import sinwv import collections import zmq +import yaml logging = logging.getLogger('ophyd') logging.setLevel('CRITICAL') lock = threading.Lock() +# Constants +CFG_FILE = 'jt_configs/xcs_config.yml' + +def parse_config(cfg_file=CFG_FILE): + with open(args.cfg_file) as f: + yml_dict = yaml.load(f, Loader=yaml.FullLoader) + return yml_dict + #api_port = yml_dict['api_msg']['port'] + #det_map = yml_dict['det_map'] + #ipm_name = yml_dict['ipm']['name'] + #ipm_det = yml_dict['ipm']['det'] + #pv_map = yml_dict['pv_map'] + #jet_cam_name = yml_dict['jet_cam']['name'] + #jet_cam_axis = yml_dict['jet_cam']['axis'] + #sim = yml_dict['sim'] + #hutch = yml_dict['hutch'] + #exp = yml_dict['experiment'] + #run = yml_dict['run'] + +def get_cal_results(hutch, exp): + """This goes through the results directory and gets the lates one""" + results_dir = f'/cds/data/psdm/{hutch}/{exp}/calib/jt_results/' + cal_files = sorted(os.listdir(jt_dir)) + if cal_files: + cal_file = cal_files[-1] + cal_file_path = f'{results_dir}{cal_file}' + with open(cal_file_path) as f: + cal_results = json.load(f) + return cal_results + else: + return None + def GetPVs(): # this is where I would want to get PVs from a json file # but I will hard code it for now @@ -56,8 +89,7 @@ def __init__(self, signals): self.signals = signals self.PVs = dict() self.PV_signals = list() - self.live_data = True - + self.live_data = True self.signals.run_live.connect(self.run_live_data) def run_live_data(self, live): diff --git a/jet_tracking/jet_tracking_cal/jt_cal.py b/jet_tracking/jet_tracking_cal/jt_cal.py index b0138b2..a125ae4 100644 --- a/jet_tracking/jet_tracking_cal/jt_cal.py +++ b/jet_tracking/jet_tracking_cal/jt_cal.py @@ -385,6 +385,11 @@ def intensity_vs_peak_fig(intensity, peak_vals, x, y, slope, intercept, sigma): i0_data = getattr(ipm.get(evt), ipm_det)() # Get jet projection and location + if evt_idx == 5: + plt.imshow(jet_cam.image(evt)) + plt.show() + plt.plot(jet_cam.image(evt).sum(axis=jet_cam_axis)) + plt.show() jet_proj = jet_cam.image(evt).sum(axis=jet_cam_axis) max_jet_val = np.amax(jet_proj) max_jet_idx = np.where(jet_proj==max_jet_val)[0][0] diff --git a/jet_tracking/jt_configs/xcs_config.yml b/jet_tracking/jt_configs/xcs_config.yml index de44d42..2e05c05 100644 --- a/jet_tracking/jt_configs/xcs_config.yml +++ b/jet_tracking/jt_configs/xcs_config.yml @@ -28,7 +28,7 @@ ipm: jet_cam: name: 'opal_1' - axis: 0 + axis: 1 cal_params: azav_bins: 100 diff --git a/jet_tracking/mpi_scripts/mpi_master.py b/jet_tracking/mpi_scripts/mpi_master.py index 07c49d1..edabebc 100644 --- a/jet_tracking/mpi_scripts/mpi_master.py +++ b/jet_tracking/mpi_scripts/mpi_master.py @@ -5,7 +5,7 @@ import zmq import time from epics import caput -from threading import Thread +from threading import Thread, Lock from enum import Enum from collections import deque @@ -27,8 +27,11 @@ def __init__(self, rank, api_port, det_map, pv_map, sim=True, data_port=8123): self._queue = deque() self._data_socket = self.get_data_socket() self._pub_socket = self.get_pub_socket() + self._msg_lock = Lock() self._msg_thread = Thread(target=self.start_msg_thread, args=(api_port,)) self._msg_thread.start() + self.pair_ctx = None + self.msg_ctx = None @property def rank(self): @@ -69,22 +72,23 @@ def abort(self): def abort(self, val): """Set the abort flag""" if isinstance(val, bool): - self._abort = val + with self._msg_lock: + self._abort = val - def get_data_socket(self, data_port=8123): + def get_data_socket(self, data_port=8124): """Setup the socket we'll use for client data messaging""" if self._sim: - context = zmq.Context() - socket = context.socket(zmq.PUB) + self.msg_ctx = zmq.Context() + socket = self.msg_ctx.socket(zmq.PUB) socket.bind(''.join(['tcp://*:', str(data_port)])) return socket return None - def get_pub_socket(self, data_port=1234): + def get_pub_socket(self, data_port=1235): """Socket for publishing API calls to workers""" - context = zmq.Context() - socket = context.socket(zmq.PUB) + self.msg_ctx = zmq.Context() + socket = self.msg_ctx.socket(zmq.PUB) socket.bind(''.join(['tcp://*:', str(data_port)])) return socket @@ -100,14 +104,10 @@ def start_run(self): req.Wait() self.queue.append(data) print(time.time() - start) + self.pair_ctx.close() + self.msg_ctx.close() MPI.Finalize() -# status = MPI.Status() -# ready = self.comm.Iprobe(source=MPI.ANY_SOURCE, tag=MPI.ANY_TAG, status=status) -# if ready: -# data = np.empty(2, dtype=np.dtype(self.det_map['dtype'])) -# self.comm.Recv(data, source=status.Get_source(), tag=MPI.ANY_TAG, status=status) - def start_msg_thread(self, api_port): """The thread runs a PAIR communication and acts as server side, this allows for control of the parameters during data aquisition @@ -115,18 +115,29 @@ def start_msg_thread(self, api_port): we want messages to be handled by workers as well, or master can broadcast information """ - context = zmq.Context() - socket = context.socket(zmq.PAIR) + self.pair_ctx = zmq.Context() + socket = self.pair_ctx.socket(zmq.PAIR) # TODO: make IP available arg socket.bind(''.join(['tcp://*:', str(api_port)])) while True: message = socket.recv_pyobj() + print('got message ', message) cmd = message['cmd'] value = message['value'] if cmd == 'abort': self._pub_socket.send_pyobj(message) - socket.send(b'aborted') - print('received abort') + self.abort = True + logger.info('aborting jet tracking data analysis process') + elif cmd == 'peak_bin': + self._pub_socket.send_pyobj(message) + print('setting peak bin on master') + msg_string = 'Changing peak bin to {}'.format(value) + logger.info(msg_string) + elif cmd == 'delta_bin': + self._pub_socket.send_pyobj(message) + print('setting delta bin on master') + msg_string = 'Changing delta bin to {}'.format(value) + logger.info(msg_string) else: print('Received Message with no definition ', message) diff --git a/jet_tracking/mpi_scripts/mpi_worker.py b/jet_tracking/mpi_scripts/mpi_worker.py index 5a678a4..60d2354 100644 --- a/jet_tracking/mpi_scripts/mpi_worker.py +++ b/jet_tracking/mpi_scripts/mpi_worker.py @@ -12,6 +12,8 @@ import sys import time import inspect +from threading import Thread, Lock +import zmq from mpi4py import MPI f = '%(asctime)s - %(levelname)s - %(filename)s:%(funcName)s - %(message)s' @@ -22,7 +24,7 @@ class MpiWorker(object): """This worker will collect events and do whatever necessary processing, then send to master""" - def __init__(self, ds, detector, ipm, jet_cam, jet_cam_axis, evr, r_mask, event_code=40, plot=False, peak_bin=25, delta_bin=5): + def __init__(self, ds, detector, ipm, jet_cam, jet_cam_axis, evr, r_mask, event_code=40, plot=False, peak_bin=25, delta_bin=5, data_port=1235): self._ds = ds # We probably need to use kwargs to make this general self._detector = detector self._ipm = ipm @@ -37,6 +39,8 @@ def __init__(self, ds, detector, ipm, jet_cam, jet_cam_axis, evr, r_mask, event_ self._peak_bin = peak_bin self._delta_bin = delta_bin self._state = None + self._msg_thread = Thread(target=self.start_msg_thread, args=(data_port,)) + self._msg_thread.start() @property def rank(self): @@ -139,3 +143,35 @@ def start_run(self): except Exception as e: logger.warning('Unable to Process Event: {}'.format(e)) continue + + def start_msg_thread(self, data_port=1235): + """The thread runs a PAIR communication and acts as server side, + this allows for control of the parameters during data aquisition + from some client (probably an API for user). Might do subpub if + we want messages to be handled by workers as well, or master can + broadcast information + """ + context = zmq.Context() + socket = context.socket(zmq.SUB) + # TODO: make IP available arg + socket.connect(''.join(['tcp://localhost:', str(data_port)])) + socket.subscribe('') + print('running worker message thread') + while True: + message = socket.recv_pyobj() + cmd = message['cmd'] + value = message['value'] + print('worker got message ', message) + if cmd == 'abort': + self.abort = True + logger.info('aborting jet tracking data analysis process') + elif cmd == 'peak_bin': + print('got message peak bin ', value) + msg_string = 'Worker {} changing peak bin to {}'.format(self.rank, value) + logger.info(msg_string) + elif cmd == 'delta_bin': + msg_string = 'Worker {} changing delta bin to {}'.format(self.rank, value) + logger.info(msg_string) + else: + logger.warning('Worker {} received message with no definition {}'.format(self.rank, message)) + From 983c2dd6133895ce10362499fbc76277305a1c92 Mon Sep 17 00:00:00 2001 From: Adam Date: Fri, 23 Apr 2021 10:28:00 -0700 Subject: [PATCH 22/23] start of readme --- README.md | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..0c747a5 --- /dev/null +++ b/README.md @@ -0,0 +1,45 @@ +#Jet Tracking Application +The purpose of this application is to automate the positioning of the liquid jet to be conincident with the x-rays. This version is a start and mostly a proof of concept, because everyone knows you don't build something right the first time ever. Once this is fully functional then it can be rebuilt with a better architecture and file structure using the proven pieces. + +##Calibration +The calibration piece is used to identify the typical diffraction ring intensity from the solvent/substrate present in the liquid jet. The current procedure is to take about 10 seconds of data in a recorded run then analyze the following: +- Making a cut on the distribution of incoming x ray intensity to identify events with good x ray intensity +- Get the azimuthal average of the area detector for all of those events and identifying the peak intensity (brightest bin of the ring). Then summing the intensities of the peak bin and a +/- delta bin value. +- Get the projection of the jet camera and identify the peak intensity and location of that jet. + +###How to run the calibration +There are two ways to run the calibration. +The suggested/production way is to run through Automatic Run Processing on pswww. +There is a current definition and run setup for xcsx39718 on Run 82. You can see the results in the summaries tab for that experiment (elog (aka Data Manager) on pswww) + +All of the meta data information is then saved in a json file with the path: +/cds/data/psdm///calib/jt_results + +The second way to run the calibration is to do it locally, this is much easier for development. In order to simplify and organize meta data as input parameters for the calibration we use config files located at /jet_tracking/jt_configs. You need to change information there is you want to adjust certain calibration parameters. to run you must be on a psana node + +``` +$ ssh psana +$ cd /jet_tracking/jet_tracking/jet_tracking_cal +$ source /reg/g/psdm/etc/psconda.sh -py3 +$ python jt_cal.py --cfg # The default is xcs_config.yml so no arg required if using that one +``` + +Sample Output +``` +(ana-4.0.20-py3) aegger@psanagpu112:/cds/group/pcds/epics-dev/aegger/jet_tracking/jet_tracking/jet_tracking_cal$ python jt_cal.py +Will save small data to /reg/d/psdm/xcs/xcsx39718/scratch/run10_jt_cal.h5 +Gathering small data for exp: xcsx39718, run: 10, events: 500 +Detectors Available: [('XcsEndstation.1:ControlsCamera.16', 'xcs_yag4', ''), ('EBeam', '', ''), ('FEEGasDetEnergy', '', ''), ('XCS-IPM-01', '', ''), ('XCS-IPM-03', '', ''), ('XCS-DIO-03', '', ''), ('HX2-SB1-BMMON', '', ''), ('XCS-SB1-BMMON', '', ''), ('XCS-SB2-BMMON', '', ''), ('XcsEndstation.0:Epix10ka.1', 'epix10k135', ''), ('NoDetector.0:Evr.0', 'evr0', ''), ('XcsEndstation.0:Epix10ka2M.0', 'epix10k2M', ''), ('XcsEndstation.1:Opal1000.1', 'opal_1', ''), ('ControlData', '', '')] +Unable to process event 0: 'NoneType' object has no attribute 'TotalIntensity' +Saved Small Data, Processing... +Results: {'i0_low': 53345.170000000006, 'i0_high': 93364.9225, 'i0_median': 74307.8975, 'peak_bin': 12, 'delta_bin': 3, 'mean_ratio': 0.1453248744739173, 'med_ratio': 0.1463255684260074, 'std_ratio': 0.03161866013604559, 'jet_location_mean': 0.0, 'jet_location_std': 0.0, 'jet_peak_mean': 30354.924, 'jet_peak_std': 326.71924} +Creating Path /reg/d/psdm/xcs/xcsx39718/stats/summary/jt_cal_run_10 +Saving report to /reg/d/psdm/xcs/xcsx39718/stats/summary/jt_cal_run_10/report.html +finished with jet tracking calibration +Closing remaining open files:run10_jt_cal.h5...done +``` +## Running the shared memory process +Once we have the needed calibration data, you can run the shared memory process + + + From 1f8d64e6fd16a312bea8ccde88e5bd179fd316cc Mon Sep 17 00:00:00 2001 From: Adam Date: Fri, 23 Apr 2021 11:02:36 -0700 Subject: [PATCH 23/23] final commit while working here --- README.md | 16 ++++++++++++++- jet_tracking/mpi_scripts/mpi_master.py | 3 --- jet_tracking/mpi_scripts/mpi_worker.py | 28 +++++++++++++++----------- 3 files changed, 31 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 0c747a5..08e1e5d 100644 --- a/README.md +++ b/README.md @@ -38,8 +38,22 @@ Saving report to /reg/d/psdm/xcs/xcsx39718/stats/summary/jt_cal_run_10/report.ht finished with jet tracking calibration Closing remaining open files:run10_jt_cal.h5...done ``` -## Running the shared memory process +##Running the shared memory process Once we have the needed calibration data, you can run the shared memory process +###Sim Mode +If you set the sim variable to true in the config file, you will run in sim mode. This means you will read offline data. This is only setup to use one worker and a master so it's somewhat slow, but very good for debugging. +``` +$ ssh psana +$ cd /jet_tracking/jet_tracking/mpi_scripts +$ ./run_mpi_script +``` +###Shared Memory +To run in shared memory you need to ssh to the mon node that has shared memory running. +``` +$ ssh daq-cxi-mon01 +$ cd /jet_tracking/jet_tracking/mpi_scripts +$ ./run_mpi_script -p 8 # -p tells number of cores to use 1 Master, the reset workers +``` diff --git a/jet_tracking/mpi_scripts/mpi_master.py b/jet_tracking/mpi_scripts/mpi_master.py index edabebc..b84070b 100644 --- a/jet_tracking/mpi_scripts/mpi_master.py +++ b/jet_tracking/mpi_scripts/mpi_master.py @@ -121,7 +121,6 @@ def start_msg_thread(self, api_port): socket.bind(''.join(['tcp://*:', str(api_port)])) while True: message = socket.recv_pyobj() - print('got message ', message) cmd = message['cmd'] value = message['value'] if cmd == 'abort': @@ -130,12 +129,10 @@ def start_msg_thread(self, api_port): logger.info('aborting jet tracking data analysis process') elif cmd == 'peak_bin': self._pub_socket.send_pyobj(message) - print('setting peak bin on master') msg_string = 'Changing peak bin to {}'.format(value) logger.info(msg_string) elif cmd == 'delta_bin': self._pub_socket.send_pyobj(message) - print('setting delta bin on master') msg_string = 'Changing delta bin to {}'.format(value) logger.info(msg_string) else: diff --git a/jet_tracking/mpi_scripts/mpi_worker.py b/jet_tracking/mpi_scripts/mpi_worker.py index 60d2354..c9f15e3 100644 --- a/jet_tracking/mpi_scripts/mpi_worker.py +++ b/jet_tracking/mpi_scripts/mpi_worker.py @@ -41,6 +41,7 @@ def __init__(self, ds, detector, ipm, jet_cam, jet_cam_axis, evr, r_mask, event_ self._state = None self._msg_thread = Thread(target=self.start_msg_thread, args=(data_port,)) self._msg_thread.start() + self._attr_lock = Lock() @property def rank(self): @@ -88,10 +89,11 @@ def peak_bin(self): @peak_bin.setter def peak_bin(self, peak_bin): - try: - self._peak_bin = int(peak_bin) - except: - logger.warning('You must provide int for peak bin') + with self._attr_lock: + try: + self._peak_bin = int(peak_bin) + except: + logger.warning('You must provide int for peak bin') @property def delta_bin(self): @@ -99,10 +101,11 @@ def delta_bin(self): @delta_bin.setter def delta_bin(self, delta_bin): - try: - self._delta_bin = int(delta_bin) - except: - logger.warning('You must provide int for delta bin') + with self._attr_lock: + try: + self._delta_bin = int(delta_bin) + except: + logger.warning('You must provide int for delta bin') @property def jet_cam(self): @@ -123,8 +126,9 @@ def start_run(self): if self.event_code not in self.evr.eventCodes(evt): continue - low_bin = self.peak_bin - self.delta_bin - hi_bin = self.peak_bin + self.delta_bin + with self._attr_lock: + low_bin = self.peak_bin - self.delta_bin + hi_bin = self.peak_bin + self.delta_bin calib = self.detector.calib(evt) det_image = self.detector.image(evt, calib) az_bins = np.array([np.mean(det_image[mask]) for mask in self._r_mask[low_bin:hi_bin]]) @@ -161,17 +165,17 @@ def start_msg_thread(self, data_port=1235): message = socket.recv_pyobj() cmd = message['cmd'] value = message['value'] - print('worker got message ', message) if cmd == 'abort': self.abort = True logger.info('aborting jet tracking data analysis process') elif cmd == 'peak_bin': - print('got message peak bin ', value) msg_string = 'Worker {} changing peak bin to {}'.format(self.rank, value) logger.info(msg_string) + self.peak_bin = int(value) elif cmd == 'delta_bin': msg_string = 'Worker {} changing delta bin to {}'.format(self.rank, value) logger.info(msg_string) + self.delta_bin = int(value) else: logger.warning('Worker {} received message with no definition {}'.format(self.rank, message))