text: (function() {
    var fn = function() {
      
      (function(root) {
        function now() {
          return new Date();
        }
      
        var force = false;
      
        if (typeof (root._bokeh_onload_callbacks) === "undefined" || force === true) {
          root._bokeh_onload_callbacks = [];
          root._bokeh_is_loading = undefined;
        }
      
        
        
      
        
        
      
        function run_callbacks() {
          try {
            root._bokeh_onload_callbacks.forEach(function(callback) { callback() });
          }
          finally {
            delete root._bokeh_onload_callbacks
          }
          console.info("Bokeh: all callbacks have finished");
        }
      
        function load_libs(js_urls, callback) {
          root._bokeh_onload_callbacks.push(callback);
          if (root._bokeh_is_loading > 0) {
            console.log("Bokeh: BokehJS is being loaded, scheduling callback at", now());
            return null;
          }
          if (js_urls == null || js_urls.length === 0) {
            run_callbacks();
            return null;
          }
          console.log("Bokeh: BokehJS not loaded, scheduling load and callback at", now());
          root._bokeh_is_loading = js_urls.length;
          for (var i = 0; i < js_urls.length; i++) {
            var url = js_urls[i];
            var s = document.createElement('script');
            s.src = url;
            s.async = false;
            s.onreadystatechange = s.onload = function() {
              root._bokeh_is_loading--;
              if (root._bokeh_is_loading === 0) {
                console.log("Bokeh: all BokehJS libraries loaded");
                run_callbacks()
              }
            };
            s.onerror = function() {
              console.warn("failed to load library " + url);
            };
            console.log("Bokeh: injecting script tag for BokehJS library: ", url);
            document.getElementsByTagName("head")[0].appendChild(s);
          }
        };var element = document.getElementById("edbbefac-b6dc-4dd5-a186-2280171ff905");
        if (element == null) {
          console.log("Bokeh: ERROR: autoload.js configured with elementid 'edbbefac-b6dc-4dd5-a186-2280171ff905' but no matching script tag was found. ")
          return false;
        }
      
        var js_urls = ["https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js", "https://cdnjs.cloudflare.com/ajax/libs/ion-rangeslider/2.1.4/js/ion.rangeSlider.js", "https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.6.0/katex.min.js", "https://cdn.bokeh.org/bokeh/release/bokeh-0.12.15.min.js", "https://cdn.bokeh.org/bokeh/release/bokeh-widgets-0.12.15.min.js", "https://cdn.bokeh.org/bokeh/release/bokeh-tables-0.12.15.min.js", "https://cdn.bokeh.org/bokeh/release/bokeh-gl-0.12.15.min.js"];
      
        var inline_js = [
          function(Bokeh) {
            Bokeh.set_log_level("info");
          },
          
          function(Bokeh) {
            (function(root, factory) {
            //  if(typeof exports === 'object' && typeof module === 'object')
            //    factory(require("Bokeh"));
            //  else if(typeof define === 'function' && define.amd)
            //    define(["Bokeh"], factory);
            //  else if(typeof exports === 'object')
            //    factory(require("Bokeh"));
            //  else
                factory(root["Bokeh"]);
            })(this, function(Bokeh) {
              var define;
              return (function outer(modules, entry) {
              if (Bokeh != null) {
                return Bokeh.register_plugin(modules, {}, entry);
              } else {
                throw new Error("Cannot find Bokeh. You have to load it prior to loading plugins.");
              }
            })
            ({
              "custom/main": function(require, module, exports) {
                var models = {
                  "Surface3d": require("custom/bk_script_66d434674bd945339d427d3410a62a05.surface3d").Surface3d,
            "IonRangeSlider": require("custom/bk_script_6bbffed6a92843428ebf149ab2d70e33.ion_range_slider").IonRangeSlider,
            "Custom": require("custom/bk_script_8355b62fc4e447beb7e563146c5db4ab.custom").Custom,
            "DrawTool": require("custom/bk_script_8b6a824193b54b1d88fc7b74ac6d180e.draw_tool").DrawTool,
            "LatexLabel": require("custom/bk_script_bd1bb66dde88488cb0e0195aca481dbb.latex_label").LatexLabel,
            "MyFormatter": require("custom/bk_script_f862fae40e2d4b40b6644b159157f372.my_formatter").MyFormatter
                };
                require("base").register_models(models);
                module.exports = models;
              },
              "custom/bk_script_66d434674bd945339d427d3410a62a05.surface3d": function(require, module, exports) {
            "use strict";
            // This file contains the JavaScript (CoffeeScript) implementation
            // for a Bokeh custom extension. The "surface3d.py" contains the
            // python counterpart.
            var __extends = (this && this.__extends) || (function () {
                var extendStatics = Object.setPrototypeOf ||
                    ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
                    function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
                return function (d, b) {
                    extendStatics(d, b);
                    function __() { this.constructor = d; }
                    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
                };
            })();
            Object.defineProperty(exports, "__esModule", { value: true });
            // This custom model wraps one part of the third-party vis.js library:
            //     http://visjs.org/index.html
            // Making it easy to hook up python data analytics tools (NumPy, SciPy,
            // Pandas, etc.) to web presentations using the Bokeh server.
            // These "require" lines are similar to python "import" statements
            var OPTIONS;
            var p = require("core/properties");
            var layout_dom_1 = require("models/layouts/layout_dom");
            // This defines some default options for the Graph3d feature of vis.js
            // See: http://visjs.org/graph3d_examples.html for more details.
            OPTIONS = {
                width: '600px',
                height: '600px',
                style: 'surface',
                showPerspective: true,
                showGrid: true,
                keepAspectRatio: true,
                verticalRatio: 1.0,
                legendLabel: 'stuff',
                cameraPosition: {
                    horizontal: -0.35,
                    vertical: 0.22,
                    distance: 1.8
                }
            };
            // To create custom model extensions that will render on to the HTML canvas
            // or into the DOM, we must create a View subclass for the model.
            // In this case we will subclass from the existing BokehJS ``LayoutDOMView``
            exports.Surface3dView = /** @class */ (function (_super) {
                __extends(Surface3dView, _super);
                function Surface3dView() {
                    return _super !== null && _super.apply(this, arguments) || this;
                }
                Surface3dView.prototype.initialize = function (options) {
                    var _this = this;
                    var script, url;
                    _super.prototype.initialize.call(this, options);
                    url = "https://cdnjs.cloudflare.com/ajax/libs/vis/4.16.1/vis.min.js";
                    script = document.createElement('script');
                    script.src = url;
                    script.async = false;
                    script.onreadystatechange = script.onload = function () {
                        return _this._init();
                    };
                    return document.querySelector("head").appendChild(script);
                };
                Surface3dView.prototype._init = function () {
                    // Create a new Graph3s using the vis.js API. This assumes the vis.js has
                    // already been loaded (e.g. in a custom app template). In the future Bokeh
                    // models will be able to specify and load external scripts automatically.
                    var _this = this;
                    // BokehJS Views create <div> elements by default, accessible as @el. Many
                    // Bokeh views ignore this default <div>, and instead do things like draw
                    // to the HTML canvas. In this case though, we use the <div> to attach a
                    // Graph3d to the DOM.
                    this._graph = new vis.Graph3d(this.el, this.get_data(), OPTIONS);
                    // Set a listener so that when the Bokeh data source has a change
                    // event, we can process the new data
                    return this.connect(this.model.data_source.change, function () {
                        return _this._graph.setData(_this.get_data());
                    });
                };
                // This is the callback executed when the Bokeh data has an change. Its basic
                // function is to adapt the Bokeh data source to the vis.js DataSet format.
                Surface3dView.prototype.get_data = function () {
                    var data, i, j, ref, source;
                    data = new vis.DataSet();
                    source = this.model.data_source;
                    for (i = j = 0, ref = source.get_length(); 0 <= ref ? j < ref : j > ref; i = 0 <= ref ? ++j : --j) {
                        data.add({
                            x: source.get_column(this.model.x)[i],
                            y: source.get_column(this.model.y)[i],
                            z: source.get_column(this.model.z)[i],
                            style: source.get_column(this.model.color)[i]
                        });
                    }
                    return data;
                };
                return Surface3dView;
            }(layout_dom_1.LayoutDOMView));
            exports.Surface3d = (function () {
                // We must also create a corresponding JavaScript BokehJS model subclass to
                // correspond to the python Bokeh model subclass. In this case, since we want
                // an element that can position itself in the DOM according to a Bokeh layout,
                // we subclass from ``LayoutDOM``
                var Surface3d = /** @class */ (function (_super) {
                    __extends(Surface3d, _super);
                    function Surface3d() {
                        return _super !== null && _super.apply(this, arguments) || this;
                    }
                    return Surface3d;
                }(layout_dom_1.LayoutDOM));
                ;
                // This is usually boilerplate. In some cases there may not be a view.
                Surface3d.prototype.default_view = exports.Surface3dView;
                // The ``type`` class attribute should generally match exactly the name
                // of the corresponding Python class.
                Surface3d.prototype.type = "Surface3d";
                // The @define block adds corresponding "properties" to the JS model. These
                // should basically line up 1-1 with the Python model class. Most property
                // types have counterparts, e.g. ``bokeh.core.properties.String`` will be
                // ``p.String`` in the JS implementatin. Where the JS type system is not yet
                // as rich, you can use ``p.Any`` as a "wildcard" property type.
                Surface3d.define({
                    x: [p.String],
                    y: [p.String],
                    z: [p.String],
                    color: [p.String],
                    data_source: [p.Instance]
                });
                return Surface3d;
            })();
      
            },
            "custom/bk_script_6bbffed6a92843428ebf149ab2d70e33.ion_range_slider": function(require, module, exports) {
            "use strict";
            var __extends = (this && this.__extends) || (function () {
                var extendStatics = Object.setPrototypeOf ||
                    ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
                    function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
                return function (d, b) {
                    extendStatics(d, b);
                    function __() { this.constructor = d; }
                    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
                };
            })();
            Object.defineProperty(exports, "__esModule", { value: true });
            var callback_1 = require("core/util/callback");
            var p = require("core/properties");
            var dom_1 = require("core/dom");
            var input_widget_1 = require("models/widgets/input_widget");
            // This model will actually need to render things, so we must provide
            // view. The LayoutDOM model has a view already, so we will start with that
            exports.IonRangeSliderView = /** @class */ (function (_super) {
                __extends(IonRangeSliderView, _super);
                function IonRangeSliderView() {
                    return _super !== null && _super.apply(this, arguments) || this;
                }
                IonRangeSliderView.prototype._createElement = function () {
                    var el;
                    el = _super.prototype._createElement.call(this);
                    this.$el = $(el);
                    return el;
                };
                IonRangeSliderView.prototype.template = function () {
                    var title, value;
                    if (this.model.title != null) {
                        if (this.model.title.length !== 0) {
                            title = dom_1.label({
                                for: this.model.id
                            }, " " + this.model.title + ": ");
                        }
                        value = dom_1.input({
                            type: "text",
                            id: this.model.id,
                            readonly: true
                        });
                    }
                    return dom_1.div({
                        class: "bk-slider-parent"
                    }, title, value, dom_1.div({
                        class: "bk-slider-horizontal"
                    }, dom_1.input({
                        type: "text",
                        class: "slider",
                        id: this.model.id
                    })));
                };
                IonRangeSliderView.prototype.initialize = function (options) {
                    _super.prototype.initialize.call(this, options);
                    this.connect(this.model.change, this.render);
                    dom_1.empty(this.el);
                    this.el.appendChild(this.template());
                    this.callbackWrapper = null;
                    if (this.model.callback_policy === 'continuous') {
                        this.callbackWrapper = function () {
                            var ref;
                            return (ref = this.model.callback) != null ? ref.execute(this.model) : void 0;
                        };
                    }
                    if (this.model.callback_policy === 'throttle' && this.model.callback) {
                        this.callbackWrapper = callback_1.throttle(function () {
                            var ref;
                            return (ref = this.model.callback) != null ? ref.execute(this.model) : void 0;
                        }, this.model.callback_throttle);
                    }
                    return this.render();
                };
                IonRangeSliderView.prototype.render = function () {
                    var _this = this;
                    var disable, from, grid, max, min, opts, range, slider, step, to;
                    // BokehJS Views create <div> elements by default, accessible as @$el.
                    // Many Bokeh views ignore this default <div>, and instead do things
                    // like draw to the HTML canvas. In this case though, we change the
                    // contents of the <div>, based on the current slider value.
                    _super.prototype.render.call(this);
                    // Set up parameters
                    max = this.model.end;
                    min = this.model.start;
                    grid = this.model.grid;
                    disable = this.model.disabled;
                    range = this.model.range || [max, min];
                    from = range[0], to = range[1];
                    step = this.model.step || ((max - min) / 50);
                    opts = {
                        type: "double",
                        grid: grid,
                        min: min,
                        max: max,
                        from: from,
                        to: to,
                        step: step,
                        disable: disable,
                        onChange: function (data) {
                            return _this.slide(data);
                        },
                        onFinish: function (data) {
                            return _this.slidestop(data);
                        }
                    };
                    dom_1.input = this.$el.find('.slider')[0];
                    slider = jQuery(dom_1.input).ionRangeSlider(opts);
                    range = [from, to];
                    this.$el.find("#" + this.model.id).val(range.join(' - '));
                    this.$el.find('.bk-slider-parent').height(this.model.height);
                    return this;
                };
                IonRangeSliderView.prototype.slidestop = function (data) {
                    var ref;
                    if (this.model.callback_policy === 'mouseup' || this.model.callback_policy === 'throttle') {
                        return (ref = this.model.callback) != null ? ref.execute(this.model) : void 0;
                    }
                };
                IonRangeSliderView.prototype.slide = function (data) {
                    var range, value;
                    range = [data.from, data.to];
                    value = range.join(' - ');
                    this.$el.find("#" + this.model.id).val(value);
                    this.model.range = range;
                    if (this.callbackWrapper) {
                        return this.callbackWrapper();
                    }
                };
                return IonRangeSliderView;
            }(input_widget_1.InputWidgetView));
            exports.IonRangeSlider = (function () {
                var IonRangeSlider = /** @class */ (function (_super) {
                    __extends(IonRangeSlider, _super);
                    function IonRangeSlider() {
                        return _super !== null && _super.apply(this, arguments) || this;
                    }
                    return IonRangeSlider;
                }(input_widget_1.InputWidget));
                ;
                // If there is an associated view, this is boilerplate.
                IonRangeSlider.prototype.default_view = exports.IonRangeSliderView;
                // The ``type`` class attribute should generally match exactly the name
                // of the corresponding Python class.
                IonRangeSlider.prototype.type = "IonRangeSlider";
                // The @define block adds corresponding "properties" to the JS model. These
                // should basically line up 1-1 with the Python model class. Most property
                // types have counterparts, e.g. bokeh.core.properties.String will be
                // p.String in the JS implementation. Where the JS type system is not yet
                // as rich, you can use p.Any as a "wildcard" property type.
                IonRangeSlider.define({
                    range: [p.Any],
                    start: [p.Number, 0],
                    end: [p.Number, 1],
                    step: [p.Number, 0.1],
                    grid: [p.Bool, true],
                    callback_throttle: [p.Number, 200],
                    callback_policy: [p.String, "throttle"]
                });
                return IonRangeSlider;
            })();
      
            },
            "custom/bk_script_8355b62fc4e447beb7e563146c5db4ab.custom": function(require, module, exports) {
            "use strict";
            var __extends = (this && this.__extends) || (function () {
                var extendStatics = Object.setPrototypeOf ||
                    ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
                    function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
                return function (d, b) {
                    extendStatics(d, b);
                    function __() { this.constructor = d; }
                    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
                };
            })();
            Object.defineProperty(exports, "__esModule", { value: true });
            var dom_1 = require("core/dom");
            var p = require("core/properties");
            var layout_dom_1 = require("models/layouts/layout_dom");
            var CustomView = /** @class */ (function (_super) {
                __extends(CustomView, _super);
                function CustomView() {
                    return _super !== null && _super.apply(this, arguments) || this;
                }
                CustomView.prototype.initialize = function (options) {
                    var _this = this;
                    _super.prototype.initialize.call(this, options);
                    this.render();
                    // Set BokehJS listener so that when the Bokeh slider has a change
                    // event, we can process the new data
                    this.connect(this.model.slider.change, function () { return _this.render(); });
                };
                CustomView.prototype.render = function () {
                    // BokehjS Views create <div> elements by default, accessible as
                    // ``this.el``. Many Bokeh views ignore this default <div>, and instead
                    // do things like draw to the HTML canvas. In this case though, we change
                    // the contents of the <div>, based on the current slider value.
                    dom_1.empty(this.el);
                    this.el.appendChild(dom_1.div({
                        style: {
                            'padding': '2px',
                            'color': '#b88d8e',
                            'background-color': '#2a3153',
                        },
                    }, this.model.text + ": " + this.model.slider.value));
                };
                return CustomView;
            }(layout_dom_1.LayoutDOMView));
            exports.CustomView = CustomView;
            var Custom = /** @class */ (function (_super) {
                __extends(Custom, _super);
                function Custom() {
                    var _this = _super !== null && _super.apply(this, arguments) || this;
                    // If there is an associated view, this is typically boilerplate.
                    _this.default_view = CustomView;
                    // The ``type`` class attribute should generally match exactly the name
                    // of the corresponding Python class.
                    _this.type = "Custom";
                    return _this;
                }
                return Custom;
            }(layout_dom_1.LayoutDOM));
            exports.Custom = Custom;
            // The @define block adds corresponding "properties" to the JS model. These
            // should normally line up 1-1 with the Python model class. Most property
            // types have counterparts, e.g. bokeh.core.properties.String will be
            // ``p.String`` in the JS implementation. Any time the JS type system is not
            // yet as complete, you can use ``p.Any`` as a "wildcard" property type.
            Custom.define({
                text: [p.String],
                slider: [p.Any],
            });
      
            },
            "custom/bk_script_8b6a824193b54b1d88fc7b74ac6d180e.draw_tool": function(require, module, exports) {
            "use strict";
            var __extends = (this && this.__extends) || (function () {
                var extendStatics = Object.setPrototypeOf ||
                    ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
                    function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
                return function (d, b) {
                    extendStatics(d, b);
                    function __() { this.constructor = d; }
                    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
                };
            })();
            Object.defineProperty(exports, "__esModule", { value: true });
            var p = require("core/properties");
            var gesture_tool_1 = require("models/tools/gestures/gesture_tool");
            exports.DrawToolView = /** @class */ (function (_super) {
                __extends(DrawToolView, _super);
                function DrawToolView() {
                    return _super !== null && _super.apply(this, arguments) || this;
                }
                // this is executed when the pan/drag event starts
                DrawToolView.prototype._pan_start = function (e) {
                    return this.model.source.data = {
                        x: [],
                        y: []
                    };
                };
                // this is executed on subsequent mouse/touch moves
                DrawToolView.prototype._pan = function (e) {
                    var frame, sx, sy, x, y;
                    frame = this.plot_model.frame;
                    (sx = e.sx, sy = e.sy);
                    if (!frame.bbox.contains(sx, sy)) {
                        return null;
                    }
                    x = frame.xscales['default'].invert(sx);
                    y = frame.yscales['default'].invert(sy);
                    this.model.source.data.x.push(x);
                    this.model.source.data.y.push(y);
                    return this.model.source.change.emit();
                };
                // this is executed then the pan/drag ends
                DrawToolView.prototype._pan_end = function (e) {
                    return null;
                };
                return DrawToolView;
            }(gesture_tool_1.GestureToolView));
            exports.DrawTool = (function () {
                var DrawTool = /** @class */ (function (_super) {
                    __extends(DrawTool, _super);
                    function DrawTool() {
                        return _super !== null && _super.apply(this, arguments) || this;
                    }
                    return DrawTool;
                }(gesture_tool_1.GestureTool));
                ;
                DrawTool.prototype.default_view = exports.DrawToolView;
                DrawTool.prototype.type = "DrawTool";
                DrawTool.prototype.tool_name = "Drag Span";
                DrawTool.prototype.icon = "bk-tool-icon-lasso-select";
                DrawTool.prototype.event_type = "pan";
                DrawTool.prototype.default_order = 12;
                DrawTool.define({
                    source: [p.Instance]
                });
                return DrawTool;
            })();
      
            },
            "custom/bk_script_bd1bb66dde88488cb0e0195aca481dbb.latex_label": function(require, module, exports) {
            "use strict";
            var __extends = (this && this.__extends) || (function () {
                var extendStatics = Object.setPrototypeOf ||
                    ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
                    function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
                return function (d, b) {
                    extendStatics(d, b);
                    function __() { this.constructor = d; }
                    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
                };
            })();
            Object.defineProperty(exports, "__esModule", { value: true });
            var label_1 = require("models/annotations/label");
            exports.LatexLabelView = /** @class */ (function (_super) {
                __extends(LatexLabelView, _super);
                function LatexLabelView() {
                    return _super !== null && _super.apply(this, arguments) || this;
                }
                LatexLabelView.prototype.render = function () {
                    var angle, panel, ref, sx, sy, xscale, yscale;
                    //--- Start of copied section from ``Label.render`` implementation
                    // Here because AngleSpec does units tranform and label doesn't support specs
                    switch (this.model.angle_units) {
                        case "rad":
                            angle = -1 * this.model.angle;
                            break;
                        case "deg":
                            angle = -1 * this.model.angle * Math.PI / 180.0;
                    }
                    panel = (ref = this.model.panel) != null ? ref : this.plot_view.frame;
                    xscale = this.plot_view.frame.xscales[this.model.x_range_name];
                    yscale = this.plot_view.frame.yscales[this.model.y_range_name];
                    sx = this.model.x_units === "data" ? xscale.compute(this.model.x) : panel.xview.compute(this.model.x);
                    sy = this.model.y_units === "data" ? yscale.compute(this.model.y) : panel.yview.compute(this.model.y);
                    sx += this.model.x_offset;
                    sy -= this.model.y_offset;
                    //--- End of copied section from ``Label.render`` implementation
                    // Must render as superpositioned div (not on canvas) so that KaTex
                    // css can properly style the text
                    this._css_text(this.plot_view.canvas_view.ctx, "", sx, sy, angle);
                    // ``katex`` is loaded into the global window at runtime
                    // katex.renderToString returns a html ``span`` element
                    return katex.render(this.model.text, this.el, {
                        displayMode: true
                    });
                };
                return LatexLabelView;
            }(label_1.LabelView));
            exports.LatexLabel = (function () {
                var LatexLabel = /** @class */ (function (_super) {
                    __extends(LatexLabel, _super);
                    function LatexLabel() {
                        return _super !== null && _super.apply(this, arguments) || this;
                    }
                    return LatexLabel;
                }(label_1.Label));
                ;
                LatexLabel.prototype.type = 'LatexLabel';
                LatexLabel.prototype.default_view = exports.LatexLabelView;
                return LatexLabel;
            })();
      
            },
            "custom/bk_script_f862fae40e2d4b40b6644b159157f372.my_formatter": function(require, module, exports) {
            "use strict";
            var __extends = (this && this.__extends) || (function () {
                var extendStatics = Object.setPrototypeOf ||
                    ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
                    function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
                return function (d, b) {
                    extendStatics(d, b);
                    function __() { this.constructor = d; }
                    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
                };
            })();
            Object.defineProperty(exports, "__esModule", { value: true });
            var tick_formatter_1 = require("models/formatters/tick_formatter");
            exports.MyFormatter = (function () {
                var MyFormatter = /** @class */ (function (_super) {
                    __extends(MyFormatter, _super);
                    function MyFormatter() {
                        return _super !== null && _super.apply(this, arguments) || this;
                    }
                    // TickFormatters should implement this method, which accepts a lisst
                    // of numbers (ticks) and returns a list of strings
                    MyFormatter.prototype.doFormat = function (ticks) {
                        var formatted, i, j, ref;
                        // format the first tick as-is
                        formatted = ["" + ticks[0]];
                        // format the remaining ticks as a difference from the first
                        for (i = j = 1, ref = ticks.length; 1 <= ref ? j < ref : j > ref; i = 1 <= ref ? ++j : --j) {
                            formatted.push("+" + (ticks[i] - ticks[0]).toPrecision(2));
                        }
                        return formatted;
                    };
                    return MyFormatter;
                }(tick_formatter_1.TickFormatter));
                ;
                MyFormatter.prototype.type = "MyFormatter";
                return MyFormatter;
            })();
      
            }
            }, "custom/main");
            ;
            });
      
          },
          
          function(Bokeh) {
            (function() {
              var fn = function() {
                Bokeh.safely(function() {
                  (function(root) {
                    function embed_document(root) {
                      
                    var docs_json = '{"04b9ea6c-f422-424b-bb3c-c526de0a81f3":{"roots":{"references":[{"attributes":{},"id":"2bbbfd55-efc0-49d7-9af6-764adb5f9106","type":"LinearScale"},{"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":"0b59ff1f-5d8b-4abf-93bc-9ad508a8466f","type":"Circle"},{"attributes":{},"id":"3d33531a-ce7d-426f-a4d4-7a6c82138889","type":"BasicTicker"},{"attributes":{"plot":null,"text":""},"id":"eb04429d-4c87-4ef1-b2d4-b16203802e09","type":"Title"},{"attributes":{"callback":null},"id":"94c421a5-1d0d-4c3a-b09f-3c4a286e784e","type":"DataRange1d"},{"attributes":{"source":{"id":"1eac6515-0655-41da-a835-cc0201315d08","type":"ColumnDataSource"}},"id":"1696be33-e861-4fbf-9030-1cc9787e9af2","type":"CDSView"},{"attributes":{"callback":null,"column_names":["x","y"],"data":{"x":{"__ndarray__":"AAAAAAAAAACRGkt8Vz/AP5EaS3xXP9A/2qdwOgNf2D+RGkt8Vz/gPzXhXVstT+Q/2qdwOgNf6D9+boMZ2W7sP5EaS3xXP/A/433Ua0JH8j814V1bLU/0P4dE50oYV/Y/2qdwOgNf+D8sC/op7mb6P35ugxnZbvw/0NEMCcR2/j+RGkt8Vz8AQDrMD/RMQwFA433Ua0JHAkCML5njN0sDQDXhXVstTwRA3pIi0yJTBUCHROdKGFcGQDD2q8INWwdA2qdwOgNfCECDWTWy+GIJQCwL+inuZgpA1by+oeNqC0B+boMZ2W4MQCcgSJHOcg1A0NEMCcR2DkB5g9GAuXoPQJEaS3xXPxBAZnMtOFLBEEA6zA/0TEMRQA8l8q9HxRFA433Ua0JHEkC41rYnPckSQIwvmeM3SxNAYYh7nzLNE0A14V1bLU8UQAo6QBco0RRA3pIi0yJTFUCz6wSPHdUVQIdE50oYVxZAXJ3JBhPZFkAw9qvCDVsXQAVPjn4I3RdA2qdwOgNfGECuAFP2/eAYQINZNbL4YhlAV7IXbvPkGUAsC/op7mYaQABk3OXo6BpA1by+oeNqG0CpFaFd3uwbQH5ugxnZbhxAUsdl1dPwHEAnIEiRznIdQPt4Kk3J9B1A0NEMCcR2HkCkKu/EvvgeQHmD0YC5eh9ATdyzPLT8H0CRGkt8Vz8gQPtGPNpUgCBAZnMtOFLBIEDQnx6WTwIhQDrMD/RMQyFApPgAUkqEIUAPJfKvR8UhQHlR4w1FBiJA433Ua0JHIkBNqsXJP4giQLjWtic9ySJAIgOohToKI0CML5njN0sjQPZbikE1jCNAYYh7nzLNI0DLtGz9Lw4kQDXhXVstTyRAoA1PuSqQJEAKOkAXKNEkQHRmMXUlEiVA3pIi0yJTJUBJvxMxIJQlQLPrBI8d1SVAHRj27BoWJkCHROdKGFcmQPJw2KgVmCZAXJ3JBhPZJkDGybpkEBonQDD2q8INWydAmyKdIAucJ0AFT45+CN0nQG97f9wFHihA2qdwOgNfKEBE1GGYAKAoQK4AU/b94ChAGC1EVPshKUA=","dtype":"float64","shape":[100]},"y":{"__ndarray__":"AAAAAAAAAADoxQO0RU7YP+dMxoI2HOg//C5K/vzW8T/Tua6vYlb3P+nH5xKndfw/AFIvb9iPAEBm8BjVpKACQNka5Ym2ZARADqEya8fUBUD+Gu1b6+oGQBHVYKmoogdAYgGEegr5B0DMzIX9rOwHQM+xeSHDfQdA1L6JxBWuBkB9BRBa/IAFQO0A3yZP+wNAeZ5rTFMjAkDe5Qz1oAAAQDnpZxcIOPs/tv7u/6/+9T/6iGdXvmrwP2wf+wVaJuU/5X710zFA0j+uSTsu9124v2QnUqkVVt6/o9Qx/NsL679m4Ulpoj7zvxQdiFoRqPi/bDUKCPCr/b/J7VIByxoBwPGhyyYpGQPAgTlCLtzIBMCuGkzd8SIGwAOBBKLYIQfAMzIqg3bBB8BzaxsFOv8HwKfUGL4k2gfAJ8c7bs9SB8BSNUOKZ2sGwCX1VkOmJwXAMfGzMMGMA8AkU27aVKEBwC4hWvuS2v6/DwQZ9WTz+b9lsKPjUaH0v8Yvs7GI9O2/YIF44Akr4r8GSRAz01rIvzJJEDPTWsg/aoF44Akr4j/QL7OxiPTtP1+wo+NRofQ/FAQZ9WTz+T8oIVr7ktr+PyVTbtpUoQFAMPGzMMGMA0Am9VZDpicFQFE1Q4pnawZAKMc7bs9SB0Cn1Bi+JNoHQHNrGwU6/wdANDIqg3bBB0ACgQSi2CEHQLAaTN3xIgZAfTlCLtzIBEDwocsmKRkDQMntUgHLGgFAcTUKCPCr/T8MHYhaEaj4P2HhSWmiPvM/pNQx/NsL6z99J1KpFVbeP/ZIOy73Xbg/+n710zFA0r9fH/sFWiblv+6IZ1e+avC/uv7u/6/+9b846WcXCDj7v9vlDPWgAADAfJ5rTFMjAsDuAN8mT/sDwH0FEFr8gAXA076JxBWuBsDQsXkhw30HwMzMhf2s7AfAYgGEegr5B8AS1WCpqKIHwPwa7Vvr6gbADqEya8fUBcDaGuWJtmQEwGnwGNWkoALA/VEvb9iPAMDpx+cSp3X8v9e5rq9iVve/8C5K/vzW8b/bTMaCNhzov+rFA7RFTti/CoqeTDl52rw=","dtype":"float64","shape":[100]}},"selected":null,"selection_policy":null},"id":"64bb95fd-9b2c-431b-a7e3-0ef6d3f4ed56","type":"ColumnDataSource"},{"attributes":{"line_color":"green","x":{"field":"x"},"y":{"field":"y"}},"id":"bbe8b1c2-f769-4061-bd9f-d6c2301246bc","type":"Line"},{"attributes":{"line_color":"orange","line_dash":[4,4],"line_width":2,"x":{"field":"x"},"y":{"field":"y"}},"id":"ebf64fdc-c6cc-41a8-ae8b-09bf0ab311f7","type":"Line"},{"attributes":{"data_source":{"id":"df418702-fd72-4cf8-a8fe-9a1e7552b740","type":"ColumnDataSource"},"glyph":{"id":"8df1785b-9444-4924-9c8f-847cdc0529b7","type":"Circle"},"hover_glyph":null,"muted_glyph":null,"nonselection_glyph":{"id":"0b59ff1f-5d8b-4abf-93bc-9ad508a8466f","type":"Circle"},"selection_glyph":null,"view":{"id":"3d82960d-1c9f-4d53-873c-88f8a594578b","type":"CDSView"}},"id":"790a2ef7-451a-4597-8038-2f48e8140a0e","type":"GlyphRenderer"},{"attributes":{"data_source":{"id":"1eac6515-0655-41da-a835-cc0201315d08","type":"ColumnDataSource"},"glyph":{"id":"9dede99e-f5aa-44b5-b3b4-6f8fed20785c","type":"Line"},"hover_glyph":null,"muted_glyph":null,"nonselection_glyph":{"id":"41daf74c-8a00-45a4-aede-5722cecd7929","type":"Line"},"selection_glyph":null,"view":{"id":"1696be33-e861-4fbf-9030-1cc9787e9af2","type":"CDSView"}},"id":"19ef6585-9d16-426a-8dc3-cd2b2025746c","type":"GlyphRenderer"},{"attributes":{"formatter":{"id":"bd41b6ed-dab0-400e-a909-1c2eb3044b56","type":"BasicTickFormatter"},"plot":{"id":"fb238668-77a4-4ca6-bc35-16770876dc56","subtype":"Figure","type":"Plot"},"ticker":{"id":"d23db482-f292-4d1f-aff1-46551b961f2a","type":"BasicTicker"}},"id":"9e82459c-f26a-4569-a664-697fb895ffe8","type":"LinearAxis"},{"attributes":{},"id":"bd41b6ed-dab0-400e-a909-1c2eb3044b56","type":"BasicTickFormatter"},{"attributes":{},"id":"bd0e0d3b-9e2e-4f21-b96c-02cfdd933ad7","type":"HelpTool"},{"attributes":{"line_alpha":0.1,"line_color":"#1f77b4","line_dash":[4,4],"line_width":2,"x":{"field":"x"},"y":{"field":"y"}},"id":"ff6fca88-7d7c-4e6a-a564-e4423d675983","type":"Line"},{"attributes":{},"id":"6372fd99-6800-45be-a13d-25c68df5db2d","type":"BasicTickFormatter"},{"attributes":{"plot":{"id":"fb238668-77a4-4ca6-bc35-16770876dc56","subtype":"Figure","type":"Plot"},"ticker":{"id":"3d33531a-ce7d-426f-a4d4-7a6c82138889","type":"BasicTicker"}},"id":"0d407cf0-b020-4190-a519-9ec445fadda4","type":"Grid"},{"attributes":{"data_source":{"id":"64bb95fd-9b2c-431b-a7e3-0ef6d3f4ed56","type":"ColumnDataSource"},"glyph":{"id":"bbe8b1c2-f769-4061-bd9f-d6c2301246bc","type":"Line"},"hover_glyph":null,"muted_glyph":null,"nonselection_glyph":{"id":"6623a501-cbf9-46c3-a0be-794bc584231b","type":"Line"},"selection_glyph":null,"view":{"id":"a919b4bb-23af-4591-8553-697eb7a723eb","type":"CDSView"}},"id":"44a1ed4f-6354-4dc7-b2d6-dfc9a728e202","type":"GlyphRenderer"},{"attributes":{"source":{"id":"ef21e569-b018-4f1d-a8cb-b79373841c68","type":"ColumnDataSource"}},"id":"704ca1b0-d9de-46e2-ab55-dd30507dbb72","type":"CDSView"},{"attributes":{"label":{"value":"sin(x)"},"renderers":[{"id":"790a2ef7-451a-4597-8038-2f48e8140a0e","type":"GlyphRenderer"},{"id":"19ef6585-9d16-426a-8dc3-cd2b2025746c","type":"GlyphRenderer"}]},"id":"84638b63-31d7-411f-ba32-88f57a593db0","type":"LegendItem"},{"attributes":{"line_color":"#1f77b4","x":{"field":"x"},"y":{"field":"y"}},"id":"9dede99e-f5aa-44b5-b3b4-6f8fed20785c","type":"Line"},{"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},"plot":null,"render_mode":"css","right_units":"screen","top_units":"screen"},"id":"180aa6ac-fe2b-44a2-aeaf-b764b4eee0a8","type":"BoxAnnotation"},{"attributes":{},"id":"b8d6b05a-398e-4399-802c-3e715403aecf","type":"PanTool"},{"attributes":{"label":{"value":"3*sin(x)"},"renderers":[{"id":"82e37646-4c52-4e3f-bcf9-d64185fc6d10","type":"GlyphRenderer"},{"id":"44a1ed4f-6354-4dc7-b2d6-dfc9a728e202","type":"GlyphRenderer"}]},"id":"0646d5b4-2cd6-4714-9552-0f8061576816","type":"LegendItem"},{"attributes":{"callback":null,"column_names":["x","y"],"data":{"x":{"__ndarray__":"AAAAAAAAAACRGkt8Vz/AP5EaS3xXP9A/2qdwOgNf2D+RGkt8Vz/gPzXhXVstT+Q/2qdwOgNf6D9+boMZ2W7sP5EaS3xXP/A/433Ua0JH8j814V1bLU/0P4dE50oYV/Y/2qdwOgNf+D8sC/op7mb6P35ugxnZbvw/0NEMCcR2/j+RGkt8Vz8AQDrMD/RMQwFA433Ua0JHAkCML5njN0sDQDXhXVstTwRA3pIi0yJTBUCHROdKGFcGQDD2q8INWwdA2qdwOgNfCECDWTWy+GIJQCwL+inuZgpA1by+oeNqC0B+boMZ2W4MQCcgSJHOcg1A0NEMCcR2DkB5g9GAuXoPQJEaS3xXPxBAZnMtOFLBEEA6zA/0TEMRQA8l8q9HxRFA433Ua0JHEkC41rYnPckSQIwvmeM3SxNAYYh7nzLNE0A14V1bLU8UQAo6QBco0RRA3pIi0yJTFUCz6wSPHdUVQIdE50oYVxZAXJ3JBhPZFkAw9qvCDVsXQAVPjn4I3RdA2qdwOgNfGECuAFP2/eAYQINZNbL4YhlAV7IXbvPkGUAsC/op7mYaQABk3OXo6BpA1by+oeNqG0CpFaFd3uwbQH5ugxnZbhxAUsdl1dPwHEAnIEiRznIdQPt4Kk3J9B1A0NEMCcR2HkCkKu/EvvgeQHmD0YC5eh9ATdyzPLT8H0CRGkt8Vz8gQPtGPNpUgCBAZnMtOFLBIEDQnx6WTwIhQDrMD/RMQyFApPgAUkqEIUAPJfKvR8UhQHlR4w1FBiJA433Ua0JHIkBNqsXJP4giQLjWtic9ySJAIgOohToKI0CML5njN0sjQPZbikE1jCNAYYh7nzLNI0DLtGz9Lw4kQDXhXVstTyRAoA1PuSqQJEAKOkAXKNEkQHRmMXUlEiVA3pIi0yJTJUBJvxMxIJQlQLPrBI8d1SVAHRj27BoWJkCHROdKGFcmQPJw2KgVmCZAXJ3JBhPZJkDGybpkEBonQDD2q8INWydAmyKdIAucJ0AFT45+CN0nQG97f9wFHihA2qdwOgNfKEBE1GGYAKAoQK4AU/b94ChAGC1EVPshKUA=","dtype":"float64","shape":[100]},"y":{"__ndarray__":"AAAAAAAAAADwgwJ4LjTAP5qI2QHPEtA/+5MNU1HJ1z8ZTT7q2B3fP0aFmgwa+eI/ABg/lCAV5j+IQCEcMdboP3fOhmLzMOs/EyzujrQb7T/9Izwlj47uPxccgYyLg+8/g6xao7j27z9mZrL8O+bvP7+X94FZUu8/xVNiW3I97j9RB8Ai+6vsP5FWKYlppOo/oSg6uxkv6D/Th2bxK1blPyZGRbpaJeI/8qg+VZVT3T/4C4p0qOPVP+UppLIiM8w/3FNHxZdVuD/J23zJpD6gv+3ENsZjOcS/wo12/ecH0r/dgWKM2KjZv2MTsJELcOC/83ixWvXH47+358MBZM7mv5eCD4nhdum/rExY6Hq267+TIxAn7YPtvwSssILL1+6/70I4BJ6s77/vOc8G+P7vvzTGy1KGze+/3176khQZ77/C8a4NiuTtvzGcHq/dNOy/l0FFlgER6r+FGZN4xoHnvx8WPFK3keS/Cli7+O1M4b+HQNqEwoHbv9kfIiFb+NO/gKyggGI5yL8EhrXMjDywvyGGtcyMPLA/jqyggGI5yD/gHyIhW/jTP39A2oTCgds/DVi7+O1M4T8bFjxSt5HkP4cZk3jGgec/lUFFlgER6j8ynB6v3TTsP8Hxrg2K5O0/4F76khQZ7z80xstShs3vP+85zwb4/u8/8EI4BJ6s7z8DrLCCy9fuP5UjECftg+0/p0xY6Hq26z+Vgg+J4XbpP7fnwwFkzuY/9nixWvXH4z9dE7CRC3DgP9eBYozYqNk/w412/ecH0j/+xDbGYznEP0/bfMmkPqA/+FNHxZdVuL/UKaSyIjPMv+gLinSo49W/+Kg+VZVT3b8lRkW6WiXiv8+HZvErVuW/pig6uxkv6L+TVimJaaTqv1EHwCL7q+y/xFNiW3I97r/Al/eBWVLvv2Zmsvw75u+/g6xao7j2778YHIGMi4Pvv/sjPCWPju6/EyzujrQb7b94zoZi8zDrv4xAIRwx1ui//Bc/lCAV5r9GhZoMGvnivx9NPurYHd+/65MNU1HJ17+SiNkBzxLQv/GDAnguNMC/B1wUMyamwbw=","dtype":"float64","shape":[100]}},"selected":null,"selection_policy":null},"id":"df418702-fd72-4cf8-a8fe-9a1e7552b740","type":"ColumnDataSource"},{"attributes":{"data_source":{"id":"ef21e569-b018-4f1d-a8cb-b79373841c68","type":"ColumnDataSource"},"glyph":{"id":"857d15ab-0781-41ff-b43b-11cbea3cfcfb","type":"Square"},"hover_glyph":null,"muted_glyph":null,"nonselection_glyph":{"id":"ac37af21-b693-4698-a868-561ed39322d1","type":"Square"},"selection_glyph":null,"view":{"id":"704ca1b0-d9de-46e2-ab55-dd30507dbb72","type":"CDSView"}},"id":"82e37646-4c52-4e3f-bcf9-d64185fc6d10","type":"GlyphRenderer"},{"attributes":{"callback":null,"column_names":["x","y"],"data":{"x":{"__ndarray__":"AAAAAAAAAACRGkt8Vz/AP5EaS3xXP9A/2qdwOgNf2D+RGkt8Vz/gPzXhXVstT+Q/2qdwOgNf6D9+boMZ2W7sP5EaS3xXP/A/433Ua0JH8j814V1bLU/0P4dE50oYV/Y/2qdwOgNf+D8sC/op7mb6P35ugxnZbvw/0NEMCcR2/j+RGkt8Vz8AQDrMD/RMQwFA433Ua0JHAkCML5njN0sDQDXhXVstTwRA3pIi0yJTBUCHROdKGFcGQDD2q8INWwdA2qdwOgNfCECDWTWy+GIJQCwL+inuZgpA1by+oeNqC0B+boMZ2W4MQCcgSJHOcg1A0NEMCcR2DkB5g9GAuXoPQJEaS3xXPxBAZnMtOFLBEEA6zA/0TEMRQA8l8q9HxRFA433Ua0JHEkC41rYnPckSQIwvmeM3SxNAYYh7nzLNE0A14V1bLU8UQAo6QBco0RRA3pIi0yJTFUCz6wSPHdUVQIdE50oYVxZAXJ3JBhPZFkAw9qvCDVsXQAVPjn4I3RdA2qdwOgNfGECuAFP2/eAYQINZNbL4YhlAV7IXbvPkGUAsC/op7mYaQABk3OXo6BpA1by+oeNqG0CpFaFd3uwbQH5ugxnZbhxAUsdl1dPwHEAnIEiRznIdQPt4Kk3J9B1A0NEMCcR2HkCkKu/EvvgeQHmD0YC5eh9ATdyzPLT8H0CRGkt8Vz8gQPtGPNpUgCBAZnMtOFLBIEDQnx6WTwIhQDrMD/RMQyFApPgAUkqEIUAPJfKvR8UhQHlR4w1FBiJA433Ua0JHIkBNqsXJP4giQLjWtic9ySJAIgOohToKI0CML5njN0sjQPZbikE1jCNAYYh7nzLNI0DLtGz9Lw4kQDXhXVstTyRAoA1PuSqQJEAKOkAXKNEkQHRmMXUlEiVA3pIi0yJTJUBJvxMxIJQlQLPrBI8d1SVAHRj27BoWJkCHROdKGFcmQPJw2KgVmCZAXJ3JBhPZJkDGybpkEBonQDD2q8INWydAmyKdIAucJ0AFT45+CN0nQG97f9wFHihA2qdwOgNfKEBE1GGYAKAoQK4AU/b94ChAGC1EVPshKUA=","dtype":"float64","shape":[100]},"y":{"__ndarray__":"AAAAAAAAAADwgwJ4LjTAP5qI2QHPEtA/+5MNU1HJ1z8ZTT7q2B3fP0aFmgwa+eI/ABg/lCAV5j+IQCEcMdboP3fOhmLzMOs/EyzujrQb7T/9Izwlj47uPxccgYyLg+8/g6xao7j27z9mZrL8O+bvP7+X94FZUu8/xVNiW3I97j9RB8Ai+6vsP5FWKYlppOo/oSg6uxkv6D/Th2bxK1blPyZGRbpaJeI/8qg+VZVT3T/4C4p0qOPVP+UppLIiM8w/3FNHxZdVuD/J23zJpD6gv+3ENsZjOcS/wo12/ecH0r/dgWKM2KjZv2MTsJELcOC/83ixWvXH47+358MBZM7mv5eCD4nhdum/rExY6Hq267+TIxAn7YPtvwSssILL1+6/70I4BJ6s77/vOc8G+P7vvzTGy1KGze+/3176khQZ77/C8a4NiuTtvzGcHq/dNOy/l0FFlgER6r+FGZN4xoHnvx8WPFK3keS/Cli7+O1M4b+HQNqEwoHbv9kfIiFb+NO/gKyggGI5yL8EhrXMjDywvyGGtcyMPLA/jqyggGI5yD/gHyIhW/jTP39A2oTCgds/DVi7+O1M4T8bFjxSt5HkP4cZk3jGgec/lUFFlgER6j8ynB6v3TTsP8Hxrg2K5O0/4F76khQZ7z80xstShs3vP+85zwb4/u8/8EI4BJ6s7z8DrLCCy9fuP5UjECftg+0/p0xY6Hq26z+Vgg+J4XbpP7fnwwFkzuY/9nixWvXH4z9dE7CRC3DgP9eBYozYqNk/w412/ecH0j/+xDbGYznEP0/bfMmkPqA/+FNHxZdVuL/UKaSyIjPMv+gLinSo49W/+Kg+VZVT3b8lRkW6WiXiv8+HZvErVuW/pig6uxkv6L+TVimJaaTqv1EHwCL7q+y/xFNiW3I97r/Al/eBWVLvv2Zmsvw75u+/g6xao7j2778YHIGMi4Pvv/sjPCWPju6/EyzujrQb7b94zoZi8zDrv4xAIRwx1ui//Bc/lCAV5r9GhZoMGvnivx9NPurYHd+/65MNU1HJ17+SiNkBzxLQv/GDAnguNMC/B1wUMyamwbw=","dtype":"float64","shape":[100]}},"selected":null,"selection_policy":null},"id":"1eac6515-0655-41da-a835-cc0201315d08","type":"ColumnDataSource"},{"attributes":{"overlay":{"id":"180aa6ac-fe2b-44a2-aeaf-b764b4eee0a8","type":"BoxAnnotation"}},"id":"fee4665f-4a9f-4fe6-bf99-b69ad5c1e559","type":"BoxZoomTool"},{"attributes":{},"id":"b56384b4-a8a3-4d3b-883e-94d937a38e75","type":"SaveTool"},{"attributes":{},"id":"d23db482-f292-4d1f-aff1-46551b961f2a","type":"BasicTicker"},{"attributes":{"fill_color":{"value":null},"line_color":{"value":"green"},"x":{"field":"x"},"y":{"field":"y"}},"id":"857d15ab-0781-41ff-b43b-11cbea3cfcfb","type":"Square"},{"attributes":{},"id":"cb9614be-525a-41ae-ba78-3ce986a08bbd","type":"ResetTool"},{"attributes":{"line_alpha":0.1,"line_color":"#1f77b4","x":{"field":"x"},"y":{"field":"y"}},"id":"6623a501-cbf9-46c3-a0be-794bc584231b","type":"Line"},{"attributes":{"active_drag":"auto","active_inspect":"auto","active_scroll":"auto","active_tap":"auto","tools":[{"id":"b8d6b05a-398e-4399-802c-3e715403aecf","type":"PanTool"},{"id":"9b6fbf2a-ad03-4c87-9f19-6ef44e1a2ef7","type":"WheelZoomTool"},{"id":"fee4665f-4a9f-4fe6-bf99-b69ad5c1e559","type":"BoxZoomTool"},{"id":"b56384b4-a8a3-4d3b-883e-94d937a38e75","type":"SaveTool"},{"id":"cb9614be-525a-41ae-ba78-3ce986a08bbd","type":"ResetTool"},{"id":"bd0e0d3b-9e2e-4f21-b96c-02cfdd933ad7","type":"HelpTool"}]},"id":"38f81b82-87c8-4740-96a0-3a27d8b3835d","type":"Toolbar"},{"attributes":{"data_source":{"id":"46d4c044-98aa-4b7e-af2f-e55f0c057b8f","type":"ColumnDataSource"},"glyph":{"id":"ebf64fdc-c6cc-41a8-ae8b-09bf0ab311f7","type":"Line"},"hover_glyph":null,"muted_glyph":null,"nonselection_glyph":{"id":"ff6fca88-7d7c-4e6a-a564-e4423d675983","type":"Line"},"selection_glyph":null,"view":{"id":"564ed43b-190b-4332-bda4-698c808801fd","type":"CDSView"}},"id":"028553b3-f5ed-4722-8653-875593181977","type":"GlyphRenderer"},{"attributes":{"callback":null},"id":"b70a5ea5-2b7b-4010-b642-99ab1b44968d","type":"DataRange1d"},{"attributes":{"below":[{"id":"4754db49-8808-4d2c-9e47-0aae4555f785","type":"LinearAxis"}],"left":[{"id":"9e82459c-f26a-4569-a664-697fb895ffe8","type":"LinearAxis"}],"renderers":[{"id":"4754db49-8808-4d2c-9e47-0aae4555f785","type":"LinearAxis"},{"id":"0d407cf0-b020-4190-a519-9ec445fadda4","type":"Grid"},{"id":"9e82459c-f26a-4569-a664-697fb895ffe8","type":"LinearAxis"},{"id":"7bccfacd-9ed6-45d9-a3ea-363a935a8736","type":"Grid"},{"id":"180aa6ac-fe2b-44a2-aeaf-b764b4eee0a8","type":"BoxAnnotation"},{"id":"f8f2e6d9-830e-430b-8e93-772da402acc9","type":"Legend"},{"id":"790a2ef7-451a-4597-8038-2f48e8140a0e","type":"GlyphRenderer"},{"id":"19ef6585-9d16-426a-8dc3-cd2b2025746c","type":"GlyphRenderer"},{"id":"028553b3-f5ed-4722-8653-875593181977","type":"GlyphRenderer"},{"id":"82e37646-4c52-4e3f-bcf9-d64185fc6d10","type":"GlyphRenderer"},{"id":"44a1ed4f-6354-4dc7-b2d6-dfc9a728e202","type":"GlyphRenderer"}],"title":{"id":"eb04429d-4c87-4ef1-b2d4-b16203802e09","type":"Title"},"toolbar":{"id":"38f81b82-87c8-4740-96a0-3a27d8b3835d","type":"Toolbar"},"x_range":{"id":"b70a5ea5-2b7b-4010-b642-99ab1b44968d","type":"DataRange1d"},"x_scale":{"id":"632b0b83-0140-45b5-b88d-22b0f00189f0","type":"LinearScale"},"y_range":{"id":"94c421a5-1d0d-4c3a-b09f-3c4a286e784e","type":"DataRange1d"},"y_scale":{"id":"2bbbfd55-efc0-49d7-9af6-764adb5f9106","type":"LinearScale"}},"id":"fb238668-77a4-4ca6-bc35-16770876dc56","subtype":"Figure","type":"Plot"},{"attributes":{"dimension":1,"plot":{"id":"fb238668-77a4-4ca6-bc35-16770876dc56","subtype":"Figure","type":"Plot"},"ticker":{"id":"d23db482-f292-4d1f-aff1-46551b961f2a","type":"BasicTicker"}},"id":"7bccfacd-9ed6-45d9-a3ea-363a935a8736","type":"Grid"},{"attributes":{"border_line_color":{"value":"navy"},"border_line_width":{"value":3},"items":[{"id":"84638b63-31d7-411f-ba32-88f57a593db0","type":"LegendItem"},{"id":"6b1d9153-aafa-4e48-aeab-ba465d2c168d","type":"LegendItem"},{"id":"0646d5b4-2cd6-4714-9552-0f8061576816","type":"LegendItem"}],"plot":{"id":"fb238668-77a4-4ca6-bc35-16770876dc56","subtype":"Figure","type":"Plot"}},"id":"f8f2e6d9-830e-430b-8e93-772da402acc9","type":"Legend"},{"attributes":{},"id":"632b0b83-0140-45b5-b88d-22b0f00189f0","type":"LinearScale"},{"attributes":{"callback":null,"column_names":["x","y"],"data":{"x":{"__ndarray__":"AAAAAAAAAACRGkt8Vz/AP5EaS3xXP9A/2qdwOgNf2D+RGkt8Vz/gPzXhXVstT+Q/2qdwOgNf6D9+boMZ2W7sP5EaS3xXP/A/433Ua0JH8j814V1bLU/0P4dE50oYV/Y/2qdwOgNf+D8sC/op7mb6P35ugxnZbvw/0NEMCcR2/j+RGkt8Vz8AQDrMD/RMQwFA433Ua0JHAkCML5njN0sDQDXhXVstTwRA3pIi0yJTBUCHROdKGFcGQDD2q8INWwdA2qdwOgNfCECDWTWy+GIJQCwL+inuZgpA1by+oeNqC0B+boMZ2W4MQCcgSJHOcg1A0NEMCcR2DkB5g9GAuXoPQJEaS3xXPxBAZnMtOFLBEEA6zA/0TEMRQA8l8q9HxRFA433Ua0JHEkC41rYnPckSQIwvmeM3SxNAYYh7nzLNE0A14V1bLU8UQAo6QBco0RRA3pIi0yJTFUCz6wSPHdUVQIdE50oYVxZAXJ3JBhPZFkAw9qvCDVsXQAVPjn4I3RdA2qdwOgNfGECuAFP2/eAYQINZNbL4YhlAV7IXbvPkGUAsC/op7mYaQABk3OXo6BpA1by+oeNqG0CpFaFd3uwbQH5ugxnZbhxAUsdl1dPwHEAnIEiRznIdQPt4Kk3J9B1A0NEMCcR2HkCkKu/EvvgeQHmD0YC5eh9ATdyzPLT8H0CRGkt8Vz8gQPtGPNpUgCBAZnMtOFLBIEDQnx6WTwIhQDrMD/RMQyFApPgAUkqEIUAPJfKvR8UhQHlR4w1FBiJA433Ua0JHIkBNqsXJP4giQLjWtic9ySJAIgOohToKI0CML5njN0sjQPZbikE1jCNAYYh7nzLNI0DLtGz9Lw4kQDXhXVstTyRAoA1PuSqQJEAKOkAXKNEkQHRmMXUlEiVA3pIi0yJTJUBJvxMxIJQlQLPrBI8d1SVAHRj27BoWJkCHROdKGFcmQPJw2KgVmCZAXJ3JBhPZJkDGybpkEBonQDD2q8INWydAmyKdIAucJ0AFT45+CN0nQG97f9wFHihA2qdwOgNfKEBE1GGYAKAoQK4AU/b94ChAGC1EVPshKUA=","dtype":"float64","shape":[100]},"y":{"__ndarray__":"AAAAAAAAAADwgwJ4LjTQP5qI2QHPEuA/+5MNU1HJ5z8ZTT7q2B3vP0aFmgwa+fI/ABg/lCAV9j+IQCEcMdb4P3fOhmLzMPs/EyzujrQb/T/9Izwlj47+PxccgYyLg/8/g6xao7j2/z9mZrL8O+b/P7+X94FZUv8/xVNiW3I9/j9RB8Ai+6v8P5FWKYlppPo/oSg6uxkv+D/Th2bxK1b1PyZGRbpaJfI/8qg+VZVT7T/4C4p0qOPlP+UppLIiM9w/3FNHxZdVyD/J23zJpD6wv+3ENsZjOdS/wo12/ecH4r/dgWKM2Kjpv2MTsJELcPC/83ixWvXH87+358MBZM72v5eCD4nhdvm/rExY6Hq2+7+TIxAn7YP9vwSssILL1/6/70I4BJ6s/7/vOc8G+P7/vzTGy1KGzf+/3176khQZ/7/C8a4NiuT9vzGcHq/dNPy/l0FFlgER+r+FGZN4xoH3vx8WPFK3kfS/Cli7+O1M8b+HQNqEwoHrv9kfIiFb+OO/gKyggGI52L8EhrXMjDzAvyGGtcyMPMA/jqyggGI52D/gHyIhW/jjP39A2oTCges/DVi7+O1M8T8bFjxSt5H0P4cZk3jGgfc/lUFFlgER+j8ynB6v3TT8P8Hxrg2K5P0/4F76khQZ/z80xstShs3/P+85zwb4/v8/8EI4BJ6s/z8DrLCCy9f+P5UjECftg/0/p0xY6Hq2+z+Vgg+J4Xb5P7fnwwFkzvY/9nixWvXH8z9dE7CRC3DwP9eBYozYqOk/w412/ecH4j/+xDbGYznUP0/bfMmkPrA/+FNHxZdVyL/UKaSyIjPcv+gLinSo4+W/+Kg+VZVT7b8lRkW6WiXyv8+HZvErVvW/pig6uxkv+L+TVimJaaT6v1EHwCL7q/y/xFNiW3I9/r/Al/eBWVL/v2Zmsvw75v+/g6xao7j2/78YHIGMi4P/v/sjPCWPjv6/EyzujrQb/b94zoZi8zD7v4xAIRwx1vi//Bc/lCAV9r9GhZoMGvnyvx9NPurYHe+/65MNU1HJ57+SiNkBzxLgv/GDAnguNNC/B1wUMyam0bw=","dtype":"float64","shape":[100]}},"selected":null,"selection_policy":null},"id":"46d4c044-98aa-4b7e-af2f-e55f0c057b8f","type":"ColumnDataSource"},{"attributes":{"fill_color":{"value":"#1f77b4"},"line_color":{"value":"#1f77b4"},"x":{"field":"x"},"y":{"field":"y"}},"id":"8df1785b-9444-4924-9c8f-847cdc0529b7","type":"Circle"},{"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":"ac37af21-b693-4698-a868-561ed39322d1","type":"Square"},{"attributes":{},"id":"9b6fbf2a-ad03-4c87-9f19-6ef44e1a2ef7","type":"WheelZoomTool"},{"attributes":{"label":{"value":"2*sin(x)"},"renderers":[{"id":"028553b3-f5ed-4722-8653-875593181977","type":"GlyphRenderer"}]},"id":"6b1d9153-aafa-4e48-aeab-ba465d2c168d","type":"LegendItem"},{"attributes":{"source":{"id":"64bb95fd-9b2c-431b-a7e3-0ef6d3f4ed56","type":"ColumnDataSource"}},"id":"a919b4bb-23af-4591-8553-697eb7a723eb","type":"CDSView"},{"attributes":{"line_alpha":0.1,"line_color":"#1f77b4","x":{"field":"x"},"y":{"field":"y"}},"id":"41daf74c-8a00-45a4-aede-5722cecd7929","type":"Line"},{"attributes":{"formatter":{"id":"6372fd99-6800-45be-a13d-25c68df5db2d","type":"BasicTickFormatter"},"plot":{"id":"fb238668-77a4-4ca6-bc35-16770876dc56","subtype":"Figure","type":"Plot"},"ticker":{"id":"3d33531a-ce7d-426f-a4d4-7a6c82138889","type":"BasicTicker"}},"id":"4754db49-8808-4d2c-9e47-0aae4555f785","type":"LinearAxis"},{"attributes":{"source":{"id":"df418702-fd72-4cf8-a8fe-9a1e7552b740","type":"ColumnDataSource"}},"id":"3d82960d-1c9f-4d53-873c-88f8a594578b","type":"CDSView"},{"attributes":{"callback":null,"column_names":["x","y"],"data":{"x":{"__ndarray__":"AAAAAAAAAACRGkt8Vz/AP5EaS3xXP9A/2qdwOgNf2D+RGkt8Vz/gPzXhXVstT+Q/2qdwOgNf6D9+boMZ2W7sP5EaS3xXP/A/433Ua0JH8j814V1bLU/0P4dE50oYV/Y/2qdwOgNf+D8sC/op7mb6P35ugxnZbvw/0NEMCcR2/j+RGkt8Vz8AQDrMD/RMQwFA433Ua0JHAkCML5njN0sDQDXhXVstTwRA3pIi0yJTBUCHROdKGFcGQDD2q8INWwdA2qdwOgNfCECDWTWy+GIJQCwL+inuZgpA1by+oeNqC0B+boMZ2W4MQCcgSJHOcg1A0NEMCcR2DkB5g9GAuXoPQJEaS3xXPxBAZnMtOFLBEEA6zA/0TEMRQA8l8q9HxRFA433Ua0JHEkC41rYnPckSQIwvmeM3SxNAYYh7nzLNE0A14V1bLU8UQAo6QBco0RRA3pIi0yJTFUCz6wSPHdUVQIdE50oYVxZAXJ3JBhPZFkAw9qvCDVsXQAVPjn4I3RdA2qdwOgNfGECuAFP2/eAYQINZNbL4YhlAV7IXbvPkGUAsC/op7mYaQABk3OXo6BpA1by+oeNqG0CpFaFd3uwbQH5ugxnZbhxAUsdl1dPwHEAnIEiRznIdQPt4Kk3J9B1A0NEMCcR2HkCkKu/EvvgeQHmD0YC5eh9ATdyzPLT8H0CRGkt8Vz8gQPtGPNpUgCBAZnMtOFLBIEDQnx6WTwIhQDrMD/RMQyFApPgAUkqEIUAPJfKvR8UhQHlR4w1FBiJA433Ua0JHIkBNqsXJP4giQLjWtic9ySJAIgOohToKI0CML5njN0sjQPZbikE1jCNAYYh7nzLNI0DLtGz9Lw4kQDXhXVstTyRAoA1PuSqQJEAKOkAXKNEkQHRmMXUlEiVA3pIi0yJTJUBJvxMxIJQlQLPrBI8d1SVAHRj27BoWJkCHROdKGFcmQPJw2KgVmCZAXJ3JBhPZJkDGybpkEBonQDD2q8INWydAmyKdIAucJ0AFT45+CN0nQG97f9wFHihA2qdwOgNfKEBE1GGYAKAoQK4AU/b94ChAGC1EVPshKUA=","dtype":"float64","shape":[100]},"y":{"__ndarray__":"AAAAAAAAAADoxQO0RU7YP+dMxoI2HOg//C5K/vzW8T/Tua6vYlb3P+nH5xKndfw/AFIvb9iPAEBm8BjVpKACQNka5Ym2ZARADqEya8fUBUD+Gu1b6+oGQBHVYKmoogdAYgGEegr5B0DMzIX9rOwHQM+xeSHDfQdA1L6JxBWuBkB9BRBa/IAFQO0A3yZP+wNAeZ5rTFMjAkDe5Qz1oAAAQDnpZxcIOPs/tv7u/6/+9T/6iGdXvmrwP2wf+wVaJuU/5X710zFA0j+uSTsu9124v2QnUqkVVt6/o9Qx/NsL679m4Ulpoj7zvxQdiFoRqPi/bDUKCPCr/b/J7VIByxoBwPGhyyYpGQPAgTlCLtzIBMCuGkzd8SIGwAOBBKLYIQfAMzIqg3bBB8BzaxsFOv8HwKfUGL4k2gfAJ8c7bs9SB8BSNUOKZ2sGwCX1VkOmJwXAMfGzMMGMA8AkU27aVKEBwC4hWvuS2v6/DwQZ9WTz+b9lsKPjUaH0v8Yvs7GI9O2/YIF44Akr4r8GSRAz01rIvzJJEDPTWsg/aoF44Akr4j/QL7OxiPTtP1+wo+NRofQ/FAQZ9WTz+T8oIVr7ktr+PyVTbtpUoQFAMPGzMMGMA0Am9VZDpicFQFE1Q4pnawZAKMc7bs9SB0Cn1Bi+JNoHQHNrGwU6/wdANDIqg3bBB0ACgQSi2CEHQLAaTN3xIgZAfTlCLtzIBEDwocsmKRkDQMntUgHLGgFAcTUKCPCr/T8MHYhaEaj4P2HhSWmiPvM/pNQx/NsL6z99J1KpFVbeP/ZIOy73Xbg/+n710zFA0r9fH/sFWiblv+6IZ1e+avC/uv7u/6/+9b846WcXCDj7v9vlDPWgAADAfJ5rTFMjAsDuAN8mT/sDwH0FEFr8gAXA076JxBWuBsDQsXkhw30HwMzMhf2s7AfAYgGEegr5B8AS1WCpqKIHwPwa7Vvr6gbADqEya8fUBcDaGuWJtmQEwGnwGNWkoALA/VEvb9iPAMDpx+cSp3X8v9e5rq9iVve/8C5K/vzW8b/bTMaCNhzov+rFA7RFTti/CoqeTDl52rw=","dtype":"float64","shape":[100]}},"selected":null,"selection_policy":null},"id":"ef21e569-b018-4f1d-a8cb-b79373841c68","type":"ColumnDataSource"},{"attributes":{"source":{"id":"46d4c044-98aa-4b7e-af2f-e55f0c057b8f","type":"ColumnDataSource"}},"id":"564ed43b-190b-4332-bda4-698c808801fd","type":"CDSView"}],"root_ids":["fb238668-77a4-4ca6-bc35-16770876dc56"]},"title":"Bokeh Application","version":"0.12.15"}}';
                    var render_items = [{"docid":"04b9ea6c-f422-424b-bb3c-c526de0a81f3","elementid":"edbbefac-b6dc-4dd5-a186-2280171ff905","modelid":"fb238668-77a4-4ca6-bc35-16770876dc56"}];
                    root.Bokeh.embed.embed_items(docs_json, render_items);
                  
                    }
                    if (root.Bokeh !== undefined) {
                      embed_document(root);
                    } else {
                      var attempts = 0;
                      var timer = setInterval(function(root) {
                        if (root.Bokeh !== undefined) {
                          embed_document(root);
                          clearInterval(timer);
                        }
                        attempts++;
                        if (attempts > 100) {
                          console.log("Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing")
                          clearInterval(timer);
                        }
                      }, 10, root)
                    }
                  })(window);
                });
              };
              if (document.readyState != "loading") fn();
              else document.addEventListener("DOMContentLoaded", fn);
            })();
          },
          function(Bokeh) {
            console.log("Bokeh: injecting CSS: https://cdnjs.cloudflare.com/ajax/libs/normalize/4.2.0/normalize.css");
            Bokeh.embed.inject_css("https://cdnjs.cloudflare.com/ajax/libs/normalize/4.2.0/normalize.css");
            console.log("Bokeh: injecting CSS: https://cdnjs.cloudflare.com/ajax/libs/ion-rangeslider/2.1.4/css/ion.rangeSlider.css");
            Bokeh.embed.inject_css("https://cdnjs.cloudflare.com/ajax/libs/ion-rangeslider/2.1.4/css/ion.rangeSlider.css");
            console.log("Bokeh: injecting CSS: https://cdnjs.cloudflare.com/ajax/libs/ion-rangeslider/2.1.4/css/ion.rangeSlider.skinFlat.min.css");
            Bokeh.embed.inject_css("https://cdnjs.cloudflare.com/ajax/libs/ion-rangeslider/2.1.4/css/ion.rangeSlider.skinFlat.min.css");
            console.log("Bokeh: injecting CSS: https://cdnjs.cloudflare.com/ajax/libs/ion-rangeslider/2.1.4/img/sprite-skin-flat.png");
            Bokeh.embed.inject_css("https://cdnjs.cloudflare.com/ajax/libs/ion-rangeslider/2.1.4/img/sprite-skin-flat.png");
            console.log("Bokeh: injecting CSS: https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.6.0/katex.min.css");
            Bokeh.embed.inject_css("https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.6.0/katex.min.css");
            console.log("Bokeh: injecting CSS: https://cdn.bokeh.org/bokeh/release/bokeh-0.12.15.min.css");
            Bokeh.embed.inject_css("https://cdn.bokeh.org/bokeh/release/bokeh-0.12.15.min.css");
            console.log("Bokeh: injecting CSS: https://cdn.bokeh.org/bokeh/release/bokeh-widgets-0.12.15.min.css");
            Bokeh.embed.inject_css("https://cdn.bokeh.org/bokeh/release/bokeh-widgets-0.12.15.min.css");
            console.log("Bokeh: injecting CSS: https://cdn.bokeh.org/bokeh/release/bokeh-tables-0.12.15.min.css");
            Bokeh.embed.inject_css("https://cdn.bokeh.org/bokeh/release/bokeh-tables-0.12.15.min.css");
          }
        ];
      
        function run_inline_js() {
          
          for (var i = 0; i < inline_js.length; i++) {
            inline_js[i].call(root, root.Bokeh);
          }
          
        }
      
        if (root._bokeh_is_loading === 0) {
          console.log("Bokeh: BokehJS loaded, going straight to plotting");
          run_inline_js();
        } else {
          load_libs(js_urls, function() {
            console.log("Bokeh: BokehJS plotting callback run at", now());
            run_inline_js();
          });
        }
      }(window));
    };
    if (document.readyState != "loading") fn();
    else document.addEventListener("DOMContentLoaded", fn);
  })();