define(["@jupyter-widgets/base"], function(__WEBPACK_EXTERNAL_MODULE_2__) { return /******/ (function(modules) { // webpackBootstrap
/******/ 	// The module cache
/******/ 	var installedModules = {};
/******/
/******/ 	// The require function
/******/ 	function __webpack_require__(moduleId) {
/******/
/******/ 		// Check if module is in cache
/******/ 		if(installedModules[moduleId])
/******/ 			return installedModules[moduleId].exports;
/******/
/******/ 		// Create a new module (and put it into the cache)
/******/ 		var module = installedModules[moduleId] = {
/******/ 			exports: {},
/******/ 			id: moduleId,
/******/ 			loaded: false
/******/ 		};
/******/
/******/ 		// Execute the module function
/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ 		// Flag the module as loaded
/******/ 		module.loaded = true;
/******/
/******/ 		// Return the exports of the module
/******/ 		return module.exports;
/******/ 	}
/******/
/******/
/******/ 	// expose the modules object (__webpack_modules__)
/******/ 	__webpack_require__.m = modules;
/******/
/******/ 	// expose the module cache
/******/ 	__webpack_require__.c = installedModules;
/******/
/******/ 	// __webpack_public_path__
/******/ 	__webpack_require__.p = "";
/******/
/******/ 	// Load entry module and return exports
/******/ 	return __webpack_require__(0);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ (function(module, exports, __webpack_require__) {

	module.exports = {};
	
	var loadedModules = [
	    __webpack_require__(1),
	    //require("./ngl.js"),
	]
	
	for (var i in loadedModules) {
	    if (loadedModules.hasOwnProperty(i)) {
	        var loadedModule = loadedModules[i];
	        for (var target_name in loadedModule) {
	            if (loadedModule.hasOwnProperty(target_name)) {
	                module.exports[target_name] = loadedModule[target_name];
	            }
	        }
	    }
	}
	
	module.exports['version'] = __webpack_require__(67).version;


/***/ }),
/* 1 */
/***/ (function(module, exports, __webpack_require__) {

	var widgets = __webpack_require__(2);
	var NGL = __webpack_require__(3);
	var $ = __webpack_require__(7);
	var _ = __webpack_require__(8);
	__webpack_require__(10);
	__webpack_require__(20);
	__webpack_require__(22);
	__webpack_require__(36);
	
	var Jupyter;
	if (typeof window !== 'undefined') {
	  Jupyter = window['Jupyter'] = window['Jupyter'] || {};
	} else {
	  Jupyter = Jupyter || {};
	}
	
	var NGLModel = widgets.DOMWidgetModel.extend({
	    defaults: function(){
	        return _.extend(widgets.DOMWidgetModel.prototype.defaults(), {
	            _model_name: 'NGLModel',
	            _model_module: 'nglview-js-widgets',
	            _model_module_version: __webpack_require__(67).version,
	            _view_name: "NGLView",
	            _view_module: "nglview-js-widgets",
	            _view_module_version: __webpack_require__(67).version,
	        });
	    }
	})
	
	var NGLView = widgets.DOMWidgetView.extend({
	    render: function() {
	        // init setting of frame
	        this.model.on("change:frame", this.frameChanged, this);
	
	        // init setting of frame
	        this.model.on("change:count", this.countChanged, this);
	
	        // init _parameters handling
	        this.model.on("change:_parameters", this.parametersChanged, this);
	
	        this.model.set('_ngl_version', NGL.Version);
	
	        // for player
	        this.delay = 100;
	        this.sync_frame = false;
	        this.sync_camera = false;
	
	        // get message from Python
	        this.model.on("msg:custom", function(msg) {
	            this.on_msg(msg);
	        }, this);
	
	        if (this.model.comm) {
	            // for embeding in website
	            this.model.comm.on_msg(function(msg) {
	                var buffers = msg.buffers;
	                var content = msg.content.data.content;
	                if (buffers.length && content) {
	                    content.buffers = buffers;
	                }
	                this.model._handle_comm_msg.call(this.model, msg);
	            }.bind(this));
	        }
	
	        // init NGL stage
	        NGL.useWorker = false;
	        this.stage = new NGL.Stage(undefined, {
	            backgroundColor: "white"
	        });
	        this.structureComponent = undefined;
	        this.$container = $(this.stage.viewer.container);
	        this.$el.append(this.$container);
	        this.$container.resizable({
	            resize: function(event, ui) {
	                this.setSize(ui.size.width + "px", ui.size.height + "px");
	            }.bind(this)
	        });
	        this.displayed.then(function() {
	            this.ngl_view_id = this.get_last_child_id();
	            var that = this;
	            var width = this.$el.parent().width() + "px";
	            var height = "300px";
	
	            this.setSize(width, height);
	            this.$container.resizable(
	                "option", "maxWidth", this.$el.parent().width()
	            );
	            if (this.model.get("_ngl_serialize")){
	                that.handle_embed();
	            }else{
	                this.requestUpdateStageParameters();
	                if (this.model.views.length == 1){
	                    this.serialize_camera_orientation();
	                }else{
	                    this.set_camera_orientation(that.model.get("_camera_orientation"));
	                }
	            }
	        }.bind(this));
	
	        this.stage.viewerControls.signals.changed.add(function() {
	            this.serialize_camera_orientation();
	        }.bind(this));
	
	        // init toggle fullscreen
	        $(this.stage.viewer.container).dblclick(function(e) {
	            if (!e.altKey || !e.ctrlKey){
	                this.stage.toggleFullscreen();
	            }
	        }.bind(this));
	
	        // init picking handling
	        this.$pickingInfo = $("<div></div>")
	            .css("position", "absolute")
	            .css("top", "5%")
	            .css("left", "3%")
	            .css("background-color", "white")
	            .css("padding", "2px 5px 2px 5px")
	            .css("opacity", "0.7")
	            .appendTo(this.$container);
	
	        var $inputNotebookCommand = $('<input id="input_notebook_command" type="text" style="border:1px solid skyblue" size="50"></input>');
	        var that = this;
	
	        $inputNotebookCommand.keypress(function(e) {
	            var command = $("#input_notebook_command").val();
	            if (e.which == 13) {
	                $("#input_notebook_command").val("")
	                Jupyter.notebook.kernel.execute(command);
	            }
	        });
	
	        this.$notebook_text = $("<div></div>")
	            .css("position", "absolute")
	            .css("bottom", "5%")
	            .css("left", "3%")
	            .css("padding", "2px 5px 2px 5px")
	            .css("opacity", "0.7")
	            .append($inputNotebookCommand)
	            .appendTo(this.$container);
	        this.$notebook_text.hide();
	
	        this.stage.signals.clicked.add(function(pd) {
	            if (pd) {
	                var pd2 = {};
	                if (pd.atom) pd2.atom = pd.atom.toObject();
	                if (pd.bond) pd2.bond = pd.bond.toObject();
	                if (pd.instance) pd2.instance = pd.instance;
	                this.model.set("picked", pd2);
	                this.touch();
	                var pickingText = "";
	                if (pd.atom) {
	                    pickingText = "Atom: " + pd.atom.qualifiedName();
	                } else if (pd.bond) {
	                    pickingText = "Bond: " + pd.bond.atom1.qualifiedName() + " - " + pd.bond.atom2.qualifiedName();
	                }
	                this.$pickingInfo.text(pickingText);
	            }
	        }, this);
	
	        this.initPlayer();
	
	        var container = this.stage.viewer.container;
	        that = this;
	        container.addEventListener('dragover', function(e) {
	            e.stopPropagation();
	            e.preventDefault();
	            e.dataTransfer.dropEffect = 'copy';
	        }, false);
	
	        container.addEventListener('drop', function(e) {
	            e.stopPropagation();
	            e.preventDefault();
	            var file = e.dataTransfer.files[0];
	
	            that.stage.loadFile(file).then(function(o){
	                that._handle_loading_file_finished();
	                o;
	            });
	            var numDroppedFiles = that.model.get("_n_dragged_files");
	            that.model.set("_n_dragged_files", numDroppedFiles + 1);
	            that.touch();
	        }, false);
	
	        that = this;
	        this.stage.signals.componentAdded.add(function() {
	            var len = this.stage.compList.length;
	            this.model.set("n_components", len);
	            this.touch();
	            var comp = this.stage.compList[len - 1];
	            comp.signals.representationRemoved.add(function() {
	                that.request_repr_dict();
	            });
	            comp.signals.representationAdded.add(function() {
	                that.request_repr_dict();
	            });
	        }, this);
	
	        this.stage.signals.componentRemoved.add(function() {
	            this.model.set("n_components", this.stage.compList.length);
	            this.touch();
	        }, this);
	
	        // for callbacks from Python
	        // must be after initializing NGL.Stage
	        this.send({
	            'type': 'request_loaded',
	            'data': true
	        })
	        var state_params = this.stage.getParameters();
	        this.model.set('_ngl_original_stage_parameters', state_params);
	        this.touch();
	    },
	
	    serialize_camera_orientation: function(){
	         var m = this.stage.viewerControls.getOrientation();
	         this.model.set('_camera_orientation', m.elements);
	         this.touch();
	    },
	
	    set_camera_orientation: function(orientation){
	        if (orientation.length > 0){
	            this.stage.viewerControls.orient(orientation);
	            this.serialize_camera_orientation();
	        }
	    },
	
	    handle_embed: function(){
	        var that = this;
	        var ngl_coordinate_resource = that.model.get("_ngl_coordinate_resource");
	        var ngl_msg_archive = that.model.get("_ngl_msg_archive");
	        var ngl_stage_params = that.model.get('_ngl_full_stage_parameters_embed');
	        var loadfile_list = [];
	
	        _.each(ngl_msg_archive, function(msg){
	            if (msg.methodName == 'loadFile'){
	                if (msg.kwargs && msg.kwargs.defaultRepresentation) {
	                    // no need to add default representation as all representations
	                    // are serialized separately, also it unwantedly sets the orientation
	                    msg.kwargs.defaultRepresentation = false
	                 }
	                loadfile_list.push(that._get_loadFile_promise(msg));
	            }
	        });
	
	
	        Promise.all(loadfile_list).then(function(compList){
	            that._set_representation_from_backend(compList);
	            that.stage.setParameters(ngl_stage_params);
	            that.set_camera_orientation(that.model.get("_camera_orientation"));
	
	            var frame = 0;
	            var count = ngl_coordinate_resource['n_frames'];
	            delete ngl_coordinate_resource['n_frames'];
	
	            var play = function(){
	                that.$playerButton.text("pause");
	                that.playerInterval = setInterval(function(){
	                    frame = frame + 1;
	                    if (frame > count - 1){
	                        frame = 0;
	                    }
	                    that.$playerSlider.slider("option", "value", frame);
	                    that.updateCoordinatesFromDict(ngl_coordinate_resource, frame);
	                }, that.delay)
	            }
	
	            var pause = function() {
	                that.$playerButton.text("play");
	                if (that.playerInterval !== undefined) {
	                    clearInterval(that.playerInterval);
	                }
	            }.bind(that);
	
	            if (that.$playerButton){
	                that.$playerButton
	                    .off('click')
	                    .click(function(event) {
	                        if (that.$playerButton.text() === "play") {
	                            play();
	                        } else if (that.$playerButton.text() === "pause") {
	                            pause();
	                        }
	                        event; // to pass eslint
	                    }.bind(that));
	                that.$playerSlider.slider({
	                    max : count-1,
	                    slide: function(event, ui) {
	                        pause();
	                        that.updateCoordinatesFromDict(ngl_coordinate_resource, ui.value);
	                        frame = ui.value;
	                    }.bind(that)
	                })
	           }
	        });
	    },
	
	    updateCoordinatesFromDict: function(cdict, frame_index){
	        // update coordinates for given "index"
	        // cdict = Dict[int, List[base64]]
	        var keys = Object.keys(cdict);
	
	        for (var i = 0; i < keys.length; i++) {
	            var traj_index = keys[i];
	            var coordinates = this.decode_base64(cdict[traj_index][frame_index]);
	            if (coordinates && coordinates.byteLength > 0) {
	                this.updateCoordinates(coordinates, traj_index);
	            }
	        }
	    },
	
	    setSelector: function(selector_id) {
	        // id is uuid that will be set from Python
	        var selector = "<div class='" + selector_id + "'></div>";
	        this.$ngl_selector = $(selector)
	            .css("position", "absolute")
	            .css("bottom", "5%")
	            .css("left", "3%")
	            .css("padding", "2px 5px 2px 5px")
	            .css("opacity", "0.7")
	            .appendTo(this.$container);
	    },
	
	    setIPythonLikeCell: function() {
	        var cell = Jupyter.notebook.insert_cell_at_bottom();
	
	        var handler = function(event) {
	            var selected_cell = Jupyter.notebook.get_selected_cell();
	            if (selected_cell.cell_id === cell.cell_id) {
	                selected_cell.execute();
	                selected_cell.set_text('');
	            }
	            event; // to pass eslint
	            return false;
	        };
	
	        var action = {
	            help: 'run cell',
	            help_index: 'zz',
	            handler: handler
	        };
	
	        Jupyter.keyboard_manager.edit_shortcuts.add_shortcut('enter', action);
	    },
	
	    hideNotebookCommandBox: function() {
	        this.$notebook_text.hide();
	    },
	
	    showNotebookCommandBox: function() {
	        this.$notebook_text.show();
	    },
	
	    requestFrame: function() {
	        this.send({
	            'type': 'request_frame',
	            'data': 'frame'
	        });
	    },
	
	    requestUpdateStageParameters: function() {
	        var updated_params = this.stage.getParameters();
	        this.model.set('_ngl_full_stage_parameters', updated_params);
	        this.touch();
	    },
	
	    requestReprParameters: function(component_index, repr_index) {
	        var comp = this.stage.compList[component_index];
	        var repr = comp.reprList[repr_index];
	        var msg = repr.repr.getParameters();
	
	        if (msg) {
	            msg['name'] = repr.name;
	            this.send({
	                'type': 'repr_parameters',
	                'data': msg
	            });
	        }
	    },
	
	    request_repr_dict: function() {
	        var n_components = this.stage.compList.length;
	        var msg = {};
	
	        for (var i = 0; i < n_components; i++) {
	            var comp = this.stage.compList[i];
	            msg[i] = {};
	            var msgi = msg[i];
	            for (var j = 0; j < comp.reprList.length; j++) {
	                var repr = comp.reprList[j];
	                msgi[j] = {};
	                msgi[j]['type'] = repr.name;
	                msgi[j]['params'] = repr.repr.getParameters();
	            }
	        }
	        this.send({
	            // make sure we are using "request_repr_dict" name
	            // in backend too.
	            'type': 'request_repr_dict',
	            'data': msg
	        });
	    },
	
	    // setDraggable: function(params) {
	    //     if (params) {
	    //         this.$container.draggable(params);
	    //     } else {
	    //         this.$container.draggable();
	    //     }
	    // },
	    setDelay: function(delay) {
	        this.delay = delay;
	    },
	
	    setSyncFrame: function() {
	        this.sync_frame = true;
	    },
	
	    setUnSyncFrame: function() {
	        this.sync_frame = false;
	    },
	
	    setSyncCamera: function() {
	        this.sync_camera = true;
	        this.serialize_camera_orientation();
	    },
	
	    setUnSyncCamera: function() {
	        this.sync_camera = false;
	    },
	
	    viewXZPlane: function() {
	        var m = new NGL.Matrix4().makeRotationX( Math.PI / 2 );
	        var q = new NGL.Quaternion().setFromRotationMatrix( m );
	        this.stage.viewerControls.rotate( q );
	    },
	
	    set_representation_from_backend: function(){
	        this._set_representation_from_backend(this.stage.compList);
	    },
	
	    _set_representation_from_backend: function(compList){
	        if (compList.length > 0){
	            var ngl_repr_dict = this.model.get('_ngl_repr_dict');
	            for (var index in ngl_repr_dict){
	                var comp = compList[index];
	                comp.removeAllRepresentations();
	                var reprlist = ngl_repr_dict[index];
	                for (var j in reprlist){
	                    var repr = reprlist[j];
	                    if (repr){
	                        comp.addRepresentation(repr.type, repr.params);
	                    }
	                }
	            }
	        }
	    },
	
	    initPlayer: function() {
	        // init player
	        if (this.model.get("count")) {
	            var frame = this.model.get("frame");
	            var play = function() {
	                this.$playerButton.text("pause");
	                this.playerInterval = setInterval(function() {
	                    var frame = this.model.get("frame") + 1;
	                    var count = this.model.get("count");
	                    if (frame >= count) frame = 0;
	
	                    if (this.sync_frame) {
	                        this.model.set("frame", frame);
	                        this.touch();
	                    } else {
	                        this.requestFrame();
	                    }
	                }.bind(this), this.delay);
	            }.bind(this);
	            var pause = function() {
	                this.$playerButton.text("play");
	                if (this.playerInterval !== undefined) {
	                    clearInterval(this.playerInterval);
	                }
	            }.bind(this);
	            this.$playerButton = $("<button>play</button>")
	                .css("float", "left")
	                .css("width", "55px")
	                .css("opacity", "0.7")
	                .click(function(event) {
	                    if (this.$playerButton.text() === "play") {
	                        play();
	                    } else if (this.$playerButton.text() === "pause") {
	                        pause();
	                    }
	                    event; // to pass eslint
	                }.bind(this));
	            this.$playerSlider = $("<div></div>")
	                .css("margin-left", "70px")
	                .css("position", "relative")
	                .css("bottom", "-7px")
	                .slider({
	                    min: 0,
	                    max: this.model.get("count") - 1,
	                    value: frame,
	                    slide: function(event, ui) {
	                        pause();
	                        this.model.set("frame", ui.value);
	                        this.touch();
	                    }.bind(this)
	                });
	            this.$player = $("<div></div>")
	                .css("position", "absolute")
	                .css("bottom", "5%")
	                .css("width", "94%")
	                .css("margin-left", "3%")
	                .css("opacity", "0.7")
	                .append(this.$playerButton)
	                .append(this.$playerSlider)
	                .appendTo(this.$container);
	            this.model.on("change:frame", function() {
	                this.$playerSlider.slider("value", this.model.get("frame"));
	            }, this);
	
	            if (this.model.get("count") < 2) {
	                this.$player.hide()
	            }
	        }
	    },
	
	    countChanged: function() {
	        var count = this.model.get("count");
	        this.$playerSlider.slider({
	            max: count - 1
	        });
	        if (this.model.get("count") > 1) {
	            this.$player.show()
	        }
	    },
	
	    setVisibilityForRepr: function(component_index, repr_index, value) {
	        // value = True/False
	        var component = this.stage.compList[component_index];
	        var repr = component.reprList[repr_index];
	
	        if (repr) {
	            repr.setVisibility(value);
	        }
	    },
	
	    removeRepresentation: function(component_index, repr_index) {
	        var component = this.stage.compList[component_index];
	        var repr = component.reprList[repr_index]
	
	        if (repr) {
	            component.removeRepresentation(repr);
	        }
	    },
	
	    removeRepresentationsByName: function(repr_name, component_index) {
	        var component = this.stage.compList[component_index];
	
	        if (component) {
	            component.reprList.forEach(function(repr) {
	                if (repr.name == repr_name) {
	                    component.removeRepresentation(repr);
	                }
	            })
	        }
	    },
	
	    updateRepresentationForComponent: function(repr_index, component_index, params) {
	        var component = this.stage.compList[component_index];
	        var that = this;
	        var repr = component.reprList[repr_index];
	        if (repr) {
	            repr.setParameters(params);
	            that.request_repr_dict();
	        }
	    },
	
	    updateRepresentationsByName: function(repr_name, component_index, params) {
	        var component = this.stage.compList[component_index];
	        var that = this;
	
	        if (component) {
	            component.reprList.forEach(function(repr) {
	                if (repr.name == repr_name) {
	                    repr.setParameters(params);
	                    that.request_repr_dict();
	                }
	            })
	        }
	    },
	
	    setRepresentation: function(name, params, component_index, repr_index) {
	        var component = this.stage.compList[component_index];
	        var repr = component.reprList[repr_index];
	        var that = this;
	
	        if (repr) {
	            params['useWorker'] = false;
	            var new_repr = NGL.makeRepresentation(name, component.structure,
	                this.stage.viewer, params);
	            if (new_repr) {
	                repr.setRepresentation(new_repr);
	                repr.name = name;
	                component.reprList[repr_index] = repr;
	                that.request_repr_dict();
	            }
	        }
	    },
	
	    setColorByResidue: function(colors, component_index, repr_index){
	        console.log('NGL.ColormakerRegistry', NGL.ColormakerRegistry);
	        var repr = this.stage.compList[component_index].reprList[repr_index];
	        var schemeId = NGL.ColormakerRegistry.addScheme(function(params){
	            this.atomColor = function(atom){
	                 var color = colors[atom.residueIndex];
	                 return color
	            };
	            params; // to pass eslint; ack;
	        });
	        repr.setColor(schemeId);
	    },
	
	    addShape: function(name, shapes) {
	        // shapes: List[Tuple[str, ...]]
	        // e.g: [('sphere', ...), ('cone', ...)]
	        var shape = new NGL.Shape(name);
	        var shape_dict = {
	            'sphere': shape.addSphere,
	            'ellipsoid': shape.addEllipsoid,
	            'cylinder': shape.addCylinder,
	            'cone': shape.addCone,
	            'mesh': shape.addMesh,
	            'arrow': shape.addArrow,
	            'text': shape.addText,
	            'label': shape.addText,
	            'tetrahedron': shape.addTetrahedron,
	            'octahedron': shape.addOctahedron,
	            'torus': shape.addTorus
	        };
	        for (var i = 0; i < shapes.length; i++) {
	            var shapes_i = shapes[i]
	            var shape_type = shapes_i[0];
	            var params = shapes_i.slice(1, shapes_i.length);
	            // e.g params = ('sphere', [ 0, 0, 9 ], [ 1, 0, 0 ], 1.5)
	
	            var func = shape_dict[shape_type];
	            func.apply(shape, params);
	            // shape.func(params);
	        }
	        var shapeComp = this.stage.addComponentFromObject(shape);
	        shapeComp.addRepresentation("buffer");
	    },
	
	    addBuffer: function(name, kwargs){
	        var class_dict = {
	            "arrow": NGL.ArrowBuffer,
	            "box": NGL.BoXbuffer,
	            "cone": NGL.ConeBuffer,
	            "cylinder": NGL.CylinderBuffer,
	            "ellipsoid": NGL.EllipsoidBuffer,
	            "octahedron": NGL.OctahedronBuffer,
	            "sphere": NGL.SphereBuffer,
	            "text": NGL.TextBuffer,
	            "tetrahedron": NGL.TetrahedronBuffer,
	            "torus": NGL.TorusBuffer
	        };
	
	        var params = {};
	        for (var key in kwargs){
	            params[key] = new Float32Array(kwargs[key]);
	        }
	        var shape = new NGL.Shape("shape");
	        var buffer_class = class_dict[name];
	        var buffer = new buffer_class(params);
	        shape.addBuffer(buffer);
	        var shapeComp = this.stage.addComponentFromObject(shape);
	        shapeComp.addRepresentation("buffer");
	    },
	
	    replaceStructure: function(structure){
	         var blob = new Blob([structure.data], {type: "text/plain"});
	         var params = structure.params || {};
	         params.ext = structure.ext;
	         params.defaultRepresentation = false;
	         var comp = this.stage.compList[0];
	         var representations = comp.reprList.slice();
	         var old_orientation = this.stage.viewerControls.getOrientation();
	         var that = this;
	         this.stage.loadFile(blob, params).then(function(component) {
	             that.stage.viewerControls.orient(old_orientation);
	             representations.forEach(function(repr) {
	                 var repr_name = repr.name;
	                 var repr_params = repr.repr.getParameters();
	                 // Note: not using repr.repr.type, repr.repr.params
	                 // since seems to me that repr.repr.params won't return correct "sele"
	                 component.addRepresentation(repr_name, repr_params);
	             });
	             that.stage.removeComponent(comp);
	             that._handle_loading_file_finished();
	         });
	    },
	
	    superpose: function(cindex0, cindex1, align, sele0, sele1) {
	        // superpose two components with given params
	        var component0 = this.stage.compList[cindex0];
	        var component1 = this.stage.compList[cindex1];
	        component1.superpose(component0, align, sele0, sele1);
	    },
	
	    decode_base64: function(base64) {
	        // lightly adapted from Niklas
	
	        /*
	         * base64-arraybuffer
	         * https://github.com/niklasvh/base64-arraybuffer
	         *
	         * Copyright (c) 2012 Niklas von Hertzen
	         * Licensed under the MIT license.
	         */
	        var chars =
	            "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
	        var bufferLength = base64.length * 0.75,
	            len = base64.length,
	            i, p = 0,
	            encoded1, encoded2, encoded3, encoded4;
	
	        if (base64[base64.length - 1] === "=") {
	            bufferLength--;
	            if (base64[base64.length - 2] === "=") {
	                bufferLength--;
	            }
	        }
	
	        var arraybuffer = new ArrayBuffer(bufferLength),
	            bytes = new Uint8Array(arraybuffer);
	
	        for (i = 0; i < len; i += 4) {
	            encoded1 = chars.indexOf(base64[i]);
	            encoded2 = chars.indexOf(base64[i + 1]);
	            encoded3 = chars.indexOf(base64[i + 2]);
	            encoded4 = chars.indexOf(base64[i + 3]);
	
	            bytes[p++] = (encoded1 << 2) | (encoded2 >> 4);
	            bytes[p++] = ((encoded2 & 15) << 4) | (encoded3 >> 2);
	            bytes[p++] = ((encoded3 & 3) << 6) | (encoded4 & 63);
	        }
	
	        return arraybuffer;
	    },
	
	    updateCoordinates: function(coordinates, model) {
	        // coordinates must be ArrayBuffer (use this.decode_base64)
	        var component = this.stage.compList[model];
	        if (coordinates && component) {
	            var coords = new Float32Array(coordinates);
	            component.structure.updatePosition(coords);
	            component.updateRepresentations({
	                "position": true
	            });
	        }
	    },
	
	    handleResize: function() {
	        this.$container.resizable({
	            resize: function(event, ui) {
	                this.setSize(ui.size.width + "px", ui.size.height + "px");
	            }.bind(this)
	        })
	    },
	
	    setSize: function(width, height) {
	        this.stage.viewer.container.style.width = width;
	        this.stage.viewer.container.style.height = height;
	        this.stage.handleResize();
	    },
	
	    openNotebookCommandDialog: function() {
	        var that = this;
	        var dialog = this.$notebook_text.dialog({
	            draggable: true,
	            resizable: true,
	            modal: false,
	            show: {
	                effect: "blind",
	                duration: 150
	            },
	            close: function(event, ui) {
	                that.$container.append(that.$notebook_text);
	                that.$notebook_text.dialog('destroy');
	                event; ui; // to pass eslint; ack;
	            },
	        });
	        dialog.css({
	            overflow: 'hidden'
	        });
	        dialog.prev('.ui-dialog-titlebar')
	            .css({
	                'background': 'transparent',
	                'border': 'none'
	            });
	        Jupyter.keyboard_manager.register_events(dialog);
	    },
	
	    setDialog: function() {
	        var $nb_container = Jupyter.notebook.container;
	        var that = this;
	        var dialog = this.$container.dialog({
	            title: "NGLView",
	            draggable: true,
	            resizable: true,
	            modal: false,
	            width: window.innerWidth - $nb_container.width() - $nb_container.offset().left - 50,
	            height: 'auto',
	            position: {
	                my: 'right',
	                at: 'right',
	                of: window
	            },
	            show: {
	                effect: "blind",
	                duration: 150
	            },
	            close: function(event, ui) {
	                that.$el.append(that.$container);
	                that.$container.dialog('destroy');
	                that.handleResize();
	                event; ui; // to pass eslint; ack;
	            },
	            resize: function(event, ui) {
	                that.stage.handleResize();
	                that.setSize(ui.size.width + "px", ui.size.height + "px");
	            }.bind(that),
	        });
	        dialog.css({
	            overflow: 'hidden'
	        });
	        dialog.prev('.ui-dialog-titlebar')
	            .css({
	                'background': 'transparent',
	                'border': 'none'
	            });
	    },
	
	    resizeNotebook: function(width) {
	        var $nb_container = Jupyter.notebook.container;
	        $nb_container.width(width);
	
	        if (this.$container.dialog) {
	            this.$container.dialog({
	                width: $nb_container.offset().left
	            });
	        }
	    },
	
	    parametersChanged: function() {
	        var _parameters = this.model.get("_parameters");
	        this.setParameters(_parameters);
	    },
	
	    setParameters: function(parameters) {
	        this.stage.setParameters(parameters);
	
	        // do not set _ngl_full_stage_parameters here
	        // or parameters will be never updated (not sure why)
	        // use observe in python side
	        var updated_params = this.stage.getParameters();
	        this.send({
	            'type': 'stage_parameters',
	            'data': updated_params
	        })
	    },
	
	    _downloadImage: function(filename, params) {
	        if (this.ngl_view_id == this.get_last_child_id()){
	            this.stage.makeImage(params).then(function(blob) {
	                NGL.download(blob, filename);
	            })
	        }
	    },
	
	    _exportImage: function(params) {
	        if (this.ngl_view_id == this.get_last_child_id()){
	            this.stage.makeImage(params).then(function(blob) {
	                var reader = new FileReader();
	                var arr_str;
	                reader.onload = function() {
	                    arr_str = reader.result.replace("data:image/png;base64,", "");
	                    this.model.set("_image_data", arr_str);
	                    this.touch();
	                }.bind(this);
	                reader.readAsDataURL(blob);
	            }.bind(this));
	        }
	    },
	
	    cleanOutput: function() {
	
	        var cells = Jupyter.notebook.get_cells();
	
	        for (var i = 0; i < cells.length; i++) {
	            var cell = cells[i];
	            if (cell.output_area.outputs.length > 0) {
	                var out = cell.output_area.outputs[0];
	                if (out.output_type == 'display_data') {
	                    cell.clear_output();
	                }
	            }
	        }
	    },
	
	    _handle_loading_file_finished: function() {
	        this.send({'type': 'async_message', 'data': 'ok'});
	    },
	
	    _get_loadFile_promise: function(msg){
	         // args = [{'type': ..., 'data': ...}]
	         var args0 = msg.args[0];
	         if (args0.type == 'blob') {
	             var blob;
	             if (args0.binary) {
	                 var decoded_data = this.decode_base64(args0.data);
	                 blob = new Blob([decoded_data], {
	                     type: "application/octet-binary"
	                 });
	             } else {
	                 blob = new Blob([args0.data], {
	                     type: "text/plain"
	                 });
	             }
	             return this.stage.loadFile(blob, msg.kwargs)
	         } else {
	             return this.stage.loadFile(msg.args[0].data, msg.kwargs)
	         }
	    },
	
	    get_last_child_id: function(){
	        var keys = Object.keys(this.model.views);
	        return keys[keys.length-1]
	    },
	
	    _handle_stage_loadFile: function(msg){
	        // args = [{'type': ..., 'data': ...}]
	        if (this.ngl_view_id != this.get_last_child_id() && msg.last_child){
	            return
	        }
	        var that = this;
	        this._get_loadFile_promise(msg).then(function(o){
	            that._handle_loading_file_finished();
	            o;
	        });
	    },
	
	    on_msg: function(msg) {
	        // TODO: re-organize
	        if (msg.type == 'call_method') {
	            var index, component, func, stage;
	            var new_args = msg.args.slice();
	            new_args.push(msg.kwargs);
	
	            switch (msg.target) {
	                case 'Stage':
	                    var stage_func = this.stage[msg.methodName];
	                    stage = this.stage;
	                    if (msg.methodName == 'screenshot') {
	                        NGL.screenshot(this.stage.viewer, msg.kwargs);
	                    } else if (msg.methodName == 'removeComponent') {
	                        index = msg.args[0];
	                        component = this.stage.compList[index];
	                        this.stage.removeComponent(component);
	                    } else if (msg.methodName == 'loadFile') {
	                        if (this.model.views.length > 1 && msg.kwargs &&
	                            msg.kwargs.defaultRepresentation) {
	                            // no need to add default representation as all representations
	                            // are serialized separately, also it unwantedly sets the orientation
	                            msg.kwargs.defaultRepresentation = false
	                        }
	                        this._handle_stage_loadFile(msg);
	                    } else {
	                            stage_func.apply(stage, new_args);
	                    }
	                    break;
	                case 'Viewer':
	                    var viewer = this.stage.viewer;
	                    func = this.stage.viewer[msg.methodName];
	                    func.apply(viewer, new_args);
	                    break;
	                case 'viewerControls':
	                    var controls = this.stage.viewerControls;
	                    func = controls[msg.methodName];
	                    func.apply(controls, new_args);
	                    break;
	                case 'compList':
	                    index = msg['component_index'];
	                    component = this.stage.compList[index];
	                    func = component[msg.methodName];
	                    func.apply(component, new_args);
	                    break;
	                case 'StructureComponent':
	                    component = this.structureComponent;
	                    func = component[msg.methodName];
	                    func.apply(component, new_args);
	                    break;
	                case 'Widget':
	                    func = this[msg.methodName];
	                    if (func) {
	                        func.apply(this, new_args);
	                    } else {
	                        // send error message to Python?
	                        console.log('can not create func for ' + msg.methodName);
	                    }
	                    break;
	                case 'player':
	                    func = this.$player[msg.methodName];
	                    if (func) {
	                        func.apply(this.$player, new_args);
	                    } else {
	                        // send error message to Python?
	                        console.log('can not create func for ' + msg.methodName);
	                    }
	                    break;
	                case 'Representation':
	                    var component_index = msg['component_index'];
	                    var repr_index = msg['repr_index'];
	                    component = this.stage.compList[component_index];
	                    var repr = component.reprList[repr_index];
	                    func = repr[msg.methodName];
	                    if (repr && func) {
	                        func.apply(repr, new_args);
	                    }
	                    break;
	                default:
	                    console.log('there is no method for ' + msg.target);
	                    break;
	            }
	        } else if (msg.type == 'base64_single') {
	            var coordinatesDict = msg.data;
	            var keys = Object.keys(coordinatesDict);
	
	            for (var i = 0; i < keys.length; i++) {
	                var traj_index = keys[i];
	                var coordinates = this.decode_base64(coordinatesDict[traj_index]);
	                if (coordinates && coordinates.byteLength > 0) {
	                    this.updateCoordinates(coordinates, traj_index);
	                }
	            }
	        } else if (msg.type == 'binary_single') {
	            var coordinateMeta = msg.data;
	            keys = Object.keys(coordinateMeta);
	
	            for (i = 0; i < keys.length; i++) {
	                traj_index = keys[i];
	                coordinates = new Float32Array(msg.buffers[i].buffer);
	                if (coordinates.byteLength > 0) {
	                    this.updateCoordinates(coordinates, traj_index);
	                }
	            }
	        } else if (msg.type == 'get') {
	            if (msg.data == 'camera') {
	                this.send(JSON.stringify(this.stage.viewer.camera));
	            } else if (msg.data == 'parameters') {
	                this.send(JSON.stringify(this.stage.parameters));
	            } else {
	                console.log("Number of components", this.stage.compList.length);
	                console.log("ngl_view_id", this.ngl_view_id);
	            }
	        }
	    },
	});
	
	module.exports = {
	    'NGLView': NGLView,
	    'NGLModel': NGLModel,
	    'NGL': NGL,
	};


/***/ }),
/* 2 */
/***/ (function(module, exports) {

	module.exports = __WEBPACK_EXTERNAL_MODULE_2__;

/***/ }),
/* 3 */
/***/ (function(module, exports, __webpack_require__) {

	/* WEBPACK VAR INJECTION */(function(setImmediate, global) {!function(t,e){ true?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e(t.NGL={})}(this,function(de){"use strict";var t,u,e,i,c,r,h,n;"undefined"!=typeof window&&function(){window.console=window.console||{};for(var t,e,i=window.console,r={},n=function(){},o="memory".split(","),a="assert,clear,count,debug,dir,dirxml,error,exception,group,groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn".split(",");t=o.pop();)i[t]||(i[t]=r);for(;e=a.pop();)i[e]||(i[e]=n)}(),void 0===window.HTMLCanvasElement||window.HTMLCanvasElement.prototype.toBlob||Object.defineProperty(window.HTMLCanvasElement.prototype,"toBlob",{value:function(t,e,i){for(var r=window.atob(this.toDataURL(e,i).split(",")[1]),n=r.length,o=n>>2,a=new Uint8Array(n),s=new Uint32Array(a.buffer,0,o),c=0,u=0;c<o;c++)s[c]=r.charCodeAt(u++)|r.charCodeAt(u++)<<8|r.charCodeAt(u++)<<16|r.charCodeAt(u++)<<24;for(var h=3&n;h--;)a[u]=r.charCodeAt(u++);t(new window.Blob([a],{type:e||"image/png"}))}}),Math.cbrt=Math.cbrt||function(t){var e=Math.pow(Math.abs(t),1/3);return t<0?-e:e},Math.sign||(Math.sign=function(t){return 0===(t=+t)||isNaN(t)?Number(t):0<t?1:-1}),Number.isInteger||(Number.isInteger=function(t){return"number"==typeof t&&isFinite(t)&&-9007199254740992<t&&t<9007199254740992&&Math.floor(t)===t}),Number.isNaN||(Number.isNaN=function(t){return t!=t}),Object.assign||Object.defineProperty(Object,"assign",{enumerable:!1,configurable:!0,writable:!0,value:function(t){var e=arguments;if(null==t)throw new TypeError("Cannot convert first argument to object");for(var i,r=Object(t),n=!1,o=1;o<arguments.length;o++){var a=e[o];if(null!=a){for(var s=Object.keys(Object(a)),c=0,u=s.length;c<u;c++){var h=s[c];try{var l=Object.getOwnPropertyDescriptor(a,h);void 0!==l&&l.enumerable&&(r[h]=a[h])}catch(t){n||(n=!0,i=t)}}if(n)throw i}}return r}}),String.prototype.startsWith||(t=function(){var t;try{var e={},i=Object.defineProperty;t=i(e,e,e)&&i}catch(t){}return t}(),u={}.toString,e=function(t){if(null===this)throw TypeError();var e=String(this);if(t&&"[object RegExp]"===u.call(t))throw TypeError();var i=e.length,r=String(t),n=r.length,o=1<arguments.length?arguments[1]:void 0,a=o?Number(o):0;Number.isNaN(a)&&(a=0);var s=Math.min(Math.max(a,0),i);if(i<n+s)return!1;for(var c=-1;++c<n;)if(e.charCodeAt(s+c)!==r.charCodeAt(c))return!1;return!0},t?t(String.prototype,"startsWith",{value:e,configurable:!0,writable:!0}):String.prototype.startsWith=e),String.prototype.endsWith||(String.prototype.endsWith=function(t,e){var i=this.toString();("number"!=typeof e||!isFinite(e)||Math.floor(e)!==e||e>i.length)&&(e=i.length),e-=t.length;var r=i.indexOf(t,e);return-1!==r&&r===e}),String.prototype.repeat||(String.prototype.repeat=function(t){if(null===this)throw new TypeError("can't convert "+this+" to object");var e=""+this;if(t=+t,Number.isNaN(t)&&(t=0),t<0)throw new RangeError("repeat count must be non-negative");if(t===1/0)throw new RangeError("repeat count must be less than infinity");if(t=Math.floor(t),0===e.length||0===t)return"";if(e.length*t>=1<<28)throw new RangeError("repeat count must not overflow maximum string size");for(var i="";1==(1&t)&&(i+=e),0!==(t>>>=1);)e+=e;return i}),String.prototype.includes||(String.prototype.includes=function(t,e){return"number"!=typeof e&&(e=0),!(e+t.length>this.length)&&-1!==this.indexOf(t,e)}),Array.prototype.includes||(Array.prototype.includes=function(t){if(null==this)throw new TypeError("Array.prototype.includes called on null or undefined");var e=Object(this),i=parseInt(e.length,10)||0;if(0===i)return!1;var r,n,o=parseInt(arguments[1],10)||0;for(0<=o?r=o:(r=i+o)<0&&(r=0);r<i;){if(t===(n=e[r])||Number.isNaN(t)&&Number.isNaN(n))return!0;r++}return!1}),Array.from||(Array.from=(i=Object.prototype.toString,c=function(t){return"function"==typeof t||"[object Function]"===i.call(t)},r=Math.pow(2,53)-1,h=function(t){var e,i=(e=Number(t),isNaN(e)?0:0!==e&&isFinite(e)?(0<e?1:-1)*Math.floor(Math.abs(e)):e);return Math.min(Math.max(i,0),r)},function(t){var e=Object(t);if(null==t)throw new TypeError("Array.from requires an array-like object - not null or undefined");var i,r=1<arguments.length?arguments[1]:void 0;if(void 0!==r){if(!c(r))throw new TypeError("Array.from: when provided, the second argument must be a function");2<arguments.length&&(i=arguments[2])}for(var n,o=h(e.length),a=c(this)?Object(new this(o)):new Array(o),s=0;s<o;)n=e[s],a[s]=r?void 0===i?r(n,s):r.call(i,n,s):n,s+=1;return a.length=o,a})),"undefined"!=typeof window&&function(){for(var n=0,t=["ms","moz","webkit","o"],e=0;e<t.length&&!window.requestAnimationFrame;++e)window.requestAnimationFrame=window[t[e]+"RequestAnimationFrame"],window.cancelAnimationFrame=window[t[e]+"CancelAnimationFrame"]||window[t[e]+"CancelRequestAnimationFrame"];window.requestAnimationFrame||(window.requestAnimationFrame=function(t){var e=(new Date).getTime(),i=Math.max(0,16-(e-n)),r=window.setTimeout(function(){t(e+i)},i);return n=e+i,r}),window.cancelAnimationFrame||(window.cancelAnimationFrame=function(t){clearTimeout(t)})}(),void 0===Function.prototype.name&&void 0!==Object.defineProperty&&Object.defineProperty(Function.prototype,"name",{get:function(){return this.toString().match(/^\s*function\s*(\S*)\s*\(/)[1]}}),"undefined"!=typeof window&&(void 0===window.performance&&(self.performance={}),void 0===window.performance.now&&(n=Date.now(),window.performance.now=function(){return Date.now()-n})),void 0!==Object.defineProperty&&(void 0===Number.MAX_SAFE_INTEGER&&Object.defineProperty(Number,"MAX_SAFE_INTEGER",{enumerable:!1,configurable:!1,writable:!1,value:Math.pow(2,53)-1}),void 0===Number.MIN_SAFE_INTEGER&&Object.defineProperty(Number,"MIN_SAFE_INTEGER",{enumerable:!1,configurable:!1,writable:!1,value:-(Math.pow(2,53)-1)}));var o=setTimeout;function a(){}function s(t){if(!(this instanceof s))throw new TypeError("Promises must be constructed via new");if("function"!=typeof t)throw new TypeError("not a function");this._state=0,this._handled=!1,this._value=void 0,this._deferreds=[],g(t,this)}function l(i,r){for(;3===i._state;)i=i._value;0!==i._state?(i._handled=!0,s._immediateFn(function(){var t=1===i._state?r.onFulfilled:r.onRejected;if(null!==t){var e;try{e=t(i._value)}catch(t){return void d(r.promise,t)}p(r.promise,e)}else(1===i._state?p:d)(r.promise,i._value)})):i._deferreds.push(r)}function p(e,t){try{if(t===e)throw new TypeError("A promise cannot be resolved with itself.");if(t&&("object"==typeof t||"function"==typeof t)){var i=t.then;if(t instanceof s)return e._state=3,e._value=t,void f(e);if("function"==typeof i)return void g((r=i,n=t,function(){r.apply(n,arguments)}),e)}e._state=1,e._value=t,f(e)}catch(t){d(e,t)}var r,n}function d(t,e){t._state=2,t._value=e,f(t)}function f(t){2===t._state&&0===t._deferreds.length&&s._immediateFn(function(){t._handled||s._unhandledRejectionFn(t._value)});for(var e=0,i=t._deferreds.length;e<i;e++)l(t,t._deferreds[e]);t._deferreds=null}function m(t,e,i){this.onFulfilled="function"==typeof t?t:null,this.onRejected="function"==typeof e?e:null,this.promise=i}function g(t,e){var i=!1;try{t(function(t){i||(i=!0,p(e,t))},function(t){i||(i=!0,d(e,t))})}catch(t){if(i)return;i=!0,d(e,t)}}function v(){}s.prototype.catch=function(t){return this.then(null,t)},s.prototype.then=function(t,e){var i=new this.constructor(a);return l(this,new m(t,e,i)),i},s.prototype.finally=function(e){var i=this.constructor;return this.then(function(t){return i.resolve(e()).then(function(){return t})},function(t){return i.resolve(e()).then(function(){return i.reject(t)})})},s.all=function(e){return new s(function(r,n){if(!e||void 0===e.length)throw new TypeError("Promise.all accepts an array");var o=Array.prototype.slice.call(e);if(0===o.length)return r([]);var a=o.length;function s(e,t){try{if(t&&("object"==typeof t||"function"==typeof t)){var i=t.then;if("function"==typeof i)return void i.call(t,function(t){s(e,t)},n)}o[e]=t,0==--a&&r(o)}catch(t){n(t)}}for(var t=0;t<o.length;t++)s(t,o[t])})},s.resolve=function(e){return e&&"object"==typeof e&&e.constructor===s?e:new s(function(t){t(e)})},s.reject=function(i){return new s(function(t,e){e(i)})},s.race=function(n){return new s(function(t,e){for(var i=0,r=n.length;i<r;i++)n[i].then(t,e)})},s._immediateFn="function"==typeof setImmediate&&function(t){setImmediate(t)}||function(t){o(t,0)},s._unhandledRejectionFn=function(t){"undefined"!=typeof console&&console&&console.warn("Possible Unhandled Promise Rejection:",t)},void 0===Number.EPSILON&&(Number.EPSILON=Math.pow(2,-52)),void 0===Number.isInteger&&(Number.isInteger=function(t){return"number"==typeof t&&isFinite(t)&&Math.floor(t)===t}),void 0===Math.sign&&(Math.sign=function(t){return t<0?-1:0<t?1:+t}),"name"in Function.prototype==!1&&Object.defineProperty(Function.prototype,"name",{get:function(){return this.toString().match(/^\s*function\s*([^\(\s]*)/)[1]}}),void 0===Object.assign&&(Object.assign=function(t){var e=arguments;if(null==t)throw new TypeError("Cannot convert undefined or null to object");for(var i=Object(t),r=1;r<arguments.length;r++){var n=e[r];if(null!=n)for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(i[o]=n[o])}return i}),Object.assign(v.prototype,{addEventListener:function(t,e){void 0===this._listeners&&(this._listeners={});var i=this._listeners;void 0===i[t]&&(i[t]=[]),-1===i[t].indexOf(e)&&i[t].push(e)},hasEventListener:function(t,e){if(void 0===this._listeners)return!1;var i=this._listeners;return void 0!==i[t]&&-1!==i[t].indexOf(e)},removeEventListener:function(t,e){if(void 0!==this._listeners){var i=this._listeners[t];if(void 0!==i){var r=i.indexOf(e);-1!==r&&i.splice(r,1)}}},dispatchEvent:function(t){if(void 0!==this._listeners){var e=this._listeners[t.type];if(void 0!==e){t.target=this;for(var i=e.slice(0),r=0,n=i.length;r<n;r++)i[r].call(this,t)}}}});var y,b,x,_,w,S,A,M,P,E,C,T,I,R,L,O,D,k,B,N,V=0,H=1,$=2,F=1,z=2,U=0,Y=1,Z=2,Mt=0,W=0,X=1,q=2,K=3,J=4,Q=5,j=100,G=101,tt=102,et=103,it=104,rt=200,nt=201,ot=202,at=203,st=204,ct=205,ut=206,ht=207,lt=208,pt=209,dt=210,ft=0,mt=1,gt=2,vt=3,yt=4,bt=5,xt=6,_t=7,wt=0,St=1,At=2,Pt=0,Et=1,Ct=2,Tt=3,It=4,Rt=301,Lt=302,Ot=303,Dt=304,kt=305,Bt=306,Nt=307,Ft=1e3,zt=1001,Ut=1002,jt=1003,Gt=1004,Vt=1005,Ht=1006,$t=1007,Wt=1008,Xt=1009,qt=1010,Yt=1011,Zt=1012,Kt=1013,Jt=1014,Qt=1015,te=1016,ee=1017,ie=1018,re=1019,ne=1020,oe=1021,ae=1022,se=1023,ce=1024,ue=1025,he=1026,le=1027,pe=33776,fe=33777,ge=33778,ve=33779,ye=35840,be=35841,xe=35842,_e=35843,we=36196,Se=37808,Ae=37809,Me=37810,Pe=37811,Ee=37812,Ce=37813,Te=37814,Ie=37815,Re=37816,Le=37817,Oe=37818,De=37819,ke=37820,Be=37821,Ne=2400,Fe=2401,ze=0,Ue=3e3,je=3001,Ge=3007,Ve=3002,He=3004,$e=3005,We=3006,Xe=3200,qe=3201,Ye={DEG2RAD:Math.PI/180,RAD2DEG:180/Math.PI,generateUUID:function(){for(var n=[],t=0;t<256;t++)n[t]=(t<16?"0":"")+t.toString(16);return function(){var t=4294967295*Math.random()|0,e=4294967295*Math.random()|0,i=4294967295*Math.random()|0,r=4294967295*Math.random()|0;return(n[255&t]+n[t>>8&255]+n[t>>16&255]+n[t>>24&255]+"-"+n[255&e]+n[e>>8&255]+"-"+n[e>>16&15|64]+n[e>>24&255]+"-"+n[63&i|128]+n[i>>8&255]+"-"+n[i>>16&255]+n[i>>24&255]+n[255&r]+n[r>>8&255]+n[r>>16&255]+n[r>>24&255]).toUpperCase()}}(),clamp:function(t,e,i){return Math.max(e,Math.min(i,t))},euclideanModulo:function(t,e){return(t%e+e)%e},mapLinear:function(t,e,i,r,n){return r+(t-e)*(n-r)/(i-e)},lerp:function(t,e,i){return(1-i)*t+i*e},smoothstep:function(t,e,i){return t<=e?0:i<=t?1:(t=(t-e)/(i-e))*t*(3-2*t)},smootherstep:function(t,e,i){return t<=e?0:i<=t?1:(t=(t-e)/(i-e))*t*t*(t*(6*t-15)+10)},randInt:function(t,e){return t+Math.floor(Math.random()*(e-t+1))},randFloat:function(t,e){return t+Math.random()*(e-t)},randFloatSpread:function(t){return t*(.5-Math.random())},degToRad:function(t){return t*Ye.DEG2RAD},radToDeg:function(t){return t*Ye.RAD2DEG},isPowerOfTwo:function(t){return 0==(t&t-1)&&0!==t},ceilPowerOfTwo:function(t){return Math.pow(2,Math.ceil(Math.log(t)/Math.LN2))},floorPowerOfTwo:function(t){return Math.pow(2,Math.floor(Math.log(t)/Math.LN2))}};function Ze(t,e){this.x=t||0,this.y=e||0}function Ke(){this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],0<arguments.length&&console.error("THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.")}function Je(t,e,i,r){this._x=t||0,this._y=e||0,this._z=i||0,this._w=void 0!==r?r:1}function Qe(t,e,i){this.x=t||0,this.y=e||0,this.z=i||0}function ti(){this.elements=[1,0,0,0,1,0,0,0,1],0<arguments.length&&console.error("THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.")}Object.defineProperties(Ze.prototype,{width:{get:function(){return this.x},set:function(t){this.x=t}},height:{get:function(){return this.y},set:function(t){this.y=t}}}),Object.assign(Ze.prototype,{isVector2:!0,set:function(t,e){return this.x=t,this.y=e,this},setScalar:function(t){return this.x=t,this.y=t,this},setX:function(t){return this.x=t,this},setY:function(t){return this.y=t,this},setComponent:function(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;default:throw new Error("index is out of range: "+t)}return this},getComponent:function(t){switch(t){case 0:return this.x;case 1:return this.y;default:throw new Error("index is out of range: "+t)}},clone:function(){return new this.constructor(this.x,this.y)},copy:function(t){return this.x=t.x,this.y=t.y,this},add:function(t,e){return void 0!==e?(console.warn("THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this)},addScalar:function(t){return this.x+=t,this.y+=t,this},addVectors:function(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this},addScaledVector:function(t,e){return this.x+=t.x*e,this.y+=t.y*e,this},sub:function(t,e){return void 0!==e?(console.warn("THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this)},subScalar:function(t){return this.x-=t,this.y-=t,this},subVectors:function(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this},multiply:function(t){return this.x*=t.x,this.y*=t.y,this},multiplyScalar:function(t){return this.x*=t,this.y*=t,this},divide:function(t){return this.x/=t.x,this.y/=t.y,this},divideScalar:function(t){return this.multiplyScalar(1/t)},applyMatrix3:function(t){var e=this.x,i=this.y,r=t.elements;return this.x=r[0]*e+r[3]*i+r[6],this.y=r[1]*e+r[4]*i+r[7],this},min:function(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this},max:function(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this},clamp:function(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this},clampScalar:(y=new Ze,b=new Ze,function(t,e){return y.set(t,t),b.set(e,e),this.clamp(y,b)}),clampLength:function(t,e){var i=this.length();return this.divideScalar(i||1).multiplyScalar(Math.max(t,Math.min(e,i)))},floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this},ceil:function(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this},round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this},roundToZero:function(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this},negate:function(){return this.x=-this.x,this.y=-this.y,this},dot:function(t){return this.x*t.x+this.y*t.y},lengthSq:function(){return this.x*this.x+this.y*this.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},manhattanLength:function(){return Math.abs(this.x)+Math.abs(this.y)},normalize:function(){return this.divideScalar(this.length()||1)},angle:function(){var t=Math.atan2(this.y,this.x);return t<0&&(t+=2*Math.PI),t},distanceTo:function(t){return Math.sqrt(this.distanceToSquared(t))},distanceToSquared:function(t){var e=this.x-t.x,i=this.y-t.y;return e*e+i*i},manhattanDistanceTo:function(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)},setLength:function(t){return this.normalize().multiplyScalar(t)},lerp:function(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this},lerpVectors:function(t,e,i){return this.subVectors(e,t).multiplyScalar(i).add(t)},equals:function(t){return t.x===this.x&&t.y===this.y},fromArray:function(t,e){return void 0===e&&(e=0),this.x=t[e],this.y=t[e+1],this},toArray:function(t,e){return void 0===t&&(t=[]),void 0===e&&(e=0),t[e]=this.x,t[e+1]=this.y,t},fromBufferAttribute:function(t,e,i){return void 0!==i&&console.warn("THREE.Vector2: offset has been removed from .fromBufferAttribute()."),this.x=t.getX(e),this.y=t.getY(e),this},rotateAround:function(t,e){var i=Math.cos(e),r=Math.sin(e),n=this.x-t.x,o=this.y-t.y;return this.x=n*i-o*r+t.x,this.y=n*r+o*i+t.y,this}}),Object.assign(Ke.prototype,{isMatrix4:!0,set:function(t,e,i,r,n,o,a,s,c,u,h,l,p,d,f,m){var g=this.elements;return g[0]=t,g[4]=e,g[8]=i,g[12]=r,g[1]=n,g[5]=o,g[9]=a,g[13]=s,g[2]=c,g[6]=u,g[10]=h,g[14]=l,g[3]=p,g[7]=d,g[11]=f,g[15]=m,this},identity:function(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this},clone:function(){return(new Ke).fromArray(this.elements)},copy:function(t){var e=this.elements,i=t.elements;return e[0]=i[0],e[1]=i[1],e[2]=i[2],e[3]=i[3],e[4]=i[4],e[5]=i[5],e[6]=i[6],e[7]=i[7],e[8]=i[8],e[9]=i[9],e[10]=i[10],e[11]=i[11],e[12]=i[12],e[13]=i[13],e[14]=i[14],e[15]=i[15],this},copyPosition:function(t){var e=this.elements,i=t.elements;return e[12]=i[12],e[13]=i[13],e[14]=i[14],this},extractBasis:function(t,e,i){return t.setFromMatrixColumn(this,0),e.setFromMatrixColumn(this,1),i.setFromMatrixColumn(this,2),this},makeBasis:function(t,e,i){return this.set(t.x,e.x,i.x,0,t.y,e.y,i.y,0,t.z,e.z,i.z,0,0,0,0,1),this},extractRotation:(P=new Qe,function(t){var e=this.elements,i=t.elements,r=1/P.setFromMatrixColumn(t,0).length(),n=1/P.setFromMatrixColumn(t,1).length(),o=1/P.setFromMatrixColumn(t,2).length();return e[0]=i[0]*r,e[1]=i[1]*r,e[2]=i[2]*r,e[4]=i[4]*n,e[5]=i[5]*n,e[6]=i[6]*n,e[8]=i[8]*o,e[9]=i[9]*o,e[10]=i[10]*o,this}),makeRotationFromEuler:function(t){t&&t.isEuler||console.error("THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.");var e=this.elements,i=t.x,r=t.y,n=t.z,o=Math.cos(i),a=Math.sin(i),s=Math.cos(r),c=Math.sin(r),u=Math.cos(n),h=Math.sin(n);if("XYZ"===t.order){var l=o*u,p=o*h,d=a*u,f=a*h;e[0]=s*u,e[4]=-s*h,e[8]=c,e[1]=p+d*c,e[5]=l-f*c,e[9]=-a*s,e[2]=f-l*c,e[6]=d+p*c,e[10]=o*s}else if("YXZ"===t.order){var m=s*u,g=s*h,v=c*u,y=c*h;e[0]=m+y*a,e[4]=v*a-g,e[8]=o*c,e[1]=o*h,e[5]=o*u,e[9]=-a,e[2]=g*a-v,e[6]=y+m*a,e[10]=o*s}else if("ZXY"===t.order){m=s*u,g=s*h,v=c*u,y=c*h;e[0]=m-y*a,e[4]=-o*h,e[8]=v+g*a,e[1]=g+v*a,e[5]=o*u,e[9]=y-m*a,e[2]=-o*c,e[6]=a,e[10]=o*s}else if("ZYX"===t.order){l=o*u,p=o*h,d=a*u,f=a*h;e[0]=s*u,e[4]=d*c-p,e[8]=l*c+f,e[1]=s*h,e[5]=f*c+l,e[9]=p*c-d,e[2]=-c,e[6]=a*s,e[10]=o*s}else if("YZX"===t.order){var b=o*s,x=o*c,_=a*s,w=a*c;e[0]=s*u,e[4]=w-b*h,e[8]=_*h+x,e[1]=h,e[5]=o*u,e[9]=-a*u,e[2]=-c*u,e[6]=x*h+_,e[10]=b-w*h}else if("XZY"===t.order){b=o*s,x=o*c,_=a*s,w=a*c;e[0]=s*u,e[4]=-h,e[8]=c*u,e[1]=b*h+w,e[5]=o*u,e[9]=x*h-_,e[2]=_*h-x,e[6]=a*u,e[10]=w*h+b}return e[3]=0,e[7]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this},makeRotationFromQuaternion:function(t){var e=this.elements,i=t._x,r=t._y,n=t._z,o=t._w,a=i+i,s=r+r,c=n+n,u=i*a,h=i*s,l=i*c,p=r*s,d=r*c,f=n*c,m=o*a,g=o*s,v=o*c;return e[0]=1-(p+f),e[4]=h-v,e[8]=l+g,e[1]=h+v,e[5]=1-(u+f),e[9]=d-m,e[2]=l-g,e[6]=d+m,e[10]=1-(u+p),e[3]=0,e[7]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this},lookAt:(S=new Qe,A=new Qe,M=new Qe,function(t,e,i){var r=this.elements;return M.subVectors(t,e),0===M.lengthSq()&&(M.z=1),M.normalize(),S.crossVectors(i,M),0===S.lengthSq()&&(1===Math.abs(i.z)?M.x+=1e-4:M.z+=1e-4,M.normalize(),S.crossVectors(i,M)),S.normalize(),A.crossVectors(M,S),r[0]=S.x,r[4]=A.x,r[8]=M.x,r[1]=S.y,r[5]=A.y,r[9]=M.y,r[2]=S.z,r[6]=A.z,r[10]=M.z,this}),multiply:function(t,e){return void 0!==e?(console.warn("THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead."),this.multiplyMatrices(t,e)):this.multiplyMatrices(this,t)},premultiply:function(t){return this.multiplyMatrices(t,this)},multiplyMatrices:function(t,e){var i=t.elements,r=e.elements,n=this.elements,o=i[0],a=i[4],s=i[8],c=i[12],u=i[1],h=i[5],l=i[9],p=i[13],d=i[2],f=i[6],m=i[10],g=i[14],v=i[3],y=i[7],b=i[11],x=i[15],_=r[0],w=r[4],S=r[8],A=r[12],M=r[1],P=r[5],E=r[9],C=r[13],T=r[2],I=r[6],R=r[10],L=r[14],O=r[3],D=r[7],k=r[11],B=r[15];return n[0]=o*_+a*M+s*T+c*O,n[4]=o*w+a*P+s*I+c*D,n[8]=o*S+a*E+s*R+c*k,n[12]=o*A+a*C+s*L+c*B,n[1]=u*_+h*M+l*T+p*O,n[5]=u*w+h*P+l*I+p*D,n[9]=u*S+h*E+l*R+p*k,n[13]=u*A+h*C+l*L+p*B,n[2]=d*_+f*M+m*T+g*O,n[6]=d*w+f*P+m*I+g*D,n[10]=d*S+f*E+m*R+g*k,n[14]=d*A+f*C+m*L+g*B,n[3]=v*_+y*M+b*T+x*O,n[7]=v*w+y*P+b*I+x*D,n[11]=v*S+y*E+b*R+x*k,n[15]=v*A+y*C+b*L+x*B,this},multiplyScalar:function(t){var e=this.elements;return e[0]*=t,e[4]*=t,e[8]*=t,e[12]*=t,e[1]*=t,e[5]*=t,e[9]*=t,e[13]*=t,e[2]*=t,e[6]*=t,e[10]*=t,e[14]*=t,e[3]*=t,e[7]*=t,e[11]*=t,e[15]*=t,this},applyToBufferAttribute:(w=new Qe,function(t){for(var e=0,i=t.count;e<i;e++)w.x=t.getX(e),w.y=t.getY(e),w.z=t.getZ(e),w.applyMatrix4(this),t.setXYZ(e,w.x,w.y,w.z);return t}),determinant:function(){var t=this.elements,e=t[0],i=t[4],r=t[8],n=t[12],o=t[1],a=t[5],s=t[9],c=t[13],u=t[2],h=t[6],l=t[10],p=t[14];return t[3]*(+n*s*h-r*c*h-n*a*l+i*c*l+r*a*p-i*s*p)+t[7]*(+e*s*p-e*c*l+n*o*l-r*o*p+r*c*u-n*s*u)+t[11]*(+e*c*h-e*a*p-n*o*h+i*o*p+n*a*u-i*c*u)+t[15]*(-r*a*u-e*s*h+e*a*l+r*o*h-i*o*l+i*s*u)},transpose:function(){var t,e=this.elements;return t=e[1],e[1]=e[4],e[4]=t,t=e[2],e[2]=e[8],e[8]=t,t=e[6],e[6]=e[9],e[9]=t,t=e[3],e[3]=e[12],e[12]=t,t=e[7],e[7]=e[13],e[13]=t,t=e[11],e[11]=e[14],e[14]=t,this},setPosition:function(t){var e=this.elements;return e[12]=t.x,e[13]=t.y,e[14]=t.z,this},getInverse:function(t,e){var i=this.elements,r=t.elements,n=r[0],o=r[1],a=r[2],s=r[3],c=r[4],u=r[5],h=r[6],l=r[7],p=r[8],d=r[9],f=r[10],m=r[11],g=r[12],v=r[13],y=r[14],b=r[15],x=d*y*l-v*f*l+v*h*m-u*y*m-d*h*b+u*f*b,_=g*f*l-p*y*l-g*h*m+c*y*m+p*h*b-c*f*b,w=p*v*l-g*d*l+g*u*m-c*v*m-p*u*b+c*d*b,S=g*d*h-p*v*h-g*u*f+c*v*f+p*u*y-c*d*y,A=n*x+o*_+a*w+s*S;if(0===A){var M="THREE.Matrix4: .getInverse() can't invert matrix, determinant is 0";if(!0===e)throw new Error(M);return console.warn(M),this.identity()}var P=1/A;return i[0]=x*P,i[1]=(v*f*s-d*y*s-v*a*m+o*y*m+d*a*b-o*f*b)*P,i[2]=(u*y*s-v*h*s+v*a*l-o*y*l-u*a*b+o*h*b)*P,i[3]=(d*h*s-u*f*s-d*a*l+o*f*l+u*a*m-o*h*m)*P,i[4]=_*P,i[5]=(p*y*s-g*f*s+g*a*m-n*y*m-p*a*b+n*f*b)*P,i[6]=(g*h*s-c*y*s-g*a*l+n*y*l+c*a*b-n*h*b)*P,i[7]=(c*f*s-p*h*s+p*a*l-n*f*l-c*a*m+n*h*m)*P,i[8]=w*P,i[9]=(g*d*s-p*v*s-g*o*m+n*v*m+p*o*b-n*d*b)*P,i[10]=(c*v*s-g*u*s+g*o*l-n*v*l-c*o*b+n*u*b)*P,i[11]=(p*u*s-c*d*s-p*o*l+n*d*l+c*o*m-n*u*m)*P,i[12]=S*P,i[13]=(p*v*a-g*d*a+g*o*f-n*v*f-p*o*y+n*d*y)*P,i[14]=(g*u*a-c*v*a-g*o*h+n*v*h+c*o*y-n*u*y)*P,i[15]=(c*d*a-p*u*a+p*o*h-n*d*h-c*o*f+n*u*f)*P,this},scale:function(t){var e=this.elements,i=t.x,r=t.y,n=t.z;return e[0]*=i,e[4]*=r,e[8]*=n,e[1]*=i,e[5]*=r,e[9]*=n,e[2]*=i,e[6]*=r,e[10]*=n,e[3]*=i,e[7]*=r,e[11]*=n,this},getMaxScaleOnAxis:function(){var t=this.elements,e=t[0]*t[0]+t[1]*t[1]+t[2]*t[2],i=t[4]*t[4]+t[5]*t[5]+t[6]*t[6],r=t[8]*t[8]+t[9]*t[9]+t[10]*t[10];return Math.sqrt(Math.max(e,i,r))},makeTranslation:function(t,e,i){return this.set(1,0,0,t,0,1,0,e,0,0,1,i,0,0,0,1),this},makeRotationX:function(t){var e=Math.cos(t),i=Math.sin(t);return this.set(1,0,0,0,0,e,-i,0,0,i,e,0,0,0,0,1),this},makeRotationY:function(t){var e=Math.cos(t),i=Math.sin(t);return this.set(e,0,i,0,0,1,0,0,-i,0,e,0,0,0,0,1),this},makeRotationZ:function(t){var e=Math.cos(t),i=Math.sin(t);return this.set(e,-i,0,0,i,e,0,0,0,0,1,0,0,0,0,1),this},makeRotationAxis:function(t,e){var i=Math.cos(e),r=Math.sin(e),n=1-i,o=t.x,a=t.y,s=t.z,c=n*o,u=n*a;return this.set(c*o+i,c*a-r*s,c*s+r*a,0,c*a+r*s,u*a+i,u*s-r*o,0,c*s-r*a,u*s+r*o,n*s*s+i,0,0,0,0,1),this},makeScale:function(t,e,i){return this.set(t,0,0,0,0,e,0,0,0,0,i,0,0,0,0,1),this},makeShear:function(t,e,i){return this.set(1,e,i,0,t,1,i,0,t,e,1,0,0,0,0,1),this},compose:function(t,e,i){return this.makeRotationFromQuaternion(e),this.scale(i),this.setPosition(t),this},decompose:(x=new Qe,_=new Ke,function(t,e,i){var r=this.elements,n=x.set(r[0],r[1],r[2]).length(),o=x.set(r[4],r[5],r[6]).length(),a=x.set(r[8],r[9],r[10]).length();this.determinant()<0&&(n=-n),t.x=r[12],t.y=r[13],t.z=r[14],_.copy(this);var s=1/n,c=1/o,u=1/a;return _.elements[0]*=s,_.elements[1]*=s,_.elements[2]*=s,_.elements[4]*=c,_.elements[5]*=c,_.elements[6]*=c,_.elements[8]*=u,_.elements[9]*=u,_.elements[10]*=u,e.setFromRotationMatrix(_),i.x=n,i.y=o,i.z=a,this}),makePerspective:function(t,e,i,r,n,o){void 0===o&&console.warn("THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.");var a=this.elements,s=2*n/(e-t),c=2*n/(i-r),u=(e+t)/(e-t),h=(i+r)/(i-r),l=-(o+n)/(o-n),p=-2*o*n/(o-n);return a[0]=s,a[4]=0,a[8]=u,a[12]=0,a[1]=0,a[5]=c,a[9]=h,a[13]=0,a[2]=0,a[6]=0,a[10]=l,a[14]=p,a[3]=0,a[7]=0,a[11]=-1,a[15]=0,this},makeOrthographic:function(t,e,i,r,n,o){var a=this.elements,s=1/(e-t),c=1/(i-r),u=1/(o-n),h=(e+t)*s,l=(i+r)*c,p=(o+n)*u;return a[0]=2*s,a[4]=0,a[8]=0,a[12]=-h,a[1]=0,a[5]=2*c,a[9]=0,a[13]=-l,a[2]=0,a[6]=0,a[10]=-2*u,a[14]=-p,a[3]=0,a[7]=0,a[11]=0,a[15]=1,this},equals:function(t){for(var e=this.elements,i=t.elements,r=0;r<16;r++)if(e[r]!==i[r])return!1;return!0},fromArray:function(t,e){void 0===e&&(e=0);for(var i=0;i<16;i++)this.elements[i]=t[i+e];return this},toArray:function(t,e){void 0===t&&(t=[]),void 0===e&&(e=0);var i=this.elements;return t[e]=i[0],t[e+1]=i[1],t[e+2]=i[2],t[e+3]=i[3],t[e+4]=i[4],t[e+5]=i[5],t[e+6]=i[6],t[e+7]=i[7],t[e+8]=i[8],t[e+9]=i[9],t[e+10]=i[10],t[e+11]=i[11],t[e+12]=i[12],t[e+13]=i[13],t[e+14]=i[14],t[e+15]=i[15],t}}),Object.assign(Je,{slerp:function(t,e,i,r){return i.copy(t).slerp(e,r)},slerpFlat:function(t,e,i,r,n,o,a){var s=i[r+0],c=i[r+1],u=i[r+2],h=i[r+3],l=n[o+0],p=n[o+1],d=n[o+2],f=n[o+3];if(h!==f||s!==l||c!==p||u!==d){var m=1-a,g=s*l+c*p+u*d+h*f,v=0<=g?1:-1,y=1-g*g;if(y>Number.EPSILON){var b=Math.sqrt(y),x=Math.atan2(b,g*v);m=Math.sin(m*x)/b,a=Math.sin(a*x)/b}var _=a*v;if(s=s*m+l*_,c=c*m+p*_,u=u*m+d*_,h=h*m+f*_,m===1-a){var w=1/Math.sqrt(s*s+c*c+u*u+h*h);s*=w,c*=w,u*=w,h*=w}}t[e]=s,t[e+1]=c,t[e+2]=u,t[e+3]=h}}),Object.defineProperties(Je.prototype,{x:{get:function(){return this._x},set:function(t){this._x=t,this.onChangeCallback()}},y:{get:function(){return this._y},set:function(t){this._y=t,this.onChangeCallback()}},z:{get:function(){return this._z},set:function(t){this._z=t,this.onChangeCallback()}},w:{get:function(){return this._w},set:function(t){this._w=t,this.onChangeCallback()}}}),Object.assign(Je.prototype,{set:function(t,e,i,r){return this._x=t,this._y=e,this._z=i,this._w=r,this.onChangeCallback(),this},clone:function(){return new this.constructor(this._x,this._y,this._z,this._w)},copy:function(t){return this._x=t.x,this._y=t.y,this._z=t.z,this._w=t.w,this.onChangeCallback(),this},setFromEuler:function(t,e){if(!t||!t.isEuler)throw new Error("THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.");var i=t._x,r=t._y,n=t._z,o=t.order,a=Math.cos,s=Math.sin,c=a(i/2),u=a(r/2),h=a(n/2),l=s(i/2),p=s(r/2),d=s(n/2);return"XYZ"===o?(this._x=l*u*h+c*p*d,this._y=c*p*h-l*u*d,this._z=c*u*d+l*p*h,this._w=c*u*h-l*p*d):"YXZ"===o?(this._x=l*u*h+c*p*d,this._y=c*p*h-l*u*d,this._z=c*u*d-l*p*h,this._w=c*u*h+l*p*d):"ZXY"===o?(this._x=l*u*h-c*p*d,this._y=c*p*h+l*u*d,this._z=c*u*d+l*p*h,this._w=c*u*h-l*p*d):"ZYX"===o?(this._x=l*u*h-c*p*d,this._y=c*p*h+l*u*d,this._z=c*u*d-l*p*h,this._w=c*u*h+l*p*d):"YZX"===o?(this._x=l*u*h+c*p*d,this._y=c*p*h+l*u*d,this._z=c*u*d-l*p*h,this._w=c*u*h-l*p*d):"XZY"===o&&(this._x=l*u*h-c*p*d,this._y=c*p*h-l*u*d,this._z=c*u*d+l*p*h,this._w=c*u*h+l*p*d),!1!==e&&this.onChangeCallback(),this},setFromAxisAngle:function(t,e){var i=e/2,r=Math.sin(i);return this._x=t.x*r,this._y=t.y*r,this._z=t.z*r,this._w=Math.cos(i),this.onChangeCallback(),this},setFromRotationMatrix:function(t){var e,i=t.elements,r=i[0],n=i[4],o=i[8],a=i[1],s=i[5],c=i[9],u=i[2],h=i[6],l=i[10],p=r+s+l;return 0<p?(e=.5/Math.sqrt(p+1),this._w=.25/e,this._x=(h-c)*e,this._y=(o-u)*e,this._z=(a-n)*e):s<r&&l<r?(e=2*Math.sqrt(1+r-s-l),this._w=(h-c)/e,this._x=.25*e,this._y=(n+a)/e,this._z=(o+u)/e):l<s?(e=2*Math.sqrt(1+s-r-l),this._w=(o-u)/e,this._x=(n+a)/e,this._y=.25*e,this._z=(c+h)/e):(e=2*Math.sqrt(1+l-r-s),this._w=(a-n)/e,this._x=(o+u)/e,this._y=(c+h)/e,this._z=.25*e),this.onChangeCallback(),this},setFromUnitVectors:(C=new Qe,function(t,e){return void 0===C&&(C=new Qe),(E=t.dot(e)+1)<1e-6?(E=0,Math.abs(t.x)>Math.abs(t.z)?C.set(-t.y,t.x,0):C.set(0,-t.z,t.y)):C.crossVectors(t,e),this._x=C.x,this._y=C.y,this._z=C.z,this._w=E,this.normalize()}),inverse:function(){return this.conjugate()},conjugate:function(){return this._x*=-1,this._y*=-1,this._z*=-1,this.onChangeCallback(),this},dot:function(t){return this._x*t._x+this._y*t._y+this._z*t._z+this._w*t._w},lengthSq:function(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w},length:function(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)},normalize:function(){var t=this.length();return 0===t?(this._x=0,this._y=0,this._z=0,this._w=1):(t=1/t,this._x=this._x*t,this._y=this._y*t,this._z=this._z*t,this._w=this._w*t),this.onChangeCallback(),this},multiply:function(t,e){return void 0!==e?(console.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."),this.multiplyQuaternions(t,e)):this.multiplyQuaternions(this,t)},premultiply:function(t){return this.multiplyQuaternions(t,this)},multiplyQuaternions:function(t,e){var i=t._x,r=t._y,n=t._z,o=t._w,a=e._x,s=e._y,c=e._z,u=e._w;return this._x=i*u+o*a+r*c-n*s,this._y=r*u+o*s+n*a-i*c,this._z=n*u+o*c+i*s-r*a,this._w=o*u-i*a-r*s-n*c,this.onChangeCallback(),this},slerp:function(t,e){if(0===e)return this;if(1===e)return this.copy(t);var i=this._x,r=this._y,n=this._z,o=this._w,a=o*t._w+i*t._x+r*t._y+n*t._z;if(a<0?(this._w=-t._w,this._x=-t._x,this._y=-t._y,this._z=-t._z,a=-a):this.copy(t),1<=a)return this._w=o,this._x=i,this._y=r,this._z=n,this;var s=Math.sqrt(1-a*a);if(Math.abs(s)<.001)return this._w=.5*(o+this._w),this._x=.5*(i+this._x),this._y=.5*(r+this._y),this._z=.5*(n+this._z),this;var c=Math.atan2(s,a),u=Math.sin((1-e)*c)/s,h=Math.sin(e*c)/s;return this._w=o*u+this._w*h,this._x=i*u+this._x*h,this._y=r*u+this._y*h,this._z=n*u+this._z*h,this.onChangeCallback(),this},equals:function(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._w===this._w},fromArray:function(t,e){return void 0===e&&(e=0),this._x=t[e],this._y=t[e+1],this._z=t[e+2],this._w=t[e+3],this.onChangeCallback(),this},toArray:function(t,e){return void 0===t&&(t=[]),void 0===e&&(e=0),t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._w,t},onChange:function(t){return this.onChangeCallback=t,this},onChangeCallback:function(){}}),Object.assign(Qe.prototype,{isVector3:!0,set:function(t,e,i){return this.x=t,this.y=e,this.z=i,this},setScalar:function(t){return this.x=t,this.y=t,this.z=t,this},setX:function(t){return this.x=t,this},setY:function(t){return this.y=t,this},setZ:function(t){return this.z=t,this},setComponent:function(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;default:throw new Error("index is out of range: "+t)}return this},getComponent:function(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+t)}},clone:function(){return new this.constructor(this.x,this.y,this.z)},copy:function(t){return this.x=t.x,this.y=t.y,this.z=t.z,this},add:function(t,e){return void 0!==e?(console.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this.z+=t.z,this)},addScalar:function(t){return this.x+=t,this.y+=t,this.z+=t,this},addVectors:function(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this},addScaledVector:function(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this},sub:function(t,e){return void 0!==e?(console.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this.z-=t.z,this)},subScalar:function(t){return this.x-=t,this.y-=t,this.z-=t,this},subVectors:function(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this},multiply:function(t,e){return void 0!==e?(console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."),this.multiplyVectors(t,e)):(this.x*=t.x,this.y*=t.y,this.z*=t.z,this)},multiplyScalar:function(t){return this.x*=t,this.y*=t,this.z*=t,this},multiplyVectors:function(t,e){return this.x=t.x*e.x,this.y=t.y*e.y,this.z=t.z*e.z,this},applyEuler:(B=new Je,function(t){return t&&t.isEuler||console.error("THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order."),this.applyQuaternion(B.setFromEuler(t))}),applyAxisAngle:(k=new Je,function(t,e){return this.applyQuaternion(k.setFromAxisAngle(t,e))}),applyMatrix3:function(t){var e=this.x,i=this.y,r=this.z,n=t.elements;return this.x=n[0]*e+n[3]*i+n[6]*r,this.y=n[1]*e+n[4]*i+n[7]*r,this.z=n[2]*e+n[5]*i+n[8]*r,this},applyMatrix4:function(t){var e=this.x,i=this.y,r=this.z,n=t.elements,o=1/(n[3]*e+n[7]*i+n[11]*r+n[15]);return this.x=(n[0]*e+n[4]*i+n[8]*r+n[12])*o,this.y=(n[1]*e+n[5]*i+n[9]*r+n[13])*o,this.z=(n[2]*e+n[6]*i+n[10]*r+n[14])*o,this},applyQuaternion:function(t){var e=this.x,i=this.y,r=this.z,n=t.x,o=t.y,a=t.z,s=t.w,c=s*e+o*r-a*i,u=s*i+a*e-n*r,h=s*r+n*i-o*e,l=-n*e-o*i-a*r;return this.x=c*s+l*-n+u*-a-h*-o,this.y=u*s+l*-o+h*-n-c*-a,this.z=h*s+l*-a+c*-o-u*-n,this},project:(D=new Ke,function(t){return D.multiplyMatrices(t.projectionMatrix,D.getInverse(t.matrixWorld)),this.applyMatrix4(D)}),unproject:(O=new Ke,function(t){return O.multiplyMatrices(t.matrixWorld,O.getInverse(t.projectionMatrix)),this.applyMatrix4(O)}),transformDirection:function(t){var e=this.x,i=this.y,r=this.z,n=t.elements;return this.x=n[0]*e+n[4]*i+n[8]*r,this.y=n[1]*e+n[5]*i+n[9]*r,this.z=n[2]*e+n[6]*i+n[10]*r,this.normalize()},divide:function(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this},divideScalar:function(t){return this.multiplyScalar(1/t)},min:function(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this},max:function(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this},clamp:function(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this.z=Math.max(t.z,Math.min(e.z,this.z)),this},clampScalar:(R=new Qe,L=new Qe,function(t,e){return R.set(t,t,t),L.set(e,e,e),this.clamp(R,L)}),clampLength:function(t,e){var i=this.length();return this.divideScalar(i||1).multiplyScalar(Math.max(t,Math.min(e,i)))},floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this},ceil:function(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this},round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this},roundToZero:function(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z),this},negate:function(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this},dot:function(t){return this.x*t.x+this.y*t.y+this.z*t.z},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)},manhattanLength:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)},normalize:function(){return this.divideScalar(this.length()||1)},setLength:function(t){return this.normalize().multiplyScalar(t)},lerp:function(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this},lerpVectors:function(t,e,i){return this.subVectors(e,t).multiplyScalar(i).add(t)},cross:function(t,e){return void 0!==e?(console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."),this.crossVectors(t,e)):this.crossVectors(this,t)},crossVectors:function(t,e){var i=t.x,r=t.y,n=t.z,o=e.x,a=e.y,s=e.z;return this.x=r*s-n*a,this.y=n*o-i*s,this.z=i*a-r*o,this},projectOnVector:function(t){var e=t.dot(this)/t.lengthSq();return this.copy(t).multiplyScalar(e)},projectOnPlane:(I=new Qe,function(t){return I.copy(this).projectOnVector(t),this.sub(I)}),reflect:(T=new Qe,function(t){return this.sub(T.copy(t).multiplyScalar(2*this.dot(t)))}),angleTo:function(t){var e=this.dot(t)/Math.sqrt(this.lengthSq()*t.lengthSq());return Math.acos(Ye.clamp(e,-1,1))},distanceTo:function(t){return Math.sqrt(this.distanceToSquared(t))},distanceToSquared:function(t){var e=this.x-t.x,i=this.y-t.y,r=this.z-t.z;return e*e+i*i+r*r},manhattanDistanceTo:function(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)+Math.abs(this.z-t.z)},setFromSpherical:function(t){var e=Math.sin(t.phi)*t.radius;return this.x=e*Math.sin(t.theta),this.y=Math.cos(t.phi)*t.radius,this.z=e*Math.cos(t.theta),this},setFromCylindrical:function(t){return this.x=t.radius*Math.sin(t.theta),this.y=t.y,this.z=t.radius*Math.cos(t.theta),this},setFromMatrixPosition:function(t){var e=t.elements;return this.x=e[12],this.y=e[13],this.z=e[14],this},setFromMatrixScale:function(t){var e=this.setFromMatrixColumn(t,0).length(),i=this.setFromMatrixColumn(t,1).length(),r=this.setFromMatrixColumn(t,2).length();return this.x=e,this.y=i,this.z=r,this},setFromMatrixColumn:function(t,e){return this.fromArray(t.elements,4*e)},equals:function(t){return t.x===this.x&&t.y===this.y&&t.z===this.z},fromArray:function(t,e){return void 0===e&&(e=0),this.x=t[e],this.y=t[e+1],this.z=t[e+2],this},toArray:function(t,e){return void 0===t&&(t=[]),void 0===e&&(e=0),t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t},fromBufferAttribute:function(t,e,i){return void 0!==i&&console.warn("THREE.Vector3: offset has been removed from .fromBufferAttribute()."),this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this}}),Object.assign(ti.prototype,{isMatrix3:!0,set:function(t,e,i,r,n,o,a,s,c){var u=this.elements;return u[0]=t,u[1]=r,u[2]=a,u[3]=e,u[4]=n,u[5]=s,u[6]=i,u[7]=o,u[8]=c,this},identity:function(){return this.set(1,0,0,0,1,0,0,0,1),this},clone:function(){return(new this.constructor).fromArray(this.elements)},copy:function(t){var e=this.elements,i=t.elements;return e[0]=i[0],e[1]=i[1],e[2]=i[2],e[3]=i[3],e[4]=i[4],e[5]=i[5],e[6]=i[6],e[7]=i[7],e[8]=i[8],this},setFromMatrix4:function(t){var e=t.elements;return this.set(e[0],e[4],e[8],e[1],e[5],e[9],e[2],e[6],e[10]),this},applyToBufferAttribute:(N=new Qe,function(t){for(var e=0,i=t.count;e<i;e++)N.x=t.getX(e),N.y=t.getY(e),N.z=t.getZ(e),N.applyMatrix3(this),t.setXYZ(e,N.x,N.y,N.z);return t}),multiply:function(t){return this.multiplyMatrices(this,t)},premultiply:function(t){return this.multiplyMatrices(t,this)},multiplyMatrices:function(t,e){var i=t.elements,r=e.elements,n=this.elements,o=i[0],a=i[3],s=i[6],c=i[1],u=i[4],h=i[7],l=i[2],p=i[5],d=i[8],f=r[0],m=r[3],g=r[6],v=r[1],y=r[4],b=r[7],x=r[2],_=r[5],w=r[8];return n[0]=o*f+a*v+s*x,n[3]=o*m+a*y+s*_,n[6]=o*g+a*b+s*w,n[1]=c*f+u*v+h*x,n[4]=c*m+u*y+h*_,n[7]=c*g+u*b+h*w,n[2]=l*f+p*v+d*x,n[5]=l*m+p*y+d*_,n[8]=l*g+p*b+d*w,this},multiplyScalar:function(t){var e=this.elements;return e[0]*=t,e[3]*=t,e[6]*=t,e[1]*=t,e[4]*=t,e[7]*=t,e[2]*=t,e[5]*=t,e[8]*=t,this},determinant:function(){var t=this.elements,e=t[0],i=t[1],r=t[2],n=t[3],o=t[4],a=t[5],s=t[6],c=t[7],u=t[8];return e*o*u-e*a*c-i*n*u+i*a*s+r*n*c-r*o*s},getInverse:function(t,e){t&&t.isMatrix4&&console.error("THREE.Matrix3: .getInverse() no longer takes a Matrix4 argument.");var i=t.elements,r=this.elements,n=i[0],o=i[1],a=i[2],s=i[3],c=i[4],u=i[5],h=i[6],l=i[7],p=i[8],d=p*c-u*l,f=u*h-p*s,m=l*s-c*h,g=n*d+o*f+a*m;if(0===g){var v="THREE.Matrix3: .getInverse() can't invert matrix, determinant is 0";if(!0===e)throw new Error(v);return console.warn(v),this.identity()}var y=1/g;return r[0]=d*y,r[1]=(a*l-p*o)*y,r[2]=(u*o-a*c)*y,r[3]=f*y,r[4]=(p*n-a*h)*y,r[5]=(a*s-u*n)*y,r[6]=m*y,r[7]=(o*h-l*n)*y,r[8]=(c*n-o*s)*y,this},transpose:function(){var t,e=this.elements;return t=e[1],e[1]=e[3],e[3]=t,t=e[2],e[2]=e[6],e[6]=t,t=e[5],e[5]=e[7],e[7]=t,this},getNormalMatrix:function(t){return this.setFromMatrix4(t).getInverse(this).transpose()},transposeIntoArray:function(t){var e=this.elements;return t[0]=e[0],t[1]=e[3],t[2]=e[6],t[3]=e[1],t[4]=e[4],t[5]=e[7],t[6]=e[2],t[7]=e[5],t[8]=e[8],this},setUvTransform:function(t,e,i,r,n,o,a){var s=Math.cos(n),c=Math.sin(n);this.set(i*s,i*c,-i*(s*o+c*a)+o+t,-r*c,r*s,-r*(-c*o+s*a)+a+e,0,0,1)},scale:function(t,e){var i=this.elements;return i[0]*=t,i[3]*=t,i[6]*=t,i[1]*=e,i[4]*=e,i[7]*=e,this},rotate:function(t){var e=Math.cos(t),i=Math.sin(t),r=this.elements,n=r[0],o=r[3],a=r[6],s=r[1],c=r[4],u=r[7];return r[0]=e*n+i*s,r[3]=e*o+i*c,r[6]=e*a+i*u,r[1]=-i*n+e*s,r[4]=-i*o+e*c,r[7]=-i*a+e*u,this},translate:function(t,e){var i=this.elements;return i[0]+=t*i[2],i[3]+=t*i[5],i[6]+=t*i[8],i[1]+=e*i[2],i[4]+=e*i[5],i[7]+=e*i[8],this},equals:function(t){for(var e=this.elements,i=t.elements,r=0;r<9;r++)if(e[r]!==i[r])return!1;return!0},fromArray:function(t,e){void 0===e&&(e=0);for(var i=0;i<9;i++)this.elements[i]=t[i+e];return this},toArray:function(t,e){void 0===t&&(t=[]),void 0===e&&(e=0);var i=this.elements;return t[e]=i[0],t[e+1]=i[1],t[e+2]=i[2],t[e+3]=i[3],t[e+4]=i[4],t[e+5]=i[5],t[e+6]=i[6],t[e+7]=i[7],t[e+8]=i[8],t}});var ei,ii,ri,ni,oi,ai,si,ci,ui,hi,li,pi,di,fi,mi,gi,vi,yi=0;function bi(t,e,i,r,n,o,a,s,c,u){Object.defineProperty(this,"id",{value:yi++}),this.uuid=Ye.generateUUID(),this.name="",this.image=void 0!==t?t:bi.DEFAULT_IMAGE,this.mipmaps=[],this.mapping=void 0!==e?e:bi.DEFAULT_MAPPING,this.wrapS=void 0!==i?i:zt,this.wrapT=void 0!==r?r:zt,this.magFilter=void 0!==n?n:Ht,this.minFilter=void 0!==o?o:Wt,this.anisotropy=void 0!==c?c:1,this.format=void 0!==a?a:se,this.type=void 0!==s?s:Xt,this.offset=new Ze(0,0),this.repeat=new Ze(1,1),this.center=new Ze(0,0),this.rotation=0,this.matrixAutoUpdate=!0,this.matrix=new ti,this.generateMipmaps=!0,this.premultiplyAlpha=!1,this.flipY=!0,this.unpackAlignment=4,this.encoding=void 0!==u?u:Ue,this.version=0,this.onUpdate=null}function xi(t,e,i,r){this.x=t||0,this.y=e||0,this.z=i||0,this.w=void 0!==r?r:1}function _i(t,e,i){this.width=t,this.height=e,this.scissor=new xi(0,0,t,e),this.scissorTest=!1,this.viewport=new xi(0,0,t,e),void 0===(i=i||{}).minFilter&&(i.minFilter=Ht),this.texture=new bi(void 0,void 0,i.wrapS,i.wrapT,i.magFilter,i.minFilter,i.format,i.type,i.anisotropy,i.encoding),this.depthBuffer=void 0===i.depthBuffer||i.depthBuffer,this.stencilBuffer=void 0===i.stencilBuffer||i.stencilBuffer,this.depthTexture=void 0!==i.depthTexture?i.depthTexture:null}function wi(t,e,i){_i.call(this,t,e,i),this.activeCubeFace=0,this.activeMipMapLevel=0}function Si(t,e,i,r,n,o,a,s,c,u,h,l){bi.call(this,null,o,a,s,c,u,r,n,h,l),this.image={data:t,width:e,height:i},this.magFilter=void 0!==c?c:jt,this.minFilter=void 0!==u?u:jt,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1}function Ai(t,e){this.min=void 0!==t?t:new Qe(1/0,1/0,1/0),this.max=void 0!==e?e:new Qe(-1/0,-1/0,-1/0)}function Mi(t,e){this.center=void 0!==t?t:new Qe,this.radius=void 0!==e?e:0}function Pi(t,e){this.normal=void 0!==t?t:new Qe(1,0,0),this.constant=void 0!==e?e:0}function Ei(t,e,i,r,n,o){this.planes=[void 0!==t?t:new Pi,void 0!==e?e:new Pi,void 0!==i?i:new Pi,void 0!==r?r:new Pi,void 0!==n?n:new Pi,void 0!==o?o:new Pi]}bi.DEFAULT_IMAGE=void 0,bi.DEFAULT_MAPPING=300,bi.prototype=Object.assign(Object.create(v.prototype),{constructor:bi,isTexture:!0,updateMatrix:function(){this.matrix.setUvTransform(this.offset.x,this.offset.y,this.repeat.x,this.repeat.y,this.rotation,this.center.x,this.center.y)},clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.name=t.name,this.image=t.image,this.mipmaps=t.mipmaps.slice(0),this.mapping=t.mapping,this.wrapS=t.wrapS,this.wrapT=t.wrapT,this.magFilter=t.magFilter,this.minFilter=t.minFilter,this.anisotropy=t.anisotropy,this.format=t.format,this.type=t.type,this.offset.copy(t.offset),this.repeat.copy(t.repeat),this.center.copy(t.center),this.rotation=t.rotation,this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrix.copy(t.matrix),this.generateMipmaps=t.generateMipmaps,this.premultiplyAlpha=t.premultiplyAlpha,this.flipY=t.flipY,this.unpackAlignment=t.unpackAlignment,this.encoding=t.encoding,this},toJSON:function(t){var e=void 0===t||"string"==typeof t;if(!e&&void 0!==t.textures[this.uuid])return t.textures[this.uuid];var i={metadata:{version:4.5,type:"Texture",generator:"Texture.toJSON"},uuid:this.uuid,name:this.name,mapping:this.mapping,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],center:[this.center.x,this.center.y],rotation:this.rotation,wrap:[this.wrapS,this.wrapT],format:this.format,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY};if(void 0!==this.image){var r=this.image;void 0===r.uuid&&(r.uuid=Ye.generateUUID()),e||void 0!==t.images[r.uuid]||(t.images[r.uuid]={uuid:r.uuid,url:function(t){var e;if(t instanceof HTMLCanvasElement)e=t;else{(e=document.createElementNS("http://www.w3.org/1999/xhtml","canvas")).width=t.width,e.height=t.height;var i=e.getContext("2d");t instanceof ImageData?i.putImageData(t,0,0):i.drawImage(t,0,0,t.width,t.height)}return 2048<e.width||2048<e.height?e.toDataURL("image/jpeg",.6):e.toDataURL("image/png")}(r)}),i.image=r.uuid}return e||(t.textures[this.uuid]=i),i},dispose:function(){this.dispatchEvent({type:"dispose"})},transformUv:function(t){if(300===this.mapping){if(t.applyMatrix3(this.matrix),t.x<0||1<t.x)switch(this.wrapS){case Ft:t.x=t.x-Math.floor(t.x);break;case zt:t.x=t.x<0?0:1;break;case Ut:1===Math.abs(Math.floor(t.x)%2)?t.x=Math.ceil(t.x)-t.x:t.x=t.x-Math.floor(t.x)}if(t.y<0||1<t.y)switch(this.wrapT){case Ft:t.y=t.y-Math.floor(t.y);break;case zt:t.y=t.y<0?0:1;break;case Ut:1===Math.abs(Math.floor(t.y)%2)?t.y=Math.ceil(t.y)-t.y:t.y=t.y-Math.floor(t.y)}this.flipY&&(t.y=1-t.y)}}}),Object.defineProperty(bi.prototype,"needsUpdate",{set:function(t){!0===t&&this.version++}}),Object.assign(xi.prototype,{isVector4:!0,set:function(t,e,i,r){return this.x=t,this.y=e,this.z=i,this.w=r,this},setScalar:function(t){return this.x=t,this.y=t,this.z=t,this.w=t,this},setX:function(t){return this.x=t,this},setY:function(t){return this.y=t,this},setZ:function(t){return this.z=t,this},setW:function(t){return this.w=t,this},setComponent:function(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;case 3:this.w=e;break;default:throw new Error("index is out of range: "+t)}return this},getComponent:function(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw new Error("index is out of range: "+t)}},clone:function(){return new this.constructor(this.x,this.y,this.z,this.w)},copy:function(t){return this.x=t.x,this.y=t.y,this.z=t.z,this.w=void 0!==t.w?t.w:1,this},add:function(t,e){return void 0!==e?(console.warn("THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this.z+=t.z,this.w+=t.w,this)},addScalar:function(t){return this.x+=t,this.y+=t,this.z+=t,this.w+=t,this},addVectors:function(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this.w=t.w+e.w,this},addScaledVector:function(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this.w+=t.w*e,this},sub:function(t,e){return void 0!==e?(console.warn("THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this.z-=t.z,this.w-=t.w,this)},subScalar:function(t){return this.x-=t,this.y-=t,this.z-=t,this.w-=t,this},subVectors:function(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this.w=t.w-e.w,this},multiplyScalar:function(t){return this.x*=t,this.y*=t,this.z*=t,this.w*=t,this},applyMatrix4:function(t){var e=this.x,i=this.y,r=this.z,n=this.w,o=t.elements;return this.x=o[0]*e+o[4]*i+o[8]*r+o[12]*n,this.y=o[1]*e+o[5]*i+o[9]*r+o[13]*n,this.z=o[2]*e+o[6]*i+o[10]*r+o[14]*n,this.w=o[3]*e+o[7]*i+o[11]*r+o[15]*n,this},divideScalar:function(t){return this.multiplyScalar(1/t)},setAxisAngleFromQuaternion:function(t){this.w=2*Math.acos(t.w);var e=Math.sqrt(1-t.w*t.w);return e<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=t.x/e,this.y=t.y/e,this.z=t.z/e),this},setAxisAngleFromRotationMatrix:function(t){var e,i,r,n,o=t.elements,a=o[0],s=o[4],c=o[8],u=o[1],h=o[5],l=o[9],p=o[2],d=o[6],f=o[10];if(Math.abs(s-u)<.01&&Math.abs(c-p)<.01&&Math.abs(l-d)<.01){if(Math.abs(s+u)<.1&&Math.abs(c+p)<.1&&Math.abs(l+d)<.1&&Math.abs(a+h+f-3)<.1)return this.set(1,0,0,0),this;e=Math.PI;var m=(a+1)/2,g=(h+1)/2,v=(f+1)/2,y=(s+u)/4,b=(c+p)/4,x=(l+d)/4;return g<m&&v<m?m<.01?(i=0,n=r=.707106781):(r=y/(i=Math.sqrt(m)),n=b/i):v<g?g<.01?(r=0,n=i=.707106781):(i=y/(r=Math.sqrt(g)),n=x/r):v<.01?(r=i=.707106781,n=0):(i=b/(n=Math.sqrt(v)),r=x/n),this.set(i,r,n,e),this}var _=Math.sqrt((d-l)*(d-l)+(c-p)*(c-p)+(u-s)*(u-s));return Math.abs(_)<.001&&(_=1),this.x=(d-l)/_,this.y=(c-p)/_,this.z=(u-s)/_,this.w=Math.acos((a+h+f-1)/2),this},min:function(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this.w=Math.min(this.w,t.w),this},max:function(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this.w=Math.max(this.w,t.w),this},clamp:function(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this.z=Math.max(t.z,Math.min(e.z,this.z)),this.w=Math.max(t.w,Math.min(e.w,this.w)),this},clampScalar:function(t,e){return void 0===ei&&(ei=new xi,ii=new xi),ei.set(t,t,t,t),ii.set(e,e,e,e),this.clamp(ei,ii)},clampLength:function(t,e){var i=this.length();return this.divideScalar(i||1).multiplyScalar(Math.max(t,Math.min(e,i)))},floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this.w=Math.floor(this.w),this},ceil:function(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this.w=Math.ceil(this.w),this},round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this.w=Math.round(this.w),this},roundToZero:function(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z),this.w=this.w<0?Math.ceil(this.w):Math.floor(this.w),this},negate:function(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this.w=-this.w,this},dot:function(t){return this.x*t.x+this.y*t.y+this.z*t.z+this.w*t.w},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},manhattanLength:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)},normalize:function(){return this.divideScalar(this.length()||1)},setLength:function(t){return this.normalize().multiplyScalar(t)},lerp:function(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this.w+=(t.w-this.w)*e,this},lerpVectors:function(t,e,i){return this.subVectors(e,t).multiplyScalar(i).add(t)},equals:function(t){return t.x===this.x&&t.y===this.y&&t.z===this.z&&t.w===this.w},fromArray:function(t,e){return void 0===e&&(e=0),this.x=t[e],this.y=t[e+1],this.z=t[e+2],this.w=t[e+3],this},toArray:function(t,e){return void 0===t&&(t=[]),void 0===e&&(e=0),t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t[e+3]=this.w,t},fromBufferAttribute:function(t,e,i){return void 0!==i&&console.warn("THREE.Vector4: offset has been removed from .fromBufferAttribute()."),this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this.w=t.getW(e),this}}),_i.prototype=Object.assign(Object.create(v.prototype),{constructor:_i,isWebGLRenderTarget:!0,setSize:function(t,e){this.width===t&&this.height===e||(this.width=t,this.height=e,this.dispose()),this.viewport.set(0,0,t,e),this.scissor.set(0,0,t,e)},clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.width=t.width,this.height=t.height,this.viewport.copy(t.viewport),this.texture=t.texture.clone(),this.depthBuffer=t.depthBuffer,this.stencilBuffer=t.stencilBuffer,this.depthTexture=t.depthTexture,this},dispose:function(){this.dispatchEvent({type:"dispose"})}}),((wi.prototype=Object.create(_i.prototype)).constructor=wi).prototype.isWebGLRenderTargetCube=!0,((Si.prototype=Object.create(bi.prototype)).constructor=Si).prototype.isDataTexture=!0,Object.assign(Ai.prototype,{isBox3:!0,set:function(t,e){return this.min.copy(t),this.max.copy(e),this},setFromArray:function(t){for(var e=1/0,i=1/0,r=1/0,n=-1/0,o=-1/0,a=-1/0,s=0,c=t.length;s<c;s+=3){var u=t[s],h=t[s+1],l=t[s+2];u<e&&(e=u),h<i&&(i=h),l<r&&(r=l),n<u&&(n=u),o<h&&(o=h),a<l&&(a=l)}return this.min.set(e,i,r),this.max.set(n,o,a),this},setFromBufferAttribute:function(t){for(var e=1/0,i=1/0,r=1/0,n=-1/0,o=-1/0,a=-1/0,s=0,c=t.count;s<c;s++){var u=t.getX(s),h=t.getY(s),l=t.getZ(s);u<e&&(e=u),h<i&&(i=h),l<r&&(r=l),n<u&&(n=u),o<h&&(o=h),a<l&&(a=l)}return this.min.set(e,i,r),this.max.set(n,o,a),this},setFromPoints:function(t){this.makeEmpty();for(var e=0,i=t.length;e<i;e++)this.expandByPoint(t[e]);return this},setFromCenterAndSize:(si=new Qe,function(t,e){var i=si.copy(e).multiplyScalar(.5);return this.min.copy(t).sub(i),this.max.copy(t).add(i),this}),setFromObject:function(t){return this.makeEmpty(),this.expandByObject(t)},clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.min.copy(t.min),this.max.copy(t.max),this},makeEmpty:function(){return this.min.x=this.min.y=this.min.z=1/0,this.max.x=this.max.y=this.max.z=-1/0,this},isEmpty:function(){return this.max.x<this.min.x||this.max.y<this.min.y||this.max.z<this.min.z},getCenter:function(t){return void 0===t&&(console.warn("THREE.Box3: .getCenter() target is now required"),t=new Qe),this.isEmpty()?t.set(0,0,0):t.addVectors(this.min,this.max).multiplyScalar(.5)},getSize:function(t){return void 0===t&&(console.warn("THREE.Box3: .getSize() target is now required"),t=new Qe),this.isEmpty()?t.set(0,0,0):t.subVectors(this.max,this.min)},expandByPoint:function(t){return this.min.min(t),this.max.max(t),this},expandByVector:function(t){return this.min.sub(t),this.max.add(t),this},expandByScalar:function(t){return this.min.addScalar(-t),this.max.addScalar(t),this},expandByObject:function(){var n,o,a,s=new Qe;function e(t){var e=t.geometry;if(void 0!==e)if(e.isGeometry){var i=e.vertices;for(o=0,a=i.length;o<a;o++)s.copy(i[o]),s.applyMatrix4(t.matrixWorld),n.expandByPoint(s)}else if(e.isBufferGeometry){var r=e.attributes.position;if(void 0!==r)for(o=0,a=r.count;o<a;o++)s.fromBufferAttribute(r,o).applyMatrix4(t.matrixWorld),n.expandByPoint(s)}}return function(t){return n=this,t.updateMatrixWorld(!0),t.traverse(e),this}}(),containsPoint:function(t){return!(t.x<this.min.x||t.x>this.max.x||t.y<this.min.y||t.y>this.max.y||t.z<this.min.z||t.z>this.max.z)},containsBox:function(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y&&this.min.z<=t.min.z&&t.max.z<=this.max.z},getParameter:function(t,e){return void 0===e&&(console.warn("THREE.Box3: .getParameter() target is now required"),e=new Qe),e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y),(t.z-this.min.z)/(this.max.z-this.min.z))},intersectsBox:function(t){return!(t.max.x<this.min.x||t.min.x>this.max.x||t.max.y<this.min.y||t.min.y>this.max.y||t.max.z<this.min.z||t.min.z>this.max.z)},intersectsSphere:(ai=new Qe,function(t){return this.clampPoint(t.center,ai),ai.distanceToSquared(t.center)<=t.radius*t.radius}),intersectsPlane:function(t){var e,i;return 0<t.normal.x?(e=t.normal.x*this.min.x,i=t.normal.x*this.max.x):(e=t.normal.x*this.max.x,i=t.normal.x*this.min.x),0<t.normal.y?(e+=t.normal.y*this.min.y,i+=t.normal.y*this.max.y):(e+=t.normal.y*this.max.y,i+=t.normal.y*this.min.y),0<t.normal.z?(e+=t.normal.z*this.min.z,i+=t.normal.z*this.max.z):(e+=t.normal.z*this.max.z,i+=t.normal.z*this.min.z),e<=t.constant&&i>=t.constant},intersectsTriangle:function(){var s=new Qe,c=new Qe,u=new Qe,i=new Qe,r=new Qe,n=new Qe,h=new Qe,o=new Qe,l=new Qe,a=new Qe;function p(t){var e,i;for(e=0,i=t.length-3;e<=i;e+=3){h.fromArray(t,e);var r=l.x*Math.abs(h.x)+l.y*Math.abs(h.y)+l.z*Math.abs(h.z),n=s.dot(h),o=c.dot(h),a=u.dot(h);if(Math.max(-Math.max(n,o,a),Math.min(n,o,a))>r)return!1}return!0}return function(t){if(this.isEmpty())return!1;this.getCenter(o),l.subVectors(this.max,o),s.subVectors(t.a,o),c.subVectors(t.b,o),u.subVectors(t.c,o),i.subVectors(c,s),r.subVectors(u,c),n.subVectors(s,u);var e=[0,-i.z,i.y,0,-r.z,r.y,0,-n.z,n.y,i.z,0,-i.x,r.z,0,-r.x,n.z,0,-n.x,-i.y,i.x,0,-r.y,r.x,0,-n.y,n.x,0];return!!p(e)&&(!!p(e=[1,0,0,0,1,0,0,0,1])&&(a.crossVectors(i,r),p(e=[a.x,a.y,a.z])))}}(),clampPoint:function(t,e){return void 0===e&&(console.warn("THREE.Box3: .clampPoint() target is now required"),e=new Qe),e.copy(t).clamp(this.min,this.max)},distanceToPoint:(oi=new Qe,function(t){return oi.copy(t).clamp(this.min,this.max).sub(t).length()}),getBoundingSphere:(ni=new Qe,function(t){return void 0===t&&(console.warn("THREE.Box3: .getBoundingSphere() target is now required"),t=new Mi),this.getCenter(t.center),t.radius=.5*this.getSize(ni).length(),t}),intersect:function(t){return this.min.max(t.min),this.max.min(t.max),this.isEmpty()&&this.makeEmpty(),this},union:function(t){return this.min.min(t.min),this.max.max(t.max),this},applyMatrix4:(ri=[new Qe,new Qe,new Qe,new Qe,new Qe,new Qe,new Qe,new Qe],function(t){return this.isEmpty()||(ri[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(t),ri[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(t),ri[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(t),ri[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(t),ri[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(t),ri[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(t),ri[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(t),ri[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(t),this.setFromPoints(ri)),this}),translate:function(t){return this.min.add(t),this.max.add(t),this},equals:function(t){return t.min.equals(this.min)&&t.max.equals(this.max)}}),Object.assign(Mi.prototype,{set:function(t,e){return this.center.copy(t),this.radius=e,this},setFromPoints:(ci=new Ai,function(t,e){var i=this.center;void 0!==e?i.copy(e):ci.setFromPoints(t).getCenter(i);for(var r=0,n=0,o=t.length;n<o;n++)r=Math.max(r,i.distanceToSquared(t[n]));return this.radius=Math.sqrt(r),this}),clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.center.copy(t.center),this.radius=t.radius,this},empty:function(){return this.radius<=0},containsPoint:function(t){return t.distanceToSquared(this.center)<=this.radius*this.radius},distanceToPoint:function(t){return t.distanceTo(this.center)-this.radius},intersectsSphere:function(t){var e=this.radius+t.radius;return t.center.distanceToSquared(this.center)<=e*e},intersectsBox:function(t){return t.intersectsSphere(this)},intersectsPlane:function(t){return Math.abs(t.distanceToPoint(this.center))<=this.radius},clampPoint:function(t,e){var i=this.center.distanceToSquared(t);return void 0===e&&(console.warn("THREE.Sphere: .clampPoint() target is now required"),e=new Qe),e.copy(t),i>this.radius*this.radius&&(e.sub(this.center).normalize(),e.multiplyScalar(this.radius).add(this.center)),e},getBoundingBox:function(t){return void 0===t&&(console.warn("THREE.Sphere: .getBoundingBox() target is now required"),t=new Ai),t.set(this.center,this.center),t.expandByScalar(this.radius),t},applyMatrix4:function(t){return this.center.applyMatrix4(t),this.radius=this.radius*t.getMaxScaleOnAxis(),this},translate:function(t){return this.center.add(t),this},equals:function(t){return t.center.equals(this.center)&&t.radius===this.radius}}),Object.assign(Pi.prototype,{set:function(t,e){return this.normal.copy(t),this.constant=e,this},setComponents:function(t,e,i,r){return this.normal.set(t,e,i),this.constant=r,this},setFromNormalAndCoplanarPoint:function(t,e){return this.normal.copy(t),this.constant=-e.dot(this.normal),this},setFromCoplanarPoints:(pi=new Qe,di=new Qe,function(t,e,i){var r=pi.subVectors(i,e).cross(di.subVectors(t,e)).normalize();return this.setFromNormalAndCoplanarPoint(r,t),this}),clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.normal.copy(t.normal),this.constant=t.constant,this},normalize:function(){var t=1/this.normal.length();return this.normal.multiplyScalar(t),this.constant*=t,this},negate:function(){return this.constant*=-1,this.normal.negate(),this},distanceToPoint:function(t){return this.normal.dot(t)+this.constant},distanceToSphere:function(t){return this.distanceToPoint(t.center)-t.radius},projectPoint:function(t,e){return void 0===e&&(console.warn("THREE.Plane: .projectPoint() target is now required"),e=new Qe),e.copy(this.normal).multiplyScalar(-this.distanceToPoint(t)).add(t)},intersectLine:(li=new Qe,function(t,e){void 0===e&&(console.warn("THREE.Plane: .intersectLine() target is now required"),e=new Qe);var i=t.delta(li),r=this.normal.dot(i);if(0===r)return 0===this.distanceToPoint(t.start)?e.copy(t.start):void 0;var n=-(t.start.dot(this.normal)+this.constant)/r;return n<0||1<n?void 0:e.copy(i).multiplyScalar(n).add(t.start)}),intersectsLine:function(t){var e=this.distanceToPoint(t.start),i=this.distanceToPoint(t.end);return e<0&&0<i||i<0&&0<e},intersectsBox:function(t){return t.intersectsPlane(this)},intersectsSphere:function(t){return t.intersectsPlane(this)},coplanarPoint:function(t){return void 0===t&&(console.warn("THREE.Plane: .coplanarPoint() target is now required"),t=new Qe),t.copy(this.normal).multiplyScalar(-this.constant)},applyMatrix4:(ui=new Qe,hi=new ti,function(t,e){var i=e||hi.getNormalMatrix(t),r=this.coplanarPoint(ui).applyMatrix4(t),n=this.normal.applyMatrix3(i).normalize();return this.constant=-r.dot(n),this}),translate:function(t){return this.constant-=t.dot(this.normal),this},equals:function(t){return t.normal.equals(this.normal)&&t.constant===this.constant}}),Object.assign(Ei.prototype,{set:function(t,e,i,r,n,o){var a=this.planes;return a[0].copy(t),a[1].copy(e),a[2].copy(i),a[3].copy(r),a[4].copy(n),a[5].copy(o),this},clone:function(){return(new this.constructor).copy(this)},copy:function(t){for(var e=this.planes,i=0;i<6;i++)e[i].copy(t.planes[i]);return this},setFromMatrix:function(t){var e=this.planes,i=t.elements,r=i[0],n=i[1],o=i[2],a=i[3],s=i[4],c=i[5],u=i[6],h=i[7],l=i[8],p=i[9],d=i[10],f=i[11],m=i[12],g=i[13],v=i[14],y=i[15];return e[0].setComponents(a-r,h-s,f-l,y-m).normalize(),e[1].setComponents(a+r,h+s,f+l,y+m).normalize(),e[2].setComponents(a+n,h+c,f+p,y+g).normalize(),e[3].setComponents(a-n,h-c,f-p,y-g).normalize(),e[4].setComponents(a-o,h-u,f-d,y-v).normalize(),e[5].setComponents(a+o,h+u,f+d,y+v).normalize(),this},intersectsObject:(vi=new Mi,function(t){var e=t.geometry;return null===e.boundingSphere&&e.computeBoundingSphere(),vi.copy(e.boundingSphere).applyMatrix4(t.matrixWorld),this.intersectsSphere(vi)}),intersectsSprite:(gi=new Mi,function(t){return gi.center.set(0,0,0),gi.radius=.7071067811865476,gi.applyMatrix4(t.matrixWorld),this.intersectsSphere(gi)}),intersectsSphere:function(t){for(var e=this.planes,i=t.center,r=-t.radius,n=0;n<6;n++){if(e[n].distanceToPoint(i)<r)return!1}return!0},intersectsBox:(fi=new Qe,mi=new Qe,function(t){for(var e=this.planes,i=0;i<6;i++){var r=e[i];fi.x=0<r.normal.x?t.min.x:t.max.x,mi.x=0<r.normal.x?t.max.x:t.min.x,fi.y=0<r.normal.y?t.min.y:t.max.y,mi.y=0<r.normal.y?t.max.y:t.min.y,fi.z=0<r.normal.z?t.min.z:t.max.z,mi.z=0<r.normal.z?t.max.z:t.min.z;var n=r.distanceToPoint(fi),o=r.distanceToPoint(mi);if(n<0&&o<0)return!1}return!0}),containsPoint:function(t){for(var e=this.planes,i=0;i<6;i++)if(e[i].distanceToPoint(t)<0)return!1;return!0}});var Ci,Ti={alphamap_fragment:"#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\n#endif\n",alphamap_pars_fragment:"#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif\n",alphatest_fragment:"#ifdef ALPHATEST\n\tif ( diffuseColor.a < ALPHATEST ) discard;\n#endif\n",aomap_fragment:"#ifdef USE_AOMAP\n\tfloat ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\n\treflectedLight.indirectDiffuse *= ambientOcclusion;\n\t#if defined( USE_ENVMAP ) && defined( PHYSICAL )\n\t\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.specularRoughness );\n\t#endif\n#endif\n",aomap_pars_fragment:"#ifdef USE_AOMAP\n\tuniform sampler2D aoMap;\n\tuniform float aoMapIntensity;\n#endif",begin_vertex:"\nvec3 transformed = vec3( position );\n",beginnormal_vertex:"\nvec3 objectNormal = vec3( normal );\n",bsdfs:"float punctualLightIntensityToIrradianceFactor( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n\tif( decayExponent > 0.0 ) {\n#if defined ( PHYSICALLY_CORRECT_LIGHTS )\n\t\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n\t\tfloat maxDistanceCutoffFactor = pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t\treturn distanceFalloff * maxDistanceCutoffFactor;\n#else\n\t\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\n#endif\n\t}\n\treturn 1.0;\n}\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\n\treturn RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\n\treturn ( 1.0 - specularColor ) * fresnel + specularColor;\n}\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\tfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\treturn 1.0 / ( gl * gv );\n}\nfloat G_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\treturn 0.5 / max( gv + gl, EPSILON );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n\tfloat a2 = pow2( alpha );\n\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n\treturn RECIPROCAL_PI * a2 / pow2( denom );\n}\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float roughness ) {\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNL = saturate( dot( geometry.normal, incidentLight.direction ) );\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\tfloat D = D_GGX( alpha, dotNH );\n\treturn F * ( G * D );\n}\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\n\tconst float LUT_SIZE  = 64.0;\n\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\n\tconst float LUT_BIAS  = 0.5 / LUT_SIZE;\n\tfloat dotNV = saturate( dot( N, V ) );\n\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\n\tuv = uv * LUT_SCALE + LUT_BIAS;\n\treturn uv;\n}\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\n\tfloat l = length( f );\n\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\n}\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\n\tfloat x = dot( v1, v2 );\n\tfloat y = abs( x );\n\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\n\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\n\tfloat v = a / b;\n\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\n\treturn cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n\tvec3 lightNormal = cross( v1, v2 );\n\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n\tvec3 T1, T2;\n\tT1 = normalize( V - N * dot( V, N ) );\n\tT2 = - cross( N, T1 );\n\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\n\tvec3 coords[ 4 ];\n\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n\tcoords[ 0 ] = normalize( coords[ 0 ] );\n\tcoords[ 1 ] = normalize( coords[ 1 ] );\n\tcoords[ 2 ] = normalize( coords[ 2 ] );\n\tcoords[ 3 ] = normalize( coords[ 3 ] );\n\tvec3 vectorFormFactor = vec3( 0.0 );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\n\treturn vec3( result );\n}\nvec3 BRDF_Specular_GGX_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness ) {\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\n\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\n\tvec4 r = roughness * c0 + c1;\n\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\n\tvec2 AB = vec2( -1.04, 1.04 ) * a004 + r.zw;\n\treturn specularColor * AB.x + AB.y;\n}\nfloat G_BlinnPhong_Implicit( ) {\n\treturn 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n}\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\n\treturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\n}\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\n\treturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );\n}\n",bumpmap_pars_fragment:"#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vUv );\n\t\tvec2 dSTdy = dFdy( vUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n\t\treturn vec2( dBx, dBy );\n\t}\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\n\t\tvec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\n\t\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\n\t\tvec3 vN = surf_norm;\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\t\tfloat fDet = dot( vSigmaX, R1 );\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\t}\n#endif\n",clipping_planes_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvec4 plane;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\tplane = clippingPlanes[ i ];\n\t\tif ( dot( vViewPosition, plane.xyz ) > plane.w ) discard;\n\t}\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\tbool clipped = true;\n\t\t#pragma unroll_loop\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vViewPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t}\n\t\tif ( clipped ) discard;\n\t#endif\n#endif\n",clipping_planes_pars_fragment:"#if NUM_CLIPPING_PLANES > 0\n\t#if ! defined( PHYSICAL ) && ! defined( PHONG )\n\t\tvarying vec3 vViewPosition;\n\t#endif\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif\n",clipping_planes_pars_vertex:"#if NUM_CLIPPING_PLANES > 0 && ! defined( PHYSICAL ) && ! defined( PHONG )\n\tvarying vec3 vViewPosition;\n#endif\n",clipping_planes_vertex:"#if NUM_CLIPPING_PLANES > 0 && ! defined( PHYSICAL ) && ! defined( PHONG )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n",color_fragment:"#ifdef USE_COLOR\n\tdiffuseColor.rgb *= vColor;\n#endif",color_pars_fragment:"#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif\n",color_pars_vertex:"#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif",color_vertex:"#ifdef USE_COLOR\n\tvColor.xyz = color.xyz;\n#endif",common:"#define PI 3.14159265359\n#define PI2 6.28318530718\n#define PI_HALF 1.5707963267949\n#define RECIPROCAL_PI 0.31830988618\n#define RECIPROCAL_PI2 0.15915494\n#define LOG2 1.442695\n#define EPSILON 1e-6\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#define whiteCompliment(a) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\nhighp float rand( const in vec2 uv ) {\n\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\n\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n\treturn fract(sin(sn) * c);\n}\nstruct IncidentLight {\n\tvec3 color;\n\tvec3 direction;\n\tbool visible;\n};\nstruct ReflectedLight {\n\tvec3 directDiffuse;\n\tvec3 directSpecular;\n\tvec3 indirectDiffuse;\n\tvec3 indirectSpecular;\n};\nstruct GeometricContext {\n\tvec3 position;\n\tvec3 normal;\n\tvec3 viewDir;\n};\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\tfloat distance = dot( planeNormal, point - pointOnPlane );\n\treturn - distance * planeNormal + point;\n}\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn sign( dot( point - pointOnPlane, planeNormal ) );\n}\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\n}\nmat3 transposeMat3( const in mat3 m ) {\n\tmat3 tmp;\n\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\n\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\n\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\n\treturn tmp;\n}\nfloat linearToRelativeLuminance( const in vec3 color ) {\n\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\n\treturn dot( weights, color.rgb );\n}\n",cube_uv_reflection_fragment:"#ifdef ENVMAP_TYPE_CUBE_UV\n#define cubeUV_textureSize (1024.0)\nint getFaceFromDirection(vec3 direction) {\n\tvec3 absDirection = abs(direction);\n\tint face = -1;\n\tif( absDirection.x > absDirection.z ) {\n\t\tif(absDirection.x > absDirection.y )\n\t\t\tface = direction.x > 0.0 ? 0 : 3;\n\t\telse\n\t\t\tface = direction.y > 0.0 ? 1 : 4;\n\t}\n\telse {\n\t\tif(absDirection.z > absDirection.y )\n\t\t\tface = direction.z > 0.0 ? 2 : 5;\n\t\telse\n\t\t\tface = direction.y > 0.0 ? 1 : 4;\n\t}\n\treturn face;\n}\n#define cubeUV_maxLods1  (log2(cubeUV_textureSize*0.25) - 1.0)\n#define cubeUV_rangeClamp (exp2((6.0 - 1.0) * 2.0))\nvec2 MipLevelInfo( vec3 vec, float roughnessLevel, float roughness ) {\n\tfloat scale = exp2(cubeUV_maxLods1 - roughnessLevel);\n\tfloat dxRoughness = dFdx(roughness);\n\tfloat dyRoughness = dFdy(roughness);\n\tvec3 dx = dFdx( vec * scale * dxRoughness );\n\tvec3 dy = dFdy( vec * scale * dyRoughness );\n\tfloat d = max( dot( dx, dx ), dot( dy, dy ) );\n\td = clamp(d, 1.0, cubeUV_rangeClamp);\n\tfloat mipLevel = 0.5 * log2(d);\n\treturn vec2(floor(mipLevel), fract(mipLevel));\n}\n#define cubeUV_maxLods2 (log2(cubeUV_textureSize*0.25) - 2.0)\n#define cubeUV_rcpTextureSize (1.0 / cubeUV_textureSize)\nvec2 getCubeUV(vec3 direction, float roughnessLevel, float mipLevel) {\n\tmipLevel = roughnessLevel > cubeUV_maxLods2 - 3.0 ? 0.0 : mipLevel;\n\tfloat a = 16.0 * cubeUV_rcpTextureSize;\n\tvec2 exp2_packed = exp2( vec2( roughnessLevel, mipLevel ) );\n\tvec2 rcp_exp2_packed = vec2( 1.0 ) / exp2_packed;\n\tfloat powScale = exp2_packed.x * exp2_packed.y;\n\tfloat scale = rcp_exp2_packed.x * rcp_exp2_packed.y * 0.25;\n\tfloat mipOffset = 0.75*(1.0 - rcp_exp2_packed.y) * rcp_exp2_packed.x;\n\tbool bRes = mipLevel == 0.0;\n\tscale =  bRes && (scale < a) ? a : scale;\n\tvec3 r;\n\tvec2 offset;\n\tint face = getFaceFromDirection(direction);\n\tfloat rcpPowScale = 1.0 / powScale;\n\tif( face == 0) {\n\t\tr = vec3(direction.x, -direction.z, direction.y);\n\t\toffset = vec2(0.0+mipOffset,0.75 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\n\t}\n\telse if( face == 1) {\n\t\tr = vec3(direction.y, direction.x, direction.z);\n\t\toffset = vec2(scale+mipOffset, 0.75 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\n\t}\n\telse if( face == 2) {\n\t\tr = vec3(direction.z, direction.x, direction.y);\n\t\toffset = vec2(2.0*scale+mipOffset, 0.75 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\n\t}\n\telse if( face == 3) {\n\t\tr = vec3(direction.x, direction.z, direction.y);\n\t\toffset = vec2(0.0+mipOffset,0.5 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\n\t}\n\telse if( face == 4) {\n\t\tr = vec3(direction.y, direction.x, -direction.z);\n\t\toffset = vec2(scale+mipOffset, 0.5 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\n\t}\n\telse {\n\t\tr = vec3(direction.z, -direction.x, direction.y);\n\t\toffset = vec2(2.0*scale+mipOffset, 0.5 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\n\t}\n\tr = normalize(r);\n\tfloat texelOffset = 0.5 * cubeUV_rcpTextureSize;\n\tvec2 s = ( r.yz / abs( r.x ) + vec2( 1.0 ) ) * 0.5;\n\tvec2 base = offset + vec2( texelOffset );\n\treturn base + s * ( scale - 2.0 * texelOffset );\n}\n#define cubeUV_maxLods3 (log2(cubeUV_textureSize*0.25) - 3.0)\nvec4 textureCubeUV(vec3 reflectedDirection, float roughness ) {\n\tfloat roughnessVal = roughness* cubeUV_maxLods3;\n\tfloat r1 = floor(roughnessVal);\n\tfloat r2 = r1 + 1.0;\n\tfloat t = fract(roughnessVal);\n\tvec2 mipInfo = MipLevelInfo(reflectedDirection, r1, roughness);\n\tfloat s = mipInfo.y;\n\tfloat level0 = mipInfo.x;\n\tfloat level1 = level0 + 1.0;\n\tlevel1 = level1 > 5.0 ? 5.0 : level1;\n\tlevel0 += min( floor( s + 0.5 ), 5.0 );\n\tvec2 uv_10 = getCubeUV(reflectedDirection, r1, level0);\n\tvec4 color10 = envMapTexelToLinear(texture2D(envMap, uv_10));\n\tvec2 uv_20 = getCubeUV(reflectedDirection, r2, level0);\n\tvec4 color20 = envMapTexelToLinear(texture2D(envMap, uv_20));\n\tvec4 result = mix(color10, color20, t);\n\treturn vec4(result.rgb, 1.0);\n}\n#endif\n",defaultnormal_vertex:"vec3 transformedNormal = normalMatrix * objectNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\n",displacementmap_pars_vertex:"#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif\n",displacementmap_vertex:"#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, uv ).x * displacementScale + displacementBias );\n#endif\n",emissivemap_fragment:"#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\n\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif\n",emissivemap_pars_fragment:"#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif\n",encodings_fragment:"  gl_FragColor = linearToOutputTexel( gl_FragColor );\n",encodings_pars_fragment:"\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.xyz, vec3( gammaFactor ) ), value.w );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.xyz, vec3( 1.0 / gammaFactor ) ), value.w );\n}\nvec4 sRGBToLinear( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.w );\n}\nvec4 LinearTosRGB( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.w );\n}\nvec4 RGBEToLinear( in vec4 value ) {\n\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}\nvec4 LinearToRGBE( in vec4 value ) {\n\tfloat maxComponent = max( max( value.r, value.g ), value.b );\n\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n}\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.xyz * value.w * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.x, max( value.g, value.b ) );\n\tfloat M      = clamp( maxRGB / maxRange, 0.0, 1.0 );\n\tM            = ceil( M * 255.0 ) / 255.0;\n\treturn vec4( value.rgb / ( M * maxRange ), M );\n}\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.x, max( value.g, value.b ) );\n\tfloat D      = max( maxRange / maxRGB, 1.0 );\n\tD            = min( floor( D ) / 255.0, 1.0 );\n\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\n}\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\nvec4 LinearToLogLuv( in vec4 value )  {\n\tvec3 Xp_Y_XYZp = value.rgb * cLogLuvM;\n\tXp_Y_XYZp = max(Xp_Y_XYZp, vec3(1e-6, 1e-6, 1e-6));\n\tvec4 vResult;\n\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\n\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\n\tvResult.w = fract(Le);\n\tvResult.z = (Le - (floor(vResult.w*255.0))/255.0)/255.0;\n\treturn vResult;\n}\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\nvec4 LogLuvToLinear( in vec4 value ) {\n\tfloat Le = value.z * 255.0 + value.w;\n\tvec3 Xp_Y_XYZp;\n\tXp_Y_XYZp.y = exp2((Le - 127.0) / 2.0);\n\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\n\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\n\tvec3 vRGB = Xp_Y_XYZp.rgb * cLogLuvInverseM;\n\treturn vec4( max(vRGB, 0.0), 1.0 );\n}\n",envmap_fragment:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\tvec3 cameraToVertex = normalize( vWorldPosition - cameraPosition );\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#else\n\t\tvec3 reflectVec = vReflect;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#elif defined( ENVMAP_TYPE_EQUIREC )\n\t\tvec2 sampleUV;\n\t\treflectVec = normalize( reflectVec );\n\t\tsampleUV.y = asin( clamp( reflectVec.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\t\tsampleUV.x = atan( reflectVec.z, reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\n\t\tvec4 envColor = texture2D( envMap, sampleUV );\n\t#elif defined( ENVMAP_TYPE_SPHERE )\n\t\treflectVec = normalize( reflectVec );\n\t\tvec3 reflectView = normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0, 0.0, 1.0 ) );\n\t\tvec4 envColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5 );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\tenvColor = envMapTexelToLinear( envColor );\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\t#endif\n#endif\n",envmap_pars_fragment:"#if defined( USE_ENVMAP ) || defined( PHYSICAL )\n\tuniform float reflectivity;\n\tuniform float envMapIntensity;\n#endif\n#ifdef USE_ENVMAP\n\t#if ! defined( PHYSICAL ) && ( defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) )\n\t\tvarying vec3 vWorldPosition;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n\tuniform float flipEnvMap;\n\tuniform int maxMipLevel;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( PHYSICAL )\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif\n",envmap_pars_vertex:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\tvarying vec3 vWorldPosition;\n\t#else\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\t#endif\n#endif\n",envmap_vertex:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\tvWorldPosition = worldPosition.xyz;\n\t#else\n\t\tvec3 cameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#endif\n#endif\n",fog_vertex:"\n#ifdef USE_FOG\nfogDepth = -mvPosition.z;\n#endif",fog_pars_vertex:"#ifdef USE_FOG\n  varying float fogDepth;\n#endif\n",fog_fragment:"#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = whiteCompliment( exp2( - fogDensity * fogDensity * fogDepth * fogDepth * LOG2 ) );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, fogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif\n",fog_pars_fragment:"#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying float fogDepth;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif\n",gradientmap_pars_fragment:"#ifdef TOON\n\tuniform sampler2D gradientMap;\n\tvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\t\tfloat dotNL = dot( normal, lightDirection );\n\t\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\t\t#ifdef USE_GRADIENTMAP\n\t\t\treturn texture2D( gradientMap, coord ).rgb;\n\t\t#else\n\t\t\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\n\t\t#endif\n\t}\n#endif\n",lightmap_fragment:"#ifdef USE_LIGHTMAP\n\treflectedLight.indirectDiffuse += PI * texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n#endif\n",lightmap_pars_fragment:"#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif",lights_lambert_vertex:"vec3 diffuse = vec3( 1.0 );\nGeometricContext geometry;\ngeometry.position = mvPosition.xyz;\ngeometry.normal = normalize( transformedNormal );\ngeometry.viewDir = normalize( -mvPosition.xyz );\nGeometricContext backGeometry;\nbackGeometry.position = geometry.position;\nbackGeometry.normal = -geometry.normal;\nbackGeometry.viewDir = geometry.viewDir;\nvLightFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\n\tvLightBack = vec3( 0.0 );\n#endif\nIncidentLight directLight;\nfloat dotNL;\nvec3 directLightColor_Diffuse;\n#if NUM_POINT_LIGHTS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tgetPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tgetSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n#endif\n#if NUM_DIR_LIGHTS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tgetDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\tvLightFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\n\t\t#endif\n\t}\n#endif\n",lights_pars_begin:"uniform vec3 ambientLightColor;\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treturn irradiance;\n}\n#if NUM_DIR_LIGHTS > 0\n\tstruct DirectionalLight {\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tint shadow;\n\t\tfloat shadowBias;\n\t\tfloat shadowRadius;\n\t\tvec2 shadowMapSize;\n\t};\n\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n\tvoid getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tdirectLight.color = directionalLight.color;\n\t\tdirectLight.direction = directionalLight.direction;\n\t\tdirectLight.visible = true;\n\t}\n#endif\n#if NUM_POINT_LIGHTS > 0\n\tstruct PointLight {\n\t\tvec3 position;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tint shadow;\n\t\tfloat shadowBias;\n\t\tfloat shadowRadius;\n\t\tvec2 shadowMapSize;\n\t\tfloat shadowCameraNear;\n\t\tfloat shadowCameraFar;\n\t};\n\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n\tvoid getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = pointLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tdirectLight.color = pointLight.color;\n\t\tdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\n\t\tdirectLight.visible = ( directLight.color != vec3( 0.0 ) );\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tstruct SpotLight {\n\t\tvec3 position;\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tfloat coneCos;\n\t\tfloat penumbraCos;\n\t\tint shadow;\n\t\tfloat shadowBias;\n\t\tfloat shadowRadius;\n\t\tvec2 shadowMapSize;\n\t};\n\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n\tvoid getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight  ) {\n\t\tvec3 lVector = spotLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tfloat angleCos = dot( directLight.direction, spotLight.direction );\n\t\tif ( angleCos > spotLight.coneCos ) {\n\t\t\tfloat spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\t\tdirectLight.color = spotLight.color;\n\t\t\tdirectLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tdirectLight.visible = true;\n\t\t} else {\n\t\t\tdirectLight.color = vec3( 0.0 );\n\t\t\tdirectLight.visible = false;\n\t\t}\n\t}\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n\tstruct RectAreaLight {\n\t\tvec3 color;\n\t\tvec3 position;\n\t\tvec3 halfWidth;\n\t\tvec3 halfHeight;\n\t};\n\tuniform sampler2D ltc_1;\tuniform sampler2D ltc_2;\n\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tstruct HemisphereLight {\n\t\tvec3 direction;\n\t\tvec3 skyColor;\n\t\tvec3 groundColor;\n\t};\n\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in GeometricContext geometry ) {\n\t\tfloat dotNL = dot( geometry.normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tirradiance *= PI;\n\t\t#endif\n\t\treturn irradiance;\n\t}\n#endif\n",lights_pars_maps:"#if defined( USE_ENVMAP ) && defined( PHYSICAL )\n\tvec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\n\t\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\tvec4 envMapColor = textureCubeUV( queryVec, 1.0 );\n\t\t#else\n\t\t\tvec4 envMapColor = vec4( 0.0 );\n\t\t#endif\n\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t}\n\tfloat getSpecularMIPLevel( const in float blinnShininessExponent, const in int maxMIPLevel ) {\n\t\tfloat maxMIPLevelScalar = float( maxMIPLevel );\n\t\tfloat desiredMIPLevel = maxMIPLevelScalar + 0.79248 - 0.5 * log2( pow2( blinnShininessExponent ) + 1.0 );\n\t\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\n\t}\n\tvec3 getLightProbeIndirectRadiance( const in GeometricContext geometry, const in float blinnShininessExponent, const in int maxMIPLevel ) {\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( -geometry.viewDir, geometry.normal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( -geometry.viewDir, geometry.normal, refractionRatio );\n\t\t#endif\n\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\tfloat specularMIPLevel = getSpecularMIPLevel( blinnShininessExponent, maxMIPLevel );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\tvec4 envMapColor = textureCubeUV(queryReflectVec, BlinnExponentToGGXRoughness(blinnShininessExponent));\n\t\t#elif defined( ENVMAP_TYPE_EQUIREC )\n\t\t\tvec2 sampleUV;\n\t\t\tsampleUV.y = asin( clamp( reflectVec.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\t\t\tsampleUV.x = atan( reflectVec.z, reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = texture2DLodEXT( envMap, sampleUV, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = texture2D( envMap, sampleUV, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_SPHERE )\n\t\t\tvec3 reflectView = normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0,0.0,1.0 ) );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = texture2DLodEXT( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#endif\n\t\treturn envMapColor.rgb * envMapIntensity;\n\t}\n#endif\n",lights_phong_fragment:"BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;\n",lights_phong_pars_fragment:"varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct BlinnPhongMaterial {\n\tvec3\tdiffuseColor;\n\tvec3\tspecularColor;\n\tfloat\tspecularShininess;\n\tfloat\tspecularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\t#ifdef TOON\n\t\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\n\t#else\n\t\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\t\tvec3 irradiance = dotNL * directLight.color;\n\t#endif\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong\n#define Material_LightProbeLOD( material )\t(0)\n",lights_physical_fragment:"PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nmaterial.specularRoughness = clamp( roughnessFactor, 0.04, 1.0 );\n#ifdef STANDARD\n\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\n\tmaterial.clearCoat = saturate( clearCoat );\tmaterial.clearCoatRoughness = clamp( clearCoatRoughness, 0.04, 1.0 );\n#endif\n",lights_physical_pars_fragment:"struct PhysicalMaterial {\n\tvec3\tdiffuseColor;\n\tfloat\tspecularRoughness;\n\tvec3\tspecularColor;\n\t#ifndef STANDARD\n\t\tfloat clearCoat;\n\t\tfloat clearCoatRoughness;\n\t#endif\n};\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\nfloat clearCoatDHRApprox( const in float roughness, const in float dotNL ) {\n\treturn DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometry.normal;\n\t\tvec3 viewDir = geometry.viewDir;\n\t\tvec3 position = geometry.position;\n\t\tvec3 lightPos = rectAreaLight.position;\n\t\tvec3 halfWidth = rectAreaLight.halfWidth;\n\t\tvec3 halfHeight = rectAreaLight.halfHeight;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = material.specularRoughness;\n\t\tvec3 rectCoords[ 4 ];\n\t\trectCoords[ 0 ] = lightPos - halfWidth - halfHeight;\t\trectCoords[ 1 ] = lightPos + halfWidth - halfHeight;\n\t\trectCoords[ 2 ] = lightPos + halfWidth + halfHeight;\n\t\trectCoords[ 3 ] = lightPos - halfWidth + halfHeight;\n\t\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\n\t\tvec4 t1 = texture2D( ltc_1, uv );\n\t\tvec4 t2 = texture2D( ltc_2, uv );\n\t\tmat3 mInv = mat3(\n\t\t\tvec3( t1.x, 0, t1.y ),\n\t\t\tvec3(    0, 1,    0 ),\n\t\t\tvec3( t1.z, 0, t1.w )\n\t\t);\n\t\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\n\t\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n\t\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\n\t}\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\t#ifndef STANDARD\n\t\tfloat clearCoatDHR = material.clearCoat * clearCoatDHRApprox( material.clearCoatRoughness, dotNL );\n\t#else\n\t\tfloat clearCoatDHR = 0.0;\n\t#endif\n\treflectedLight.directSpecular += ( 1.0 - clearCoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry, material.specularColor, material.specularRoughness );\n\treflectedLight.directDiffuse += ( 1.0 - clearCoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\t#ifndef STANDARD\n\t\treflectedLight.directSpecular += irradiance * material.clearCoat * BRDF_Specular_GGX( directLight, geometry, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearCoatRoughness );\n\t#endif\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 clearCoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t#ifndef STANDARD\n\t\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\t\tfloat dotNL = dotNV;\n\t\tfloat clearCoatDHR = material.clearCoat * clearCoatDHRApprox( material.clearCoatRoughness, dotNL );\n\t#else\n\t\tfloat clearCoatDHR = 0.0;\n\t#endif\n\treflectedLight.indirectSpecular += ( 1.0 - clearCoatDHR ) * radiance * BRDF_Specular_GGX_Environment( geometry, material.specularColor, material.specularRoughness );\n\t#ifndef STANDARD\n\t\treflectedLight.indirectSpecular += clearCoatRadiance * material.clearCoat * BRDF_Specular_GGX_Environment( geometry, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearCoatRoughness );\n\t#endif\n}\n#define RE_Direct\t\t\t\tRE_Direct_Physical\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular\t\tRE_IndirectSpecular_Physical\n#define Material_BlinnShininessExponent( material )   GGXRoughnessToBlinnExponent( material.specularRoughness )\n#define Material_ClearCoat_BlinnShininessExponent( material )   GGXRoughnessToBlinnExponent( material.clearCoatRoughness )\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}\n",lights_fragment_begin:"\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = normalize( vViewPosition );\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\tPointLight pointLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\n\t\t#ifdef USE_SHADOWMAP\n\t\tdirectLight.color *= all( bvec2( pointLight.shadow, directLight.visible ) ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\tSpotLight spotLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\n\t\t#ifdef USE_SHADOWMAP\n\t\tdirectLight.color *= all( bvec2( spotLight.shadow, directLight.visible ) ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n\tDirectionalLight directionalLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n\t\t#ifdef USE_SHADOWMAP\n\t\tdirectLight.color *= all( bvec2( directionalLight.shadow, directLight.visible ) ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\tRectAreaLight rectAreaLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if defined( RE_IndirectDiffuse )\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\t\t#pragma unroll_loop\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t}\n\t#endif\n#endif\n#if defined( RE_IndirectSpecular )\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearCoatRadiance = vec3( 0.0 );\n#endif\n",lights_fragment_maps:"#if defined( RE_IndirectDiffuse )\n\t#ifdef USE_LIGHTMAP\n\t\tvec3 lightMapIrradiance = texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tlightMapIrradiance *= PI;\n\t\t#endif\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( PHYSICAL ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tirradiance += getLightProbeIndirectIrradiance( geometry, maxMipLevel );\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\tradiance += getLightProbeIndirectRadiance( geometry, Material_BlinnShininessExponent( material ), maxMipLevel );\n\t#ifndef STANDARD\n\t\tclearCoatRadiance += getLightProbeIndirectRadiance( geometry, Material_ClearCoat_BlinnShininessExponent( material ), maxMipLevel );\n\t#endif\n#endif\n",lights_fragment_end:"#if defined( RE_IndirectDiffuse )\n\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n\tRE_IndirectSpecular( radiance, clearCoatRadiance, geometry, material, reflectedLight );\n#endif\n",logdepthbuf_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tgl_FragDepthEXT = log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif",logdepthbuf_pars_fragment:"#ifdef USE_LOGDEPTHBUF\n\tuniform float logDepthBufFC;\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t#endif\n#endif\n",logdepthbuf_pars_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t#endif\n\tuniform float logDepthBufFC;\n#endif",logdepthbuf_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t#else\n\t\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\n\t\tgl_Position.z *= gl_Position.w;\n\t#endif\n#endif\n",map_fragment:"#ifdef USE_MAP\n\tvec4 texelColor = texture2D( map, vUv );\n\ttexelColor = mapTexelToLinear( texelColor );\n\tdiffuseColor *= texelColor;\n#endif\n",map_pars_fragment:"#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n",map_particle_fragment:"#ifdef USE_MAP\n\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n\tvec4 mapTexel = texture2D( map, uv );\n\tdiffuseColor *= mapTexelToLinear( mapTexel );\n#endif\n",map_particle_pars_fragment:"#ifdef USE_MAP\n\tuniform mat3 uvTransform;\n\tuniform sampler2D map;\n#endif\n",metalnessmap_fragment:"float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif\n",metalnessmap_pars_fragment:"#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif",morphnormal_vertex:"#ifdef USE_MORPHNORMALS\n\tobjectNormal += ( morphNormal0 - normal ) * morphTargetInfluences[ 0 ];\n\tobjectNormal += ( morphNormal1 - normal ) * morphTargetInfluences[ 1 ];\n\tobjectNormal += ( morphNormal2 - normal ) * morphTargetInfluences[ 2 ];\n\tobjectNormal += ( morphNormal3 - normal ) * morphTargetInfluences[ 3 ];\n#endif\n",morphtarget_pars_vertex:"#ifdef USE_MORPHTARGETS\n\t#ifndef USE_MORPHNORMALS\n\tuniform float morphTargetInfluences[ 8 ];\n\t#else\n\tuniform float morphTargetInfluences[ 4 ];\n\t#endif\n#endif",morphtarget_vertex:"#ifdef USE_MORPHTARGETS\n\ttransformed += ( morphTarget0 - position ) * morphTargetInfluences[ 0 ];\n\ttransformed += ( morphTarget1 - position ) * morphTargetInfluences[ 1 ];\n\ttransformed += ( morphTarget2 - position ) * morphTargetInfluences[ 2 ];\n\ttransformed += ( morphTarget3 - position ) * morphTargetInfluences[ 3 ];\n\t#ifndef USE_MORPHNORMALS\n\ttransformed += ( morphTarget4 - position ) * morphTargetInfluences[ 4 ];\n\ttransformed += ( morphTarget5 - position ) * morphTargetInfluences[ 5 ];\n\ttransformed += ( morphTarget6 - position ) * morphTargetInfluences[ 6 ];\n\ttransformed += ( morphTarget7 - position ) * morphTargetInfluences[ 7 ];\n\t#endif\n#endif\n",normal_fragment_begin:"#ifdef FLAT_SHADED\n\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n#endif\n",normal_fragment_maps:"#ifdef USE_NORMALMAP\n\tnormal = perturbNormal2Arb( -vViewPosition, normal );\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\n#endif\n",normalmap_pars_fragment:"#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm ) {\n\t\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\n\t\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\n\t\tvec2 st0 = dFdx( vUv.st );\n\t\tvec2 st1 = dFdy( vUv.st );\n\t\tfloat scale = sign( st1.t * st0.s - st0.t * st1.s );\t\tscale *= float( gl_FrontFacing ) * 2.0 - 1.0;\n\t\tvec3 S = normalize( ( q0 * st1.t - q1 * st0.t ) * scale );\n\t\tvec3 T = normalize( ( - q0 * st1.s + q1 * st0.s ) * scale );\n\t\tvec3 N = normalize( surf_norm );\n\t\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t\tmapN.xy = normalScale * mapN.xy;\n\t\tmat3 tsn = mat3( S, T, N );\n\t\treturn normalize( tsn * mapN );\n\t}\n#endif\n",packing:"vec3 packNormalToRGB( const in vec3 normal ) {\n\treturn normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n\treturn 2.0 * rgb.xyz - 1.0;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256.,  256. );\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\nconst float ShiftRight8 = 1. / 256.;\nvec4 packDepthToRGBA( const in float v ) {\n\tvec4 r = vec4( fract( v * PackFactors ), v );\n\tr.yzw -= r.xyz * ShiftRight8;\treturn r * PackUpscale;\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\n\treturn linearClipZ * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn (( near + viewZ ) * far ) / (( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\n}\n",premultiplied_alpha_fragment:"#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif\n",project_vertex:"vec4 mvPosition = modelViewMatrix * vec4( transformed, 1.0 );\ngl_Position = projectionMatrix * mvPosition;\n",dithering_fragment:"#if defined( DITHERING )\n  gl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif\n",dithering_pars_fragment:"#if defined( DITHERING )\n\tvec3 dithering( vec3 color ) {\n\t\tfloat grid_position = rand( gl_FragCoord.xy );\n\t\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n\t\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n\t\treturn color + dither_shift_RGB;\n\t}\n#endif\n",roughnessmap_fragment:"float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\troughnessFactor *= texelRoughness.g;\n#endif\n",roughnessmap_pars_fragment:"#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif",shadowmap_pars_fragment:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHTS > 0\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHTS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\n\t#endif\n\t#if NUM_SPOT_LIGHTS > 0\n\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHTS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHTS ];\n\t#endif\n\t#if NUM_POINT_LIGHTS > 0\n\t\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHTS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHTS ];\n\t#endif\n\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n\t\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n\t}\n\tfloat texture2DShadowLerp( sampler2D depths, vec2 size, vec2 uv, float compare ) {\n\t\tconst vec2 offset = vec2( 0.0, 1.0 );\n\t\tvec2 texelSize = vec2( 1.0 ) / size;\n\t\tvec2 centroidUV = floor( uv * size + 0.5 ) / size;\n\t\tfloat lb = texture2DCompare( depths, centroidUV + texelSize * offset.xx, compare );\n\t\tfloat lt = texture2DCompare( depths, centroidUV + texelSize * offset.xy, compare );\n\t\tfloat rb = texture2DCompare( depths, centroidUV + texelSize * offset.yx, compare );\n\t\tfloat rt = texture2DCompare( depths, centroidUV + texelSize * offset.yy, compare );\n\t\tvec2 f = fract( uv * size + 0.5 );\n\t\tfloat a = mix( lb, lt, f.y );\n\t\tfloat b = mix( rb, rt, f.y );\n\t\tfloat c = mix( a, b, f.x );\n\t\treturn c;\n\t}\n\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tfloat shadow = 1.0;\n\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\tshadowCoord.z += shadowBias;\n\t\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n\t\tbool inFrustum = all( inFrustumVec );\n\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n\t\tbool frustumTest = all( frustumTestVec );\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tshadow = (\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn shadow;\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\t\tdp += shadowBias;\n\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t#endif\n\t}\n#endif\n",shadowmap_pars_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHTS > 0\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHTS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\n\t#endif\n\t#if NUM_SPOT_LIGHTS > 0\n\t\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHTS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHTS ];\n\t#endif\n\t#if NUM_POINT_LIGHTS > 0\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHTS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHTS ];\n\t#endif\n#endif\n",shadowmap_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHTS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * worldPosition;\n\t}\n\t#endif\n\t#if NUM_SPOT_LIGHTS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * worldPosition;\n\t}\n\t#endif\n\t#if NUM_POINT_LIGHTS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * worldPosition;\n\t}\n\t#endif\n#endif\n",shadowmask_pars_fragment:"float getShadowMask() {\n\tfloat shadow = 1.0;\n\t#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHTS > 0\n\tDirectionalLight directionalLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tshadow *= bool( directionalLight.shadow ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t}\n\t#endif\n\t#if NUM_SPOT_LIGHTS > 0\n\tSpotLight spotLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tshadow *= bool( spotLight.shadow ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t}\n\t#endif\n\t#if NUM_POINT_LIGHTS > 0\n\tPointLight pointLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tshadow *= bool( pointLight.shadow ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t}\n\t#endif\n\t#endif\n\treturn shadow;\n}\n",skinbase_vertex:"#ifdef USE_SKINNING\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif",skinning_pars_vertex:"#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\t#ifdef BONE_TEXTURE\n\t\tuniform sampler2D boneTexture;\n\t\tuniform int boneTextureSize;\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tfloat j = i * 4.0;\n\t\t\tfloat x = mod( j, float( boneTextureSize ) );\n\t\t\tfloat y = floor( j / float( boneTextureSize ) );\n\t\t\tfloat dx = 1.0 / float( boneTextureSize );\n\t\t\tfloat dy = 1.0 / float( boneTextureSize );\n\t\t\ty = dy * ( y + 0.5 );\n\t\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\t\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\t\t\treturn bone;\n\t\t}\n\t#else\n\t\tuniform mat4 boneMatrices[ MAX_BONES ];\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tmat4 bone = boneMatrices[ int(i) ];\n\t\t\treturn bone;\n\t\t}\n\t#endif\n#endif\n",skinning_vertex:"#ifdef USE_SKINNING\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\ttransformed = ( bindMatrixInverse * skinned ).xyz;\n#endif\n",skinnormal_vertex:"#ifdef USE_SKINNING\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix  = bindMatrixInverse * skinMatrix * bindMatrix;\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n#endif\n",specularmap_fragment:"float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif",specularmap_pars_fragment:"#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif",tonemapping_fragment:"#if defined( TONE_MAPPING )\n  gl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif\n",tonemapping_pars_fragment:"#ifndef saturate\n\t#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\nuniform float toneMappingExposure;\nuniform float toneMappingWhitePoint;\nvec3 LinearToneMapping( vec3 color ) {\n\treturn toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\n#define Uncharted2Helper( x ) max( ( ( x * ( 0.15 * x + 0.10 * 0.50 ) + 0.20 * 0.02 ) / ( x * ( 0.15 * x + 0.50 ) + 0.20 * 0.30 ) ) - 0.02 / 0.30, vec3( 0.0 ) )\nvec3 Uncharted2ToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( Uncharted2Helper( color ) / Uncharted2Helper( vec3( toneMappingWhitePoint ) ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\n",uv_pars_fragment:"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n\tvarying vec2 vUv;\n#endif",uv_pars_vertex:"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n\tvarying vec2 vUv;\n\tuniform mat3 uvTransform;\n#endif\n",uv_vertex:"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n#endif",uv2_pars_fragment:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvarying vec2 vUv2;\n#endif",uv2_pars_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tattribute vec2 uv2;\n\tvarying vec2 vUv2;\n#endif",uv2_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvUv2 = uv2;\n#endif",worldpos_vertex:"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )\n\tvec4 worldPosition = modelMatrix * vec4( transformed, 1.0 );\n#endif\n",cube_frag:"uniform samplerCube tCube;\nuniform float tFlip;\nuniform float opacity;\nvarying vec3 vWorldPosition;\nvoid main() {\n\tgl_FragColor = textureCube( tCube, vec3( tFlip * vWorldPosition.x, vWorldPosition.yz ) );\n\tgl_FragColor.a *= opacity;\n}\n",cube_vert:"varying vec3 vWorldPosition;\n#include <common>\nvoid main() {\n\tvWorldPosition = transformDirection( position, modelMatrix );\n\t#include <begin_vertex>\n\t#include <project_vertex>\n\tgl_Position.z = gl_Position.w;\n}\n",depth_frag:"#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include <common>\n#include <packing>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( 1.0 );\n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include <map_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <logdepthbuf_fragment>\n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( 1.0 - gl_FragCoord.z ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( gl_FragCoord.z );\n\t#endif\n}\n",depth_vert:"#include <common>\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <skinbase_vertex>\n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include <beginnormal_vertex>\n\t\t#include <morphnormal_vertex>\n\t\t#include <skinnormal_vertex>\n\t#endif\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n}\n",distanceRGBA_frag:"#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include <common>\n#include <packing>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main () {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include <map_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist );\n\tgl_FragColor = packDepthToRGBA( dist );\n}\n",distanceRGBA_vert:"#define DISTANCE\nvarying vec3 vWorldPosition;\n#include <common>\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <skinbase_vertex>\n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include <beginnormal_vertex>\n\t\t#include <morphnormal_vertex>\n\t\t#include <skinnormal_vertex>\n\t#endif\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <worldpos_vertex>\n\t#include <clipping_planes_vertex>\n\tvWorldPosition = worldPosition.xyz;\n}\n",equirect_frag:"uniform sampler2D tEquirect;\nvarying vec3 vWorldPosition;\n#include <common>\nvoid main() {\n\tvec3 direction = normalize( vWorldPosition );\n\tvec2 sampleUV;\n\tsampleUV.y = asin( clamp( direction.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\tsampleUV.x = atan( direction.z, direction.x ) * RECIPROCAL_PI2 + 0.5;\n\tgl_FragColor = texture2D( tEquirect, sampleUV );\n}\n",equirect_vert:"varying vec3 vWorldPosition;\n#include <common>\nvoid main() {\n\tvWorldPosition = transformDirection( position, modelMatrix );\n\t#include <begin_vertex>\n\t#include <project_vertex>\n}\n",linedashed_frag:"uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include <common>\n#include <color_pars_fragment>\n#include <fog_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include <logdepthbuf_fragment>\n\t#include <color_fragment>\n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include <premultiplied_alpha_fragment>\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n}\n",linedashed_vert:"uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include <common>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <color_vertex>\n\tvLineDistance = scale * lineDistance;\n\tvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\t#include <fog_vertex>\n}\n",meshbasic_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include <common>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <uv2_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <aomap_pars_fragment>\n#include <lightmap_pars_fragment>\n#include <envmap_pars_fragment>\n#include <fog_pars_fragment>\n#include <specularmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <color_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <specularmap_fragment>\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\treflectedLight.indirectDiffuse += texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include <aomap_fragment>\n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include <envmap_fragment>\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include <premultiplied_alpha_fragment>\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n}\n",meshbasic_vert:"#include <common>\n#include <uv_pars_vertex>\n#include <uv2_pars_vertex>\n#include <envmap_pars_vertex>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <uv2_vertex>\n\t#include <color_vertex>\n\t#include <skinbase_vertex>\n\t#ifdef USE_ENVMAP\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n\t#endif\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <worldpos_vertex>\n\t#include <clipping_planes_vertex>\n\t#include <envmap_vertex>\n\t#include <fog_vertex>\n}\n",meshlambert_frag:"uniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\nvarying vec3 vLightFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n#endif\n#include <common>\n#include <packing>\n#include <dithering_pars_fragment>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <uv2_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <aomap_pars_fragment>\n#include <lightmap_pars_fragment>\n#include <emissivemap_pars_fragment>\n#include <envmap_pars_fragment>\n#include <bsdfs>\n#include <lights_pars_begin>\n#include <lights_pars_maps>\n#include <fog_pars_fragment>\n#include <shadowmap_pars_fragment>\n#include <shadowmask_pars_fragment>\n#include <specularmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <color_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <specularmap_fragment>\n\t#include <emissivemap_fragment>\n\treflectedLight.indirectDiffuse = getAmbientLightIrradiance( ambientLightColor );\n\t#include <lightmap_fragment>\n\treflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\n\t#else\n\t\treflectedLight.directDiffuse = vLightFront;\n\t#endif\n\treflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\n\t#include <aomap_fragment>\n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include <envmap_fragment>\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n\t#include <dithering_fragment>\n}\n",meshlambert_vert:"#define LAMBERT\nvarying vec3 vLightFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n#endif\n#include <common>\n#include <uv_pars_vertex>\n#include <uv2_pars_vertex>\n#include <envmap_pars_vertex>\n#include <bsdfs>\n#include <lights_pars_begin>\n#include <lights_pars_maps>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <shadowmap_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <uv2_vertex>\n\t#include <color_vertex>\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\t#include <worldpos_vertex>\n\t#include <envmap_vertex>\n\t#include <lights_lambert_vertex>\n\t#include <shadowmap_vertex>\n\t#include <fog_vertex>\n}\n",meshphong_frag:"#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include <common>\n#include <packing>\n#include <dithering_pars_fragment>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <uv2_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <aomap_pars_fragment>\n#include <lightmap_pars_fragment>\n#include <emissivemap_pars_fragment>\n#include <envmap_pars_fragment>\n#include <gradientmap_pars_fragment>\n#include <fog_pars_fragment>\n#include <bsdfs>\n#include <lights_pars_begin>\n#include <lights_pars_maps>\n#include <lights_phong_pars_fragment>\n#include <shadowmap_pars_fragment>\n#include <bumpmap_pars_fragment>\n#include <normalmap_pars_fragment>\n#include <specularmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <color_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <specularmap_fragment>\n\t#include <normal_fragment_begin>\n\t#include <normal_fragment_maps>\n\t#include <emissivemap_fragment>\n\t#include <lights_phong_fragment>\n\t#include <lights_fragment_begin>\n\t#include <lights_fragment_maps>\n\t#include <lights_fragment_end>\n\t#include <aomap_fragment>\n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include <envmap_fragment>\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n\t#include <dithering_fragment>\n}\n",meshphong_vert:"#define PHONG\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include <common>\n#include <uv_pars_vertex>\n#include <uv2_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <envmap_pars_vertex>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <shadowmap_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <uv2_vertex>\n\t#include <color_vertex>\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\tvViewPosition = - mvPosition.xyz;\n\t#include <worldpos_vertex>\n\t#include <envmap_vertex>\n\t#include <shadowmap_vertex>\n\t#include <fog_vertex>\n}\n",meshphysical_frag:"#define PHYSICAL\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifndef STANDARD\n\tuniform float clearCoat;\n\tuniform float clearCoatRoughness;\n#endif\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include <common>\n#include <packing>\n#include <dithering_pars_fragment>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <uv2_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <aomap_pars_fragment>\n#include <lightmap_pars_fragment>\n#include <emissivemap_pars_fragment>\n#include <envmap_pars_fragment>\n#include <fog_pars_fragment>\n#include <bsdfs>\n#include <cube_uv_reflection_fragment>\n#include <lights_pars_begin>\n#include <lights_pars_maps>\n#include <lights_physical_pars_fragment>\n#include <shadowmap_pars_fragment>\n#include <bumpmap_pars_fragment>\n#include <normalmap_pars_fragment>\n#include <roughnessmap_pars_fragment>\n#include <metalnessmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <color_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <roughnessmap_fragment>\n\t#include <metalnessmap_fragment>\n\t#include <normal_fragment_begin>\n\t#include <normal_fragment_maps>\n\t#include <emissivemap_fragment>\n\t#include <lights_physical_fragment>\n\t#include <lights_fragment_begin>\n\t#include <lights_fragment_maps>\n\t#include <lights_fragment_end>\n\t#include <aomap_fragment>\n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n\t#include <dithering_fragment>\n}\n",meshphysical_vert:"#define PHYSICAL\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include <common>\n#include <uv_pars_vertex>\n#include <uv2_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <shadowmap_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <uv2_vertex>\n\t#include <color_vertex>\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\tvViewPosition = - mvPosition.xyz;\n\t#include <worldpos_vertex>\n\t#include <shadowmap_vertex>\n\t#include <fog_vertex>\n}\n",normal_frag:"#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include <packing>\n#include <uv_pars_fragment>\n#include <bumpmap_pars_fragment>\n#include <normalmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\nvoid main() {\n\t#include <logdepthbuf_fragment>\n\t#include <normal_fragment_begin>\n\t#include <normal_fragment_maps>\n\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n}\n",normal_vert:"#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <logdepthbuf_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}\n",points_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include <common>\n#include <packing>\n#include <color_pars_fragment>\n#include <map_particle_pars_fragment>\n#include <fog_pars_fragment>\n#include <shadowmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include <logdepthbuf_fragment>\n\t#include <map_particle_fragment>\n\t#include <color_fragment>\n\t#include <alphatest_fragment>\n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include <premultiplied_alpha_fragment>\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n}\n",points_vert:"uniform float size;\nuniform float scale;\n#include <common>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <shadowmap_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <color_vertex>\n\t#include <begin_vertex>\n\t#include <project_vertex>\n\t#ifdef USE_SIZEATTENUATION\n\t\tgl_PointSize = size * ( scale / - mvPosition.z );\n\t#else\n\t\tgl_PointSize = size;\n\t#endif\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\t#include <worldpos_vertex>\n\t#include <shadowmap_vertex>\n\t#include <fog_vertex>\n}\n",shadow_frag:"uniform vec3 color;\nuniform float opacity;\n#include <common>\n#include <packing>\n#include <fog_pars_fragment>\n#include <bsdfs>\n#include <lights_pars_begin>\n#include <shadowmap_pars_fragment>\n#include <shadowmask_pars_fragment>\nvoid main() {\n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include <fog_fragment>\n}\n",shadow_vert:"#include <fog_pars_vertex>\n#include <shadowmap_pars_vertex>\nvoid main() {\n\t#include <begin_vertex>\n\t#include <project_vertex>\n\t#include <worldpos_vertex>\n\t#include <shadowmap_vertex>\n\t#include <fog_vertex>\n}\n"},Ii={merge:function(t){for(var e={},i=0;i<t.length;i++){var r=this.clone(t[i]);for(var n in r)e[n]=r[n]}return e},clone:function(t){var e={};for(var i in t)for(var r in e[i]={},t[i]){var n=t[i][r];n&&(n.isColor||n.isMatrix3||n.isMatrix4||n.isVector2||n.isVector3||n.isVector4||n.isTexture)?e[i][r]=n.clone():Array.isArray(n)?e[i][r]=n.slice():e[i][r]=n}return e}},Ri={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};function Li(t,e,i){return void 0===e&&void 0===i?this.set(t):this.setRGB(t,e,i)}Object.assign(Li.prototype,{isColor:!0,r:1,g:1,b:1,set:function(t){return t&&t.isColor?this.copy(t):"number"==typeof t?this.setHex(t):"string"==typeof t&&this.setStyle(t),this},setScalar:function(t){return this.r=t,this.g=t,this.b=t,this},setHex:function(t){return t=Math.floor(t),this.r=(t>>16&255)/255,this.g=(t>>8&255)/255,this.b=(255&t)/255,this},setRGB:function(t,e,i){return this.r=t,this.g=e,this.b=i,this},setHSL:function(){function o(t,e,i){return i<0&&(i+=1),1<i&&(i-=1),i<1/6?t+6*(e-t)*i:i<.5?e:i<2/3?t+6*(e-t)*(2/3-i):t}return function(t,e,i){if(t=Ye.euclideanModulo(t,1),e=Ye.clamp(e,0,1),i=Ye.clamp(i,0,1),0===e)this.r=this.g=this.b=i;else{var r=i<=.5?i*(1+e):i+e-i*e,n=2*i-r;this.r=o(n,r,t+1/3),this.g=o(n,r,t),this.b=o(n,r,t-1/3)}return this}}(),setStyle:function(e){function t(t){void 0!==t&&parseFloat(t)<1&&console.warn("THREE.Color: Alpha component of "+e+" will be ignored.")}var i;if(i=/^((?:rgb|hsl)a?)\(\s*([^\)]*)\)/.exec(e)){var r,n=i[1],o=i[2];switch(n){case"rgb":case"rgba":if(r=/^(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(o))return this.r=Math.min(255,parseInt(r[1],10))/255,this.g=Math.min(255,parseInt(r[2],10))/255,this.b=Math.min(255,parseInt(r[3],10))/255,t(r[5]),this;if(r=/^(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(o))return this.r=Math.min(100,parseInt(r[1],10))/100,this.g=Math.min(100,parseInt(r[2],10))/100,this.b=Math.min(100,parseInt(r[3],10))/100,t(r[5]),this;break;case"hsl":case"hsla":if(r=/^([0-9]*\.?[0-9]+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(o)){var a=parseFloat(r[1])/360,s=parseInt(r[2],10)/100,c=parseInt(r[3],10)/100;return t(r[5]),this.setHSL(a,s,c)}}}else if(i=/^\#([A-Fa-f0-9]+)$/.exec(e)){var u,h=(u=i[1]).length;if(3===h)return this.r=parseInt(u.charAt(0)+u.charAt(0),16)/255,this.g=parseInt(u.charAt(1)+u.charAt(1),16)/255,this.b=parseInt(u.charAt(2)+u.charAt(2),16)/255,this;if(6===h)return this.r=parseInt(u.charAt(0)+u.charAt(1),16)/255,this.g=parseInt(u.charAt(2)+u.charAt(3),16)/255,this.b=parseInt(u.charAt(4)+u.charAt(5),16)/255,this}e&&0<e.length&&(void 0!==(u=Ri[e])?this.setHex(u):console.warn("THREE.Color: Unknown color "+e));return this},clone:function(){return new this.constructor(this.r,this.g,this.b)},copy:function(t){return this.r=t.r,this.g=t.g,this.b=t.b,this},copyGammaToLinear:function(t,e){return void 0===e&&(e=2),this.r=Math.pow(t.r,e),this.g=Math.pow(t.g,e),this.b=Math.pow(t.b,e),this},copyLinearToGamma:function(t,e){void 0===e&&(e=2);var i=0<e?1/e:1;return this.r=Math.pow(t.r,i),this.g=Math.pow(t.g,i),this.b=Math.pow(t.b,i),this},convertGammaToLinear:function(){var t=this.r,e=this.g,i=this.b;return this.r=t*t,this.g=e*e,this.b=i*i,this},convertLinearToGamma:function(){return this.r=Math.sqrt(this.r),this.g=Math.sqrt(this.g),this.b=Math.sqrt(this.b),this},getHex:function(){return 255*this.r<<16^255*this.g<<8^255*this.b<<0},getHexString:function(){return("000000"+this.getHex().toString(16)).slice(-6)},getHSL:function(t){void 0===t&&(console.warn("THREE.Color: .getHSL() target is now required"),t={h:0,s:0,l:0});var e,i,r=this.r,n=this.g,o=this.b,a=Math.max(r,n,o),s=Math.min(r,n,o),c=(s+a)/2;if(s===a)i=e=0;else{var u=a-s;switch(i=c<=.5?u/(a+s):u/(2-a-s),a){case r:e=(n-o)/u+(n<o?6:0);break;case n:e=(o-r)/u+2;break;case o:e=(r-n)/u+4}e/=6}return t.h=e,t.s=i,t.l=c,t},getStyle:function(){return"rgb("+(255*this.r|0)+","+(255*this.g|0)+","+(255*this.b|0)+")"},offsetHSL:(Ci={},function(t,e,i){return this.getHSL(Ci),Ci.h+=t,Ci.s+=e,Ci.l+=i,this.setHSL(Ci.h,Ci.s,Ci.l),this}),add:function(t){return this.r+=t.r,this.g+=t.g,this.b+=t.b,this},addColors:function(t,e){return this.r=t.r+e.r,this.g=t.g+e.g,this.b=t.b+e.b,this},addScalar:function(t){return this.r+=t,this.g+=t,this.b+=t,this},sub:function(t){return this.r=Math.max(0,this.r-t.r),this.g=Math.max(0,this.g-t.g),this.b=Math.max(0,this.b-t.b),this},multiply:function(t){return this.r*=t.r,this.g*=t.g,this.b*=t.b,this},multiplyScalar:function(t){return this.r*=t,this.g*=t,this.b*=t,this},lerp:function(t,e){return this.r+=(t.r-this.r)*e,this.g+=(t.g-this.g)*e,this.b+=(t.b-this.b)*e,this},equals:function(t){return t.r===this.r&&t.g===this.g&&t.b===this.b},fromArray:function(t,e){return void 0===e&&(e=0),this.r=t[e],this.g=t[e+1],this.b=t[e+2],this},toArray:function(t,e){return void 0===t&&(t=[]),void 0===e&&(e=0),t[e]=this.r,t[e+1]=this.g,t[e+2]=this.b,t},toJSON:function(){return this.getHex()}});var Oi,Di,ki={common:{diffuse:{value:new Li(15658734)},opacity:{value:1},map:{value:null},uvTransform:{value:new ti},alphaMap:{value:null}},specularmap:{specularMap:{value:null}},envmap:{envMap:{value:null},flipEnvMap:{value:-1},reflectivity:{value:1},refractionRatio:{value:.98},maxMipLevel:{value:0}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1}},emissivemap:{emissiveMap:{value:null}},bumpmap:{bumpMap:{value:null},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalScale:{value:new Ze(1,1)}},displacementmap:{displacementMap:{value:null},displacementScale:{value:1},displacementBias:{value:0}},roughnessmap:{roughnessMap:{value:null}},metalnessmap:{metalnessMap:{value:null}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new Li(16777215)}},lights:{ambientLightColor:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{},shadow:{},shadowBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{},shadow:{},shadowBias:{},shadowRadius:{},shadowMapSize:{}}},spotShadowMap:{value:[]},spotShadowMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{},shadow:{},shadowBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}}},points:{diffuse:{value:new Li(15658734)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},uvTransform:{value:new ti}}},Bi={basic:{uniforms:Ii.merge([ki.common,ki.specularmap,ki.envmap,ki.aomap,ki.lightmap,ki.fog]),vertexShader:Ti.meshbasic_vert,fragmentShader:Ti.meshbasic_frag},lambert:{uniforms:Ii.merge([ki.common,ki.specularmap,ki.envmap,ki.aomap,ki.lightmap,ki.emissivemap,ki.fog,ki.lights,{emissive:{value:new Li(0)}}]),vertexShader:Ti.meshlambert_vert,fragmentShader:Ti.meshlambert_frag},phong:{uniforms:Ii.merge([ki.common,ki.specularmap,ki.envmap,ki.aomap,ki.lightmap,ki.emissivemap,ki.bumpmap,ki.normalmap,ki.displacementmap,ki.gradientmap,ki.fog,ki.lights,{emissive:{value:new Li(0)},specular:{value:new Li(1118481)},shininess:{value:30}}]),vertexShader:Ti.meshphong_vert,fragmentShader:Ti.meshphong_frag},standard:{uniforms:Ii.merge([ki.common,ki.envmap,ki.aomap,ki.lightmap,ki.emissivemap,ki.bumpmap,ki.normalmap,ki.displacementmap,ki.roughnessmap,ki.metalnessmap,ki.fog,ki.lights,{emissive:{value:new Li(0)},roughness:{value:.5},metalness:{value:.5},envMapIntensity:{value:1}}]),vertexShader:Ti.meshphysical_vert,fragmentShader:Ti.meshphysical_frag},points:{uniforms:Ii.merge([ki.points,ki.fog]),vertexShader:Ti.points_vert,fragmentShader:Ti.points_frag},dashed:{uniforms:Ii.merge([ki.common,ki.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:Ti.linedashed_vert,fragmentShader:Ti.linedashed_frag},depth:{uniforms:Ii.merge([ki.common,ki.displacementmap]),vertexShader:Ti.depth_vert,fragmentShader:Ti.depth_frag},normal:{uniforms:Ii.merge([ki.common,ki.bumpmap,ki.normalmap,ki.displacementmap,{opacity:{value:1}}]),vertexShader:Ti.normal_vert,fragmentShader:Ti.normal_frag},cube:{uniforms:{tCube:{value:null},tFlip:{value:-1},opacity:{value:1}},vertexShader:Ti.cube_vert,fragmentShader:Ti.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:Ti.equirect_vert,fragmentShader:Ti.equirect_frag},distanceRGBA:{uniforms:Ii.merge([ki.common,ki.displacementmap,{referencePosition:{value:new Qe},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:Ti.distanceRGBA_vert,fragmentShader:Ti.distanceRGBA_frag},shadow:{uniforms:Ii.merge([ki.lights,ki.fog,{color:{value:new Li(0)},opacity:{value:1}}]),vertexShader:Ti.shadow_vert,fragmentShader:Ti.shadow_frag}};function Ni(c){var u=new WeakMap;return{get:function(t){return t.isInterleavedBufferAttribute&&(t=t.data),u.get(t)},remove:function(t){t.isInterleavedBufferAttribute&&(t=t.data);var e=u.get(t);e&&(c.deleteBuffer(e.buffer),u.delete(t))},update:function(t,e){t.isInterleavedBufferAttribute&&(t=t.data);var i,r,n,o,a,s=u.get(t);void 0===s?u.set(t,function(t,e){var i=t.array,r=t.dynamic?c.DYNAMIC_DRAW:c.STATIC_DRAW,n=c.createBuffer();c.bindBuffer(e,n),c.bufferData(e,i,r),t.onUploadCallback();var o=c.FLOAT;return i instanceof Float32Array?o=c.FLOAT:i instanceof Float64Array?console.warn("THREE.WebGLAttributes: Unsupported data buffer format: Float64Array."):i instanceof Uint16Array?o=c.UNSIGNED_SHORT:i instanceof Int16Array?o=c.SHORT:i instanceof Uint32Array?o=c.UNSIGNED_INT:i instanceof Int32Array?o=c.INT:i instanceof Int8Array?o=c.BYTE:i instanceof Uint8Array&&(o=c.UNSIGNED_BYTE),{buffer:n,type:o,bytesPerElement:i.BYTES_PER_ELEMENT,version:t.version}}(t,e)):s.version<t.version&&(i=s.buffer,n=e,o=(r=t).array,a=r.updateRange,c.bindBuffer(n,i),!1===r.dynamic?c.bufferData(n,o,c.STATIC_DRAW):-1===a.count?c.bufferSubData(n,0,o):0===a.count?console.error("THREE.WebGLObjects.updateBuffer: dynamic THREE.BufferAttribute marked as needsUpdate but updateRange.count is 0, ensure you are using set methods or updating manually."):(c.bufferSubData(n,a.offset*o.BYTES_PER_ELEMENT,o.subarray(a.offset,a.offset+a.count)),a.count=-1),s.version=t.version)}}}function Fi(t,e,i,r){this._x=t||0,this._y=e||0,this._z=i||0,this._order=r||Fi.DefaultOrder}function zi(){this.mask=1}Bi.physical={uniforms:Ii.merge([Bi.standard.uniforms,{clearCoat:{value:0},clearCoatRoughness:{value:0}}]),vertexShader:Ti.meshphysical_vert,fragmentShader:Ti.meshphysical_frag},Fi.RotationOrders=["XYZ","YZX","ZXY","XZY","YXZ","ZYX"],Fi.DefaultOrder="XYZ",Object.defineProperties(Fi.prototype,{x:{get:function(){return this._x},set:function(t){this._x=t,this.onChangeCallback()}},y:{get:function(){return this._y},set:function(t){this._y=t,this.onChangeCallback()}},z:{get:function(){return this._z},set:function(t){this._z=t,this.onChangeCallback()}},order:{get:function(){return this._order},set:function(t){this._order=t,this.onChangeCallback()}}}),Object.assign(Fi.prototype,{isEuler:!0,set:function(t,e,i,r){return this._x=t,this._y=e,this._z=i,this._order=r||this._order,this.onChangeCallback(),this},clone:function(){return new this.constructor(this._x,this._y,this._z,this._order)},copy:function(t){return this._x=t._x,this._y=t._y,this._z=t._z,this._order=t._order,this.onChangeCallback(),this},setFromRotationMatrix:function(t,e,i){var r=Ye.clamp,n=t.elements,o=n[0],a=n[4],s=n[8],c=n[1],u=n[5],h=n[9],l=n[2],p=n[6],d=n[10];return"XYZ"===(e=e||this._order)?(this._y=Math.asin(r(s,-1,1)),Math.abs(s)<.99999?(this._x=Math.atan2(-h,d),this._z=Math.atan2(-a,o)):(this._x=Math.atan2(p,u),this._z=0)):"YXZ"===e?(this._x=Math.asin(-r(h,-1,1)),Math.abs(h)<.99999?(this._y=Math.atan2(s,d),this._z=Math.atan2(c,u)):(this._y=Math.atan2(-l,o),this._z=0)):"ZXY"===e?(this._x=Math.asin(r(p,-1,1)),Math.abs(p)<.99999?(this._y=Math.atan2(-l,d),this._z=Math.atan2(-a,u)):(this._y=0,this._z=Math.atan2(c,o))):"ZYX"===e?(this._y=Math.asin(-r(l,-1,1)),Math.abs(l)<.99999?(this._x=Math.atan2(p,d),this._z=Math.atan2(c,o)):(this._x=0,this._z=Math.atan2(-a,u))):"YZX"===e?(this._z=Math.asin(r(c,-1,1)),Math.abs(c)<.99999?(this._x=Math.atan2(-h,u),this._y=Math.atan2(-l,o)):(this._x=0,this._y=Math.atan2(s,d))):"XZY"===e?(this._z=Math.asin(-r(a,-1,1)),Math.abs(a)<.99999?(this._x=Math.atan2(p,u),this._y=Math.atan2(s,o)):(this._x=Math.atan2(-h,d),this._y=0)):console.warn("THREE.Euler: .setFromRotationMatrix() given unsupported order: "+e),this._order=e,!1!==i&&this.onChangeCallback(),this},setFromQuaternion:(Di=new Ke,function(t,e,i){return Di.makeRotationFromQuaternion(t),this.setFromRotationMatrix(Di,e,i)}),setFromVector3:function(t,e){return this.set(t.x,t.y,t.z,e||this._order)},reorder:(Oi=new Je,function(t){return Oi.setFromEuler(this),this.setFromQuaternion(Oi,t)}),equals:function(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._order===this._order},fromArray:function(t){return this._x=t[0],this._y=t[1],this._z=t[2],void 0!==t[3]&&(this._order=t[3]),this.onChangeCallback(),this},toArray:function(t,e){return void 0===t&&(t=[]),void 0===e&&(e=0),t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._order,t},toVector3:function(t){return t?t.set(this._x,this._y,this._z):new Qe(this._x,this._y,this._z)},onChange:function(t){return this.onChangeCallback=t,this},onChangeCallback:function(){}}),Object.assign(zi.prototype,{set:function(t){this.mask=1<<t|0},enable:function(t){this.mask|=1<<t|0},toggle:function(t){this.mask^=1<<t|0},disable:function(t){this.mask&=~(1<<t|0)},test:function(t){return 0!=(this.mask&t.mask)}});var Ui,ji,Gi,Vi,Hi,$i,Wi,Xi,qi,Yi,Zi,Ki,Ji,Qi,tr,er,ir,rr,nr=0;function or(){Object.defineProperty(this,"id",{value:nr++}),this.uuid=Ye.generateUUID(),this.name="",this.type="Object3D",this.parent=null,this.children=[],this.up=or.DefaultUp.clone();var t=new Qe,e=new Fi,i=new Je,r=new Qe(1,1,1);e.onChange(function(){i.setFromEuler(e,!1)}),i.onChange(function(){e.setFromQuaternion(i,void 0,!1)}),Object.defineProperties(this,{position:{enumerable:!0,value:t},rotation:{enumerable:!0,value:e},quaternion:{enumerable:!0,value:i},scale:{enumerable:!0,value:r},modelViewMatrix:{value:new Ke},normalMatrix:{value:new ti}}),this.matrix=new Ke,this.matrixWorld=new Ke,this.matrixAutoUpdate=or.DefaultMatrixAutoUpdate,this.matrixWorldNeedsUpdate=!1,this.layers=new zi,this.visible=!0,this.castShadow=!1,this.receiveShadow=!1,this.frustumCulled=!0,this.renderOrder=0,this.userData={}}function ar(){or.call(this),this.type="Camera",this.matrixWorldInverse=new Ke,this.projectionMatrix=new Ke}function sr(t,e,i,r,n,o){ar.call(this),this.type="OrthographicCamera",this.zoom=1,this.view=null,this.left=t,this.right=e,this.top=i,this.bottom=r,this.near=void 0!==n?n:.1,this.far=void 0!==o?o:2e3,this.updateProjectionMatrix()}function cr(t,e,i,r,n,o){this.a=t,this.b=e,this.c=i,this.normal=r&&r.isVector3?r:new Qe,this.vertexNormals=Array.isArray(r)?r:[],this.color=n&&n.isColor?n:new Li,this.vertexColors=Array.isArray(n)?n:[],this.materialIndex=void 0!==o?o:0}or.DefaultUp=new Qe(0,1,0),or.DefaultMatrixAutoUpdate=!0,or.prototype=Object.assign(Object.create(v.prototype),{constructor:or,isObject3D:!0,onBeforeRender:function(){},onAfterRender:function(){},applyMatrix:function(t){this.matrix.multiplyMatrices(t,this.matrix),this.matrix.decompose(this.position,this.quaternion,this.scale)},applyQuaternion:function(t){return this.quaternion.premultiply(t),this},setRotationFromAxisAngle:function(t,e){this.quaternion.setFromAxisAngle(t,e)},setRotationFromEuler:function(t){this.quaternion.setFromEuler(t,!0)},setRotationFromMatrix:function(t){this.quaternion.setFromRotationMatrix(t)},setRotationFromQuaternion:function(t){this.quaternion.copy(t)},rotateOnAxis:(ir=new Je,function(t,e){return ir.setFromAxisAngle(t,e),this.quaternion.multiply(ir),this}),rotateOnWorldAxis:(er=new Je,function(t,e){return er.setFromAxisAngle(t,e),this.quaternion.premultiply(er),this}),rotateX:(tr=new Qe(1,0,0),function(t){return this.rotateOnAxis(tr,t)}),rotateY:(Qi=new Qe(0,1,0),function(t){return this.rotateOnAxis(Qi,t)}),rotateZ:(Ji=new Qe(0,0,1),function(t){return this.rotateOnAxis(Ji,t)}),translateOnAxis:(Ki=new Qe,function(t,e){return Ki.copy(t).applyQuaternion(this.quaternion),this.position.add(Ki.multiplyScalar(e)),this}),translateX:(Zi=new Qe(1,0,0),function(t){return this.translateOnAxis(Zi,t)}),translateY:(Yi=new Qe(0,1,0),function(t){return this.translateOnAxis(Yi,t)}),translateZ:(qi=new Qe(0,0,1),function(t){return this.translateOnAxis(qi,t)}),localToWorld:function(t){return t.applyMatrix4(this.matrixWorld)},worldToLocal:(Xi=new Ke,function(t){return t.applyMatrix4(Xi.getInverse(this.matrixWorld))}),lookAt:($i=new Ke,Wi=new Qe,function(t,e,i){t.isVector3?Wi.copy(t):Wi.set(t,e,i),this.isCamera?$i.lookAt(this.position,Wi,this.up):$i.lookAt(Wi,this.position,this.up),this.quaternion.setFromRotationMatrix($i)}),add:function(t){var e=arguments;if(1<arguments.length){for(var i=0;i<arguments.length;i++)this.add(e[i]);return this}return t===this?console.error("THREE.Object3D.add: object can't be added as a child of itself.",t):t&&t.isObject3D?(null!==t.parent&&t.parent.remove(t),t.parent=this,t.dispatchEvent({type:"added"}),this.children.push(t)):console.error("THREE.Object3D.add: object not an instance of THREE.Object3D.",t),this},remove:function(t){var e=arguments;if(1<arguments.length){for(var i=0;i<arguments.length;i++)this.remove(e[i]);return this}var r=this.children.indexOf(t);return-1!==r&&(t.parent=null,t.dispatchEvent({type:"removed"}),this.children.splice(r,1)),this},getObjectById:function(t){return this.getObjectByProperty("id",t)},getObjectByName:function(t){return this.getObjectByProperty("name",t)},getObjectByProperty:function(t,e){if(this[t]===e)return this;for(var i=0,r=this.children.length;i<r;i++){var n=this.children[i].getObjectByProperty(t,e);if(void 0!==n)return n}},getWorldPosition:function(t){return void 0===t&&(console.warn("THREE.Object3D: .getWorldPosition() target is now required"),t=new Qe),this.updateMatrixWorld(!0),t.setFromMatrixPosition(this.matrixWorld)},getWorldQuaternion:(Vi=new Qe,Hi=new Qe,function(t){return void 0===t&&(console.warn("THREE.Object3D: .getWorldQuaternion() target is now required"),t=new Je),this.updateMatrixWorld(!0),this.matrixWorld.decompose(Vi,t,Hi),t}),getWorldScale:(ji=new Qe,Gi=new Je,function(t){return void 0===t&&(console.warn("THREE.Object3D: .getWorldScale() target is now required"),t=new Qe),this.updateMatrixWorld(!0),this.matrixWorld.decompose(ji,Gi,t),t}),getWorldDirection:(Ui=new Je,function(t){return void 0===t&&(console.warn("THREE.Object3D: .getWorldDirection() target is now required"),t=new Qe),this.getWorldQuaternion(Ui),t.set(0,0,1).applyQuaternion(Ui)}),raycast:function(){},traverse:function(t){t(this);for(var e=this.children,i=0,r=e.length;i<r;i++)e[i].traverse(t)},traverseVisible:function(t){if(!1!==this.visible){t(this);for(var e=this.children,i=0,r=e.length;i<r;i++)e[i].traverseVisible(t)}},traverseAncestors:function(t){var e=this.parent;null!==e&&(t(e),e.traverseAncestors(t))},updateMatrix:function(){this.matrix.compose(this.position,this.quaternion,this.scale),this.matrixWorldNeedsUpdate=!0},updateMatrixWorld:function(t){this.matrixAutoUpdate&&this.updateMatrix(),(this.matrixWorldNeedsUpdate||t)&&(null===this.parent?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix),t=!(this.matrixWorldNeedsUpdate=!1));for(var e=this.children,i=0,r=e.length;i<r;i++)e[i].updateMatrixWorld(t)},toJSON:function(i){var t=void 0===i||"string"==typeof i,e={};t&&(i={geometries:{},materials:{},textures:{},images:{},shapes:{}},e.metadata={version:4.5,type:"Object",generator:"Object3D.toJSON"});var r={};function n(t,e){return void 0===t[e.uuid]&&(t[e.uuid]=e.toJSON(i)),e.uuid}if(r.uuid=this.uuid,r.type=this.type,""!==this.name&&(r.name=this.name),!0===this.castShadow&&(r.castShadow=!0),!0===this.receiveShadow&&(r.receiveShadow=!0),!1===this.visible&&(r.visible=!1),!1===this.frustumCulled&&(r.frustumCulled=!1),0!==this.renderOrder&&(r.renderOrder=this.renderOrder),"{}"!==JSON.stringify(this.userData)&&(r.userData=this.userData),r.matrix=this.matrix.toArray(),!1===this.matrixAutoUpdate&&(r.matrixAutoUpdate=!1),void 0!==this.geometry){r.geometry=n(i.geometries,this.geometry);var o=this.geometry.parameters;if(void 0!==o&&void 0!==o.shapes){var a=o.shapes;if(Array.isArray(a))for(var s=0,c=a.length;s<c;s++){var u=a[s];n(i.shapes,u)}else n(i.shapes,a)}}if(void 0!==this.material)if(Array.isArray(this.material)){var h=[];for(s=0,c=this.material.length;s<c;s++)h.push(n(i.materials,this.material[s]));r.material=h}else r.material=n(i.materials,this.material);if(0<this.children.length){r.children=[];for(s=0;s<this.children.length;s++)r.children.push(this.children[s].toJSON(i).object)}if(t){var l=m(i.geometries),p=m(i.materials),d=m(i.textures),f=m(i.images);a=m(i.shapes);0<l.length&&(e.geometries=l),0<p.length&&(e.materials=p),0<d.length&&(e.textures=d),0<f.length&&(e.images=f),0<a.length&&(e.shapes=a)}return e.object=r,e;function m(t){var e=[];for(var i in t){var r=t[i];delete r.metadata,e.push(r)}return e}},clone:function(t){return(new this.constructor).copy(this,t)},copy:function(t,e){if(void 0===e&&(e=!0),this.name=t.name,this.up.copy(t.up),this.position.copy(t.position),this.quaternion.copy(t.quaternion),this.scale.copy(t.scale),this.matrix.copy(t.matrix),this.matrixWorld.copy(t.matrixWorld),this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrixWorldNeedsUpdate=t.matrixWorldNeedsUpdate,this.layers.mask=t.layers.mask,this.visible=t.visible,this.castShadow=t.castShadow,this.receiveShadow=t.receiveShadow,this.frustumCulled=t.frustumCulled,this.renderOrder=t.renderOrder,this.userData=JSON.parse(JSON.stringify(t.userData)),!0===e)for(var i=0;i<t.children.length;i++){var r=t.children[i];this.add(r.clone())}return this}}),ar.prototype=Object.assign(Object.create(or.prototype),{constructor:ar,isCamera:!0,copy:function(t,e){return or.prototype.copy.call(this,t,e),this.matrixWorldInverse.copy(t.matrixWorldInverse),this.projectionMatrix.copy(t.projectionMatrix),this},getWorldDirection:(rr=new Je,function(t){return void 0===t&&(console.warn("THREE.Camera: .getWorldDirection() target is now required"),t=new Qe),this.getWorldQuaternion(rr),t.set(0,0,-1).applyQuaternion(rr)}),updateMatrixWorld:function(t){or.prototype.updateMatrixWorld.call(this,t),this.matrixWorldInverse.getInverse(this.matrixWorld)},clone:function(){return(new this.constructor).copy(this)}}),sr.prototype=Object.assign(Object.create(ar.prototype),{constructor:sr,isOrthographicCamera:!0,copy:function(t,e){return ar.prototype.copy.call(this,t,e),this.left=t.left,this.right=t.right,this.top=t.top,this.bottom=t.bottom,this.near=t.near,this.far=t.far,this.zoom=t.zoom,this.view=null===t.view?null:Object.assign({},t.view),this},setViewOffset:function(t,e,i,r,n,o){null===this.view&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=t,this.view.fullHeight=e,this.view.offsetX=i,this.view.offsetY=r,this.view.width=n,this.view.height=o,this.updateProjectionMatrix()},clearViewOffset:function(){null!==this.view&&(this.view.enabled=!1),this.updateProjectionMatrix()},updateProjectionMatrix:function(){var t=(this.right-this.left)/(2*this.zoom),e=(this.top-this.bottom)/(2*this.zoom),i=(this.right+this.left)/2,r=(this.top+this.bottom)/2,n=i-t,o=i+t,a=r+e,s=r-e;if(null!==this.view&&this.view.enabled){var c=this.zoom/(this.view.width/this.view.fullWidth),u=this.zoom/(this.view.height/this.view.fullHeight),h=(this.right-this.left)/this.view.width,l=(this.top-this.bottom)/this.view.height;o=(n+=h*(this.view.offsetX/c))+h*(this.view.width/c),s=(a-=l*(this.view.offsetY/u))-l*(this.view.height/u)}this.projectionMatrix.makeOrthographic(n,o,a,s,this.near,this.far)},toJSON:function(t){var e=or.prototype.toJSON.call(this,t);return e.object.zoom=this.zoom,e.object.left=this.left,e.object.right=this.right,e.object.top=this.top,e.object.bottom=this.bottom,e.object.near=this.near,e.object.far=this.far,null!==this.view&&(e.object.view=Object.assign({},this.view)),e}}),Object.assign(cr.prototype,{clone:function(){return(new this.constructor).copy(this)},copy:function(t){this.a=t.a,this.b=t.b,this.c=t.c,this.normal.copy(t.normal),this.color.copy(t.color),this.materialIndex=t.materialIndex;for(var e=0,i=t.vertexNormals.length;e<i;e++)this.vertexNormals[e]=t.vertexNormals[e].clone();for(e=0,i=t.vertexColors.length;e<i;e++)this.vertexColors[e]=t.vertexColors[e].clone();return this}});var ur,hr,lr,pr,dr,fr,mr,gr=0;function vr(){Object.defineProperty(this,"id",{value:gr+=2}),this.uuid=Ye.generateUUID(),this.name="",this.type="Geometry",this.vertices=[],this.colors=[],this.faces=[],this.faceVertexUvs=[[]],this.morphTargets=[],this.morphNormals=[],this.skinWeights=[],this.skinIndices=[],this.lineDistances=[],this.boundingBox=null,this.boundingSphere=null,this.elementsNeedUpdate=!1,this.verticesNeedUpdate=!1,this.uvsNeedUpdate=!1,this.normalsNeedUpdate=!1,this.colorsNeedUpdate=!1,this.lineDistancesNeedUpdate=!1,this.groupsNeedUpdate=!1}function yr(t,e,i){if(Array.isArray(t))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.name="",this.array=t,this.itemSize=e,this.count=void 0!==t?t.length/e:0,this.normalized=!0===i,this.dynamic=!1,this.updateRange={offset:0,count:-1},this.version=0}function br(t,e,i){yr.call(this,new Int8Array(t),e,i)}function xr(t,e,i){yr.call(this,new Uint8Array(t),e,i)}function _r(t,e,i){yr.call(this,new Uint8ClampedArray(t),e,i)}function wr(t,e,i){yr.call(this,new Int16Array(t),e,i)}function Sr(t,e,i){yr.call(this,new Uint16Array(t),e,i)}function Ar(t,e,i){yr.call(this,new Int32Array(t),e,i)}function Mr(t,e,i){yr.call(this,new Uint32Array(t),e,i)}function Pr(t,e,i){yr.call(this,new Float32Array(t),e,i)}function Er(t,e,i){yr.call(this,new Float64Array(t),e,i)}function Cr(){this.vertices=[],this.normals=[],this.colors=[],this.uvs=[],this.uvs2=[],this.groups=[],this.morphTargets={},this.skinWeights=[],this.skinIndices=[],this.boundingBox=null,this.boundingSphere=null,this.verticesNeedUpdate=!1,this.normalsNeedUpdate=!1,this.colorsNeedUpdate=!1,this.uvsNeedUpdate=!1,this.groupsNeedUpdate=!1}function Tr(t){if(0===t.length)return-1/0;for(var e=t[0],i=1,r=t.length;i<r;++i)t[i]>e&&(e=t[i]);return e}vr.prototype=Object.assign(Object.create(v.prototype),{constructor:vr,isGeometry:!0,applyMatrix:function(t){for(var e=(new ti).getNormalMatrix(t),i=0,r=this.vertices.length;i<r;i++){this.vertices[i].applyMatrix4(t)}for(i=0,r=this.faces.length;i<r;i++){var n=this.faces[i];n.normal.applyMatrix3(e).normalize();for(var o=0,a=n.vertexNormals.length;o<a;o++)n.vertexNormals[o].applyMatrix3(e).normalize()}return null!==this.boundingBox&&this.computeBoundingBox(),null!==this.boundingSphere&&this.computeBoundingSphere(),this.verticesNeedUpdate=!0,this.normalsNeedUpdate=!0,this},rotateX:(mr=new Ke,function(t){return mr.makeRotationX(t),this.applyMatrix(mr),this}),rotateY:(fr=new Ke,function(t){return fr.makeRotationY(t),this.applyMatrix(fr),this}),rotateZ:(dr=new Ke,function(t){return dr.makeRotationZ(t),this.applyMatrix(dr),this}),translate:(pr=new Ke,function(t,e,i){return pr.makeTranslation(t,e,i),this.applyMatrix(pr),this}),scale:(lr=new Ke,function(t,e,i){return lr.makeScale(t,e,i),this.applyMatrix(lr),this}),lookAt:(hr=new or,function(t){hr.lookAt(t),hr.updateMatrix(),this.applyMatrix(hr.matrix)}),fromBufferGeometry:function(t){var o=this,e=null!==t.index?t.index.array:void 0,i=t.attributes,r=i.position.array,a=void 0!==i.normal?i.normal.array:void 0,s=void 0!==i.color?i.color.array:void 0,c=void 0!==i.uv?i.uv.array:void 0,u=void 0!==i.uv2?i.uv2.array:void 0;void 0!==u&&(this.faceVertexUvs[1]=[]);for(var h=[],l=[],p=[],n=0,d=0;n<r.length;n+=3,d+=2)o.vertices.push(new Qe(r[n],r[n+1],r[n+2])),void 0!==a&&h.push(new Qe(a[n],a[n+1],a[n+2])),void 0!==s&&o.colors.push(new Li(s[n],s[n+1],s[n+2])),void 0!==c&&l.push(new Ze(c[d],c[d+1])),void 0!==u&&p.push(new Ze(u[d],u[d+1]));function f(t,e,i,r){var n=new cr(t,e,i,void 0!==a?[h[t].clone(),h[e].clone(),h[i].clone()]:[],void 0!==s?[o.colors[t].clone(),o.colors[e].clone(),o.colors[i].clone()]:[],r);o.faces.push(n),void 0!==c&&o.faceVertexUvs[0].push([l[t].clone(),l[e].clone(),l[i].clone()]),void 0!==u&&o.faceVertexUvs[1].push([p[t].clone(),p[e].clone(),p[i].clone()])}var m=t.groups;if(0<m.length)for(n=0;n<m.length;n++)for(var g=m[n],v=g.start,y=(d=v,v+g.count);d<y;d+=3)void 0!==e?f(e[d],e[d+1],e[d+2],g.materialIndex):f(d,d+1,d+2,g.materialIndex);else if(void 0!==e)for(n=0;n<e.length;n+=3)f(e[n],e[n+1],e[n+2]);else for(n=0;n<r.length/3;n+=3)f(n,n+1,n+2);return this.computeFaceNormals(),null!==t.boundingBox&&(this.boundingBox=t.boundingBox.clone()),null!==t.boundingSphere&&(this.boundingSphere=t.boundingSphere.clone()),this},center:(ur=new Qe,function(){return this.computeBoundingBox(),this.boundingBox.getCenter(ur).negate(),this.translate(ur.x,ur.y,ur.z),this}),normalize:function(){this.computeBoundingSphere();var t=this.boundingSphere.center,e=this.boundingSphere.radius,i=0===e?1:1/e,r=new Ke;return r.set(i,0,0,-i*t.x,0,i,0,-i*t.y,0,0,i,-i*t.z,0,0,0,1),this.applyMatrix(r),this},computeFaceNormals:function(){for(var t=new Qe,e=new Qe,i=0,r=this.faces.length;i<r;i++){var n=this.faces[i],o=this.vertices[n.a],a=this.vertices[n.b],s=this.vertices[n.c];t.subVectors(s,a),e.subVectors(o,a),t.cross(e),t.normalize(),n.normal.copy(t)}},computeVertexNormals:function(t){var e,i,r,n,o,a;for(void 0===t&&(t=!0),a=new Array(this.vertices.length),e=0,i=this.vertices.length;e<i;e++)a[e]=new Qe;if(t){var s,c,u,h=new Qe,l=new Qe;for(r=0,n=this.faces.length;r<n;r++)o=this.faces[r],s=this.vertices[o.a],c=this.vertices[o.b],u=this.vertices[o.c],h.subVectors(u,c),l.subVectors(s,c),h.cross(l),a[o.a].add(h),a[o.b].add(h),a[o.c].add(h)}else for(this.computeFaceNormals(),r=0,n=this.faces.length;r<n;r++)a[(o=this.faces[r]).a].add(o.normal),a[o.b].add(o.normal),a[o.c].add(o.normal);for(e=0,i=this.vertices.length;e<i;e++)a[e].normalize();for(r=0,n=this.faces.length;r<n;r++){var p=(o=this.faces[r]).vertexNormals;3===p.length?(p[0].copy(a[o.a]),p[1].copy(a[o.b]),p[2].copy(a[o.c])):(p[0]=a[o.a].clone(),p[1]=a[o.b].clone(),p[2]=a[o.c].clone())}0<this.faces.length&&(this.normalsNeedUpdate=!0)},computeFlatVertexNormals:function(){var t,e,i;for(this.computeFaceNormals(),t=0,e=this.faces.length;t<e;t++){var r=(i=this.faces[t]).vertexNormals;3===r.length?(r[0].copy(i.normal),r[1].copy(i.normal),r[2].copy(i.normal)):(r[0]=i.normal.clone(),r[1]=i.normal.clone(),r[2]=i.normal.clone())}0<this.faces.length&&(this.normalsNeedUpdate=!0)},computeMorphNormals:function(){var t,e,i,r,n,o=this;for(i=0,r=this.faces.length;i<r;i++)for((n=o.faces[i]).__originalFaceNormal?n.__originalFaceNormal.copy(n.normal):n.__originalFaceNormal=n.normal.clone(),n.__originalVertexNormals||(n.__originalVertexNormals=[]),t=0,e=n.vertexNormals.length;t<e;t++)n.__originalVertexNormals[t]?n.__originalVertexNormals[t].copy(n.vertexNormals[t]):n.__originalVertexNormals[t]=n.vertexNormals[t].clone();var a=new vr;for(a.faces=this.faces,t=0,e=this.morphTargets.length;t<e;t++){if(!o.morphNormals[t]){o.morphNormals[t]={},o.morphNormals[t].faceNormals=[],o.morphNormals[t].vertexNormals=[];var s=o.morphNormals[t].faceNormals,c=o.morphNormals[t].vertexNormals;for(i=0,r=this.faces.length;i<r;i++)u=new Qe,h={a:new Qe,b:new Qe,c:new Qe},s.push(u),c.push(h)}var u,h,l=o.morphNormals[t];for(a.vertices=o.morphTargets[t].vertices,a.computeFaceNormals(),a.computeVertexNormals(),i=0,r=this.faces.length;i<r;i++)n=o.faces[i],u=l.faceNormals[i],h=l.vertexNormals[i],u.copy(n.normal),h.a.copy(n.vertexNormals[0]),h.b.copy(n.vertexNormals[1]),h.c.copy(n.vertexNormals[2])}for(i=0,r=this.faces.length;i<r;i++)(n=o.faces[i]).normal=n.__originalFaceNormal,n.vertexNormals=n.__originalVertexNormals},computeBoundingBox:function(){null===this.boundingBox&&(this.boundingBox=new Ai),this.boundingBox.setFromPoints(this.vertices)},computeBoundingSphere:function(){null===this.boundingSphere&&(this.boundingSphere=new Mi),this.boundingSphere.setFromPoints(this.vertices)},merge:function(t,e,i){if(t&&t.isGeometry){var r,n=this.vertices.length,o=this.vertices,a=t.vertices,s=this.faces,c=t.faces,u=this.faceVertexUvs[0],h=t.faceVertexUvs[0],l=this.colors,p=t.colors;void 0===i&&(i=0),void 0!==e&&(r=(new ti).getNormalMatrix(e));for(var d=0,f=a.length;d<f;d++){var m=a[d].clone();void 0!==e&&m.applyMatrix4(e),o.push(m)}for(d=0,f=p.length;d<f;d++)l.push(p[d].clone());for(d=0,f=c.length;d<f;d++){var g,v,y,b=c[d],x=b.vertexNormals,_=b.vertexColors;(g=new cr(b.a+n,b.b+n,b.c+n)).normal.copy(b.normal),void 0!==r&&g.normal.applyMatrix3(r).normalize();for(var w=0,S=x.length;w<S;w++)v=x[w].clone(),void 0!==r&&v.applyMatrix3(r).normalize(),g.vertexNormals.push(v);g.color.copy(b.color);for(w=0,S=_.length;w<S;w++)y=_[w],g.vertexColors.push(y.clone());g.materialIndex=b.materialIndex+i,s.push(g)}for(d=0,f=h.length;d<f;d++){var A=h[d],M=[];if(void 0!==A){for(w=0,S=A.length;w<S;w++)M.push(A[w].clone());u.push(M)}}}else console.error("THREE.Geometry.merge(): geometry not an instance of THREE.Geometry.",t)},mergeMesh:function(t){t&&t.isMesh?(t.matrixAutoUpdate&&t.updateMatrix(),this.merge(t.geometry,t.matrix)):console.error("THREE.Geometry.mergeMesh(): mesh not an instance of THREE.Mesh.",t)},mergeVertices:function(){var t,e,i,r,n,o,a,s,c={},u=[],h=[],l=Math.pow(10,4);for(i=0,r=this.vertices.length;i<r;i++)t=this.vertices[i],void 0===c[e=Math.round(t.x*l)+"_"+Math.round(t.y*l)+"_"+Math.round(t.z*l)]?(c[e]=i,u.push(this.vertices[i]),h[i]=u.length-1):h[i]=h[c[e]];var p=[];for(i=0,r=this.faces.length;i<r;i++){(n=this.faces[i]).a=h[n.a],n.b=h[n.b],n.c=h[n.c],o=[n.a,n.b,n.c];for(var d=0;d<3;d++)if(o[d]===o[(d+1)%3]){p.push(i);break}}for(i=p.length-1;0<=i;i--){var f=p[i];for(this.faces.splice(f,1),a=0,s=this.faceVertexUvs.length;a<s;a++)this.faceVertexUvs[a].splice(f,1)}var m=this.vertices.length-u.length;return this.vertices=u,m},setFromPoints:function(t){this.vertices=[];for(var e=0,i=t.length;e<i;e++){var r=t[e];this.vertices.push(new Qe(r.x,r.y,r.z||0))}return this},sortFacesByMaterialIndex:function(){for(var t=this.faces,e=t.length,i=0;i<e;i++)t[i]._id=i;t.sort(function(t,e){return t.materialIndex-e.materialIndex});var r,n,o=this.faceVertexUvs[0],a=this.faceVertexUvs[1];o&&o.length===e&&(r=[]),a&&a.length===e&&(n=[]);for(i=0;i<e;i++){var s=t[i]._id;r&&r.push(o[s]),n&&n.push(a[s])}r&&(this.faceVertexUvs[0]=r),n&&(this.faceVertexUvs[1]=n)},toJSON:function(){var t={metadata:{version:4.5,type:"Geometry",generator:"Geometry.toJSON"}};if(t.uuid=this.uuid,t.type=this.type,""!==this.name&&(t.name=this.name),void 0!==this.parameters){var e=this.parameters;for(var i in e)void 0!==e[i]&&(t[i]=e[i]);return t}for(var r=[],n=0;n<this.vertices.length;n++){var o=this.vertices[n];r.push(o.x,o.y,o.z)}var a=[],s=[],c={},u=[],h={},l=[],p={};for(n=0;n<this.faces.length;n++){var d=this.faces[n],f=void 0!==this.faceVertexUvs[0][n],m=0<d.normal.length(),g=0<d.vertexNormals.length,v=1!==d.color.r||1!==d.color.g||1!==d.color.b,y=0<d.vertexColors.length,b=0;if(b=S(b=S(b=S(b=S(b=S(b=S(b=S(b=S(b,0,0),1,!0),2,!1),3,f),4,m),5,g),6,v),7,y),a.push(b),a.push(d.a,d.b,d.c),a.push(d.materialIndex),f){var x=this.faceVertexUvs[0][n];a.push(P(x[0]),P(x[1]),P(x[2]))}if(m&&a.push(A(d.normal)),g){var _=d.vertexNormals;a.push(A(_[0]),A(_[1]),A(_[2]))}if(v&&a.push(M(d.color)),y){var w=d.vertexColors;a.push(M(w[0]),M(w[1]),M(w[2]))}}function S(t,e,i){return i?t|1<<e:t&~(1<<e)}function A(t){var e=t.x.toString()+t.y.toString()+t.z.toString();return void 0!==c[e]||(c[e]=s.length/3,s.push(t.x,t.y,t.z)),c[e]}function M(t){var e=t.r.toString()+t.g.toString()+t.b.toString();return void 0!==h[e]||(h[e]=u.length,u.push(t.getHex())),h[e]}function P(t){var e=t.x.toString()+t.y.toString();return void 0!==p[e]||(p[e]=l.length/2,l.push(t.x,t.y)),p[e]}return t.data={},t.data.vertices=r,t.data.normals=s,0<u.length&&(t.data.colors=u),0<l.length&&(t.data.uvs=[l]),t.data.faces=a,t},clone:function(){return(new vr).copy(this)},copy:function(t){var e,i,r,n,o,a,s=this;this.vertices=[],this.colors=[],this.faces=[],this.faceVertexUvs=[[]],this.morphTargets=[],this.morphNormals=[],this.skinWeights=[],this.skinIndices=[],this.lineDistances=[],this.boundingBox=null,this.boundingSphere=null,this.name=t.name;var c=t.vertices;for(e=0,i=c.length;e<i;e++)s.vertices.push(c[e].clone());var u=t.colors;for(e=0,i=u.length;e<i;e++)s.colors.push(u[e].clone());var h=t.faces;for(e=0,i=h.length;e<i;e++)s.faces.push(h[e].clone());for(e=0,i=t.faceVertexUvs.length;e<i;e++){var l=t.faceVertexUvs[e];for(void 0===s.faceVertexUvs[e]&&(s.faceVertexUvs[e]=[]),r=0,n=l.length;r<n;r++){var p=l[r],d=[];for(o=0,a=p.length;o<a;o++){var f=p[o];d.push(f.clone())}s.faceVertexUvs[e].push(d)}}var m=t.morphTargets;for(e=0,i=m.length;e<i;e++){var g={};if(g.name=m[e].name,void 0!==m[e].vertices)for(g.vertices=[],r=0,n=m[e].vertices.length;r<n;r++)g.vertices.push(m[e].vertices[r].clone());if(void 0!==m[e].normals)for(g.normals=[],r=0,n=m[e].normals.length;r<n;r++)g.normals.push(m[e].normals[r].clone());s.morphTargets.push(g)}var v=t.morphNormals;for(e=0,i=v.length;e<i;e++){var y={};if(void 0!==v[e].vertexNormals)for(y.vertexNormals=[],r=0,n=v[e].vertexNormals.length;r<n;r++){var b=v[e].vertexNormals[r],x={};x.a=b.a.clone(),x.b=b.b.clone(),x.c=b.c.clone(),y.vertexNormals.push(x)}if(void 0!==v[e].faceNormals)for(y.faceNormals=[],r=0,n=v[e].faceNormals.length;r<n;r++)y.faceNormals.push(v[e].faceNormals[r].clone());s.morphNormals.push(y)}var _=t.skinWeights;for(e=0,i=_.length;e<i;e++)s.skinWeights.push(_[e].clone());var w=t.skinIndices;for(e=0,i=w.length;e<i;e++)s.skinIndices.push(w[e].clone());var S=t.lineDistances;for(e=0,i=S.length;e<i;e++)s.lineDistances.push(S[e]);var A=t.boundingBox;null!==A&&(this.boundingBox=A.clone());var M=t.boundingSphere;return null!==M&&(this.boundingSphere=M.clone()),this.elementsNeedUpdate=t.elementsNeedUpdate,this.verticesNeedUpdate=t.verticesNeedUpdate,this.uvsNeedUpdate=t.uvsNeedUpdate,this.normalsNeedUpdate=t.normalsNeedUpdate,this.colorsNeedUpdate=t.colorsNeedUpdate,this.lineDistancesNeedUpdate=t.lineDistancesNeedUpdate,this.groupsNeedUpdate=t.groupsNeedUpdate,this},dispose:function(){this.dispatchEvent({type:"dispose"})}}),Object.defineProperty(yr.prototype,"needsUpdate",{set:function(t){!0===t&&this.version++}}),Object.assign(yr.prototype,{isBufferAttribute:!0,onUploadCallback:function(){},setArray:function(t){if(Array.isArray(t))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");return this.count=void 0!==t?t.length/this.itemSize:0,this.array=t,this},setDynamic:function(t){return this.dynamic=t,this},copy:function(t){return this.name=t.name,this.array=new t.array.constructor(t.array),this.itemSize=t.itemSize,this.count=t.count,this.normalized=t.normalized,this.dynamic=t.dynamic,this},copyAt:function(t,e,i){t*=this.itemSize,i*=e.itemSize;for(var r=0,n=this.itemSize;r<n;r++)this.array[t+r]=e.array[i+r];return this},copyArray:function(t){return this.array.set(t),this},copyColorsArray:function(t){for(var e=this.array,i=0,r=0,n=t.length;r<n;r++){var o=t[r];void 0===o&&(console.warn("THREE.BufferAttribute.copyColorsArray(): color is undefined",r),o=new Li),e[i++]=o.r,e[i++]=o.g,e[i++]=o.b}return this},copyVector2sArray:function(t){for(var e=this.array,i=0,r=0,n=t.length;r<n;r++){var o=t[r];void 0===o&&(console.warn("THREE.BufferAttribute.copyVector2sArray(): vector is undefined",r),o=new Ze),e[i++]=o.x,e[i++]=o.y}return this},copyVector3sArray:function(t){for(var e=this.array,i=0,r=0,n=t.length;r<n;r++){var o=t[r];void 0===o&&(console.warn("THREE.BufferAttribute.copyVector3sArray(): vector is undefined",r),o=new Qe),e[i++]=o.x,e[i++]=o.y,e[i++]=o.z}return this},copyVector4sArray:function(t){for(var e=this.array,i=0,r=0,n=t.length;r<n;r++){var o=t[r];void 0===o&&(console.warn("THREE.BufferAttribute.copyVector4sArray(): vector is undefined",r),o=new xi),e[i++]=o.x,e[i++]=o.y,e[i++]=o.z,e[i++]=o.w}return this},set:function(t,e){return void 0===e&&(e=0),this.array.set(t,e),this},getX:function(t){return this.array[t*this.itemSize]},setX:function(t,e){return this.array[t*this.itemSize]=e,this},getY:function(t){return this.array[t*this.itemSize+1]},setY:function(t,e){return this.array[t*this.itemSize+1]=e,this},getZ:function(t){return this.array[t*this.itemSize+2]},setZ:function(t,e){return this.array[t*this.itemSize+2]=e,this},getW:function(t){return this.array[t*this.itemSize+3]},setW:function(t,e){return this.array[t*this.itemSize+3]=e,this},setXY:function(t,e,i){return t*=this.itemSize,this.array[t+0]=e,this.array[t+1]=i,this},setXYZ:function(t,e,i,r){return t*=this.itemSize,this.array[t+0]=e,this.array[t+1]=i,this.array[t+2]=r,this},setXYZW:function(t,e,i,r,n){return t*=this.itemSize,this.array[t+0]=e,this.array[t+1]=i,this.array[t+2]=r,this.array[t+3]=n,this},onUpload:function(t){return this.onUploadCallback=t,this},clone:function(){return new this.constructor(this.array,this.itemSize).copy(this)}}),(br.prototype=Object.create(yr.prototype)).constructor=br,(xr.prototype=Object.create(yr.prototype)).constructor=xr,(_r.prototype=Object.create(yr.prototype)).constructor=_r,(wr.prototype=Object.create(yr.prototype)).constructor=wr,(Sr.prototype=Object.create(yr.prototype)).constructor=Sr,(Ar.prototype=Object.create(yr.prototype)).constructor=Ar,(Mr.prototype=Object.create(yr.prototype)).constructor=Mr,(Pr.prototype=Object.create(yr.prototype)).constructor=Pr,(Er.prototype=Object.create(yr.prototype)).constructor=Er,Object.assign(Cr.prototype,{computeGroups:function(t){for(var e,i=[],r=void 0,n=t.faces,o=0;o<n.length;o++){var a=n[o];a.materialIndex!==r&&(r=a.materialIndex,void 0!==e&&(e.count=3*o-e.start,i.push(e)),e={start:3*o,materialIndex:r})}void 0!==e&&(e.count=3*o-e.start,i.push(e)),this.groups=i},fromGeometry:function(t){var e,i=this,r=t.faces,n=t.vertices,o=t.faceVertexUvs,a=o[0]&&0<o[0].length,s=o[1]&&0<o[1].length,c=t.morphTargets,u=c.length;if(0<u){e=[];for(var h=0;h<u;h++)e[h]=[];this.morphTargets.position=e}var l,p=t.morphNormals,d=p.length;if(0<d){l=[];for(h=0;h<d;h++)l[h]=[];this.morphTargets.normal=l}var f=t.skinIndices,m=t.skinWeights,g=f.length===n.length,v=m.length===n.length;for(h=0;h<r.length;h++){var y=r[h];i.vertices.push(n[y.a],n[y.b],n[y.c]);var b=y.vertexNormals;if(3===b.length)i.normals.push(b[0],b[1],b[2]);else{var x=y.normal;i.normals.push(x,x,x)}var _,w=y.vertexColors;if(3===w.length)i.colors.push(w[0],w[1],w[2]);else{var S=y.color;i.colors.push(S,S,S)}if(!0===a)void 0!==(_=o[0][h])?i.uvs.push(_[0],_[1],_[2]):(console.warn("THREE.DirectGeometry.fromGeometry(): Undefined vertexUv ",h),i.uvs.push(new Ze,new Ze,new Ze));if(!0===s)void 0!==(_=o[1][h])?i.uvs2.push(_[0],_[1],_[2]):(console.warn("THREE.DirectGeometry.fromGeometry(): Undefined vertexUv2 ",h),i.uvs2.push(new Ze,new Ze,new Ze));for(var A=0;A<u;A++){var M=c[A].vertices;e[A].push(M[y.a],M[y.b],M[y.c])}for(A=0;A<d;A++){var P=p[A].vertexNormals[h];l[A].push(P.a,P.b,P.c)}g&&i.skinIndices.push(f[y.a],f[y.b],f[y.c]),v&&i.skinWeights.push(m[y.a],m[y.b],m[y.c])}return this.computeGroups(t),this.verticesNeedUpdate=t.verticesNeedUpdate,this.normalsNeedUpdate=t.normalsNeedUpdate,this.colorsNeedUpdate=t.colorsNeedUpdate,this.uvsNeedUpdate=t.uvsNeedUpdate,this.groupsNeedUpdate=t.groupsNeedUpdate,this}});var Ir,Rr,Lr,Or,Dr,kr,Br,Nr,Fr,zr,Ur=1;function jr(){Object.defineProperty(this,"id",{value:Ur+=2}),this.uuid=Ye.generateUUID(),this.name="",this.type="BufferGeometry",this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null,this.drawRange={start:0,count:1/0}}function Gr(t,e,i,r,n,o){vr.call(this),this.type="BoxGeometry",this.parameters={width:t,height:e,depth:i,widthSegments:r,heightSegments:n,depthSegments:o},this.fromBufferGeometry(new Vr(t,e,i,r,n,o)),this.mergeVertices()}function Vr(t,e,i,r,n,o){jr.call(this),this.type="BoxBufferGeometry",this.parameters={width:t,height:e,depth:i,widthSegments:r,heightSegments:n,depthSegments:o};var T=this;t=t||1,e=e||1,i=i||1,r=Math.floor(r)||1,n=Math.floor(n)||1,o=Math.floor(o)||1;var I=[],R=[],L=[],O=[],D=0,k=0;function a(t,e,i,r,n,o,a,s,c,u,h){var l,p,d=o/c,f=a/u,m=o/2,g=a/2,v=s/2,y=c+1,b=u+1,x=0,_=0,w=new Qe;for(p=0;p<b;p++){var S=p*f-g;for(l=0;l<y;l++){var A=l*d-m;w[t]=A*r,w[e]=S*n,w[i]=v,R.push(w.x,w.y,w.z),w[t]=0,w[e]=0,w[i]=0<s?1:-1,L.push(w.x,w.y,w.z),O.push(l/c),O.push(1-p/u),x+=1}}for(p=0;p<u;p++)for(l=0;l<c;l++){var M=D+l+y*p,P=D+l+y*(p+1),E=D+(l+1)+y*(p+1),C=D+(l+1)+y*p;I.push(M,P,C),I.push(P,E,C),_+=6}T.addGroup(k,_,h),k+=_,D+=x}a("z","y","x",-1,-1,i,e,t,o,n,0),a("z","y","x",1,-1,i,e,-t,o,n,1),a("x","z","y",1,1,t,i,e,r,o,2),a("x","z","y",1,-1,t,i,-e,r,o,3),a("x","y","z",1,-1,t,e,i,r,n,4),a("x","y","z",-1,-1,t,e,-i,r,n,5),this.setIndex(I),this.addAttribute("position",new Pr(R,3)),this.addAttribute("normal",new Pr(L,3)),this.addAttribute("uv",new Pr(O,2))}function Hr(t,e,i,r){vr.call(this),this.type="PlaneGeometry",this.parameters={width:t,height:e,widthSegments:i,heightSegments:r},this.fromBufferGeometry(new $r(t,e,i,r)),this.mergeVertices()}function $r(t,e,i,r){jr.call(this),this.type="PlaneBufferGeometry",this.parameters={width:t,height:e,widthSegments:i,heightSegments:r};var n,o,a=(t=t||1)/2,s=(e=e||1)/2,c=Math.floor(i)||1,u=Math.floor(r)||1,h=c+1,l=u+1,p=t/c,d=e/u,f=[],m=[],g=[],v=[];for(o=0;o<l;o++){var y=o*d-s;for(n=0;n<h;n++){var b=n*p-a;m.push(b,-y,0),g.push(0,0,1),v.push(n/c),v.push(1-o/u)}}for(o=0;o<u;o++)for(n=0;n<c;n++){var x=n+h*o,_=n+h*(o+1),w=n+1+h*(o+1),S=n+1+h*o;f.push(x,_,S),f.push(_,w,S)}this.setIndex(f),this.addAttribute("position",new Pr(m,3)),this.addAttribute("normal",new Pr(g,3)),this.addAttribute("uv",new Pr(v,2))}jr.prototype=Object.assign(Object.create(v.prototype),{constructor:jr,isBufferGeometry:!0,getIndex:function(){return this.index},setIndex:function(t){Array.isArray(t)?this.index=new(65535<Tr(t)?Mr:Sr)(t,1):this.index=t},addAttribute:function(t,e){return e&&e.isBufferAttribute||e&&e.isInterleavedBufferAttribute?"index"===t?(console.warn("THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute."),void this.setIndex(e)):(this.attributes[t]=e,this):(console.warn("THREE.BufferGeometry: .addAttribute() now expects ( name, attribute )."),void this.addAttribute(t,new yr(e,arguments[2])))},getAttribute:function(t){return this.attributes[t]},removeAttribute:function(t){return delete this.attributes[t],this},addGroup:function(t,e,i){this.groups.push({start:t,count:e,materialIndex:void 0!==i?i:0})},clearGroups:function(){this.groups=[]},setDrawRange:function(t,e){this.drawRange.start=t,this.drawRange.count=e},applyMatrix:function(t){var e=this.attributes.position;void 0!==e&&(t.applyToBufferAttribute(e),e.needsUpdate=!0);var i=this.attributes.normal;void 0!==i&&((new ti).getNormalMatrix(t).applyToBufferAttribute(i),i.needsUpdate=!0);return null!==this.boundingBox&&this.computeBoundingBox(),null!==this.boundingSphere&&this.computeBoundingSphere(),this},rotateX:(zr=new Ke,function(t){return zr.makeRotationX(t),this.applyMatrix(zr),this}),rotateY:(Fr=new Ke,function(t){return Fr.makeRotationY(t),this.applyMatrix(Fr),this}),rotateZ:(Nr=new Ke,function(t){return Nr.makeRotationZ(t),this.applyMatrix(Nr),this}),translate:(Br=new Ke,function(t,e,i){return Br.makeTranslation(t,e,i),this.applyMatrix(Br),this}),scale:(kr=new Ke,function(t,e,i){return kr.makeScale(t,e,i),this.applyMatrix(kr),this}),lookAt:(Dr=new or,function(t){Dr.lookAt(t),Dr.updateMatrix(),this.applyMatrix(Dr.matrix)}),center:(Or=new Qe,function(){return this.computeBoundingBox(),this.boundingBox.getCenter(Or).negate(),this.translate(Or.x,Or.y,Or.z),this}),setFromObject:function(t){var e=t.geometry;if(t.isPoints||t.isLine){var i=new Pr(3*e.vertices.length,3),r=new Pr(3*e.colors.length,3);if(this.addAttribute("position",i.copyVector3sArray(e.vertices)),this.addAttribute("color",r.copyColorsArray(e.colors)),e.lineDistances&&e.lineDistances.length===e.vertices.length){var n=new Pr(e.lineDistances.length,1);this.addAttribute("lineDistance",n.copyArray(e.lineDistances))}null!==e.boundingSphere&&(this.boundingSphere=e.boundingSphere.clone()),null!==e.boundingBox&&(this.boundingBox=e.boundingBox.clone())}else t.isMesh&&e&&e.isGeometry&&this.fromGeometry(e);return this},setFromPoints:function(t){for(var e=[],i=0,r=t.length;i<r;i++){var n=t[i];e.push(n.x,n.y,n.z||0)}return this.addAttribute("position",new Pr(e,3)),this},updateFromObject:function(t){var e,i=t.geometry;if(t.isMesh){var r=i.__directGeometry;if(!0===i.elementsNeedUpdate&&(r=void 0,i.elementsNeedUpdate=!1),void 0===r)return this.fromGeometry(i);r.verticesNeedUpdate=i.verticesNeedUpdate,r.normalsNeedUpdate=i.normalsNeedUpdate,r.colorsNeedUpdate=i.colorsNeedUpdate,r.uvsNeedUpdate=i.uvsNeedUpdate,r.groupsNeedUpdate=i.groupsNeedUpdate,i.verticesNeedUpdate=!1,i.normalsNeedUpdate=!1,i.colorsNeedUpdate=!1,i.uvsNeedUpdate=!1,i.groupsNeedUpdate=!1,i=r}return!0===i.verticesNeedUpdate&&(void 0!==(e=this.attributes.position)&&(e.copyVector3sArray(i.vertices),e.needsUpdate=!0),i.verticesNeedUpdate=!1),!0===i.normalsNeedUpdate&&(void 0!==(e=this.attributes.normal)&&(e.copyVector3sArray(i.normals),e.needsUpdate=!0),i.normalsNeedUpdate=!1),!0===i.colorsNeedUpdate&&(void 0!==(e=this.attributes.color)&&(e.copyColorsArray(i.colors),e.needsUpdate=!0),i.colorsNeedUpdate=!1),i.uvsNeedUpdate&&(void 0!==(e=this.attributes.uv)&&(e.copyVector2sArray(i.uvs),e.needsUpdate=!0),i.uvsNeedUpdate=!1),i.lineDistancesNeedUpdate&&(void 0!==(e=this.attributes.lineDistance)&&(e.copyArray(i.lineDistances),e.needsUpdate=!0),i.lineDistancesNeedUpdate=!1),i.groupsNeedUpdate&&(i.computeGroups(t.geometry),this.groups=i.groups,i.groupsNeedUpdate=!1),this},fromGeometry:function(t){return t.__directGeometry=(new Cr).fromGeometry(t),this.fromDirectGeometry(t.__directGeometry)},fromDirectGeometry:function(t){var e=new Float32Array(3*t.vertices.length);if(this.addAttribute("position",new yr(e,3).copyVector3sArray(t.vertices)),0<t.normals.length){var i=new Float32Array(3*t.normals.length);this.addAttribute("normal",new yr(i,3).copyVector3sArray(t.normals))}if(0<t.colors.length){var r=new Float32Array(3*t.colors.length);this.addAttribute("color",new yr(r,3).copyColorsArray(t.colors))}if(0<t.uvs.length){var n=new Float32Array(2*t.uvs.length);this.addAttribute("uv",new yr(n,2).copyVector2sArray(t.uvs))}if(0<t.uvs2.length){var o=new Float32Array(2*t.uvs2.length);this.addAttribute("uv2",new yr(o,2).copyVector2sArray(t.uvs2))}for(var a in this.groups=t.groups,t.morphTargets){for(var s=[],c=t.morphTargets[a],u=0,h=c.length;u<h;u++){var l=c[u],p=new Pr(3*l.length,3);s.push(p.copyVector3sArray(l))}this.morphAttributes[a]=s}if(0<t.skinIndices.length){var d=new Pr(4*t.skinIndices.length,4);this.addAttribute("skinIndex",d.copyVector4sArray(t.skinIndices))}if(0<t.skinWeights.length){var f=new Pr(4*t.skinWeights.length,4);this.addAttribute("skinWeight",f.copyVector4sArray(t.skinWeights))}return null!==t.boundingSphere&&(this.boundingSphere=t.boundingSphere.clone()),null!==t.boundingBox&&(this.boundingBox=t.boundingBox.clone()),this},computeBoundingBox:function(){null===this.boundingBox&&(this.boundingBox=new Ai);var t=this.attributes.position;void 0!==t?this.boundingBox.setFromBufferAttribute(t):this.boundingBox.makeEmpty(),(isNaN(this.boundingBox.min.x)||isNaN(this.boundingBox.min.y)||isNaN(this.boundingBox.min.z))&&console.error('THREE.BufferGeometry.computeBoundingBox: Computed min/max have NaN values. The "position" attribute is likely to have NaN values.',this)},computeBoundingSphere:(Rr=new Ai,Lr=new Qe,function(){null===this.boundingSphere&&(this.boundingSphere=new Mi);var t=this.attributes.position;if(t){var e=this.boundingSphere.center;Rr.setFromBufferAttribute(t),Rr.getCenter(e);for(var i=0,r=0,n=t.count;r<n;r++)Lr.x=t.getX(r),Lr.y=t.getY(r),Lr.z=t.getZ(r),i=Math.max(i,e.distanceToSquared(Lr));this.boundingSphere.radius=Math.sqrt(i),isNaN(this.boundingSphere.radius)&&console.error('THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The "position" attribute is likely to have NaN values.',this)}}),computeFaceNormals:function(){},computeVertexNormals:function(){var t=this.index,e=this.attributes,i=this.groups;if(e.position){var r=e.position.array;if(void 0===e.normal)this.addAttribute("normal",new yr(new Float32Array(r.length),3));else for(var n=e.normal.array,o=0,a=n.length;o<a;o++)n[o]=0;var s,c,u,h=e.normal.array,l=new Qe,p=new Qe,d=new Qe,f=new Qe,m=new Qe;if(t){var g=t.array;0===i.length&&this.addGroup(0,g.length);for(var v=0,y=i.length;v<y;++v){var b=i[v],x=b.start;for(o=x,a=x+b.count;o<a;o+=3)s=3*g[o+0],c=3*g[o+1],u=3*g[o+2],l.fromArray(r,s),p.fromArray(r,c),d.fromArray(r,u),f.subVectors(d,p),m.subVectors(l,p),f.cross(m),h[s]+=f.x,h[s+1]+=f.y,h[s+2]+=f.z,h[c]+=f.x,h[c+1]+=f.y,h[c+2]+=f.z,h[u]+=f.x,h[u+1]+=f.y,h[u+2]+=f.z}}else for(o=0,a=r.length;o<a;o+=9)l.fromArray(r,o),p.fromArray(r,o+3),d.fromArray(r,o+6),f.subVectors(d,p),m.subVectors(l,p),f.cross(m),h[o]=f.x,h[o+1]=f.y,h[o+2]=f.z,h[o+3]=f.x,h[o+4]=f.y,h[o+5]=f.z,h[o+6]=f.x,h[o+7]=f.y,h[o+8]=f.z;this.normalizeNormals(),e.normal.needsUpdate=!0}},merge:function(t,e){if(t&&t.isBufferGeometry){void 0===e&&(e=0,console.warn("THREE.BufferGeometry.merge(): Overwriting original geometry, starting at offset=0. Use BufferGeometryUtils.mergeBufferGeometries() for lossless merge."));var i=this.attributes;for(var r in i)if(void 0!==t.attributes[r])for(var n=i[r].array,o=t.attributes[r],a=o.array,s=0,c=o.itemSize*e;s<a.length;s++,c++)n[c]=a[s];return this}console.error("THREE.BufferGeometry.merge(): geometry not an instance of THREE.BufferGeometry.",t)},normalizeNormals:(Ir=new Qe,function(){for(var t=this.attributes.normal,e=0,i=t.count;e<i;e++)Ir.x=t.getX(e),Ir.y=t.getY(e),Ir.z=t.getZ(e),Ir.normalize(),t.setXYZ(e,Ir.x,Ir.y,Ir.z)}),toNonIndexed:function(){if(null===this.index)return console.warn("THREE.BufferGeometry.toNonIndexed(): Geometry is already non-indexed."),this;var t=new jr,e=this.index.array,i=this.attributes;for(var r in i){for(var n=i[r],o=n.array,a=n.itemSize,s=new o.constructor(e.length*a),c=0,u=0,h=0,l=e.length;h<l;h++){c=e[h]*a;for(var p=0;p<a;p++)s[u++]=o[c++]}t.addAttribute(r,new yr(s,a))}var d=this.groups;for(h=0,l=d.length;h<l;h++){var f=d[h];t.addGroup(f.start,f.count,f.materialIndex)}return t},toJSON:function(){var t={metadata:{version:4.5,type:"BufferGeometry",generator:"BufferGeometry.toJSON"}};if(t.uuid=this.uuid,t.type=this.type,""!==this.name&&(t.name=this.name),void 0!==this.parameters){var e=this.parameters;for(var i in e)void 0!==e[i]&&(t[i]=e[i]);return t}t.data={attributes:{}};var r=this.index;if(null!==r){var n=Array.prototype.slice.call(r.array);t.data.index={type:r.array.constructor.name,array:n}}var o=this.attributes;for(var i in o){var a=o[i];n=Array.prototype.slice.call(a.array);t.data.attributes[i]={itemSize:a.itemSize,type:a.array.constructor.name,array:n,normalized:a.normalized}}var s=this.groups;0<s.length&&(t.data.groups=JSON.parse(JSON.stringify(s)));var c=this.boundingSphere;return null!==c&&(t.data.boundingSphere={center:c.center.toArray(),radius:c.radius}),t},clone:function(){return(new jr).copy(this)},copy:function(t){var e,i,r;this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null,this.name=t.name;var n=t.index;null!==n&&this.setIndex(n.clone());var o=t.attributes;for(e in o){var a=o[e];this.addAttribute(e,a.clone())}var s=t.morphAttributes;for(e in s){var c=[],u=s[e];for(i=0,r=u.length;i<r;i++)c.push(u[i].clone());this.morphAttributes[e]=c}var h=t.groups;for(i=0,r=h.length;i<r;i++){var l=h[i];this.addGroup(l.start,l.count,l.materialIndex)}var p=t.boundingBox;null!==p&&(this.boundingBox=p.clone());var d=t.boundingSphere;return null!==d&&(this.boundingSphere=d.clone()),this.drawRange.start=t.drawRange.start,this.drawRange.count=t.drawRange.count,this},dispose:function(){this.dispatchEvent({type:"dispose"})}}),(Gr.prototype=Object.create(vr.prototype)).constructor=Gr,(Vr.prototype=Object.create(jr.prototype)).constructor=Vr,(Hr.prototype=Object.create(vr.prototype)).constructor=Hr,($r.prototype=Object.create(jr.prototype)).constructor=$r;var Wr,Xr,qr,Yr,Zr,Kr,Jr,Qr,tn,en,rn,nn,on,an,sn,cn,un,hn,ln,pn,dn,fn,mn,gn,vn=0;function yn(){Object.defineProperty(this,"id",{value:vn++}),this.uuid=Ye.generateUUID(),this.name="",this.type="Material",this.fog=!0,this.lights=!0,this.blending=X,this.side=U,this.flatShading=!1,this.vertexColors=Mt,this.opacity=1,this.transparent=!1,this.blendSrc=st,this.blendDst=ct,this.blendEquation=j,this.blendSrcAlpha=null,this.blendDstAlpha=null,this.blendEquationAlpha=null,this.depthFunc=vt,this.depthTest=!0,this.depthWrite=!0,this.clippingPlanes=null,this.clipIntersection=!1,this.clipShadows=!1,this.shadowSide=null,this.colorWrite=!0,this.precision=null,this.polygonOffset=!1,this.polygonOffsetFactor=0,this.polygonOffsetUnits=0,this.dithering=!1,this.alphaTest=0,this.premultipliedAlpha=!1,this.overdraw=0,this.visible=!0,this.userData={},this.needsUpdate=!0}function bn(t){yn.call(this),this.type="MeshBasicMaterial",this.color=new Li(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.combine=wt,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.skinning=!1,this.morphTargets=!1,this.lights=!1,this.setValues(t)}function xn(t){yn.call(this),this.type="ShaderMaterial",this.defines={},this.uniforms={},this.vertexShader="void main() {\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}",this.fragmentShader="void main() {\n\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\n}",this.linewidth=1,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.lights=!1,this.clipping=!1,this.skinning=!1,this.morphTargets=!1,this.morphNormals=!1,this.extensions={derivatives:!1,fragDepth:!1,drawBuffers:!1,shaderTextureLOD:!1},this.defaultAttributeValues={color:[1,1,1],uv:[0,0],uv2:[0,0]},this.index0AttributeName=void 0,this.uniformsNeedUpdate=!1,void 0!==t&&(void 0!==t.attributes&&console.error("THREE.ShaderMaterial: attributes should now be defined in THREE.BufferGeometry instead."),this.setValues(t))}function _n(t,e){this.origin=void 0!==t?t:new Qe,this.direction=void 0!==e?e:new Qe}function wn(t,e){this.start=void 0!==t?t:new Qe,this.end=void 0!==e?e:new Qe}function Sn(t,e,i){this.a=void 0!==t?t:new Qe,this.b=void 0!==e?e:new Qe,this.c=void 0!==i?i:new Qe}function An(t,e){or.call(this),this.type="Mesh",this.geometry=void 0!==t?t:new jr,this.material=void 0!==e?e:new bn({color:16777215*Math.random()}),this.drawMode=ze,this.updateMorphTargets()}function Mn(o,i,a,r){var s,c,u,h=new Li(0),l=0;function p(t,e){i.buffers.color.setClear(t.r,t.g,t.b,e,r)}return{getClearColor:function(){return h},setClearColor:function(t,e){h.set(t),p(h,l=void 0!==e?e:1)},getClearAlpha:function(){return l},setClearAlpha:function(t){p(h,l=t)},render:function(t,e,i,r){var n=e.background;null===n?p(h,l):n&&n.isColor&&(p(n,1),r=!0),(o.autoClear||r)&&o.clear(o.autoClearColor,o.autoClearDepth,o.autoClearStencil),n&&n.isCubeTexture?(void 0===u&&((u=new An(new Vr(1,1,1),new xn({uniforms:Bi.cube.uniforms,vertexShader:Bi.cube.vertexShader,fragmentShader:Bi.cube.fragmentShader,side:Y,depthTest:!0,depthWrite:!1,fog:!1}))).geometry.removeAttribute("normal"),u.geometry.removeAttribute("uv"),u.onBeforeRender=function(t,e,i){this.matrixWorld.copyPosition(i.matrixWorld)},a.update(u.geometry)),u.material.uniforms.tCube.value=n,t.push(u,u.geometry,u.material,0,null)):n&&n.isTexture&&(void 0===s&&(s=new sr(-1,1,1,-1,0,1),c=new An(new $r(2,2),new bn({depthTest:!1,depthWrite:!1,fog:!1})),a.update(c.geometry)),c.material.map=n,o.renderBufferDirect(s,null,c.geometry,c.material,c,null))}}}function Pn(i,o,a){var s;this.setMode=function(t){s=t},this.render=function(t,e){i.drawArrays(s,t,e),a.update(e,s)},this.renderInstances=function(t,e,i){var r=o.get("ANGLE_instanced_arrays");if(null!==r){var n=t.attributes.position;n.isInterleavedBufferAttribute?(i=n.data.count,r.drawArraysInstancedANGLE(s,0,i,t.maxInstancedCount)):r.drawArraysInstancedANGLE(s,e,i,t.maxInstancedCount),a.update(i,s,t.maxInstancedCount)}else console.error("THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.")}}function En(e,i,t){var r;function n(t){if("highp"===t){if(0<e.getShaderPrecisionFormat(e.VERTEX_SHADER,e.HIGH_FLOAT).precision&&0<e.getShaderPrecisionFormat(e.FRAGMENT_SHADER,e.HIGH_FLOAT).precision)return"highp";t="mediump"}return"mediump"===t&&0<e.getShaderPrecisionFormat(e.VERTEX_SHADER,e.MEDIUM_FLOAT).precision&&0<e.getShaderPrecisionFormat(e.FRAGMENT_SHADER,e.MEDIUM_FLOAT).precision?"mediump":"lowp"}var o=void 0!==t.precision?t.precision:"highp",a=n(o);a!==o&&(console.warn("THREE.WebGLRenderer:",o,"not supported, using",a,"instead."),o=a);var s=!0===t.logarithmicDepthBuffer,c=e.getParameter(e.MAX_TEXTURE_IMAGE_UNITS),u=e.getParameter(e.MAX_VERTEX_TEXTURE_IMAGE_UNITS),h=e.getParameter(e.MAX_TEXTURE_SIZE),l=e.getParameter(e.MAX_CUBE_MAP_TEXTURE_SIZE),p=e.getParameter(e.MAX_VERTEX_ATTRIBS),d=e.getParameter(e.MAX_VERTEX_UNIFORM_VECTORS),f=e.getParameter(e.MAX_VARYING_VECTORS),m=e.getParameter(e.MAX_FRAGMENT_UNIFORM_VECTORS),g=0<u,v=!!i.get("OES_texture_float");return{getMaxAnisotropy:function(){if(void 0!==r)return r;var t=i.get("EXT_texture_filter_anisotropic");return r=null!==t?e.getParameter(t.MAX_TEXTURE_MAX_ANISOTROPY_EXT):0},getMaxPrecision:n,precision:o,logarithmicDepthBuffer:s,maxTextures:c,maxVertexTextures:u,maxTextureSize:h,maxCubemapSize:l,maxAttributes:p,maxVertexUniforms:d,maxVaryings:f,maxFragmentUniforms:m,vertexTextures:g,floatFragmentTextures:v,floatVertexTextures:g&&v}}function Cn(){var h=this,l=null,p=0,d=!1,f=!1,m=new Pi,g=new ti,v={value:null,needsUpdate:!1};function y(){v.value!==l&&(v.value=l,v.needsUpdate=0<p),h.numPlanes=p,h.numIntersection=0}function b(t,e,i,r){var n=null!==t?t.length:0,o=null;if(0!==n){if(o=v.value,!0!==r||null===o){var a=i+4*n,s=e.matrixWorldInverse;g.getNormalMatrix(s),(null===o||o.length<a)&&(o=new Float32Array(a));for(var c=0,u=i;c!==n;++c,u+=4)m.copy(t[c]).applyMatrix4(s,g),m.normal.toArray(o,u),o[u+3]=m.constant}v.value=o,v.needsUpdate=!0}return h.numPlanes=n,o}this.uniform=v,this.numPlanes=0,this.numIntersection=0,this.init=function(t,e,i){var r=0!==t.length||e||0!==p||d;return d=e,l=b(t,i,0),p=t.length,r},this.beginShadows=function(){f=!0,b(null)},this.endShadows=function(){f=!1,y()},this.setState=function(t,e,i,r,n,o){if(!d||null===t||0===t.length||f&&!i)f?b(null):y();else{var a=f?0:p,s=4*a,c=n.clippingState||null;v.value=c,c=b(t,r,s,o);for(var u=0;u!==s;++u)c[u]=l[u];n.clippingState=c,this.numIntersection=e?this.numPlanes:0,this.numPlanes+=a}}}function Tn(i){var r={};return{get:function(t){if(void 0!==r[t])return r[t];var e;switch(t){case"WEBGL_depth_texture":e=i.getExtension("WEBGL_depth_texture")||i.getExtension("MOZ_WEBGL_depth_texture")||i.getExtension("WEBKIT_WEBGL_depth_texture");break;case"EXT_texture_filter_anisotropic":e=i.getExtension("EXT_texture_filter_anisotropic")||i.getExtension("MOZ_EXT_texture_filter_anisotropic")||i.getExtension("WEBKIT_EXT_texture_filter_anisotropic");break;case"WEBGL_compressed_texture_s3tc":e=i.getExtension("WEBGL_compressed_texture_s3tc")||i.getExtension("MOZ_WEBGL_compressed_texture_s3tc")||i.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc");break;case"WEBGL_compressed_texture_pvrtc":e=i.getExtension("WEBGL_compressed_texture_pvrtc")||i.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc");break;default:e=i.getExtension(t)}return null===e&&console.warn("THREE.WebGLRenderer: "+t+" extension not supported."),r[t]=e}}}function In(l,p,o){var a={},d={};function s(t){var e=t.target,i=a[e.id];for(var r in null!==i.index&&p.remove(i.index),i.attributes)p.remove(i.attributes[r]);e.removeEventListener("dispose",s),delete a[e.id];var n=d[e.id];n&&(p.remove(n),delete d[e.id]),(n=d[i.id])&&(p.remove(n),delete d[i.id]),o.memory.geometries--}return{get:function(t,e){var i=a[e.id];return i||(e.addEventListener("dispose",s),e.isBufferGeometry?i=e:e.isGeometry&&(void 0===e._bufferGeometry&&(e._bufferGeometry=(new jr).setFromObject(t)),i=e._bufferGeometry),a[e.id]=i,o.memory.geometries++,i)},update:function(t){var e=t.index,i=t.attributes;for(var r in null!==e&&p.update(e,l.ELEMENT_ARRAY_BUFFER),i)p.update(i[r],l.ARRAY_BUFFER);var n=t.morphAttributes;for(var r in n)for(var o=n[r],a=0,s=o.length;a<s;a++)p.update(o[a],l.ARRAY_BUFFER)},getWireframeAttribute:function(t){var e=d[t.id];if(e)return e;var i,r=[],n=t.index,o=t.attributes;if(null!==n)for(var a=0,s=(i=n.array).length;a<s;a+=3){var c=i[a+0],u=i[a+1],h=i[a+2];r.push(c,u,u,h,h,c)}else for(a=0,s=(i=o.position.array).length/3-1;a<s;a+=3)c=a+0,u=a+1,h=a+2,r.push(c,u,u,h,h,c);return e=new(65535<Tr(r)?Mr:Sr)(r,1),p.update(e,l.ELEMENT_ARRAY_BUFFER),d[t.id]=e}}}function Rn(i,n,o){var a,s,c;this.setMode=function(t){a=t},this.setIndex=function(t){s=t.type,c=t.bytesPerElement},this.render=function(t,e){i.drawElements(a,e,s,t*c),o.update(e,a)},this.renderInstances=function(t,e,i){var r=n.get("ANGLE_instanced_arrays");null!==r?(r.drawElementsInstancedANGLE(a,i,s,e*c,t.maxInstancedCount),o.update(i,a,t.maxInstancedCount)):console.error("THREE.WebGLIndexedBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.")}}function Ln(r){var n={frame:0,calls:0,triangles:0,points:0,lines:0};return{memory:{geometries:0,textures:0},render:n,programs:null,autoReset:!0,reset:function(){n.frame++,n.calls=0,n.triangles=0,n.points=0,n.lines=0},update:function(t,e,i){switch(i=i||1,n.calls++,e){case r.TRIANGLES:n.triangles+=i*(t/3);break;case r.TRIANGLE_STRIP:case r.TRIANGLE_FAN:n.triangles+=i*(t-2);break;case r.LINES:n.lines+=i*(t/2);break;case r.LINE_STRIP:n.lines+=i*(t-1);break;case r.LINE_LOOP:n.lines+=i*t;break;case r.POINTS:n.points+=i*t;break;default:console.error("THREE.WebGLInfo: Unknown draw mode:",e)}}}}function On(t,e){return Math.abs(e[1])-Math.abs(t[1])}function Dn(d){var f={},m=new Float32Array(8);return{update:function(t,e,i,r){var n=t.morphTargetInfluences,o=n.length,a=f[e.id];if(void 0===a){a=[];for(var s=0;s<o;s++)a[s]=[s,0];f[e.id]=a}var c=i.morphTargets&&e.morphAttributes.position,u=i.morphNormals&&e.morphAttributes.normal;for(s=0;s<o;s++)0!==(h=a[s])[1]&&(c&&e.removeAttribute("morphTarget"+s),u&&e.removeAttribute("morphNormal"+s));for(s=0;s<o;s++)(h=a[s])[0]=s,h[1]=n[s];for(a.sort(On),s=0;s<8;s++){var h;if(h=a[s]){var l=h[0],p=h[1];if(p){c&&e.addAttribute("morphTarget"+s,c[l]),u&&e.addAttribute("morphNormal"+s,u[l]),m[s]=p;continue}}m[s]=0}r.getUniforms().setValue(d,"morphTargetInfluences",m)}}}function kn(n,o){var a={};return{update:function(t){var e=o.render.frame,i=t.geometry,r=n.get(t,i);return a[r.id]!==e&&(i.isGeometry&&r.updateFromObject(t),n.update(r),a[r.id]=e),r},dispose:function(){a={}}}}function Bn(t,e,i,r,n,o,a,s,c,u){bi.call(this,t=void 0!==t?t:[],e=void 0!==e?e:Rt,i,r,n,o,a,s,c,u),this.flipY=!1}yn.prototype=Object.assign(Object.create(v.prototype),{constructor:yn,isMaterial:!0,onBeforeCompile:function(){},setValues:function(t){if(void 0!==t)for(var e in t){var i=t[e];if(void 0!==i)if("shading"!==e){var r=this[e];void 0!==r?r&&r.isColor?r.set(i):r&&r.isVector3&&i&&i.isVector3?r.copy(i):this[e]="overdraw"===e?Number(i):i:console.warn("THREE."+this.type+": '"+e+"' is not a property of this material.")}else console.warn("THREE."+this.type+": .shading has been removed. Use the boolean .flatShading instead."),this.flatShading=1===i;else console.warn("THREE.Material: '"+e+"' parameter is undefined.")}},toJSON:function(t){var e=void 0===t||"string"==typeof t;e&&(t={textures:{},images:{}});var i={metadata:{version:4.5,type:"Material",generator:"Material.toJSON"}};function r(t){var e=[];for(var i in t){var r=t[i];delete r.metadata,e.push(r)}return e}if(i.uuid=this.uuid,i.type=this.type,""!==this.name&&(i.name=this.name),this.color&&this.color.isColor&&(i.color=this.color.getHex()),void 0!==this.roughness&&(i.roughness=this.roughness),void 0!==this.metalness&&(i.metalness=this.metalness),this.emissive&&this.emissive.isColor&&(i.emissive=this.emissive.getHex()),1!==this.emissiveIntensity&&(i.emissiveIntensity=this.emissiveIntensity),this.specular&&this.specular.isColor&&(i.specular=this.specular.getHex()),void 0!==this.shininess&&(i.shininess=this.shininess),void 0!==this.clearCoat&&(i.clearCoat=this.clearCoat),void 0!==this.clearCoatRoughness&&(i.clearCoatRoughness=this.clearCoatRoughness),this.map&&this.map.isTexture&&(i.map=this.map.toJSON(t).uuid),this.alphaMap&&this.alphaMap.isTexture&&(i.alphaMap=this.alphaMap.toJSON(t).uuid),this.lightMap&&this.lightMap.isTexture&&(i.lightMap=this.lightMap.toJSON(t).uuid),this.bumpMap&&this.bumpMap.isTexture&&(i.bumpMap=this.bumpMap.toJSON(t).uuid,i.bumpScale=this.bumpScale),this.normalMap&&this.normalMap.isTexture&&(i.normalMap=this.normalMap.toJSON(t).uuid,i.normalScale=this.normalScale.toArray()),this.displacementMap&&this.displacementMap.isTexture&&(i.displacementMap=this.displacementMap.toJSON(t).uuid,i.displacementScale=this.displacementScale,i.displacementBias=this.displacementBias),this.roughnessMap&&this.roughnessMap.isTexture&&(i.roughnessMap=this.roughnessMap.toJSON(t).uuid),this.metalnessMap&&this.metalnessMap.isTexture&&(i.metalnessMap=this.metalnessMap.toJSON(t).uuid),this.emissiveMap&&this.emissiveMap.isTexture&&(i.emissiveMap=this.emissiveMap.toJSON(t).uuid),this.specularMap&&this.specularMap.isTexture&&(i.specularMap=this.specularMap.toJSON(t).uuid),this.envMap&&this.envMap.isTexture&&(i.envMap=this.envMap.toJSON(t).uuid,i.reflectivity=this.reflectivity),this.gradientMap&&this.gradientMap.isTexture&&(i.gradientMap=this.gradientMap.toJSON(t).uuid),void 0!==this.size&&(i.size=this.size),void 0!==this.sizeAttenuation&&(i.sizeAttenuation=this.sizeAttenuation),this.blending!==X&&(i.blending=this.blending),!0===this.flatShading&&(i.flatShading=this.flatShading),this.side!==U&&(i.side=this.side),this.vertexColors!==Mt&&(i.vertexColors=this.vertexColors),this.opacity<1&&(i.opacity=this.opacity),!0===this.transparent&&(i.transparent=this.transparent),i.depthFunc=this.depthFunc,i.depthTest=this.depthTest,i.depthWrite=this.depthWrite,0!==this.rotation&&(i.rotation=this.rotation),1!==this.linewidth&&(i.linewidth=this.linewidth),void 0!==this.dashSize&&(i.dashSize=this.dashSize),void 0!==this.gapSize&&(i.gapSize=this.gapSize),void 0!==this.scale&&(i.scale=this.scale),!0===this.dithering&&(i.dithering=!0),0<this.alphaTest&&(i.alphaTest=this.alphaTest),!0===this.premultipliedAlpha&&(i.premultipliedAlpha=this.premultipliedAlpha),!0===this.wireframe&&(i.wireframe=this.wireframe),1<this.wireframeLinewidth&&(i.wireframeLinewidth=this.wireframeLinewidth),"round"!==this.wireframeLinecap&&(i.wireframeLinecap=this.wireframeLinecap),"round"!==this.wireframeLinejoin&&(i.wireframeLinejoin=this.wireframeLinejoin),!0===this.morphTargets&&(i.morphTargets=!0),!0===this.skinning&&(i.skinning=!0),!1===this.visible&&(i.visible=!1),"{}"!==JSON.stringify(this.userData)&&(i.userData=this.userData),e){var n=r(t.textures),o=r(t.images);0<n.length&&(i.textures=n),0<o.length&&(i.images=o)}return i},clone:function(){return(new this.constructor).copy(this)},copy:function(t){this.name=t.name,this.fog=t.fog,this.lights=t.lights,this.blending=t.blending,this.side=t.side,this.flatShading=t.flatShading,this.vertexColors=t.vertexColors,this.opacity=t.opacity,this.transparent=t.transparent,this.blendSrc=t.blendSrc,this.blendDst=t.blendDst,this.blendEquation=t.blendEquation,this.blendSrcAlpha=t.blendSrcAlpha,this.blendDstAlpha=t.blendDstAlpha,this.blendEquationAlpha=t.blendEquationAlpha,this.depthFunc=t.depthFunc,this.depthTest=t.depthTest,this.depthWrite=t.depthWrite,this.colorWrite=t.colorWrite,this.precision=t.precision,this.polygonOffset=t.polygonOffset,this.polygonOffsetFactor=t.polygonOffsetFactor,this.polygonOffsetUnits=t.polygonOffsetUnits,this.dithering=t.dithering,this.alphaTest=t.alphaTest,this.premultipliedAlpha=t.premultipliedAlpha,this.overdraw=t.overdraw,this.visible=t.visible,this.userData=JSON.parse(JSON.stringify(t.userData)),this.clipShadows=t.clipShadows,this.clipIntersection=t.clipIntersection;var e=t.clippingPlanes,i=null;if(null!==e){var r=e.length;i=new Array(r);for(var n=0;n!==r;++n)i[n]=e[n].clone()}return this.clippingPlanes=i,this.shadowSide=t.shadowSide,this},dispose:function(){this.dispatchEvent({type:"dispose"})}}),((bn.prototype=Object.create(yn.prototype)).constructor=bn).prototype.isMeshBasicMaterial=!0,bn.prototype.copy=function(t){return yn.prototype.copy.call(this,t),this.color.copy(t.color),this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.skinning=t.skinning,this.morphTargets=t.morphTargets,this},((xn.prototype=Object.create(yn.prototype)).constructor=xn).prototype.isShaderMaterial=!0,xn.prototype.copy=function(t){return yn.prototype.copy.call(this,t),this.fragmentShader=t.fragmentShader,this.vertexShader=t.vertexShader,this.uniforms=Ii.clone(t.uniforms),this.defines=Object.assign({},t.defines),this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.lights=t.lights,this.clipping=t.clipping,this.skinning=t.skinning,this.morphTargets=t.morphTargets,this.morphNormals=t.morphNormals,this.extensions=t.extensions,this},xn.prototype.toJSON=function(t){var e=yn.prototype.toJSON.call(this,t);return e.uniforms=this.uniforms,e.vertexShader=this.vertexShader,e.fragmentShader=this.fragmentShader,e},Object.assign(_n.prototype,{set:function(t,e){return this.origin.copy(t),this.direction.copy(e),this},clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.origin.copy(t.origin),this.direction.copy(t.direction),this},at:function(t,e){return void 0===e&&(console.warn("THREE.Ray: .at() target is now required"),e=new Qe),e.copy(this.direction).multiplyScalar(t).add(this.origin)},lookAt:function(t){return this.direction.copy(t).sub(this.origin).normalize(),this},recast:(rn=new Qe,function(t){return this.origin.copy(this.at(t,rn)),this}),closestPointToPoint:function(t,e){void 0===e&&(console.warn("THREE.Ray: .closestPointToPoint() target is now required"),e=new Qe),e.subVectors(t,this.origin);var i=e.dot(this.direction);return i<0?e.copy(this.origin):e.copy(this.direction).multiplyScalar(i).add(this.origin)},distanceToPoint:function(t){return Math.sqrt(this.distanceSqToPoint(t))},distanceSqToPoint:(en=new Qe,function(t){var e=en.subVectors(t,this.origin).dot(this.direction);return e<0?this.origin.distanceToSquared(t):(en.copy(this.direction).multiplyScalar(e).add(this.origin),en.distanceToSquared(t))}),distanceSqToSegment:(Jr=new Qe,Qr=new Qe,tn=new Qe,function(t,e,i,r){Jr.copy(t).add(e).multiplyScalar(.5),Qr.copy(e).sub(t).normalize(),tn.copy(this.origin).sub(Jr);var n,o,a,s,c=.5*t.distanceTo(e),u=-this.direction.dot(Qr),h=tn.dot(this.direction),l=-tn.dot(Qr),p=tn.lengthSq(),d=Math.abs(1-u*u);if(0<d)if(o=u*h-l,s=c*d,0<=(n=u*l-h))if(-s<=o)if(o<=s){var f=1/d;a=(n*=f)*(n+u*(o*=f)+2*h)+o*(u*n+o+2*l)+p}else o=c,a=-(n=Math.max(0,-(u*o+h)))*n+o*(o+2*l)+p;else o=-c,a=-(n=Math.max(0,-(u*o+h)))*n+o*(o+2*l)+p;else o<=-s?a=-(n=Math.max(0,-(-u*c+h)))*n+(o=0<n?-c:Math.min(Math.max(-c,-l),c))*(o+2*l)+p:o<=s?(n=0,a=(o=Math.min(Math.max(-c,-l),c))*(o+2*l)+p):a=-(n=Math.max(0,-(u*c+h)))*n+(o=0<n?c:Math.min(Math.max(-c,-l),c))*(o+2*l)+p;else o=0<u?-c:c,a=-(n=Math.max(0,-(u*o+h)))*n+o*(o+2*l)+p;return i&&i.copy(this.direction).multiplyScalar(n).add(this.origin),r&&r.copy(Qr).multiplyScalar(o).add(Jr),a}),intersectSphere:(Kr=new Qe,function(t,e){Kr.subVectors(t.center,this.origin);var i=Kr.dot(this.direction),r=Kr.dot(Kr)-i*i,n=t.radius*t.radius;if(n<r)return null;var o=Math.sqrt(n-r),a=i-o,s=i+o;return a<0&&s<0?null:a<0?this.at(s,e):this.at(a,e)}),intersectsSphere:function(t){return this.distanceToPoint(t.center)<=t.radius},distanceToPlane:function(t){var e=t.normal.dot(this.direction);if(0===e)return 0===t.distanceToPoint(this.origin)?0:null;var i=-(this.origin.dot(t.normal)+t.constant)/e;return 0<=i?i:null},intersectPlane:function(t,e){var i=this.distanceToPlane(t);return null===i?null:this.at(i,e)},intersectsPlane:function(t){var e=t.distanceToPoint(this.origin);return 0===e||t.normal.dot(this.direction)*e<0},intersectBox:function(t,e){var i,r,n,o,a,s,c=1/this.direction.x,u=1/this.direction.y,h=1/this.direction.z,l=this.origin;return 0<=c?(i=(t.min.x-l.x)*c,r=(t.max.x-l.x)*c):(i=(t.max.x-l.x)*c,r=(t.min.x-l.x)*c),0<=u?(n=(t.min.y-l.y)*u,o=(t.max.y-l.y)*u):(n=(t.max.y-l.y)*u,o=(t.min.y-l.y)*u),o<i||r<n?null:((i<n||i!=i)&&(i=n),(o<r||r!=r)&&(r=o),0<=h?(a=(t.min.z-l.z)*h,s=(t.max.z-l.z)*h):(a=(t.max.z-l.z)*h,s=(t.min.z-l.z)*h),s<i||r<a?null:((i<a||i!=i)&&(i=a),(s<r||r!=r)&&(r=s),r<0?null:this.at(0<=i?i:r,e)))},intersectsBox:(Zr=new Qe,function(t){return null!==this.intersectBox(t,Zr)}),intersectTriangle:(Wr=new Qe,Xr=new Qe,qr=new Qe,Yr=new Qe,function(t,e,i,r,n){Xr.subVectors(e,t),qr.subVectors(i,t),Yr.crossVectors(Xr,qr);var o,a=this.direction.dot(Yr);if(0<a){if(r)return null;o=1}else{if(!(a<0))return null;o=-1,a=-a}Wr.subVectors(this.origin,t);var s=o*this.direction.dot(qr.crossVectors(Wr,qr));if(s<0)return null;var c=o*this.direction.dot(Xr.cross(Wr));if(c<0)return null;if(a<s+c)return null;var u=-o*Wr.dot(Yr);return u<0?null:this.at(u/a,n)}),applyMatrix4:function(t){return this.origin.applyMatrix4(t),this.direction.transformDirection(t),this},equals:function(t){return t.origin.equals(this.origin)&&t.direction.equals(this.direction)}}),Object.assign(wn.prototype,{set:function(t,e){return this.start.copy(t),this.end.copy(e),this},clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.start.copy(t.start),this.end.copy(t.end),this},getCenter:function(t){return void 0===t&&(console.warn("THREE.Line3: .getCenter() target is now required"),t=new Qe),t.addVectors(this.start,this.end).multiplyScalar(.5)},delta:function(t){return void 0===t&&(console.warn("THREE.Line3: .delta() target is now required"),t=new Qe),t.subVectors(this.end,this.start)},distanceSq:function(){return this.start.distanceToSquared(this.end)},distance:function(){return this.start.distanceTo(this.end)},at:function(t,e){return void 0===e&&(console.warn("THREE.Line3: .at() target is now required"),e=new Qe),this.delta(e).multiplyScalar(t).add(this.start)},closestPointToPointParameter:(nn=new Qe,on=new Qe,function(t,e){nn.subVectors(t,this.start),on.subVectors(this.end,this.start);var i=on.dot(on),r=on.dot(nn)/i;return e&&(r=Ye.clamp(r,0,1)),r}),closestPointToPoint:function(t,e,i){var r=this.closestPointToPointParameter(t,e);return void 0===i&&(console.warn("THREE.Line3: .closestPointToPoint() target is now required"),i=new Qe),this.delta(i).multiplyScalar(r).add(this.start)},applyMatrix4:function(t){return this.start.applyMatrix4(t),this.end.applyMatrix4(t),this},equals:function(t){return t.start.equals(this.start)&&t.end.equals(this.end)}}),Object.assign(Sn,{getNormal:(hn=new Qe,function(t,e,i,r){void 0===r&&(console.warn("THREE.Triangle: .getNormal() target is now required"),r=new Qe),r.subVectors(i,e),hn.subVectors(t,e),r.cross(hn);var n=r.lengthSq();return 0<n?r.multiplyScalar(1/Math.sqrt(n)):r.set(0,0,0)}),getBarycoord:(sn=new Qe,cn=new Qe,un=new Qe,function(t,e,i,r,n){sn.subVectors(r,e),cn.subVectors(i,e),un.subVectors(t,e);var o=sn.dot(sn),a=sn.dot(cn),s=sn.dot(un),c=cn.dot(cn),u=cn.dot(un),h=o*c-a*a;if(void 0===n&&(console.warn("THREE.Triangle: .getBarycoord() target is now required"),n=new Qe),0===h)return n.set(-2,-1,-1);var l=1/h,p=(c*s-a*u)*l,d=(o*u-a*s)*l;return n.set(1-p-d,d,p)}),containsPoint:(an=new Qe,function(t,e,i,r){return Sn.getBarycoord(t,e,i,r,an),0<=an.x&&0<=an.y&&an.x+an.y<=1})}),Object.assign(Sn.prototype,{set:function(t,e,i){return this.a.copy(t),this.b.copy(e),this.c.copy(i),this},setFromPointsAndIndices:function(t,e,i,r){return this.a.copy(t[e]),this.b.copy(t[i]),this.c.copy(t[r]),this},clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.a.copy(t.a),this.b.copy(t.b),this.c.copy(t.c),this},getArea:(mn=new Qe,gn=new Qe,function(){return mn.subVectors(this.c,this.b),gn.subVectors(this.a,this.b),.5*mn.cross(gn).length()}),getMidpoint:function(t){return void 0===t&&(console.warn("THREE.Triangle: .getMidpoint() target is now required"),t=new Qe),t.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)},getNormal:function(t){return Sn.getNormal(this.a,this.b,this.c,t)},getPlane:function(t){return void 0===t&&(console.warn("THREE.Triangle: .getPlane() target is now required"),t=new Qe),t.setFromCoplanarPoints(this.a,this.b,this.c)},getBarycoord:function(t,e){return Sn.getBarycoord(t,this.a,this.b,this.c,e)},containsPoint:function(t){return Sn.containsPoint(t,this.a,this.b,this.c)},intersectsBox:function(t){return t.intersectsTriangle(this)},closestPointToPoint:(ln=new Pi,pn=[new wn,new wn,new wn],dn=new Qe,fn=new Qe,function(t,e){void 0===e&&(console.warn("THREE.Triangle: .closestPointToPoint() target is now required"),e=new Qe);var i=1/0;if(ln.setFromCoplanarPoints(this.a,this.b,this.c),ln.projectPoint(t,dn),!0===this.containsPoint(dn))e.copy(dn);else{pn[0].set(this.a,this.b),pn[1].set(this.b,this.c),pn[2].set(this.c,this.a);for(var r=0;r<pn.length;r++){pn[r].closestPointToPoint(dn,!0,fn);var n=dn.distanceToSquared(fn);n<i&&(i=n,e.copy(fn))}}return e}),equals:function(t){return t.a.equals(this.a)&&t.b.equals(this.b)&&t.c.equals(this.c)}}),An.prototype=Object.assign(Object.create(or.prototype),{constructor:An,isMesh:!0,setDrawMode:function(t){this.drawMode=t},copy:function(t){return or.prototype.copy.call(this,t),this.drawMode=t.drawMode,void 0!==t.morphTargetInfluences&&(this.morphTargetInfluences=t.morphTargetInfluences.slice()),void 0!==t.morphTargetDictionary&&(this.morphTargetDictionary=Object.assign({},t.morphTargetDictionary)),this},updateMorphTargets:function(){var t,e,i,r=this.geometry;if(r.isBufferGeometry){var n=r.morphAttributes,o=Object.keys(n);if(0<o.length){var a=n[o[0]];if(void 0!==a)for(this.morphTargetInfluences=[],this.morphTargetDictionary={},t=0,e=a.length;t<e;t++)i=a[t].name||String(t),this.morphTargetInfluences.push(0),this.morphTargetDictionary[i]=t}}else{var s=r.morphTargets;if(void 0!==s&&0<s.length)for(this.morphTargetInfluences=[],this.morphTargetDictionary={},t=0,e=s.length;t<e;t++)i=s[t].name||String(t),this.morphTargetInfluences.push(0),this.morphTargetDictionary[i]=t}},raycast:function(){var O=new Ke,D=new _n,k=new Mi,B=new Qe,N=new Qe,F=new Qe,z=new Qe,U=new Qe,j=new Qe,G=new Ze,V=new Ze,H=new Ze,s=new Qe,$=new Qe,u=new Qe;function W(t,e,i,r,n,o,a){return Sn.getBarycoord(t,e,i,r,s),n.multiplyScalar(s.x),o.multiplyScalar(s.y),a.multiplyScalar(s.z),n.add(o).add(a),n.clone()}function X(t,e,i,r,n,o,a,s){if(null===(e.side===Y?r.intersectTriangle(a,o,n,!0,s):r.intersectTriangle(n,o,a,e.side!==Z,s)))return null;u.copy(s),u.applyMatrix4(t.matrixWorld);var c=i.ray.origin.distanceTo(u);return c<i.near||c>i.far?null:{distance:c,point:u.clone(),object:t}}function q(t,e,i,r,n,o,a,s){B.fromBufferAttribute(r,o),N.fromBufferAttribute(r,a),F.fromBufferAttribute(r,s);var c=X(t,t.material,e,i,B,N,F,$);if(c){n&&(G.fromBufferAttribute(n,o),V.fromBufferAttribute(n,a),H.fromBufferAttribute(n,s),c.uv=W($,B,N,F,G,V,H));var u=new cr(o,a,s);Sn.getNormal(B,N,F,u.normal),c.face=u,c.faceIndex=o}return c}return function(t,e){var i,r=this.geometry,n=this.material,o=this.matrixWorld;if(void 0!==n&&(null===r.boundingSphere&&r.computeBoundingSphere(),k.copy(r.boundingSphere),k.applyMatrix4(o),!1!==t.ray.intersectsSphere(k)&&(O.getInverse(o),D.copy(t.ray).applyMatrix4(O),null===r.boundingBox||!1!==D.intersectsBox(r.boundingBox))))if(r.isBufferGeometry){var a,s,c,u,h,l=r.index,p=r.attributes.position,d=r.attributes.uv;if(null!==l)for(u=0,h=l.count;u<h;u+=3)a=l.getX(u),s=l.getX(u+1),c=l.getX(u+2),(i=q(this,t,D,p,d,a,s,c))&&(i.faceIndex=Math.floor(u/3),e.push(i));else if(void 0!==p)for(u=0,h=p.count;u<h;u+=3)(i=q(this,t,D,p,d,a=u,s=u+1,c=u+2))&&e.push(i)}else if(r.isGeometry){var f,m,g,v,y=Array.isArray(n),b=r.vertices,x=r.faces,_=r.faceVertexUvs[0];0<_.length&&(v=_);for(var w=0,S=x.length;w<S;w++){var A=x[w],M=y?n[A.materialIndex]:n;if(void 0!==M){if(f=b[A.a],m=b[A.b],g=b[A.c],!0===M.morphTargets){var P=r.morphTargets,E=this.morphTargetInfluences;B.set(0,0,0),N.set(0,0,0),F.set(0,0,0);for(var C=0,T=P.length;C<T;C++){var I=E[C];if(0!==I){var R=P[C].vertices;B.addScaledVector(z.subVectors(R[A.a],f),I),N.addScaledVector(U.subVectors(R[A.b],m),I),F.addScaledVector(j.subVectors(R[A.c],g),I)}}B.add(f),N.add(m),F.add(g),f=B,m=N,g=F}if(i=X(this,M,t,D,f,m,g,$)){if(v&&v[w]){var L=v[w];G.copy(L[0]),V.copy(L[1]),H.copy(L[2]),i.uv=W($,f,m,g,G,V,H)}i.face=A,i.faceIndex=w,e.push(i)}}}}}}(),clone:function(){return new this.constructor(this.geometry,this.material).copy(this)}}),((Bn.prototype=Object.create(bi.prototype)).constructor=Bn).prototype.isCubeTexture=!0,Object.defineProperty(Bn.prototype,"images",{get:function(){return this.image},set:function(t){this.image=t}});var Nn=new bi,Fn=new Bn;function zn(){this.seq=[],this.map={}}var Un=[],jn=[],Gn=new Float32Array(16),Vn=new Float32Array(9);function Hn(t,e,i){var r=t[0];if(r<=0||0<r)return t;var n=e*i,o=Un[n];if(void 0===o&&(o=new Float32Array(n),Un[n]=o),0!==e){r.toArray(o,0);for(var a=1,s=0;a!==e;++a)s+=i,t[a].toArray(o,s)}return o}function $n(t,e){var i=jn[e];void 0===i&&(i=new Int32Array(e),jn[e]=i);for(var r=0;r!==e;++r)i[r]=t.allocTextureUnit();return i}function Wn(t,e){t.uniform1f(this.addr,e)}function Xn(t,e){t.uniform1i(this.addr,e)}function qn(t,e){void 0===e.x?t.uniform2fv(this.addr,e):t.uniform2f(this.addr,e.x,e.y)}function Yn(t,e){void 0!==e.x?t.uniform3f(this.addr,e.x,e.y,e.z):void 0!==e.r?t.uniform3f(this.addr,e.r,e.g,e.b):t.uniform3fv(this.addr,e)}function Zn(t,e){void 0===e.x?t.uniform4fv(this.addr,e):t.uniform4f(this.addr,e.x,e.y,e.z,e.w)}function Kn(t,e){t.uniformMatrix2fv(this.addr,!1,e.elements||e)}function Jn(t,e){void 0===e.elements?t.uniformMatrix3fv(this.addr,!1,e):(Vn.set(e.elements),t.uniformMatrix3fv(this.addr,!1,Vn))}function Qn(t,e){void 0===e.elements?t.uniformMatrix4fv(this.addr,!1,e):(Gn.set(e.elements),t.uniformMatrix4fv(this.addr,!1,Gn))}function to(t,e,i){var r=i.allocTextureUnit();t.uniform1i(this.addr,r),i.setTexture2D(e||Nn,r)}function eo(t,e,i){var r=i.allocTextureUnit();t.uniform1i(this.addr,r),i.setTextureCube(e||Fn,r)}function io(t,e){t.uniform2iv(this.addr,e)}function ro(t,e){t.uniform3iv(this.addr,e)}function no(t,e){t.uniform4iv(this.addr,e)}function oo(t,e){t.uniform1fv(this.addr,e)}function ao(t,e){t.uniform1iv(this.addr,e)}function so(t,e){t.uniform2fv(this.addr,Hn(e,this.size,2))}function co(t,e){t.uniform3fv(this.addr,Hn(e,this.size,3))}function uo(t,e){t.uniform4fv(this.addr,Hn(e,this.size,4))}function ho(t,e){t.uniformMatrix2fv(this.addr,!1,Hn(e,this.size,4))}function lo(t,e){t.uniformMatrix3fv(this.addr,!1,Hn(e,this.size,9))}function po(t,e){t.uniformMatrix4fv(this.addr,!1,Hn(e,this.size,16))}function fo(t,e,i){var r=e.length,n=$n(i,r);t.uniform1iv(this.addr,n);for(var o=0;o!==r;++o)i.setTexture2D(e[o]||Nn,n[o])}function mo(t,e,i){var r=e.length,n=$n(i,r);t.uniform1iv(this.addr,n);for(var o=0;o!==r;++o)i.setTextureCube(e[o]||Fn,n[o])}function go(t,e,i){this.id=t,this.addr=i,this.setValue=function(t){switch(t){case 5126:return Wn;case 35664:return qn;case 35665:return Yn;case 35666:return Zn;case 35674:return Kn;case 35675:return Jn;case 35676:return Qn;case 35678:case 36198:return to;case 35680:return eo;case 5124:case 35670:return Xn;case 35667:case 35671:return io;case 35668:case 35672:return ro;case 35669:case 35673:return no}}(e.type)}function vo(t,e,i){this.id=t,this.addr=i,this.size=e.size,this.setValue=function(t){switch(t){case 5126:return oo;case 35664:return so;case 35665:return co;case 35666:return uo;case 35674:return ho;case 35675:return lo;case 35676:return po;case 35678:return fo;case 35680:return mo;case 5124:case 35670:return ao;case 35667:case 35671:return io;case 35668:case 35672:return ro;case 35669:case 35673:return no}}(e.type)}function yo(t){this.id=t,zn.call(this)}yo.prototype.setValue=function(t,e){for(var i=this.seq,r=0,n=i.length;r!==n;++r){var o=i[r];o.setValue(t,e[o.id])}};var bo=/([\w\d_]+)(\])?(\[|\.)?/g;function xo(t,e){t.seq.push(e),t.map[e.id]=e}function _o(t,e,i){var r=t.name,n=r.length;for(bo.lastIndex=0;;){var o=bo.exec(r),a=bo.lastIndex,s=o[1],c="]"===o[2],u=o[3];if(c&&(s|=0),void 0===u||"["===u&&a+2===n){xo(i,void 0===u?new go(s,t,e):new vo(s,t,e));break}var h=i.map[s];void 0===h&&xo(i,h=new yo(s)),i=h}}function wo(t,e,i){zn.call(this),this.renderer=i;for(var r=t.getProgramParameter(e,t.ACTIVE_UNIFORMS),n=0;n<r;++n){var o=t.getActiveUniform(e,n);_o(o,t.getUniformLocation(e,o.name),this)}}function So(t,e,i){var r=t.createShader(e);return t.shaderSource(r,i),t.compileShader(r),!1===t.getShaderParameter(r,t.COMPILE_STATUS)&&console.error("THREE.WebGLShader: Shader couldn't compile."),""!==t.getShaderInfoLog(r)&&console.warn("THREE.WebGLShader: gl.getShaderInfoLog()",e===t.VERTEX_SHADER?"vertex":"fragment",t.getShaderInfoLog(r),function(t){for(var e=t.split("\n"),i=0;i<e.length;i++)e[i]=i+1+": "+e[i];return e.join("\n")}(i)),r}wo.prototype.setValue=function(t,e,i){var r=this.map[e];void 0!==r&&r.setValue(t,i,this.renderer)},wo.prototype.setOptional=function(t,e,i){var r=e[i];void 0!==r&&this.setValue(t,i,r)},wo.upload=function(t,e,i,r){for(var n=0,o=e.length;n!==o;++n){var a=e[n],s=i[a.id];!1!==s.needsUpdate&&a.setValue(t,s.value,r)}},wo.seqWithValue=function(t,e){for(var i=[],r=0,n=t.length;r!==n;++r){var o=t[r];o.id in e&&i.push(o)}return i};var Ao=0;function Mo(t){switch(t){case Ue:return["Linear","( value )"];case je:return["sRGB","( value )"];case Ve:return["RGBE","( value )"];case He:return["RGBM","( value, 7.0 )"];case $e:return["RGBM","( value, 16.0 )"];case We:return["RGBD","( value, 256.0 )"];case Ge:return["Gamma","( value, float( GAMMA_FACTOR ) )"];default:throw new Error("unsupported encoding: "+t)}}function Po(t,e){var i=Mo(e);return"vec4 "+t+"( vec4 value ) { return "+i[0]+"ToLinear"+i[1]+"; }"}function Eo(t){return""!==t}function Co(t,e){return t.replace(/NUM_DIR_LIGHTS/g,e.numDirLights).replace(/NUM_SPOT_LIGHTS/g,e.numSpotLights).replace(/NUM_RECT_AREA_LIGHTS/g,e.numRectAreaLights).replace(/NUM_POINT_LIGHTS/g,e.numPointLights).replace(/NUM_HEMI_LIGHTS/g,e.numHemiLights)}function To(t,e){return t.replace(/NUM_CLIPPING_PLANES/g,e.numClippingPlanes).replace(/UNION_CLIPPING_PLANES/g,e.numClippingPlanes-e.numClipIntersection)}function Io(t){return t.replace(/^[ \t]*#include +<([\w\d.]+)>/gm,function(t,e){var i=Ti[e];if(void 0===i)throw new Error("Can not resolve #include <"+e+">");return Io(i)})}function Ro(t){return t.replace(/#pragma unroll_loop[\s]+?for \( int i \= (\d+)\; i < (\d+)\; i \+\+ \) \{([\s\S]+?)(?=\})\}/g,function(t,e,i,r){for(var n="",o=parseInt(e);o<parseInt(i);o++)n+=r.replace(/\[ i \]/g,"[ "+o+" ]");return n})}function Lo(t,e,i,r,n,o){var a=t.context,s=r.defines,c=n.vertexShader,u=n.fragmentShader,h="SHADOWMAP_TYPE_BASIC";o.shadowMapType===F?h="SHADOWMAP_TYPE_PCF":o.shadowMapType===z&&(h="SHADOWMAP_TYPE_PCF_SOFT");var l="ENVMAP_TYPE_CUBE",p="ENVMAP_MODE_REFLECTION",d="ENVMAP_BLENDING_MULTIPLY";if(o.envMap){switch(r.envMap.mapping){case Rt:case Lt:l="ENVMAP_TYPE_CUBE";break;case Bt:case Nt:l="ENVMAP_TYPE_CUBE_UV";break;case Ot:case Dt:l="ENVMAP_TYPE_EQUIREC";break;case kt:l="ENVMAP_TYPE_SPHERE"}switch(r.envMap.mapping){case Lt:case Dt:p="ENVMAP_MODE_REFRACTION"}switch(r.combine){case wt:d="ENVMAP_BLENDING_MULTIPLY";break;case St:d="ENVMAP_BLENDING_MIX";break;case At:d="ENVMAP_BLENDING_ADD"}}var f,m,g,v,y,b,x,_,w=0<t.gammaFactor?t.gammaFactor:1,S=(f=r.extensions,m=o,g=e,[(f=f||{}).derivatives||m.envMapCubeUV||m.bumpMap||m.normalMap||m.flatShading?"#extension GL_OES_standard_derivatives : enable":"",(f.fragDepth||m.logarithmicDepthBuffer)&&g.get("EXT_frag_depth")?"#extension GL_EXT_frag_depth : enable":"",f.drawBuffers&&g.get("WEBGL_draw_buffers")?"#extension GL_EXT_draw_buffers : require":"",(f.shaderTextureLOD||m.envMap)&&g.get("EXT_shader_texture_lod")?"#extension GL_EXT_shader_texture_lod : enable":""].filter(Eo).join("\n")),A=function(t){var e=[];for(var i in t){var r=t[i];!1!==r&&e.push("#define "+i+" "+r)}return e.join("\n")}(s),M=a.createProgram();r.isRawShaderMaterial?(0<(v=[A].filter(Eo).join("\n")).length&&(v+="\n"),0<(y=[S,A].filter(Eo).join("\n")).length&&(y+="\n")):(v=["precision "+o.precision+" float;","precision "+o.precision+" int;","#define SHADER_NAME "+n.name,A,o.supportsVertexTextures?"#define VERTEX_TEXTURES":"","#define GAMMA_FACTOR "+w,"#define MAX_BONES "+o.maxBones,o.useFog&&o.fog?"#define USE_FOG":"",o.useFog&&o.fogExp?"#define FOG_EXP2":"",o.map?"#define USE_MAP":"",o.envMap?"#define USE_ENVMAP":"",o.envMap?"#define "+p:"",o.lightMap?"#define USE_LIGHTMAP":"",o.aoMap?"#define USE_AOMAP":"",o.emissiveMap?"#define USE_EMISSIVEMAP":"",o.bumpMap?"#define USE_BUMPMAP":"",o.normalMap?"#define USE_NORMALMAP":"",o.displacementMap&&o.supportsVertexTextures?"#define USE_DISPLACEMENTMAP":"",o.specularMap?"#define USE_SPECULARMAP":"",o.roughnessMap?"#define USE_ROUGHNESSMAP":"",o.metalnessMap?"#define USE_METALNESSMAP":"",o.alphaMap?"#define USE_ALPHAMAP":"",o.vertexColors?"#define USE_COLOR":"",o.flatShading?"#define FLAT_SHADED":"",o.skinning?"#define USE_SKINNING":"",o.useVertexTexture?"#define BONE_TEXTURE":"",o.morphTargets?"#define USE_MORPHTARGETS":"",o.morphNormals&&!1===o.flatShading?"#define USE_MORPHNORMALS":"",o.doubleSided?"#define DOUBLE_SIDED":"",o.flipSided?"#define FLIP_SIDED":"",o.shadowMapEnabled?"#define USE_SHADOWMAP":"",o.shadowMapEnabled?"#define "+h:"",o.sizeAttenuation?"#define USE_SIZEATTENUATION":"",o.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",o.logarithmicDepthBuffer&&e.get("EXT_frag_depth")?"#define USE_LOGDEPTHBUF_EXT":"","uniform mat4 modelMatrix;","uniform mat4 modelViewMatrix;","uniform mat4 projectionMatrix;","uniform mat4 viewMatrix;","uniform mat3 normalMatrix;","uniform vec3 cameraPosition;","attribute vec3 position;","attribute vec3 normal;","attribute vec2 uv;","#ifdef USE_COLOR","\tattribute vec3 color;","#endif","#ifdef USE_MORPHTARGETS","\tattribute vec3 morphTarget0;","\tattribute vec3 morphTarget1;","\tattribute vec3 morphTarget2;","\tattribute vec3 morphTarget3;","\t#ifdef USE_MORPHNORMALS","\t\tattribute vec3 morphNormal0;","\t\tattribute vec3 morphNormal1;","\t\tattribute vec3 morphNormal2;","\t\tattribute vec3 morphNormal3;","\t#else","\t\tattribute vec3 morphTarget4;","\t\tattribute vec3 morphTarget5;","\t\tattribute vec3 morphTarget6;","\t\tattribute vec3 morphTarget7;","\t#endif","#endif","#ifdef USE_SKINNING","\tattribute vec4 skinIndex;","\tattribute vec4 skinWeight;","#endif","\n"].filter(Eo).join("\n"),y=[S,"precision "+o.precision+" float;","precision "+o.precision+" int;","#define SHADER_NAME "+n.name,A,o.alphaTest?"#define ALPHATEST "+o.alphaTest:"","#define GAMMA_FACTOR "+w,o.useFog&&o.fog?"#define USE_FOG":"",o.useFog&&o.fogExp?"#define FOG_EXP2":"",o.map?"#define USE_MAP":"",o.envMap?"#define USE_ENVMAP":"",o.envMap?"#define "+l:"",o.envMap?"#define "+p:"",o.envMap?"#define "+d:"",o.lightMap?"#define USE_LIGHTMAP":"",o.aoMap?"#define USE_AOMAP":"",o.emissiveMap?"#define USE_EMISSIVEMAP":"",o.bumpMap?"#define USE_BUMPMAP":"",o.normalMap?"#define USE_NORMALMAP":"",o.specularMap?"#define USE_SPECULARMAP":"",o.roughnessMap?"#define USE_ROUGHNESSMAP":"",o.metalnessMap?"#define USE_METALNESSMAP":"",o.alphaMap?"#define USE_ALPHAMAP":"",o.vertexColors?"#define USE_COLOR":"",o.gradientMap?"#define USE_GRADIENTMAP":"",o.flatShading?"#define FLAT_SHADED":"",o.doubleSided?"#define DOUBLE_SIDED":"",o.flipSided?"#define FLIP_SIDED":"",o.shadowMapEnabled?"#define USE_SHADOWMAP":"",o.shadowMapEnabled?"#define "+h:"",o.premultipliedAlpha?"#define PREMULTIPLIED_ALPHA":"",o.physicallyCorrectLights?"#define PHYSICALLY_CORRECT_LIGHTS":"",o.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",o.logarithmicDepthBuffer&&e.get("EXT_frag_depth")?"#define USE_LOGDEPTHBUF_EXT":"",o.envMap&&e.get("EXT_shader_texture_lod")?"#define TEXTURE_LOD_EXT":"","uniform mat4 viewMatrix;","uniform vec3 cameraPosition;",o.toneMapping!==Pt?"#define TONE_MAPPING":"",o.toneMapping!==Pt?Ti.tonemapping_pars_fragment:"",o.toneMapping!==Pt?function(t,e){var i;switch(e){case Et:i="Linear";break;case Ct:i="Reinhard";break;case Tt:i="Uncharted2";break;case It:i="OptimizedCineon";break;default:throw new Error("unsupported toneMapping: "+e)}return"vec3 "+t+"( vec3 color ) { return "+i+"ToneMapping( color ); }"}("toneMapping",o.toneMapping):"",o.dithering?"#define DITHERING":"",o.outputEncoding||o.mapEncoding||o.envMapEncoding||o.emissiveMapEncoding?Ti.encodings_pars_fragment:"",o.mapEncoding?Po("mapTexelToLinear",o.mapEncoding):"",o.envMapEncoding?Po("envMapTexelToLinear",o.envMapEncoding):"",o.emissiveMapEncoding?Po("emissiveMapTexelToLinear",o.emissiveMapEncoding):"",o.outputEncoding?(b="linearToOutputTexel",x=o.outputEncoding,_=Mo(x),"vec4 "+b+"( vec4 value ) { return LinearTo"+_[0]+_[1]+"; }"):"",o.depthPacking?"#define DEPTH_PACKING "+r.depthPacking:"","\n"].filter(Eo).join("\n")),c=To(c=Co(c=Io(c),o),o),u=To(u=Co(u=Io(u),o),o);var P=v+(c=Ro(c)),E=y+(u=Ro(u)),C=So(a,a.VERTEX_SHADER,P),T=So(a,a.FRAGMENT_SHADER,E);a.attachShader(M,C),a.attachShader(M,T),void 0!==r.index0AttributeName?a.bindAttribLocation(M,0,r.index0AttributeName):!0===o.morphTargets&&a.bindAttribLocation(M,0,"position"),a.linkProgram(M);var I,R,L=a.getProgramInfoLog(M).trim(),O=a.getShaderInfoLog(C).trim(),D=a.getShaderInfoLog(T).trim(),k=!0,B=!0;return!1===a.getProgramParameter(M,a.LINK_STATUS)?(k=!1,console.error("THREE.WebGLProgram: shader error: ",a.getError(),"gl.VALIDATE_STATUS",a.getProgramParameter(M,a.VALIDATE_STATUS),"gl.getProgramInfoLog",L,O,D)):""!==L?console.warn("THREE.WebGLProgram: gl.getProgramInfoLog()",L):""!==O&&""!==D||(B=!1),B&&(this.diagnostics={runnable:k,material:r,programLog:L,vertexShader:{log:O,prefix:v},fragmentShader:{log:D,prefix:y}}),a.deleteShader(C),a.deleteShader(T),this.getUniforms=function(){return void 0===I&&(I=new wo(a,M,t)),I},this.getAttributes=function(){return void 0===R&&(R=function(t,e){for(var i={},r=t.getProgramParameter(e,t.ACTIVE_ATTRIBUTES),n=0;n<r;n++){var o=t.getActiveAttrib(e,n).name;i[o]=t.getAttribLocation(e,o)}return i}(a,M)),R},this.destroy=function(){a.deleteProgram(M),this.program=void 0},Object.defineProperties(this,{uniforms:{get:function(){return console.warn("THREE.WebGLProgram: .uniforms is now .getUniforms()."),this.getUniforms()}},attributes:{get:function(){return console.warn("THREE.WebGLProgram: .attributes is now .getAttributes()."),this.getAttributes()}}}),this.name=n.name,this.id=Ao++,this.code=i,this.usedTimes=1,this.program=M,this.vertexShader=C,this.fragmentShader=T,this}function Oo(l,c,p){var u=[],d={MeshDepthMaterial:"depth",MeshDistanceMaterial:"distanceRGBA",MeshNormalMaterial:"normal",MeshBasicMaterial:"basic",MeshLambertMaterial:"lambert",MeshPhongMaterial:"phong",MeshToonMaterial:"phong",MeshStandardMaterial:"physical",MeshPhysicalMaterial:"physical",LineBasicMaterial:"basic",LineDashedMaterial:"dashed",PointsMaterial:"points",ShadowMaterial:"shadow"},o=["precision","supportsVertexTextures","map","mapEncoding","envMap","envMapMode","envMapEncoding","lightMap","aoMap","emissiveMap","emissiveMapEncoding","bumpMap","normalMap","displacementMap","specularMap","roughnessMap","metalnessMap","gradientMap","alphaMap","combine","vertexColors","fog","useFog","fogExp","flatShading","sizeAttenuation","logarithmicDepthBuffer","skinning","maxBones","useVertexTexture","morphTargets","morphNormals","maxMorphTargets","maxMorphNormals","premultipliedAlpha","numDirLights","numPointLights","numSpotLights","numHemiLights","numRectAreaLights","shadowMapEnabled","shadowMapType","toneMapping","physicallyCorrectLights","alphaTest","doubleSided","flipSided","numClippingPlanes","numClipIntersection","depthPacking","dithering"];function f(t,e){var i;return t?t.isTexture?i=t.encoding:t.isWebGLRenderTarget&&(console.warn("THREE.WebGLPrograms.getTextureEncodingFromMap: don't use render targets as textures. Use their .texture property instead."),i=t.texture.encoding):i=Ue,i===Ue&&e&&(i=Ge),i}this.getParameters=function(t,e,i,r,n,o,a){var s=d[t.type],c=a.isSkinnedMesh?function(t){var e=t.skeleton.bones;if(p.floatVertexTextures)return 1024;var i=p.maxVertexUniforms,r=Math.floor((i-20)/4),n=Math.min(r,e.length);return n<e.length?(console.warn("THREE.WebGLRenderer: Skeleton has "+e.length+" bones. This GPU supports "+n+"."),0):n}(a):0,u=p.precision;null!==t.precision&&(u=p.getMaxPrecision(t.precision))!==t.precision&&console.warn("THREE.WebGLProgram.getParameters:",t.precision,"not supported, using",u,"instead.");var h=l.getRenderTarget();return{shaderID:s,precision:u,supportsVertexTextures:p.vertexTextures,outputEncoding:f(h?h.texture:null,l.gammaOutput),map:!!t.map,mapEncoding:f(t.map,l.gammaInput),envMap:!!t.envMap,envMapMode:t.envMap&&t.envMap.mapping,envMapEncoding:f(t.envMap,l.gammaInput),envMapCubeUV:!!t.envMap&&(t.envMap.mapping===Bt||t.envMap.mapping===Nt),lightMap:!!t.lightMap,aoMap:!!t.aoMap,emissiveMap:!!t.emissiveMap,emissiveMapEncoding:f(t.emissiveMap,l.gammaInput),bumpMap:!!t.bumpMap,normalMap:!!t.normalMap,displacementMap:!!t.displacementMap,roughnessMap:!!t.roughnessMap,metalnessMap:!!t.metalnessMap,specularMap:!!t.specularMap,alphaMap:!!t.alphaMap,gradientMap:!!t.gradientMap,combine:t.combine,vertexColors:t.vertexColors,fog:!!r,useFog:t.fog,fogExp:r&&r.isFogExp2,flatShading:t.flatShading,sizeAttenuation:t.sizeAttenuation,logarithmicDepthBuffer:p.logarithmicDepthBuffer,skinning:t.skinning&&0<c,maxBones:c,useVertexTexture:p.floatVertexTextures,morphTargets:t.morphTargets,morphNormals:t.morphNormals,maxMorphTargets:l.maxMorphTargets,maxMorphNormals:l.maxMorphNormals,numDirLights:e.directional.length,numPointLights:e.point.length,numSpotLights:e.spot.length,numRectAreaLights:e.rectArea.length,numHemiLights:e.hemi.length,numClippingPlanes:n,numClipIntersection:o,dithering:t.dithering,shadowMapEnabled:l.shadowMap.enabled&&a.receiveShadow&&0<i.length,shadowMapType:l.shadowMap.type,toneMapping:l.toneMapping,physicallyCorrectLights:l.physicallyCorrectLights,premultipliedAlpha:t.premultipliedAlpha,alphaTest:t.alphaTest,doubleSided:t.side===Z,flipSided:t.side===Y,depthPacking:void 0!==t.depthPacking&&t.depthPacking}},this.getProgramCode=function(t,e){var i=[];if(e.shaderID?i.push(e.shaderID):(i.push(t.fragmentShader),i.push(t.vertexShader)),void 0!==t.defines)for(var r in t.defines)i.push(r),i.push(t.defines[r]);for(var n=0;n<o.length;n++)i.push(e[o[n]]);return i.push(t.onBeforeCompile.toString()),i.push(l.gammaOutput),i.join()},this.acquireProgram=function(t,e,i,r){for(var n,o=0,a=u.length;o<a;o++){var s=u[o];if(s.code===r){++(n=s).usedTimes;break}}return void 0===n&&(n=new Lo(l,c,r,t,e,i),u.push(n)),n},this.releaseProgram=function(t){if(0==--t.usedTimes){var e=u.indexOf(t);u[e]=u[u.length-1],u.pop(),t.destroy()}},this.programs=u}function Do(){var r=new WeakMap;return{get:function(t){var e=r.get(t);return void 0===e&&(e={},r.set(t,e)),e},remove:function(t){r.delete(t)},update:function(t,e,i){r.get(t)[e]=i},dispose:function(){r=new WeakMap}}}function ko(t,e){return t.renderOrder!==e.renderOrder?t.renderOrder-e.renderOrder:t.program&&e.program&&t.program!==e.program?t.program.id-e.program.id:t.material.id!==e.material.id?t.material.id-e.material.id:t.z!==e.z?t.z-e.z:t.id-e.id}function Bo(t,e){return t.renderOrder!==e.renderOrder?t.renderOrder-e.renderOrder:t.z!==e.z?e.z-t.z:t.id-e.id}function No(){var a=[],s=0,c=[],u=[];return{opaque:c,transparent:u,init:function(){s=0,c.length=0,u.length=0},push:function(t,e,i,r,n){var o=a[s];void 0===o?(o={id:t.id,object:t,geometry:e,material:i,program:i.program,renderOrder:t.renderOrder,z:r,group:n},a[s]=o):(o.id=t.id,o.object=t,o.geometry=e,o.material=i,o.program=i.program,o.renderOrder=t.renderOrder,o.z=r,o.group=n),(!0===i.transparent?u:c).push(o),s++},sort:function(){1<c.length&&c.sort(ko),1<u.length&&u.sort(Bo)}}}function Fo(){var n={};return{get:function(t,e){var i=t.id+","+e.id,r=n[i];return void 0===r&&(r=new No,n[i]=r),r},dispose:function(){n={}}}}function zo(){var i={};return{get:function(t){if(void 0!==i[t.id])return i[t.id];var e;switch(t.type){case"DirectionalLight":e={direction:new Qe,color:new Li,shadow:!1,shadowBias:0,shadowRadius:1,shadowMapSize:new Ze};break;case"SpotLight":e={position:new Qe,direction:new Qe,color:new Li,distance:0,coneCos:0,penumbraCos:0,decay:0,shadow:!1,shadowBias:0,shadowRadius:1,shadowMapSize:new Ze};break;case"PointLight":e={position:new Qe,color:new Li,distance:0,decay:0,shadow:!1,shadowBias:0,shadowRadius:1,shadowMapSize:new Ze,shadowCameraNear:1,shadowCameraFar:1e3};break;case"HemisphereLight":e={direction:new Qe,skyColor:new Li,groundColor:new Li};break;case"RectAreaLight":e={color:new Li,position:new Qe,halfWidth:new Qe,halfHeight:new Qe}}return i[t.id]=e}}}var Uo,jo,Go,Vo,Ho,$o,Wo,Xo,qo,Yo,Zo,Ko,Jo,Qo,ta,ea,ia,ra,na=0;function oa(){var _=new zo,w={id:na++,hash:"",ambient:[0,0,0],directional:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotShadowMap:[],spotShadowMatrix:[],rectArea:[],point:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[]},S=new Qe,A=new Ke,M=new Ke;return{setup:function(t,e,i){for(var r=0,n=0,o=0,a=0,s=0,c=0,u=0,h=0,l=i.matrixWorldInverse,p=0,d=t.length;p<d;p++){var f=t[p],m=f.color,g=f.intensity,v=f.distance,y=f.shadow&&f.shadow.map?f.shadow.map.texture:null;if(f.isAmbientLight)r+=m.r*g,n+=m.g*g,o+=m.b*g;else if(f.isDirectionalLight){if((x=_.get(f)).color.copy(f.color).multiplyScalar(f.intensity),x.direction.setFromMatrixPosition(f.matrixWorld),S.setFromMatrixPosition(f.target.matrixWorld),x.direction.sub(S),x.direction.transformDirection(l),x.shadow=f.castShadow,f.castShadow){var b=f.shadow;x.shadowBias=b.bias,x.shadowRadius=b.radius,x.shadowMapSize=b.mapSize}w.directionalShadowMap[a]=y,w.directionalShadowMatrix[a]=f.shadow.matrix,w.directional[a]=x,a++}else if(f.isSpotLight)(x=_.get(f)).position.setFromMatrixPosition(f.matrixWorld),x.position.applyMatrix4(l),x.color.copy(m).multiplyScalar(g),x.distance=v,x.direction.setFromMatrixPosition(f.matrixWorld),S.setFromMatrixPosition(f.target.matrixWorld),x.direction.sub(S),x.direction.transformDirection(l),x.coneCos=Math.cos(f.angle),x.penumbraCos=Math.cos(f.angle*(1-f.penumbra)),x.decay=0===f.distance?0:f.decay,x.shadow=f.castShadow,f.castShadow&&(b=f.shadow,x.shadowBias=b.bias,x.shadowRadius=b.radius,x.shadowMapSize=b.mapSize),w.spotShadowMap[c]=y,w.spotShadowMatrix[c]=f.shadow.matrix,w.spot[c]=x,c++;else if(f.isRectAreaLight)(x=_.get(f)).color.copy(m).multiplyScalar(g),x.position.setFromMatrixPosition(f.matrixWorld),x.position.applyMatrix4(l),M.identity(),A.copy(f.matrixWorld),A.premultiply(l),M.extractRotation(A),x.halfWidth.set(.5*f.width,0,0),x.halfHeight.set(0,.5*f.height,0),x.halfWidth.applyMatrix4(M),x.halfHeight.applyMatrix4(M),w.rectArea[u]=x,u++;else if(f.isPointLight)(x=_.get(f)).position.setFromMatrixPosition(f.matrixWorld),x.position.applyMatrix4(l),x.color.copy(f.color).multiplyScalar(f.intensity),x.distance=f.distance,x.decay=0===f.distance?0:f.decay,x.shadow=f.castShadow,f.castShadow&&(b=f.shadow,x.shadowBias=b.bias,x.shadowRadius=b.radius,x.shadowMapSize=b.mapSize,x.shadowCameraNear=b.camera.near,x.shadowCameraFar=b.camera.far),w.pointShadowMap[s]=y,w.pointShadowMatrix[s]=f.shadow.matrix,w.point[s]=x,s++;else if(f.isHemisphereLight){var x;(x=_.get(f)).direction.setFromMatrixPosition(f.matrixWorld),x.direction.transformDirection(l),x.direction.normalize(),x.skyColor.copy(f.color).multiplyScalar(g),x.groundColor.copy(f.groundColor).multiplyScalar(g),w.hemi[h]=x,h++}}w.ambient[0]=r,w.ambient[1]=n,w.ambient[2]=o,w.directional.length=a,w.spot.length=c,w.rectArea.length=u,w.point.length=s,w.hemi.length=h,w.hash=w.id+","+a+","+s+","+c+","+u+","+h+","+e.length},state:w}}function aa(){var e=new oa,i=[],r=[],n=[];return{init:function(){i.length=0,r.length=0,n.length=0},state:{lightsArray:i,shadowsArray:r,spritesArray:n,lights:e},setupLights:function(t){e.setup(i,r,t)},pushLight:function(t){i.push(t)},pushShadow:function(t){r.push(t)},pushSprite:function(t){n.push(t)}}}function sa(){var n={};return{get:function(t,e){var i=t.id+","+e.id,r=n[i];return void 0===r&&(r=new aa,n[i]=r),r},dispose:function(){n={}}}}function ca(t){yn.call(this),this.type="MeshDepthMaterial",this.depthPacking=Xe,this.skinning=!1,this.morphTargets=!1,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.lights=!1,this.setValues(t)}function ua(t){yn.call(this),this.type="MeshDistanceMaterial",this.referencePosition=new Qe,this.nearDistance=1,this.farDistance=1e3,this.skinning=!1,this.morphTargets=!1,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.fog=!1,this.lights=!1,this.setValues(t)}function ha(b,m,t){for(var x=new Ei,_=new Ke,w=new Ze,S=new Ze(t,t),A=new Qe,M=new Qe,v=1,y=2,e=1+(v|y),P=new Array(e),E=new Array(e),C={},T={0:Y,1:U,2:Z},I=[new Qe(1,0,0),new Qe(-1,0,0),new Qe(0,0,1),new Qe(0,0,-1),new Qe(0,1,0),new Qe(0,-1,0)],R=[new Qe(0,1,0),new Qe(0,1,0),new Qe(0,1,0),new Qe(0,1,0),new Qe(0,0,1),new Qe(0,0,-1)],L=[new xi,new xi,new xi,new xi,new xi,new xi],i=0;i!==e;++i){var r=0!=(i&v),n=0!=(i&y),o=new ca({depthPacking:qe,morphTargets:r,skinning:n});P[i]=o;var a=new ua({morphTargets:r,skinning:n});E[i]=a}var O=this;function g(t,e,i,r,n,o){var a=t.geometry,s=null,c=P,u=t.customDepthMaterial;if(i&&(c=E,u=t.customDistanceMaterial),u)s=u;else{var h=!1;e.morphTargets&&(a&&a.isBufferGeometry?h=a.morphAttributes&&a.morphAttributes.position&&0<a.morphAttributes.position.length:a&&a.isGeometry&&(h=a.morphTargets&&0<a.morphTargets.length)),t.isSkinnedMesh&&!1===e.skinning&&console.warn("THREE.WebGLShadowMap: THREE.SkinnedMesh with material.skinning set to false:",t);var l=t.isSkinnedMesh&&e.skinning,p=0;h&&(p|=v),l&&(p|=y),s=c[p]}if(b.localClippingEnabled&&!0===e.clipShadows&&0!==e.clippingPlanes.length){var d=s.uuid,f=e.uuid,m=C[d];void 0===m&&(m={},C[d]=m);var g=m[f];void 0===g&&(g=s.clone(),m[f]=g),s=g}return s.visible=e.visible,s.wireframe=e.wireframe,s.side=null!=e.shadowSide?e.shadowSide:T[e.side],s.clipShadows=e.clipShadows,s.clippingPlanes=e.clippingPlanes,s.clipIntersection=e.clipIntersection,s.wireframeLinewidth=e.wireframeLinewidth,s.linewidth=e.linewidth,i&&s.isMeshDistanceMaterial&&(s.referencePosition.copy(r),s.nearDistance=n,s.farDistance=o),s}function D(t,e,i,r){if(!1!==t.visible){if(t.layers.test(e.layers)&&(t.isMesh||t.isLine||t.isPoints)&&t.castShadow&&(!t.frustumCulled||x.intersectsObject(t))){t.modelViewMatrix.multiplyMatrices(i.matrixWorldInverse,t.matrixWorld);var n=m.update(t),o=t.material;if(Array.isArray(o))for(var a=n.groups,s=0,c=a.length;s<c;s++){var u=a[s],h=o[u.materialIndex];if(h&&h.visible){var l=g(t,h,r,M,i.near,i.far);b.renderBufferDirect(i,null,n,l,t,u)}}else if(o.visible){l=g(t,o,r,M,i.near,i.far);b.renderBufferDirect(i,null,n,l,t,null)}}for(var p=t.children,d=0,f=p.length;d<f;d++)D(p[d],e,i,r)}}this.enabled=!1,this.autoUpdate=!0,this.needsUpdate=!1,this.type=F,this.render=function(t,e,i){if(!1!==O.enabled&&(!1!==O.autoUpdate||!1!==O.needsUpdate)&&0!==t.length){var r,n=b.context,o=b.state;o.disable(n.BLEND),o.buffers.color.setClear(1,1,1,1),o.buffers.depth.setTest(!0),o.setScissorTest(!1);for(var a=0,s=t.length;a<s;a++){var c=t[a],u=c.shadow,h=c&&c.isPointLight;if(void 0!==u){var l=u.camera;if(w.copy(u.mapSize),w.min(S),h){var p=w.x,d=w.y;L[0].set(2*p,d,p,d),L[1].set(0,d,p,d),L[2].set(3*p,d,p,d),L[3].set(p,d,p,d),L[4].set(3*p,0,p,d),L[5].set(p,0,p,d),w.x*=4,w.y*=2}if(null===u.map){var f={minFilter:jt,magFilter:jt,format:se};u.map=new _i(w.x,w.y,f),u.map.texture.name=c.name+".shadowMap",l.updateProjectionMatrix()}u.isSpotLightShadow&&u.update(c);var m=u.map,g=u.matrix;M.setFromMatrixPosition(c.matrixWorld),l.position.copy(M),h?(r=6,g.makeTranslation(-M.x,-M.y,-M.z)):(r=1,A.setFromMatrixPosition(c.target.matrixWorld),l.lookAt(A),l.updateMatrixWorld(),g.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1),g.multiply(l.projectionMatrix),g.multiply(l.matrixWorldInverse)),b.setRenderTarget(m),b.clear();for(var v=0;v<r;v++){if(h){A.copy(l.position),A.add(I[v]),l.up.copy(R[v]),l.lookAt(A),l.updateMatrixWorld();var y=L[v];o.viewport(y)}_.multiplyMatrices(l.projectionMatrix,l.matrixWorldInverse),x.setFromMatrix(_),D(e,i,l,h)}}else console.warn("THREE.WebGLShadowMap:",c,"has no shadow.")}O.needsUpdate=!1}}}function la(t,e,i,r,n,o,a,s,c){bi.call(this,t,e,i,r,n,o,a,s,c),this.needsUpdate=!0}function pa(d,f,m,g,s){var v,y,b,x,_,w,S=new Qe,A=new Je,M=new Qe;function P(){var t,e,i,r=new Float32Array([-.5,-.5,0,0,.5,-.5,1,0,.5,.5,1,1,-.5,.5,0,1]),n=new Uint16Array([0,1,2,0,2,3]);v=f.createBuffer(),y=f.createBuffer(),f.bindBuffer(f.ARRAY_BUFFER,v),f.bufferData(f.ARRAY_BUFFER,r,f.STATIC_DRAW),f.bindBuffer(f.ELEMENT_ARRAY_BUFFER,y),f.bufferData(f.ELEMENT_ARRAY_BUFFER,n,f.STATIC_DRAW),t=f.createProgram(),e=f.createShader(f.VERTEX_SHADER),i=f.createShader(f.FRAGMENT_SHADER),f.shaderSource(e,["precision "+s.precision+" float;","#define SHADER_NAME SpriteMaterial","uniform mat4 modelViewMatrix;","uniform mat4 projectionMatrix;","uniform float rotation;","uniform vec2 center;","uniform vec2 scale;","uniform vec2 uvOffset;","uniform vec2 uvScale;","attribute vec2 position;","attribute vec2 uv;","varying vec2 vUV;","varying float fogDepth;","void main() {","\tvUV = uvOffset + uv * uvScale;","\tvec2 alignedPosition = ( position - center ) * scale;","\tvec2 rotatedPosition;","\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;","\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;","\tvec4 mvPosition;","\tmvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );","\tmvPosition.xy += rotatedPosition;","\tgl_Position = projectionMatrix * mvPosition;","\tfogDepth = - mvPosition.z;","}"].join("\n")),f.shaderSource(i,["precision "+s.precision+" float;","#define SHADER_NAME SpriteMaterial","uniform vec3 color;","uniform sampler2D map;","uniform float opacity;","uniform int fogType;","uniform vec3 fogColor;","uniform float fogDensity;","uniform float fogNear;","uniform float fogFar;","uniform float alphaTest;","varying vec2 vUV;","varying float fogDepth;","void main() {","\tvec4 texture = texture2D( map, vUV );","\tgl_FragColor = vec4( color * texture.xyz, texture.a * opacity );","\tif ( gl_FragColor.a < alphaTest ) discard;","\tif ( fogType > 0 ) {","\t\tfloat fogFactor = 0.0;","\t\tif ( fogType == 1 ) {","\t\t\tfogFactor = smoothstep( fogNear, fogFar, fogDepth );","\t\t} else {","\t\t\tconst float LOG2 = 1.442695;","\t\t\tfogFactor = exp2( - fogDensity * fogDensity * fogDepth * fogDepth * LOG2 );","\t\t\tfogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );","\t\t}","\t\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );","\t}","}"].join("\n")),f.compileShader(e),f.compileShader(i),f.attachShader(t,e),f.attachShader(t,i),f.linkProgram(t),b=t,x={position:f.getAttribLocation(b,"position"),uv:f.getAttribLocation(b,"uv")},_={uvOffset:f.getUniformLocation(b,"uvOffset"),uvScale:f.getUniformLocation(b,"uvScale"),rotation:f.getUniformLocation(b,"rotation"),center:f.getUniformLocation(b,"center"),scale:f.getUniformLocation(b,"scale"),color:f.getUniformLocation(b,"color"),map:f.getUniformLocation(b,"map"),opacity:f.getUniformLocation(b,"opacity"),modelViewMatrix:f.getUniformLocation(b,"modelViewMatrix"),projectionMatrix:f.getUniformLocation(b,"projectionMatrix"),fogType:f.getUniformLocation(b,"fogType"),fogDensity:f.getUniformLocation(b,"fogDensity"),fogNear:f.getUniformLocation(b,"fogNear"),fogFar:f.getUniformLocation(b,"fogFar"),fogColor:f.getUniformLocation(b,"fogColor"),fogDepth:f.getUniformLocation(b,"fogDepth"),alphaTest:f.getUniformLocation(b,"alphaTest")};var o=document.createElementNS("http://www.w3.org/1999/xhtml","canvas");o.width=8,o.height=8;var a=o.getContext("2d");a.fillStyle="white",a.fillRect(0,0,8,8),w=new la(o)}function E(t,e){return t.renderOrder!==e.renderOrder?t.renderOrder-e.renderOrder:t.z!==e.z?e.z-t.z:e.id-t.id}this.render=function(t,e,i){if(0!==t.length){void 0===b&&P(),m.useProgram(b),m.initAttributes(),m.enableAttribute(x.position),m.enableAttribute(x.uv),m.disableUnusedAttributes(),m.disable(f.CULL_FACE),m.enable(f.BLEND),f.bindBuffer(f.ARRAY_BUFFER,v),f.vertexAttribPointer(x.position,2,f.FLOAT,!1,16,0),f.vertexAttribPointer(x.uv,2,f.FLOAT,!1,16,8),f.bindBuffer(f.ELEMENT_ARRAY_BUFFER,y),f.uniformMatrix4fv(_.projectionMatrix,!1,i.projectionMatrix.elements),m.activeTexture(f.TEXTURE0),f.uniform1i(_.map,0);var r=0,n=0,o=e.fog;o?(f.uniform3f(_.fogColor,o.color.r,o.color.g,o.color.b),o.isFog?(f.uniform1f(_.fogNear,o.near),f.uniform1f(_.fogFar,o.far),f.uniform1i(_.fogType,1),n=r=1):o.isFogExp2&&(f.uniform1f(_.fogDensity,o.density),f.uniform1i(_.fogType,2),n=r=2)):(f.uniform1i(_.fogType,0),n=r=0);for(var a=0,s=t.length;a<s;a++){(h=t[a]).modelViewMatrix.multiplyMatrices(i.matrixWorldInverse,h.matrixWorld),h.z=-h.modelViewMatrix.elements[14]}t.sort(E);var c=[],u=[];for(a=0,s=t.length;a<s;a++){var h,l=(h=t[a]).material;if(!1!==l.visible){h.onBeforeRender(d,e,i,void 0,l,void 0),f.uniform1f(_.alphaTest,l.alphaTest),f.uniformMatrix4fv(_.modelViewMatrix,!1,h.modelViewMatrix.elements),h.matrixWorld.decompose(S,A,M),c[0]=M.x,c[1]=M.y,u[0]=h.center.x-.5,u[1]=h.center.y-.5;var p=0;e.fog&&l.fog&&(p=n),r!==p&&(f.uniform1i(_.fogType,p),r=p),null!==l.map?(f.uniform2f(_.uvOffset,l.map.offset.x,l.map.offset.y),f.uniform2f(_.uvScale,l.map.repeat.x,l.map.repeat.y)):(f.uniform2f(_.uvOffset,0,0),f.uniform2f(_.uvScale,1,1)),f.uniform1f(_.opacity,l.opacity),f.uniform3f(_.color,l.color.r,l.color.g,l.color.b),f.uniform1f(_.rotation,l.rotation),f.uniform2fv(_.center,u),f.uniform2fv(_.scale,c),m.setBlending(l.blending,l.blendEquation,l.blendSrc,l.blendDst,l.blendEquationAlpha,l.blendSrcAlpha,l.blendDstAlpha,l.premultipliedAlpha),m.buffers.depth.setTest(l.depthTest),m.buffers.depth.setMask(l.depthWrite),m.buffers.color.setMask(l.colorWrite),g.setTexture2D(l.map||w,0),f.drawElements(f.TRIANGLES,6,f.UNSIGNED_SHORT,0),h.onAfterRender(d,e,i,void 0,l,void 0)}}m.enable(f.CULL_FACE),m.reset()}}}function da(h,i,c){var r=new function(){var e=!1,o=new xi,i=null,a=new xi(0,0,0,0);return{setMask:function(t){i===t||e||(h.colorMask(t,t,t,t),i=t)},setLocked:function(t){e=t},setClear:function(t,e,i,r,n){!0===n&&(t*=r,e*=r,i*=r),o.set(t,e,i,r),!1===a.equals(o)&&(h.clearColor(t,e,i,r),a.copy(o))},reset:function(){e=!1,i=null,a.set(-1,0,0,0)}}},n=new function(){var e=!1,i=null,r=null,n=null;return{setTest:function(t){t?B(h.DEPTH_TEST):N(h.DEPTH_TEST)},setMask:function(t){i===t||e||(h.depthMask(t),i=t)},setFunc:function(t){if(r!==t){if(t)switch(t){case ft:h.depthFunc(h.NEVER);break;case mt:h.depthFunc(h.ALWAYS);break;case gt:h.depthFunc(h.LESS);break;case vt:h.depthFunc(h.LEQUAL);break;case yt:h.depthFunc(h.EQUAL);break;case bt:h.depthFunc(h.GEQUAL);break;case xt:h.depthFunc(h.GREATER);break;case _t:h.depthFunc(h.NOTEQUAL);break;default:h.depthFunc(h.LEQUAL)}else h.depthFunc(h.LEQUAL);r=t}},setLocked:function(t){e=t},setClear:function(t){n!==t&&(h.clearDepth(t),n=t)},reset:function(){e=!1,n=r=i=null}}},e=new function(){var e=!1,i=null,r=null,n=null,o=null,a=null,s=null,c=null,u=null;return{setTest:function(t){t?B(h.STENCIL_TEST):N(h.STENCIL_TEST)},setMask:function(t){i===t||e||(h.stencilMask(t),i=t)},setFunc:function(t,e,i){r===t&&n===e&&o===i||(h.stencilFunc(t,e,i),r=t,n=e,o=i)},setOp:function(t,e,i){a===t&&s===e&&c===i||(h.stencilOp(t,e,i),a=t,s=e,c=i)},setLocked:function(t){e=t},setClear:function(t){u!==t&&(h.clearStencil(t),u=t)},reset:function(){e=!1,u=c=s=a=o=n=r=i=null}}},t=h.getParameter(h.MAX_VERTEX_ATTRIBS),o=new Uint8Array(t),a=new Uint8Array(t),s=new Uint8Array(t),u={},l=null,p=null,d=null,f=null,m=null,g=null,v=null,y=null,b=null,x=!1,_=null,w=null,S=null,A=null,M=null,P=h.getParameter(h.MAX_COMBINED_TEXTURE_IMAGE_UNITS),E=!1,C=0,T=h.getParameter(h.VERSION);-1!==T.indexOf("WebGL")?(C=parseFloat(/^WebGL\ ([0-9])/.exec(T)[1]),E=1<=C):-1!==T.indexOf("OpenGL ES")&&(C=parseFloat(/^OpenGL\ ES\ ([0-9])/.exec(T)[1]),E=2<=C);var I=null,R={},L=new xi,O=new xi;function D(t,e,i){var r=new Uint8Array(4),n=h.createTexture();h.bindTexture(t,n),h.texParameteri(t,h.TEXTURE_MIN_FILTER,h.NEAREST),h.texParameteri(t,h.TEXTURE_MAG_FILTER,h.NEAREST);for(var o=0;o<i;o++)h.texImage2D(e+o,0,h.RGBA,1,1,0,h.RGBA,h.UNSIGNED_BYTE,r);return n}var k={};function B(t){!0!==u[t]&&(h.enable(t),u[t]=!0)}function N(t){!1!==u[t]&&(h.disable(t),u[t]=!1)}function F(t,e,i,r,n,o,a,s){if(t!==W?B(h.BLEND):N(h.BLEND),t!==Q){if(t!==d||s!==x)switch(t){case q:s?(h.blendEquationSeparate(h.FUNC_ADD,h.FUNC_ADD),h.blendFuncSeparate(h.ONE,h.ONE,h.ONE,h.ONE)):(h.blendEquation(h.FUNC_ADD),h.blendFunc(h.SRC_ALPHA,h.ONE));break;case K:s?(h.blendEquationSeparate(h.FUNC_ADD,h.FUNC_ADD),h.blendFuncSeparate(h.ZERO,h.ZERO,h.ONE_MINUS_SRC_COLOR,h.ONE_MINUS_SRC_ALPHA)):(h.blendEquation(h.FUNC_ADD),h.blendFunc(h.ZERO,h.ONE_MINUS_SRC_COLOR));break;case J:s?(h.blendEquationSeparate(h.FUNC_ADD,h.FUNC_ADD),h.blendFuncSeparate(h.ZERO,h.SRC_COLOR,h.ZERO,h.SRC_ALPHA)):(h.blendEquation(h.FUNC_ADD),h.blendFunc(h.ZERO,h.SRC_COLOR));break;default:s?(h.blendEquationSeparate(h.FUNC_ADD,h.FUNC_ADD),h.blendFuncSeparate(h.ONE,h.ONE_MINUS_SRC_ALPHA,h.ONE,h.ONE_MINUS_SRC_ALPHA)):(h.blendEquationSeparate(h.FUNC_ADD,h.FUNC_ADD),h.blendFuncSeparate(h.SRC_ALPHA,h.ONE_MINUS_SRC_ALPHA,h.ONE,h.ONE_MINUS_SRC_ALPHA))}b=y=v=g=m=f=null}else n=n||e,o=o||i,a=a||r,e===f&&n===v||(h.blendEquationSeparate(c.convert(e),c.convert(n)),f=e,v=n),i===m&&r===g&&o===y&&a===b||(h.blendFuncSeparate(c.convert(i),c.convert(r),c.convert(o),c.convert(a)),m=i,g=r,y=o,b=a);d=t,x=s}function z(t){_!==t&&(t?h.frontFace(h.CW):h.frontFace(h.CCW),_=t)}function U(t){t!==V?(B(h.CULL_FACE),t!==w&&(t===H?h.cullFace(h.BACK):t===$?h.cullFace(h.FRONT):h.cullFace(h.FRONT_AND_BACK))):N(h.CULL_FACE),w=t}function j(t,e,i){t?(B(h.POLYGON_OFFSET_FILL),A===e&&M===i||(h.polygonOffset(e,i),A=e,M=i)):N(h.POLYGON_OFFSET_FILL)}function G(t){void 0===t&&(t=h.TEXTURE0+P-1),I!==t&&(h.activeTexture(t),I=t)}return k[h.TEXTURE_2D]=D(h.TEXTURE_2D,h.TEXTURE_2D,1),k[h.TEXTURE_CUBE_MAP]=D(h.TEXTURE_CUBE_MAP,h.TEXTURE_CUBE_MAP_POSITIVE_X,6),r.setClear(0,0,0,1),n.setClear(1),e.setClear(0),B(h.DEPTH_TEST),n.setFunc(vt),z(!1),U(H),B(h.CULL_FACE),B(h.BLEND),F(X),{buffers:{color:r,depth:n,stencil:e},initAttributes:function(){for(var t=0,e=o.length;t<e;t++)o[t]=0},enableAttribute:function(t){o[t]=1,0===a[t]&&(h.enableVertexAttribArray(t),a[t]=1),0!==s[t]&&(i.get("ANGLE_instanced_arrays").vertexAttribDivisorANGLE(t,0),s[t]=0)},enableAttributeAndDivisor:function(t,e){o[t]=1,0===a[t]&&(h.enableVertexAttribArray(t),a[t]=1),s[t]!==e&&(i.get("ANGLE_instanced_arrays").vertexAttribDivisorANGLE(t,e),s[t]=e)},disableUnusedAttributes:function(){for(var t=0,e=a.length;t!==e;++t)a[t]!==o[t]&&(h.disableVertexAttribArray(t),a[t]=0)},enable:B,disable:N,getCompressedTextureFormats:function(){if(null===l&&(l=[],i.get("WEBGL_compressed_texture_pvrtc")||i.get("WEBGL_compressed_texture_s3tc")||i.get("WEBGL_compressed_texture_etc1")||i.get("WEBGL_compressed_texture_astc")))for(var t=h.getParameter(h.COMPRESSED_TEXTURE_FORMATS),e=0;e<t.length;e++)l.push(t[e]);return l},useProgram:function(t){return p!==t&&(h.useProgram(t),p=t,!0)},setBlending:F,setMaterial:function(t,e){t.side===Z?N(h.CULL_FACE):B(h.CULL_FACE);var i=t.side===Y;e&&(i=!i),z(i),!0===t.transparent?F(t.blending,t.blendEquation,t.blendSrc,t.blendDst,t.blendEquationAlpha,t.blendSrcAlpha,t.blendDstAlpha,t.premultipliedAlpha):F(W),n.setFunc(t.depthFunc),n.setTest(t.depthTest),n.setMask(t.depthWrite),r.setMask(t.colorWrite),j(t.polygonOffset,t.polygonOffsetFactor,t.polygonOffsetUnits)},setFlipSided:z,setCullFace:U,setLineWidth:function(t){t!==S&&(E&&h.lineWidth(t),S=t)},setPolygonOffset:j,setScissorTest:function(t){t?B(h.SCISSOR_TEST):N(h.SCISSOR_TEST)},activeTexture:G,bindTexture:function(t,e){null===I&&G();var i=R[I];void 0===i&&(i={type:void 0,texture:void 0},R[I]=i),i.type===t&&i.texture===e||(h.bindTexture(t,e||k[t]),i.type=t,i.texture=e)},compressedTexImage2D:function(){try{h.compressedTexImage2D.apply(h,arguments)}catch(t){console.error("THREE.WebGLState:",t)}},texImage2D:function(){try{h.texImage2D.apply(h,arguments)}catch(t){console.error("THREE.WebGLState:",t)}},scissor:function(t){!1===L.equals(t)&&(h.scissor(t.x,t.y,t.z,t.w),L.copy(t))},viewport:function(t){!1===O.equals(t)&&(h.viewport(t.x,t.y,t.z,t.w),O.copy(t))},reset:function(){for(var t=0;t<a.length;t++)1===a[t]&&(h.disableVertexAttribArray(t),a[t]=0);u={},R={},w=_=d=p=I=l=null,r.reset(),n.reset(),e.reset()}}}function fa(m,n,g,v,y,b,x){var f,_="undefined"!=typeof WebGL2RenderingContext&&m instanceof WebGL2RenderingContext,s={};function w(t,e){if(t.width>e||t.height>e){if("data"in t)return void console.warn("THREE.WebGLRenderer: image in DataTexture is too big ("+t.width+"x"+t.height+").");var i=e/Math.max(t.width,t.height),r=document.createElementNS("http://www.w3.org/1999/xhtml","canvas");return r.width=Math.floor(t.width*i),r.height=Math.floor(t.height*i),r.getContext("2d").drawImage(t,0,0,t.width,t.height,0,0,r.width,r.height),console.warn("THREE.WebGLRenderer: image is too big ("+t.width+"x"+t.height+"). Resized to "+r.width+"x"+r.height,t),r}return t}function S(t){return Ye.isPowerOfTwo(t.width)&&Ye.isPowerOfTwo(t.height)}function A(t,e){return t.generateMipmaps&&e&&t.minFilter!==jt&&t.minFilter!==Ht}function M(t,e,i,r){m.generateMipmap(t),v.get(e).__maxMipLevel=Math.log(Math.max(i,r))*Math.LOG2E}function o(t){return t===jt||t===Gt||t===Vt?m.NEAREST:m.LINEAR}function P(t){var e=t.target;e.removeEventListener("dispose",P),function(t){var e=v.get(t);if(t.image&&e.__image__webglTextureCube)m.deleteTexture(e.__image__webglTextureCube);else{if(void 0===e.__webglInit)return;m.deleteTexture(e.__webglTexture)}v.remove(t)}(e),e.isVideoTexture&&delete s[e.id],x.memory.textures--}function a(t){var e=t.target;e.removeEventListener("dispose",a),function(t){var e=v.get(t),i=v.get(t.texture);if(!t)return;void 0!==i.__webglTexture&&m.deleteTexture(i.__webglTexture);t.depthTexture&&t.depthTexture.dispose();if(t.isWebGLRenderTargetCube)for(var r=0;r<6;r++)m.deleteFramebuffer(e.__webglFramebuffer[r]),e.__webglDepthbuffer&&m.deleteRenderbuffer(e.__webglDepthbuffer[r]);else m.deleteFramebuffer(e.__webglFramebuffer),e.__webglDepthbuffer&&m.deleteRenderbuffer(e.__webglDepthbuffer);v.remove(t.texture),v.remove(t)}(e),x.memory.textures--}function c(t,e){var i,r,n,o=v.get(t);if(t.isVideoTexture&&(r=(i=t).id,n=x.render.frame,s[r]!==n&&(s[r]=n,i.update())),0<t.version&&o.__version!==t.version){var a=t.image;if(void 0===a)console.warn("THREE.WebGLRenderer: Texture marked for update but image is undefined",t);else{if(!1!==a.complete)return void function(t,e,i){void 0===t.__webglInit&&(t.__webglInit=!0,e.addEventListener("dispose",P),t.__webglTexture=m.createTexture(),x.memory.textures++);g.activeTexture(m.TEXTURE0+i),g.bindTexture(m.TEXTURE_2D,t.__webglTexture),m.pixelStorei(m.UNPACK_FLIP_Y_WEBGL,e.flipY),m.pixelStorei(m.UNPACK_PREMULTIPLY_ALPHA_WEBGL,e.premultiplyAlpha),m.pixelStorei(m.UNPACK_ALIGNMENT,e.unpackAlignment);var r=w(e.image,y.maxTextureSize);o=e,(o.wrapS!==zt||o.wrapT!==zt||o.minFilter!==jt&&o.minFilter!==Ht)&&!1===S(r)&&(r=(n=r)instanceof HTMLImageElement||n instanceof HTMLCanvasElement||n instanceof ImageBitmap?(void 0===f&&(f=document.createElementNS("http://www.w3.org/1999/xhtml","canvas")),f.width=Ye.floorPowerOfTwo(n.width),f.height=Ye.floorPowerOfTwo(n.height),f.getContext("2d").drawImage(n,0,0,f.width,f.height),console.warn("THREE.WebGLRenderer: image is not power of two ("+n.width+"x"+n.height+"). Resized to "+f.width+"x"+f.height,n),f):n);var n;var o;var a=S(r),s=b.convert(e.format),c=b.convert(e.type);E(m.TEXTURE_2D,e,a);var u,h=e.mipmaps;if(e.isDepthTexture){var l=m.DEPTH_COMPONENT;if(e.type===Qt){if(!_)throw new Error("Float Depth Texture only supported in WebGL2.0");l=m.DEPTH_COMPONENT32F}else _&&(l=m.DEPTH_COMPONENT16);e.format===he&&l===m.DEPTH_COMPONENT&&e.type!==Zt&&e.type!==Jt&&(console.warn("THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture."),e.type=Zt,c=b.convert(e.type)),e.format===le&&(l=m.DEPTH_STENCIL,e.type!==ne&&(console.warn("THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture."),e.type=ne,c=b.convert(e.type))),g.texImage2D(m.TEXTURE_2D,0,l,r.width,r.height,0,s,c,null)}else if(e.isDataTexture)if(0<h.length&&a){for(var p=0,d=h.length;p<d;p++)u=h[p],g.texImage2D(m.TEXTURE_2D,p,s,u.width,u.height,0,s,c,u.data);e.generateMipmaps=!1,t.__maxMipLevel=h.length-1}else g.texImage2D(m.TEXTURE_2D,0,s,r.width,r.height,0,s,c,r.data),t.__maxMipLevel=0;else if(e.isCompressedTexture){for(var p=0,d=h.length;p<d;p++)u=h[p],e.format!==se&&e.format!==ae?-1<g.getCompressedTextureFormats().indexOf(s)?g.compressedTexImage2D(m.TEXTURE_2D,p,s,u.width,u.height,0,u.data):console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()"):g.texImage2D(m.TEXTURE_2D,p,s,u.width,u.height,0,s,c,u.data);t.__maxMipLevel=h.length-1}else if(0<h.length&&a){for(var p=0,d=h.length;p<d;p++)u=h[p],g.texImage2D(m.TEXTURE_2D,p,s,s,c,u);e.generateMipmaps=!1,t.__maxMipLevel=h.length-1}else g.texImage2D(m.TEXTURE_2D,0,s,s,c,r),t.__maxMipLevel=0;A(e,a)&&M(m.TEXTURE_2D,e,r.width,r.height);t.__version=e.version,e.onUpdate&&e.onUpdate(e)}(o,t,e);console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete",t)}}g.activeTexture(m.TEXTURE0+e),g.bindTexture(m.TEXTURE_2D,o.__webglTexture)}function E(t,e,i){var r;if(i?(m.texParameteri(t,m.TEXTURE_WRAP_S,b.convert(e.wrapS)),m.texParameteri(t,m.TEXTURE_WRAP_T,b.convert(e.wrapT)),m.texParameteri(t,m.TEXTURE_MAG_FILTER,b.convert(e.magFilter)),m.texParameteri(t,m.TEXTURE_MIN_FILTER,b.convert(e.minFilter))):(m.texParameteri(t,m.TEXTURE_WRAP_S,m.CLAMP_TO_EDGE),m.texParameteri(t,m.TEXTURE_WRAP_T,m.CLAMP_TO_EDGE),e.wrapS===zt&&e.wrapT===zt||console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping.",e),m.texParameteri(t,m.TEXTURE_MAG_FILTER,o(e.magFilter)),m.texParameteri(t,m.TEXTURE_MIN_FILTER,o(e.minFilter)),e.minFilter!==jt&&e.minFilter!==Ht&&console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.",e)),r=n.get("EXT_texture_filter_anisotropic")){if(e.type===Qt&&null===n.get("OES_texture_float_linear"))return;if(e.type===te&&null===n.get("OES_texture_half_float_linear"))return;(1<e.anisotropy||v.get(e).__currentAnisotropy)&&(m.texParameterf(t,r.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(e.anisotropy,y.getMaxAnisotropy())),v.get(e).__currentAnisotropy=e.anisotropy)}}function u(t,e,i,r){var n=b.convert(e.texture.format),o=b.convert(e.texture.type);g.texImage2D(r,0,n,e.width,e.height,0,n,o,null),m.bindFramebuffer(m.FRAMEBUFFER,t),m.framebufferTexture2D(m.FRAMEBUFFER,i,r,v.get(e.texture).__webglTexture,0),m.bindFramebuffer(m.FRAMEBUFFER,null)}function h(t,e){m.bindRenderbuffer(m.RENDERBUFFER,t),e.depthBuffer&&!e.stencilBuffer?(m.renderbufferStorage(m.RENDERBUFFER,m.DEPTH_COMPONENT16,e.width,e.height),m.framebufferRenderbuffer(m.FRAMEBUFFER,m.DEPTH_ATTACHMENT,m.RENDERBUFFER,t)):e.depthBuffer&&e.stencilBuffer?(m.renderbufferStorage(m.RENDERBUFFER,m.DEPTH_STENCIL,e.width,e.height),m.framebufferRenderbuffer(m.FRAMEBUFFER,m.DEPTH_STENCIL_ATTACHMENT,m.RENDERBUFFER,t)):m.renderbufferStorage(m.RENDERBUFFER,m.RGBA4,e.width,e.height),m.bindRenderbuffer(m.RENDERBUFFER,null)}function l(t){var e=v.get(t),i=!0===t.isWebGLRenderTargetCube;if(t.depthTexture){if(i)throw new Error("target.depthTexture not supported in Cube render targets");!function(t,e){if(e&&e.isWebGLRenderTargetCube)throw new Error("Depth Texture with cube render targets is not supported");if(m.bindFramebuffer(m.FRAMEBUFFER,t),!e.depthTexture||!e.depthTexture.isDepthTexture)throw new Error("renderTarget.depthTexture must be an instance of THREE.DepthTexture");v.get(e.depthTexture).__webglTexture&&e.depthTexture.image.width===e.width&&e.depthTexture.image.height===e.height||(e.depthTexture.image.width=e.width,e.depthTexture.image.height=e.height,e.depthTexture.needsUpdate=!0),c(e.depthTexture,0);var i=v.get(e.depthTexture).__webglTexture;if(e.depthTexture.format===he)m.framebufferTexture2D(m.FRAMEBUFFER,m.DEPTH_ATTACHMENT,m.TEXTURE_2D,i,0);else{if(e.depthTexture.format!==le)throw new Error("Unknown depthTexture format");m.framebufferTexture2D(m.FRAMEBUFFER,m.DEPTH_STENCIL_ATTACHMENT,m.TEXTURE_2D,i,0)}}(e.__webglFramebuffer,t)}else if(i){e.__webglDepthbuffer=[];for(var r=0;r<6;r++)m.bindFramebuffer(m.FRAMEBUFFER,e.__webglFramebuffer[r]),e.__webglDepthbuffer[r]=m.createRenderbuffer(),h(e.__webglDepthbuffer[r],t)}else m.bindFramebuffer(m.FRAMEBUFFER,e.__webglFramebuffer),e.__webglDepthbuffer=m.createRenderbuffer(),h(e.__webglDepthbuffer,t);m.bindFramebuffer(m.FRAMEBUFFER,null)}this.setTexture2D=c,this.setTextureCube=function(t,e){var i=v.get(t);if(6===t.image.length)if(0<t.version&&i.__version!==t.version){i.__image__webglTextureCube||(t.addEventListener("dispose",P),i.__image__webglTextureCube=m.createTexture(),x.memory.textures++),g.activeTexture(m.TEXTURE0+e),g.bindTexture(m.TEXTURE_CUBE_MAP,i.__image__webglTextureCube),m.pixelStorei(m.UNPACK_FLIP_Y_WEBGL,t.flipY);for(var r=t&&t.isCompressedTexture,n=t.image[0]&&t.image[0].isDataTexture,o=[],a=0;a<6;a++)o[a]=r||n?n?t.image[a].image:t.image[a]:w(t.image[a],y.maxCubemapSize);var s=o[0],c=S(s),u=b.convert(t.format),h=b.convert(t.type);for(E(m.TEXTURE_CUBE_MAP,t,c),a=0;a<6;a++)if(r)for(var l,p=o[a].mipmaps,d=0,f=p.length;d<f;d++)l=p[d],t.format!==se&&t.format!==ae?-1<g.getCompressedTextureFormats().indexOf(u)?g.compressedTexImage2D(m.TEXTURE_CUBE_MAP_POSITIVE_X+a,d,u,l.width,l.height,0,l.data):console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()"):g.texImage2D(m.TEXTURE_CUBE_MAP_POSITIVE_X+a,d,u,l.width,l.height,0,u,h,l.data);else n?g.texImage2D(m.TEXTURE_CUBE_MAP_POSITIVE_X+a,0,u,o[a].width,o[a].height,0,u,h,o[a].data):g.texImage2D(m.TEXTURE_CUBE_MAP_POSITIVE_X+a,0,u,u,h,o[a]);i.__maxMipLevel=r?p.length-1:0,A(t,c)&&M(m.TEXTURE_CUBE_MAP,t,s.width,s.height),i.__version=t.version,t.onUpdate&&t.onUpdate(t)}else g.activeTexture(m.TEXTURE0+e),g.bindTexture(m.TEXTURE_CUBE_MAP,i.__image__webglTextureCube)},this.setTextureCubeDynamic=function(t,e){g.activeTexture(m.TEXTURE0+e),g.bindTexture(m.TEXTURE_CUBE_MAP,v.get(t).__webglTexture)},this.setupRenderTarget=function(t){var e=v.get(t),i=v.get(t.texture);t.addEventListener("dispose",a),i.__webglTexture=m.createTexture(),x.memory.textures++;var r=!0===t.isWebGLRenderTargetCube,n=S(t);if(r){e.__webglFramebuffer=[];for(var o=0;o<6;o++)e.__webglFramebuffer[o]=m.createFramebuffer()}else e.__webglFramebuffer=m.createFramebuffer();if(r){for(g.bindTexture(m.TEXTURE_CUBE_MAP,i.__webglTexture),E(m.TEXTURE_CUBE_MAP,t.texture,n),o=0;o<6;o++)u(e.__webglFramebuffer[o],t,m.COLOR_ATTACHMENT0,m.TEXTURE_CUBE_MAP_POSITIVE_X+o);A(t.texture,n)&&M(m.TEXTURE_CUBE_MAP,t.texture,t.width,t.height),g.bindTexture(m.TEXTURE_CUBE_MAP,null)}else g.bindTexture(m.TEXTURE_2D,i.__webglTexture),E(m.TEXTURE_2D,t.texture,n),u(e.__webglFramebuffer,t,m.COLOR_ATTACHMENT0,m.TEXTURE_2D),A(t.texture,n)&&M(m.TEXTURE_2D,t.texture,t.width,t.height),g.bindTexture(m.TEXTURE_2D,null);t.depthBuffer&&l(t)},this.updateRenderTargetMipmap=function(t){var e=t.texture;if(A(e,S(t))){var i=t.isWebGLRenderTargetCube?m.TEXTURE_CUBE_MAP:m.TEXTURE_2D,r=v.get(e).__webglTexture;g.bindTexture(i,r),M(i,e,t.width,t.height),g.bindTexture(i,null)}}}function ma(i,r){return{convert:function(t){var e;if(t===Ft)return i.REPEAT;if(t===zt)return i.CLAMP_TO_EDGE;if(t===Ut)return i.MIRRORED_REPEAT;if(t===jt)return i.NEAREST;if(t===Gt)return i.NEAREST_MIPMAP_NEAREST;if(t===Vt)return i.NEAREST_MIPMAP_LINEAR;if(t===Ht)return i.LINEAR;if(t===$t)return i.LINEAR_MIPMAP_NEAREST;if(t===Wt)return i.LINEAR_MIPMAP_LINEAR;if(t===Xt)return i.UNSIGNED_BYTE;if(t===ee)return i.UNSIGNED_SHORT_4_4_4_4;if(t===ie)return i.UNSIGNED_SHORT_5_5_5_1;if(t===re)return i.UNSIGNED_SHORT_5_6_5;if(t===qt)return i.BYTE;if(t===Yt)return i.SHORT;if(t===Zt)return i.UNSIGNED_SHORT;if(t===Kt)return i.INT;if(t===Jt)return i.UNSIGNED_INT;if(t===Qt)return i.FLOAT;if(t===te&&null!==(e=r.get("OES_texture_half_float")))return e.HALF_FLOAT_OES;if(t===oe)return i.ALPHA;if(t===ae)return i.RGB;if(t===se)return i.RGBA;if(t===ce)return i.LUMINANCE;if(t===ue)return i.LUMINANCE_ALPHA;if(t===he)return i.DEPTH_COMPONENT;if(t===le)return i.DEPTH_STENCIL;if(t===j)return i.FUNC_ADD;if(t===G)return i.FUNC_SUBTRACT;if(t===tt)return i.FUNC_REVERSE_SUBTRACT;if(t===rt)return i.ZERO;if(t===nt)return i.ONE;if(t===ot)return i.SRC_COLOR;if(t===at)return i.ONE_MINUS_SRC_COLOR;if(t===st)return i.SRC_ALPHA;if(t===ct)return i.ONE_MINUS_SRC_ALPHA;if(t===ut)return i.DST_ALPHA;if(t===ht)return i.ONE_MINUS_DST_ALPHA;if(t===lt)return i.DST_COLOR;if(t===pt)return i.ONE_MINUS_DST_COLOR;if(t===dt)return i.SRC_ALPHA_SATURATE;if((t===pe||t===fe||t===ge||t===ve)&&null!==(e=r.get("WEBGL_compressed_texture_s3tc"))){if(t===pe)return e.COMPRESSED_RGB_S3TC_DXT1_EXT;if(t===fe)return e.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(t===ge)return e.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(t===ve)return e.COMPRESSED_RGBA_S3TC_DXT5_EXT}if((t===ye||t===be||t===xe||t===_e)&&null!==(e=r.get("WEBGL_compressed_texture_pvrtc"))){if(t===ye)return e.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(t===be)return e.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(t===xe)return e.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(t===_e)return e.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}if(t===we&&null!==(e=r.get("WEBGL_compressed_texture_etc1")))return e.COMPRESSED_RGB_ETC1_WEBGL;if((t===Se||t===Ae||t===Me||t===Pe||t===Ee||t===Ce||t===Te||t===Ie||t===Re||t===Le||t===Oe||t===De||t===ke||t===Be)&&null!==(e=r.get("WEBGL_compressed_texture_astc")))return t;if((t===et||t===it)&&null!==(e=r.get("EXT_blend_minmax"))){if(t===et)return e.MIN_EXT;if(t===it)return e.MAX_EXT}return t===ne&&null!==(e=r.get("WEBGL_depth_texture"))?e.UNSIGNED_INT_24_8_WEBGL:0}}}function ga(t,e,i,r){ar.call(this),this.type="PerspectiveCamera",this.fov=void 0!==t?t:50,this.zoom=1,this.near=void 0!==i?i:.1,this.far=void 0!==r?r:2e3,this.focus=10,this.aspect=void 0!==e?e:1,this.view=null,this.filmGauge=35,this.filmOffset=0,this.updateProjectionMatrix()}function va(t){ga.call(this),this.cameras=t||[]}function ya(r){var s=this,c=null,u=null,h=null,l=new Ke,p=new Ke;"undefined"!=typeof window&&"VRFrameData"in window&&(u=new window.VRFrameData,window.addEventListener("vrdisplaypresentchange",t,!1));var d=new Ke,f=new Je,m=new Qe,g=new ga;g.bounds=new xi(0,0,.5,1),g.layers.enable(1);var v=new ga;v.bounds=new xi(.5,0,.5,1),v.layers.enable(2);var n,o,y=new va([g,v]);function a(){return null!==c&&!0===c.isPresenting}function t(){if(a()){var t=c.getEyeParameters("left"),e=t.renderWidth,i=t.renderHeight;o=r.getPixelRatio(),n=r.getSize(),r.setDrawingBufferSize(2*e,i,1)}else s.enabled&&r.setDrawingBufferSize(n.width,n.height,o)}y.layers.enable(1),y.layers.enable(2),this.enabled=!1,this.userHeight=1.6,this.getDevice=function(){return c},this.setDevice=function(t){void 0!==t&&(c=t)},this.setPoseTarget=function(t){void 0!==t&&(h=t)},this.getCamera=function(t){if(null===c)return t;c.depthNear=t.near,c.depthFar=t.far,c.getFrameData(u);var e=c.stageParameters;e?l.fromArray(e.sittingToStandingTransform):l.makeTranslation(0,s.userHeight,0);var i=u.pose,r=null!==h?h:t;if(r.matrix.copy(l),r.matrix.decompose(r.position,r.quaternion,r.scale),null!==i.orientation&&(f.fromArray(i.orientation),r.quaternion.multiply(f)),null!==i.position&&(f.setFromRotationMatrix(l),m.fromArray(i.position),m.applyQuaternion(f),r.position.add(m)),r.updateMatrixWorld(),!1===c.isPresenting)return t;g.near=t.near,v.near=t.near,g.far=t.far,v.far=t.far,y.matrixWorld.copy(t.matrixWorld),y.matrixWorldInverse.copy(t.matrixWorldInverse),g.matrixWorldInverse.fromArray(u.leftViewMatrix),v.matrixWorldInverse.fromArray(u.rightViewMatrix),p.getInverse(l),g.matrixWorldInverse.multiply(p),v.matrixWorldInverse.multiply(p);var n=r.parent;null!==n&&(d.getInverse(n.matrixWorld),g.matrixWorldInverse.multiply(d),v.matrixWorldInverse.multiply(d)),g.matrixWorld.getInverse(g.matrixWorldInverse),v.matrixWorld.getInverse(v.matrixWorldInverse),g.projectionMatrix.fromArray(u.leftProjectionMatrix),v.projectionMatrix.fromArray(u.rightProjectionMatrix),y.projectionMatrix.copy(g.projectionMatrix);var o=c.getLayers();if(o.length){var a=o[0];null!==a.leftBounds&&4===a.leftBounds.length&&g.bounds.fromArray(a.leftBounds),null!==a.rightBounds&&4===a.rightBounds.length&&v.bounds.fromArray(a.rightBounds)}return y},this.getStandingMatrix=function(){return l},this.submitFrame=function(){a()&&c.submitFrame()},this.dispose=function(){"undefined"!=typeof window&&window.removeEventListener("vrdisplaypresentchange",t)}}function ba(t){console.log("THREE.WebGLRenderer","92");var n=void 0!==(t=t||{}).canvas?t.canvas:document.createElementNS("http://www.w3.org/1999/xhtml","canvas"),e=void 0!==t.context?t.context:null,i=void 0!==t.alpha&&t.alpha,r=void 0===t.depth||t.depth,o=void 0===t.stencil||t.stencil,a=void 0!==t.antialias&&t.antialias,s=void 0===t.premultipliedAlpha||t.premultipliedAlpha,c=void 0!==t.preserveDrawingBuffer&&t.preserveDrawingBuffer,u=void 0!==t.powerPreference?t.powerPreference:"default",d=null,N=null;this.domElement=n,this.context=null,this.autoClear=!0,this.autoClearColor=!0,this.autoClearDepth=!0,this.autoClearStencil=!0,this.sortObjects=!0,this.clippingPlanes=[],this.localClippingEnabled=!1,this.gammaFactor=2,this.gammaInput=!1,this.gammaOutput=!1,this.physicallyCorrectLights=!1,this.toneMapping=Et,this.toneMappingExposure=1,this.toneMappingWhitePoint=1,this.maxMorphTargets=8,this.maxMorphNormals=4;var F,A,z,U,h,j,l,M,P,f,g,p,m,v,E,C,T,y,b,G=this,x=!1,_=null,w=null,V=-1,I="",H=null,$=null,S=new xi,R=new xi,L=null,W=0,O=n.width,X=n.height,q=1,D=new xi(0,0,O,X),k=new xi(0,0,O,X),B=!1,Y=new Ei,Z=new Cn,K=!1,J=!1,Q=new Ke,tt=new Qe;function et(){return null===_?q:1}try{var it={alpha:i,depth:r,stencil:o,antialias:a,premultipliedAlpha:s,preserveDrawingBuffer:c,powerPreference:u};if(n.addEventListener("webglcontextlost",at,!1),n.addEventListener("webglcontextrestored",st,!1),null===(F=e||n.getContext("webgl",it)||n.getContext("experimental-webgl",it)))throw null!==n.getContext("webgl")?new Error("Error creating WebGL context with your selected attributes."):new Error("Error creating WebGL context.");void 0===F.getShaderPrecisionFormat&&(F.getShaderPrecisionFormat=function(){return{rangeMin:1,rangeMax:1,precision:1}})}catch(t){console.error("THREE.WebGLRenderer: "+t.message)}function rt(){(A=new Tn(F)).get("WEBGL_depth_texture"),A.get("OES_texture_float"),A.get("OES_texture_float_linear"),A.get("OES_texture_half_float"),A.get("OES_texture_half_float_linear"),A.get("OES_standard_derivatives"),A.get("OES_element_index_uint"),A.get("ANGLE_instanced_arrays"),b=new ma(F,A),z=new En(F,A,t),(U=new da(F,A,b)).scissor(R.copy(k).multiplyScalar(q)),U.viewport(S.copy(D).multiplyScalar(q)),h=new Ln(F),j=new Do,l=new fa(F,A,U,j,z,b,h),M=new Ni(F),P=new In(F,M,h),f=new kn(P,h),E=new Dn(F),g=new Oo(G,A,z),p=new Fo,m=new sa,v=new Mn(G,U,P,s),C=new Pn(F,A,h),T=new Rn(F,A,h),y=new pa(G,F,U,l,z),h.programs=g.programs,G.context=F,G.capabilities=z,G.extensions=A,G.properties=j,G.renderLists=p,G.state=U,G.info=h}rt();var nt=new ya(G);this.vr=nt;var ot=new ha(G,f,z.maxTextureSize);function at(t){t.preventDefault(),console.log("THREE.WebGLRenderer: Context Lost."),x=!0}function st(){console.log("THREE.WebGLRenderer: Context Restored."),x=!1,rt()}function ct(t){var e,i=t.target;i.removeEventListener("dispose",ct),ut(e=i),j.remove(e)}function ut(t){var e=j.get(t).program;(t.program=void 0)!==e&&g.releaseProgram(e)}this.shadowMap=ot,this.getContext=function(){return F},this.getContextAttributes=function(){return F.getContextAttributes()},this.forceContextLoss=function(){var t=A.get("WEBGL_lose_context");t&&t.loseContext()},this.forceContextRestore=function(){var t=A.get("WEBGL_lose_context");t&&t.restoreContext()},this.getPixelRatio=function(){return q},this.setPixelRatio=function(t){void 0!==t&&(q=t,this.setSize(O,X,!1))},this.getSize=function(){return{width:O,height:X}},this.setSize=function(t,e,i){var r=nt.getDevice();r&&r.isPresenting?console.warn("THREE.WebGLRenderer: Can't change size while VR device is presenting."):(O=t,X=e,n.width=t*q,n.height=e*q,!1!==i&&(n.style.width=t+"px",n.style.height=e+"px"),this.setViewport(0,0,t,e))},this.getDrawingBufferSize=function(){return{width:O*q,height:X*q}},this.setDrawingBufferSize=function(t,e,i){O=t,X=e,q=i,n.width=t*i,n.height=e*i,this.setViewport(0,0,t,e)},this.getCurrentViewport=function(){return S},this.setViewport=function(t,e,i,r){D.set(t,X-e-r,i,r),U.viewport(S.copy(D).multiplyScalar(q))},this.setScissor=function(t,e,i,r){k.set(t,X-e-r,i,r),U.scissor(R.copy(k).multiplyScalar(q))},this.setScissorTest=function(t){U.setScissorTest(B=t)},this.getClearColor=function(){return v.getClearColor()},this.setClearColor=function(){v.setClearColor.apply(v,arguments)},this.getClearAlpha=function(){return v.getClearAlpha()},this.setClearAlpha=function(){v.setClearAlpha.apply(v,arguments)},this.clear=function(t,e,i){var r=0;(void 0===t||t)&&(r|=F.COLOR_BUFFER_BIT),(void 0===e||e)&&(r|=F.DEPTH_BUFFER_BIT),(void 0===i||i)&&(r|=F.STENCIL_BUFFER_BIT),F.clear(r)},this.clearColor=function(){this.clear(!0,!1,!1)},this.clearDepth=function(){this.clear(!1,!0,!1)},this.clearStencil=function(){this.clear(!1,!1,!0)},this.clearTarget=function(t,e,i,r){this.setRenderTarget(t),this.clear(e,i,r)},this.dispose=function(){n.removeEventListener("webglcontextlost",at,!1),n.removeEventListener("webglcontextrestored",st,!1),p.dispose(),m.dispose(),j.dispose(),f.dispose(),nt.dispose(),mt()},this.renderBufferImmediate=function(t,e,i){U.initAttributes();var r=j.get(t);t.hasPositions&&!r.position&&(r.position=F.createBuffer()),t.hasNormals&&!r.normal&&(r.normal=F.createBuffer()),t.hasUvs&&!r.uv&&(r.uv=F.createBuffer()),t.hasColors&&!r.color&&(r.color=F.createBuffer());var n=e.getAttributes();if(t.hasPositions&&(F.bindBuffer(F.ARRAY_BUFFER,r.position),F.bufferData(F.ARRAY_BUFFER,t.positionArray,F.DYNAMIC_DRAW),U.enableAttribute(n.position),F.vertexAttribPointer(n.position,3,F.FLOAT,!1,0,0)),t.hasNormals){if(F.bindBuffer(F.ARRAY_BUFFER,r.normal),!i.isMeshPhongMaterial&&!i.isMeshStandardMaterial&&!i.isMeshNormalMaterial&&!0===i.flatShading)for(var o=0,a=3*t.count;o<a;o+=9){var s=t.normalArray,c=(s[o+0]+s[o+3]+s[o+6])/3,u=(s[o+1]+s[o+4]+s[o+7])/3,h=(s[o+2]+s[o+5]+s[o+8])/3;s[o+0]=c,s[o+1]=u,s[o+2]=h,s[o+3]=c,s[o+4]=u,s[o+5]=h,s[o+6]=c,s[o+7]=u,s[o+8]=h}F.bufferData(F.ARRAY_BUFFER,t.normalArray,F.DYNAMIC_DRAW),U.enableAttribute(n.normal),F.vertexAttribPointer(n.normal,3,F.FLOAT,!1,0,0)}t.hasUvs&&i.map&&(F.bindBuffer(F.ARRAY_BUFFER,r.uv),F.bufferData(F.ARRAY_BUFFER,t.uvArray,F.DYNAMIC_DRAW),U.enableAttribute(n.uv),F.vertexAttribPointer(n.uv,2,F.FLOAT,!1,0,0)),t.hasColors&&i.vertexColors!==Mt&&(F.bindBuffer(F.ARRAY_BUFFER,r.color),F.bufferData(F.ARRAY_BUFFER,t.colorArray,F.DYNAMIC_DRAW),U.enableAttribute(n.color),F.vertexAttribPointer(n.color,3,F.FLOAT,!1,0,0)),U.disableUnusedAttributes(),F.drawArrays(F.TRIANGLES,0,t.count),t.count=0},this.renderBufferDirect=function(t,e,i,r,n,o){var a=n.isMesh&&n.matrixWorld.determinant()<0;U.setMaterial(r,a);var s=_t(t,e,r,n),c=i.id+"_"+s.id+"_"+(!0===r.wireframe),u=!1;c!==I&&(I=c,u=!0),n.morphTargetInfluences&&(E.update(n,i,r,s),u=!0);var h,l=i.index,p=i.attributes.position,d=1;!0===r.wireframe&&(l=P.getWireframeAttribute(i),d=2);var f=C;null!==l&&(h=M.get(l),(f=T).setIndex(h)),u&&(!function(t,e,i){if(i&&i.isInstancedBufferGeometry&&null===A.get("ANGLE_instanced_arrays"))return console.error("THREE.WebGLRenderer.setupVertexAttributes: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");U.initAttributes();var r=i.attributes,n=e.getAttributes(),o=t.defaultAttributeValues;for(var a in n){var s=n[a];if(0<=s){var c=r[a];if(void 0!==c){var u=c.normalized,h=c.itemSize,l=M.get(c);if(void 0===l)continue;var p=l.buffer,d=l.type,f=l.bytesPerElement;if(c.isInterleavedBufferAttribute){var m=c.data,g=m.stride,v=c.offset;m&&m.isInstancedInterleavedBuffer?(U.enableAttributeAndDivisor(s,m.meshPerAttribute),void 0===i.maxInstancedCount&&(i.maxInstancedCount=m.meshPerAttribute*m.count)):U.enableAttribute(s),F.bindBuffer(F.ARRAY_BUFFER,p),F.vertexAttribPointer(s,h,d,u,g*f,v*f)}else c.isInstancedBufferAttribute?(U.enableAttributeAndDivisor(s,c.meshPerAttribute),void 0===i.maxInstancedCount&&(i.maxInstancedCount=c.meshPerAttribute*c.count)):U.enableAttribute(s),F.bindBuffer(F.ARRAY_BUFFER,p),F.vertexAttribPointer(s,h,d,u,0,0)}else if(void 0!==o){var y=o[a];if(void 0!==y)switch(y.length){case 2:F.vertexAttrib2fv(s,y);break;case 3:F.vertexAttrib3fv(s,y);break;case 4:F.vertexAttrib4fv(s,y);break;default:F.vertexAttrib1fv(s,y)}}}}U.disableUnusedAttributes()}(r,s,i),null!==l&&F.bindBuffer(F.ELEMENT_ARRAY_BUFFER,h.buffer));var m=1/0;null!==l?m=l.count:void 0!==p&&(m=p.count);var g=i.drawRange.start*d,v=i.drawRange.count*d,y=null!==o?o.start*d:0,b=null!==o?o.count*d:1/0,x=Math.max(g,y),_=Math.min(m,g+v,y+b)-1,w=Math.max(0,_-x+1);if(0!==w){if(n.isMesh)if(!0===r.wireframe)U.setLineWidth(r.wireframeLinewidth*et()),f.setMode(F.LINES);else switch(n.drawMode){case ze:f.setMode(F.TRIANGLES);break;case 1:f.setMode(F.TRIANGLE_STRIP);break;case 2:f.setMode(F.TRIANGLE_FAN)}else if(n.isLine){var S=r.linewidth;void 0===S&&(S=1),U.setLineWidth(S*et()),n.isLineSegments?f.setMode(F.LINES):n.isLineLoop?f.setMode(F.LINE_LOOP):f.setMode(F.LINE_STRIP)}else n.isPoints&&f.setMode(F.POINTS);i&&i.isInstancedBufferGeometry?0<i.maxInstancedCount&&f.renderInstances(i,x,w):f.render(x,w)}};var ht,lt,pt,dt=!(this.compile=function(i,t){(N=m.get(i,t)).init(),i.traverse(function(t){t.isLight&&(N.pushLight(t),t.castShadow&&N.pushShadow(t))}),N.setupLights(t),i.traverse(function(t){if(t.material)if(Array.isArray(t.material))for(var e=0;e<t.material.length;e++)xt(t.material[e],i.fog,t);else xt(t.material,i.fog,t)})}),ft=null;function mt(){dt=!1}function gt(){var t=nt.getDevice();t&&t.isPresenting?t.requestAnimationFrame(vt):window.requestAnimationFrame(vt)}function vt(t){!1!==dt&&(ft(t),gt())}function yt(t,e,i,r){for(var n=0,o=t.length;n<o;n++){var a=t[n],s=a.object,c=a.geometry,u=void 0===r?a.material:r,h=a.group;if(i.isArrayCamera)for(var l=($=i).cameras,p=0,d=l.length;p<d;p++){var f=l[p];if(s.layers.test(f.layers)){var m=f.bounds,g=m.x*O,v=m.y*X,y=m.z*O,b=m.w*X;U.viewport(S.set(g,v,y,b).multiplyScalar(q)),bt(s,e,f,c,u,h)}}else $=null,bt(s,e,i,c,u,h)}}function bt(t,e,i,r,n,o){if(t.onBeforeRender(G,e,i,r,n,o),N=m.get(e,$||i),t.modelViewMatrix.multiplyMatrices(i.matrixWorldInverse,t.matrixWorld),t.normalMatrix.getNormalMatrix(t.modelViewMatrix),t.isImmediateRenderObject){var a=t.isMesh&&t.matrixWorld.determinant()<0;U.setMaterial(n,a);var s=_t(i,e.fog,n,t);I="",c=s,u=n,t.render(function(t){G.renderBufferImmediate(t,c,u)})}else G.renderBufferDirect(i,e.fog,r,n,t,o);var c,u;t.onAfterRender(G,e,i,r,n,o),N=m.get(e,$||i)}function xt(t,e,i){var r=j.get(t),n=N.state.lights,o=N.state.shadowsArray,a=g.getParameters(t,n.state,o,e,Z.numPlanes,Z.numIntersection,i),s=g.getProgramCode(t,a),c=r.program,u=!0;if(void 0===c)t.addEventListener("dispose",ct);else if(c.code!==s)ut(t);else if(r.lightsHash!==n.state.hash)j.update(t,"lightsHash",n.state.hash),u=!1;else{if(void 0!==a.shaderID)return;u=!1}if(u){if(a.shaderID){var h=Bi[a.shaderID];r.shader={name:t.type,uniforms:Ii.clone(h.uniforms),vertexShader:h.vertexShader,fragmentShader:h.fragmentShader}}else r.shader={name:t.type,uniforms:t.uniforms,vertexShader:t.vertexShader,fragmentShader:t.fragmentShader};t.onBeforeCompile(r.shader,G),c=g.acquireProgram(t,r.shader,a,s),r.program=c,t.program=c}var l=c.getAttributes();if(t.morphTargets)for(var p=t.numSupportedMorphTargets=0;p<G.maxMorphTargets;p++)0<=l["morphTarget"+p]&&t.numSupportedMorphTargets++;if(t.morphNormals)for(p=t.numSupportedMorphNormals=0;p<G.maxMorphNormals;p++)0<=l["morphNormal"+p]&&t.numSupportedMorphNormals++;var d=r.shader.uniforms;(t.isShaderMaterial||t.isRawShaderMaterial)&&!0!==t.clipping||(r.numClippingPlanes=Z.numPlanes,r.numIntersection=Z.numIntersection,d.clippingPlanes=Z.uniform),r.fog=e,r.lightsHash=n.state.hash,t.lights&&(d.ambientLightColor.value=n.state.ambient,d.directionalLights.value=n.state.directional,d.spotLights.value=n.state.spot,d.rectAreaLights.value=n.state.rectArea,d.pointLights.value=n.state.point,d.hemisphereLights.value=n.state.hemi,d.directionalShadowMap.value=n.state.directionalShadowMap,d.directionalShadowMatrix.value=n.state.directionalShadowMatrix,d.spotShadowMap.value=n.state.spotShadowMap,d.spotShadowMatrix.value=n.state.spotShadowMatrix,d.pointShadowMap.value=n.state.pointShadowMap,d.pointShadowMatrix.value=n.state.pointShadowMatrix);var f=r.program.getUniforms(),m=wo.seqWithValue(f.seq,d);r.uniformsList=m}function _t(t,e,i,r){W=0;var n=j.get(i),o=N.state.lights;if(K&&(J||t!==H)){var a=t===H&&i.id===V;Z.setState(i.clippingPlanes,i.clipIntersection,i.clipShadows,t,n,a)}!1===i.needsUpdate&&(void 0===n.program?i.needsUpdate=!0:i.fog&&n.fog!==e?i.needsUpdate=!0:i.lights&&n.lightsHash!==o.state.hash?i.needsUpdate=!0:void 0===n.numClippingPlanes||n.numClippingPlanes===Z.numPlanes&&n.numIntersection===Z.numIntersection||(i.needsUpdate=!0)),i.needsUpdate&&(xt(i,e,r),i.needsUpdate=!1);var s,c,u,h,l,p,d,f,m,g,v,y,b,x,_,w,S,A,M=!1,P=!1,E=!1,C=n.program,T=C.getUniforms(),I=n.shader.uniforms;if(U.useProgram(C.program)&&(E=P=M=!0),i.id!==V&&(V=i.id,P=!0),M||t!==H){if(T.setValue(F,"projectionMatrix",t.projectionMatrix),z.logarithmicDepthBuffer&&T.setValue(F,"logDepthBufFC",2/(Math.log(t.far+1)/Math.LN2)),H!==($||t)&&(H=$||t,E=P=!0),i.isShaderMaterial||i.isMeshPhongMaterial||i.isMeshStandardMaterial||i.envMap){var R=T.map.cameraPosition;void 0!==R&&R.setValue(F,tt.setFromMatrixPosition(t.matrixWorld))}(i.isMeshPhongMaterial||i.isMeshLambertMaterial||i.isMeshBasicMaterial||i.isMeshStandardMaterial||i.isShaderMaterial||i.skinning)&&T.setValue(F,"viewMatrix",t.matrixWorldInverse)}if(i.skinning){T.setOptional(F,r,"bindMatrix"),T.setOptional(F,r,"bindMatrixInverse");var L=r.skeleton;if(L){var O=L.bones;if(z.floatVertexTextures){if(void 0===L.boneTexture){var D=Math.sqrt(4*O.length);D=Ye.ceilPowerOfTwo(D),D=Math.max(D,4);var k=new Float32Array(D*D*4);k.set(L.boneMatrices);var B=new Si(k,D,D,se,Qt);B.needsUpdate=!0,L.boneMatrices=k,L.boneTexture=B,L.boneTextureSize=D}T.setValue(F,"boneTexture",L.boneTexture),T.setValue(F,"boneTextureSize",L.boneTextureSize)}else T.setOptional(F,L,"boneMatrices")}}return P&&(T.setValue(F,"toneMappingExposure",G.toneMappingExposure),T.setValue(F,"toneMappingWhitePoint",G.toneMappingWhitePoint),i.lights&&(A=E,(S=I).ambientLightColor.needsUpdate=A,S.directionalLights.needsUpdate=A,S.pointLights.needsUpdate=A,S.spotLights.needsUpdate=A,S.rectAreaLights.needsUpdate=A,S.hemisphereLights.needsUpdate=A),e&&i.fog&&(w=e,(_=I).fogColor.value=w.color,w.isFog?(_.fogNear.value=w.near,_.fogFar.value=w.far):w.isFogExp2&&(_.fogDensity.value=w.density)),i.isMeshBasicMaterial?wt(I,i):i.isMeshLambertMaterial?(wt(I,i),b=I,(x=i).emissiveMap&&(b.emissiveMap.value=x.emissiveMap)):i.isMeshPhongMaterial?(wt(I,i),i.isMeshToonMaterial?(St(v=I,y=i),y.gradientMap&&(v.gradientMap.value=y.gradientMap)):St(I,i)):i.isMeshStandardMaterial?(wt(I,i),i.isMeshPhysicalMaterial?(g=i,(m=I).clearCoat.value=g.clearCoat,m.clearCoatRoughness.value=g.clearCoatRoughness,At(m,g)):At(I,i)):i.isMeshDepthMaterial?(wt(I,i),d=I,(f=i).displacementMap&&(d.displacementMap.value=f.displacementMap,d.displacementScale.value=f.displacementScale,d.displacementBias.value=f.displacementBias)):i.isMeshDistanceMaterial?(wt(I,i),function(t,e){e.displacementMap&&(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias);t.referencePosition.value.copy(e.referencePosition),t.nearDistance.value=e.nearDistance,t.farDistance.value=e.farDistance}(I,i)):i.isMeshNormalMaterial?(wt(I,i),function(t,e){e.bumpMap&&(t.bumpMap.value=e.bumpMap,t.bumpScale.value=e.bumpScale);e.normalMap&&(t.normalMap.value=e.normalMap,t.normalScale.value.copy(e.normalScale));e.displacementMap&&(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias)}(I,i)):i.isLineBasicMaterial?(p=i,(l=I).diffuse.value=p.color,l.opacity.value=p.opacity,i.isLineDashedMaterial&&(h=i,(u=I).dashSize.value=h.dashSize,u.totalSize.value=h.dashSize+h.gapSize,u.scale.value=h.scale)):i.isPointsMaterial?(c=i,(s=I).diffuse.value=c.color,s.opacity.value=c.opacity,s.size.value=c.size*q,s.scale.value=.5*X,s.map.value=c.map,null!==c.map&&(!0===c.map.matrixAutoUpdate&&c.map.updateMatrix(),s.uvTransform.value.copy(c.map.matrix))):i.isShadowMaterial&&(I.color.value=i.color,I.opacity.value=i.opacity),void 0!==I.ltc_1&&(I.ltc_1.value=ki.LTC_1),void 0!==I.ltc_2&&(I.ltc_2.value=ki.LTC_2),wo.upload(F,n.uniformsList,I,G)),i.isShaderMaterial&&!0===i.uniformsNeedUpdate&&(wo.upload(F,n.uniformsList,I,G),i.uniformsNeedUpdate=!1),T.setValue(F,"modelViewMatrix",r.modelViewMatrix),T.setValue(F,"normalMatrix",r.normalMatrix),T.setValue(F,"modelMatrix",r.matrixWorld),C}function wt(t,e){var i;t.opacity.value=e.opacity,e.color&&(t.diffuse.value=e.color),e.emissive&&t.emissive.value.copy(e.emissive).multiplyScalar(e.emissiveIntensity),e.map&&(t.map.value=e.map),e.alphaMap&&(t.alphaMap.value=e.alphaMap),e.specularMap&&(t.specularMap.value=e.specularMap),e.envMap&&(t.envMap.value=e.envMap,t.flipEnvMap.value=e.envMap&&e.envMap.isCubeTexture?-1:1,t.reflectivity.value=e.reflectivity,t.refractionRatio.value=e.refractionRatio,t.maxMipLevel.value=j.get(e.envMap).__maxMipLevel),e.lightMap&&(t.lightMap.value=e.lightMap,t.lightMapIntensity.value=e.lightMapIntensity),e.aoMap&&(t.aoMap.value=e.aoMap,t.aoMapIntensity.value=e.aoMapIntensity),e.map?i=e.map:e.specularMap?i=e.specularMap:e.displacementMap?i=e.displacementMap:e.normalMap?i=e.normalMap:e.bumpMap?i=e.bumpMap:e.roughnessMap?i=e.roughnessMap:e.metalnessMap?i=e.metalnessMap:e.alphaMap?i=e.alphaMap:e.emissiveMap&&(i=e.emissiveMap),void 0!==i&&(i.isWebGLRenderTarget&&(i=i.texture),!0===i.matrixAutoUpdate&&i.updateMatrix(),t.uvTransform.value.copy(i.matrix))}function St(t,e){t.specular.value=e.specular,t.shininess.value=Math.max(e.shininess,1e-4),e.emissiveMap&&(t.emissiveMap.value=e.emissiveMap),e.bumpMap&&(t.bumpMap.value=e.bumpMap,t.bumpScale.value=e.bumpScale),e.normalMap&&(t.normalMap.value=e.normalMap,t.normalScale.value.copy(e.normalScale)),e.displacementMap&&(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias)}function At(t,e){t.roughness.value=e.roughness,t.metalness.value=e.metalness,e.roughnessMap&&(t.roughnessMap.value=e.roughnessMap),e.metalnessMap&&(t.metalnessMap.value=e.metalnessMap),e.emissiveMap&&(t.emissiveMap.value=e.emissiveMap),e.bumpMap&&(t.bumpMap.value=e.bumpMap,t.bumpScale.value=e.bumpScale),e.normalMap&&(t.normalMap.value=e.normalMap,t.normalScale.value.copy(e.normalScale)),e.displacementMap&&(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias),e.envMap&&(t.envMapIntensity.value=e.envMapIntensity)}this.animate=function(t){null!==(ft=t)?dt||(gt(),dt=!0):mt()},this.render=function(t,e,i,r){if(e&&e.isCamera){if(!x){I="",V=-1,!(H=null)===t.autoUpdate&&t.updateMatrixWorld(),null===e.parent&&e.updateMatrixWorld(),nt.enabled&&(e=nt.getCamera(e)),(N=m.get(t,e)).init(),t.onBeforeRender(G,t,e,i),Q.multiplyMatrices(e.projectionMatrix,e.matrixWorldInverse),Y.setFromMatrix(Q),J=this.localClippingEnabled,K=Z.init(this.clippingPlanes,J,e),(d=p.get(t,e)).init(),function t(e,i,r){if(!1===e.visible)return;var n=e.layers.test(i.layers);if(n)if(e.isLight)N.pushLight(e),e.castShadow&&N.pushShadow(e);else if(e.isSprite)e.frustumCulled&&!Y.intersectsSprite(e)||N.pushSprite(e);else if(e.isImmediateRenderObject)r&&tt.setFromMatrixPosition(e.matrixWorld).applyMatrix4(Q),d.push(e,null,e.material,tt.z,null);else if((e.isMesh||e.isLine||e.isPoints)&&(e.isSkinnedMesh&&e.skeleton.update(),!e.frustumCulled||Y.intersectsObject(e))){r&&tt.setFromMatrixPosition(e.matrixWorld).applyMatrix4(Q);var o=f.update(e),a=e.material;if(Array.isArray(a))for(var s=o.groups,c=0,u=s.length;c<u;c++){var h=s[c],l=a[h.materialIndex];l&&l.visible&&d.push(e,o,l,tt.z,h)}else a.visible&&d.push(e,o,a,tt.z,null)}var p=e.children;for(var c=0,u=p.length;c<u;c++)t(p[c],i,r)}(t,e,G.sortObjects),!0===G.sortObjects&&d.sort(),K&&Z.beginShadows();var n=N.state.shadowsArray;ot.render(n,t,e),N.setupLights(e),K&&Z.endShadows(),this.info.autoReset&&this.info.reset(),void 0===i&&(i=null),this.setRenderTarget(i),v.render(d,t,e,r);var o=d.opaque,a=d.transparent;if(t.overrideMaterial){var s=t.overrideMaterial;o.length&&yt(o,t,e,s),a.length&&yt(a,t,e,s)}else o.length&&yt(o,t,e),a.length&&yt(a,t,e);var c=N.state.spritesArray;y.render(c,t,e),i&&l.updateRenderTargetMipmap(i),U.buffers.depth.setTest(!0),U.buffers.depth.setMask(!0),U.buffers.color.setMask(!0),U.setPolygonOffset(!1),t.onAfterRender(G,t,e),nt.enabled&&nt.submitFrame(),N=d=null}}else console.error("THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.")},this.allocTextureUnit=function(){var t=W;return t>=z.maxTextures&&console.warn("THREE.WebGLRenderer: Trying to use "+t+" texture units while this GPU supports only "+z.maxTextures),W+=1,t},this.setTexture2D=(ht=!1,function(t,e){t&&t.isWebGLRenderTarget&&(ht||(console.warn("THREE.WebGLRenderer.setTexture2D: don't use render targets as textures. Use their .texture property instead."),ht=!0),t=t.texture),l.setTexture2D(t,e)}),this.setTexture=(lt=!1,function(t,e){lt||(console.warn("THREE.WebGLRenderer: .setTexture is deprecated, use setTexture2D instead."),lt=!0),l.setTexture2D(t,e)}),this.setTextureCube=(pt=!1,function(t,e){t&&t.isWebGLRenderTargetCube&&(pt||(console.warn("THREE.WebGLRenderer.setTextureCube: don't use cube render targets as textures. Use their .texture property instead."),pt=!0),t=t.texture),t&&t.isCubeTexture||Array.isArray(t.image)&&6===t.image.length?l.setTextureCube(t,e):l.setTextureCubeDynamic(t,e)}),this.getRenderTarget=function(){return _},this.setRenderTarget=function(t){(_=t)&&void 0===j.get(t).__webglFramebuffer&&l.setupRenderTarget(t);var e=null,i=!1;if(t){var r=j.get(t).__webglFramebuffer;t.isWebGLRenderTargetCube?(e=r[t.activeCubeFace],i=!0):e=r,S.copy(t.viewport),R.copy(t.scissor),L=t.scissorTest}else S.copy(D).multiplyScalar(q),R.copy(k).multiplyScalar(q),L=B;if(w!==e&&(F.bindFramebuffer(F.FRAMEBUFFER,e),w=e),U.viewport(S),U.scissor(R),U.setScissorTest(L),i){var n=j.get(t.texture);F.framebufferTexture2D(F.FRAMEBUFFER,F.COLOR_ATTACHMENT0,F.TEXTURE_CUBE_MAP_POSITIVE_X+t.activeCubeFace,n.__webglTexture,t.activeMipMapLevel)}},this.readRenderTargetPixels=function(t,e,i,r,n,o){if(t&&t.isWebGLRenderTarget){var a=j.get(t).__webglFramebuffer;if(a){var s=!1;a!==w&&(F.bindFramebuffer(F.FRAMEBUFFER,a),s=!0);try{var c=t.texture,u=c.format,h=c.type;if(u!==se&&b.convert(u)!==F.getParameter(F.IMPLEMENTATION_COLOR_READ_FORMAT))return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.");if(!(h===Xt||b.convert(h)===F.getParameter(F.IMPLEMENTATION_COLOR_READ_TYPE)||h===Qt&&(A.get("OES_texture_float")||A.get("WEBGL_color_buffer_float"))||h===te&&A.get("EXT_color_buffer_half_float")))return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.");F.checkFramebufferStatus(F.FRAMEBUFFER)===F.FRAMEBUFFER_COMPLETE?0<=e&&e<=t.width-r&&0<=i&&i<=t.height-n&&F.readPixels(e,i,r,n,b.convert(u),b.convert(h),o):console.error("THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.")}finally{s&&F.bindFramebuffer(F.FRAMEBUFFER,w)}}}else console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.")},this.copyFramebufferToTexture=function(t,e,i){var r=e.image.width,n=e.image.height,o=b.convert(e.format);this.setTexture2D(e,0),F.copyTexImage2D(F.TEXTURE_2D,i||0,o,t.x,t.y,r,n,0)},this.copyTextureToTexture=function(t,e,i,r){var n=e.image.width,o=e.image.height,a=b.convert(i.format),s=b.convert(i.type),c=e.isDataTexture?e.image.data:e.image;this.setTexture2D(i,0),F.texSubImage2D(F.TEXTURE_2D,r||0,t.x,t.y,n,o,a,s,c)}}function xa(t,e){this.name="",this.color=new Li(t),this.density=void 0!==e?e:25e-5}function _a(t,e,i){this.name="",this.color=new Li(t),this.near=void 0!==e?e:1,this.far=void 0!==i?i:1e3}function wa(){or.call(this),this.type="Scene",this.background=null,this.fog=null,this.overrideMaterial=null,this.autoUpdate=!0}function Sa(t){yn.call(this),this.type="SpriteMaterial",this.color=new Li(16777215),this.map=null,this.rotation=0,this.fog=!1,this.lights=!1,this.setValues(t)}function Aa(t){or.call(this),this.type="Sprite",this.material=void 0!==t?t:new Sa,this.center=new Ze(.5,.5)}function Ma(){or.call(this),this.type="LOD",Object.defineProperties(this,{levels:{enumerable:!0,value:[]}})}function Pa(t,e){if(t=t||[],this.bones=t.slice(0),this.boneMatrices=new Float32Array(16*this.bones.length),void 0===e)this.calculateInverses();else if(this.bones.length===e.length)this.boneInverses=e.slice(0);else{console.warn("THREE.Skeleton boneInverses is the wrong length."),this.boneInverses=[];for(var i=0,r=this.bones.length;i<r;i++)this.boneInverses.push(new Ke)}}function Ea(){or.call(this),this.type="Bone"}function Ca(t,e){An.call(this,t,e),this.type="SkinnedMesh",this.bindMode="attached",this.bindMatrix=new Ke,this.bindMatrixInverse=new Ke;var i=new Pa(this.initBones());this.bind(i,this.matrixWorld),this.normalizeSkinWeights()}function Ta(t){yn.call(this),this.type="LineBasicMaterial",this.color=new Li(16777215),this.linewidth=1,this.linecap="round",this.linejoin="round",this.lights=!1,this.setValues(t)}function Ia(t,e,i){if(1===i)return console.warn("THREE.Line: parameter THREE.LinePieces no longer supported. Created THREE.LineSegments instead."),new Ra(t,e);or.call(this),this.type="Line",this.geometry=void 0!==t?t:new jr,this.material=void 0!==e?e:new Ta({color:16777215*Math.random()})}function Ra(t,e){Ia.call(this,t,e),this.type="LineSegments"}function La(t,e){Ia.call(this,t,e),this.type="LineLoop"}function Oa(t){yn.call(this),this.type="PointsMaterial",this.color=new Li(16777215),this.map=null,this.size=1,this.sizeAttenuation=!0,this.lights=!1,this.setValues(t)}function Da(t,e){or.call(this),this.type="Points",this.geometry=void 0!==t?t:new jr,this.material=void 0!==e?e:new Oa({color:16777215*Math.random()})}function ka(){or.call(this),this.type="Group"}function Ba(t,e,i,r,n,o,a,s,c){bi.call(this,t,e,i,r,n,o,a,s,c),this.generateMipmaps=!1}function Na(t,e,i,r,n,o,a,s,c,u,h,l){bi.call(this,null,o,a,s,c,u,r,n,h,l),this.image={width:e,height:i},this.mipmaps=t,this.flipY=!1,this.generateMipmaps=!1}function Fa(t,e,i,r,n,o,a,s,c,u){if((u=void 0!==u?u:he)!==he&&u!==le)throw new Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat");void 0===i&&u===he&&(i=Zt),void 0===i&&u===le&&(i=ne),bi.call(this,null,r,n,o,a,s,u,i,c),this.image={width:t,height:e},this.magFilter=void 0!==a?a:jt,this.minFilter=void 0!==s?s:jt,this.flipY=!1,this.generateMipmaps=!1}function za(t){jr.call(this),this.type="WireframeGeometry";var e,i,r,n,o,a,s,c,u,h,l=[],p=[0,0],d={},f=["a","b","c"];if(t&&t.isGeometry){var m=t.faces;for(e=0,r=m.length;e<r;e++){var g=m[e];for(i=0;i<3;i++)s=g[f[i]],c=g[f[(i+1)%3]],p[0]=Math.min(s,c),p[1]=Math.max(s,c),void 0===d[u=p[0]+","+p[1]]&&(d[u]={index1:p[0],index2:p[1]})}for(u in d)a=d[u],h=t.vertices[a.index1],l.push(h.x,h.y,h.z),h=t.vertices[a.index2],l.push(h.x,h.y,h.z)}else if(t&&t.isBufferGeometry){var v,y,b,x,_,w;if(h=new Qe,null!==t.index){for(v=t.attributes.position,y=t.index,0===(b=t.groups).length&&(b=[{start:0,count:y.count,materialIndex:0}]),n=0,o=b.length;n<o;++n)for(r=(e=(x=b[n]).start)+x.count;e<r;e+=3)for(i=0;i<3;i++)s=y.getX(e+i),c=y.getX(e+(i+1)%3),p[0]=Math.min(s,c),p[1]=Math.max(s,c),void 0===d[u=p[0]+","+p[1]]&&(d[u]={index1:p[0],index2:p[1]});for(u in d)a=d[u],h.fromBufferAttribute(v,a.index1),l.push(h.x,h.y,h.z),h.fromBufferAttribute(v,a.index2),l.push(h.x,h.y,h.z)}else for(e=0,r=(v=t.attributes.position).count/3;e<r;e++)for(i=0;i<3;i++)_=3*e+i,h.fromBufferAttribute(v,_),l.push(h.x,h.y,h.z),w=3*e+(i+1)%3,h.fromBufferAttribute(v,w),l.push(h.x,h.y,h.z)}this.addAttribute("position",new Pr(l,3))}function Ua(t,e,i){vr.call(this),this.type="ParametricGeometry",this.parameters={func:t,slices:e,stacks:i},this.fromBufferGeometry(new ja(t,e,i)),this.mergeVertices()}function ja(t,e,i){jr.call(this),this.type="ParametricBufferGeometry",this.parameters={func:t,slices:e,stacks:i};var r,n,o=[],a=[],s=[],c=[],u=new Qe,h=new Qe,l=new Qe,p=new Qe,d=new Qe,f=e+1;for(r=0;r<=i;r++){var m=r/i;for(n=0;n<=e;n++){var g=n/e;t(g,m,h),a.push(h.x,h.y,h.z),0<=g-1e-5?(t(g-1e-5,m,l),p.subVectors(h,l)):(t(g+1e-5,m,l),p.subVectors(l,h)),0<=m-1e-5?(t(g,m-1e-5,l),d.subVectors(h,l)):(t(g,m+1e-5,l),d.subVectors(l,h)),u.crossVectors(p,d).normalize(),s.push(u.x,u.y,u.z),c.push(g,m)}}for(r=0;r<i;r++)for(n=0;n<e;n++){var v=r*f+n,y=r*f+n+1,b=(r+1)*f+n+1,x=(r+1)*f+n;o.push(v,y,x),o.push(y,b,x)}this.setIndex(o),this.addAttribute("position",new Pr(a,3)),this.addAttribute("normal",new Pr(s,3)),this.addAttribute("uv",new Pr(c,2))}function Ga(t,e,i,r){vr.call(this),this.type="PolyhedronGeometry",this.parameters={vertices:t,indices:e,radius:i,detail:r},this.fromBufferGeometry(new Va(t,e,i,r)),this.mergeVertices()}function Va(r,o,t,e){jr.call(this),this.type="PolyhedronBufferGeometry",this.parameters={vertices:r,indices:o,radius:t,detail:e},t=t||1;var h=[],l=[];function a(t,e,i,r){var n,o,a=Math.pow(2,r),s=[];for(n=0;n<=a;n++){s[n]=[];var c=t.clone().lerp(i,n/a),u=e.clone().lerp(i,n/a),h=a-n;for(o=0;o<=h;o++)s[n][o]=0===o&&n===a?c:c.clone().lerp(u,o/h)}for(n=0;n<a;n++)for(o=0;o<2*(a-n)-1;o++){var l=Math.floor(o/2);o%2==0?(p(s[n][l+1]),p(s[n+1][l]),p(s[n][l])):(p(s[n][l+1]),p(s[n+1][l+1]),p(s[n+1][l]))}}function p(t){h.push(t.x,t.y,t.z)}function s(t,e){var i=3*t;e.x=r[i+0],e.y=r[i+1],e.z=r[i+2]}function d(t,e,i,r){r<0&&1===t.x&&(l[e]=t.x-1),0===i.x&&0===i.z&&(l[e]=r/2/Math.PI+.5)}function f(t){return Math.atan2(t.z,-t.x)}!function(t){for(var e=new Qe,i=new Qe,r=new Qe,n=0;n<o.length;n+=3)s(o[n+0],e),s(o[n+1],i),s(o[n+2],r),a(e,i,r,t)}(e=e||0),function(t){for(var e=new Qe,i=0;i<h.length;i+=3)e.x=h[i+0],e.y=h[i+1],e.z=h[i+2],e.normalize().multiplyScalar(t),h[i+0]=e.x,h[i+1]=e.y,h[i+2]=e.z}(t),function(){for(var t=new Qe,e=0;e<h.length;e+=3){t.x=h[e+0],t.y=h[e+1],t.z=h[e+2];var i=f(t)/2/Math.PI+.5,r=(n=t,Math.atan2(-n.y,Math.sqrt(n.x*n.x+n.z*n.z))/Math.PI+.5);l.push(i,1-r)}var n;(function(){for(var t=new Qe,e=new Qe,i=new Qe,r=new Qe,n=new Ze,o=new Ze,a=new Ze,s=0,c=0;s<h.length;s+=9,c+=6){t.set(h[s+0],h[s+1],h[s+2]),e.set(h[s+3],h[s+4],h[s+5]),i.set(h[s+6],h[s+7],h[s+8]),n.set(l[c+0],l[c+1]),o.set(l[c+2],l[c+3]),a.set(l[c+4],l[c+5]),r.copy(t).add(e).add(i).divideScalar(3);var u=f(r);d(n,c+0,t,u),d(o,c+2,e,u),d(a,c+4,i,u)}})(),function(){for(var t=0;t<l.length;t+=6){var e=l[t+0],i=l[t+2],r=l[t+4],n=Math.max(e,i,r),o=Math.min(e,i,r);.9<n&&o<.1&&(e<.2&&(l[t+0]+=1),i<.2&&(l[t+2]+=1),r<.2&&(l[t+4]+=1))}}()}(),this.addAttribute("position",new Pr(h,3)),this.addAttribute("normal",new Pr(h.slice(),3)),this.addAttribute("uv",new Pr(l,2)),0===e?this.computeVertexNormals():this.normalizeNormals()}function Ha(t,e){vr.call(this),this.type="TetrahedronGeometry",this.parameters={radius:t,detail:e},this.fromBufferGeometry(new $a(t,e)),this.mergeVertices()}function $a(t,e){Va.call(this,[1,1,1,-1,-1,1,-1,1,-1,1,-1,-1],[2,1,0,0,3,2,1,3,0,2,3,1],t,e),this.type="TetrahedronBufferGeometry",this.parameters={radius:t,detail:e}}function Wa(t,e){vr.call(this),this.type="OctahedronGeometry",this.parameters={radius:t,detail:e},this.fromBufferGeometry(new Xa(t,e)),this.mergeVertices()}function Xa(t,e){Va.call(this,[1,0,0,-1,0,0,0,1,0,0,-1,0,0,0,1,0,0,-1],[0,2,4,0,4,3,0,3,5,0,5,2,1,2,5,1,5,3,1,3,4,1,4,2],t,e),this.type="OctahedronBufferGeometry",this.parameters={radius:t,detail:e}}function qa(t,e){vr.call(this),this.type="IcosahedronGeometry",this.parameters={radius:t,detail:e},this.fromBufferGeometry(new Ya(t,e)),this.mergeVertices()}function Ya(t,e){var i=(1+Math.sqrt(5))/2;Va.call(this,[-1,i,0,1,i,0,-1,-i,0,1,-i,0,0,-1,i,0,1,i,0,-1,-i,0,1,-i,i,0,-1,i,0,1,-i,0,-1,-i,0,1],[0,11,5,0,5,1,0,1,7,0,7,10,0,10,11,1,5,9,5,11,4,11,10,2,10,7,6,7,1,8,3,9,4,3,4,2,3,2,6,3,6,8,3,8,9,4,9,5,2,4,11,6,2,10,8,6,7,9,8,1],t,e),this.type="IcosahedronBufferGeometry",this.parameters={radius:t,detail:e}}function Za(t,e){vr.call(this),this.type="DodecahedronGeometry",this.parameters={radius:t,detail:e},this.fromBufferGeometry(new Ka(t,e)),this.mergeVertices()}function Ka(t,e){var i=(1+Math.sqrt(5))/2,r=1/i;Va.call(this,[-1,-1,-1,-1,-1,1,-1,1,-1,-1,1,1,1,-1,-1,1,-1,1,1,1,-1,1,1,1,0,-r,-i,0,-r,i,0,r,-i,0,r,i,-r,-i,0,-r,i,0,r,-i,0,r,i,0,-i,0,-r,i,0,-r,-i,0,r,i,0,r],[3,11,7,3,7,15,3,15,13,7,19,17,7,17,6,7,6,15,17,4,8,17,8,10,17,10,6,8,0,16,8,16,2,8,2,10,0,12,1,0,1,18,0,18,16,6,10,2,6,2,13,6,13,15,2,16,18,2,18,3,2,3,13,18,1,9,18,9,11,18,11,3,4,14,12,4,12,0,4,0,8,11,9,5,11,5,19,11,19,7,19,5,14,19,14,4,19,4,17,1,12,14,1,14,5,1,5,9],t,e),this.type="DodecahedronBufferGeometry",this.parameters={radius:t,detail:e}}function Ja(t,e,i,r,n,o){vr.call(this),this.type="TubeGeometry",this.parameters={path:t,tubularSegments:e,radius:i,radialSegments:r,closed:n},void 0!==o&&console.warn("THREE.TubeGeometry: taper has been removed.");var a=new Qa(t,e,i,r,n);this.tangents=a.tangents,this.normals=a.normals,this.binormals=a.binormals,this.fromBufferGeometry(a),this.mergeVertices()}function Qa(a,s,c,u,t){jr.call(this),this.type="TubeBufferGeometry",this.parameters={path:a,tubularSegments:s,radius:c,radialSegments:u,closed:t},s=s||64,c=c||1,u=u||8,t=t||!1;var h=a.computeFrenetFrames(s,t);this.tangents=h.tangents,this.normals=h.normals,this.binormals=h.binormals;var n,l,p=new Qe,d=new Qe,e=new Ze,f=new Qe,m=[],g=[],i=[],o=[];function r(t){f=a.getPointAt(t/s,f);var e=h.normals[t],i=h.binormals[t];for(l=0;l<=u;l++){var r=l/u*Math.PI*2,n=Math.sin(r),o=-Math.cos(r);d.x=o*e.x+n*i.x,d.y=o*e.y+n*i.y,d.z=o*e.z+n*i.z,d.normalize(),g.push(d.x,d.y,d.z),p.x=f.x+c*d.x,p.y=f.y+c*d.y,p.z=f.z+c*d.z,m.push(p.x,p.y,p.z)}}!function(){for(n=0;n<s;n++)r(n);r(!1===t?s:0),function(){for(n=0;n<=s;n++)for(l=0;l<=u;l++)e.x=n/s,e.y=l/u,i.push(e.x,e.y)}(),function(){for(l=1;l<=s;l++)for(n=1;n<=u;n++){var t=(u+1)*(l-1)+(n-1),e=(u+1)*l+(n-1),i=(u+1)*l+n,r=(u+1)*(l-1)+n;o.push(t,e,r),o.push(e,i,r)}}()}(),this.setIndex(o),this.addAttribute("position",new Pr(m,3)),this.addAttribute("normal",new Pr(g,3)),this.addAttribute("uv",new Pr(i,2))}function ts(t,e,i,r,n,o,a){vr.call(this),this.type="TorusKnotGeometry",this.parameters={radius:t,tube:e,tubularSegments:i,radialSegments:r,p:n,q:o},void 0!==a&&console.warn("THREE.TorusKnotGeometry: heightScale has been deprecated. Use .scale( x, y, z ) instead."),this.fromBufferGeometry(new es(t,e,i,r,n,o)),this.mergeVertices()}function es(t,e,i,r,n,o){jr.call(this),this.type="TorusKnotBufferGeometry",this.parameters={radius:t,tube:e,tubularSegments:i,radialSegments:r,p:n,q:o},t=t||1,e=e||.4,i=Math.floor(i)||64,r=Math.floor(r)||8,n=n||2,o=o||3;var a,s,c=[],u=[],h=[],l=[],p=new Qe,d=new Qe,f=new Qe,m=new Qe,g=new Qe,v=new Qe,y=new Qe;for(a=0;a<=i;++a){var b=a/i*n*Math.PI*2;for(E(b,n,o,t,f),E(b+.01,n,o,t,m),v.subVectors(m,f),y.addVectors(m,f),g.crossVectors(v,y),y.crossVectors(g,v),g.normalize(),y.normalize(),s=0;s<=r;++s){var x=s/r*Math.PI*2,_=-e*Math.cos(x),w=e*Math.sin(x);p.x=f.x+(_*y.x+w*g.x),p.y=f.y+(_*y.y+w*g.y),p.z=f.z+(_*y.z+w*g.z),u.push(p.x,p.y,p.z),d.subVectors(p,f).normalize(),h.push(d.x,d.y,d.z),l.push(a/i),l.push(s/r)}}for(s=1;s<=i;s++)for(a=1;a<=r;a++){var S=(r+1)*(s-1)+(a-1),A=(r+1)*s+(a-1),M=(r+1)*s+a,P=(r+1)*(s-1)+a;c.push(S,A,P),c.push(A,M,P)}function E(t,e,i,r,n){var o=Math.cos(t),a=Math.sin(t),s=i/e*t,c=Math.cos(s);n.x=r*(2+c)*.5*o,n.y=r*(2+c)*a*.5,n.z=r*Math.sin(s)*.5}this.setIndex(c),this.addAttribute("position",new Pr(u,3)),this.addAttribute("normal",new Pr(h,3)),this.addAttribute("uv",new Pr(l,2))}function is(t,e,i,r,n){vr.call(this),this.type="TorusGeometry",this.parameters={radius:t,tube:e,radialSegments:i,tubularSegments:r,arc:n},this.fromBufferGeometry(new rs(t,e,i,r,n)),this.mergeVertices()}function rs(t,e,i,r,n){jr.call(this),this.type="TorusBufferGeometry",this.parameters={radius:t,tube:e,radialSegments:i,tubularSegments:r,arc:n},t=t||1,e=e||.4,i=Math.floor(i)||8,r=Math.floor(r)||6,n=n||2*Math.PI;var o,a,s=[],c=[],u=[],h=[],l=new Qe,p=new Qe,d=new Qe;for(o=0;o<=i;o++)for(a=0;a<=r;a++){var f=a/r*n,m=o/i*Math.PI*2;p.x=(t+e*Math.cos(m))*Math.cos(f),p.y=(t+e*Math.cos(m))*Math.sin(f),p.z=e*Math.sin(m),c.push(p.x,p.y,p.z),l.x=t*Math.cos(f),l.y=t*Math.sin(f),d.subVectors(p,l).normalize(),u.push(d.x,d.y,d.z),h.push(a/r),h.push(o/i)}for(o=1;o<=i;o++)for(a=1;a<=r;a++){var g=(r+1)*o+a-1,v=(r+1)*(o-1)+a-1,y=(r+1)*(o-1)+a,b=(r+1)*o+a;s.push(g,v,b),s.push(v,y,b)}this.setIndex(s),this.addAttribute("position",new Pr(c,3)),this.addAttribute("normal",new Pr(u,3)),this.addAttribute("uv",new Pr(h,2))}((ca.prototype=Object.create(yn.prototype)).constructor=ca).prototype.isMeshDepthMaterial=!0,ca.prototype.copy=function(t){return yn.prototype.copy.call(this,t),this.depthPacking=t.depthPacking,this.skinning=t.skinning,this.morphTargets=t.morphTargets,this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this},((ua.prototype=Object.create(yn.prototype)).constructor=ua).prototype.isMeshDistanceMaterial=!0,ua.prototype.copy=function(t){return yn.prototype.copy.call(this,t),this.referencePosition.copy(t.referencePosition),this.nearDistance=t.nearDistance,this.farDistance=t.farDistance,this.skinning=t.skinning,this.morphTargets=t.morphTargets,this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this},(la.prototype=Object.create(bi.prototype)).constructor=la,ga.prototype=Object.assign(Object.create(ar.prototype),{constructor:ga,isPerspectiveCamera:!0,copy:function(t,e){return ar.prototype.copy.call(this,t,e),this.fov=t.fov,this.zoom=t.zoom,this.near=t.near,this.far=t.far,this.focus=t.focus,this.aspect=t.aspect,this.view=null===t.view?null:Object.assign({},t.view),this.filmGauge=t.filmGauge,this.filmOffset=t.filmOffset,this},setFocalLength:function(t){var e=.5*this.getFilmHeight()/t;this.fov=2*Ye.RAD2DEG*Math.atan(e),this.updateProjectionMatrix()},getFocalLength:function(){var t=Math.tan(.5*Ye.DEG2RAD*this.fov);return.5*this.getFilmHeight()/t},getEffectiveFOV:function(){return 2*Ye.RAD2DEG*Math.atan(Math.tan(.5*Ye.DEG2RAD*this.fov)/this.zoom)},getFilmWidth:function(){return this.filmGauge*Math.min(this.aspect,1)},getFilmHeight:function(){return this.filmGauge/Math.max(this.aspect,1)},setViewOffset:function(t,e,i,r,n,o){this.aspect=t/e,null===this.view&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=t,this.view.fullHeight=e,this.view.offsetX=i,this.view.offsetY=r,this.view.width=n,this.view.height=o,this.updateProjectionMatrix()},clearViewOffset:function(){null!==this.view&&(this.view.enabled=!1),this.updateProjectionMatrix()},updateProjectionMatrix:function(){var t=this.near,e=t*Math.tan(.5*Ye.DEG2RAD*this.fov)/this.zoom,i=2*e,r=this.aspect*i,n=-.5*r,o=this.view;if(null!==this.view&&this.view.enabled){var a=o.fullWidth,s=o.fullHeight;n+=o.offsetX*r/a,e-=o.offsetY*i/s,r*=o.width/a,i*=o.height/s}var c=this.filmOffset;0!==c&&(n+=t*c/this.getFilmWidth()),this.projectionMatrix.makePerspective(n,n+r,e,e-i,t,this.far)},toJSON:function(t){var e=or.prototype.toJSON.call(this,t);return e.object.fov=this.fov,e.object.zoom=this.zoom,e.object.near=this.near,e.object.far=this.far,e.object.focus=this.focus,e.object.aspect=this.aspect,null!==this.view&&(e.object.view=Object.assign({},this.view)),e.object.filmGauge=this.filmGauge,e.object.filmOffset=this.filmOffset,e}}),va.prototype=Object.assign(Object.create(ga.prototype),{constructor:va,isArrayCamera:!0}),xa.prototype.isFogExp2=!0,xa.prototype.clone=function(){return new xa(this.color.getHex(),this.density)},xa.prototype.toJSON=function(){return{type:"FogExp2",color:this.color.getHex(),density:this.density}},_a.prototype.isFog=!0,_a.prototype.clone=function(){return new _a(this.color.getHex(),this.near,this.far)},_a.prototype.toJSON=function(){return{type:"Fog",color:this.color.getHex(),near:this.near,far:this.far}},wa.prototype=Object.assign(Object.create(or.prototype),{constructor:wa,copy:function(t,e){return or.prototype.copy.call(this,t,e),null!==t.background&&(this.background=t.background.clone()),null!==t.fog&&(this.fog=t.fog.clone()),null!==t.overrideMaterial&&(this.overrideMaterial=t.overrideMaterial.clone()),this.autoUpdate=t.autoUpdate,this.matrixAutoUpdate=t.matrixAutoUpdate,this},toJSON:function(t){var e=or.prototype.toJSON.call(this,t);return null!==this.background&&(e.object.background=this.background.toJSON(t)),null!==this.fog&&(e.object.fog=this.fog.toJSON()),e}}),((Sa.prototype=Object.create(yn.prototype)).constructor=Sa).prototype.isSpriteMaterial=!0,Sa.prototype.copy=function(t){return yn.prototype.copy.call(this,t),this.color.copy(t.color),this.map=t.map,this.rotation=t.rotation,this},Aa.prototype=Object.assign(Object.create(or.prototype),{constructor:Aa,isSprite:!0,raycast:(Uo=new Qe,jo=new Qe,Go=new Qe,function(t,e){jo.setFromMatrixPosition(this.matrixWorld),t.ray.closestPointToPoint(jo,Uo),Go.setFromMatrixScale(this.matrixWorld);var i=Go.x*Go.y/4;if(!(jo.distanceToSquared(Uo)>i)){var r=t.ray.origin.distanceTo(Uo);r<t.near||r>t.far||e.push({distance:r,point:Uo.clone(),face:null,object:this})}}),clone:function(){return new this.constructor(this.material).copy(this)},copy:function(t){return or.prototype.copy.call(this,t),void 0!==t.center&&this.center.copy(t.center),this}}),Ma.prototype=Object.assign(Object.create(or.prototype),{constructor:Ma,copy:function(t){or.prototype.copy.call(this,t,!1);for(var e=t.levels,i=0,r=e.length;i<r;i++){var n=e[i];this.addLevel(n.object.clone(),n.distance)}return this},addLevel:function(t,e){void 0===e&&(e=0),e=Math.abs(e);for(var i=this.levels,r=0;r<i.length&&!(e<i[r].distance);r++);i.splice(r,0,{distance:e,object:t}),this.add(t)},getObjectForDistance:function(t){for(var e=this.levels,i=1,r=e.length;i<r&&!(t<e[i].distance);i++);return e[i-1].object},raycast:($o=new Qe,function(t,e){$o.setFromMatrixPosition(this.matrixWorld);var i=t.ray.origin.distanceTo($o);this.getObjectForDistance(i).raycast(t,e)}),update:(Vo=new Qe,Ho=new Qe,function(t){var e=this.levels;if(1<e.length){Vo.setFromMatrixPosition(t.matrixWorld),Ho.setFromMatrixPosition(this.matrixWorld);var i=Vo.distanceTo(Ho);e[0].object.visible=!0;for(var r=1,n=e.length;r<n&&i>=e[r].distance;r++)e[r-1].object.visible=!1,e[r].object.visible=!0;for(;r<n;r++)e[r].object.visible=!1}}),toJSON:function(t){var e=or.prototype.toJSON.call(this,t);e.object.levels=[];for(var i=this.levels,r=0,n=i.length;r<n;r++){var o=i[r];e.object.levels.push({object:o.object.uuid,distance:o.distance})}return e}}),Object.assign(Pa.prototype,{calculateInverses:function(){this.boneInverses=[];for(var t=0,e=this.bones.length;t<e;t++){var i=new Ke;this.bones[t]&&i.getInverse(this.bones[t].matrixWorld),this.boneInverses.push(i)}},pose:function(){var t,e,i;for(e=0,i=this.bones.length;e<i;e++)(t=this.bones[e])&&t.matrixWorld.getInverse(this.boneInverses[e]);for(e=0,i=this.bones.length;e<i;e++)(t=this.bones[e])&&(t.parent&&t.parent.isBone?(t.matrix.getInverse(t.parent.matrixWorld),t.matrix.multiply(t.matrixWorld)):t.matrix.copy(t.matrixWorld),t.matrix.decompose(t.position,t.quaternion,t.scale))},update:(Wo=new Ke,Xo=new Ke,function(){for(var t=this.bones,e=this.boneInverses,i=this.boneMatrices,r=this.boneTexture,n=0,o=t.length;n<o;n++){var a=t[n]?t[n].matrixWorld:Xo;Wo.multiplyMatrices(a,e[n]),Wo.toArray(i,16*n)}void 0!==r&&(r.needsUpdate=!0)}),clone:function(){return new Pa(this.bones,this.boneInverses)},getBoneByName:function(t){for(var e=0,i=this.bones.length;e<i;e++){var r=this.bones[e];if(r.name===t)return r}}}),Ea.prototype=Object.assign(Object.create(or.prototype),{constructor:Ea,isBone:!0}),Ca.prototype=Object.assign(Object.create(An.prototype),{constructor:Ca,isSkinnedMesh:!0,initBones:function(){var t,e,i,r,n=[];if(this.geometry&&void 0!==this.geometry.bones){for(i=0,r=this.geometry.bones.length;i<r;i++)e=this.geometry.bones[i],t=new Ea,n.push(t),t.name=e.name,t.position.fromArray(e.pos),t.quaternion.fromArray(e.rotq),void 0!==e.scl&&t.scale.fromArray(e.scl);for(i=0,r=this.geometry.bones.length;i<r;i++)-1!==(e=this.geometry.bones[i]).parent&&null!==e.parent&&void 0!==n[e.parent]?n[e.parent].add(n[i]):this.add(n[i])}return this.updateMatrixWorld(!0),n},bind:function(t,e){this.skeleton=t,void 0===e&&(this.updateMatrixWorld(!0),this.skeleton.calculateInverses(),e=this.matrixWorld),this.bindMatrix.copy(e),this.bindMatrixInverse.getInverse(e)},pose:function(){this.skeleton.pose()},normalizeSkinWeights:function(){var t,e;if(this.geometry&&this.geometry.isGeometry)for(e=0;e<this.geometry.skinWeights.length;e++){var i=this.geometry.skinWeights[e];(t=1/i.manhattanLength())!==1/0?i.multiplyScalar(t):i.set(1,0,0,0)}else if(this.geometry&&this.geometry.isBufferGeometry){var r=new xi,n=this.geometry.attributes.skinWeight;for(e=0;e<n.count;e++)r.x=n.getX(e),r.y=n.getY(e),r.z=n.getZ(e),r.w=n.getW(e),(t=1/r.manhattanLength())!==1/0?r.multiplyScalar(t):r.set(1,0,0,0),n.setXYZW(e,r.x,r.y,r.z,r.w)}},updateMatrixWorld:function(t){An.prototype.updateMatrixWorld.call(this,t),"attached"===this.bindMode?this.bindMatrixInverse.getInverse(this.matrixWorld):"detached"===this.bindMode?this.bindMatrixInverse.getInverse(this.bindMatrix):console.warn("THREE.SkinnedMesh: Unrecognized bindMode: "+this.bindMode)},clone:function(){return new this.constructor(this.geometry,this.material).copy(this)}}),((Ta.prototype=Object.create(yn.prototype)).constructor=Ta).prototype.isLineBasicMaterial=!0,Ta.prototype.copy=function(t){return yn.prototype.copy.call(this,t),this.color.copy(t.color),this.linewidth=t.linewidth,this.linecap=t.linecap,this.linejoin=t.linejoin,this},Ia.prototype=Object.assign(Object.create(or.prototype),{constructor:Ia,isLine:!0,computeLineDistances:(Ko=new Qe,Jo=new Qe,function(){var t=this.geometry;if(t.isBufferGeometry)if(null===t.index){for(var e=t.attributes.position,i=[0],r=1,n=e.count;r<n;r++)Ko.fromBufferAttribute(e,r-1),Jo.fromBufferAttribute(e,r),i[r]=i[r-1],i[r]+=Ko.distanceTo(Jo);t.addAttribute("lineDistance",new Pr(i,1))}else console.warn("THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.");else if(t.isGeometry){var o=t.vertices;for((i=t.lineDistances)[0]=0,r=1,n=o.length;r<n;r++)i[r]=i[r-1],i[r]+=o[r-1].distanceTo(o[r])}return this}),raycast:(qo=new Ke,Yo=new _n,Zo=new Mi,function(t,e){var i=t.linePrecision,r=i*i,n=this.geometry,o=this.matrixWorld;if(null===n.boundingSphere&&n.computeBoundingSphere(),Zo.copy(n.boundingSphere),Zo.applyMatrix4(o),!1!==t.ray.intersectsSphere(Zo)){qo.getInverse(o),Yo.copy(t.ray).applyMatrix4(qo);var a=new Qe,s=new Qe,c=new Qe,u=new Qe,h=this&&this.isLineSegments?2:1;if(n.isBufferGeometry){var l=n.index,p=n.attributes.position.array;if(null!==l)for(var d=l.array,f=0,m=d.length-1;f<m;f+=h){var g=d[f],v=d[f+1];a.fromArray(p,3*g),s.fromArray(p,3*v),r<Yo.distanceSqToSegment(a,s,u,c)||(u.applyMatrix4(this.matrixWorld),(x=t.ray.origin.distanceTo(u))<t.near||x>t.far||e.push({distance:x,point:c.clone().applyMatrix4(this.matrixWorld),index:f,face:null,faceIndex:null,object:this}))}else for(f=0,m=p.length/3-1;f<m;f+=h)a.fromArray(p,3*f),s.fromArray(p,3*f+3),r<Yo.distanceSqToSegment(a,s,u,c)||(u.applyMatrix4(this.matrixWorld),(x=t.ray.origin.distanceTo(u))<t.near||x>t.far||e.push({distance:x,point:c.clone().applyMatrix4(this.matrixWorld),index:f,face:null,faceIndex:null,object:this}))}else if(n.isGeometry){var y=n.vertices,b=y.length;for(f=0;f<b-1;f+=h){var x;r<Yo.distanceSqToSegment(y[f],y[f+1],u,c)||(u.applyMatrix4(this.matrixWorld),(x=t.ray.origin.distanceTo(u))<t.near||x>t.far||e.push({distance:x,point:c.clone().applyMatrix4(this.matrixWorld),index:f,face:null,faceIndex:null,object:this}))}}}}),clone:function(){return new this.constructor(this.geometry,this.material).copy(this)}}),Ra.prototype=Object.assign(Object.create(Ia.prototype),{constructor:Ra,isLineSegments:!0,computeLineDistances:(Qo=new Qe,ta=new Qe,function(){var t=this.geometry;if(t.isBufferGeometry)if(null===t.index){for(var e=t.attributes.position,i=[],r=0,n=e.count;r<n;r+=2)Qo.fromBufferAttribute(e,r),ta.fromBufferAttribute(e,r+1),i[r]=0===r?0:i[r-1],i[r+1]=i[r]+Qo.distanceTo(ta);t.addAttribute("lineDistance",new Pr(i,1))}else console.warn("THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.");else if(t.isGeometry){var o=t.vertices;for(i=t.lineDistances,r=0,n=o.length;r<n;r+=2)Qo.copy(o[r]),ta.copy(o[r+1]),i[r]=0===r?0:i[r-1],i[r+1]=i[r]+Qo.distanceTo(ta)}return this})}),La.prototype=Object.assign(Object.create(Ia.prototype),{constructor:La,isLineLoop:!0}),((Oa.prototype=Object.create(yn.prototype)).constructor=Oa).prototype.isPointsMaterial=!0,Oa.prototype.copy=function(t){return yn.prototype.copy.call(this,t),this.color.copy(t.color),this.map=t.map,this.size=t.size,this.sizeAttenuation=t.sizeAttenuation,this},Da.prototype=Object.assign(Object.create(or.prototype),{constructor:Da,isPoints:!0,raycast:(ea=new Ke,ia=new _n,ra=new Mi,function(n,o){var a=this,t=this.geometry,s=this.matrixWorld,e=n.params.Points.threshold;if(null===t.boundingSphere&&t.computeBoundingSphere(),ra.copy(t.boundingSphere),ra.applyMatrix4(s),ra.radius+=e,!1!==n.ray.intersectsSphere(ra)){ea.getInverse(s),ia.copy(n.ray).applyMatrix4(ea);var i=e/((this.scale.x+this.scale.y+this.scale.z)/3),c=i*i,r=new Qe,u=new Qe;if(t.isBufferGeometry){var h=t.index,l=t.attributes.position.array;if(null!==h)for(var p=h.array,d=0,f=p.length;d<f;d++){var m=p[d];r.fromArray(l,3*m),y(r,m)}else{d=0;for(var g=l.length/3;d<g;d++)r.fromArray(l,3*d),y(r,d)}}else{var v=t.vertices;for(d=0,g=v.length;d<g;d++)y(v[d],d)}}function y(t,e){var i=ia.distanceSqToPoint(t);if(i<c){ia.closestPointToPoint(t,u),u.applyMatrix4(s);var r=n.ray.origin.distanceTo(u);if(r<n.near||r>n.far)return;o.push({distance:r,distanceToRay:Math.sqrt(i),point:u.clone(),index:e,face:null,object:a})}}}),clone:function(){return new this.constructor(this.geometry,this.material).copy(this)}}),ka.prototype=Object.assign(Object.create(or.prototype),{constructor:ka,isGroup:!0}),Ba.prototype=Object.assign(Object.create(bi.prototype),{constructor:Ba,isVideoTexture:!0,update:function(){var t=this.image;t.readyState>=t.HAVE_CURRENT_DATA&&(this.needsUpdate=!0)}}),((Na.prototype=Object.create(bi.prototype)).constructor=Na).prototype.isCompressedTexture=!0,((Fa.prototype=Object.create(bi.prototype)).constructor=Fa).prototype.isDepthTexture=!0,(za.prototype=Object.create(jr.prototype)).constructor=za,(Ua.prototype=Object.create(vr.prototype)).constructor=Ua,(ja.prototype=Object.create(jr.prototype)).constructor=ja,(Ga.prototype=Object.create(vr.prototype)).constructor=Ga,(Va.prototype=Object.create(jr.prototype)).constructor=Va,(Ha.prototype=Object.create(vr.prototype)).constructor=Ha,($a.prototype=Object.create(Va.prototype)).constructor=$a,(Wa.prototype=Object.create(vr.prototype)).constructor=Wa,(Xa.prototype=Object.create(Va.prototype)).constructor=Xa,(qa.prototype=Object.create(vr.prototype)).constructor=qa,(Ya.prototype=Object.create(Va.prototype)).constructor=Ya,(Za.prototype=Object.create(vr.prototype)).constructor=Za,(Ka.prototype=Object.create(Va.prototype)).constructor=Ka,(Ja.prototype=Object.create(vr.prototype)).constructor=Ja,(Qa.prototype=Object.create(jr.prototype)).constructor=Qa,(ts.prototype=Object.create(vr.prototype)).constructor=ts,(es.prototype=Object.create(jr.prototype)).constructor=es,(is.prototype=Object.create(vr.prototype)).constructor=is,(rs.prototype=Object.create(jr.prototype)).constructor=rs;var ns=function(t,e,i){i=i||2;var r,n,o,a,s,c,u,h=e&&e.length,l=h?e[0]*i:t.length,p=os(t,0,l,i,!0),d=[];if(!p)return d;if(h&&(p=function(t,e,i,r){var n,o,a,s,c,u=[];for(n=0,o=e.length;n<o;n++)a=e[n]*r,s=n<o-1?e[n+1]*r:t.length,(c=os(t,a,s,r,!1))===c.next&&(c.steiner=!0),u.push(ms(c));for(u.sort(ps),n=0;n<u.length;n++)ds(u[n],i),i=as(i,i.next);return i}(t,e,p,i)),t.length>80*i){r=o=t[0],n=a=t[1];for(var f=i;f<l;f+=i)(s=t[f])<r&&(r=s),(c=t[f+1])<n&&(n=c),o<s&&(o=s),a<c&&(a=c);u=0!==(u=Math.max(o-r,a-n))?1/u:0}return ss(p,d,i,r,n,u),d};function os(t,e,i,r,n){var o,a;if(n===0<function(t,e,i,r){for(var n=0,o=e,a=i-r;o<i;o+=r)n+=(t[a]-t[o])*(t[o+1]+t[a+1]),a=o;return n}(t,e,i,r))for(o=e;o<i;o+=r)a=ws(o,t[o],t[o+1],a);else for(o=i-r;e<=o;o-=r)a=ws(o,t[o],t[o+1],a);return a&&ys(a,a.next)&&(Ss(a),a=a.next),a}function as(t,e){if(!t)return t;e||(e=t);var i,r=t;do{if(i=!1,r.steiner||!ys(r,r.next)&&0!==vs(r.prev,r,r.next))r=r.next;else{if(Ss(r),(r=e=r.prev)===r.next)break;i=!0}}while(i||r!==e);return e}function ss(t,e,i,r,n,o,a){if(t){!a&&o&&function(t,e,i,r){var n=t;for(;null===n.z&&(n.z=fs(n.x,n.y,e,i,r)),n.prevZ=n.prev,n.nextZ=n.next,n=n.next,n!==t;);n.prevZ.nextZ=null,n.prevZ=null,function(t){var e,i,r,n,o,a,s,c,u=1;do{for(i=t,o=t=null,a=0;i;){for(a++,r=i,e=s=0;e<u&&(s++,r=r.nextZ);e++);for(c=u;0<s||0<c&&r;)0!==s&&(0===c||!r||i.z<=r.z)?(i=(n=i).nextZ,s--):(r=(n=r).nextZ,c--),o?o.nextZ=n:t=n,n.prevZ=o,o=n;i=r}o.nextZ=null,u*=2}while(1<a)}(n)}(t,r,n,o);for(var s,c,u=t;t.prev!==t.next;)if(s=t.prev,c=t.next,o?us(t,r,n,o):cs(t))e.push(s.i/i),e.push(t.i/i),e.push(c.i/i),Ss(t),t=c.next,u=c.next;else if((t=c)===u){a?1===a?ss(t=hs(t,e,i),e,i,r,n,o,2):2===a&&ls(t,e,i,r,n,o):ss(as(t),e,i,r,n,o,1);break}}}function cs(t){var e=t.prev,i=t,r=t.next;if(0<=vs(e,i,r))return!1;for(var n=t.next.next;n!==t.prev;){if(gs(e.x,e.y,i.x,i.y,r.x,r.y,n.x,n.y)&&0<=vs(n.prev,n,n.next))return!1;n=n.next}return!0}function us(t,e,i,r){var n=t.prev,o=t,a=t.next;if(0<=vs(n,o,a))return!1;for(var s=n.x<o.x?n.x<a.x?n.x:a.x:o.x<a.x?o.x:a.x,c=n.y<o.y?n.y<a.y?n.y:a.y:o.y<a.y?o.y:a.y,u=n.x>o.x?n.x>a.x?n.x:a.x:o.x>a.x?o.x:a.x,h=n.y>o.y?n.y>a.y?n.y:a.y:o.y>a.y?o.y:a.y,l=fs(s,c,e,i,r),p=fs(u,h,e,i,r),d=t.nextZ;d&&d.z<=p;){if(d!==t.prev&&d!==t.next&&gs(n.x,n.y,o.x,o.y,a.x,a.y,d.x,d.y)&&0<=vs(d.prev,d,d.next))return!1;d=d.nextZ}for(d=t.prevZ;d&&d.z>=l;){if(d!==t.prev&&d!==t.next&&gs(n.x,n.y,o.x,o.y,a.x,a.y,d.x,d.y)&&0<=vs(d.prev,d,d.next))return!1;d=d.prevZ}return!0}function hs(t,e,i){var r=t;do{var n=r.prev,o=r.next.next;!ys(n,o)&&bs(n,r,r.next,o)&&xs(n,o)&&xs(o,n)&&(e.push(n.i/i),e.push(r.i/i),e.push(o.i/i),Ss(r),Ss(r.next),r=t=o),r=r.next}while(r!==t);return r}function ls(t,e,i,r,n,o){var a,s,c=t;do{for(var u=c.next.next;u!==c.prev;){if(c.i!==u.i&&(s=u,(a=c).next.i!==s.i&&a.prev.i!==s.i&&!function(t,e){var i=t;do{if(i.i!==t.i&&i.next.i!==t.i&&i.i!==e.i&&i.next.i!==e.i&&bs(i,i.next,t,e))return!0;i=i.next}while(i!==t);return!1}(a,s)&&xs(a,s)&&xs(s,a)&&function(t,e){var i=t,r=!1,n=(t.x+e.x)/2,o=(t.y+e.y)/2;for(;i.y>o!=i.next.y>o&&i.next.y!==i.y&&n<(i.next.x-i.x)*(o-i.y)/(i.next.y-i.y)+i.x&&(r=!r),i=i.next,i!==t;);return r}(a,s))){var h=_s(c,u);return c=as(c,c.next),h=as(h,h.next),ss(c,e,i,r,n,o),void ss(h,e,i,r,n,o)}u=u.next}c=c.next}while(c!==t)}function ps(t,e){return t.x-e.x}function ds(t,e){if(e=function(t,e){var i,r=e,n=t.x,o=t.y,a=-1/0;do{if(o<=r.y&&o>=r.next.y&&r.next.y!==r.y){var s=r.x+(o-r.y)*(r.next.x-r.x)/(r.next.y-r.y);if(s<=n&&a<s){if((a=s)===n){if(o===r.y)return r;if(o===r.next.y)return r.next}i=r.x<r.next.x?r:r.next}}r=r.next}while(r!==e);if(!i)return null;if(n===a)return i.prev;var c,u=i,h=i.x,l=i.y,p=1/0;r=i.next;for(;r!==u;)n>=r.x&&r.x>=h&&n!==r.x&&gs(o<l?n:a,o,h,l,o<l?a:n,o,r.x,r.y)&&((c=Math.abs(o-r.y)/(n-r.x))<p||c===p&&r.x>i.x)&&xs(r,t)&&(i=r,p=c),r=r.next;return i}(t,e)){var i=_s(e,t);as(i,i.next)}}function fs(t,e,i,r,n){return(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=32767*(t-i)*n)|t<<8))|t<<4))|t<<2))|t<<1))|(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=32767*(e-r)*n)|e<<8))|e<<4))|e<<2))|e<<1))<<1}function ms(t){for(var e=t,i=t;e.x<i.x&&(i=e),(e=e.next)!==t;);return i}function gs(t,e,i,r,n,o,a,s){return 0<=(n-a)*(e-s)-(t-a)*(o-s)&&0<=(t-a)*(r-s)-(i-a)*(e-s)&&0<=(i-a)*(o-s)-(n-a)*(r-s)}function vs(t,e,i){return(e.y-t.y)*(i.x-e.x)-(e.x-t.x)*(i.y-e.y)}function ys(t,e){return t.x===e.x&&t.y===e.y}function bs(t,e,i,r){return!!(ys(t,e)&&ys(i,r)||ys(t,r)&&ys(i,e))||0<vs(t,e,i)!=0<vs(t,e,r)&&0<vs(i,r,t)!=0<vs(i,r,e)}function xs(t,e){return vs(t.prev,t,t.next)<0?0<=vs(t,e,t.next)&&0<=vs(t,t.prev,e):vs(t,e,t.prev)<0||vs(t,t.next,e)<0}function _s(t,e){var i=new As(t.i,t.x,t.y),r=new As(e.i,e.x,e.y),n=t.next,o=e.prev;return(t.next=e).prev=t,(i.next=n).prev=i,(r.next=i).prev=r,(o.next=r).prev=o,r}function ws(t,e,i,r){var n=new As(t,e,i);return r?(n.next=r.next,(n.prev=r).next.prev=n,r.next=n):(n.prev=n).next=n,n}function Ss(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function As(t,e,i){this.i=t,this.x=e,this.y=i,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}var Ms={area:function(t){for(var e=t.length,i=0,r=e-1,n=0;n<e;r=n++)i+=t[r].x*t[n].y-t[n].x*t[r].y;return.5*i},isClockWise:function(t){return Ms.area(t)<0},triangulateShape:function(t,e){var i=[],r=[],n=[];Ps(t),Es(i,t);var o=t.length;e.forEach(Ps);for(var a=0;a<e.length;a++)r.push(o),o+=e[a].length,Es(i,e[a]);var s=ns(i,r);for(a=0;a<s.length;a+=3)n.push(s.slice(a,a+3));return n}};function Ps(t){var e=t.length;2<e&&t[e-1].equals(t[0])&&t.pop()}function Es(t,e){for(var i=0;i<e.length;i++)t.push(e[i].x),t.push(e[i].y)}function Cs(t,e){vr.call(this),this.type="ExtrudeGeometry",this.parameters={shapes:t,options:e},this.fromBufferGeometry(new Ts(t,e)),this.mergeVertices()}function Ts(t,Z){jr.call(this),this.type="ExtrudeBufferGeometry",this.parameters={shapes:t,options:Z},t=Array.isArray(t)?t:[t];for(var K=this,J=[],Q=[],e=0,i=t.length;e<i;e++){r(t[e])}function r(t){var e,i,r,n,o,a,s,c,u=[],h=void 0!==Z.curveSegments?Z.curveSegments:12,l=void 0!==Z.steps?Z.steps:1,p=void 0!==Z.amount?Z.amount:100,d=void 0===Z.bevelEnabled||Z.bevelEnabled,f=void 0!==Z.bevelThickness?Z.bevelThickness:6,m=void 0!==Z.bevelSize?Z.bevelSize:f-2,g=void 0!==Z.bevelSegments?Z.bevelSegments:3,v=Z.extrudePath,y=void 0!==Z.UVGenerator?Z.UVGenerator:Is,b=!1;v&&(e=v.getSpacedPoints(l),d=!(b=!0),i=v.computeFrenetFrames(l,!1),r=new Qe,n=new Qe,o=new Qe),d||(m=f=g=0);var x=t.extractPoints(h),_=x.shape,w=x.holes;if(!Ms.isClockWise(_))for(_=_.reverse(),s=0,c=w.length;s<c;s++)a=w[s],Ms.isClockWise(a)&&(w[s]=a.reverse());var S=Ms.triangulateShape(_,w),A=_;for(s=0,c=w.length;s<c;s++)a=w[s],_=_.concat(a);function M(t,e,i){return e||console.error("THREE.ExtrudeGeometry: vec does not exist"),e.clone().multiplyScalar(i).add(t)}var P,E,C,T,I,R,L=_.length,O=S.length;function D(t,e,i){var r,n,o,a=t.x-e.x,s=t.y-e.y,c=i.x-t.x,u=i.y-t.y,h=a*a+s*s,l=a*u-s*c;if(Math.abs(l)>Number.EPSILON){var p=Math.sqrt(h),d=Math.sqrt(c*c+u*u),f=e.x-s/p,m=e.y+a/p,g=((i.x-u/d-f)*u-(i.y+c/d-m)*c)/(a*u-s*c),v=(r=f+a*g-t.x)*r+(n=m+s*g-t.y)*n;if(v<=2)return new Ze(r,n);o=Math.sqrt(v/2)}else{var y=!1;a>Number.EPSILON?c>Number.EPSILON&&(y=!0):a<-Number.EPSILON?c<-Number.EPSILON&&(y=!0):Math.sign(s)===Math.sign(u)&&(y=!0),y?(r=-s,n=a,o=Math.sqrt(h)):(r=a,n=s,o=Math.sqrt(h/2))}return new Ze(r/o,n/o)}for(var k=[],B=0,N=A.length,F=N-1,z=B+1;B<N;B++,F++,z++)F===N&&(F=0),z===N&&(z=0),k[B]=D(A[B],A[F],A[z]);var U,j,G=[],V=k.concat();for(s=0,c=w.length;s<c;s++){for(a=w[s],U=[],B=0,F=(N=a.length)-1,z=B+1;B<N;B++,F++,z++)F===N&&(F=0),z===N&&(z=0),U[B]=D(a[B],a[F],a[z]);G.push(U),V=V.concat(U)}for(P=0;P<g;P++){for(C=P/g,T=f*Math.cos(C*Math.PI/2),E=m*Math.sin(C*Math.PI/2),B=0,N=A.length;B<N;B++)$((I=M(A[B],k[B],E)).x,I.y,-T);for(s=0,c=w.length;s<c;s++)for(a=w[s],U=G[s],B=0,N=a.length;B<N;B++)$((I=M(a[B],U[B],E)).x,I.y,-T)}for(E=m,B=0;B<L;B++)I=d?M(_[B],V[B],E):_[B],b?(n.copy(i.normals[0]).multiplyScalar(I.x),r.copy(i.binormals[0]).multiplyScalar(I.y),o.copy(e[0]).add(n).add(r),$(o.x,o.y,o.z)):$(I.x,I.y,0);for(j=1;j<=l;j++)for(B=0;B<L;B++)I=d?M(_[B],V[B],E):_[B],b?(n.copy(i.normals[j]).multiplyScalar(I.x),r.copy(i.binormals[j]).multiplyScalar(I.y),o.copy(e[j]).add(n).add(r),$(o.x,o.y,o.z)):$(I.x,I.y,p/l*j);for(P=g-1;0<=P;P--){for(C=P/g,T=f*Math.cos(C*Math.PI/2),E=m*Math.sin(C*Math.PI/2),B=0,N=A.length;B<N;B++)$((I=M(A[B],k[B],E)).x,I.y,p+T);for(s=0,c=w.length;s<c;s++)for(a=w[s],U=G[s],B=0,N=a.length;B<N;B++)I=M(a[B],U[B],E),b?$(I.x,I.y+e[l-1].y,e[l-1].x+T):$(I.x,I.y,p+T)}function H(t,e){var i,r;for(B=t.length;0<=--B;){(r=(i=B)-1)<0&&(r=t.length-1);var n=0,o=l+2*g;for(n=0;n<o;n++){var a=L*n,s=L*(n+1);X(e+i+a,e+r+a,e+r+s,e+i+s)}}}function $(t,e,i){u.push(t),u.push(e),u.push(i)}function W(t,e,i){q(t),q(e),q(i);var r=J.length/3,n=y.generateTopUV(K,J,r-3,r-2,r-1);Y(n[0]),Y(n[1]),Y(n[2])}function X(t,e,i,r){q(t),q(e),q(r),q(e),q(i),q(r);var n=J.length/3,o=y.generateSideWallUV(K,J,n-6,n-3,n-2,n-1);Y(o[0]),Y(o[1]),Y(o[3]),Y(o[1]),Y(o[2]),Y(o[3])}function q(t){J.push(u[3*t+0]),J.push(u[3*t+1]),J.push(u[3*t+2])}function Y(t){Q.push(t.x),Q.push(t.y)}!function(){var t=J.length/3;if(d){var e=0,i=L*e;for(B=0;B<O;B++)W((R=S[B])[2]+i,R[1]+i,R[0]+i);for(i=L*(e=l+2*g),B=0;B<O;B++)W((R=S[B])[0]+i,R[1]+i,R[2]+i)}else{for(B=0;B<O;B++)W((R=S[B])[2],R[1],R[0]);for(B=0;B<O;B++)W((R=S[B])[0]+L*l,R[1]+L*l,R[2]+L*l)}K.addGroup(t,J.length/3-t,0)}(),function(){var t=J.length/3,e=0;for(H(A,e),e+=A.length,s=0,c=w.length;s<c;s++)H(a=w[s],e),e+=a.length;K.addGroup(t,J.length/3-t,1)}()}this.addAttribute("position",new Pr(J,3)),this.addAttribute("uv",new Pr(Q,2)),this.computeVertexNormals()}(Cs.prototype=Object.create(vr.prototype)).constructor=Cs,(Ts.prototype=Object.create(jr.prototype)).constructor=Ts;var Is={generateTopUV:function(t,e,i,r,n){var o=e[3*i],a=e[3*i+1],s=e[3*r],c=e[3*r+1],u=e[3*n],h=e[3*n+1];return[new Ze(o,a),new Ze(s,c),new Ze(u,h)]},generateSideWallUV:function(t,e,i,r,n,o){var a=e[3*i],s=e[3*i+1],c=e[3*i+2],u=e[3*r],h=e[3*r+1],l=e[3*r+2],p=e[3*n],d=e[3*n+1],f=e[3*n+2],m=e[3*o],g=e[3*o+1],v=e[3*o+2];return Math.abs(s-h)<.01?[new Ze(a,1-c),new Ze(u,1-l),new Ze(p,1-f),new Ze(m,1-v)]:[new Ze(s,1-c),new Ze(h,1-l),new Ze(d,1-f),new Ze(g,1-v)]}};function Rs(t,e){vr.call(this),this.type="TextGeometry",this.parameters={text:t,parameters:e},this.fromBufferGeometry(new Ls(t,e)),this.mergeVertices()}function Ls(t,e){var i=(e=e||{}).font;if(!i||!i.isFont)return console.error("THREE.TextGeometry: font parameter is not an instance of THREE.Font."),new vr;var r=i.generateShapes(t,e.size,e.curveSegments);e.amount=void 0!==e.height?e.height:50,void 0===e.bevelThickness&&(e.bevelThickness=10),void 0===e.bevelSize&&(e.bevelSize=8),void 0===e.bevelEnabled&&(e.bevelEnabled=!1),Ts.call(this,r,e),this.type="TextBufferGeometry"}function Os(t,e,i,r,n,o,a){vr.call(this),this.type="SphereGeometry",this.parameters={radius:t,widthSegments:e,heightSegments:i,phiStart:r,phiLength:n,thetaStart:o,thetaLength:a},this.fromBufferGeometry(new Ds(t,e,i,r,n,o,a)),this.mergeVertices()}function Ds(t,e,i,r,n,o,a){jr.call(this),this.type="SphereBufferGeometry",this.parameters={radius:t,widthSegments:e,heightSegments:i,phiStart:r,phiLength:n,thetaStart:o,thetaLength:a},t=t||1,e=Math.max(3,Math.floor(e)||8),i=Math.max(2,Math.floor(i)||6),r=void 0!==r?r:0,n=void 0!==n?n:2*Math.PI;var s,c,u=(o=void 0!==o?o:0)+(a=void 0!==a?a:Math.PI),h=0,l=[],p=new Qe,d=new Qe,f=[],m=[],g=[],v=[];for(c=0;c<=i;c++){var y=[],b=c/i;for(s=0;s<=e;s++){var x=s/e;p.x=-t*Math.cos(r+x*n)*Math.sin(o+b*a),p.y=t*Math.cos(o+b*a),p.z=t*Math.sin(r+x*n)*Math.sin(o+b*a),m.push(p.x,p.y,p.z),d.set(p.x,p.y,p.z).normalize(),g.push(d.x,d.y,d.z),v.push(x,1-b),y.push(h++)}l.push(y)}for(c=0;c<i;c++)for(s=0;s<e;s++){var _=l[c][s+1],w=l[c][s],S=l[c+1][s],A=l[c+1][s+1];(0!==c||0<o)&&f.push(_,w,A),(c!==i-1||u<Math.PI)&&f.push(w,S,A)}this.setIndex(f),this.addAttribute("position",new Pr(m,3)),this.addAttribute("normal",new Pr(g,3)),this.addAttribute("uv",new Pr(v,2))}function ks(t,e,i,r,n,o){vr.call(this),this.type="RingGeometry",this.parameters={innerRadius:t,outerRadius:e,thetaSegments:i,phiSegments:r,thetaStart:n,thetaLength:o},this.fromBufferGeometry(new Bs(t,e,i,r,n,o)),this.mergeVertices()}function Bs(t,e,i,r,n,o){jr.call(this),this.type="RingBufferGeometry",this.parameters={innerRadius:t,outerRadius:e,thetaSegments:i,phiSegments:r,thetaStart:n,thetaLength:o},t=t||.5,e=e||1,n=void 0!==n?n:0,o=void 0!==o?o:2*Math.PI,i=void 0!==i?Math.max(3,i):8;var a,s,c,u=[],h=[],l=[],p=[],d=t,f=(e-t)/(r=void 0!==r?Math.max(1,r):1),m=new Qe,g=new Ze;for(s=0;s<=r;s++){for(c=0;c<=i;c++)a=n+c/i*o,m.x=d*Math.cos(a),m.y=d*Math.sin(a),h.push(m.x,m.y,m.z),l.push(0,0,1),g.x=(m.x/e+1)/2,g.y=(m.y/e+1)/2,p.push(g.x,g.y);d+=f}for(s=0;s<r;s++){var v=s*(i+1);for(c=0;c<i;c++){var y=a=c+v,b=a+i+1,x=a+i+2,_=a+1;u.push(y,b,_),u.push(b,x,_)}}this.setIndex(u),this.addAttribute("position",new Pr(h,3)),this.addAttribute("normal",new Pr(l,3)),this.addAttribute("uv",new Pr(p,2))}function Ns(t,e,i,r){vr.call(this),this.type="LatheGeometry",this.parameters={points:t,segments:e,phiStart:i,phiLength:r},this.fromBufferGeometry(new Fs(t,e,i,r)),this.mergeVertices()}function Fs(t,e,i,r){jr.call(this),this.type="LatheBufferGeometry",this.parameters={points:t,segments:e,phiStart:i,phiLength:r},e=Math.floor(e)||12,i=i||0,r=r||2*Math.PI,r=Ye.clamp(r,0,2*Math.PI);var n,o,a,s=[],c=[],u=[],h=1/e,l=new Qe,p=new Ze;for(o=0;o<=e;o++){var d=i+o*h*r,f=Math.sin(d),m=Math.cos(d);for(a=0;a<=t.length-1;a++)l.x=t[a].x*f,l.y=t[a].y,l.z=t[a].x*m,c.push(l.x,l.y,l.z),p.x=o/e,p.y=a/(t.length-1),u.push(p.x,p.y)}for(o=0;o<e;o++)for(a=0;a<t.length-1;a++){var g=n=a+o*t.length,v=n+t.length,y=n+t.length+1,b=n+1;s.push(g,v,b),s.push(v,y,b)}if(this.setIndex(s),this.addAttribute("position",new Pr(c,3)),this.addAttribute("uv",new Pr(u,2)),this.computeVertexNormals(),r===2*Math.PI){var x=this.attributes.normal.array,_=new Qe,w=new Qe,S=new Qe;for(n=e*t.length*3,a=o=0;o<t.length;o++,a+=3)_.x=x[a+0],_.y=x[a+1],_.z=x[a+2],w.x=x[n+a+0],w.y=x[n+a+1],w.z=x[n+a+2],S.addVectors(_,w).normalize(),x[a+0]=x[n+a+0]=S.x,x[a+1]=x[n+a+1]=S.y,x[a+2]=x[n+a+2]=S.z}}function zs(t,e){vr.call(this),this.type="ShapeGeometry","object"==typeof e&&(console.warn("THREE.ShapeGeometry: Options parameter has been removed."),e=e.curveSegments),this.parameters={shapes:t,curveSegments:e},this.fromBufferGeometry(new Us(t,e)),this.mergeVertices()}function Us(t,f){jr.call(this),this.type="ShapeBufferGeometry",this.parameters={shapes:t,curveSegments:f},f=f||12;var m=[],g=[],v=[],y=[],e=0,b=0;if(!1===Array.isArray(t))r(t);else for(var i=0;i<t.length;i++)r(t[i]),this.addGroup(e,b,i),e+=b,b=0;function r(t){var e,i,r,n=g.length/3,o=t.extractPoints(f),a=o.shape,s=o.holes;if(!1===Ms.isClockWise(a))for(a=a.reverse(),e=0,i=s.length;e<i;e++)r=s[e],!0===Ms.isClockWise(r)&&(s[e]=r.reverse());var c=Ms.triangulateShape(a,s);for(e=0,i=s.length;e<i;e++)r=s[e],a=a.concat(r);for(e=0,i=a.length;e<i;e++){var u=a[e];g.push(u.x,u.y,0),v.push(0,0,1),y.push(u.x,u.y)}for(e=0,i=c.length;e<i;e++){var h=c[e],l=h[0]+n,p=h[1]+n,d=h[2]+n;m.push(l,p,d),b+=3}}this.setIndex(m),this.addAttribute("position",new Pr(g,3)),this.addAttribute("normal",new Pr(v,3)),this.addAttribute("uv",new Pr(y,2))}function js(t,e){if(e.shapes=[],Array.isArray(t))for(var i=0,r=t.length;i<r;i++){var n=t[i];e.shapes.push(n.uuid)}else e.shapes.push(t.uuid);return e}function Gs(t,e){jr.call(this),this.type="EdgesGeometry",this.parameters={thresholdAngle:e},e=void 0!==e?e:1;var i,r,n,o,a=[],s=Math.cos(Ye.DEG2RAD*e),c=[0,0],u={},h=["a","b","c"];t.isBufferGeometry?(o=new vr).fromBufferGeometry(t):o=t.clone(),o.mergeVertices(),o.computeFaceNormals();for(var l=o.vertices,p=o.faces,d=0,f=p.length;d<f;d++)for(var m=p[d],g=0;g<3;g++)i=m[h[g]],r=m[h[(g+1)%3]],c[0]=Math.min(i,r),c[1]=Math.max(i,r),void 0===u[n=c[0]+","+c[1]]?u[n]={index1:c[0],index2:c[1],face1:d,face2:void 0}:u[n].face2=d;for(n in u){var v=u[n];if(void 0===v.face2||p[v.face1].normal.dot(p[v.face2].normal)<=s){var y=l[v.index1];a.push(y.x,y.y,y.z),y=l[v.index2],a.push(y.x,y.y,y.z)}}this.addAttribute("position",new Pr(a,3))}function Vs(t,e,i,r,n,o,a,s){vr.call(this),this.type="CylinderGeometry",this.parameters={radiusTop:t,radiusBottom:e,height:i,radialSegments:r,heightSegments:n,openEnded:o,thetaStart:a,thetaLength:s},this.fromBufferGeometry(new Hs(t,e,i,r,n,o,a,s)),this.mergeVertices()}function Hs(v,y,b,x,_,t,w,S){jr.call(this),this.type="CylinderBufferGeometry",this.parameters={radiusTop:v,radiusBottom:y,height:b,radialSegments:x,heightSegments:_,openEnded:t,thetaStart:w,thetaLength:S};var A=this;v=void 0!==v?v:1,y=void 0!==y?y:1,b=b||1,x=Math.floor(x)||8,_=Math.floor(_)||1,t=void 0!==t&&t,w=void 0!==w?w:0,S=void 0!==S?S:2*Math.PI;var M=[],P=[],E=[],C=[],T=0,I=[],R=b/2,L=0;function e(t){var e,i,r,n=new Ze,o=new Qe,a=0,s=!0===t?v:y,c=!0===t?1:-1;for(i=T,e=1;e<=x;e++)P.push(0,R*c,0),E.push(0,c,0),C.push(.5,.5),T++;for(r=T,e=0;e<=x;e++){var u=e/x*S+w,h=Math.cos(u),l=Math.sin(u);o.x=s*l,o.y=R*c,o.z=s*h,P.push(o.x,o.y,o.z),E.push(0,c,0),n.x=.5*h+.5,n.y=.5*l*c+.5,C.push(n.x,n.y),T++}for(e=0;e<x;e++){var p=i+e,d=r+e;!0===t?M.push(d,d+1,p):M.push(d+1,d,p),a+=3}A.addGroup(L,a,!0===t?1:2),L+=a}!function(){var t,e,i=new Qe,r=new Qe,n=0,o=(y-v)/b;for(e=0;e<=_;e++){var a=[],s=e/_,c=s*(y-v)+v;for(t=0;t<=x;t++){var u=t/x,h=u*S+w,l=Math.sin(h),p=Math.cos(h);r.x=c*l,r.y=-s*b+R,r.z=c*p,P.push(r.x,r.y,r.z),i.set(l,o,p).normalize(),E.push(i.x,i.y,i.z),C.push(u,1-s),a.push(T++)}I.push(a)}for(t=0;t<x;t++)for(e=0;e<_;e++){var d=I[e][t],f=I[e+1][t],m=I[e+1][t+1],g=I[e][t+1];M.push(d,f,g),M.push(f,m,g),n+=6}A.addGroup(L,n,0),L+=n}(),!1===t&&(0<v&&e(!0),0<y&&e(!1)),this.setIndex(M),this.addAttribute("position",new Pr(P,3)),this.addAttribute("normal",new Pr(E,3)),this.addAttribute("uv",new Pr(C,2))}function $s(t,e,i,r,n,o,a){Vs.call(this,0,t,e,i,r,n,o,a),this.type="ConeGeometry",this.parameters={radius:t,height:e,radialSegments:i,heightSegments:r,openEnded:n,thetaStart:o,thetaLength:a}}function Ws(t,e,i,r,n,o,a){Hs.call(this,0,t,e,i,r,n,o,a),this.type="ConeBufferGeometry",this.parameters={radius:t,height:e,radialSegments:i,heightSegments:r,openEnded:n,thetaStart:o,thetaLength:a}}function Xs(t,e,i,r){vr.call(this),this.type="CircleGeometry",this.parameters={radius:t,segments:e,thetaStart:i,thetaLength:r},this.fromBufferGeometry(new qs(t,e,i,r)),this.mergeVertices()}function qs(t,e,i,r){jr.call(this),this.type="CircleBufferGeometry",this.parameters={radius:t,segments:e,thetaStart:i,thetaLength:r},t=t||1,e=void 0!==e?Math.max(3,e):8,i=void 0!==i?i:0,r=void 0!==r?r:2*Math.PI;var n,o,a=[],s=[],c=[],u=[],h=new Qe,l=new Ze;for(s.push(0,0,0),c.push(0,0,1),u.push(.5,.5),o=0,n=3;o<=e;o++,n+=3){var p=i+o/e*r;h.x=t*Math.cos(p),h.y=t*Math.sin(p),s.push(h.x,h.y,h.z),c.push(0,0,1),l.x=(s[n]/t+1)/2,l.y=(s[n+1]/t+1)/2,u.push(l.x,l.y)}for(n=1;n<=e;n++)a.push(n,n+1,0);this.setIndex(a),this.addAttribute("position",new Pr(s,3)),this.addAttribute("normal",new Pr(c,3)),this.addAttribute("uv",new Pr(u,2))}(Rs.prototype=Object.create(vr.prototype)).constructor=Rs,(Ls.prototype=Object.create(Ts.prototype)).constructor=Ls,(Os.prototype=Object.create(vr.prototype)).constructor=Os,(Ds.prototype=Object.create(jr.prototype)).constructor=Ds,(ks.prototype=Object.create(vr.prototype)).constructor=ks,(Bs.prototype=Object.create(jr.prototype)).constructor=Bs,(Ns.prototype=Object.create(vr.prototype)).constructor=Ns,(Fs.prototype=Object.create(jr.prototype)).constructor=Fs,((zs.prototype=Object.create(vr.prototype)).constructor=zs).prototype.toJSON=function(){var t=vr.prototype.toJSON.call(this);return js(this.parameters.shapes,t)},((Us.prototype=Object.create(jr.prototype)).constructor=Us).prototype.toJSON=function(){var t=jr.prototype.toJSON.call(this);return js(this.parameters.shapes,t)},(Gs.prototype=Object.create(jr.prototype)).constructor=Gs,(Vs.prototype=Object.create(vr.prototype)).constructor=Vs,(Hs.prototype=Object.create(jr.prototype)).constructor=Hs,($s.prototype=Object.create(Vs.prototype)).constructor=$s,(Ws.prototype=Object.create(Hs.prototype)).constructor=Ws,(Xs.prototype=Object.create(vr.prototype)).constructor=Xs,(qs.prototype=Object.create(jr.prototype)).constructor=qs;var Ys=Object.freeze({WireframeGeometry:za,ParametricGeometry:Ua,ParametricBufferGeometry:ja,TetrahedronGeometry:Ha,TetrahedronBufferGeometry:$a,OctahedronGeometry:Wa,OctahedronBufferGeometry:Xa,IcosahedronGeometry:qa,IcosahedronBufferGeometry:Ya,DodecahedronGeometry:Za,DodecahedronBufferGeometry:Ka,PolyhedronGeometry:Ga,PolyhedronBufferGeometry:Va,TubeGeometry:Ja,TubeBufferGeometry:Qa,TorusKnotGeometry:ts,TorusKnotBufferGeometry:es,TorusGeometry:is,TorusBufferGeometry:rs,TextGeometry:Rs,TextBufferGeometry:Ls,SphereGeometry:Os,SphereBufferGeometry:Ds,RingGeometry:ks,RingBufferGeometry:Bs,PlaneGeometry:Hr,PlaneBufferGeometry:$r,LatheGeometry:Ns,LatheBufferGeometry:Fs,ShapeGeometry:zs,ShapeBufferGeometry:Us,ExtrudeGeometry:Cs,ExtrudeBufferGeometry:Ts,EdgesGeometry:Gs,ConeGeometry:$s,ConeBufferGeometry:Ws,CylinderGeometry:Vs,CylinderBufferGeometry:Hs,CircleGeometry:Xs,CircleBufferGeometry:qs,BoxGeometry:Gr,BoxBufferGeometry:Vr});function Zs(t){yn.call(this),this.type="ShadowMaterial",this.color=new Li(0),this.transparent=!0,this.setValues(t)}function Ks(t){xn.call(this,t),this.type="RawShaderMaterial"}function Js(t){yn.call(this),this.defines={STANDARD:""},this.type="MeshStandardMaterial",this.color=new Li(16777215),this.roughness=.5,this.metalness=.5,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new Li(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalScale=new Ze(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.roughnessMap=null,this.metalnessMap=null,this.alphaMap=null,this.envMap=null,this.envMapIntensity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.skinning=!1,this.morphTargets=!1,this.morphNormals=!1,this.setValues(t)}function Qs(t){Js.call(this),this.defines={PHYSICAL:""},this.type="MeshPhysicalMaterial",this.reflectivity=.5,this.clearCoat=0,this.clearCoatRoughness=0,this.setValues(t)}function tc(t){yn.call(this),this.type="MeshPhongMaterial",this.color=new Li(16777215),this.specular=new Li(1118481),this.shininess=30,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new Li(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalScale=new Ze(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.combine=wt,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.skinning=!1,this.morphTargets=!1,this.morphNormals=!1,this.setValues(t)}function ec(t){tc.call(this),this.defines={TOON:""},this.type="MeshToonMaterial",this.gradientMap=null,this.setValues(t)}function ic(t){yn.call(this),this.type="MeshNormalMaterial",this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalScale=new Ze(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.lights=!1,this.skinning=!1,this.morphTargets=!1,this.morphNormals=!1,this.setValues(t)}function rc(t){yn.call(this),this.type="MeshLambertMaterial",this.color=new Li(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new Li(0),this.emissiveIntensity=1,this.emissiveMap=null,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.combine=wt,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.skinning=!1,this.morphTargets=!1,this.morphNormals=!1,this.setValues(t)}function nc(t){Ta.call(this),this.type="LineDashedMaterial",this.scale=1,this.dashSize=3,this.gapSize=1,this.setValues(t)}((Zs.prototype=Object.create(yn.prototype)).constructor=Zs).prototype.isShadowMaterial=!0,Zs.prototype.copy=function(t){return yn.prototype.copy.call(this,t),this.color.copy(t.color),this},((Ks.prototype=Object.create(xn.prototype)).constructor=Ks).prototype.isRawShaderMaterial=!0,((Js.prototype=Object.create(yn.prototype)).constructor=Js).prototype.isMeshStandardMaterial=!0,Js.prototype.copy=function(t){return yn.prototype.copy.call(this,t),this.defines={STANDARD:""},this.color.copy(t.color),this.roughness=t.roughness,this.metalness=t.metalness,this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.roughnessMap=t.roughnessMap,this.metalnessMap=t.metalnessMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.envMapIntensity=t.envMapIntensity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.skinning=t.skinning,this.morphTargets=t.morphTargets,this.morphNormals=t.morphNormals,this},((Qs.prototype=Object.create(Js.prototype)).constructor=Qs).prototype.isMeshPhysicalMaterial=!0,Qs.prototype.copy=function(t){return Js.prototype.copy.call(this,t),this.defines={PHYSICAL:""},this.reflectivity=t.reflectivity,this.clearCoat=t.clearCoat,this.clearCoatRoughness=t.clearCoatRoughness,this},((tc.prototype=Object.create(yn.prototype)).constructor=tc).prototype.isMeshPhongMaterial=!0,tc.prototype.copy=function(t){return yn.prototype.copy.call(this,t),this.color.copy(t.color),this.specular.copy(t.specular),this.shininess=t.shininess,this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.skinning=t.skinning,this.morphTargets=t.morphTargets,this.morphNormals=t.morphNormals,this},((ec.prototype=Object.create(tc.prototype)).constructor=ec).prototype.isMeshToonMaterial=!0,ec.prototype.copy=function(t){return tc.prototype.copy.call(this,t),this.gradientMap=t.gradientMap,this},((ic.prototype=Object.create(yn.prototype)).constructor=ic).prototype.isMeshNormalMaterial=!0,ic.prototype.copy=function(t){return yn.prototype.copy.call(this,t),this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.skinning=t.skinning,this.morphTargets=t.morphTargets,this.morphNormals=t.morphNormals,this},((rc.prototype=Object.create(yn.prototype)).constructor=rc).prototype.isMeshLambertMaterial=!0,rc.prototype.copy=function(t){return yn.prototype.copy.call(this,t),this.color.copy(t.color),this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.skinning=t.skinning,this.morphTargets=t.morphTargets,this.morphNormals=t.morphNormals,this},((nc.prototype=Object.create(Ta.prototype)).constructor=nc).prototype.isLineDashedMaterial=!0,nc.prototype.copy=function(t){return Ta.prototype.copy.call(this,t),this.scale=t.scale,this.dashSize=t.dashSize,this.gapSize=t.gapSize,this};var oc=Object.freeze({ShadowMaterial:Zs,SpriteMaterial:Sa,RawShaderMaterial:Ks,ShaderMaterial:xn,PointsMaterial:Oa,MeshPhysicalMaterial:Qs,MeshStandardMaterial:Js,MeshPhongMaterial:tc,MeshToonMaterial:ec,MeshNormalMaterial:ic,MeshLambertMaterial:rc,MeshDepthMaterial:ca,MeshDistanceMaterial:ua,MeshBasicMaterial:bn,LineDashedMaterial:nc,LineBasicMaterial:Ta,Material:yn}),ac={enabled:!1,files:{},add:function(t,e){!1!==this.enabled&&(this.files[t]=e)},get:function(t){if(!1!==this.enabled)return this.files[t]},remove:function(t){delete this.files[t]},clear:function(){this.files={}}};function sc(t,e,i){var r=this,n=!1,o=0,a=0,s=void 0;this.onStart=void 0,this.onLoad=t,this.onProgress=e,this.onError=i,this.itemStart=function(t){a++,!1===n&&void 0!==r.onStart&&r.onStart(t,o,a),n=!0},this.itemEnd=function(t){o++,void 0!==r.onProgress&&r.onProgress(t,o,a),o===a&&(n=!1,void 0!==r.onLoad&&r.onLoad())},this.itemError=function(t){void 0!==r.onError&&r.onError(t)},this.resolveURL=function(t){return s?s(t):t},this.setURLModifier=function(t){return s=t,this}}var cc=new sc,uc={};function hc(t){this.manager=void 0!==t?t:cc}function lc(t){this.manager=void 0!==t?t:cc}function pc(t){this.manager=void 0!==t?t:cc}function dc(){this.type="Curve",this.arcLengthDivisions=200}function fc(t,e,i,r,n,o,a,s){dc.call(this),this.type="EllipseCurve",this.aX=t||0,this.aY=e||0,this.xRadius=i||1,this.yRadius=r||1,this.aStartAngle=n||0,this.aEndAngle=o||2*Math.PI,this.aClockwise=a||!1,this.aRotation=s||0}function mc(t,e,i,r,n,o){fc.call(this,t,e,i,i,r,n,o),this.type="ArcCurve"}function gc(){var n=0,o=0,a=0,s=0;function u(t,e,i,r){a=-3*(n=t)+3*e-2*(o=i)-r,s=2*t-2*e+i+r}return{initCatmullRom:function(t,e,i,r,n){u(e,i,n*(i-t),n*(r-e))},initNonuniformCatmullRom:function(t,e,i,r,n,o,a){var s=(e-t)/n-(i-t)/(n+o)+(i-e)/o,c=(i-e)/o-(r-e)/(o+a)+(r-i)/a;u(e,i,s*=o,c*=o)},calc:function(t){var e=t*t;return n+o*t+a*e+s*(e*t)}}}Object.assign(hc.prototype,{load:function(a,t,e,i){void 0===a&&(a=""),void 0!==this.path&&(a=this.path+a),a=this.manager.resolveURL(a);var s=this,r=ac.get(a);if(void 0!==r)return s.manager.itemStart(a),setTimeout(function(){t&&t(r),s.manager.itemEnd(a)},0),r;if(void 0===uc[a]){var n=a.match(/^data:(.*?)(;base64)?,(.*)$/);if(n){var o=n[1],c=!!n[2],u=n[3];u=window.decodeURIComponent(u),c&&(u=window.atob(u));try{var h,l=(this.responseType||"").toLowerCase();switch(l){case"arraybuffer":case"blob":for(var p=new Uint8Array(u.length),d=0;d<u.length;d++)p[d]=u.charCodeAt(d);h="blob"===l?new Blob([p.buffer],{type:o}):p.buffer;break;case"document":var f=new DOMParser;h=f.parseFromString(u,o);break;case"json":h=JSON.parse(u);break;default:h=u}window.setTimeout(function(){t&&t(h),s.manager.itemEnd(a)},0)}catch(t){window.setTimeout(function(){i&&i(t),s.manager.itemEnd(a),s.manager.itemError(a)},0)}}else{uc[a]=[],uc[a].push({onLoad:t,onProgress:e,onError:i});var m=new XMLHttpRequest;for(var g in m.open("GET",a,!0),m.addEventListener("load",function(t){var e=this.response;ac.add(a,e);var i=uc[a];if(delete uc[a],200===this.status){for(var r=0,n=i.length;r<n;r++){(o=i[r]).onLoad&&o.onLoad(e)}s.manager.itemEnd(a)}else if(0===this.status){console.warn("THREE.FileLoader: HTTP Status 0 received.");for(r=0,n=i.length;r<n;r++){(o=i[r]).onLoad&&o.onLoad(e)}s.manager.itemEnd(a)}else{for(r=0,n=i.length;r<n;r++){var o;(o=i[r]).onError&&o.onError(t)}s.manager.itemEnd(a),s.manager.itemError(a)}},!1),m.addEventListener("progress",function(t){for(var e=uc[a],i=0,r=e.length;i<r;i++){var n=e[i];n.onProgress&&n.onProgress(t)}},!1),m.addEventListener("error",function(t){var e=uc[a];delete uc[a];for(var i=0,r=e.length;i<r;i++){var n=e[i];n.onError&&n.onError(t)}s.manager.itemEnd(a),s.manager.itemError(a)},!1),void 0!==this.responseType&&(m.responseType=this.responseType),void 0!==this.withCredentials&&(m.withCredentials=this.withCredentials),m.overrideMimeType&&m.overrideMimeType(void 0!==this.mimeType?this.mimeType:"text/plain"),this.requestHeader)m.setRequestHeader(g,this.requestHeader[g]);m.send(null)}return s.manager.itemStart(a),m}uc[a].push({onLoad:t,onProgress:e,onError:i})},setPath:function(t){return this.path=t,this},setResponseType:function(t){return this.responseType=t,this},setWithCredentials:function(t){return this.withCredentials=t,this},setMimeType:function(t){return this.mimeType=t,this},setRequestHeader:function(t){return this.requestHeader=t,this}}),Object.assign(function(t){this.manager=void 0!==t?t:cc,this._parser=null}.prototype,{load:function(t,o,e,r){var a=this,s=[],c=new Na;c.image=s;var n=new hc(this.manager);function i(i){n.load(t[i],function(t){var e=a._parser(t,!0);s[i]={width:e.width,height:e.height,format:e.format,mipmaps:e.mipmaps},6===(u+=1)&&(1===e.mipmapCount&&(c.minFilter=Ht),c.format=e.format,c.needsUpdate=!0,o&&o(c))},e,r)}if(n.setPath(this.path),n.setResponseType("arraybuffer"),Array.isArray(t))for(var u=0,h=0,l=t.length;h<l;++h)i(h);else n.load(t,function(t){var e=a._parser(t,!0);if(e.isCubemap)for(var i=e.mipmaps.length/e.mipmapCount,r=0;r<i;r++){s[r]={mipmaps:[]};for(var n=0;n<e.mipmapCount;n++)s[r].mipmaps.push(e.mipmaps[r*e.mipmapCount+n]),s[r].format=e.format,s[r].width=e.width,s[r].height=e.height}else c.image.width=e.width,c.image.height=e.height,c.mipmaps=e.mipmaps;1===e.mipmapCount&&(c.minFilter=Ht),c.format=e.format,c.needsUpdate=!0,o&&o(c)},e,r);return c},setPath:function(t){return this.path=t,this}}),Object.assign(function(t){this.manager=void 0!==t?t:cc,this._parser=null}.prototype,{load:function(t,i,e,r){var n=this,o=new Si,a=new hc(this.manager);return a.setResponseType("arraybuffer"),a.load(t,function(t){var e=n._parser(t);e&&(void 0!==e.image?o.image=e.image:void 0!==e.data&&(o.image.width=e.width,o.image.height=e.height,o.image.data=e.data),o.wrapS=void 0!==e.wrapS?e.wrapS:zt,o.wrapT=void 0!==e.wrapT?e.wrapT:zt,o.magFilter=void 0!==e.magFilter?e.magFilter:Ht,o.minFilter=void 0!==e.minFilter?e.minFilter:Wt,o.anisotropy=void 0!==e.anisotropy?e.anisotropy:1,void 0!==e.format&&(o.format=e.format),void 0!==e.type&&(o.type=e.type),void 0!==e.mipmaps&&(o.mipmaps=e.mipmaps),1===e.mipmapCount&&(o.minFilter=Ht),o.needsUpdate=!0,i&&i(o,e))},e,r),o}}),Object.assign(lc.prototype,{crossOrigin:"Anonymous",load:function(e,t,i,r){void 0===e&&(e=""),void 0!==this.path&&(e=this.path+e),e=this.manager.resolveURL(e);var n=this,o=ac.get(e);if(void 0!==o)return n.manager.itemStart(e),setTimeout(function(){t&&t(o),n.manager.itemEnd(e)},0),o;var a=document.createElementNS("http://www.w3.org/1999/xhtml","img");return a.addEventListener("load",function(){ac.add(e,this),t&&t(this),n.manager.itemEnd(e)},!1),a.addEventListener("error",function(t){r&&r(t),n.manager.itemEnd(e),n.manager.itemError(e)},!1),"data:"!==e.substr(0,5)&&void 0!==this.crossOrigin&&(a.crossOrigin=this.crossOrigin),n.manager.itemStart(e),a.src=e,a},setCrossOrigin:function(t){return this.crossOrigin=t,this},setPath:function(t){return this.path=t,this}}),Object.assign(function(t){this.manager=void 0!==t?t:cc}.prototype,{crossOrigin:"Anonymous",load:function(t,i,e,r){var n=new Bn,o=new lc(this.manager);o.setCrossOrigin(this.crossOrigin),o.setPath(this.path);var a=0;function s(e){o.load(t[e],function(t){n.images[e]=t,6===++a&&(n.needsUpdate=!0,i&&i(n))},void 0,r)}for(var c=0;c<t.length;++c)s(c);return n},setCrossOrigin:function(t){return this.crossOrigin=t,this},setPath:function(t){return this.path=t,this}}),Object.assign(pc.prototype,{crossOrigin:"Anonymous",load:function(i,r,t,e){var n=new bi,o=new lc(this.manager);return o.setCrossOrigin(this.crossOrigin),o.setPath(this.path),o.load(i,function(t){n.image=t;var e=0<i.search(/\.(jpg|jpeg)$/)||0===i.search(/^data\:image\/jpeg/);n.format=e?ae:se,n.needsUpdate=!0,void 0!==r&&r(n)},t,e),n},setCrossOrigin:function(t){return this.crossOrigin=t,this},setPath:function(t){return this.path=t,this}}),Object.assign(dc.prototype,{getPoint:function(){return console.warn("THREE.Curve: .getPoint() not implemented."),null},getPointAt:function(t,e){var i=this.getUtoTmapping(t);return this.getPoint(i,e)},getPoints:function(t){void 0===t&&(t=5);for(var e=[],i=0;i<=t;i++)e.push(this.getPoint(i/t));return e},getSpacedPoints:function(t){void 0===t&&(t=5);for(var e=[],i=0;i<=t;i++)e.push(this.getPointAt(i/t));return e},getLength:function(){var t=this.getLengths();return t[t.length-1]},getLengths:function(t){if(void 0===t&&(t=this.arcLengthDivisions),this.cacheArcLengths&&this.cacheArcLengths.length===t+1&&!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;var e,i,r=[],n=this.getPoint(0),o=0;for(r.push(0),i=1;i<=t;i++)o+=(e=this.getPoint(i/t)).distanceTo(n),r.push(o),n=e;return this.cacheArcLengths=r},updateArcLengths:function(){this.needsUpdate=!0,this.getLengths()},getUtoTmapping:function(t,e){var i,r=this.getLengths(),n=0,o=r.length;i=e||t*r[o-1];for(var a,s=0,c=o-1;s<=c;)if((a=r[n=Math.floor(s+(c-s)/2)]-i)<0)s=n+1;else{if(!(0<a)){c=n;break}c=n-1}if(r[n=c]===i)return n/(o-1);var u=r[n];return(n+(i-u)/(r[n+1]-u))/(o-1)},getTangent:function(t){var e=t-1e-4,i=t+1e-4;e<0&&(e=0),1<i&&(i=1);var r=this.getPoint(e);return this.getPoint(i).clone().sub(r).normalize()},getTangentAt:function(t){var e=this.getUtoTmapping(t);return this.getTangent(e)},computeFrenetFrames:function(t,e){var i,r,n,o=new Qe,a=[],s=[],c=[],u=new Qe,h=new Ke;for(i=0;i<=t;i++)r=i/t,a[i]=this.getTangentAt(r),a[i].normalize();s[0]=new Qe,c[0]=new Qe;var l=Number.MAX_VALUE,p=Math.abs(a[0].x),d=Math.abs(a[0].y),f=Math.abs(a[0].z);for(p<=l&&(l=p,o.set(1,0,0)),d<=l&&(l=d,o.set(0,1,0)),f<=l&&o.set(0,0,1),u.crossVectors(a[0],o).normalize(),s[0].crossVectors(a[0],u),c[0].crossVectors(a[0],s[0]),i=1;i<=t;i++)s[i]=s[i-1].clone(),c[i]=c[i-1].clone(),u.crossVectors(a[i-1],a[i]),u.length()>Number.EPSILON&&(u.normalize(),n=Math.acos(Ye.clamp(a[i-1].dot(a[i]),-1,1)),s[i].applyMatrix4(h.makeRotationAxis(u,n))),c[i].crossVectors(a[i],s[i]);if(!0===e)for(n=Math.acos(Ye.clamp(s[0].dot(s[t]),-1,1)),n/=t,0<a[0].dot(u.crossVectors(s[0],s[t]))&&(n=-n),i=1;i<=t;i++)s[i].applyMatrix4(h.makeRotationAxis(a[i],n*i)),c[i].crossVectors(a[i],s[i]);return{tangents:a,normals:s,binormals:c}},clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.arcLengthDivisions=t.arcLengthDivisions,this},toJSON:function(){var t={metadata:{version:4.5,type:"Curve",generator:"Curve.toJSON"}};return t.arcLengthDivisions=this.arcLengthDivisions,t.type=this.type,t},fromJSON:function(t){return this.arcLengthDivisions=t.arcLengthDivisions,this}}),((fc.prototype=Object.create(dc.prototype)).constructor=fc).prototype.isEllipseCurve=!0,fc.prototype.getPoint=function(t,e){for(var i=e||new Ze,r=2*Math.PI,n=this.aEndAngle-this.aStartAngle,o=Math.abs(n)<Number.EPSILON;n<0;)n+=r;for(;r<n;)n-=r;n<Number.EPSILON&&(n=o?0:r),!0!==this.aClockwise||o||(n===r?n=-r:n-=r);var a=this.aStartAngle+t*n,s=this.aX+this.xRadius*Math.cos(a),c=this.aY+this.yRadius*Math.sin(a);if(0!==this.aRotation){var u=Math.cos(this.aRotation),h=Math.sin(this.aRotation),l=s-this.aX,p=c-this.aY;s=l*u-p*h+this.aX,c=l*h+p*u+this.aY}return i.set(s,c)},fc.prototype.copy=function(t){return dc.prototype.copy.call(this,t),this.aX=t.aX,this.aY=t.aY,this.xRadius=t.xRadius,this.yRadius=t.yRadius,this.aStartAngle=t.aStartAngle,this.aEndAngle=t.aEndAngle,this.aClockwise=t.aClockwise,this.aRotation=t.aRotation,this},fc.prototype.toJSON=function(){var t=dc.prototype.toJSON.call(this);return t.aX=this.aX,t.aY=this.aY,t.xRadius=this.xRadius,t.yRadius=this.yRadius,t.aStartAngle=this.aStartAngle,t.aEndAngle=this.aEndAngle,t.aClockwise=this.aClockwise,t.aRotation=this.aRotation,t},fc.prototype.fromJSON=function(t){return dc.prototype.fromJSON.call(this,t),this.aX=t.aX,this.aY=t.aY,this.xRadius=t.xRadius,this.yRadius=t.yRadius,this.aStartAngle=t.aStartAngle,this.aEndAngle=t.aEndAngle,this.aClockwise=t.aClockwise,this.aRotation=t.aRotation,this},((mc.prototype=Object.create(fc.prototype)).constructor=mc).prototype.isArcCurve=!0;var vc=new Qe,yc=new gc,bc=new gc,xc=new gc;function _c(t,e,i,r){dc.call(this),this.type="CatmullRomCurve3",this.points=t||[],this.closed=e||!1,this.curveType=i||"centripetal",this.tension=r||.5}function wc(t,e,i,r,n){var o=.5*(r-e),a=.5*(n-i),s=t*t;return(2*i-2*r+o+a)*(t*s)+(-3*i+3*r-2*o-a)*s+o*t+i}function Sc(t,e,i,r){return(a=1-t)*a*e+2*(1-(o=t))*o*i+(n=t)*n*r;var n,o,a}function Ac(t,e,i,r,n){return(u=1-t)*u*u*e+3*(c=1-(s=t))*c*s*i+3*(1-(a=t))*a*a*r+(o=t)*o*o*n;var o,a,s,c,u}function Mc(t,e,i,r){dc.call(this),this.type="CubicBezierCurve",this.v0=t||new Ze,this.v1=e||new Ze,this.v2=i||new Ze,this.v3=r||new Ze}function Pc(t,e,i,r){dc.call(this),this.type="CubicBezierCurve3",this.v0=t||new Qe,this.v1=e||new Qe,this.v2=i||new Qe,this.v3=r||new Qe}function Ec(t,e){dc.call(this),this.type="LineCurve",this.v1=t||new Ze,this.v2=e||new Ze}function Cc(t,e){dc.call(this),this.type="LineCurve3",this.v1=t||new Qe,this.v2=e||new Qe}function Tc(t,e,i){dc.call(this),this.type="QuadraticBezierCurve",this.v0=t||new Ze,this.v1=e||new Ze,this.v2=i||new Ze}function Ic(t,e,i){dc.call(this),this.type="QuadraticBezierCurve3",this.v0=t||new Qe,this.v1=e||new Qe,this.v2=i||new Qe}function Rc(t){dc.call(this),this.type="SplineCurve",this.points=t||[]}((_c.prototype=Object.create(dc.prototype)).constructor=_c).prototype.isCatmullRomCurve3=!0,_c.prototype.getPoint=function(t,e){var i,r,n,o,a=e||new Qe,s=this.points,c=s.length,u=(c-(this.closed?0:1))*t,h=Math.floor(u),l=u-h;if(this.closed?h+=0<h?0:(Math.floor(Math.abs(h)/c)+1)*c:0===l&&h===c-1&&(h=c-2,l=1),this.closed||0<h?i=s[(h-1)%c]:(vc.subVectors(s[0],s[1]).add(s[0]),i=vc),r=s[h%c],n=s[(h+1)%c],this.closed||h+2<c?o=s[(h+2)%c]:(vc.subVectors(s[c-1],s[c-2]).add(s[c-1]),o=vc),"centripetal"===this.curveType||"chordal"===this.curveType){var p="chordal"===this.curveType?.5:.25,d=Math.pow(i.distanceToSquared(r),p),f=Math.pow(r.distanceToSquared(n),p),m=Math.pow(n.distanceToSquared(o),p);f<1e-4&&(f=1),d<1e-4&&(d=f),m<1e-4&&(m=f),yc.initNonuniformCatmullRom(i.x,r.x,n.x,o.x,d,f,m),bc.initNonuniformCatmullRom(i.y,r.y,n.y,o.y,d,f,m),xc.initNonuniformCatmullRom(i.z,r.z,n.z,o.z,d,f,m)}else"catmullrom"===this.curveType&&(yc.initCatmullRom(i.x,r.x,n.x,o.x,this.tension),bc.initCatmullRom(i.y,r.y,n.y,o.y,this.tension),xc.initCatmullRom(i.z,r.z,n.z,o.z,this.tension));return a.set(yc.calc(l),bc.calc(l),xc.calc(l)),a},_c.prototype.copy=function(t){dc.prototype.copy.call(this,t),this.points=[];for(var e=0,i=t.points.length;e<i;e++){var r=t.points[e];this.points.push(r.clone())}return this.closed=t.closed,this.curveType=t.curveType,this.tension=t.tension,this},_c.prototype.toJSON=function(){var t=dc.prototype.toJSON.call(this);t.points=[];for(var e=0,i=this.points.length;e<i;e++){var r=this.points[e];t.points.push(r.toArray())}return t.closed=this.closed,t.curveType=this.curveType,t.tension=this.tension,t},_c.prototype.fromJSON=function(t){dc.prototype.fromJSON.call(this,t),this.points=[];for(var e=0,i=t.points.length;e<i;e++){var r=t.points[e];this.points.push((new Qe).fromArray(r))}return this.closed=t.closed,this.curveType=t.curveType,this.tension=t.tension,this},((Mc.prototype=Object.create(dc.prototype)).constructor=Mc).prototype.isCubicBezierCurve=!0,Mc.prototype.getPoint=function(t,e){var i=e||new Ze,r=this.v0,n=this.v1,o=this.v2,a=this.v3;return i.set(Ac(t,r.x,n.x,o.x,a.x),Ac(t,r.y,n.y,o.y,a.y)),i},Mc.prototype.copy=function(t){return dc.prototype.copy.call(this,t),this.v0.copy(t.v0),this.v1.copy(t.v1),this.v2.copy(t.v2),this.v3.copy(t.v3),this},Mc.prototype.toJSON=function(){var t=dc.prototype.toJSON.call(this);return t.v0=this.v0.toArray(),t.v1=this.v1.toArray(),t.v2=this.v2.toArray(),t.v3=this.v3.toArray(),t},Mc.prototype.fromJSON=function(t){return dc.prototype.fromJSON.call(this,t),this.v0.fromArray(t.v0),this.v1.fromArray(t.v1),this.v2.fromArray(t.v2),this.v3.fromArray(t.v3),this},((Pc.prototype=Object.create(dc.prototype)).constructor=Pc).prototype.isCubicBezierCurve3=!0,Pc.prototype.getPoint=function(t,e){var i=e||new Qe,r=this.v0,n=this.v1,o=this.v2,a=this.v3;return i.set(Ac(t,r.x,n.x,o.x,a.x),Ac(t,r.y,n.y,o.y,a.y),Ac(t,r.z,n.z,o.z,a.z)),i},Pc.prototype.copy=function(t){return dc.prototype.copy.call(this,t),this.v0.copy(t.v0),this.v1.copy(t.v1),this.v2.copy(t.v2),this.v3.copy(t.v3),this},Pc.prototype.toJSON=function(){var t=dc.prototype.toJSON.call(this);return t.v0=this.v0.toArray(),t.v1=this.v1.toArray(),t.v2=this.v2.toArray(),t.v3=this.v3.toArray(),t},Pc.prototype.fromJSON=function(t){return dc.prototype.fromJSON.call(this,t),this.v0.fromArray(t.v0),this.v1.fromArray(t.v1),this.v2.fromArray(t.v2),this.v3.fromArray(t.v3),this},((Ec.prototype=Object.create(dc.prototype)).constructor=Ec).prototype.isLineCurve=!0,Ec.prototype.getPoint=function(t,e){var i=e||new Ze;return 1===t?i.copy(this.v2):(i.copy(this.v2).sub(this.v1),i.multiplyScalar(t).add(this.v1)),i},Ec.prototype.getPointAt=function(t,e){return this.getPoint(t,e)},Ec.prototype.getTangent=function(){return this.v2.clone().sub(this.v1).normalize()},Ec.prototype.copy=function(t){return dc.prototype.copy.call(this,t),this.v1.copy(t.v1),this.v2.copy(t.v2),this},Ec.prototype.toJSON=function(){var t=dc.prototype.toJSON.call(this);return t.v1=this.v1.toArray(),t.v2=this.v2.toArray(),t},Ec.prototype.fromJSON=function(t){return dc.prototype.fromJSON.call(this,t),this.v1.fromArray(t.v1),this.v2.fromArray(t.v2),this},((Cc.prototype=Object.create(dc.prototype)).constructor=Cc).prototype.isLineCurve3=!0,Cc.prototype.getPoint=function(t,e){var i=e||new Qe;return 1===t?i.copy(this.v2):(i.copy(this.v2).sub(this.v1),i.multiplyScalar(t).add(this.v1)),i},Cc.prototype.getPointAt=function(t,e){return this.getPoint(t,e)},Cc.prototype.copy=function(t){return dc.prototype.copy.call(this,t),this.v1.copy(t.v1),this.v2.copy(t.v2),this},Cc.prototype.toJSON=function(){var t=dc.prototype.toJSON.call(this);return t.v1=this.v1.toArray(),t.v2=this.v2.toArray(),t},Cc.prototype.fromJSON=function(t){return dc.prototype.fromJSON.call(this,t),this.v1.fromArray(t.v1),this.v2.fromArray(t.v2),this},((Tc.prototype=Object.create(dc.prototype)).constructor=Tc).prototype.isQuadraticBezierCurve=!0,Tc.prototype.getPoint=function(t,e){var i=e||new Ze,r=this.v0,n=this.v1,o=this.v2;return i.set(Sc(t,r.x,n.x,o.x),Sc(t,r.y,n.y,o.y)),i},Tc.prototype.copy=function(t){return dc.prototype.copy.call(this,t),this.v0.copy(t.v0),this.v1.copy(t.v1),this.v2.copy(t.v2),this},Tc.prototype.toJSON=function(){var t=dc.prototype.toJSON.call(this);return t.v0=this.v0.toArray(),t.v1=this.v1.toArray(),t.v2=this.v2.toArray(),t},Tc.prototype.fromJSON=function(t){return dc.prototype.fromJSON.call(this,t),this.v0.fromArray(t.v0),this.v1.fromArray(t.v1),this.v2.fromArray(t.v2),this},((Ic.prototype=Object.create(dc.prototype)).constructor=Ic).prototype.isQuadraticBezierCurve3=!0,Ic.prototype.getPoint=function(t,e){var i=e||new Qe,r=this.v0,n=this.v1,o=this.v2;return i.set(Sc(t,r.x,n.x,o.x),Sc(t,r.y,n.y,o.y),Sc(t,r.z,n.z,o.z)),i},Ic.prototype.copy=function(t){return dc.prototype.copy.call(this,t),this.v0.copy(t.v0),this.v1.copy(t.v1),this.v2.copy(t.v2),this},Ic.prototype.toJSON=function(){var t=dc.prototype.toJSON.call(this);return t.v0=this.v0.toArray(),t.v1=this.v1.toArray(),t.v2=this.v2.toArray(),t},Ic.prototype.fromJSON=function(t){return dc.prototype.fromJSON.call(this,t),this.v0.fromArray(t.v0),this.v1.fromArray(t.v1),this.v2.fromArray(t.v2),this},((Rc.prototype=Object.create(dc.prototype)).constructor=Rc).prototype.isSplineCurve=!0,Rc.prototype.getPoint=function(t,e){var i=e||new Ze,r=this.points,n=(r.length-1)*t,o=Math.floor(n),a=n-o,s=r[0===o?o:o-1],c=r[o],u=r[o>r.length-2?r.length-1:o+1],h=r[o>r.length-3?r.length-1:o+2];return i.set(wc(a,s.x,c.x,u.x,h.x),wc(a,s.y,c.y,u.y,h.y)),i},Rc.prototype.copy=function(t){dc.prototype.copy.call(this,t),this.points=[];for(var e=0,i=t.points.length;e<i;e++){var r=t.points[e];this.points.push(r.clone())}return this},Rc.prototype.toJSON=function(){var t=dc.prototype.toJSON.call(this);t.points=[];for(var e=0,i=this.points.length;e<i;e++){var r=this.points[e];t.points.push(r.toArray())}return t},Rc.prototype.fromJSON=function(t){dc.prototype.fromJSON.call(this,t),this.points=[];for(var e=0,i=t.points.length;e<i;e++){var r=t.points[e];this.points.push((new Ze).fromArray(r))}return this};var Lc=Object.freeze({ArcCurve:mc,CatmullRomCurve3:_c,CubicBezierCurve:Mc,CubicBezierCurve3:Pc,EllipseCurve:fc,LineCurve:Ec,LineCurve3:Cc,QuadraticBezierCurve:Tc,QuadraticBezierCurve3:Ic,SplineCurve:Rc});function Oc(){dc.call(this),this.type="CurvePath",this.curves=[],this.autoClose=!1}function Dc(t){Oc.call(this),this.type="Path",this.currentPoint=new Ze,t&&this.setFromPoints(t)}function kc(t){Dc.call(this,t),this.uuid=Ye.generateUUID(),this.type="Shape",this.holes=[]}function Bc(t,e){or.call(this),this.type="Light",this.color=new Li(t),this.intensity=void 0!==e?e:1,this.receiveShadow=void 0}function Nc(t,e,i){Bc.call(this,t,i),this.type="HemisphereLight",this.castShadow=void 0,this.position.copy(or.DefaultUp),this.updateMatrix(),this.groundColor=new Li(e)}function Fc(t){this.camera=t,this.bias=0,this.radius=1,this.mapSize=new Ze(512,512),this.map=null,this.matrix=new Ke}function zc(){Fc.call(this,new ga(50,1,.5,500))}function Uc(t,e,i,r,n,o){Bc.call(this,t,e),this.type="SpotLight",this.position.copy(or.DefaultUp),this.updateMatrix(),this.target=new or,Object.defineProperty(this,"power",{get:function(){return this.intensity*Math.PI},set:function(t){this.intensity=t/Math.PI}}),this.distance=void 0!==i?i:0,this.angle=void 0!==r?r:Math.PI/3,this.penumbra=void 0!==n?n:0,this.decay=void 0!==o?o:1,this.shadow=new zc}function jc(t,e,i,r){Bc.call(this,t,e),this.type="PointLight",Object.defineProperty(this,"power",{get:function(){return 4*this.intensity*Math.PI},set:function(t){this.intensity=t/(4*Math.PI)}}),this.distance=void 0!==i?i:0,this.decay=void 0!==r?r:1,this.shadow=new Fc(new ga(90,1,.5,500))}function Gc(){Fc.call(this,new sr(-5,5,5,-5,.5,500))}function Vc(t,e){Bc.call(this,t,e),this.type="DirectionalLight",this.position.copy(or.DefaultUp),this.updateMatrix(),this.target=new or,this.shadow=new Gc}function Hc(t,e){Bc.call(this,t,e),this.type="AmbientLight",this.castShadow=void 0}function $c(t,e,i,r){Bc.call(this,t,e),this.type="RectAreaLight",this.width=void 0!==i?i:10,this.height=void 0!==r?r:10}function Wc(t,e,i,r){ru.call(this,t,e,i,r)}function Xc(t,e,i){ru.call(this,t,e,i)}function qc(t,e,i,r){this.parameterPositions=t,this._cachedIndex=0,this.resultBuffer=void 0!==r?r:new e.constructor(i),this.sampleValues=e,this.valueSize=i}function Yc(t,e,i,r){qc.call(this,t,e,i,r)}function Zc(t,e,i,r){ru.call(this,t,e,i,r)}function Kc(t,e,i,r){ru.call(this,t,e,i,r)}function Jc(t,e,i,r){ru.call(this,t,e,i,r)}function Qc(t,e,i,r){qc.call(this,t,e,i,r),this._weightPrev=-0,this._offsetPrev=-0,this._weightNext=-0,this._offsetNext=-0}function tu(t,e,i,r){qc.call(this,t,e,i,r)}function eu(t,e,i,r){qc.call(this,t,e,i,r)}Oc.prototype=Object.assign(Object.create(dc.prototype),{constructor:Oc,add:function(t){this.curves.push(t)},closePath:function(){var t=this.curves[0].getPoint(0),e=this.curves[this.curves.length-1].getPoint(1);t.equals(e)||this.curves.push(new Ec(e,t))},getPoint:function(t){for(var e=t*this.getLength(),i=this.getCurveLengths(),r=0;r<i.length;){if(i[r]>=e){var n=i[r]-e,o=this.curves[r],a=o.getLength(),s=0===a?0:1-n/a;return o.getPointAt(s)}r++}return null},getLength:function(){var t=this.getCurveLengths();return t[t.length-1]},updateArcLengths:function(){this.needsUpdate=!0,this.cacheLengths=null,this.getCurveLengths()},getCurveLengths:function(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;for(var t=[],e=0,i=0,r=this.curves.length;i<r;i++)e+=this.curves[i].getLength(),t.push(e);return this.cacheLengths=t},getSpacedPoints:function(t){void 0===t&&(t=40);for(var e=[],i=0;i<=t;i++)e.push(this.getPoint(i/t));return this.autoClose&&e.push(e[0]),e},getPoints:function(t){t=t||12;for(var e,i=[],r=0,n=this.curves;r<n.length;r++)for(var o=n[r],a=o&&o.isEllipseCurve?2*t:o&&o.isLineCurve?1:o&&o.isSplineCurve?t*o.points.length:t,s=o.getPoints(a),c=0;c<s.length;c++){var u=s[c];e&&e.equals(u)||(i.push(u),e=u)}return this.autoClose&&1<i.length&&!i[i.length-1].equals(i[0])&&i.push(i[0]),i},copy:function(t){dc.prototype.copy.call(this,t),this.curves=[];for(var e=0,i=t.curves.length;e<i;e++){var r=t.curves[e];this.curves.push(r.clone())}return this.autoClose=t.autoClose,this},toJSON:function(){var t=dc.prototype.toJSON.call(this);t.autoClose=this.autoClose,t.curves=[];for(var e=0,i=this.curves.length;e<i;e++){var r=this.curves[e];t.curves.push(r.toJSON())}return t},fromJSON:function(t){dc.prototype.fromJSON.call(this,t),this.autoClose=t.autoClose,this.curves=[];for(var e=0,i=t.curves.length;e<i;e++){var r=t.curves[e];this.curves.push((new Lc[r.type]).fromJSON(r))}return this}}),Dc.prototype=Object.assign(Object.create(Oc.prototype),{constructor:Dc,setFromPoints:function(t){this.moveTo(t[0].x,t[0].y);for(var e=1,i=t.length;e<i;e++)this.lineTo(t[e].x,t[e].y)},moveTo:function(t,e){this.currentPoint.set(t,e)},lineTo:function(t,e){var i=new Ec(this.currentPoint.clone(),new Ze(t,e));this.curves.push(i),this.currentPoint.set(t,e)},quadraticCurveTo:function(t,e,i,r){var n=new Tc(this.currentPoint.clone(),new Ze(t,e),new Ze(i,r));this.curves.push(n),this.currentPoint.set(i,r)},bezierCurveTo:function(t,e,i,r,n,o){var a=new Mc(this.currentPoint.clone(),new Ze(t,e),new Ze(i,r),new Ze(n,o));this.curves.push(a),this.currentPoint.set(n,o)},splineThru:function(t){var e=new Rc([this.currentPoint.clone()].concat(t));this.curves.push(e),this.currentPoint.copy(t[t.length-1])},arc:function(t,e,i,r,n,o){var a=this.currentPoint.x,s=this.currentPoint.y;this.absarc(t+a,e+s,i,r,n,o)},absarc:function(t,e,i,r,n,o){this.absellipse(t,e,i,i,r,n,o)},ellipse:function(t,e,i,r,n,o,a,s){var c=this.currentPoint.x,u=this.currentPoint.y;this.absellipse(t+c,e+u,i,r,n,o,a,s)},absellipse:function(t,e,i,r,n,o,a,s){var c=new fc(t,e,i,r,n,o,a,s);if(0<this.curves.length){var u=c.getPoint(0);u.equals(this.currentPoint)||this.lineTo(u.x,u.y)}this.curves.push(c);var h=c.getPoint(1);this.currentPoint.copy(h)},copy:function(t){return Oc.prototype.copy.call(this,t),this.currentPoint.copy(t.currentPoint),this},toJSON:function(){var t=Oc.prototype.toJSON.call(this);return t.currentPoint=this.currentPoint.toArray(),t},fromJSON:function(t){return Oc.prototype.fromJSON.call(this,t),this.currentPoint.fromArray(t.currentPoint),this}}),kc.prototype=Object.assign(Object.create(Dc.prototype),{constructor:kc,getPointsHoles:function(t){for(var e=[],i=0,r=this.holes.length;i<r;i++)e[i]=this.holes[i].getPoints(t);return e},extractPoints:function(t){return{shape:this.getPoints(t),holes:this.getPointsHoles(t)}},copy:function(t){Dc.prototype.copy.call(this,t),this.holes=[];for(var e=0,i=t.holes.length;e<i;e++){var r=t.holes[e];this.holes.push(r.clone())}return this},toJSON:function(){var t=Dc.prototype.toJSON.call(this);t.uuid=this.uuid,t.holes=[];for(var e=0,i=this.holes.length;e<i;e++){var r=this.holes[e];t.holes.push(r.toJSON())}return t},fromJSON:function(t){Dc.prototype.fromJSON.call(this,t),this.uuid=t.uuid,this.holes=[];for(var e=0,i=t.holes.length;e<i;e++){var r=t.holes[e];this.holes.push((new Dc).fromJSON(r))}return this}}),Bc.prototype=Object.assign(Object.create(or.prototype),{constructor:Bc,isLight:!0,copy:function(t){return or.prototype.copy.call(this,t),this.color.copy(t.color),this.intensity=t.intensity,this},toJSON:function(t){var e=or.prototype.toJSON.call(this,t);return e.object.color=this.color.getHex(),e.object.intensity=this.intensity,void 0!==this.groundColor&&(e.object.groundColor=this.groundColor.getHex()),void 0!==this.distance&&(e.object.distance=this.distance),void 0!==this.angle&&(e.object.angle=this.angle),void 0!==this.decay&&(e.object.decay=this.decay),void 0!==this.penumbra&&(e.object.penumbra=this.penumbra),void 0!==this.shadow&&(e.object.shadow=this.shadow.toJSON()),e}}),Nc.prototype=Object.assign(Object.create(Bc.prototype),{constructor:Nc,isHemisphereLight:!0,copy:function(t){return Bc.prototype.copy.call(this,t),this.groundColor.copy(t.groundColor),this}}),Object.assign(Fc.prototype,{copy:function(t){return this.camera=t.camera.clone(),this.bias=t.bias,this.radius=t.radius,this.mapSize.copy(t.mapSize),this},clone:function(){return(new this.constructor).copy(this)},toJSON:function(){var t={};return 0!==this.bias&&(t.bias=this.bias),1!==this.radius&&(t.radius=this.radius),512===this.mapSize.x&&512===this.mapSize.y||(t.mapSize=this.mapSize.toArray()),t.camera=this.camera.toJSON(!1).object,delete t.camera.matrix,t}}),zc.prototype=Object.assign(Object.create(Fc.prototype),{constructor:zc,isSpotLightShadow:!0,update:function(t){var e=this.camera,i=2*Ye.RAD2DEG*t.angle,r=this.mapSize.width/this.mapSize.height,n=t.distance||e.far;i===e.fov&&r===e.aspect&&n===e.far||(e.fov=i,e.aspect=r,e.far=n,e.updateProjectionMatrix())}}),Uc.prototype=Object.assign(Object.create(Bc.prototype),{constructor:Uc,isSpotLight:!0,copy:function(t){return Bc.prototype.copy.call(this,t),this.distance=t.distance,this.angle=t.angle,this.penumbra=t.penumbra,this.decay=t.decay,this.target=t.target.clone(),this.shadow=t.shadow.clone(),this}}),jc.prototype=Object.assign(Object.create(Bc.prototype),{constructor:jc,isPointLight:!0,copy:function(t){return Bc.prototype.copy.call(this,t),this.distance=t.distance,this.decay=t.decay,this.shadow=t.shadow.clone(),this}}),Gc.prototype=Object.assign(Object.create(Fc.prototype),{constructor:Gc}),Vc.prototype=Object.assign(Object.create(Bc.prototype),{constructor:Vc,isDirectionalLight:!0,copy:function(t){return Bc.prototype.copy.call(this,t),this.target=t.target.clone(),this.shadow=t.shadow.clone(),this}}),Hc.prototype=Object.assign(Object.create(Bc.prototype),{constructor:Hc,isAmbientLight:!0}),$c.prototype=Object.assign(Object.create(Bc.prototype),{constructor:$c,isRectAreaLight:!0,copy:function(t){return Bc.prototype.copy.call(this,t),this.width=t.width,this.height=t.height,this},toJSON:function(t){var e=Bc.prototype.toJSON.call(this,t);return e.object.width=this.width,e.object.height=this.height,e}}),Wc.prototype=Object.assign(Object.create(ru.prototype),{constructor:Wc,ValueTypeName:"string",ValueBufferType:Array,DefaultInterpolation:2300,InterpolantFactoryMethodLinear:void 0,InterpolantFactoryMethodSmooth:void 0}),Xc.prototype=Object.assign(Object.create(ru.prototype),{constructor:Xc,ValueTypeName:"bool",ValueBufferType:Array,DefaultInterpolation:2300,InterpolantFactoryMethodLinear:void 0,InterpolantFactoryMethodSmooth:void 0}),Object.assign(qc.prototype,{evaluate:function(t){var e=this.parameterPositions,i=this._cachedIndex,r=e[i],n=e[i-1];t:{e:{var o;i:{r:if(!(t<r)){for(var a=i+2;;){if(void 0===r){if(t<n)break r;return i=e.length,this._cachedIndex=i,this.afterEnd_(i-1,t,n)}if(i===a)break;if(n=r,t<(r=e[++i]))break e}o=e.length;break i}if(n<=t)break t;var s=e[1];t<s&&(i=2,n=s);for(a=i-2;;){if(void 0===n)return this._cachedIndex=0,this.beforeStart_(0,t,r);if(i===a)break;if(r=n,(n=e[--i-1])<=t)break e}o=i,i=0}for(;i<o;){var c=i+o>>>1;t<e[c]?o=c:i=c+1}if(r=e[i],void 0===(n=e[i-1]))return this._cachedIndex=0,this.beforeStart_(0,t,r);if(void 0===r)return i=e.length,this._cachedIndex=i,this.afterEnd_(i-1,n,t)}this._cachedIndex=i,this.intervalChanged_(i,n,r)}return this.interpolate_(i,n,t,r)},settings:null,DefaultSettings_:{},getSettings_:function(){return this.settings||this.DefaultSettings_},copySampleValue_:function(t){for(var e=this.resultBuffer,i=this.sampleValues,r=this.valueSize,n=t*r,o=0;o!==r;++o)e[o]=i[n+o];return e},interpolate_:function(){throw new Error("call to abstract method")},intervalChanged_:function(){}}),Object.assign(qc.prototype,{beforeStart_:qc.prototype.copySampleValue_,afterEnd_:qc.prototype.copySampleValue_}),Yc.prototype=Object.assign(Object.create(qc.prototype),{constructor:Yc,interpolate_:function(t,e,i,r){for(var n=this.resultBuffer,o=this.sampleValues,a=this.valueSize,s=t*a,c=(i-e)/(r-e),u=s+a;s!==u;s+=4)Je.slerpFlat(n,0,o,s-a,o,s,c);return n}}),Zc.prototype=Object.assign(Object.create(ru.prototype),{constructor:Zc,ValueTypeName:"quaternion",DefaultInterpolation:2301,InterpolantFactoryMethodLinear:function(t){return new Yc(this.times,this.values,this.getValueSize(),t)},InterpolantFactoryMethodSmooth:void 0}),Kc.prototype=Object.assign(Object.create(ru.prototype),{constructor:Kc,ValueTypeName:"color"}),Jc.prototype=Object.assign(Object.create(ru.prototype),{constructor:Jc,ValueTypeName:"number"}),Qc.prototype=Object.assign(Object.create(qc.prototype),{constructor:Qc,DefaultSettings_:{endingStart:Ne,endingEnd:Ne},intervalChanged_:function(t,e,i){var r=this.parameterPositions,n=t-2,o=t+1,a=r[n],s=r[o];if(void 0===a)switch(this.getSettings_().endingStart){case Fe:n=t,a=2*e-i;break;case 2402:a=e+r[n=r.length-2]-r[n+1];break;default:n=t,a=i}if(void 0===s)switch(this.getSettings_().endingEnd){case Fe:o=t,s=2*i-e;break;case 2402:s=i+r[o=1]-r[0];break;default:o=t-1,s=e}var c=.5*(i-e),u=this.valueSize;this._weightPrev=c/(e-a),this._weightNext=c/(s-i),this._offsetPrev=n*u,this._offsetNext=o*u},interpolate_:function(t,e,i,r){for(var n=this.resultBuffer,o=this.sampleValues,a=this.valueSize,s=t*a,c=s-a,u=this._offsetPrev,h=this._offsetNext,l=this._weightPrev,p=this._weightNext,d=(i-e)/(r-e),f=d*d,m=f*d,g=-l*m+2*l*f-l*d,v=(1+l)*m+(-1.5-2*l)*f+(-.5+l)*d+1,y=(-1-p)*m+(1.5+p)*f+.5*d,b=p*m-p*f,x=0;x!==a;++x)n[x]=g*o[u+x]+v*o[c+x]+y*o[s+x]+b*o[h+x];return n}}),tu.prototype=Object.assign(Object.create(qc.prototype),{constructor:tu,interpolate_:function(t,e,i,r){for(var n=this.resultBuffer,o=this.sampleValues,a=this.valueSize,s=t*a,c=s-a,u=(i-e)/(r-e),h=1-u,l=0;l!==a;++l)n[l]=o[c+l]*h+o[s+l]*u;return n}}),eu.prototype=Object.assign(Object.create(qc.prototype),{constructor:eu,interpolate_:function(t){return this.copySampleValue_(t-1)}});var iu={arraySlice:function(t,e,i){return iu.isTypedArray(t)?new t.constructor(t.subarray(e,void 0!==i?i:t.length)):t.slice(e,i)},convertArray:function(t,e,i){return!t||!i&&t.constructor===e?t:"number"==typeof e.BYTES_PER_ELEMENT?new e(t):Array.prototype.slice.call(t)},isTypedArray:function(t){return ArrayBuffer.isView(t)&&!(t instanceof DataView)},getKeyframeOrder:function(i){for(var t=i.length,e=new Array(t),r=0;r!==t;++r)e[r]=r;return e.sort(function(t,e){return i[t]-i[e]}),e},sortedArray:function(t,e,i){for(var r=t.length,n=new t.constructor(r),o=0,a=0;a!==r;++o)for(var s=i[o]*e,c=0;c!==e;++c)n[a++]=t[s+c];return n},flattenJSON:function(t,e,i,r){for(var n=1,o=t[0];void 0!==o&&void 0===o[r];)o=t[n++];if(void 0!==o){var a=o[r];if(void 0!==a)if(Array.isArray(a))for(;void 0!==(a=o[r])&&(e.push(o.time),i.push.apply(i,a)),void 0!==(o=t[n++]););else if(void 0!==a.toArray)for(;void 0!==(a=o[r])&&(e.push(o.time),a.toArray(i,i.length)),void 0!==(o=t[n++]););else for(;void 0!==(a=o[r])&&(e.push(o.time),i.push(a)),void 0!==(o=t[n++]););}}};function ru(t,e,i,r){if(void 0===t)throw new Error("THREE.KeyframeTrack: track name is undefined");if(void 0===e||0===e.length)throw new Error("THREE.KeyframeTrack: no keyframes in track named "+t);this.name=t,this.times=iu.convertArray(e,this.TimeBufferType),this.values=iu.convertArray(i,this.ValueBufferType),this.setInterpolation(r||this.DefaultInterpolation),this.validate(),this.optimize()}function nu(t,e,i,r){ru.call(this,t,e,i,r)}function ou(t,e,i){this.name=t,this.tracks=i,this.duration=void 0!==e?e:-1,this.uuid=Ye.generateUUID(),this.duration<0&&this.resetDuration(),this.optimize()}function au(t){this.manager=void 0!==t?t:cc,this.textures={}}function su(t){this.manager=void 0!==t?t:cc}Object.assign(ru,{parse:function(t){if(void 0===t.type)throw new Error("THREE.KeyframeTrack: track type undefined, can not parse");var e=ru._getTrackTypeForValueTypeName(t.type);if(void 0===t.times){var i=[],r=[];iu.flattenJSON(t.keys,i,r,"value"),t.times=i,t.values=r}return void 0!==e.parse?e.parse(t):new e(t.name,t.times,t.values,t.interpolation)},toJSON:function(t){var e,i=t.constructor;if(void 0!==i.toJSON)e=i.toJSON(t);else{e={name:t.name,times:iu.convertArray(t.times,Array),values:iu.convertArray(t.values,Array)};var r=t.getInterpolation();r!==t.DefaultInterpolation&&(e.interpolation=r)}return e.type=t.ValueTypeName,e},_getTrackTypeForValueTypeName:function(t){switch(t.toLowerCase()){case"scalar":case"double":case"float":case"number":case"integer":return Jc;case"vector":case"vector2":case"vector3":case"vector4":return nu;case"color":return Kc;case"quaternion":return Zc;case"bool":case"boolean":return Xc;case"string":return Wc}throw new Error("THREE.KeyframeTrack: Unsupported typeName: "+t)}}),Object.assign(ru.prototype,{constructor:ru,TimeBufferType:Float32Array,ValueBufferType:Float32Array,DefaultInterpolation:2301,InterpolantFactoryMethodDiscrete:function(t){return new eu(this.times,this.values,this.getValueSize(),t)},InterpolantFactoryMethodLinear:function(t){return new tu(this.times,this.values,this.getValueSize(),t)},InterpolantFactoryMethodSmooth:function(t){return new Qc(this.times,this.values,this.getValueSize(),t)},setInterpolation:function(t){var e;switch(t){case 2300:e=this.InterpolantFactoryMethodDiscrete;break;case 2301:e=this.InterpolantFactoryMethodLinear;break;case 2302:e=this.InterpolantFactoryMethodSmooth}if(void 0!==e)this.createInterpolant=e;else{var i="unsupported interpolation for "+this.ValueTypeName+" keyframe track named "+this.name;if(void 0===this.createInterpolant){if(t===this.DefaultInterpolation)throw new Error(i);this.setInterpolation(this.DefaultInterpolation)}console.warn("THREE.KeyframeTrack:",i)}},getInterpolation:function(){switch(this.createInterpolant){case this.InterpolantFactoryMethodDiscrete:return 2300;case this.InterpolantFactoryMethodLinear:return 2301;case this.InterpolantFactoryMethodSmooth:return 2302}},getValueSize:function(){return this.values.length/this.times.length},shift:function(t){if(0!==t)for(var e=this.times,i=0,r=e.length;i!==r;++i)e[i]+=t;return this},scale:function(t){if(1!==t)for(var e=this.times,i=0,r=e.length;i!==r;++i)e[i]*=t;return this},trim:function(t,e){for(var i=this.times,r=i.length,n=0,o=r-1;n!==r&&i[n]<t;)++n;for(;-1!==o&&i[o]>e;)--o;if(++o,0!==n||o!==r){o<=n&&(n=(o=Math.max(o,1))-1);var a=this.getValueSize();this.times=iu.arraySlice(i,n,o),this.values=iu.arraySlice(this.values,n*a,o*a)}return this},validate:function(){var t=!0,e=this.getValueSize();e-Math.floor(e)!=0&&(console.error("THREE.KeyframeTrack: Invalid value size in track.",this),t=!1);var i=this.times,r=this.values,n=i.length;0===n&&(console.error("THREE.KeyframeTrack: Track is empty.",this),t=!1);for(var o=null,a=0;a!==n;a++){var s=i[a];if("number"==typeof s&&isNaN(s)){console.error("THREE.KeyframeTrack: Time is not a valid number.",this,a,s),t=!1;break}if(null!==o&&s<o){console.error("THREE.KeyframeTrack: Out of order keys.",this,a,s,o),t=!1;break}o=s}if(void 0!==r&&iu.isTypedArray(r)){a=0;for(var c=r.length;a!==c;++a){var u=r[a];if(isNaN(u)){console.error("THREE.KeyframeTrack: Value is not a valid number.",this,a,u),t=!1;break}}}return t},optimize:function(){for(var t=this.times,e=this.values,i=this.getValueSize(),r=2302===this.getInterpolation(),n=1,o=t.length-1,a=1;a<o;++a){var s=!1,c=t[a];if(c!==t[a+1]&&(1!==a||c!==c[0]))if(r)s=!0;else for(var u=a*i,h=u-i,l=u+i,p=0;p!==i;++p){var d=e[u+p];if(d!==e[h+p]||d!==e[l+p]){s=!0;break}}if(s){if(a!==n){t[n]=t[a];var f=a*i,m=n*i;for(p=0;p!==i;++p)e[m+p]=e[f+p]}++n}}if(0<o){t[n]=t[o];for(f=o*i,m=n*i,p=0;p!==i;++p)e[m+p]=e[f+p];++n}return n!==t.length&&(this.times=iu.arraySlice(t,0,n),this.values=iu.arraySlice(e,0,n*i)),this}}),nu.prototype=Object.assign(Object.create(ru.prototype),{constructor:nu,ValueTypeName:"vector"}),Object.assign(ou,{parse:function(t){for(var e=[],i=t.tracks,r=1/(t.fps||1),n=0,o=i.length;n!==o;++n)e.push(ru.parse(i[n]).scale(r));return new ou(t.name,t.duration,e)},toJSON:function(t){for(var e=[],i=t.tracks,r={name:t.name,duration:t.duration,tracks:e},n=0,o=i.length;n!==o;++n)e.push(ru.toJSON(i[n]));return r},CreateFromMorphTargetSequence:function(t,e,i,r){for(var n=e.length,o=[],a=0;a<n;a++){var s=[],c=[];s.push((a+n-1)%n,a,(a+1)%n),c.push(0,1,0);var u=iu.getKeyframeOrder(s);s=iu.sortedArray(s,1,u),c=iu.sortedArray(c,1,u),r||0!==s[0]||(s.push(n),c.push(c[0])),o.push(new Jc(".morphTargetInfluences["+e[a].name+"]",s,c).scale(1/i))}return new ou(t,-1,o)},findByName:function(t,e){var i=t;if(!Array.isArray(t)){var r=t;i=r.geometry&&r.geometry.animations||r.animations}for(var n=0;n<i.length;n++)if(i[n].name===e)return i[n];return null},CreateClipsFromMorphTargetSequences:function(t,e,i){for(var r={},n=/^([\w-]*?)([\d]+)$/,o=0,a=t.length;o<a;o++){var s=t[o],c=s.name.match(n);if(c&&1<c.length){var u=r[l=c[1]];u||(r[l]=u=[]),u.push(s)}}var h=[];for(var l in r)h.push(ou.CreateFromMorphTargetSequence(l,r[l],e,i));return h},parseAnimation:function(t,e){if(!t)return console.error("THREE.AnimationClip: No animation in JSONLoader data."),null;for(var i=function(t,e,i,r,n){if(0!==i.length){var o=[],a=[];iu.flattenJSON(i,o,a,r),0!==o.length&&n.push(new t(e,o,a))}},r=[],n=t.name||"default",o=t.length||-1,a=t.fps||30,s=t.hierarchy||[],c=0;c<s.length;c++){var u=s[c].keys;if(u&&0!==u.length)if(u[0].morphTargets){for(var h={},l=0;l<u.length;l++)if(u[l].morphTargets)for(var p=0;p<u[l].morphTargets.length;p++)h[u[l].morphTargets[p]]=-1;for(var d in h){var f=[],m=[];for(p=0;p!==u[l].morphTargets.length;++p){var g=u[l];f.push(g.time),m.push(g.morphTarget===d?1:0)}r.push(new Jc(".morphTargetInfluence["+d+"]",f,m))}o=h.length*(a||1)}else{var v=".bones["+e[c].name+"]";i(nu,v+".position",u,"pos",r),i(Zc,v+".quaternion",u,"rot",r),i(nu,v+".scale",u,"scl",r)}}return 0===r.length?null:new ou(n,o,r)}}),Object.assign(ou.prototype,{resetDuration:function(){for(var t=0,e=0,i=this.tracks.length;e!==i;++e){var r=this.tracks[e];t=Math.max(t,r.times[r.times.length-1])}this.duration=t},trim:function(){for(var t=0;t<this.tracks.length;t++)this.tracks[t].trim(0,this.duration);return this},optimize:function(){for(var t=0;t<this.tracks.length;t++)this.tracks[t].optimize();return this}}),Object.assign(au.prototype,{load:function(t,e,i,r){var n=this;new hc(n.manager).load(t,function(t){e(n.parse(JSON.parse(t)))},i,r)},setTextures:function(t){this.textures=t},parse:function(t){var e=this.textures;function i(t){return void 0===e[t]&&console.warn("THREE.MaterialLoader: Undefined texture",t),e[t]}var r=new oc[t.type];if(void 0!==t.uuid&&(r.uuid=t.uuid),void 0!==t.name&&(r.name=t.name),void 0!==t.color&&r.color.setHex(t.color),void 0!==t.roughness&&(r.roughness=t.roughness),void 0!==t.metalness&&(r.metalness=t.metalness),void 0!==t.emissive&&r.emissive.setHex(t.emissive),void 0!==t.specular&&r.specular.setHex(t.specular),void 0!==t.shininess&&(r.shininess=t.shininess),void 0!==t.clearCoat&&(r.clearCoat=t.clearCoat),void 0!==t.clearCoatRoughness&&(r.clearCoatRoughness=t.clearCoatRoughness),void 0!==t.uniforms&&(r.uniforms=t.uniforms),void 0!==t.vertexShader&&(r.vertexShader=t.vertexShader),void 0!==t.fragmentShader&&(r.fragmentShader=t.fragmentShader),void 0!==t.vertexColors&&(r.vertexColors=t.vertexColors),void 0!==t.fog&&(r.fog=t.fog),void 0!==t.flatShading&&(r.flatShading=t.flatShading),void 0!==t.blending&&(r.blending=t.blending),void 0!==t.side&&(r.side=t.side),void 0!==t.opacity&&(r.opacity=t.opacity),void 0!==t.transparent&&(r.transparent=t.transparent),void 0!==t.alphaTest&&(r.alphaTest=t.alphaTest),void 0!==t.depthTest&&(r.depthTest=t.depthTest),void 0!==t.depthWrite&&(r.depthWrite=t.depthWrite),void 0!==t.colorWrite&&(r.colorWrite=t.colorWrite),void 0!==t.wireframe&&(r.wireframe=t.wireframe),void 0!==t.wireframeLinewidth&&(r.wireframeLinewidth=t.wireframeLinewidth),void 0!==t.wireframeLinecap&&(r.wireframeLinecap=t.wireframeLinecap),void 0!==t.wireframeLinejoin&&(r.wireframeLinejoin=t.wireframeLinejoin),void 0!==t.rotation&&(r.rotation=t.rotation),1!==t.linewidth&&(r.linewidth=t.linewidth),void 0!==t.dashSize&&(r.dashSize=t.dashSize),void 0!==t.gapSize&&(r.gapSize=t.gapSize),void 0!==t.scale&&(r.scale=t.scale),void 0!==t.polygonOffset&&(r.polygonOffset=t.polygonOffset),void 0!==t.polygonOffsetFactor&&(r.polygonOffsetFactor=t.polygonOffsetFactor),void 0!==t.polygonOffsetUnits&&(r.polygonOffsetUnits=t.polygonOffsetUnits),void 0!==t.skinning&&(r.skinning=t.skinning),void 0!==t.morphTargets&&(r.morphTargets=t.morphTargets),void 0!==t.dithering&&(r.dithering=t.dithering),void 0!==t.visible&&(r.visible=t.visible),void 0!==t.userData&&(r.userData=t.userData),void 0!==t.shading&&(r.flatShading=1===t.shading),void 0!==t.size&&(r.size=t.size),void 0!==t.sizeAttenuation&&(r.sizeAttenuation=t.sizeAttenuation),void 0!==t.map&&(r.map=i(t.map)),void 0!==t.alphaMap&&(r.alphaMap=i(t.alphaMap),r.transparent=!0),void 0!==t.bumpMap&&(r.bumpMap=i(t.bumpMap)),void 0!==t.bumpScale&&(r.bumpScale=t.bumpScale),void 0!==t.normalMap&&(r.normalMap=i(t.normalMap)),void 0!==t.normalScale){var n=t.normalScale;!1===Array.isArray(n)&&(n=[n,n]),r.normalScale=(new Ze).fromArray(n)}return void 0!==t.displacementMap&&(r.displacementMap=i(t.displacementMap)),void 0!==t.displacementScale&&(r.displacementScale=t.displacementScale),void 0!==t.displacementBias&&(r.displacementBias=t.displacementBias),void 0!==t.roughnessMap&&(r.roughnessMap=i(t.roughnessMap)),void 0!==t.metalnessMap&&(r.metalnessMap=i(t.metalnessMap)),void 0!==t.emissiveMap&&(r.emissiveMap=i(t.emissiveMap)),void 0!==t.emissiveIntensity&&(r.emissiveIntensity=t.emissiveIntensity),void 0!==t.specularMap&&(r.specularMap=i(t.specularMap)),void 0!==t.envMap&&(r.envMap=i(t.envMap)),void 0!==t.reflectivity&&(r.reflectivity=t.reflectivity),void 0!==t.lightMap&&(r.lightMap=i(t.lightMap)),void 0!==t.lightMapIntensity&&(r.lightMapIntensity=t.lightMapIntensity),void 0!==t.aoMap&&(r.aoMap=i(t.aoMap)),void 0!==t.aoMapIntensity&&(r.aoMapIntensity=t.aoMapIntensity),void 0!==t.gradientMap&&(r.gradientMap=i(t.gradientMap)),r}}),Object.assign(su.prototype,{load:function(t,e,i,r){var n=this;new hc(n.manager).load(t,function(t){e(n.parse(JSON.parse(t)))},i,r)},parse:function(t){var e=new jr,i=t.data.index;if(void 0!==i){var r=new pu[i.type](i.array);e.setIndex(new yr(r,1))}var n=t.data.attributes;for(var o in n){var a=n[o];r=new pu[a.type](a.array);e.addAttribute(o,new yr(r,a.itemSize,a.normalized))}var s=t.data.groups||t.data.drawcalls||t.data.offsets;if(void 0!==s)for(var c=0,u=s.length;c!==u;++c){var h=s[c];e.addGroup(h.start,h.count,h.materialIndex)}var l=t.data.boundingSphere;if(void 0!==l){var p=new Qe;void 0!==l.center&&p.fromArray(l.center),e.boundingSphere=new Mi(p,l.radius)}return e}});var cu,uu,hu,lu,pu={Int8Array:Int8Array,Uint8Array:Uint8Array,Uint8ClampedArray:"undefined"!=typeof Uint8ClampedArray?Uint8ClampedArray:Uint8Array,Int16Array:Int16Array,Uint16Array:Uint16Array,Int32Array:Int32Array,Uint32Array:Uint32Array,Float32Array:Float32Array,Float64Array:Float64Array};function du(){}du.Handlers={handlers:[],add:function(t,e){this.handlers.push(t,e)},get:function(t){for(var e=this.handlers,i=0,r=e.length;i<r;i+=2){var n=e[i],o=e[i+1];if(n.test(t))return o}return null}},Object.assign(du.prototype,{crossOrigin:void 0,onLoadStart:function(){},onLoadProgress:function(){},onLoadComplete:function(){},initMaterials:function(t,e,i){for(var r=[],n=0;n<t.length;++n)r[n]=this.createMaterial(t[n],e,i);return r},createMaterial:(cu={NoBlending:W,NormalBlending:X,AdditiveBlending:q,SubtractiveBlending:K,MultiplyBlending:J,CustomBlending:Q},uu=new Li,hu=new pc,lu=new au,function(t,u,h){var l={};function e(t,e,i,r,n){var o,a=u+t,s=du.Handlers.get(a);null!==s?o=s.load(a):(hu.setCrossOrigin(h),o=hu.load(a)),void 0!==e&&(o.repeat.fromArray(e),1!==e[0]&&(o.wrapS=Ft),1!==e[1]&&(o.wrapT=Ft)),void 0!==i&&o.offset.fromArray(i),void 0!==r&&("repeat"===r[0]&&(o.wrapS=Ft),"mirror"===r[0]&&(o.wrapS=Ut),"repeat"===r[1]&&(o.wrapT=Ft),"mirror"===r[1]&&(o.wrapT=Ut)),void 0!==n&&(o.anisotropy=n);var c=Ye.generateUUID();return l[c]=o,c}var i={uuid:Ye.generateUUID(),type:"MeshLambertMaterial"};for(var r in t){var n=t[r];switch(r){case"DbgColor":case"DbgIndex":case"opticalDensity":case"illumination":break;case"DbgName":i.name=n;break;case"blending":i.blending=cu[n];break;case"colorAmbient":case"mapAmbient":console.warn("THREE.Loader.createMaterial:",r,"is no longer supported.");break;case"colorDiffuse":i.color=uu.fromArray(n).getHex();break;case"colorSpecular":i.specular=uu.fromArray(n).getHex();break;case"colorEmissive":i.emissive=uu.fromArray(n).getHex();break;case"specularCoef":i.shininess=n;break;case"shading":"basic"===n.toLowerCase()&&(i.type="MeshBasicMaterial"),"phong"===n.toLowerCase()&&(i.type="MeshPhongMaterial"),"standard"===n.toLowerCase()&&(i.type="MeshStandardMaterial");break;case"mapDiffuse":i.map=e(n,t.mapDiffuseRepeat,t.mapDiffuseOffset,t.mapDiffuseWrap,t.mapDiffuseAnisotropy);break;case"mapDiffuseRepeat":case"mapDiffuseOffset":case"mapDiffuseWrap":case"mapDiffuseAnisotropy":break;case"mapEmissive":i.emissiveMap=e(n,t.mapEmissiveRepeat,t.mapEmissiveOffset,t.mapEmissiveWrap,t.mapEmissiveAnisotropy);break;case"mapEmissiveRepeat":case"mapEmissiveOffset":case"mapEmissiveWrap":case"mapEmissiveAnisotropy":break;case"mapLight":i.lightMap=e(n,t.mapLightRepeat,t.mapLightOffset,t.mapLightWrap,t.mapLightAnisotropy);break;case"mapLightRepeat":case"mapLightOffset":case"mapLightWrap":case"mapLightAnisotropy":break;case"mapAO":i.aoMap=e(n,t.mapAORepeat,t.mapAOOffset,t.mapAOWrap,t.mapAOAnisotropy);break;case"mapAORepeat":case"mapAOOffset":case"mapAOWrap":case"mapAOAnisotropy":break;case"mapBump":i.bumpMap=e(n,t.mapBumpRepeat,t.mapBumpOffset,t.mapBumpWrap,t.mapBumpAnisotropy);break;case"mapBumpScale":i.bumpScale=n;break;case"mapBumpRepeat":case"mapBumpOffset":case"mapBumpWrap":case"mapBumpAnisotropy":break;case"mapNormal":i.normalMap=e(n,t.mapNormalRepeat,t.mapNormalOffset,t.mapNormalWrap,t.mapNormalAnisotropy);break;case"mapNormalFactor":i.normalScale=n;break;case"mapNormalRepeat":case"mapNormalOffset":case"mapNormalWrap":case"mapNormalAnisotropy":break;case"mapSpecular":i.specularMap=e(n,t.mapSpecularRepeat,t.mapSpecularOffset,t.mapSpecularWrap,t.mapSpecularAnisotropy);break;case"mapSpecularRepeat":case"mapSpecularOffset":case"mapSpecularWrap":case"mapSpecularAnisotropy":break;case"mapMetalness":i.metalnessMap=e(n,t.mapMetalnessRepeat,t.mapMetalnessOffset,t.mapMetalnessWrap,t.mapMetalnessAnisotropy);break;case"mapMetalnessRepeat":case"mapMetalnessOffset":case"mapMetalnessWrap":case"mapMetalnessAnisotropy":break;case"mapRoughness":i.roughnessMap=e(n,t.mapRoughnessRepeat,t.mapRoughnessOffset,t.mapRoughnessWrap,t.mapRoughnessAnisotropy);break;case"mapRoughnessRepeat":case"mapRoughnessOffset":case"mapRoughnessWrap":case"mapRoughnessAnisotropy":break;case"mapAlpha":i.alphaMap=e(n,t.mapAlphaRepeat,t.mapAlphaOffset,t.mapAlphaWrap,t.mapAlphaAnisotropy);break;case"mapAlphaRepeat":case"mapAlphaOffset":case"mapAlphaWrap":case"mapAlphaAnisotropy":break;case"flipSided":i.side=Y;break;case"doubleSided":i.side=Z;break;case"transparency":console.warn("THREE.Loader.createMaterial: transparency has been renamed to opacity"),i.opacity=n;break;case"depthTest":case"depthWrite":case"colorWrite":case"opacity":case"reflectivity":case"transparent":case"visible":case"wireframe":i[r]=n;break;case"vertexColors":!0===n&&(i.vertexColors=2),"face"===n&&(i.vertexColors=1);break;default:console.error("THREE.Loader.createMaterial: Unsupported",r,n)}}return"MeshBasicMaterial"===i.type&&delete i.emissive,"MeshPhongMaterial"!==i.type&&delete i.specular,i.opacity<1&&(i.transparent=!0),lu.setTextures(l),lu.parse(i)})});var fu=function(t){var e=t.lastIndexOf("/");return-1===e?"./":t.substr(0,e+1)};function mu(t){"boolean"==typeof t&&(console.warn("THREE.JSONLoader: showStatus parameter has been removed from constructor."),t=void 0),this.manager=void 0!==t?t:cc,this.withCredentials=!1}Object.assign(mu.prototype,{load:function(o,a,t,e){var s=this,c=this.texturePath&&"string"==typeof this.texturePath?this.texturePath:fu(o),i=new hc(this.manager);i.setWithCredentials(this.withCredentials),i.load(o,function(t){var e=JSON.parse(t),i=e.metadata;if(void 0!==i){var r=i.type;if(void 0!==r&&"object"===r.toLowerCase())return void console.error("THREE.JSONLoader: "+o+" should be loaded with THREE.ObjectLoader instead.")}var n=s.parse(e,c);a(n.geometry,n.materials)},t,e)},setTexturePath:function(t){this.texturePath=t},parse:function(t,e){void 0!==t.data&&(t=t.data),void 0!==t.scale?t.scale=1/t.scale:t.scale=1;var i=new vr;return function(t,e){function i(t,e){return t&1<<e}var r,n,o,a,s,c,u,h,l,p,d,f,m,g,v,y,b,x,_,w,S,A,M,P,E,C=t.faces,T=t.vertices,I=t.normals,R=t.colors,L=t.scale,O=0;if(void 0!==t.uvs){for(r=0;r<t.uvs.length;r++)t.uvs[r].length&&O++;for(r=0;r<O;r++)e.faceVertexUvs[r]=[]}for(a=0,s=T.length;a<s;)(x=new Qe).x=T[a++]*L,x.y=T[a++]*L,x.z=T[a++]*L,e.vertices.push(x);for(a=0,s=C.length;a<s;)if(d=i(p=C[a++],0),f=i(p,1),m=i(p,3),g=i(p,4),v=i(p,5),y=i(p,6),b=i(p,7),d){if((w=new cr).a=C[a],w.b=C[a+1],w.c=C[a+3],(S=new cr).a=C[a+1],S.b=C[a+2],S.c=C[a+3],a+=4,f&&(l=C[a++],w.materialIndex=l,S.materialIndex=l),o=e.faces.length,m)for(r=0;r<O;r++)for(P=t.uvs[r],e.faceVertexUvs[r][o]=[],e.faceVertexUvs[r][o+1]=[],n=0;n<4;n++)E=new Ze(P[2*(h=C[a++])],P[2*h+1]),2!==n&&e.faceVertexUvs[r][o].push(E),0!==n&&e.faceVertexUvs[r][o+1].push(E);if(g&&(u=3*C[a++],w.normal.set(I[u++],I[u++],I[u]),S.normal.copy(w.normal)),v)for(r=0;r<4;r++)u=3*C[a++],M=new Qe(I[u++],I[u++],I[u]),2!==r&&w.vertexNormals.push(M),0!==r&&S.vertexNormals.push(M);if(y&&(A=R[c=C[a++]],w.color.setHex(A),S.color.setHex(A)),b)for(r=0;r<4;r++)A=R[c=C[a++]],2!==r&&w.vertexColors.push(new Li(A)),0!==r&&S.vertexColors.push(new Li(A));e.faces.push(w),e.faces.push(S)}else{if((_=new cr).a=C[a++],_.b=C[a++],_.c=C[a++],f&&(l=C[a++],_.materialIndex=l),o=e.faces.length,m)for(r=0;r<O;r++)for(P=t.uvs[r],e.faceVertexUvs[r][o]=[],n=0;n<3;n++)E=new Ze(P[2*(h=C[a++])],P[2*h+1]),e.faceVertexUvs[r][o].push(E);if(g&&(u=3*C[a++],_.normal.set(I[u++],I[u++],I[u])),v)for(r=0;r<3;r++)u=3*C[a++],M=new Qe(I[u++],I[u++],I[u]),_.vertexNormals.push(M);if(y&&(c=C[a++],_.color.setHex(R[c])),b)for(r=0;r<3;r++)c=C[a++],_.vertexColors.push(new Li(R[c]));e.faces.push(_)}}(t,i),function(t,e){var i=void 0!==t.influencesPerVertex?t.influencesPerVertex:2;if(t.skinWeights)for(var r=0,n=t.skinWeights.length;r<n;r+=i){var o=t.skinWeights[r],a=1<i?t.skinWeights[r+1]:0,s=2<i?t.skinWeights[r+2]:0,c=3<i?t.skinWeights[r+3]:0;e.skinWeights.push(new xi(o,a,s,c))}if(t.skinIndices)for(r=0,n=t.skinIndices.length;r<n;r+=i){var u=t.skinIndices[r],h=1<i?t.skinIndices[r+1]:0,l=2<i?t.skinIndices[r+2]:0,p=3<i?t.skinIndices[r+3]:0;e.skinIndices.push(new xi(u,h,l,p))}e.bones=t.bones,e.bones&&0<e.bones.length&&(e.skinWeights.length!==e.skinIndices.length||e.skinIndices.length!==e.vertices.length)&&console.warn("When skinning, number of vertices ("+e.vertices.length+"), skinIndices ("+e.skinIndices.length+"), and skinWeights ("+e.skinWeights.length+") should match.")}(t,i),function(t,e){var i=t.scale;if(void 0!==t.morphTargets)for(var r=0,n=t.morphTargets.length;r<n;r++){e.morphTargets[r]={},e.morphTargets[r].name=t.morphTargets[r].name,e.morphTargets[r].vertices=[];for(var o=e.morphTargets[r].vertices,a=t.morphTargets[r].vertices,s=0,c=a.length;s<c;s+=3){var u=new Qe;u.x=a[s]*i,u.y=a[s+1]*i,u.z=a[s+2]*i,o.push(u)}}if(void 0!==t.morphColors&&0<t.morphColors.length){console.warn('THREE.JSONLoader: "morphColors" no longer supported. Using them as face colors.');var h=e.faces,l=t.morphColors[0].colors;for(r=0,n=h.length;r<n;r++)h[r].color.fromArray(l,3*r)}}(t,i),function(t,e){var i=[],r=[];void 0!==t.animation&&r.push(t.animation),void 0!==t.animations&&(t.animations.length?r=r.concat(t.animations):r.push(t.animations));for(var n=0;n<r.length;n++){var o=ou.parseAnimation(r[n],e.bones);o&&i.push(o)}if(e.morphTargets){var a=ou.CreateClipsFromMorphTargetSequences(e.morphTargets,10);i=i.concat(a)}0<i.length&&(e.animations=i)}(t,i),i.computeFaceNormals(),i.computeBoundingSphere(),void 0===t.materials||0===t.materials.length?{geometry:i}:{geometry:i,materials:du.prototype.initMaterials(t.materials,e,this.crossOrigin)}}}),Object.assign(function(t){this.manager=void 0!==t?t:cc,this.texturePath=""}.prototype,{load:function(r,n,t,o){""===this.texturePath&&(this.texturePath=r.substring(0,r.lastIndexOf("/")+1));var a=this;new hc(a.manager).load(r,function(t){var e=null;try{e=JSON.parse(t)}catch(t){return void 0!==o&&o(t),void console.error("THREE:ObjectLoader: Can't parse "+r+".",t.message)}var i=e.metadata;void 0!==i&&void 0!==i.type&&"geometry"!==i.type.toLowerCase()?a.parse(e,n):console.error("THREE.ObjectLoader: Can't load "+r+". Use THREE.JSONLoader instead.")},t,o)},setTexturePath:function(t){this.texturePath=t},setCrossOrigin:function(t){this.crossOrigin=t},parse:function(t,e){var i=this.parseShape(t.shapes),r=this.parseGeometries(t.geometries,i),n=this.parseImages(t.images,function(){void 0!==e&&e(s)}),o=this.parseTextures(t.textures,n),a=this.parseMaterials(t.materials,o),s=this.parseObject(t.object,r,a);return t.animations&&(s.animations=this.parseAnimations(t.animations)),void 0!==t.images&&0!==t.images.length||void 0!==e&&e(s),s},parseShape:function(t){var e={};if(void 0!==t)for(var i=0,r=t.length;i<r;i++){var n=(new kc).fromJSON(t[i]);e[n.uuid]=n}return e},parseGeometries:function(t,e){var i={};if(void 0!==t)for(var r=new mu,n=new su,o=0,a=t.length;o<a;o++){var s,c=t[o];switch(c.type){case"PlaneGeometry":case"PlaneBufferGeometry":s=new Ys[c.type](c.width,c.height,c.widthSegments,c.heightSegments);break;case"BoxGeometry":case"BoxBufferGeometry":case"CubeGeometry":s=new Ys[c.type](c.width,c.height,c.depth,c.widthSegments,c.heightSegments,c.depthSegments);break;case"CircleGeometry":case"CircleBufferGeometry":s=new Ys[c.type](c.radius,c.segments,c.thetaStart,c.thetaLength);break;case"CylinderGeometry":case"CylinderBufferGeometry":s=new Ys[c.type](c.radiusTop,c.radiusBottom,c.height,c.radialSegments,c.heightSegments,c.openEnded,c.thetaStart,c.thetaLength);break;case"ConeGeometry":case"ConeBufferGeometry":s=new Ys[c.type](c.radius,c.height,c.radialSegments,c.heightSegments,c.openEnded,c.thetaStart,c.thetaLength);break;case"SphereGeometry":case"SphereBufferGeometry":s=new Ys[c.type](c.radius,c.widthSegments,c.heightSegments,c.phiStart,c.phiLength,c.thetaStart,c.thetaLength);break;case"DodecahedronGeometry":case"DodecahedronBufferGeometry":case"IcosahedronGeometry":case"IcosahedronBufferGeometry":case"OctahedronGeometry":case"OctahedronBufferGeometry":case"TetrahedronGeometry":case"TetrahedronBufferGeometry":s=new Ys[c.type](c.radius,c.detail);break;case"RingGeometry":case"RingBufferGeometry":s=new Ys[c.type](c.innerRadius,c.outerRadius,c.thetaSegments,c.phiSegments,c.thetaStart,c.thetaLength);break;case"TorusGeometry":case"TorusBufferGeometry":s=new Ys[c.type](c.radius,c.tube,c.radialSegments,c.tubularSegments,c.arc);break;case"TorusKnotGeometry":case"TorusKnotBufferGeometry":s=new Ys[c.type](c.radius,c.tube,c.tubularSegments,c.radialSegments,c.p,c.q);break;case"LatheGeometry":case"LatheBufferGeometry":s=new Ys[c.type](c.points,c.segments,c.phiStart,c.phiLength);break;case"PolyhedronGeometry":case"PolyhedronBufferGeometry":s=new Ys[c.type](c.vertices,c.indices,c.radius,c.details);break;case"ShapeGeometry":case"ShapeBufferGeometry":for(var u=[],h=0,l=c.shapes.length;h<l;h++){var p=e[c.shapes[h]];u.push(p)}s=new Ys[c.type](u,c.curveSegments);break;case"BufferGeometry":s=n.parse(c);break;case"Geometry":s=r.parse(c,this.texturePath).geometry;break;default:console.warn('THREE.ObjectLoader: Unsupported geometry type "'+c.type+'"');continue}s.uuid=c.uuid,void 0!==c.name&&(s.name=c.name),i[c.uuid]=s}return i},parseMaterials:function(t,e){var i={};if(void 0!==t){var r=new au;r.setTextures(e);for(var n=0,o=t.length;n<o;n++){var a=t[n];if("MultiMaterial"===a.type){for(var s=[],c=0;c<a.materials.length;c++)s.push(r.parse(a.materials[c]));i[a.uuid]=s}else i[a.uuid]=r.parse(a)}}return i},parseAnimations:function(t){for(var e=[],i=0;i<t.length;i++){var r=ou.parse(t[i]);e.push(r)}return e},parseImages:function(t,e){var i=this,r={};function n(t){return i.manager.itemStart(t),o.load(t,function(){i.manager.itemEnd(t)},void 0,function(){i.manager.itemEnd(t),i.manager.itemError(t)})}if(void 0!==t&&0<t.length){var o=new lc(new sc(e));o.setCrossOrigin(this.crossOrigin);for(var a=0,s=t.length;a<s;a++){var c=t[a],u=/^(\/\/)|([a-z]+:(\/\/)?)/i.test(c.url)?c.url:i.texturePath+c.url;r[c.uuid]=n(u)}}return r},parseTextures:function(t,e){function i(t,e){return"number"==typeof t?t:(console.warn("THREE.ObjectLoader.parseTexture: Constant should be in numeric form.",t),e[t])}var r={};if(void 0!==t)for(var n=0,o=t.length;n<o;n++){var a=t[n];void 0===a.image&&console.warn('THREE.ObjectLoader: No "image" specified for',a.uuid),void 0===e[a.image]&&console.warn("THREE.ObjectLoader: Undefined image",a.image);var s=new bi(e[a.image]);s.needsUpdate=!0,s.uuid=a.uuid,void 0!==a.name&&(s.name=a.name),void 0!==a.mapping&&(s.mapping=i(a.mapping,vu)),void 0!==a.offset&&s.offset.fromArray(a.offset),void 0!==a.repeat&&s.repeat.fromArray(a.repeat),void 0!==a.center&&s.center.fromArray(a.center),void 0!==a.rotation&&(s.rotation=a.rotation),void 0!==a.wrap&&(s.wrapS=i(a.wrap[0],yu),s.wrapT=i(a.wrap[1],yu)),void 0!==a.format&&(s.format=a.format),void 0!==a.minFilter&&(s.minFilter=i(a.minFilter,bu)),void 0!==a.magFilter&&(s.magFilter=i(a.magFilter,bu)),void 0!==a.anisotropy&&(s.anisotropy=a.anisotropy),void 0!==a.flipY&&(s.flipY=a.flipY),r[a.uuid]=s}return r},parseObject:function(t,e,o){var i;function r(t){return void 0===e[t]&&console.warn("THREE.ObjectLoader: Undefined geometry",t),e[t]}function n(t){if(void 0!==t){if(Array.isArray(t)){for(var e=[],i=0,r=t.length;i<r;i++){var n=t[i];void 0===o[n]&&console.warn("THREE.ObjectLoader: Undefined material",n),e.push(o[n])}return e}return void 0===o[t]&&console.warn("THREE.ObjectLoader: Undefined material",t),o[t]}}switch(t.type){case"Scene":i=new wa,void 0!==t.background&&Number.isInteger(t.background)&&(i.background=new Li(t.background)),void 0!==t.fog&&("Fog"===t.fog.type?i.fog=new _a(t.fog.color,t.fog.near,t.fog.far):"FogExp2"===t.fog.type&&(i.fog=new xa(t.fog.color,t.fog.density)));break;case"PerspectiveCamera":i=new ga(t.fov,t.aspect,t.near,t.far),void 0!==t.focus&&(i.focus=t.focus),void 0!==t.zoom&&(i.zoom=t.zoom),void 0!==t.filmGauge&&(i.filmGauge=t.filmGauge),void 0!==t.filmOffset&&(i.filmOffset=t.filmOffset),void 0!==t.view&&(i.view=Object.assign({},t.view));break;case"OrthographicCamera":i=new sr(t.left,t.right,t.top,t.bottom,t.near,t.far),void 0!==t.zoom&&(i.zoom=t.zoom),void 0!==t.view&&(i.view=Object.assign({},t.view));break;case"AmbientLight":i=new Hc(t.color,t.intensity);break;case"DirectionalLight":i=new Vc(t.color,t.intensity);break;case"PointLight":i=new jc(t.color,t.intensity,t.distance,t.decay);break;case"RectAreaLight":i=new $c(t.color,t.intensity,t.width,t.height);break;case"SpotLight":i=new Uc(t.color,t.intensity,t.distance,t.angle,t.penumbra,t.decay);break;case"HemisphereLight":i=new Nc(t.color,t.groundColor,t.intensity);break;case"SkinnedMesh":console.warn("THREE.ObjectLoader.parseObject() does not support SkinnedMesh yet.");case"Mesh":var a=r(t.geometry),s=n(t.material);i=a.bones&&0<a.bones.length?new Ca(a,s):new An(a,s);break;case"LOD":i=new Ma;break;case"Line":i=new Ia(r(t.geometry),n(t.material),t.mode);break;case"LineLoop":i=new La(r(t.geometry),n(t.material));break;case"LineSegments":i=new Ra(r(t.geometry),n(t.material));break;case"PointCloud":case"Points":i=new Da(r(t.geometry),n(t.material));break;case"Sprite":i=new Aa(n(t.material));break;case"Group":i=new ka;break;default:i=new or}if(i.uuid=t.uuid,void 0!==t.name&&(i.name=t.name),void 0!==t.matrix?(i.matrix.fromArray(t.matrix),void 0!==t.matrixAutoUpdate&&(i.matrixAutoUpdate=t.matrixAutoUpdate),i.matrixAutoUpdate&&i.matrix.decompose(i.position,i.quaternion,i.scale)):(void 0!==t.position&&i.position.fromArray(t.position),void 0!==t.rotation&&i.rotation.fromArray(t.rotation),void 0!==t.quaternion&&i.quaternion.fromArray(t.quaternion),void 0!==t.scale&&i.scale.fromArray(t.scale)),void 0!==t.castShadow&&(i.castShadow=t.castShadow),void 0!==t.receiveShadow&&(i.receiveShadow=t.receiveShadow),t.shadow&&(void 0!==t.shadow.bias&&(i.shadow.bias=t.shadow.bias),void 0!==t.shadow.radius&&(i.shadow.radius=t.shadow.radius),void 0!==t.shadow.mapSize&&i.shadow.mapSize.fromArray(t.shadow.mapSize),void 0!==t.shadow.camera&&(i.shadow.camera=this.parseObject(t.shadow.camera))),void 0!==t.visible&&(i.visible=t.visible),void 0!==t.frustumCulled&&(i.frustumCulled=t.frustumCulled),void 0!==t.renderOrder&&(i.renderOrder=t.renderOrder),void 0!==t.userData&&(i.userData=t.userData),void 0!==t.children)for(var c=t.children,u=0;u<c.length;u++)i.add(this.parseObject(c[u],e,o));if("LOD"===t.type)for(var h=t.levels,l=0;l<h.length;l++){var p=h[l],d=i.getObjectByProperty("uuid",p.object);void 0!==d&&i.addLevel(d,p.distance)}return i}});var gu,vu={UVMapping:300,CubeReflectionMapping:Rt,CubeRefractionMapping:Lt,EquirectangularReflectionMapping:Ot,EquirectangularRefractionMapping:Dt,SphericalReflectionMapping:kt,CubeUVReflectionMapping:Bt,CubeUVRefractionMapping:Nt},yu={RepeatWrapping:Ft,ClampToEdgeWrapping:zt,MirroredRepeatWrapping:Ut},bu={NearestFilter:jt,NearestMipMapNearestFilter:Gt,NearestMipMapLinearFilter:Vt,LinearFilter:Ht,LinearMipMapNearestFilter:$t,LinearMipMapLinearFilter:Wt};function xu(){this.type="ShapePath",this.color=new Li,this.subPaths=[],this.currentPath=null}function _u(t){this.type="Font",this.data=t}function wu(t,e,i,r,n,o){var a=o.glyphs[t]||o.glyphs["?"];if(a){var s,c,u,h,l,p,d,f,m=new xu;if(a.o)for(var g=a._cachedOutline||(a._cachedOutline=a.o.split(" ")),v=0,y=g.length;v<y;){switch(g[v++]){case"m":s=g[v++]*i+r,c=g[v++]*i+n,m.moveTo(s,c);break;case"l":s=g[v++]*i+r,c=g[v++]*i+n,m.lineTo(s,c);break;case"q":u=g[v++]*i+r,h=g[v++]*i+n,l=g[v++]*i+r,p=g[v++]*i+n,m.quadraticCurveTo(l,p,u,h);break;case"b":u=g[v++]*i+r,h=g[v++]*i+n,l=g[v++]*i+r,p=g[v++]*i+n,d=g[v++]*i+r,f=g[v++]*i+n,m.bezierCurveTo(l,p,d,f,u,h)}}return{offsetX:a.ha*i,path:m}}}Object.assign(xu.prototype,{moveTo:function(t,e){this.currentPath=new Dc,this.subPaths.push(this.currentPath),this.currentPath.moveTo(t,e)},lineTo:function(t,e){this.currentPath.lineTo(t,e)},quadraticCurveTo:function(t,e,i,r){this.currentPath.quadraticCurveTo(t,e,i,r)},bezierCurveTo:function(t,e,i,r,n,o){this.currentPath.bezierCurveTo(t,e,i,r,n,o)},splineThru:function(t){this.currentPath.splineThru(t)},toShapes:function(t,e){function i(t){for(var e=[],i=0,r=t.length;i<r;i++){var n=t[i],o=new kc;o.curves=n.curves,e.push(o)}return e}function r(t,e){for(var i=e.length,r=!1,n=i-1,o=0;o<i;n=o++){var a=e[n],s=e[o],c=s.x-a.x,u=s.y-a.y;if(Math.abs(u)>Number.EPSILON){if(u<0&&(a=e[o],c=-c,s=e[n],u=-u),t.y<a.y||t.y>s.y)continue;if(t.y===a.y){if(t.x===a.x)return!0}else{var h=u*(t.x-a.x)-c*(t.y-a.y);if(0===h)return!0;if(h<0)continue;r=!r}}else{if(t.y!==a.y)continue;if(s.x<=t.x&&t.x<=a.x||a.x<=t.x&&t.x<=s.x)return!0}}return r}var n=Ms.isClockWise,o=this.subPaths;if(0===o.length)return[];if(!0===e)return i(o);var a,s,c,u=[];if(1===o.length)return s=o[0],(c=new kc).curves=s.curves,u.push(c),u;var h=!n(o[0].getPoints());h=t?!h:h;var l,p,d=[],f=[],m=[],g=0;f[g]=void 0,m[g]=[];for(var v=0,y=o.length;v<y;v++)a=n(l=(s=o[v]).getPoints()),(a=t?!a:a)?(!h&&f[g]&&g++,f[g]={s:new kc,p:l},f[g].s.curves=s.curves,h&&g++,m[g]=[]):m[g].push({h:s,p:l[0]});if(!f[0])return i(o);if(1<f.length){for(var b=!1,x=[],_=0,w=f.length;_<w;_++)d[_]=[];for(_=0,w=f.length;_<w;_++)for(var S=m[_],A=0;A<S.length;A++){for(var M=S[A],P=!0,E=0;E<f.length;E++)r(M.p,f[E].p)&&(_!==E&&x.push({froms:_,tos:E,hole:A}),P?(P=!1,d[E].push(M)):b=!0);P&&d[_].push(M)}0<x.length&&(b||(m=d))}v=0;for(var C=f.length;v<C;v++){c=f[v].s,u.push(c);for(var T=0,I=(p=m[v]).length;T<I;T++)c.holes.push(p[T].h)}return u}}),Object.assign(_u.prototype,{isFont:!0,generateShapes:function(t,e,i){void 0===e&&(e=100),void 0===i&&(i=4);for(var r=[],n=function(t,e,i,r){for(var n=String(t).split(""),o=e/r.resolution,a=(r.boundingBox.yMax-r.boundingBox.yMin+r.underlineThickness)*o,s=[],c=0,u=0,h=0;h<n.length;h++){var l=n[h];if("\n"===l)c=0,u-=a;else{var p=wu(l,i,o,c,u,r);c+=p.offsetX,s.push(p.path)}}return s}(t,e,i,this.data),o=0,a=n.length;o<a;o++)Array.prototype.push.apply(r,n[o].toShapes());return r}}),Object.assign(function(t){this.manager=void 0!==t?t:cc}.prototype,{load:function(t,r,e,i){var n=this,o=new hc(this.manager);o.setPath(this.path),o.load(t,function(e){var i;try{i=JSON.parse(e)}catch(t){console.warn("THREE.FontLoader: typeface.js support is being deprecated. Use typeface.json instead."),i=JSON.parse(e.substring(65,e.length-2))}var t=n.parse(i);r&&r(t)},e,i)},parse:function(t){return new _u(t)},setPath:function(t){return this.path=t,this}});var Su,Au,Mu,Pu,Eu,Cu,Tu,Iu,Ru,Lu,Ou,Du,ku,Bu,Nu,Fu=function(){return void 0===gu&&(gu=new(window.AudioContext||window.webkitAudioContext)),gu};function zu(t){this.manager=void 0!==t?t:cc}function Uu(){this.type="StereoCamera",this.aspect=1,this.eyeSep=.064,this.cameraL=new ga,this.cameraL.layers.enable(1),this.cameraL.matrixAutoUpdate=!1,this.cameraR=new ga,this.cameraR.layers.enable(2),this.cameraR.matrixAutoUpdate=!1}function ju(t,e,i){or.call(this),this.type="CubeCamera";var n=new ga(90,1,t,e);n.up.set(0,-1,0),n.lookAt(new Qe(1,0,0)),this.add(n);var o=new ga(90,1,t,e);o.up.set(0,-1,0),o.lookAt(new Qe(-1,0,0)),this.add(o);var a=new ga(90,1,t,e);a.up.set(0,0,1),a.lookAt(new Qe(0,1,0)),this.add(a);var s=new ga(90,1,t,e);s.up.set(0,0,-1),s.lookAt(new Qe(0,-1,0)),this.add(s);var c=new ga(90,1,t,e);c.up.set(0,-1,0),c.lookAt(new Qe(0,0,1)),this.add(c);var u=new ga(90,1,t,e);u.up.set(0,-1,0),u.lookAt(new Qe(0,0,-1)),this.add(u);var r={format:ae,magFilter:Ht,minFilter:Ht};this.renderTarget=new wi(i,i,r),this.renderTarget.texture.name="CubeCamera",this.update=function(t,e){null===this.parent&&this.updateMatrixWorld();var i=this.renderTarget,r=i.texture.generateMipmaps;i.texture.generateMipmaps=!1,i.activeCubeFace=0,t.render(e,n,i),i.activeCubeFace=1,t.render(e,o,i),i.activeCubeFace=2,t.render(e,a,i),i.activeCubeFace=3,t.render(e,s,i),i.activeCubeFace=4,t.render(e,c,i),i.texture.generateMipmaps=r,i.activeCubeFace=5,t.render(e,u,i),t.setRenderTarget(null)},this.clear=function(t,e,i,r){for(var n=this.renderTarget,o=0;o<6;o++)n.activeCubeFace=o,t.setRenderTarget(n),t.clear(e,i,r);t.setRenderTarget(null)}}function Gu(){or.call(this),this.type="AudioListener",this.context=Fu(),this.gain=this.context.createGain(),this.gain.connect(this.context.destination),this.filter=null}function Vu(t){or.call(this),this.type="Audio",this.context=t.context,this.gain=this.context.createGain(),this.gain.connect(t.getInput()),this.autoplay=!1,this.buffer=null,this.loop=!1,this.startTime=0,this.offset=0,this.playbackRate=1,this.isPlaying=!1,this.hasPlaybackControl=!0,this.sourceType="empty",this.filters=[]}function Hu(t){Vu.call(this,t),this.panner=this.context.createPanner(),this.panner.connect(this.gain)}function $u(t,e){this.analyser=t.context.createAnalyser(),this.analyser.fftSize=void 0!==e?e:2048,this.data=new Uint8Array(this.analyser.frequencyBinCount),t.getOutput().connect(this.analyser)}function Wu(t,e,i){this.binding=t,this.valueSize=i;var r,n=Float64Array;switch(e){case"quaternion":r=this._slerp;break;case"string":case"bool":n=Array,r=this._select;break;default:r=this._lerp}this.buffer=new n(4*i),this._mixBufferRegion=r,this.cumulativeWeight=0,this.useCount=0,this.referenceCount=0}Object.assign(zu.prototype,{load:function(t,e,i,r){var n=new hc(this.manager);n.setResponseType("arraybuffer"),n.load(t,function(t){Fu().decodeAudioData(t,function(t){e(t)})},i,r)}}),Object.assign(Uu.prototype,{update:(Ru=new Ke,Lu=new Ke,function(t){if(Su!==this||Au!==t.focus||Mu!==t.fov||Pu!==t.aspect*this.aspect||Eu!==t.near||Cu!==t.far||Tu!==t.zoom||Iu!==this.eyeSep){Su=this,Au=t.focus,Mu=t.fov,Pu=t.aspect*this.aspect,Eu=t.near,Cu=t.far,Tu=t.zoom;var e,i,r=t.projectionMatrix.clone(),n=(Iu=this.eyeSep/2)*Eu/Au,o=Eu*Math.tan(Ye.DEG2RAD*Mu*.5)/Tu;Lu.elements[12]=-Iu,Ru.elements[12]=Iu,e=-o*Pu+n,i=o*Pu+n,r.elements[0]=2*Eu/(i-e),r.elements[8]=(i+e)/(i-e),this.cameraL.projectionMatrix.copy(r),e=-o*Pu-n,i=o*Pu-n,r.elements[0]=2*Eu/(i-e),r.elements[8]=(i+e)/(i-e),this.cameraR.projectionMatrix.copy(r)}this.cameraL.matrixWorld.copy(t.matrixWorld).multiply(Lu),this.cameraR.matrixWorld.copy(t.matrixWorld).multiply(Ru)})}),(ju.prototype=Object.create(or.prototype)).constructor=ju,Gu.prototype=Object.assign(Object.create(or.prototype),{constructor:Gu,getInput:function(){return this.gain},removeFilter:function(){null!==this.filter&&(this.gain.disconnect(this.filter),this.filter.disconnect(this.context.destination),this.gain.connect(this.context.destination),this.filter=null)},getFilter:function(){return this.filter},setFilter:function(t){null!==this.filter?(this.gain.disconnect(this.filter),this.filter.disconnect(this.context.destination)):this.gain.disconnect(this.context.destination),this.filter=t,this.gain.connect(this.filter),this.filter.connect(this.context.destination)},getMasterVolume:function(){return this.gain.gain.value},setMasterVolume:function(t){this.gain.gain.setTargetAtTime(t,this.context.currentTime,.01)},updateMatrixWorld:(Ou=new Qe,Du=new Je,ku=new Qe,Bu=new Qe,function(t){or.prototype.updateMatrixWorld.call(this,t);var e=this.context.listener,i=this.up;this.matrixWorld.decompose(Ou,Du,ku),Bu.set(0,0,-1).applyQuaternion(Du),e.positionX?(e.positionX.setValueAtTime(Ou.x,this.context.currentTime),e.positionY.setValueAtTime(Ou.y,this.context.currentTime),e.positionZ.setValueAtTime(Ou.z,this.context.currentTime),e.forwardX.setValueAtTime(Bu.x,this.context.currentTime),e.forwardY.setValueAtTime(Bu.y,this.context.currentTime),e.forwardZ.setValueAtTime(Bu.z,this.context.currentTime),e.upX.setValueAtTime(i.x,this.context.currentTime),e.upY.setValueAtTime(i.y,this.context.currentTime),e.upZ.setValueAtTime(i.z,this.context.currentTime)):(e.setPosition(Ou.x,Ou.y,Ou.z),e.setOrientation(Bu.x,Bu.y,Bu.z,i.x,i.y,i.z))})}),Vu.prototype=Object.assign(Object.create(or.prototype),{constructor:Vu,getOutput:function(){return this.gain},setNodeSource:function(t){return this.hasPlaybackControl=!1,this.sourceType="audioNode",this.source=t,this.connect(),this},setBuffer:function(t){return this.buffer=t,this.sourceType="buffer",this.autoplay&&this.play(),this},play:function(){if(!0!==this.isPlaying){if(!1!==this.hasPlaybackControl){var t=this.context.createBufferSource();return t.buffer=this.buffer,t.loop=this.loop,t.onended=this.onEnded.bind(this),t.playbackRate.setValueAtTime(this.playbackRate,this.startTime),this.startTime=this.context.currentTime,t.start(this.startTime,this.offset),this.isPlaying=!0,this.source=t,this.connect()}console.warn("THREE.Audio: this Audio has no playback control.")}else console.warn("THREE.Audio: Audio is already playing.")},pause:function(){if(!1!==this.hasPlaybackControl)return!0===this.isPlaying&&(this.source.stop(),this.offset+=(this.context.currentTime-this.startTime)*this.playbackRate,this.isPlaying=!1),this;console.warn("THREE.Audio: this Audio has no playback control.")},stop:function(){if(!1!==this.hasPlaybackControl)return this.source.stop(),this.offset=0,this.isPlaying=!1,this;console.warn("THREE.Audio: this Audio has no playback control.")},connect:function(){if(0<this.filters.length){this.source.connect(this.filters[0]);for(var t=1,e=this.filters.length;t<e;t++)this.filters[t-1].connect(this.filters[t]);this.filters[this.filters.length-1].connect(this.getOutput())}else this.source.connect(this.getOutput());return this},disconnect:function(){if(0<this.filters.length){this.source.disconnect(this.filters[0]);for(var t=1,e=this.filters.length;t<e;t++)this.filters[t-1].disconnect(this.filters[t]);this.filters[this.filters.length-1].disconnect(this.getOutput())}else this.source.disconnect(this.getOutput());return this},getFilters:function(){return this.filters},setFilters:function(t){return t||(t=[]),!0===this.isPlaying?(this.disconnect(),this.filters=t,this.connect()):this.filters=t,this},getFilter:function(){return this.getFilters()[0]},setFilter:function(t){return this.setFilters(t?[t]:[])},setPlaybackRate:function(t){if(!1!==this.hasPlaybackControl)return this.playbackRate=t,!0===this.isPlaying&&this.source.playbackRate.setValueAtTime(this.playbackRate,this.context.currentTime),this;console.warn("THREE.Audio: this Audio has no playback control.")},getPlaybackRate:function(){return this.playbackRate},onEnded:function(){this.isPlaying=!1},getLoop:function(){return!1===this.hasPlaybackControl?(console.warn("THREE.Audio: this Audio has no playback control."),!1):this.loop},setLoop:function(t){if(!1!==this.hasPlaybackControl)return this.loop=t,!0===this.isPlaying&&(this.source.loop=this.loop),this;console.warn("THREE.Audio: this Audio has no playback control.")},getVolume:function(){return this.gain.gain.value},setVolume:function(t){return this.gain.gain.setTargetAtTime(t,this.context.currentTime,.01),this}}),Hu.prototype=Object.assign(Object.create(Vu.prototype),{constructor:Hu,getOutput:function(){return this.panner},getRefDistance:function(){return this.panner.refDistance},setRefDistance:function(t){this.panner.refDistance=t},getRolloffFactor:function(){return this.panner.rolloffFactor},setRolloffFactor:function(t){this.panner.rolloffFactor=t},getDistanceModel:function(){return this.panner.distanceModel},setDistanceModel:function(t){this.panner.distanceModel=t},getMaxDistance:function(){return this.panner.maxDistance},setMaxDistance:function(t){this.panner.maxDistance=t},updateMatrixWorld:(Nu=new Qe,function(t){or.prototype.updateMatrixWorld.call(this,t),Nu.setFromMatrixPosition(this.matrixWorld),this.panner.setPosition(Nu.x,Nu.y,Nu.z)})}),Object.assign($u.prototype,{getFrequencyData:function(){return this.analyser.getByteFrequencyData(this.data),this.data},getAverageFrequency:function(){for(var t=0,e=this.getFrequencyData(),i=0;i<e.length;i++)t+=e[i];return t/e.length}}),Object.assign(Wu.prototype,{accumulate:function(t,e){var i=this.buffer,r=this.valueSize,n=t*r+r,o=this.cumulativeWeight;if(0===o){for(var a=0;a!==r;++a)i[n+a]=i[a];o=e}else{var s=e/(o+=e);this._mixBufferRegion(i,n,0,s,r)}this.cumulativeWeight=o},apply:function(t){var e=this.valueSize,i=this.buffer,r=t*e+e,n=this.cumulativeWeight,o=this.binding;if(this.cumulativeWeight=0,n<1){var a=3*e;this._mixBufferRegion(i,r,a,1-n,e)}for(var s=e,c=e+e;s!==c;++s)if(i[s]!==i[s+e]){o.setValue(i,r);break}},saveOriginalState:function(){var t=this.binding,e=this.buffer,i=this.valueSize,r=3*i;t.getValue(e,r);for(var n=i,o=r;n!==o;++n)e[n]=e[r+n%i];this.cumulativeWeight=0},restoreOriginalState:function(){var t=3*this.valueSize;this.binding.setValue(this.buffer,t)},_select:function(t,e,i,r,n){if(.5<=r)for(var o=0;o!==n;++o)t[e+o]=t[i+o]},_slerp:function(t,e,i,r){Je.slerpFlat(t,e,t,e,t,i,r)},_lerp:function(t,e,i,r,n){for(var o=1-r,a=0;a!==n;++a){var s=e+a;t[s]=t[s]*o+t[i+a]*r}}});var Xu,qu,Yu,Zu,Ku,Ju,Qu,th,eh,ih,rh,nh,oh,ah,sh,ch,uh,hh,lh,ph,dh,fh,mh,gh,vh,yh,bh,xh,_h,wh,Sh,Ah,Mh,Ph,Eh="\\[\\]\\.:\\/";function Ch(t,e,i){var r=i||Th.parseTrackName(e);this._targetGroup=t,this._bindings=t.subscribe_(e,r)}function Th(t,e,i){this.path=e,this.parsedPath=i||Th.parseTrackName(e),this.node=Th.findNode(t,this.parsedPath.nodeName)||t,this.rootNode=t}function Ih(t,e,i){this._mixer=t,this._clip=e,this._localRoot=i||null;for(var r=e.tracks,n=r.length,o=new Array(n),a={endingStart:Ne,endingEnd:Ne},s=0;s!==n;++s){var c=r[s].createInterpolant(null);(o[s]=c).settings=a}this._interpolantSettings=a,this._interpolants=o,this._propertyBindings=new Array(n),this._cacheIndex=null,this._byClipCacheIndex=null,this._timeScaleInterpolant=null,this._weightInterpolant=null,this.loop=2201,this._loopCount=-1,this._startTime=null,this.time=0,this.timeScale=1,this._effectiveTimeScale=1,this.weight=1,this._effectiveWeight=1,this.repetitions=1/0,this.paused=!1,this.enabled=!0,this.clampWhenFinished=!1,this.zeroSlopeAtStart=!0,this.zeroSlopeAtEnd=!0}function Rh(t){this._root=t,this._initMemoryManager(),this._accuIndex=0,this.time=0,this.timeScale=1}function Lh(t){"string"==typeof t&&(console.warn("THREE.Uniform: Type parameter is no longer needed."),t=arguments[1]),this.value=t}function Oh(){jr.call(this),this.type="InstancedBufferGeometry",this.maxInstancedCount=void 0}function Dh(t,e,i,r){this.data=t,this.itemSize=e,this.offset=i,this.normalized=!0===r}function kh(t,e){this.array=t,this.stride=e,this.count=void 0!==t?t.length/e:0,this.dynamic=!1,this.updateRange={offset:0,count:-1},this.version=0}function Bh(t,e,i){kh.call(this,t,e),this.meshPerAttribute=i||1}function Nh(t,e,i){yr.call(this,t,e),this.meshPerAttribute=i||1}function Fh(t,e){return t.distance-e.distance}function zh(t,e,i,r){if(!1!==t.visible&&(t.raycast(e,i),!0===r))for(var n=t.children,o=0,a=n.length;o<a;o++)zh(n[o],e,i,!0)}function Uh(t,e){this.min=void 0!==t?t:new Ze(1/0,1/0),this.max=void 0!==e?e:new Ze(-1/0,-1/0)}function jh(t){or.call(this),this.material=t,this.render=function(){}}function Gh(t,e,i,r){this.object=t,this.size=void 0!==e?e:1;var n=void 0!==i?i:16711680,o=void 0!==r?r:1,a=0,s=this.object.geometry;s&&s.isGeometry?a=3*s.faces.length:s&&s.isBufferGeometry&&(a=s.attributes.normal.count);var c=new jr,u=new Pr(2*a*3,3);c.addAttribute("position",u),Ra.call(this,c,new Ta({color:n,linewidth:o})),this.matrixAutoUpdate=!1,this.update()}function Vh(t,e){or.call(this),this.light=t,this.light.updateMatrixWorld(),this.matrix=t.matrixWorld,this.matrixAutoUpdate=!1,this.color=e;for(var i=new jr,r=[0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,-1,0,1,0,0,0,0,1,1,0,0,0,0,-1,1],n=0,o=1;n<32;n++,o++){var a=n/32*Math.PI*2,s=o/32*Math.PI*2;r.push(Math.cos(a),Math.sin(a),1,Math.cos(s),Math.sin(s),1)}i.addAttribute("position",new Pr(r,3));var c=new Ta({fog:!1});this.cone=new Ra(i,c),this.add(this.cone),this.update()}function Hh(t){for(var e=function t(e){var i=[];e&&e.isBone&&i.push(e);for(var r=0;r<e.children.length;r++)i.push.apply(i,t(e.children[r]));return i}(t),i=new jr,r=[],n=[],o=new Li(0,0,1),a=new Li(0,1,0),s=0;s<e.length;s++){var c=e[s];c.parent&&c.parent.isBone&&(r.push(0,0,0),r.push(0,0,0),n.push(o.r,o.g,o.b),n.push(a.r,a.g,a.b))}i.addAttribute("position",new Pr(r,3)),i.addAttribute("color",new Pr(n,3));var u=new Ta({vertexColors:2,depthTest:!1,depthWrite:!1,transparent:!0});Ra.call(this,i,u),this.root=t,this.bones=e,this.matrix=t.matrixWorld,this.matrixAutoUpdate=!1}function $h(t,e,i){this.light=t,this.light.updateMatrixWorld(),this.color=i;var r=new Ds(e,4,2),n=new bn({wireframe:!0,fog:!1});An.call(this,r,n),this.matrix=this.light.matrixWorld,this.matrixAutoUpdate=!1,this.update()}function Wh(t,e){or.call(this),this.light=t,this.light.updateMatrixWorld(),this.matrix=t.matrixWorld,this.matrixAutoUpdate=!1,this.color=e;var i=new Ta({fog:!1}),r=new jr;r.addAttribute("position",new yr(new Float32Array(15),3)),this.line=new Ia(r,i),this.add(this.line),this.update()}function Xh(t,e,i){or.call(this),this.light=t,this.light.updateMatrixWorld(),this.matrix=t.matrixWorld,this.matrixAutoUpdate=!1,this.color=i;var r=new Xa(e);r.rotateY(.5*Math.PI),this.material=new bn({wireframe:!0,fog:!1}),void 0===this.color&&(this.material.vertexColors=2);var n=r.getAttribute("position"),o=new Float32Array(3*n.count);r.addAttribute("color",new yr(o,3)),this.add(new An(r,this.material)),this.update()}function qh(t,e,i,r){t=t||10,e=e||10,i=new Li(void 0!==i?i:4473924),r=new Li(void 0!==r?r:8947848);for(var n=e/2,o=t/e,a=t/2,s=[],c=[],u=0,h=0,l=-a;u<=e;u++,l+=o){s.push(-a,0,l,a,0,l),s.push(l,0,-a,l,0,a);var p=u===n?i:r;p.toArray(c,h),h+=3,p.toArray(c,h),h+=3,p.toArray(c,h),h+=3,p.toArray(c,h),h+=3}var d=new jr;d.addAttribute("position",new Pr(s,3)),d.addAttribute("color",new Pr(c,3));var f=new Ta({vertexColors:2});Ra.call(this,d,f)}function Yh(t,e,i,r,n,o){t=t||10,e=e||16,i=i||8,r=r||64,n=new Li(void 0!==n?n:4473924),o=new Li(void 0!==o?o:8947848);var a,s,c,u,h,l,p,d=[],f=[];for(u=0;u<=e;u++)c=u/e*(2*Math.PI),a=Math.sin(c)*t,s=Math.cos(c)*t,d.push(0,0,0),d.push(a,0,s),p=1&u?n:o,f.push(p.r,p.g,p.b),f.push(p.r,p.g,p.b);for(u=0;u<=i;u++)for(p=1&u?n:o,l=t-t/i*u,h=0;h<r;h++)c=h/r*(2*Math.PI),a=Math.sin(c)*l,s=Math.cos(c)*l,d.push(a,0,s),f.push(p.r,p.g,p.b),c=(h+1)/r*(2*Math.PI),a=Math.sin(c)*l,s=Math.cos(c)*l,d.push(a,0,s),f.push(p.r,p.g,p.b);var m=new jr;m.addAttribute("position",new Pr(d,3)),m.addAttribute("color",new Pr(f,3));var g=new Ta({vertexColors:2});Ra.call(this,m,g)}function Zh(t,e,i,r){this.object=t,this.size=void 0!==e?e:1;var n=void 0!==i?i:16776960,o=void 0!==r?r:1,a=0,s=this.object.geometry;s&&s.isGeometry?a=s.faces.length:console.warn("THREE.FaceNormalsHelper: only THREE.Geometry is supported. Use THREE.VertexNormalsHelper, instead.");var c=new jr,u=new Pr(2*a*3,3);c.addAttribute("position",u),Ra.call(this,c,new Ta({color:n,linewidth:o})),this.matrixAutoUpdate=!1,this.update()}function Kh(t,e,i){or.call(this),this.light=t,this.light.updateMatrixWorld(),this.matrix=t.matrixWorld,this.matrixAutoUpdate=!1,this.color=i,void 0===e&&(e=1);var r=new jr;r.addAttribute("position",new Pr([-e,e,0,e,e,0,e,-e,0,-e,-e,0,-e,e,0],3));var n=new Ta({fog:!1});this.lightPlane=new Ia(r,n),this.add(this.lightPlane),(r=new jr).addAttribute("position",new Pr([0,0,0,0,0,1],3)),this.targetLine=new Ia(r,n),this.add(this.targetLine),this.update()}function Jh(t){var e=new jr,i=new Ta({color:16777215,vertexColors:1}),r=[],n=[],o={},a=new Li(16755200),s=new Li(16711680),c=new Li(43775),u=new Li(16777215),h=new Li(3355443);function l(t,e,i){p(t,i),p(e,i)}function p(t,e){r.push(0,0,0),n.push(e.r,e.g,e.b),void 0===o[t]&&(o[t]=[]),o[t].push(r.length/3-1)}l("n1","n2",a),l("n2","n4",a),l("n4","n3",a),l("n3","n1",a),l("f1","f2",a),l("f2","f4",a),l("f4","f3",a),l("f3","f1",a),l("n1","f1",a),l("n2","f2",a),l("n3","f3",a),l("n4","f4",a),l("p","n1",s),l("p","n2",s),l("p","n3",s),l("p","n4",s),l("u1","u2",c),l("u2","u3",c),l("u3","u1",c),l("c","t",u),l("p","c",h),l("cn1","cn2",h),l("cn3","cn4",h),l("cf1","cf2",h),l("cf3","cf4",h),e.addAttribute("position",new Pr(r,3)),e.addAttribute("color",new Pr(n,3)),Ra.call(this,e,i),this.camera=t,this.camera.updateProjectionMatrix&&this.camera.updateProjectionMatrix(),this.matrix=t.matrixWorld,this.matrixAutoUpdate=!1,this.pointMap=o,this.update()}function Qh(t,e){this.object=t,void 0===e&&(e=16776960);var i=new Uint16Array([0,1,1,2,2,3,3,0,4,5,5,6,6,7,7,4,0,4,1,5,2,6,3,7]),r=new Float32Array(24),n=new jr;n.setIndex(new yr(i,1)),n.addAttribute("position",new yr(r,3)),Ra.call(this,n,new Ta({color:e})),this.matrixAutoUpdate=!1,this.update()}function tl(t,e){this.type="Box3Helper",this.box=t;var i=void 0!==e?e:16776960,r=new Uint16Array([0,1,1,2,2,3,3,0,4,5,5,6,6,7,7,4,0,4,1,5,2,6,3,7]),n=new jr;n.setIndex(new yr(r,1)),n.addAttribute("position",new Pr([1,1,1,-1,1,1,-1,-1,1,1,-1,1,1,1,-1,-1,1,-1,-1,-1,-1,1,-1,-1],3)),Ra.call(this,n,new Ta({color:i})),this.geometry.computeBoundingSphere()}function el(t,e,i){this.type="PlaneHelper",this.plane=t,this.size=void 0===e?1:e;var r=void 0!==i?i:16776960,n=new jr;n.addAttribute("position",new Pr([1,-1,1,-1,1,1,-1,-1,1,1,1,1,-1,1,1,-1,-1,1,1,-1,1,1,1,1,0,0,1,0,0,0],3)),n.computeBoundingSphere(),Ia.call(this,n,new Ta({color:r}));var o=new jr;o.addAttribute("position",new Pr([1,1,1,-1,1,1,-1,-1,1,1,1,1,-1,-1,1,1,-1,1],3)),o.computeBoundingSphere(),this.add(new An(o,new bn({color:r,opacity:.2,transparent:!0,depthWrite:!1})))}function il(t,e,i,r,n,o){or.call(this),void 0===r&&(r=16776960),void 0===i&&(i=1),void 0===n&&(n=.2*i),void 0===o&&(o=.2*n),void 0===wh&&((wh=new jr).addAttribute("position",new Pr([0,0,0,0,1,0],3)),(Sh=new Hs(0,.5,1,5,1)).translate(0,-.5,0)),this.position.copy(e),this.line=new Ia(wh,new Ta({color:r})),this.line.matrixAutoUpdate=!1,this.add(this.line),this.cone=new An(Sh,new bn({color:r})),this.cone.matrixAutoUpdate=!1,this.add(this.cone),this.setDirection(t),this.setLength(i,n,o)}function rl(t){var e=[0,0,0,t=t||1,0,0,0,0,0,0,t,0,0,0,0,0,0,t],i=new jr;i.addAttribute("position",new Pr(e,3)),i.addAttribute("color",new Pr([1,0,0,1,.6,0,0,1,0,.6,1,0,0,0,1,0,.6,1],3));var r=new Ta({vertexColors:2});Ra.call(this,i,r)}function nl(t){console.warn("THREE.Spline has been removed. Use THREE.CatmullRomCurve3 instead."),_c.call(this,t),this.type="catmullrom"}function ol(t){if("undefined"!=typeof window){var e=new RegExp(t+"=([^&#=]*)").exec(window.location.search);return e?decodeURIComponent(e[1]):void 0}}function al(t,e){return void 0!==t?t:e}function sl(t,e){var i=Object.assign({},t);for(var r in e){void 0===t[r]&&(i[r]=e[r])}return i}function cl(t,e){for(var i in e){var r=e[i];void 0!==r&&(t[i]=r)}return t}function ul(){var t=window.location.protocol;return null===t.match(/http(s)?:/gi)?"http:":t}function hl(){if("undefined"==typeof window)return!1;var t=window.navigator.userAgent;return/Opera|OPR/.test(t)?"Opera":/Chrome/i.test(t)?"Chrome":/Firefox/i.test(t)?"Firefox":/Mobile(\/.*)? Safari/i.test(t)?"Mobile Safari":/MSIE/i.test(t)?"Internet Explorer":!!/Safari/i.test(t)&&"Safari"}function ll(t){window.open(t,"_blank")||(window.location.href=t)}function pl(t,e){if(void 0===e&&(e="download"),t){var i="Safari"===hl(),r=/CriOS\/[\d]+/.test(window.navigator.userAgent),n=document.createElement("a");if("undefined"!=typeof navigator&&navigator.msSaveOrOpenBlob)navigator.msSaveOrOpenBlob(t,e);else if((i||r)&&FileReader)if(t instanceof Blob){var o=new FileReader;o.onloadend=function(){s(o.result)},o.readAsDataURL(t)}else s(t);else{var a=!1;t instanceof Blob&&(t=URL.createObjectURL(t),a=!0),"download"in n?(n.style.display="hidden",document.body.appendChild(n),n.href=t,n.download=e,n.target="_blank",n.click(),document.body.removeChild(n)):ll(t),a&&window.URL.revokeObjectURL(t)}}function s(t){ll(r?t:t.replace(/^data:[^;]*;/,"data:attachment/file;"))}}function dl(t,e){return t<e?-1:e<t?1:0}function fl(t,e,i){void 0===i&&(i=dl);for(var r=0,n=t.length-1;r<=n;){var o=r+n>>1,a=i(e,t[o]);if(0<a)r=o+1;else{if(!(a<0))return o;n=o-1}}return-r-1}function ml(t,e,i){var r=function(t,e){var i=t.length-1;if(t[i]<e)return-1;for(var r=0;r<=i;){var n=r+i>>1;t[n]>=e?i=n-1:r=n+1}return i+1}(t,e),n=function(t,e){if(t[0]>e)return-1;for(var i=0,r=t.length-1;i<=r;){var n=i+r>>1;t[n]>e?r=n-1:i=n+1}return i-1}(t,i);return-1===r||-1===n||n<r?0:n-r+1}function gl(t){return t.sort().filter(function(t,e,i){return 0===e||t!==i[e-1]})}function vl(t){if(28672<t.length){for(var e=[],i=0;i<t.length;i+=28672)e.push(String.fromCharCode.apply(null,t.subarray(i,i+28672)));return e.join("")}return String.fromCharCode.apply(null,t)}function yl(t,e){switch(t){case"int8":return new Int8Array(e);case"int16":return new Int16Array(e);case"int32":return new Int32Array(e);case"uint8":return new Uint8Array(e);case"uint16":return new Uint16Array(e);case"uint32":return new Uint32Array(e);case"float32":return new Float32Array(e);default:throw new Error("arrayType unknown: "+t)}}function bl(t,e){return new(65535<e?Uint32Array:Uint16Array)(t)}function xl(t){return t.buffer&&t.buffer instanceof ArrayBuffer?t.buffer:t}function _l(t,e){return void 0===t?t=new e:Array.isArray(t)&&(t=(new e).fromArray(t)),t}function wl(t){return _l(t,Qe)}function Sl(t){return _l(t,Ke)}function Al(t){return _l(t,Je)}function Ml(t){return e=t,i=Float32Array,e instanceof i?e:new i(e);var e,i}function Pl(t){return al(t,"").toString().toLowerCase()}Object.assign(Ch.prototype,{getValue:function(t,e){this.bind();var i=this._targetGroup.nCachedObjects_,r=this._bindings[i];void 0!==r&&r.getValue(t,e)},setValue:function(t,e){for(var i=this._bindings,r=this._targetGroup.nCachedObjects_,n=i.length;r!==n;++r)i[r].setValue(t,e)},bind:function(){for(var t=this._bindings,e=this._targetGroup.nCachedObjects_,i=t.length;e!==i;++e)t[e].bind()},unbind:function(){for(var t=this._bindings,e=this._targetGroup.nCachedObjects_,i=t.length;e!==i;++e)t[e].unbind()}}),Object.assign(Th,{Composite:Ch,create:function(t,e,i){return t&&t.isAnimationObjectGroup?new Th.Composite(t,e,i):new Th(t,e,i)},sanitizeNodeName:(eh=new RegExp("["+Eh+"]","g"),function(t){return t.replace(/\s/g,"_").replace(eh,"")}),parseTrackName:(Xu="[^"+Eh+"]",qu="[^"+Eh.replace("\\.","")+"]",Yu=/((?:WC+[\/:])*)/.source.replace("WC",Xu),Zu=/(WCOD+)?/.source.replace("WCOD",qu),Ku=/(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC",Xu),Ju=/\.(WC+)(?:\[(.+)\])?/.source.replace("WC",Xu),Qu=new RegExp("^"+Yu+Zu+Ku+Ju+"$"),th=["material","materials","bones"],function(t){var e=Qu.exec(t);if(!e)throw new Error("PropertyBinding: Cannot parse trackName: "+t);var i={nodeName:e[2],objectName:e[3],objectIndex:e[4],propertyName:e[5],propertyIndex:e[6]},r=i.nodeName&&i.nodeName.lastIndexOf(".");if(void 0!==r&&-1!==r){var n=i.nodeName.substring(r+1);-1!==th.indexOf(n)&&(i.nodeName=i.nodeName.substring(0,r),i.objectName=n)}if(null===i.propertyName||0===i.propertyName.length)throw new Error("PropertyBinding: can not parse propertyName from trackName: "+t);return i}),findNode:function(t,n){if(!n||""===n||"root"===n||"."===n||-1===n||n===t.name||n===t.uuid)return t;if(t.skeleton){var e=t.skeleton.getBoneByName(n);if(void 0!==e)return e}if(t.children){var o=function(t){for(var e=0;e<t.length;e++){var i=t[e];if(i.name===n||i.uuid===n)return i;var r=o(i.children);if(r)return r}return null},i=o(t.children);if(i)return i}return null}}),Object.assign(Th.prototype,{_getValue_unavailable:function(){},_setValue_unavailable:function(){},BindingType:{Direct:0,EntireArray:1,ArrayElement:2,HasFromToArray:3},Versioning:{None:0,NeedsUpdate:1,MatrixWorldNeedsUpdate:2},GetterByBindingType:[function(t,e){t[e]=this.node[this.propertyName]},function(t,e){for(var i=this.resolvedProperty,r=0,n=i.length;r!==n;++r)t[e++]=i[r]},function(t,e){t[e]=this.resolvedProperty[this.propertyIndex]},function(t,e){this.resolvedProperty.toArray(t,e)}],SetterByBindingTypeAndVersioning:[[function(t,e){this.targetObject[this.propertyName]=t[e]},function(t,e){this.targetObject[this.propertyName]=t[e],this.targetObject.needsUpdate=!0},function(t,e){this.targetObject[this.propertyName]=t[e],this.targetObject.matrixWorldNeedsUpdate=!0}],[function(t,e){for(var i=this.resolvedProperty,r=0,n=i.length;r!==n;++r)i[r]=t[e++]},function(t,e){for(var i=this.resolvedProperty,r=0,n=i.length;r!==n;++r)i[r]=t[e++];this.targetObject.needsUpdate=!0},function(t,e){for(var i=this.resolvedProperty,r=0,n=i.length;r!==n;++r)i[r]=t[e++];this.targetObject.matrixWorldNeedsUpdate=!0}],[function(t,e){this.resolvedProperty[this.propertyIndex]=t[e]},function(t,e){this.resolvedProperty[this.propertyIndex]=t[e],this.targetObject.needsUpdate=!0},function(t,e){this.resolvedProperty[this.propertyIndex]=t[e],this.targetObject.matrixWorldNeedsUpdate=!0}],[function(t,e){this.resolvedProperty.fromArray(t,e)},function(t,e){this.resolvedProperty.fromArray(t,e),this.targetObject.needsUpdate=!0},function(t,e){this.resolvedProperty.fromArray(t,e),this.targetObject.matrixWorldNeedsUpdate=!0}]],getValue:function(t,e){this.bind(),this.getValue(t,e)},setValue:function(t,e){this.bind(),this.setValue(t,e)},bind:function(){var t=this.node,e=this.parsedPath,i=e.objectName,r=e.propertyName,n=e.propertyIndex;if(t||(t=Th.findNode(this.rootNode,e.nodeName)||this.rootNode,this.node=t),this.getValue=this._getValue_unavailable,this.setValue=this._setValue_unavailable,t){if(i){var o=e.objectIndex;switch(i){case"materials":if(!t.material)return void console.error("THREE.PropertyBinding: Can not bind to material as node does not have a material.",this);if(!t.material.materials)return void console.error("THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.",this);t=t.material.materials;break;case"bones":if(!t.skeleton)return void console.error("THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.",this);t=t.skeleton.bones;for(var a=0;a<t.length;a++)if(t[a].name===o){o=a;break}break;default:if(void 0===t[i])return void console.error("THREE.PropertyBinding: Can not bind to objectName of node undefined.",this);t=t[i]}if(void 0!==o){if(void 0===t[o])return void console.error("THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.",this,t);t=t[o]}}var s=t[r];if(void 0!==s){var c=this.Versioning.None;void 0!==t.needsUpdate?(c=this.Versioning.NeedsUpdate,this.targetObject=t):void 0!==t.matrixWorldNeedsUpdate&&(c=this.Versioning.MatrixWorldNeedsUpdate,this.targetObject=t);var u=this.BindingType.Direct;if(void 0!==n){if("morphTargetInfluences"===r){if(!t.geometry)return void console.error("THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.",this);if(t.geometry.isBufferGeometry){if(!t.geometry.morphAttributes)return void console.error("THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.",this);for(a=0;a<this.node.geometry.morphAttributes.position.length;a++)if(t.geometry.morphAttributes.position[a].name===n){n=a;break}}else{if(!t.geometry.morphTargets)return void console.error("THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphTargets.",this);for(a=0;a<this.node.geometry.morphTargets.length;a++)if(t.geometry.morphTargets[a].name===n){n=a;break}}}u=this.BindingType.ArrayElement,this.resolvedProperty=s,this.propertyIndex=n}else void 0!==s.fromArray&&void 0!==s.toArray?(u=this.BindingType.HasFromToArray,this.resolvedProperty=s):Array.isArray(s)?(u=this.BindingType.EntireArray,this.resolvedProperty=s):this.propertyName=r;this.getValue=this.GetterByBindingType[u],this.setValue=this.SetterByBindingTypeAndVersioning[u][c]}else{var h=e.nodeName;console.error("THREE.PropertyBinding: Trying to update property for track: "+h+"."+r+" but it wasn't found.",t)}}else console.error("THREE.PropertyBinding: Trying to update node for track: "+this.path+" but it wasn't found.")},unbind:function(){this.node=null,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}}),Object.assign(Th.prototype,{_getValue_unbound:Th.prototype.getValue,_setValue_unbound:Th.prototype.setValue}),Object.assign(function(){var t=arguments;this.uuid=Ye.generateUUID(),this._objects=Array.prototype.slice.call(arguments),this.nCachedObjects_=0;var e={};this._indicesByUUID=e;for(var i=0,r=arguments.length;i!==r;++i)e[t[i].uuid]=i;this._paths=[],this._parsedPaths=[],this._bindings=[],this._bindingsIndicesByPath={};var n=this;this.stats={objects:{get total(){return n._objects.length},get inUse(){return this.total-n.nCachedObjects_}},get bindingsPerObject(){return n._bindings.length}}}.prototype,{isAnimationObjectGroup:!0,add:function(){for(var t=arguments,e=this._objects,i=e.length,r=this.nCachedObjects_,n=this._indicesByUUID,o=this._paths,a=this._parsedPaths,s=this._bindings,c=s.length,u=void 0,h=0,l=arguments.length;h!==l;++h){var p=t[h],d=p.uuid,f=n[d];if(void 0===f){f=i++,n[d]=f,e.push(p);for(var m=0,g=c;m!==g;++m)s[m].push(new Th(p,o[m],a[m]))}else if(f<r){u=e[f];var v=--r,y=e[v];e[n[y.uuid]=f]=y,e[n[d]=v]=p;for(m=0,g=c;m!==g;++m){var b=s[m],x=b[v],_=b[f];b[f]=x,void 0===_&&(_=new Th(p,o[m],a[m])),b[v]=_}}else e[f]!==u&&console.error("THREE.AnimationObjectGroup: Different objects with the same UUID detected. Clean the caches or recreate your infrastructure when reloading scenes.")}this.nCachedObjects_=r},remove:function(){for(var t=arguments,e=this._objects,i=this.nCachedObjects_,r=this._indicesByUUID,n=this._bindings,o=n.length,a=0,s=arguments.length;a!==s;++a){var c=t[a],u=c.uuid,h=r[u];if(void 0!==h&&i<=h){var l=i++,p=e[l];e[r[p.uuid]=h]=p,e[r[u]=l]=c;for(var d=0,f=o;d!==f;++d){var m=n[d],g=m[l],v=m[h];m[h]=g,m[l]=v}}}this.nCachedObjects_=i},uncache:function(){for(var t=arguments,e=this._objects,i=e.length,r=this.nCachedObjects_,n=this._indicesByUUID,o=this._bindings,a=o.length,s=0,c=arguments.length;s!==c;++s){var u=t[s].uuid,h=n[u];if(void 0!==h)if(delete n[u],h<r){var l=--r,p=e[l],d=e[y=--i];e[n[p.uuid]=h]=p,e[n[d.uuid]=l]=d,e.pop();for(var f=0,m=a;f!==m;++f){var g=(b=o[f])[l],v=b[y];b[h]=g,b[l]=v,b.pop()}}else{var y;e[n[(d=e[y=--i]).uuid]=h]=d,e.pop();for(f=0,m=a;f!==m;++f){var b;(b=o[f])[h]=b[y],b.pop()}}}this.nCachedObjects_=r},subscribe_:function(t,e){var i=this._bindingsIndicesByPath,r=i[t],n=this._bindings;if(void 0!==r)return n[r];var o=this._paths,a=this._parsedPaths,s=this._objects,c=s.length,u=this.nCachedObjects_,h=new Array(c);r=n.length,i[t]=r,o.push(t),a.push(e),n.push(h);for(var l=u,p=s.length;l!==p;++l){var d=s[l];h[l]=new Th(d,t,e)}return h},unsubscribe_:function(t){var e=this._bindingsIndicesByPath,i=e[t];if(void 0!==i){var r=this._paths,n=this._parsedPaths,o=this._bindings,a=o.length-1,s=o[a];o[e[t[a]]=i]=s,o.pop(),n[i]=n[a],n.pop(),r[i]=r[a],r.pop()}}}),Object.assign(Ih.prototype,{play:function(){return this._mixer._activateAction(this),this},stop:function(){return this._mixer._deactivateAction(this),this.reset()},reset:function(){return this.paused=!1,this.enabled=!0,this.time=0,this._loopCount=-1,this._startTime=null,this.stopFading().stopWarping()},isRunning:function(){return this.enabled&&!this.paused&&0!==this.timeScale&&null===this._startTime&&this._mixer._isActiveAction(this)},isScheduled:function(){return this._mixer._isActiveAction(this)},startAt:function(t){return this._startTime=t,this},setLoop:function(t,e){return this.loop=t,this.repetitions=e,this},setEffectiveWeight:function(t){return this.weight=t,this._effectiveWeight=this.enabled?t:0,this.stopFading()},getEffectiveWeight:function(){return this._effectiveWeight},fadeIn:function(t){return this._scheduleFading(t,0,1)},fadeOut:function(t){return this._scheduleFading(t,1,0)},crossFadeFrom:function(t,e,i){if(t.fadeOut(e),this.fadeIn(e),i){var r=this._clip.duration,n=t._clip.duration,o=n/r,a=r/n;t.warp(1,o,e),this.warp(a,1,e)}return this},crossFadeTo:function(t,e,i){return t.crossFadeFrom(this,e,i)},stopFading:function(){var t=this._weightInterpolant;return null!==t&&(this._weightInterpolant=null,this._mixer._takeBackControlInterpolant(t)),this},setEffectiveTimeScale:function(t){return this.timeScale=t,this._effectiveTimeScale=this.paused?0:t,this.stopWarping()},getEffectiveTimeScale:function(){return this._effectiveTimeScale},setDuration:function(t){return this.timeScale=this._clip.duration/t,this.stopWarping()},syncWith:function(t){return this.time=t.time,this.timeScale=t.timeScale,this.stopWarping()},halt:function(t){return this.warp(this._effectiveTimeScale,0,t)},warp:function(t,e,i){var r=this._mixer,n=r.time,o=this._timeScaleInterpolant,a=this.timeScale;null===o&&(o=r._lendControlInterpolant(),this._timeScaleInterpolant=o);var s=o.parameterPositions,c=o.sampleValues;return s[0]=n,s[1]=n+i,c[0]=t/a,c[1]=e/a,this},stopWarping:function(){var t=this._timeScaleInterpolant;return null!==t&&(this._timeScaleInterpolant=null,this._mixer._takeBackControlInterpolant(t)),this},getMixer:function(){return this._mixer},getClip:function(){return this._clip},getRoot:function(){return this._localRoot||this._mixer._root},_update:function(t,e,i,r){if(this.enabled){var n=this._startTime;if(null!==n){var o=(t-n)*i;if(o<0||0===i)return;this._startTime=null,e=i*o}e*=this._updateTimeScale(t);var a=this._updateTime(e),s=this._updateWeight(t);if(0<s)for(var c=this._interpolants,u=this._propertyBindings,h=0,l=c.length;h!==l;++h)c[h].evaluate(a),u[h].accumulate(r,s)}else this._updateWeight(t)},_updateWeight:function(t){var e=0;if(this.enabled){e=this.weight;var i=this._weightInterpolant;if(null!==i){var r=i.evaluate(t)[0];e*=r,t>i.parameterPositions[1]&&(this.stopFading(),0===r&&(this.enabled=!1))}}return this._effectiveWeight=e},_updateTimeScale:function(t){var e=0;if(!this.paused){e=this.timeScale;var i=this._timeScaleInterpolant;if(null!==i)e*=i.evaluate(t)[0],t>i.parameterPositions[1]&&(this.stopWarping(),0===e?this.paused=!0:this.timeScale=e)}return this._effectiveTimeScale=e},_updateTime:function(t){var e=this.time+t;if(0===t)return e;var i=this._clip.duration,r=this.loop,n=this._loopCount;if(2200===r){-1===n&&(this._loopCount=0,this._setEndings(!0,!0,!1));t:{if(i<=e)e=i;else{if(!(e<0))break t;e=0}this.clampWhenFinished?this.paused=!0:this.enabled=!1,this._mixer.dispatchEvent({type:"finished",action:this,direction:t<0?-1:1})}}else{var o=2202===r;if(-1===n&&(0<=t?(n=0,this._setEndings(!0,0===this.repetitions,o)):this._setEndings(0===this.repetitions,!0,o)),i<=e||e<0){var a=Math.floor(e/i);e-=i*a,n+=Math.abs(a);var s=this.repetitions-n;if(s<=0)this.clampWhenFinished?this.paused=!0:this.enabled=!1,e=0<t?i:0,this._mixer.dispatchEvent({type:"finished",action:this,direction:0<t?1:-1});else{if(1===s){var c=t<0;this._setEndings(c,!c,o)}else this._setEndings(!1,!1,o);this._loopCount=n,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:a})}}if(o&&1==(1&n))return i-(this.time=e)}return this.time=e},_setEndings:function(t,e,i){var r=this._interpolantSettings;i?(r.endingStart=Fe,r.endingEnd=Fe):(r.endingStart=t?this.zeroSlopeAtStart?Fe:Ne:2402,r.endingEnd=e?this.zeroSlopeAtEnd?Fe:Ne:2402)},_scheduleFading:function(t,e,i){var r=this._mixer,n=r.time,o=this._weightInterpolant;null===o&&(o=r._lendControlInterpolant(),this._weightInterpolant=o);var a=o.parameterPositions,s=o.sampleValues;return a[0]=n,s[0]=e,a[1]=n+t,s[1]=i,this}}),Rh.prototype=Object.assign(Object.create(v.prototype),{constructor:Rh,_bindAction:function(t,e){var i=t._localRoot||this._root,r=t._clip.tracks,n=r.length,o=t._propertyBindings,a=t._interpolants,s=i.uuid,c=this._bindingsByRootAndName,u=c[s];void 0===u&&(u={},c[s]=u);for(var h=0;h!==n;++h){var l=r[h],p=l.name,d=u[p];if(void 0!==d)o[h]=d;else{if(void 0!==(d=o[h])){null===d._cacheIndex&&(++d.referenceCount,this._addInactiveBinding(d,s,p));continue}var f=e&&e._propertyBindings[h].binding.parsedPath;++(d=new Wu(Th.create(i,p,f),l.ValueTypeName,l.getValueSize())).referenceCount,this._addInactiveBinding(d,s,p),o[h]=d}a[h].resultBuffer=d.buffer}},_activateAction:function(t){if(!this._isActiveAction(t)){if(null===t._cacheIndex){var e=(t._localRoot||this._root).uuid,i=t._clip.uuid,r=this._actionsByClip[i];this._bindAction(t,r&&r.knownActions[0]),this._addInactiveAction(t,i,e)}for(var n=t._propertyBindings,o=0,a=n.length;o!==a;++o){var s=n[o];0==s.useCount++&&(this._lendBinding(s),s.saveOriginalState())}this._lendAction(t)}},_deactivateAction:function(t){if(this._isActiveAction(t)){for(var e=t._propertyBindings,i=0,r=e.length;i!==r;++i){var n=e[i];0==--n.useCount&&(n.restoreOriginalState(),this._takeBackBinding(n))}this._takeBackAction(t)}},_initMemoryManager:function(){this._actions=[],this._nActiveActions=0,this._actionsByClip={},this._bindings=[],this._nActiveBindings=0,this._bindingsByRootAndName={},this._controlInterpolants=[],this._nActiveControlInterpolants=0;var t=this;this.stats={actions:{get total(){return t._actions.length},get inUse(){return t._nActiveActions}},bindings:{get total(){return t._bindings.length},get inUse(){return t._nActiveBindings}},controlInterpolants:{get total(){return t._controlInterpolants.length},get inUse(){return t._nActiveControlInterpolants}}}},_isActiveAction:function(t){var e=t._cacheIndex;return null!==e&&e<this._nActiveActions},_addInactiveAction:function(t,e,i){var r=this._actions,n=this._actionsByClip,o=n[e];if(void 0===o)o={knownActions:[t],actionByRoot:{}},t._byClipCacheIndex=0,n[e]=o;else{var a=o.knownActions;t._byClipCacheIndex=a.length,a.push(t)}t._cacheIndex=r.length,r.push(t),o.actionByRoot[i]=t},_removeInactiveAction:function(t){var e=this._actions,i=e[e.length-1],r=t._cacheIndex;e[i._cacheIndex=r]=i,e.pop(),t._cacheIndex=null;var n=t._clip.uuid,o=this._actionsByClip,a=o[n],s=a.knownActions,c=s[s.length-1],u=t._byClipCacheIndex;s[c._byClipCacheIndex=u]=c,s.pop(),t._byClipCacheIndex=null,delete a.actionByRoot[(t._localRoot||this._root).uuid],0===s.length&&delete o[n],this._removeInactiveBindingsForAction(t)},_removeInactiveBindingsForAction:function(t){for(var e=t._propertyBindings,i=0,r=e.length;i!==r;++i){var n=e[i];0==--n.referenceCount&&this._removeInactiveBinding(n)}},_lendAction:function(t){var e=this._actions,i=t._cacheIndex,r=this._nActiveActions++,n=e[r];e[t._cacheIndex=r]=t,e[n._cacheIndex=i]=n},_takeBackAction:function(t){var e=this._actions,i=t._cacheIndex,r=--this._nActiveActions,n=e[r];e[t._cacheIndex=r]=t,e[n._cacheIndex=i]=n},_addInactiveBinding:function(t,e,i){var r=this._bindingsByRootAndName,n=r[e],o=this._bindings;void 0===n&&(n={},r[e]=n),(n[i]=t)._cacheIndex=o.length,o.push(t)},_removeInactiveBinding:function(t){var e=this._bindings,i=t.binding,r=i.rootNode.uuid,n=i.path,o=this._bindingsByRootAndName,a=o[r],s=e[e.length-1],c=t._cacheIndex;e[s._cacheIndex=c]=s,e.pop(),delete a[n];t:{for(var u in a)break t;delete o[r]}},_lendBinding:function(t){var e=this._bindings,i=t._cacheIndex,r=this._nActiveBindings++,n=e[r];e[t._cacheIndex=r]=t,e[n._cacheIndex=i]=n},_takeBackBinding:function(t){var e=this._bindings,i=t._cacheIndex,r=--this._nActiveBindings,n=e[r];e[t._cacheIndex=r]=t,e[n._cacheIndex=i]=n},_lendControlInterpolant:function(){var t=this._controlInterpolants,e=this._nActiveControlInterpolants++,i=t[e];return void 0===i&&(t[(i=new tu(new Float32Array(2),new Float32Array(2),1,this._controlInterpolantsResultBuffer)).__cacheIndex=e]=i),i},_takeBackControlInterpolant:function(t){var e=this._controlInterpolants,i=t.__cacheIndex,r=--this._nActiveControlInterpolants,n=e[r];e[t.__cacheIndex=r]=t,e[n.__cacheIndex=i]=n},_controlInterpolantsResultBuffer:new Float32Array(1),clipAction:function(t,e){var i=e||this._root,r=i.uuid,n="string"==typeof t?ou.findByName(i,t):t,o=null!==n?n.uuid:t,a=this._actionsByClip[o],s=null;if(void 0!==a){var c=a.actionByRoot[r];if(void 0!==c)return c;s=a.knownActions[0],null===n&&(n=s._clip)}if(null===n)return null;var u=new Ih(this,n,e);return this._bindAction(u,s),this._addInactiveAction(u,o,r),u},existingAction:function(t,e){var i=e||this._root,r=i.uuid,n="string"==typeof t?ou.findByName(i,t):t,o=n?n.uuid:t,a=this._actionsByClip[o];return void 0!==a&&a.actionByRoot[r]||null},stopAllAction:function(){var t=this._actions,e=this._nActiveActions,i=this._bindings,r=this._nActiveBindings;this._nActiveActions=0;for(var n=this._nActiveBindings=0;n!==e;++n)t[n].reset();for(n=0;n!==r;++n)i[n].useCount=0;return this},update:function(t){t*=this.timeScale;for(var e=this._actions,i=this._nActiveActions,r=this.time+=t,n=Math.sign(t),o=this._accuIndex^=1,a=0;a!==i;++a){e[a]._update(r,t,n,o)}var s=this._bindings,c=this._nActiveBindings;for(a=0;a!==c;++a)s[a].apply(o);return this},getRoot:function(){return this._root},uncacheClip:function(t){var e=this._actions,i=t.uuid,r=this._actionsByClip,n=r[i];if(void 0!==n){for(var o=n.knownActions,a=0,s=o.length;a!==s;++a){var c=o[a];this._deactivateAction(c);var u=c._cacheIndex,h=e[e.length-1];c._cacheIndex=null,c._byClipCacheIndex=null,e[h._cacheIndex=u]=h,e.pop(),this._removeInactiveBindingsForAction(c)}delete r[i]}},uncacheRoot:function(t){var e=t.uuid,i=this._actionsByClip;for(var r in i){var n=i[r].actionByRoot[e];void 0!==n&&(this._deactivateAction(n),this._removeInactiveAction(n))}var o=this._bindingsByRootAndName[e];if(void 0!==o)for(var a in o){var s=o[a];s.restoreOriginalState(),this._removeInactiveBinding(s)}},uncacheAction:function(t,e){var i=this.existingAction(t,e);null!==i&&(this._deactivateAction(i),this._removeInactiveAction(i))}}),Lh.prototype.clone=function(){return new Lh(void 0===this.value.clone?this.value:this.value.clone())},Oh.prototype=Object.assign(Object.create(jr.prototype),{constructor:Oh,isInstancedBufferGeometry:!0,copy:function(t){return jr.prototype.copy.call(this,t),this.maxInstancedCount=t.maxInstancedCount,this},clone:function(){return(new this.constructor).copy(this)}}),Object.defineProperties(Dh.prototype,{count:{get:function(){return this.data.count}},array:{get:function(){return this.data.array}}}),Object.assign(Dh.prototype,{isInterleavedBufferAttribute:!0,setX:function(t,e){return this.data.array[t*this.data.stride+this.offset]=e,this},setY:function(t,e){return this.data.array[t*this.data.stride+this.offset+1]=e,this},setZ:function(t,e){return this.data.array[t*this.data.stride+this.offset+2]=e,this},setW:function(t,e){return this.data.array[t*this.data.stride+this.offset+3]=e,this},getX:function(t){return this.data.array[t*this.data.stride+this.offset]},getY:function(t){return this.data.array[t*this.data.stride+this.offset+1]},getZ:function(t){return this.data.array[t*this.data.stride+this.offset+2]},getW:function(t){return this.data.array[t*this.data.stride+this.offset+3]},setXY:function(t,e,i){return t=t*this.data.stride+this.offset,this.data.array[t+0]=e,this.data.array[t+1]=i,this},setXYZ:function(t,e,i,r){return t=t*this.data.stride+this.offset,this.data.array[t+0]=e,this.data.array[t+1]=i,this.data.array[t+2]=r,this},setXYZW:function(t,e,i,r,n){return t=t*this.data.stride+this.offset,this.data.array[t+0]=e,this.data.array[t+1]=i,this.data.array[t+2]=r,this.data.array[t+3]=n,this}}),Object.defineProperty(kh.prototype,"needsUpdate",{set:function(t){!0===t&&this.version++}}),Object.assign(kh.prototype,{isInterleavedBuffer:!0,onUploadCallback:function(){},setArray:function(t){if(Array.isArray(t))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");return this.count=void 0!==t?t.length/this.stride:0,this.array=t,this},setDynamic:function(t){return this.dynamic=t,this},copy:function(t){return this.array=new t.array.constructor(t.array),this.count=t.count,this.stride=t.stride,this.dynamic=t.dynamic,this},copyAt:function(t,e,i){t*=this.stride,i*=e.stride;for(var r=0,n=this.stride;r<n;r++)this.array[t+r]=e.array[i+r];return this},set:function(t,e){return void 0===e&&(e=0),this.array.set(t,e),this},clone:function(){return(new this.constructor).copy(this)},onUpload:function(t){return this.onUploadCallback=t,this}}),Bh.prototype=Object.assign(Object.create(kh.prototype),{constructor:Bh,isInstancedInterleavedBuffer:!0,copy:function(t){return kh.prototype.copy.call(this,t),this.meshPerAttribute=t.meshPerAttribute,this}}),Nh.prototype=Object.assign(Object.create(yr.prototype),{constructor:Nh,isInstancedBufferAttribute:!0,copy:function(t){return yr.prototype.copy.call(this,t),this.meshPerAttribute=t.meshPerAttribute,this}}),Object.assign(function(t,e,i,r){this.ray=new _n(t,e),this.near=i||0,this.far=r||1/0,this.params={Mesh:{},Line:{},LOD:{},Points:{threshold:1},Sprite:{}},Object.defineProperties(this.params,{PointCloud:{get:function(){return console.warn("THREE.Raycaster: params.PointCloud has been renamed to params.Points."),this.Points}}})}.prototype,{linePrecision:1,set:function(t,e){this.ray.set(t,e)},setFromCamera:function(t,e){e&&e.isPerspectiveCamera?(this.ray.origin.setFromMatrixPosition(e.matrixWorld),this.ray.direction.set(t.x,t.y,.5).unproject(e).sub(this.ray.origin).normalize()):e&&e.isOrthographicCamera?(this.ray.origin.set(t.x,t.y,(e.near+e.far)/(e.near-e.far)).unproject(e),this.ray.direction.set(0,0,-1).transformDirection(e.matrixWorld)):console.error("THREE.Raycaster: Unsupported camera type.")},intersectObject:function(t,e,i){var r=i||[];return zh(t,this,r,e),r.sort(Fh),r},intersectObjects:function(t,e,i){var r=i||[];if(!1===Array.isArray(t))return console.warn("THREE.Raycaster.intersectObjects: objects is not an Array."),r;for(var n=0,o=t.length;n<o;n++)zh(t[n],this,r,e);return r.sort(Fh),r}}),Object.assign(function(t){this.autoStart=void 0===t||t,this.startTime=0,this.oldTime=0,this.elapsedTime=0,this.running=!1}.prototype,{start:function(){this.startTime=("undefined"==typeof performance?Date:performance).now(),this.oldTime=this.startTime,this.elapsedTime=0,this.running=!0},stop:function(){this.getElapsedTime(),this.running=!1,this.autoStart=!1},getElapsedTime:function(){return this.getDelta(),this.elapsedTime},getDelta:function(){var t=0;if(this.autoStart&&!this.running)return this.start(),0;if(this.running){var e=("undefined"==typeof performance?Date:performance).now();t=(e-this.oldTime)/1e3,this.oldTime=e,this.elapsedTime+=t}return t}}),Object.assign(function(t,e,i){return this.radius=void 0!==t?t:1,this.phi=void 0!==e?e:0,this.theta=void 0!==i?i:0,this}.prototype,{set:function(t,e,i){return this.radius=t,this.phi=e,this.theta=i,this},clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.radius=t.radius,this.phi=t.phi,this.theta=t.theta,this},makeSafe:function(){return this.phi=Math.max(1e-6,Math.min(Math.PI-1e-6,this.phi)),this},setFromVector3:function(t){return this.radius=t.length(),0===this.radius?(this.theta=0,this.phi=0):(this.theta=Math.atan2(t.x,t.z),this.phi=Math.acos(Ye.clamp(t.y/this.radius,-1,1))),this}}),Object.assign(function(t,e,i){return this.radius=void 0!==t?t:1,this.theta=void 0!==e?e:0,this.y=void 0!==i?i:0,this}.prototype,{set:function(t,e,i){return this.radius=t,this.theta=e,this.y=i,this},clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.radius=t.radius,this.theta=t.theta,this.y=t.y,this},setFromVector3:function(t){return this.radius=Math.sqrt(t.x*t.x+t.z*t.z),this.theta=Math.atan2(t.x,t.z),this.y=t.y,this}}),Object.assign(Uh.prototype,{set:function(t,e){return this.min.copy(t),this.max.copy(e),this},setFromPoints:function(t){this.makeEmpty();for(var e=0,i=t.length;e<i;e++)this.expandByPoint(t[e]);return this},setFromCenterAndSize:(rh=new Ze,function(t,e){var i=rh.copy(e).multiplyScalar(.5);return this.min.copy(t).sub(i),this.max.copy(t).add(i),this}),clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.min.copy(t.min),this.max.copy(t.max),this},makeEmpty:function(){return this.min.x=this.min.y=1/0,this.max.x=this.max.y=-1/0,this},isEmpty:function(){return this.max.x<this.min.x||this.max.y<this.min.y},getCenter:function(t){return void 0===t&&(console.warn("THREE.Box2: .getCenter() target is now required"),t=new Ze),this.isEmpty()?t.set(0,0):t.addVectors(this.min,this.max).multiplyScalar(.5)},getSize:function(t){return void 0===t&&(console.warn("THREE.Box2: .getSize() target is now required"),t=new Ze),this.isEmpty()?t.set(0,0):t.subVectors(this.max,this.min)},expandByPoint:function(t){return this.min.min(t),this.max.max(t),this},expandByVector:function(t){return this.min.sub(t),this.max.add(t),this},expandByScalar:function(t){return this.min.addScalar(-t),this.max.addScalar(t),this},containsPoint:function(t){return!(t.x<this.min.x||t.x>this.max.x||t.y<this.min.y||t.y>this.max.y)},containsBox:function(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y},getParameter:function(t,e){return void 0===e&&(console.warn("THREE.Box2: .getParameter() target is now required"),e=new Ze),e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y))},intersectsBox:function(t){return!(t.max.x<this.min.x||t.min.x>this.max.x||t.max.y<this.min.y||t.min.y>this.max.y)},clampPoint:function(t,e){return void 0===e&&(console.warn("THREE.Box2: .clampPoint() target is now required"),e=new Ze),e.copy(t).clamp(this.min,this.max)},distanceToPoint:(ih=new Ze,function(t){return ih.copy(t).clamp(this.min,this.max).sub(t).length()}),intersect:function(t){return this.min.max(t.min),this.max.min(t.max),this},union:function(t){return this.min.min(t.min),this.max.max(t.max),this},translate:function(t){return this.min.add(t),this.max.add(t),this},equals:function(t){return t.min.equals(this.min)&&t.max.equals(this.max)}}),((jh.prototype=Object.create(or.prototype)).constructor=jh).prototype.isImmediateRenderObject=!0,((Gh.prototype=Object.create(Ra.prototype)).constructor=Gh).prototype.update=(nh=new Qe,oh=new Qe,ah=new ti,function(){var t=["a","b","c"];this.object.updateMatrixWorld(!0),ah.getNormalMatrix(this.object.matrixWorld);var e=this.object.matrixWorld,i=this.geometry.attributes.position,r=this.object.geometry;if(r&&r.isGeometry)for(var n=r.vertices,o=r.faces,a=0,s=0,c=o.length;s<c;s++)for(var u=o[s],h=0,l=u.vertexNormals.length;h<l;h++){var p=n[u[t[h]]],d=u.vertexNormals[h];nh.copy(p).applyMatrix4(e),oh.copy(d).applyMatrix3(ah).normalize().multiplyScalar(this.size).add(nh),i.setXYZ(a,nh.x,nh.y,nh.z),a+=1,i.setXYZ(a,oh.x,oh.y,oh.z),a+=1}else if(r&&r.isBufferGeometry){var f=r.attributes.position,m=r.attributes.normal;for(h=a=0,l=f.count;h<l;h++)nh.set(f.getX(h),f.getY(h),f.getZ(h)).applyMatrix4(e),oh.set(m.getX(h),m.getY(h),m.getZ(h)),oh.applyMatrix3(ah).normalize().multiplyScalar(this.size).add(nh),i.setXYZ(a,nh.x,nh.y,nh.z),a+=1,i.setXYZ(a,oh.x,oh.y,oh.z),a+=1}i.needsUpdate=!0}),((Vh.prototype=Object.create(or.prototype)).constructor=Vh).prototype.dispose=function(){this.cone.geometry.dispose(),this.cone.material.dispose()},Vh.prototype.update=(sh=new Qe,ch=new Qe,function(){this.light.updateMatrixWorld();var t=this.light.distance?this.light.distance:1e3,e=t*Math.tan(this.light.angle);this.cone.scale.set(e,e,t),sh.setFromMatrixPosition(this.light.matrixWorld),ch.setFromMatrixPosition(this.light.target.matrixWorld),this.cone.lookAt(ch.sub(sh)),void 0!==this.color?this.cone.material.color.set(this.color):this.cone.material.color.copy(this.light.color)}),((Hh.prototype=Object.create(Ra.prototype)).constructor=Hh).prototype.updateMatrixWorld=(uh=new Qe,hh=new Ke,lh=new Ke,function(t){var e=this.bones,i=this.geometry,r=i.getAttribute("position");lh.getInverse(this.root.matrixWorld);for(var n=0,o=0;n<e.length;n++){var a=e[n];a.parent&&a.parent.isBone&&(hh.multiplyMatrices(lh,a.matrixWorld),uh.setFromMatrixPosition(hh),r.setXYZ(o,uh.x,uh.y,uh.z),hh.multiplyMatrices(lh,a.parent.matrixWorld),uh.setFromMatrixPosition(hh),r.setXYZ(o+1,uh.x,uh.y,uh.z),o+=2)}i.getAttribute("position").needsUpdate=!0,or.prototype.updateMatrixWorld.call(this,t)}),(($h.prototype=Object.create(An.prototype)).constructor=$h).prototype.dispose=function(){this.geometry.dispose(),this.material.dispose()},$h.prototype.update=function(){void 0!==this.color?this.material.color.set(this.color):this.material.color.copy(this.light.color)},((Wh.prototype=Object.create(or.prototype)).constructor=Wh).prototype.dispose=function(){this.children[0].geometry.dispose(),this.children[0].material.dispose()},Wh.prototype.update=function(){var t=.5*this.light.width,e=.5*this.light.height,i=this.line.geometry.attributes.position,r=i.array;r[0]=t,r[1]=-e,r[2]=0,r[3]=t,r[4]=e,r[5]=0,r[6]=-t,r[7]=e,r[8]=0,r[9]=-t,r[10]=-e,r[11]=0,r[12]=t,r[13]=-e,r[14]=0,i.needsUpdate=!0,void 0!==this.color?this.line.material.color.set(this.color):this.line.material.color.copy(this.light.color)},((Xh.prototype=Object.create(or.prototype)).constructor=Xh).prototype.dispose=function(){this.children[0].geometry.dispose(),this.children[0].material.dispose()},Xh.prototype.update=(ph=new Qe,dh=new Li,fh=new Li,function(){var t=this.children[0];if(void 0!==this.color)this.material.color.set(this.color);else{var e=t.geometry.getAttribute("color");dh.copy(this.light.color),fh.copy(this.light.groundColor);for(var i=0,r=e.count;i<r;i++){var n=i<r/2?dh:fh;e.setXYZ(i,n.r,n.g,n.b)}e.needsUpdate=!0}t.lookAt(ph.setFromMatrixPosition(this.light.matrixWorld).negate())}),(qh.prototype=Object.create(Ra.prototype)).constructor=qh,(Yh.prototype=Object.create(Ra.prototype)).constructor=Yh,((Zh.prototype=Object.create(Ra.prototype)).constructor=Zh).prototype.update=(mh=new Qe,gh=new Qe,vh=new ti,function(){this.object.updateMatrixWorld(!0),vh.getNormalMatrix(this.object.matrixWorld);for(var t=this.object.matrixWorld,e=this.geometry.attributes.position,i=this.object.geometry,r=i.vertices,n=i.faces,o=0,a=0,s=n.length;a<s;a++){var c=n[a],u=c.normal;mh.copy(r[c.a]).add(r[c.b]).add(r[c.c]).divideScalar(3).applyMatrix4(t),gh.copy(u).applyMatrix3(vh).normalize().multiplyScalar(this.size).add(mh),e.setXYZ(o,mh.x,mh.y,mh.z),o+=1,e.setXYZ(o,gh.x,gh.y,gh.z),o+=1}e.needsUpdate=!0}),((Kh.prototype=Object.create(or.prototype)).constructor=Kh).prototype.dispose=function(){this.lightPlane.geometry.dispose(),this.lightPlane.material.dispose(),this.targetLine.geometry.dispose(),this.targetLine.material.dispose()},Kh.prototype.update=(yh=new Qe,bh=new Qe,xh=new Qe,function(){yh.setFromMatrixPosition(this.light.matrixWorld),bh.setFromMatrixPosition(this.light.target.matrixWorld),xh.subVectors(bh,yh),this.lightPlane.lookAt(xh),void 0!==this.color?(this.lightPlane.material.color.set(this.color),this.targetLine.material.color.set(this.color)):(this.lightPlane.material.color.copy(this.light.color),this.targetLine.material.color.copy(this.light.color)),this.targetLine.lookAt(xh),this.targetLine.scale.z=xh.length()}),((Jh.prototype=Object.create(Ra.prototype)).constructor=Jh).prototype.update=function(){var c,u,h=new Qe,l=new ar;function t(t,e,i,r){h.set(e,i,r).unproject(l);var n=u[t];if(void 0!==n)for(var o=c.getAttribute("position"),a=0,s=n.length;a<s;a++)o.setXYZ(n[a],h.x,h.y,h.z)}return function(){c=this.geometry,u=this.pointMap;l.projectionMatrix.copy(this.camera.projectionMatrix),t("c",0,0,-1),t("t",0,0,1),t("n1",-1,-1,-1),t("n2",1,-1,-1),t("n3",-1,1,-1),t("n4",1,1,-1),t("f1",-1,-1,1),t("f2",1,-1,1),t("f3",-1,1,1),t("f4",1,1,1),t("u1",.7,1.1,-1),t("u2",-.7,1.1,-1),t("u3",0,2,-1),t("cf1",-1,0,1),t("cf2",1,0,1),t("cf3",0,-1,1),t("cf4",0,1,1),t("cn1",-1,0,-1),t("cn2",1,0,-1),t("cn3",0,-1,-1),t("cn4",0,1,-1),c.getAttribute("position").needsUpdate=!0}}(),((Qh.prototype=Object.create(Ra.prototype)).constructor=Qh).prototype.update=(_h=new Ai,function(t){if(void 0!==t&&console.warn("THREE.BoxHelper: .update() has no longer arguments."),void 0!==this.object&&_h.setFromObject(this.object),!_h.isEmpty()){var e=_h.min,i=_h.max,r=this.geometry.attributes.position,n=r.array;n[0]=i.x,n[1]=i.y,n[2]=i.z,n[3]=e.x,n[4]=i.y,n[5]=i.z,n[6]=e.x,n[7]=e.y,n[8]=i.z,n[9]=i.x,n[10]=e.y,n[11]=i.z,n[12]=i.x,n[13]=i.y,n[14]=e.z,n[15]=e.x,n[16]=i.y,n[17]=e.z,n[18]=e.x,n[19]=e.y,n[20]=e.z,n[21]=i.x,n[22]=e.y,n[23]=e.z,r.needsUpdate=!0,this.geometry.computeBoundingSphere()}}),Qh.prototype.setFromObject=function(t){return this.object=t,this.update(),this},((tl.prototype=Object.create(Ra.prototype)).constructor=tl).prototype.updateMatrixWorld=function(t){var e=this.box;e.isEmpty()||(e.getCenter(this.position),e.getSize(this.scale),this.scale.multiplyScalar(.5),or.prototype.updateMatrixWorld.call(this,t))},((el.prototype=Object.create(Ia.prototype)).constructor=el).prototype.updateMatrixWorld=function(t){var e=-this.plane.constant;Math.abs(e)<1e-8&&(e=1e-8),this.scale.set(.5*this.size,.5*this.size,e),this.lookAt(this.plane.normal),or.prototype.updateMatrixWorld.call(this,t)},((il.prototype=Object.create(or.prototype)).constructor=il).prototype.setDirection=(Mh=new Qe,function(t){.99999<t.y?this.quaternion.set(0,0,0,1):t.y<-.99999?this.quaternion.set(1,0,0,0):(Mh.set(t.z,0,-t.x).normalize(),Ah=Math.acos(t.y),this.quaternion.setFromAxisAngle(Mh,Ah))}),il.prototype.setLength=function(t,e,i){void 0===e&&(e=.2*t),void 0===i&&(i=.2*e),this.line.scale.set(1,Math.max(0,t-e),1),this.line.updateMatrix(),this.cone.scale.set(i,e,i),this.cone.position.y=t,this.cone.updateMatrix()},il.prototype.setColor=function(t){this.line.material.color.copy(t),this.cone.material.color.copy(t)},(rl.prototype=Object.create(Ra.prototype)).constructor=rl,dc.create=function(t,e){return console.log("THREE.Curve.create() has been deprecated"),t.prototype=Object.create(dc.prototype),(t.prototype.constructor=t).prototype.getPoint=e,t},Object.assign(Oc.prototype,{createPointsGeometry:function(t){console.warn("THREE.CurvePath: .createPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.");var e=this.getPoints(t);return this.createGeometry(e)},createSpacedPointsGeometry:function(t){console.warn("THREE.CurvePath: .createSpacedPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.");var e=this.getSpacedPoints(t);return this.createGeometry(e)},createGeometry:function(t){console.warn("THREE.CurvePath: .createGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.");for(var e=new vr,i=0,r=t.length;i<r;i++){var n=t[i];e.vertices.push(new Qe(n.x,n.y,n.z||0))}return e}}),Object.assign(Dc.prototype,{fromPoints:function(t){console.warn("THREE.Path: .fromPoints() has been renamed to .setFromPoints()."),this.setFromPoints(t)}}),nl.prototype=Object.create(_c.prototype),Object.assign(nl.prototype,{initFromArray:function(){console.error("THREE.Spline: .initFromArray() has been removed.")},getControlPointsArray:function(){console.error("THREE.Spline: .getControlPointsArray() has been removed.")},reparametrizeByArcLength:function(){console.error("THREE.Spline: .reparametrizeByArcLength() has been removed.")}}),qh.prototype.setColors=function(){console.error("THREE.GridHelper: setColors() has been deprecated, pass them in the constructor instead.")},Hh.prototype.update=function(){console.error("THREE.SkeletonHelper: update() no longer needs to be called.")},Object.assign(du.prototype,{extractUrlBase:function(t){return console.warn("THREE.Loader: .extractUrlBase() has been deprecated. Use THREE.LoaderUtils.extractUrlBase() instead."),fu(t)}}),Object.assign(Uh.prototype,{center:function(t){return console.warn("THREE.Box2: .center() has been renamed to .getCenter()."),this.getCenter(t)},empty:function(){return console.warn("THREE.Box2: .empty() has been renamed to .isEmpty()."),this.isEmpty()},isIntersectionBox:function(t){return console.warn("THREE.Box2: .isIntersectionBox() has been renamed to .intersectsBox()."),this.intersectsBox(t)},size:function(t){return console.warn("THREE.Box2: .size() has been renamed to .getSize()."),this.getSize(t)}}),Object.assign(Ai.prototype,{center:function(t){return console.warn("THREE.Box3: .center() has been renamed to .getCenter()."),this.getCenter(t)},empty:function(){return console.warn("THREE.Box3: .empty() has been renamed to .isEmpty()."),this.isEmpty()},isIntersectionBox:function(t){return console.warn("THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox()."),this.intersectsBox(t)},isIntersectionSphere:function(t){return console.warn("THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere()."),this.intersectsSphere(t)},size:function(t){return console.warn("THREE.Box3: .size() has been renamed to .getSize()."),this.getSize(t)}}),wn.prototype.center=function(t){return console.warn("THREE.Line3: .center() has been renamed to .getCenter()."),this.getCenter(t)},Object.assign(Ye,{random16:function(){return console.warn("THREE.Math: .random16() has been deprecated. Use Math.random() instead."),Math.random()},nearestPowerOfTwo:function(t){return console.warn("THREE.Math: .nearestPowerOfTwo() has been renamed to .floorPowerOfTwo()."),Ye.floorPowerOfTwo(t)},nextPowerOfTwo:function(t){return console.warn("THREE.Math: .nextPowerOfTwo() has been renamed to .ceilPowerOfTwo()."),Ye.ceilPowerOfTwo(t)}}),Object.assign(ti.prototype,{flattenToArrayOffset:function(t,e){return console.warn("THREE.Matrix3: .flattenToArrayOffset() has been deprecated. Use .toArray() instead."),this.toArray(t,e)},multiplyVector3:function(t){return console.warn("THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead."),t.applyMatrix3(this)},multiplyVector3Array:function(){console.error("THREE.Matrix3: .multiplyVector3Array() has been removed.")},applyToBuffer:function(t){return console.warn("THREE.Matrix3: .applyToBuffer() has been removed. Use matrix.applyToBufferAttribute( attribute ) instead."),this.applyToBufferAttribute(t)},applyToVector3Array:function(){console.error("THREE.Matrix3: .applyToVector3Array() has been removed.")}}),Object.assign(Ke.prototype,{extractPosition:function(t){return console.warn("THREE.Matrix4: .extractPosition() has been renamed to .copyPosition()."),this.copyPosition(t)},flattenToArrayOffset:function(t,e){return console.warn("THREE.Matrix4: .flattenToArrayOffset() has been deprecated. Use .toArray() instead."),this.toArray(t,e)},getPosition:function(){return void 0===Ph&&(Ph=new Qe),console.warn("THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead."),Ph.setFromMatrixColumn(this,3)},setRotationFromQuaternion:function(t){return console.warn("THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion()."),this.makeRotationFromQuaternion(t)},multiplyToArray:function(){console.warn("THREE.Matrix4: .multiplyToArray() has been removed.")},multiplyVector3:function(t){return console.warn("THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) instead."),t.applyMatrix4(this)},multiplyVector4:function(t){return console.warn("THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead."),t.applyMatrix4(this)},multiplyVector3Array:function(){console.error("THREE.Matrix4: .multiplyVector3Array() has been removed.")},rotateAxis:function(t){console.warn("THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead."),t.transformDirection(this)},crossVector:function(t){return console.warn("THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead."),t.applyMatrix4(this)},translate:function(){console.error("THREE.Matrix4: .translate() has been removed.")},rotateX:function(){console.error("THREE.Matrix4: .rotateX() has been removed.")},rotateY:function(){console.error("THREE.Matrix4: .rotateY() has been removed.")},rotateZ:function(){console.error("THREE.Matrix4: .rotateZ() has been removed.")},rotateByAxis:function(){console.error("THREE.Matrix4: .rotateByAxis() has been removed.")},applyToBuffer:function(t){return console.warn("THREE.Matrix4: .applyToBuffer() has been removed. Use matrix.applyToBufferAttribute( attribute ) instead."),this.applyToBufferAttribute(t)},applyToVector3Array:function(){console.error("THREE.Matrix4: .applyToVector3Array() has been removed.")},makeFrustum:function(t,e,i,r,n,o){return console.warn("THREE.Matrix4: .makeFrustum() has been removed. Use .makePerspective( left, right, top, bottom, near, far ) instead."),this.makePerspective(t,e,r,i,n,o)}}),Pi.prototype.isIntersectionLine=function(t){return console.warn("THREE.Plane: .isIntersectionLine() has been renamed to .intersectsLine()."),this.intersectsLine(t)},Je.prototype.multiplyVector3=function(t){return console.warn("THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead."),t.applyQuaternion(this)},Object.assign(_n.prototype,{isIntersectionBox:function(t){return console.warn("THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox()."),this.intersectsBox(t)},isIntersectionPlane:function(t){return console.warn("THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane()."),this.intersectsPlane(t)},isIntersectionSphere:function(t){return console.warn("THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere()."),this.intersectsSphere(t)}}),Object.assign(Sn.prototype,{area:function(){return console.warn("THREE.Triangle: .area() has been renamed to .getArea()."),this.getArea()},barycoordFromPoint:function(t,e){return console.warn("THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord()."),this.getBarycoord(t,e)},midpoint:function(t){return console.warn("THREE.Triangle: .midpoint() has been renamed to .getMidpoint()."),this.getMidpoint(t)},normal:function(t){return console.warn("THREE.Triangle: .normal() has been renamed to .getNormal()."),this.getNormal(t)},plane:function(t){return console.warn("THREE.Triangle: .plane() has been renamed to .getPlane()."),this.getPlane(t)}}),Object.assign(Sn,{barycoordFromPoint:function(t,e,i,r,n){return console.warn("THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord()."),Sn.getBarycoord(t,e,i,r,n)},normal:function(t,e,i,r){return console.warn("THREE.Triangle: .normal() has been renamed to .getNormal()."),Sn.getNormal(t,e,i,r)}}),Object.assign(kc.prototype,{extractAllPoints:function(t){return console.warn("THREE.Shape: .extractAllPoints() has been removed. Use .extractPoints() instead."),this.extractPoints(t)},extrude:function(t){return console.warn("THREE.Shape: .extrude() has been removed. Use ExtrudeGeometry() instead."),new Cs(this,t)},makeGeometry:function(t){return console.warn("THREE.Shape: .makeGeometry() has been removed. Use ShapeGeometry() instead."),new zs(this,t)}}),Object.assign(Ze.prototype,{fromAttribute:function(t,e,i){return console.warn("THREE.Vector2: .fromAttribute() has been renamed to .fromBufferAttribute()."),this.fromBufferAttribute(t,e,i)},distanceToManhattan:function(t){return console.warn("THREE.Vector2: .distanceToManhattan() has been renamed to .manhattanDistanceTo()."),this.manhattanDistanceTo(t)},lengthManhattan:function(){return console.warn("THREE.Vector2: .lengthManhattan() has been renamed to .manhattanLength()."),this.manhattanLength()}}),Object.assign(Qe.prototype,{setEulerFromRotationMatrix:function(){console.error("THREE.Vector3: .setEulerFromRotationMatrix() has been removed. Use Euler.setFromRotationMatrix() instead.")},setEulerFromQuaternion:function(){console.error("THREE.Vector3: .setEulerFromQuaternion() has been removed. Use Euler.setFromQuaternion() instead.")},getPositionFromMatrix:function(t){return console.warn("THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition()."),this.setFromMatrixPosition(t)},getScaleFromMatrix:function(t){return console.warn("THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale()."),this.setFromMatrixScale(t)},getColumnFromMatrix:function(t,e){return console.warn("THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn()."),this.setFromMatrixColumn(e,t)},applyProjection:function(t){return console.warn("THREE.Vector3: .applyProjection() has been removed. Use .applyMatrix4( m ) instead."),this.applyMatrix4(t)},fromAttribute:function(t,e,i){return console.warn("THREE.Vector3: .fromAttribute() has been renamed to .fromBufferAttribute()."),this.fromBufferAttribute(t,e,i)},distanceToManhattan:function(t){return console.warn("THREE.Vector3: .distanceToManhattan() has been renamed to .manhattanDistanceTo()."),this.manhattanDistanceTo(t)},lengthManhattan:function(){return console.warn("THREE.Vector3: .lengthManhattan() has been renamed to .manhattanLength()."),this.manhattanLength()}}),Object.assign(xi.prototype,{fromAttribute:function(t,e,i){return console.warn("THREE.Vector4: .fromAttribute() has been renamed to .fromBufferAttribute()."),this.fromBufferAttribute(t,e,i)},lengthManhattan:function(){return console.warn("THREE.Vector4: .lengthManhattan() has been renamed to .manhattanLength()."),this.manhattanLength()}}),Object.assign(vr.prototype,{computeTangents:function(){console.error("THREE.Geometry: .computeTangents() has been removed.")},computeLineDistances:function(){console.error("THREE.Geometry: .computeLineDistances() has been removed. Use THREE.Line.computeLineDistances() instead.")}}),Object.assign(or.prototype,{getChildByName:function(t){return console.warn("THREE.Object3D: .getChildByName() has been renamed to .getObjectByName()."),this.getObjectByName(t)},renderDepth:function(){console.warn("THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.")},translate:function(t,e){return console.warn("THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead."),this.translateOnAxis(e,t)},getWorldRotation:function(){console.error("THREE.Object3D: .getWorldRotation() has been removed. Use THREE.Object3D.getWorldQuaternion( target ) instead.")}}),Object.defineProperties(or.prototype,{eulerOrder:{get:function(){return console.warn("THREE.Object3D: .eulerOrder is now .rotation.order."),this.rotation.order},set:function(t){console.warn("THREE.Object3D: .eulerOrder is now .rotation.order."),this.rotation.order=t}},useQuaternion:{get:function(){console.warn("THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.")},set:function(){console.warn("THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.")}}}),Object.defineProperties(Ma.prototype,{objects:{get:function(){return console.warn("THREE.LOD: .objects has been renamed to .levels."),this.levels}}}),Object.defineProperty(Pa.prototype,"useVertexTexture",{get:function(){console.warn("THREE.Skeleton: useVertexTexture has been removed.")},set:function(){console.warn("THREE.Skeleton: useVertexTexture has been removed.")}}),Object.defineProperty(dc.prototype,"__arcLengthDivisions",{get:function(){return console.warn("THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions."),this.arcLengthDivisions},set:function(t){console.warn("THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions."),this.arcLengthDivisions=t}}),ga.prototype.setLens=function(t,e){console.warn("THREE.PerspectiveCamera.setLens is deprecated. Use .setFocalLength and .filmGauge for a photographic setup."),void 0!==e&&(this.filmGauge=e),this.setFocalLength(t)},Object.defineProperties(Bc.prototype,{onlyShadow:{set:function(){console.warn("THREE.Light: .onlyShadow has been removed.")}},shadowCameraFov:{set:function(t){console.warn("THREE.Light: .shadowCameraFov is now .shadow.camera.fov."),this.shadow.camera.fov=t}},shadowCameraLeft:{set:function(t){console.warn("THREE.Light: .shadowCameraLeft is now .shadow.camera.left."),this.shadow.camera.left=t}},shadowCameraRight:{set:function(t){console.warn("THREE.Light: .shadowCameraRight is now .shadow.camera.right."),this.shadow.camera.right=t}},shadowCameraTop:{set:function(t){console.warn("THREE.Light: .shadowCameraTop is now .shadow.camera.top."),this.shadow.camera.top=t}},shadowCameraBottom:{set:function(t){console.warn("THREE.Light: .shadowCameraBottom is now .shadow.camera.bottom."),this.shadow.camera.bottom=t}},shadowCameraNear:{set:function(t){console.warn("THREE.Light: .shadowCameraNear is now .shadow.camera.near."),this.shadow.camera.near=t}},shadowCameraFar:{set:function(t){console.warn("THREE.Light: .shadowCameraFar is now .shadow.camera.far."),this.shadow.camera.far=t}},shadowCameraVisible:{set:function(){console.warn("THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow.camera ) instead.")}},shadowBias:{set:function(t){console.warn("THREE.Light: .shadowBias is now .shadow.bias."),this.shadow.bias=t}},shadowDarkness:{set:function(){console.warn("THREE.Light: .shadowDarkness has been removed.")}},shadowMapWidth:{set:function(t){console.warn("THREE.Light: .shadowMapWidth is now .shadow.mapSize.width."),this.shadow.mapSize.width=t}},shadowMapHeight:{set:function(t){console.warn("THREE.Light: .shadowMapHeight is now .shadow.mapSize.height."),this.shadow.mapSize.height=t}}}),Object.defineProperties(yr.prototype,{length:{get:function(){return console.warn("THREE.BufferAttribute: .length has been deprecated. Use .count instead."),this.array.length}},copyIndicesArray:function(){console.error("THREE.BufferAttribute: .copyIndicesArray() has been removed.")}}),Object.assign(jr.prototype,{addIndex:function(t){console.warn("THREE.BufferGeometry: .addIndex() has been renamed to .setIndex()."),this.setIndex(t)},addDrawCall:function(t,e,i){void 0!==i&&console.warn("THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset."),console.warn("THREE.BufferGeometry: .addDrawCall() is now .addGroup()."),this.addGroup(t,e)},clearDrawCalls:function(){console.warn("THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups()."),this.clearGroups()},computeTangents:function(){console.warn("THREE.BufferGeometry: .computeTangents() has been removed.")},computeOffsets:function(){console.warn("THREE.BufferGeometry: .computeOffsets() has been removed.")}}),Object.defineProperties(jr.prototype,{drawcalls:{get:function(){return console.error("THREE.BufferGeometry: .drawcalls has been renamed to .groups."),this.groups}},offsets:{get:function(){return console.warn("THREE.BufferGeometry: .offsets has been renamed to .groups."),this.groups}}}),Object.assign(Ts.prototype,{getArrays:function(){console.error("THREE.ExtrudeBufferGeometry: .getArrays() has been removed.")},addShapeList:function(){console.error("THREE.ExtrudeBufferGeometry: .addShapeList() has been removed.")},addShape:function(){console.error("THREE.ExtrudeBufferGeometry: .addShape() has been removed.")}}),Object.defineProperties(Lh.prototype,{dynamic:{set:function(){console.warn("THREE.Uniform: .dynamic has been removed. Use object.onBeforeRender() instead.")}},onUpdate:{value:function(){return console.warn("THREE.Uniform: .onUpdate() has been removed. Use object.onBeforeRender() instead."),this}}}),Object.defineProperties(yn.prototype,{wrapAround:{get:function(){console.warn("THREE.Material: .wrapAround has been removed.")},set:function(){console.warn("THREE.Material: .wrapAround has been removed.")}},wrapRGB:{get:function(){return console.warn("THREE.Material: .wrapRGB has been removed."),new Li}},shading:{get:function(){console.error("THREE."+this.type+": .shading has been removed. Use the boolean .flatShading instead.")},set:function(t){console.warn("THREE."+this.type+": .shading has been removed. Use the boolean .flatShading instead."),this.flatShading=1===t}}}),Object.defineProperties(tc.prototype,{metal:{get:function(){return console.warn("THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead."),!1},set:function(){console.warn("THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead")}}}),Object.defineProperties(xn.prototype,{derivatives:{get:function(){return console.warn("THREE.ShaderMaterial: .derivatives has been moved to .extensions.derivatives."),this.extensions.derivatives},set:function(t){console.warn("THREE. ShaderMaterial: .derivatives has been moved to .extensions.derivatives."),this.extensions.derivatives=t}}}),Object.assign(ba.prototype,{getCurrentRenderTarget:function(){return console.warn("THREE.WebGLRenderer: .getCurrentRenderTarget() is now .getRenderTarget()."),this.getRenderTarget()},getMaxAnisotropy:function(){return console.warn("THREE.WebGLRenderer: .getMaxAnisotropy() is now .capabilities.getMaxAnisotropy()."),this.capabilities.getMaxAnisotropy()},getPrecision:function(){return console.warn("THREE.WebGLRenderer: .getPrecision() is now .capabilities.precision."),this.capabilities.precision},resetGLState:function(){return console.warn("THREE.WebGLRenderer: .resetGLState() is now .state.reset()."),this.state.reset()},supportsFloatTextures:function(){return console.warn("THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( 'OES_texture_float' )."),this.extensions.get("OES_texture_float")},supportsHalfFloatTextures:function(){return console.warn("THREE.WebGLRenderer: .supportsHalfFloatTextures() is now .extensions.get( 'OES_texture_half_float' )."),this.extensions.get("OES_texture_half_float")},supportsStandardDerivatives:function(){return console.warn("THREE.WebGLRenderer: .supportsStandardDerivatives() is now .extensions.get( 'OES_standard_derivatives' )."),this.extensions.get("OES_standard_derivatives")},supportsCompressedTextureS3TC:function(){return console.warn("THREE.WebGLRenderer: .supportsCompressedTextureS3TC() is now .extensions.get( 'WEBGL_compressed_texture_s3tc' )."),this.extensions.get("WEBGL_compressed_texture_s3tc")},supportsCompressedTexturePVRTC:function(){return console.warn("THREE.WebGLRenderer: .supportsCompressedTexturePVRTC() is now .extensions.get( 'WEBGL_compressed_texture_pvrtc' )."),this.extensions.get("WEBGL_compressed_texture_pvrtc")},supportsBlendMinMax:function(){return console.warn("THREE.WebGLRenderer: .supportsBlendMinMax() is now .extensions.get( 'EXT_blend_minmax' )."),this.extensions.get("EXT_blend_minmax")},supportsVertexTextures:function(){return console.warn("THREE.WebGLRenderer: .supportsVertexTextures() is now .capabilities.vertexTextures."),this.capabilities.vertexTextures},supportsInstancedArrays:function(){return console.warn("THREE.WebGLRenderer: .supportsInstancedArrays() is now .extensions.get( 'ANGLE_instanced_arrays' )."),this.extensions.get("ANGLE_instanced_arrays")},enableScissorTest:function(t){console.warn("THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest()."),this.setScissorTest(t)},initMaterial:function(){console.warn("THREE.WebGLRenderer: .initMaterial() has been removed.")},addPrePlugin:function(){console.warn("THREE.WebGLRenderer: .addPrePlugin() has been removed.")},addPostPlugin:function(){console.warn("THREE.WebGLRenderer: .addPostPlugin() has been removed.")},updateShadowMap:function(){console.warn("THREE.WebGLRenderer: .updateShadowMap() has been removed.")},setFaceCulling:function(){console.warn("THREE.WebGLRenderer: .setFaceCulling() has been removed.")}}),Object.defineProperties(ba.prototype,{shadowMapEnabled:{get:function(){return this.shadowMap.enabled},set:function(t){console.warn("THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled."),this.shadowMap.enabled=t}},shadowMapType:{get:function(){return this.shadowMap.type},set:function(t){console.warn("THREE.WebGLRenderer: .shadowMapType is now .shadowMap.type."),this.shadowMap.type=t}},shadowMapCullFace:{get:function(){console.warn("THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.")},set:function(){console.warn("THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.")}}}),Object.defineProperties(ha.prototype,{cullFace:{get:function(){console.warn("THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.")},set:function(){console.warn("THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.")}},renderReverseSided:{get:function(){console.warn("THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.")},set:function(){console.warn("THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.")}},renderSingleSided:{get:function(){console.warn("THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.")},set:function(){console.warn("THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.")}}}),Object.defineProperties(_i.prototype,{wrapS:{get:function(){return console.warn("THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS."),this.texture.wrapS},set:function(t){console.warn("THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS."),this.texture.wrapS=t}},wrapT:{get:function(){return console.warn("THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT."),this.texture.wrapT},set:function(t){console.warn("THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT."),this.texture.wrapT=t}},magFilter:{get:function(){return console.warn("THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter."),this.texture.magFilter},set:function(t){console.warn("THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter."),this.texture.magFilter=t}},minFilter:{get:function(){return console.warn("THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter."),this.texture.minFilter},set:function(t){console.warn("THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter."),this.texture.minFilter=t}},anisotropy:{get:function(){return console.warn("THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy."),this.texture.anisotropy},set:function(t){console.warn("THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy."),this.texture.anisotropy=t}},offset:{get:function(){return console.warn("THREE.WebGLRenderTarget: .offset is now .texture.offset."),this.texture.offset},set:function(t){console.warn("THREE.WebGLRenderTarget: .offset is now .texture.offset."),this.texture.offset=t}},repeat:{get:function(){return console.warn("THREE.WebGLRenderTarget: .repeat is now .texture.repeat."),this.texture.repeat},set:function(t){console.warn("THREE.WebGLRenderTarget: .repeat is now .texture.repeat."),this.texture.repeat=t}},format:{get:function(){return console.warn("THREE.WebGLRenderTarget: .format is now .texture.format."),this.texture.format},set:function(t){console.warn("THREE.WebGLRenderTarget: .format is now .texture.format."),this.texture.format=t}},type:{get:function(){return console.warn("THREE.WebGLRenderTarget: .type is now .texture.type."),this.texture.type},set:function(t){console.warn("THREE.WebGLRenderTarget: .type is now .texture.type."),this.texture.type=t}},generateMipmaps:{get:function(){return console.warn("THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps."),this.texture.generateMipmaps},set:function(t){console.warn("THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps."),this.texture.generateMipmaps=t}}}),Object.defineProperties(ya.prototype,{standing:{set:function(){console.warn("THREE.WebVRManager: .standing has been removed.")}}}),Vu.prototype.load=function(t){console.warn("THREE.Audio: .load has been deprecated. Use THREE.AudioLoader instead.");var e=this;return(new zu).load(t,function(t){e.setBuffer(t)}),this},$u.prototype.getData=function(){return console.warn("THREE.AudioAnalyser: .getData() is now .getFrequencyData()."),this.getFrequencyData()},ju.prototype.updateCubeMap=function(t,e){return console.warn("THREE.CubeCamera: .updateCubeMap() is now .update()."),this.update(t,e)};var El=function(t){this.name=t,this._dict={}},Cl={names:{configurable:!0}};function Tl(t){return.01745*t}El.prototype.add=function(t,e){this._dict[Pl(t)]=e},El.prototype.get=function(t){return this._dict[Pl(t)]},Cl.names.get=function(){return Object.keys(this._dict)},Object.defineProperties(El.prototype,Cl);var Il="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""),Rl=new Array(36);function Ll(){for(var t,e=0,i=0;i<36;i++)8===i||13===i||18===i||23===i?Rl[i]="-":14===i?Rl[i]="4":(e<=2&&(e=33554432+16777216*Math.random()|0),t=15&e,e>>=4,Rl[i]=Il[19===i?3&t|8:t]);return Rl.join("")}function Ol(t,e,i){return Math.max(e,Math.min(i,t))}function Dl(t){return Ol(t,0,100)}function kl(t,e,i){return t+(e-t)*i}function Bl(t,e,i,r,n,o){var a=(i-t)*o,s=(r-e)*o,c=n*n;return(2*e-2*i+a+s)*(n*c)+(-3*e+3*i-2*a-s)*c+a*n+e}function Nl(t,e,i){var r;return(i=Ol((i-(r=t))/(e-r),0,1))*i*(3-2*i)}var Fl="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function zl(t,e){return t(e={exports:{}},e.exports),e.exports}var Ul=zl(function(Et,Ct){(function(){var C,n,s,T,c,a,d,m,u,h,l,p,nt,I,f,r,t,i,e,ot,g,o,R,v,y,b,x,at,_,w,S,A,M,P,E,L,O,D,k,B,N,F,z,U,j,G,V,st,H,$,ct,W,X,q,ut,Y,Z,K,J,Q,tt,et,it,rt,ht,lt,pt,dt,ft,mt,gt,vt,yt,bt,xt,_t,wt,St,At,Mt,Pt=[].slice;_t=function(){var i,t,e,r,n;for(i={},r=0,t=(n="Boolean Number String Function Array Date RegExp Undefined Null".split(" ")).length;r<t;r++)e=n[r],i["[object "+e+"]"]=e.toLowerCase();return function(t){var e;return e=Object.prototype.toString.call(t),i[e]||"object"}}(),V=function(t,e,i){return null==e&&(e=0),null==i&&(i=1),t<e&&(t=e),i<t&&(t=i),t},wt=function(t){return 3<=t.length?Array.prototype.slice.call(t):t[0]},g=function(t){var e,i;for(t._clipped=!1,t._unclipped=t.slice(0),e=i=0;i<3;e=++i)e<3?((t[e]<0||255<t[e])&&(t._clipped=!0),t[e]<0&&(t[e]=0),255<t[e]&&(t[e]=255)):3===e&&(t[e]<0&&(t[e]=0),1<t[e]&&(t[e]=1));return t._clipped||delete t._unclipped,t},T=Math.PI,gt=Math.round,R=Math.cos,at=Math.floor,ut=Math.pow,st=Math.log,yt=Math.sin,bt=Math.sqrt,I=Math.atan2,ct=Math.max,nt=Math.abs,d=2*T,c=T/3,n=T/180,a=180/T,(ot=function(){return arguments[0]instanceof C?arguments[0]:function(t,e,i){i.prototype=t.prototype;var r=new i,n=t.apply(r,e);return Object(n)===n?n:r}(C,arguments,function(){})}).default=ot,p=[],null!==Et&&null!=Et.exports&&(Et.exports=ot),((null!==Ct?Ct:this).chroma=ot).version="1.3.7",l={},h=!(u=[]),C=function(){function t(){var t,e,i,r,n,o,a,s,c=arguments;for(this,e=[],a=0,r=arguments.length;a<r;a++)null!=(t=c[a])&&e.push(t);if(1<e.length&&(o=e[e.length-1]),null!=l[o])this._rgb=g(l[o](wt(e.slice(0,-1))));else{for(h||(u=u.sort(function(t,e){return e.p-t.p}),h=!0),s=0,n=u.length;s<n&&!(o=(i=u[s]).test.apply(i,e));s++);o&&(this._rgb=g(l[o].apply(l,e)))}null==this._rgb&&console.warn("unknown format: "+e),null==this._rgb&&(this._rgb=[0,0,0]),3===this._rgb.length&&this._rgb.push(1)}return t.prototype.toString=function(){return this.hex()},t.prototype.clone=function(){return ot(me._rgb)},t}(),ot._input=l,ot.brewer=i={OrRd:["#fff7ec","#fee8c8","#fdd49e","#fdbb84","#fc8d59","#ef6548","#d7301f","#b30000","#7f0000"],PuBu:["#fff7fb","#ece7f2","#d0d1e6","#a6bddb","#74a9cf","#3690c0","#0570b0","#045a8d","#023858"],BuPu:["#f7fcfd","#e0ecf4","#bfd3e6","#9ebcda","#8c96c6","#8c6bb1","#88419d","#810f7c","#4d004b"],Oranges:["#fff5eb","#fee6ce","#fdd0a2","#fdae6b","#fd8d3c","#f16913","#d94801","#a63603","#7f2704"],BuGn:["#f7fcfd","#e5f5f9","#ccece6","#99d8c9","#66c2a4","#41ae76","#238b45","#006d2c","#00441b"],YlOrBr:["#ffffe5","#fff7bc","#fee391","#fec44f","#fe9929","#ec7014","#cc4c02","#993404","#662506"],YlGn:["#ffffe5","#f7fcb9","#d9f0a3","#addd8e","#78c679","#41ab5d","#238443","#006837","#004529"],Reds:["#fff5f0","#fee0d2","#fcbba1","#fc9272","#fb6a4a","#ef3b2c","#cb181d","#a50f15","#67000d"],RdPu:["#fff7f3","#fde0dd","#fcc5c0","#fa9fb5","#f768a1","#dd3497","#ae017e","#7a0177","#49006a"],Greens:["#f7fcf5","#e5f5e0","#c7e9c0","#a1d99b","#74c476","#41ab5d","#238b45","#006d2c","#00441b"],YlGnBu:["#ffffd9","#edf8b1","#c7e9b4","#7fcdbb","#41b6c4","#1d91c0","#225ea8","#253494","#081d58"],Purples:["#fcfbfd","#efedf5","#dadaeb","#bcbddc","#9e9ac8","#807dba","#6a51a3","#54278f","#3f007d"],GnBu:["#f7fcf0","#e0f3db","#ccebc5","#a8ddb5","#7bccc4","#4eb3d3","#2b8cbe","#0868ac","#084081"],Greys:["#ffffff","#f0f0f0","#d9d9d9","#bdbdbd","#969696","#737373","#525252","#252525","#000000"],YlOrRd:["#ffffcc","#ffeda0","#fed976","#feb24c","#fd8d3c","#fc4e2a","#e31a1c","#bd0026","#800026"],PuRd:["#f7f4f9","#e7e1ef","#d4b9da","#c994c7","#df65b0","#e7298a","#ce1256","#980043","#67001f"],Blues:["#f7fbff","#deebf7","#c6dbef","#9ecae1","#6baed6","#4292c6","#2171b5","#08519c","#08306b"],PuBuGn:["#fff7fb","#ece2f0","#d0d1e6","#a6bddb","#67a9cf","#3690c0","#02818a","#016c59","#014636"],Viridis:["#440154","#482777","#3f4a8a","#31678e","#26838f","#1f9d8a","#6cce5a","#b6de2b","#fee825"],Spectral:["#9e0142","#d53e4f","#f46d43","#fdae61","#fee08b","#ffffbf","#e6f598","#abdda4","#66c2a5","#3288bd","#5e4fa2"],RdYlGn:["#a50026","#d73027","#f46d43","#fdae61","#fee08b","#ffffbf","#d9ef8b","#a6d96a","#66bd63","#1a9850","#006837"],RdBu:["#67001f","#b2182b","#d6604d","#f4a582","#fddbc7","#f7f7f7","#d1e5f0","#92c5de","#4393c3","#2166ac","#053061"],PiYG:["#8e0152","#c51b7d","#de77ae","#f1b6da","#fde0ef","#f7f7f7","#e6f5d0","#b8e186","#7fbc41","#4d9221","#276419"],PRGn:["#40004b","#762a83","#9970ab","#c2a5cf","#e7d4e8","#f7f7f7","#d9f0d3","#a6dba0","#5aae61","#1b7837","#00441b"],RdYlBu:["#a50026","#d73027","#f46d43","#fdae61","#fee090","#ffffbf","#e0f3f8","#abd9e9","#74add1","#4575b4","#313695"],BrBG:["#543005","#8c510a","#bf812d","#dfc27d","#f6e8c3","#f5f5f5","#c7eae5","#80cdc1","#35978f","#01665e","#003c30"],RdGy:["#67001f","#b2182b","#d6604d","#f4a582","#fddbc7","#ffffff","#e0e0e0","#bababa","#878787","#4d4d4d","#1a1a1a"],PuOr:["#7f3b08","#b35806","#e08214","#fdb863","#fee0b6","#f7f7f7","#d8daeb","#b2abd2","#8073ac","#542788","#2d004b"],Set2:["#66c2a5","#fc8d62","#8da0cb","#e78ac3","#a6d854","#ffd92f","#e5c494","#b3b3b3"],Accent:["#7fc97f","#beaed4","#fdc086","#ffff99","#386cb0","#f0027f","#bf5b17","#666666"],Set1:["#e41a1c","#377eb8","#4daf4a","#984ea3","#ff7f00","#ffff33","#a65628","#f781bf","#999999"],Set3:["#8dd3c7","#ffffb3","#bebada","#fb8072","#80b1d3","#fdb462","#b3de69","#fccde5","#d9d9d9","#bc80bd","#ccebc5","#ffed6f"],Dark2:["#1b9e77","#d95f02","#7570b3","#e7298a","#66a61e","#e6ab02","#a6761d","#666666"],Paired:["#a6cee3","#1f78b4","#b2df8a","#33a02c","#fb9a99","#e31a1c","#fdbf6f","#ff7f00","#cab2d6","#6a3d9a","#ffff99","#b15928"],Pastel2:["#b3e2cd","#fdcdac","#cbd5e8","#f4cae4","#e6f5c9","#fff2ae","#f1e2cc","#cccccc"],Pastel1:["#fbb4ae","#b3cde3","#ccebc5","#decbe4","#fed9a6","#ffffcc","#e5d8bd","#fddaec","#f2f2f2"]},function(){var t,e;for(t in e=[],i)e.push(i[t.toLowerCase()]=i[t])}(),ot.colors=St={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflower:"#6495ed",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",laserlemon:"#ffff54",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrod:"#fafad2",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",maroon2:"#7f0000",maroon3:"#b03060",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",purple2:"#7f007f",purple3:"#a020f0",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},F=function(){var t,e,i,r,n,o,a;return r=(e=wt(arguments))[0],t=e[1],i=e[2],o=(r+16)/116,n=isNaN(t)?o:o+t/500,a=isNaN(i)?o:o-i/200,o=s.Yn*z(o),n=s.Xn*z(n),a=s.Zn*z(a),[Mt(3.2404542*n-1.5371385*o-.4985314*a),Mt(-.969266*n+1.8760108*o+.041556*a),i=Mt(.0556434*n-.2040259*o+1.0572252*a),3<e.length?e[3]:1]},Mt=function(t){return 255*(t<=.00304?12.92*t:1.055*ut(t,1/2.4)-.055)},z=function(t){return t>s.t1?t*t*t:s.t2*(t-s.t0)},s={Kn:18,Xn:.95047,Yn:1,Zn:1.08883,t0:.137931034,t1:.206896552,t2:.12841855,t3:.008856452},it=function(){var t,e,i,r,n,o,a;return i=(r=wt(arguments))[0],e=r[1],t=r[2],o=(n=dt(i,e,t))[0],[116*(a=n[1])-16,500*(o-a),200*(a-n[2])]},ft=function(t){return(t/=255)<=.04045?t/12.92:ut((t+.055)/1.055,2.4)},At=function(t){return t>s.t3?ut(t,1/3):t/s.t2+s.t0},dt=function(){var t,e,i,r;return i=(r=wt(arguments))[0],e=r[1],t=r[2],i=ft(i),e=ft(e),t=ft(t),[At((.4124564*i+.3575761*e+.1804375*t)/s.Xn),At((.2126729*i+.7151522*e+.072175*t)/s.Yn),At((.0193339*i+.119192*e+.9503041*t)/s.Zn)]},ot.lab=function(){return function(t,e,i){i.prototype=t.prototype;var r=new i,n=t.apply(r,e);return Object(n)===n?n:r}(C,Pt.call(arguments).concat(["lab"]),function(){})},l.lab=F,C.prototype.lab=function(){return it(this._rgb)},f=function(r){var t,e,i,n,o,a,s,c,u,h,l;return 2===(r=function(){var t,e,i;for(i=[],e=0,t=r.length;e<t;e++)n=r[e],i.push(ot(n));return i}()).length?(u=function(){var t,e,i;for(i=[],e=0,t=r.length;e<t;e++)n=r[e],i.push(n.lab());return i}(),o=u[0],a=u[1],t=function(i){var r,t;return t=function(){var t,e;for(e=[],r=t=0;t<=2;r=++t)e.push(o[r]+i*(a[r]-o[r]));return e}(),ot.lab.apply(ot,t)}):3===r.length?(h=function(){var t,e,i;for(i=[],e=0,t=r.length;e<t;e++)n=r[e],i.push(n.lab());return i}(),o=h[0],a=h[1],s=h[2],t=function(i){var r,t;return t=function(){var t,e;for(e=[],r=t=0;t<=2;r=++t)e.push((1-i)*(1-i)*o[r]+2*(1-i)*i*a[r]+i*i*s[r]);return e}(),ot.lab.apply(ot,t)}):4===r.length?(l=function(){var t,e,i;for(i=[],e=0,t=r.length;e<t;e++)n=r[e],i.push(n.lab());return i}(),o=l[0],a=l[1],s=l[2],c=l[3],t=function(i){var r,t;return t=function(){var t,e;for(e=[],r=t=0;t<=2;r=++t)e.push((1-i)*(1-i)*(1-i)*o[r]+3*(1-i)*(1-i)*i*a[r]+3*(1-i)*i*i*s[r]+i*i*i*c[r]);return e}(),ot.lab.apply(ot,t)}):5===r.length&&(e=f(r.slice(0,3)),i=f(r.slice(2,5)),t=function(t){return t<.5?e(2*t):i(2*(t-.5))}),t},ot.bezier=function(t){var e;return(e=f(t)).scale=function(){return ot.scale(e)},e},ot.cubehelix=function(a,s,c,u,h){var l,p,e;return null==a&&(a=300),null==s&&(s=-1.5),null==c&&(c=1),null==u&&(u=1),null==h&&(h=[0,1]),l=0,"array"===_t(h)?p=h[1]-h[0]:(p=0,h=[h,h]),(e=function(t){var e,i,r,n,o;return e=d*((a+120)/360+s*t),n=ut(h[0]+p*t,u),i=(0!==l?c[0]+t*l:c)*n*(1-n)/2,r=R(e),o=yt(e),ot(g([255*(n+i*(-.14861*r+1.78277*o)),255*(n+i*(-.29227*r-.90649*o)),255*(n+i*(1.97294*r))]))}).start=function(t){return null==t?a:(a=t,e)},e.rotations=function(t){return null==t?s:(s=t,e)},e.gamma=function(t){return null==t?u:(u=t,e)},e.hue=function(t){return null==t?c:("array"===_t(c=t)?0===(l=c[1]-c[0])&&(c=c[1]):l=0,e)},e.lightness=function(t){return null==t?h:("array"===_t(t)?p=(h=t)[1]-t[0]:(h=[t,t],p=0),e)},e.scale=function(){return ot.scale(e)},e.hue(c),e},ot.random=function(){var t,e;for("0123456789abcdef",t="#",e=0;e<6;++e)t+="0123456789abcdef".charAt(at(16*Math.random()));return new C(t)},p=[],E=function(t,e,i,r){var n,o,a,s;for(null==i&&(i=.5),null==r&&(r="rgb"),"object"!==_t(t)&&(t=ot(t)),"object"!==_t(e)&&(e=ot(e)),a=0,o=p.length;a<o;a++)if(r===(n=p[a])[0]){s=n[1](t,e,i,r);break}if(null==s)throw"color mode "+r+" is not supported";return s.alpha(t.alpha()+i*(e.alpha()-t.alpha()))},ot.interpolate=E,C.prototype.interpolate=function(t,e,i){return E(this,t,e,i)},ot.mix=E,C.prototype.mix=C.prototype.interpolate,l.rgb=function(){var t,e,i,r;for(t in i=[],e=wt(arguments))r=e[t],i.push(r);return i},ot.rgb=function(){return function(t,e,i){i.prototype=t.prototype;var r=new i,n=t.apply(r,e);return Object(n)===n?n:r}(C,Pt.call(arguments).concat(["rgb"]),function(){})},C.prototype.rgb=function(t){return null==t&&(t=!0),t?this._rgb.map(Math.round).slice(0,3):this._rgb.slice(0,3)},C.prototype.rgba=function(t){return null==t&&(t=!0),t?[Math.round(this._rgb[0]),Math.round(this._rgb[1]),Math.round(this._rgb[2]),this._rgb[3]]:this._rgb.slice(0)},u.push({p:3,test:function(t){var e;return e=wt(arguments),"array"===_t(e)&&3===e.length?"rgb":4===e.length&&"number"===_t(e[3])&&0<=e[3]&&e[3]<=1?"rgb":void 0}}),l.lrgb=l.rgb,D=function(t,e,i,r){var n,o;return n=t._rgb,o=e._rgb,new C(bt(ut(n[0],2)*(1-i)+ut(o[0],2)*i),bt(ut(n[1],2)*(1-i)+ut(o[1],2)*i),bt(ut(n[2],2)*(1-i)+ut(o[2],2)*i),r)},m=function(t){var e,i,r,n,o;for(e=1/t.length,o=[0,0,0,0],r=0,i=t.length;r<i;r++)n=t[r]._rgb,o[0]+=ut(n[0],2)*e,o[1]+=ut(n[1],2)*e,o[2]+=ut(n[2],2)*e,o[3]+=n[3]*e;return o[0]=bt(o[0]),o[1]=bt(o[1]),o[2]=bt(o[2]),new C(o)},p.push(["lrgb",D]),ot.average=function(t,e){var i,r,n,o,a,s,c,u,h,l,p,d,f;if(null==e&&(e="rgb"),h=t.length,c=(t=t.map(function(t){return ot(t)})).splice(0,1)[0],"lrgb"===e)return m(t);for(u in o=[],s=a=0,d=c.get(e))d[u]=d[u]||0,o.push(isNaN(d[u])?0:1),"h"!==e.charAt(u)||isNaN(d[u])||(i=d[u]/180*T,a+=R(i),s+=yt(i));for(r=c.alpha(),p=0,l=t.length;p<l;p++)for(u in f=(n=t[p]).get(e),r+=n.alpha(),d)isNaN(f[u])||(o[u]+=1,"h"===e.charAt(u)?(i=f[u]/180*T,a+=R(i),s+=yt(i)):d[u]+=f[u]);for(u in d)if("h"===e.charAt(u)){for(i=I(s/o[u],a/o[u])/T*180;i<0;)i+=360;for(;360<=i;)i-=360;d[u]=i}else d[u]=d[u]/o[u];return ot(d,e).alpha(r/h)},w=function(t){var e,i;if(t.match(/^#?([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/))return 4!==t.length&&7!==t.length||(t=t.substr(1)),3===t.length&&(t=(t=t.split(""))[0]+t[0]+t[1]+t[1]+t[2]+t[2]),[(i=parseInt(t,16))>>16,i>>8&255,255&i,1];if(t.match(/^#?([A-Fa-f0-9]{8})$/))return 9===t.length&&(t=t.substr(1)),[(i=parseInt(t,16))>>24&255,i>>16&255,i>>8&255,gt((255&i)/255*100)/100];if(null!=l.css&&(e=l.css(t)))return e;throw"unknown color: "+t},J=function(t,e){var i,r,n,o,a,s;return null==e&&(e="rgb"),a=t[0],n=t[1],r=t[2],i=t[3],a=Math.round(a),n=Math.round(n),r=Math.round(r),s=(s="000000"+(a<<16|n<<8|r).toString(16)).substr(s.length-6),o=(o="0"+gt(255*i).toString(16)).substr(o.length-2),"#"+function(){switch(e.toLowerCase()){case"rgba":return s+o;case"argb":return o+s;default:return s}}()},l.hex=function(t){return w(t)},ot.hex=function(){return function(t,e,i){i.prototype=t.prototype;var r=new i,n=t.apply(r,e);return Object(n)===n?n:r}(C,Pt.call(arguments).concat(["hex"]),function(){})},C.prototype.hex=function(t){return null==t&&(t="rgb"),J(this._rgb,t)},u.push({p:4,test:function(t){if(1===arguments.length&&"string"===_t(t))return"hex"}}),M=function(){var t,e,i,r,n,o,a,s,c,u,h,l,p,d;if(n=(t=wt(arguments))[0],h=t[1],a=t[2],0===h)c=r=e=255*a;else{for(i=[0,0,0],l=2*a-(p=a<.5?a*(1+h):a+h-a*h),(d=[0,0,0])[0]=(n/=360)+1/3,d[1]=n,d[2]=n-1/3,o=s=0;s<=2;o=++s)d[o]<0&&(d[o]+=1),1<d[o]&&(d[o]-=1),6*d[o]<1?i[o]=l+6*(p-l)*d[o]:2*d[o]<1?i[o]=p:3*d[o]<2?i[o]=l+(p-l)*(2/3-d[o])*6:i[o]=l;c=(u=[gt(255*i[0]),gt(255*i[1]),gt(255*i[2])])[0],r=u[1],e=u[2]}return 3<t.length?[c,r,e,t[3]]:[c,r,e]},tt=function(t,e,i){var r,n,o,a,s;return void 0!==t&&3<=t.length&&(t=(a=t)[0],e=a[1],i=a[2]),t/=255,e/=255,i/=255,o=Math.min(t,e,i),n=((ct=Math.max(t,e,i))+o)/2,ct===o?(s=0,r=Number.NaN):s=n<.5?(ct-o)/(ct+o):(ct-o)/(2-ct-o),t===ct?r=(e-i)/(ct-o):e===ct?r=2+(i-t)/(ct-o):i===ct&&(r=4+(t-e)/(ct-o)),(r*=60)<0&&(r+=360),[r,s,n]},ot.hsl=function(){return function(t,e,i){i.prototype=t.prototype;var r=new i,n=t.apply(r,e);return Object(n)===n?n:r}(C,Pt.call(arguments).concat(["hsl"]),function(){})},l.hsl=M,C.prototype.hsl=function(){return tt(this._rgb)},P=function(){var t,e,i,r,n,o,a,s,c,u,h,l,p,d,f,m,g,v;if(n=(t=wt(arguments))[0],m=t[1],v=t[2],v*=255,0===m)c=r=e=v;else switch(360===n&&(n=0),360<n&&(n-=360),n<0&&(n+=360),a=v*(1-m),s=v*(1-m*(i=(n/=60)-(o=at(n)))),g=v*(1-m*(1-i)),o){case 0:c=(u=[v,g,a])[0],r=u[1],e=u[2];break;case 1:c=(h=[s,v,a])[0],r=h[1],e=h[2];break;case 2:c=(l=[a,v,g])[0],r=l[1],e=l[2];break;case 3:c=(p=[a,s,v])[0],r=p[1],e=p[2];break;case 4:c=(d=[g,a,v])[0],r=d[1],e=d[2];break;case 5:c=(f=[v,a,s])[0],r=f[1],e=f[2]}return[c,r,e,3<t.length?t[3]:1]},et=function(){var t,e,i,r,n,o,a,s,c;return o=(a=wt(arguments))[0],i=a[1],t=a[2],n=Math.min(o,i,t),e=(ct=Math.max(o,i,t))-n,c=ct/255,0===ct?(r=Number.NaN,s=0):(s=e/ct,o===ct&&(r=(i-t)/e),i===ct&&(r=2+(t-o)/e),t===ct&&(r=4+(o-i)/e),(r*=60)<0&&(r+=360)),[r,s,c]},ot.hsv=function(){return function(t,e,i){i.prototype=t.prototype;var r=new i,n=t.apply(r,e);return Object(n)===n?n:r}(C,Pt.call(arguments).concat(["hsv"]),function(){})},l.hsv=P,C.prototype.hsv=function(){return et(this._rgb)},X=function(t){return"number"===_t(t)&&0<=t&&t<=16777215?[t>>16,t>>8&255,255&t,1]:(console.warn("unknown num color: "+t),[0,0,0,1])},lt=function(){var t;return((t=wt(arguments))[0]<<16)+(t[1]<<8)+t[2]},ot.num=function(t){return new C(t,"num")},C.prototype.num=function(t){return null==t&&(t="rgb"),lt(this._rgb,t)},l.num=X,u.push({p:1,test:function(t){if(1===arguments.length&&"number"===_t(t)&&0<=t&&t<=16777215)return"num"}}),_=function(){var t,e,i,r,n,o,a,s,c,u,h,l,p,d,f,m,g,v,y,b;if(s=(i=wt(arguments))[0],n=i[1],e=i[2],a=a/100*255,t=255*(n/=100),0===n)l=a=r=e;else switch(360===s&&(s=0),360<s&&(s-=360),s<0&&(s+=360),h=(u=e*(1-n))+t*(1-(o=(s/=60)-(c=at(s)))),y=u+t*o,b=u+t,c){case 0:l=(p=[b,y,u])[0],a=p[1],r=p[2];break;case 1:l=(d=[h,b,u])[0],a=d[1],r=d[2];break;case 2:l=(f=[u,b,y])[0],a=f[1],r=f[2];break;case 3:l=(m=[u,h,b])[0],a=m[1],r=m[2];break;case 4:l=(g=[y,u,b])[0],a=g[1],r=g[2];break;case 5:l=(v=[b,u,h])[0],a=v[1],r=v[2]}return[l,a,r,3<i.length?i[3]:1]},K=function(){var t,e,i,r,n,o,a,s,c;return s=(c=wt(arguments))[0],n=c[1],e=c[2],a=Math.min(s,n,e),i=100*(r=(ct=Math.max(s,n,e))-a)/255,t=a/(255-r)*100,0===r?o=Number.NaN:(s===ct&&(o=(n-e)/r),n===ct&&(o=2+(e-s)/r),e===ct&&(o=4+(s-n)/r),(o*=60)<0&&(o+=360)),[o,i,t]},ot.hcg=function(){return function(t,e,i){i.prototype=t.prototype;var r=new i,n=t.apply(r,e);return Object(n)===n?n:r}(C,Pt.call(arguments).concat(["hcg"]),function(){})},l.hcg=_,C.prototype.hcg=function(){return K(this._rgb)},v=function(t){var e,i,r,n,o,a,s,c;if(t=t.toLowerCase(),null!=ot.colors&&ot.colors[t])return w(ot.colors[t]);if(o=t.match(/rgb\(\s*(\-?\d+),\s*(\-?\d+)\s*,\s*(\-?\d+)\s*\)/)){for(s=o.slice(1,4),n=a=0;a<=2;n=++a)s[n]=+s[n];s[3]=1}else if(o=t.match(/rgba\(\s*(\-?\d+),\s*(\-?\d+)\s*,\s*(\-?\d+)\s*,\s*([01]|[01]?\.\d+)\)/))for(s=o.slice(1,5),n=c=0;c<=3;n=++c)s[n]=+s[n];else if(o=t.match(/rgb\(\s*(\-?\d+(?:\.\d+)?)%,\s*(\-?\d+(?:\.\d+)?)%\s*,\s*(\-?\d+(?:\.\d+)?)%\s*\)/)){for(s=o.slice(1,4),n=e=0;e<=2;n=++e)s[n]=gt(2.55*s[n]);s[3]=1}else if(o=t.match(/rgba\(\s*(\-?\d+(?:\.\d+)?)%,\s*(\-?\d+(?:\.\d+)?)%\s*,\s*(\-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)/)){for(s=o.slice(1,5),n=i=0;i<=2;n=++i)s[n]=gt(2.55*s[n]);s[3]=+s[3]}else(o=t.match(/hsl\(\s*(\-?\d+(?:\.\d+)?),\s*(\-?\d+(?:\.\d+)?)%\s*,\s*(\-?\d+(?:\.\d+)?)%\s*\)/))?((r=o.slice(1,4))[1]*=.01,r[2]*=.01,(s=M(r))[3]=1):(o=t.match(/hsla\(\s*(\-?\d+(?:\.\d+)?),\s*(\-?\d+(?:\.\d+)?)%\s*,\s*(\-?\d+(?:\.\d+)?)%\s*,\s*([01]|[01]?\.\d+)\)/))&&((r=o.slice(1,4))[1]*=.01,r[2]*=.01,(s=M(r))[3]=+o[4]);return s},Z=function(t){var e;return"rgb"===(e=t[3]<1?"rgba":"rgb")?e+"("+t.slice(0,3).map(gt).join(",")+")":"rgba"===e?e+"("+t.slice(0,3).map(gt).join(",")+","+t[3]+")":void 0},mt=function(t){return gt(100*t)/100},A=function(t,e){var i;return i=e<1?"hsla":"hsl",t[0]=mt(t[0]||0),t[1]=mt(100*t[1])+"%",t[2]=mt(100*t[2])+"%","hsla"===i&&(t[3]=e),i+"("+t.join(",")+")"},l.css=function(t){return v(t)},ot.css=function(){return function(t,e,i){i.prototype=t.prototype;var r=new i,n=t.apply(r,e);return Object(n)===n?n:r}(C,Pt.call(arguments).concat(["css"]),function(){})},C.prototype.css=function(t){return null==t&&(t="rgb"),"rgb"===t.slice(0,3)?Z(this._rgb):"hsl"===t.slice(0,3)?A(this.hsl(),this.alpha()):void 0},l.named=function(t){return w(St[t])},u.push({p:5,test:function(t){if(1===arguments.length&&null!=St[t])return"named"}}),C.prototype.name=function(t){var e,i;for(i in arguments.length&&(St[t]&&(this._rgb=w(St[t])),this._rgb[3]=1),e=this.hex(),St)if(e===St[i])return i;return e},U=function(){var t,e,i,r;return i=(r=wt(arguments))[0],t=r[1],e=r[2],[i,R(e*=n)*t,yt(e)*t]},j=function(){var t,e,i,r,n,o,a,s,c;return a=(i=wt(arguments))[0],n=i[1],o=i[2],t=(s=U(a,n,o))[0],e=s[1],r=s[2],[(c=F(t,e,r))[0],c[1],r=c[2],3<i.length?i[3]:1]},N=function(){var t,e,i,r,n,o;return n=(o=wt(arguments))[0],t=o[1],e=o[2],i=bt(t*t+e*e),r=(I(e,t)*a+360)%360,0===gt(1e4*i)&&(r=Number.NaN),[n,i,r]},rt=function(){var t,e,i,r,n,o,a;return n=(o=wt(arguments))[0],i=o[1],e=o[2],r=(a=it(n,i,e))[0],t=a[1],e=a[2],N(r,t,e)},ot.lch=function(){var t;return t=wt(arguments),new C(t,"lch")},ot.hcl=function(){var t;return t=wt(arguments),new C(t,"hcl")},l.lch=j,l.hcl=function(){var t,e,i,r;return e=(r=wt(arguments))[0],t=r[1],i=r[2],j([i,t,e])},C.prototype.lch=function(){return rt(this._rgb)},C.prototype.hcl=function(){return rt(this._rgb).reverse()},Y=function(t){var e,i,r,n,o,a;return null==t&&(t="rgb"),o=(a=wt(arguments))[0],r=a[1],e=a[2],r/=255,e/=255,[(1-(o/=255)-(n=1-Math.max(o,Math.max(r,e))))*(i=n<1?1/(1-n):0),(1-r-n)*i,(1-e-n)*i,n]},o=function(){var t,e,i,r,n,o;return i=(e=wt(arguments))[0],n=e[1],o=e[2],r=e[3],t=4<e.length?e[4]:1,1===r?[0,0,0,t]:[1<=i?0:255*(1-i)*(1-r),1<=n?0:255*(1-n)*(1-r),1<=o?0:255*(1-o)*(1-r),t]},l.cmyk=function(){return o(wt(arguments))},ot.cmyk=function(){return function(t,e,i){i.prototype=t.prototype;var r=new i,n=t.apply(r,e);return Object(n)===n?n:r}(C,Pt.call(arguments).concat(["cmyk"]),function(){})},C.prototype.cmyk=function(){return Y(this._rgb)},l.gl=function(){var t,i,e,r,n;for(r=function(){var t,e;for(i in e=[],t=wt(arguments))n=t[i],e.push(n);return e}.apply(this,arguments),t=e=0;e<=2;t=++e)r[t]*=255;return r},ot.gl=function(){return function(t,e,i){i.prototype=t.prototype;var r=new i,n=t.apply(r,e);return Object(n)===n?n:r}(C,Pt.call(arguments).concat(["gl"]),function(){})},C.prototype.gl=function(){var t;return[(t=this._rgb)[0]/255,t[1]/255,t[2]/255,t[3]]},ht=function(t,e,i){var r;return t=(r=wt(arguments))[0],e=r[1],i=r[2],.2126*(t=H(t))+.7152*(e=H(e))+.0722*(i=H(i))},H=function(t){return(t/=255)<=.03928?t/12.92:ut((t+.055)/1.055,2.4)},B=function(t,e,i,r){var n,o;return n=t._rgb,o=e._rgb,new C(n[0]+i*(o[0]-n[0]),n[1]+i*(o[1]-n[1]),n[2]+i*(o[2]-n[2]),r)},p.push(["rgb",B]),C.prototype.luminance=function(n,o){var t,a,e,s;return null==o&&(o="rgb"),arguments.length?(e=this._rgb,0===n?e=[0,0,0,this._rgb[3]]:1===n?e=[255,255,255,this[3]]:(t=ht(this._rgb),1e-7,a=20,s=function(t,e){var i,r;return i=(r=t.interpolate(e,.5,o)).luminance(),Math.abs(n-i)<1e-7||!a--?r:n<i?s(t,r):s(r,e)},e=n<t?s(ot("black"),this).rgba():s(this,ot("white")).rgba()),ot(e).alpha(this.alpha())):ht(this._rgb)},xt=function(t){var e,i,r,n;return(n=t/100)<66?(r=255,i=-155.25485562709179-.44596950469579133*(i=n-2)+104.49216199393888*st(i),e=n<20?0:.8274096064007395*(e=n-10)-254.76935184120902+115.67994401066147*st(e)):(r=351.97690566805693+.114206453784165*(r=n-55)-40.25366309332127*st(r),i=325.4494125711974+.07943456536662342*(i=n-50)-28.0852963507957*st(i),e=255),[r,i,e]},pt=function(){var t,e,i,r,n,o,a;for(r=(n=wt(arguments))[0],n[1],t=n[2],i=1e3,e=4e4,.4;.4<e-i;)(o=xt(a=.5*(e+i)))[2]/o[0]>=t/r?e=a:i=a;return gt(a)},ot.temperature=ot.kelvin=function(){return function(t,e,i){i.prototype=t.prototype;var r=new i,n=t.apply(r,e);return Object(n)===n?n:r}(C,Pt.call(arguments).concat(["temperature"]),function(){})},l.temperature=l.kelvin=l.K=xt,C.prototype.temperature=function(){return pt(this._rgb)},C.prototype.kelvin=C.prototype.temperature,ot.contrast=function(t,e){var i,r,n,o;return"string"!==(n=_t(t))&&"number"!==n||(t=new C(t)),"string"!==(o=_t(e))&&"number"!==o||(e=new C(e)),i=t.luminance(),(r=e.luminance())<i?(i+.05)/(r+.05):(r+.05)/(i+.05)},ot.distance=function(t,e,i){var r,n,o,a,s,c,u;for(n in null==i&&(i="lab"),"string"!==(s=_t(t))&&"number"!==s||(t=new C(t)),"string"!==(c=_t(e))&&"number"!==c||(e=new C(e)),o=t.get(i),a=e.get(i),u=0,o)u+=(r=(o[n]||0)-(a[n]||0))*r;return Math.sqrt(u)},ot.deltaE=function(t,e,i,r){var n,o,a,s,c,u,h,l,p,d,f,m,g,v,y,b,x,_,w,S,A,M,P,E;for(null==i&&(i=1),null==r&&(r=1),"string"!==(y=_t(t))&&"number"!==y||(t=new C(t)),"string"!==(b=_t(e))&&"number"!==b||(e=new C(e)),n=(x=t.lab())[0],a=x[1],c=x[2],o=(_=e.lab())[0],s=_[1],u=_[2],h=bt(a*a+c*c),l=bt(s*s+u*u),S=n<16?.511:.040975*n/(1+.01765*n),w=.0638*h/(1+.0131*h)+.638,v=h<1e-6?0:180*I(c,a)/T;v<0;)v+=360;for(;360<=v;)v-=360;return A=164<=v&&v<=345?.56+nt(.2*R(T*(v+168)/180)):.36+nt(.4*R(T*(v+35)/180)),g=bt((p=h*h*h*h)/(p+1900)),bt((M=(n-o)/(i*S))*M+(P=(m=h-l)/(r*w))*P+((d=a-s)*d+(f=c-u)*f-m*m)/((E=w*(g*A+1-g))*E))},C.prototype.get=function(t){var e,i,r,n,o;return this,r=(n=t.split("."))[0],e=n[1],o=this[r](),e?-1<(i=r.indexOf(e))?o[i]:console.warn("unknown channel "+e+" in mode "+r):o},C.prototype.set=function(t,e){var i,r,n,o,a;if(this,n=(o=t.split("."))[0],i=o[1])if(a=this[n](),-1<(r=n.indexOf(i)))if("string"===_t(e))switch(e.charAt(0)){case"+":case"-":a[r]+=+e;break;case"*":a[r]*=+e.substr(1);break;case"/":a[r]/=+e.substr(1);break;default:a[r]=+e}else a[r]=e;else console.warn("unknown channel "+i+" in mode "+n);else a=e;return ot(a,n).alpha(this.alpha())},C.prototype.clipped=function(){return this._rgb._clipped||!1},C.prototype.alpha=function(t){return arguments.length?ot.rgb([this._rgb[0],this._rgb[1],this._rgb[2],t]):this._rgb[3]},C.prototype.darken=function(t){var e;return null==t&&(t=1),(e=this.lab())[0]-=s.Kn*t,ot.lab(e).alpha(this.alpha())},C.prototype.brighten=function(t){return null==t&&(t=1),this.darken(-t)},C.prototype.darker=C.prototype.darken,C.prototype.brighter=C.prototype.brighten,C.prototype.saturate=function(t){var e;return null==t&&(t=1),(e=this.lch())[1]+=t*s.Kn,e[1]<0&&(e[1]=0),ot.lch(e).alpha(this.alpha())},C.prototype.desaturate=function(t){return null==t&&(t=1),this.saturate(-t)},C.prototype.premultiply=function(){var t,e;return e=this.rgb(),t=this.alpha(),ot(e[0]*t,e[1]*t,e[2]*t,t)},W=function(t,e){return t*e/255},y=function(t,e){return e<t?e:t},G=function(t,e){return e<t?t:e},vt=function(t,e){return 255*(1-(1-t/255)*(1-e/255))},q=function(t,e){return e<128?2*t*e/255:255*(1-2*(1-t/255)*(1-e/255))},e=function(t,e){return 255*(1-(1-e/255)/(t/255))},b=function(t,e){return 255===t?255:255<(t=e/255*255/(1-t/255))?255:t},(r=function(t,e,i){if(!r[i])throw"unknown blend mode "+i;return r[i](t,e)}).normal=(t=function(n){return function(t,e){var i,r;return i=ot(e).rgb(),r=ot(t).rgb(),ot(n(i,r),"rgb")}})((x=function(o){return function(t,e){var i,r,n;for(n=[],i=r=0;r<=3;i=++r)n[i]=o(t[i],e[i]);return n}})(function(t,e){return t})),r.multiply=t(x(W)),r.screen=t(x(vt)),r.overlay=t(x(q)),r.darken=t(x(y)),r.lighten=t(x(G)),r.dodge=t(x(b)),r.burn=t(x(e)),ot.blend=r,ot.analyze=function(t){var e,i,r,n;for(r={min:Number.MAX_VALUE,max:-1*Number.MAX_VALUE,sum:0,values:[],count:0},i=0,e=t.length;i<e;i++)null==(n=t[i])||isNaN(n)||(r.values.push(n),r.sum+=n,n<r.min&&(r.min=n),n>r.max&&(r.max=n),r.count+=1);return r.domain=[r.min,r.max],r.limits=function(t,e){return ot.limits(r,t,e)},r},ot.scale=function(h,t){var l,u,p,e,d,f,m,g,v,y,i,b,x,r,_,w,S,A,s,n,M;return v="rgb",y=ot("#ccc"),d=[r=0,1],x=[],l=!(b=[0,0]),i=!(p=[]),g=0,u={},_=!(e=!(m=1)),f=1,n=function(t){var e,i,r,n,o,a;if(null==t&&(t=["#fff","#000"]),null!=t&&"string"===_t(t)&&null!=ot.brewer&&(t=ot.brewer[t]||ot.brewer[t.toLowerCase()]||t),"array"===_t(t)){for(e=r=0,n=(t=t.slice(0)).length-1;0<=n?r<=n:n<=r;e=0<=n?++r:--r)i=t[e],"string"===_t(i)&&(t[e]=ot(i));for(e=a=x.length=0,o=t.length-1;0<=o?a<=o:o<=a;e=0<=o?++a:--a)x.push(e/(t.length-1))}return s(),p=t},S=function(t){var e,i;if(null!=l){for(i=l.length-1,e=0;e<i&&t>=l[e];)e++;return e-1}return 0},M=function(t){return t},A=function(t,e){var i,r,n,o,a,s,c;if(null==e&&(e=!1),isNaN(t))return y;if(c=e?t:l&&2<l.length?S(t)/(l.length-2):m!==g?(t-g)/(m-g):1,e||(c=M(c)),1!==f&&(c=ut(c,f)),c=b[0]+c*(1-b[0]-b[1]),c=Math.min(1,Math.max(0,c)),n=Math.floor(1e4*c),_&&u[n])i=u[n];else{if("array"===_t(p))for(r=o=0,s=x.length-1;0<=s?o<=s:s<=o;r=0<=s?++o:--o){if(c<=(a=x[r])){i=p[r];break}if(a<=c&&r===x.length-1){i=p[r];break}if(a<c&&c<x[r+1]){c=(c-a)/(x[r+1]-a),i=ot.interpolate(p[r],p[r+1],c,v);break}}else"function"===_t(p)&&(i=p(c));_&&(u[n]=i)}return i},s=function(){return u={}},n(h),(w=function(t){var e;return e=ot(A(t)),i&&e[i]?e[i]():e}).classes=function(t){var e;return null!=t?("array"===_t(t)?d=[(l=t)[0],t[t.length-1]]:(e=ot.analyze(d),l=0===t?[e.min,e.max]:ot.limits(e,"e",t)),w):l},w.domain=function(t){var e,i,r,n,o,a,s;if(!arguments.length)return d;if(g=t[0],m=t[t.length-1],x=[],r=p.length,t.length===r&&g!==m)for(o=0,n=t.length;o<n;o++)i=t[o],x.push((i-g)/(m-g));else for(e=s=0,a=r-1;0<=a?s<=a:a<=s;e=0<=a?++s:--s)x.push(e/(r-1));return d=[g,m],w},w.mode=function(t){return arguments.length?(v=t,s(),w):v},w.range=function(t,e){return n(t),w},w.out=function(t){return i=t,w},w.spread=function(t){return arguments.length?(r=t,w):r},w.correctLightness=function(t){return null==t&&(t=!0),e=t,s(),M=e?function(t){var e,i,r,n,o,a,s,c,u;for(e=A(0,!0).lab()[0],i=A(1,!0).lab()[0],s=i<e,r=A(t,!0).lab()[0],n=r-(o=e+(i-e)*t),c=0,u=1,a=20;.01<Math.abs(n)&&0<a--;)s&&(n*=-1),t+=n<0?.5*(u-(c=t)):.5*(c-(u=t)),r=A(t,!0).lab()[0],n=r-o;return t}:function(t){return t},w},w.padding=function(t){return null!=t?("number"===_t(t)&&(t=[t,t]),b=t,w):b},w.colors=function(e,i){var r,n,t,o,a,s,c,u;if(arguments.length<2&&(i="hex"),a=[],0===arguments.length)a=p.slice(0);else if(1===e)a=[w(.5)];else if(1<e)n=d[0],r=d[1]-n,a=function(){s=[];for(var t=0;0<=e?t<e:e<t;0<=e?t++:t--)s.push(t);return s}.apply(this).map(function(t){return w(n+t/(e-1)*r)});else{if(h=[],c=[],l&&2<l.length)for(t=u=1,o=l.length;1<=o?u<o:o<u;t=1<=o?++u:--u)c.push(.5*(l[t-1]+l[t]));else c=d;a=c.map(function(t){return w(t)})}return ot[i]&&(a=a.map(function(t){return t[i]()})),a},w.cache=function(t){return null!=t?(_=t,w):_},w.gamma=function(t){return null!=t?(f=t,w):f},w},null==ot.scales&&(ot.scales={}),ot.scales.cool=function(){return ot.scale([ot.hsl(180,1,.9),ot.hsl(250,.7,.4)])},ot.scales.hot=function(){return ot.scale(["#000","#f00","#ff0","#fff"],[0,.25,.75,1]).mode("rgb")},ot.analyze=function(t,i,r){var n,e,o,a,s,c;if(s={min:Number.MAX_VALUE,max:-1*Number.MAX_VALUE,sum:0,values:[],count:0},null==r&&(r=function(){return!0}),n=function(t){null==t||isNaN(t)||(s.values.push(t),s.sum+=t,t<s.min&&(s.min=t),t>s.max&&(s.max=t),s.count+=1)},c=function(t,e){if(r(t,e))return null!=i&&"function"===_t(i)?n(i(t)):null!=i&&"string"===_t(i)||"number"===_t(i)?n(t[i]):n(t)},"array"===_t(t))for(a=0,o=t.length;a<o;a++)c(t[a]);else for(e in t)c(t[e],e);return s.domain=[s.min,s.max],s.limits=function(t,e){return ot.limits(s,t,e)},s},ot.limits=function(t,e,i){var r,n,o,a,s,c,u,h,l,p,d,f,m,g,v,y,b,x,_,w,S,A,M,P,E,C,T,I,R,L,O,D,k,B,N,F,z,U,j,G,V,H,$,W,X,q,Y,Z,K,J,Q,tt,et,it,rt;if(null==e&&(e="equal"),null==i&&(i=7),"array"===_t(t)&&(t=ot.analyze(t)),E=t.min,ct=t.max,t.sum,it=t.values.sort(function(t,e){return t-e}),1===i)return[E,ct];if(M=[],"c"===e.substr(0,1)&&(M.push(E),M.push(ct)),"e"===e.substr(0,1)){for(M.push(E),w=O=1,N=i-1;1<=N?O<=N:N<=O;w=1<=N?++O:--O)M.push(E+w/i*(ct-E));M.push(ct)}else if("l"===e.substr(0,1)){if(E<=0)throw"Logarithmic scales are only possible for values > 0";for(C=Math.LOG10E*st(E),P=Math.LOG10E*st(ct),M.push(E),w=rt=1,F=i-1;1<=F?rt<=F:F<=rt;w=1<=F?++rt:--rt)M.push(ut(10,C+w/i*(P-C)));M.push(ct)}else if("q"===e.substr(0,1)){for(M.push(E),w=r=1,H=i-1;1<=H?r<=H:H<=r;w=1<=H?++r:--r)D=(it.length-1)*w/i,(k=at(D))===D?M.push(it[k]):(B=D-k,M.push(it[k]*(1-B)+it[k+1]*B));M.push(ct)}else if("k"===e.substr(0,1)){for(I=it.length,g=new Array(I),x=new Array(i),J=!0,R=0,y=null,(y=[]).push(E),w=n=1,$=i-1;1<=$?n<=$:$<=n;w=1<=$?++n:--n)y.push(E+w/i*(ct-E));for(y.push(ct);J;){for(S=o=0,W=i-1;0<=W?o<=W:W<=o;S=0<=W?++o:--o)x[S]=0;for(w=a=0,X=I-1;0<=X?a<=X:X<=a;w=0<=X?++a:--a){for(et=it[w],T=Number.MAX_VALUE,S=s=0,q=i-1;0<=q?s<=q:q<=s;S=0<=q?++s:--s)(_=nt(y[S]-et))<T&&(T=_,v=S);x[v]++,g[w]=v}for(L=new Array(i),S=c=0,Y=i-1;0<=Y?c<=Y:Y<=c;S=0<=Y?++c:--c)L[S]=null;for(w=u=0,Z=I-1;0<=Z?u<=Z:Z<=u;w=0<=Z?++u:--u)null===L[b=g[w]]?L[b]=it[w]:L[b]+=it[w];for(S=h=0,K=i-1;0<=K?h<=K:K<=h;S=0<=K?++h:--h)L[S]*=1/x[S];for(J=!1,S=l=0,z=i-1;0<=z?l<=z:z<=l;S=0<=z?++l:--l)if(L[S]!==y[w]){J=!0;break}y=L,200<++R&&(J=!1)}for(A={},S=p=0,U=i-1;0<=U?p<=U:U<=p;S=0<=U?++p:--p)A[S]=[];for(w=d=0,j=I-1;0<=j?d<=j:j<=d;w=0<=j?++d:--d)A[b=g[w]].push(it[w]);for(Q=[],S=f=0,G=i-1;0<=G?f<=G:G<=f;S=0<=G?++f:--f)Q.push(A[S][0]),Q.push(A[S][A[S].length-1]);for(Q=Q.sort(function(t,e){return t-e}),M.push(Q[0]),w=m=1,V=Q.length-1;m<=V;w=m+=2)tt=Q[w],isNaN(tt)||-1!==M.indexOf(tt)||M.push(tt)}return M},S=function(t,e,i){var r,n,o,a;return t=(r=wt(arguments))[0],e=r[1],i=r[2],isNaN(t)&&(t=0),(t/=360)<1/3?o=1-((n=(1-e)/3)+(a=(1+e*R(d*t)/R(c-d*t))/3)):t<2/3?n=1-((a=(1-e)/3)+(o=(1+e*R(d*(t-=1/3))/R(c-d*t))/3)):a=1-((o=(1-e)/3)+(n=(1+e*R(d*(t-=2/3))/R(c-d*t))/3)),[255*(a=V(i*a*3)),255*(o=V(i*o*3)),255*(n=V(i*n*3)),3<r.length?r[3]:1]},Q=function(){var t,e,i,r,n,o,a;return n=(o=wt(arguments))[0],e=o[1],t=o[2],d=2*Math.PI,n/=255,e/=255,t/=255,0===(a=1-Math.min(n,e,t)/(r=(n+e+t)/3))?i=0:(i=(n-e+(n-t))/2,i/=Math.sqrt((n-e)*(n-e)+(n-t)*(e-t)),i=Math.acos(i),e<t&&(i=d-i),i/=d),[360*i,a,r]},ot.hsi=function(){return function(t,e,i){i.prototype=t.prototype;var r=new i,n=t.apply(r,e);return Object(n)===n?n:r}(C,Pt.call(arguments).concat(["hsi"]),function(){})},l.hsi=S,C.prototype.hsi=function(){return Q(this._rgb)},L=function(t,e,i,r){var n,o,a,s,c,u,h,l,p,d;return"hsl"===r?(p=t.hsl(),d=e.hsl()):"hsv"===r?(p=t.hsv(),d=e.hsv()):"hcg"===r?(p=t.hcg(),d=e.hcg()):"hsi"===r?(p=t.hsi(),d=e.hsi()):"lch"!==r&&"hcl"!==r||(r="hcl",p=t.hcl(),d=e.hcl()),"h"===r.substr(0,1)&&(o=p[0],h=p[1],s=p[2],a=d[0],l=d[1],c=d[2]),isNaN(o)||isNaN(a)?isNaN(o)?isNaN(a)?n=Number.NaN:(n=a,1!==s&&0!==s||"hsv"===r||(u=l)):(n=o,1!==c&&0!==c||"hsv"===r||(u=h)):n=o+i*(o<a&&180<a-o?a-(o+360):a<o&&180<o-a?a+360-o:a-o),null==u&&(u=h+i*(l-h)),ot[r](n,u,s+i*(c-s))},k=function(t,e,i,r){var n,o;return n=t.num(),o=e.num(),ot.num(n+(o-n)*i,"num")},(p=p.concat(function(){var t,e,i,r;for(r=[],e=0,t=(i=["hsv","hsl","hsi","hcl","lch","hcg"]).length;e<t;e++)$=i[e],r.push([$,L]);return r}())).push(["num",k]),O=function(t,e,i,r){var n,o;return n=t.lab(),o=e.lab(),new C(n[0]+i*(o[0]-n[0]),n[1]+i*(o[1]-n[1]),n[2]+i*(o[2]-n[2]),r)},p.push(["lab",O])}).call(Fl)}).scale,jl={scale:"uniform",mode:"hcl",domain:[0,1],value:16777215,reverse:!1},Gl=new Li,Vl=function(t){void 0===t&&(t={}),this.parameters=sl(t,jl),"string"==typeof this.parameters.value&&(this.parameters.value=Gl.set(this.parameters.value).getHex()),this.parameters.structure&&(this.atomProxy=this.parameters.structure.getAtomProxy())};Vl.prototype.getScale=function(t){void 0===t&&(t={});var e=sl(t,this.parameters);return"rainbow"===e.scale?e.scale=["red","orange","yellow","green","blue"]:"rwb"===e.scale&&(e.scale=["red","white","blue"]),e.reverse&&e.domain.reverse(),Ul(e.scale).mode(e.mode).domain(e.domain).out("num")},Vl.prototype.colorToArray=function(t,e,i){return void 0===e&&(e=[]),void 0===i&&(i=0),e[i]=(t>>16&255)/255,e[i+1]=(t>>8&255)/255,e[i+2]=(255&t)/255,e},Vl.prototype.atomColorToArray=function(t,e,i){return this.colorToArray(this.atomColor?this.atomColor(t):0,e,i)},Vl.prototype.bondColor=function(t,e){return this.atomProxy&&this.atomColor?(this.atomProxy.index=e?t.atomIndex1:t.atomIndex2,this.atomColor(this.atomProxy)):0},Vl.prototype.bondColorToArray=function(t,e,i,r){return this.colorToArray(this.bondColor(t,e),i,r)},Vl.prototype.volumeColorToArray=function(t,e,i){return this.colorToArray(this.volumeColor?this.volumeColor(t):0,e,i)},Vl.prototype.positionColorToArray=function(t,e,i){return this.colorToArray(this.positionColor?this.positionColor(t):0,e,i)};var Hl,$l,Wl=zl(function(n){!function(t){function a(t,e,i,r,n){this._listener=e,this._isOnce=i,this.context=r,this._signal=t,this._priority=n||0}function r(t,e){if("function"!=typeof t)throw new Error("listener is a required param of {fn}() and should be a Function.".replace("{fn}",e))}function e(){this._bindings=[],this._prevParams=null;var t=this;this.dispatch=function(){e.prototype.dispatch.apply(t,arguments)}}e.prototype={VERSION:"1.0.0",memorize:!(a.prototype={active:!0,params:null,execute:function(t){var e,i;return this.active&&this._listener&&(i=this.params?this.params.concat(t):t,e=this._listener.apply(this.context,i),this._isOnce&&this.detach()),e},detach:function(){return this.isBound()?this._signal.remove(this._listener,this.context):null},isBound:function(){return!!this._signal&&!!this._listener},isOnce:function(){return this._isOnce},getListener:function(){return this._listener},getSignal:function(){return this._signal},_destroy:function(){delete this._signal,delete this._listener,delete this.context},toString:function(){return"[SignalBinding isOnce:"+this._isOnce+", isBound:"+this.isBound()+", active:"+this.active+"]"}}),_shouldPropagate:!0,active:!0,_registerListener:function(t,e,i,r){var n,o=this._indexOfListener(t,i);if(-1!==o){if((n=this._bindings[o]).isOnce()!==e)throw new Error("You cannot add"+(e?"":"Once")+"() then add"+(e?"Once":"")+"() the same listener without removing the relationship first.")}else n=new a(this,t,e,i,r),this._addBinding(n);return this.memorize&&this._prevParams&&n.execute(this._prevParams),n},_addBinding:function(t){for(var e=this._bindings.length;--e,this._bindings[e]&&t._priority<=this._bindings[e]._priority;);this._bindings.splice(e+1,0,t)},_indexOfListener:function(t,e){for(var i,r=this._bindings.length;r--;)if((i=this._bindings[r])._listener===t&&i.context===e)return r;return-1},has:function(t,e){return-1!==this._indexOfListener(t,e)},add:function(t,e,i){return r(t,"add"),this._registerListener(t,!1,e,i)},addOnce:function(t,e,i){return r(t,"addOnce"),this._registerListener(t,!0,e,i)},remove:function(t,e){r(t,"remove");var i=this._indexOfListener(t,e);return-1!==i&&(this._bindings[i]._destroy(),this._bindings.splice(i,1)),t},removeAll:function(){for(var t=this._bindings.length;t--;)this._bindings[t]._destroy();this._bindings.length=0},getNumListeners:function(){return this._bindings.length},halt:function(){this._shouldPropagate=!1},dispatch:function(t){if(this.active){var e,i=Array.prototype.slice.call(arguments),r=this._bindings.length;if(this.memorize&&(this._prevParams=i),r)for(e=this._bindings.slice(),this._shouldPropagate=!0;e[--r]&&this._shouldPropagate&&!1!==e[r].execute(i););}},forget:function(){this._prevParams=null},dispose:function(){this.removeAll(),delete this._bindings,delete this._prevParams},toString:function(){return"[Signal active:"+this.active+" numListeners:"+this.getNumListeners()+"]"}};var i=e;i.Signal=e,n.exports?n.exports=i:t.signals=i}(Fl)}).Signal;($l=Hl||(Hl={}))[$l.PROTEIN=1]="PROTEIN",$l[$l.NUCLEIC=2]="NUCLEIC",$l[$l.RNA=3]="RNA",$l[$l.DNA=4]="DNA",$l[$l.POLYMER=5]="POLYMER",$l[$l.WATER=6]="WATER",$l[$l.HELIX=7]="HELIX",$l[$l.SHEET=8]="SHEET",$l[$l.TURN=9]="TURN",$l[$l.BACKBONE=10]="BACKBONE",$l[$l.SIDECHAIN=11]="SIDECHAIN",$l[$l.ALL=12]="ALL",$l[$l.HETERO=13]="HETERO",$l[$l.ION=14]="ION",$l[$l.SACCHARIDE=15]="SACCHARIDE",$l[$l.SUGAR=15]="SUGAR",$l[$l.BONDED=16]="BONDED",$l[$l.RING=17]="RING",$l[$l.AROMATICRING=18]="AROMATICRING",$l[$l.METAL=19]="METAL",$l[$l.NONE=20]="NONE";var Xl=["*","","ALL"],ql=["NONE"],Yl=[Hl.BACKBONE,Hl.SIDECHAIN,Hl.BONDED,Hl.RING,Hl.AROMATICRING,Hl.METAL],Zl=[Hl.POLYMER,Hl.WATER],Kl=["ALA","GLY","SER"],Jl=["CYS","SER","THR"],Ql=["ALA","ILE","LEU","MET","PHE","PRO","TRP","VAL"],tp=["PHE","TRP","TYR","HIS"],ep=["ASN","GLN"],ip=["ASP","GLU"],rp=["ARG","HIS","LYS"],np=["ARG","ASP","GLU","HIS","LYS"],op=["ASN","ARG","ASP","CYS","GLY","GLN","GLU","HIS","LYS","SER","THR","TYR"],ap=["ALA","ILE","LEU","MET","PHE","PRO","TRP","VAL"],sp=["HIS","PHE","PRO","TRP","TYR"],cp=["ALA","GLY","ILE","LEU","VAL"];function up(t,e){if(void 0===e.atomname&&void 0===e.element&&void 0===e.altloc&&void 0===e.atomindex&&void 0===e.keyword&&void 0===e.inscode&&void 0===e.resname&&void 0===e.sstruc&&void 0===e.resno&&void 0===e.chainname&&void 0===e.model)return-1;if(void 0!==e.keyword){if(e.keyword===Hl.BACKBONE&&!t.isBackbone())return!1;if(e.keyword===Hl.SIDECHAIN&&!t.isSidechain())return!1;if(e.keyword===Hl.BONDED&&!t.isBonded())return!1;if(e.keyword===Hl.RING&&!t.isRing())return!1;if(e.keyword===Hl.AROMATICRING&&!t.isAromatic())return!1;if(e.keyword===Hl.HETERO&&!t.isHetero())return!1;if(e.keyword===Hl.PROTEIN&&!t.isProtein())return!1;if(e.keyword===Hl.NUCLEIC&&!t.isNucleic())return!1;if(e.keyword===Hl.RNA&&!t.isRna())return!1;if(e.keyword===Hl.DNA&&!t.isDna())return!1;if(e.keyword===Hl.POLYMER&&!t.isPolymer())return!1;if(e.keyword===Hl.WATER&&!t.isWater())return!1;if(e.keyword===Hl.HELIX&&!t.isHelix())return!1;if(e.keyword===Hl.SHEET&&!t.isSheet())return!1;if(e.keyword===Hl.TURN&&!t.isTurn())return!1;if(e.keyword===Hl.ION&&!t.isIon())return!1;if(e.keyword===Hl.SACCHARIDE&&!t.isSaccharide())return!1;if(e.keyword===Hl.METAL&&!t.isMetal())return!1}if(void 0!==e.atomname&&e.atomname!==t.atomname)return!1;if(void 0!==e.element&&e.element!==t.element)return!1;if(void 0!==e.altloc&&e.altloc!==t.altloc)return!1;if(void 0!==e.atomindex&&fl(e.atomindex,t.index)<0)return!1;if(void 0!==e.resname)if(Array.isArray(e.resname)){if(!e.resname.includes(t.resname))return!1}else if(e.resname!==t.resname)return!1;if(void 0!==e.sstruc&&e.sstruc!==t.sstruc)return!1;if(void 0!==e.resno)if(Array.isArray(e.resno)&&2===e.resno.length){if(e.resno[0]>t.resno||e.resno[1]<t.resno)return!1}else if(e.resno!==t.resno)return!1;return(void 0===e.inscode||e.inscode===t.inscode)&&((void 0===e.chainname||e.chainname===t.chainname)&&(void 0===e.model||e.model===t.modelIndex))}function hp(t,e){if(void 0===e.resname&&void 0===e.resno&&void 0===e.inscode&&void 0===e.sstruc&&void 0===e.model&&void 0===e.chainname&&void 0===e.atomindex&&(void 0===e.keyword||Yl.includes(e.keyword)))return-1;if(void 0!==e.keyword){if(e.keyword===Hl.HETERO&&!t.isHetero())return!1;if(e.keyword===Hl.PROTEIN&&!t.isProtein())return!1;if(e.keyword===Hl.NUCLEIC&&!t.isNucleic())return!1;if(e.keyword===Hl.RNA&&!t.isRna())return!1;if(e.keyword===Hl.DNA&&!t.isDna())return!1;if(e.keyword===Hl.POLYMER&&!t.isPolymer())return!1;if(e.keyword===Hl.WATER&&!t.isWater())return!1;if(e.keyword===Hl.HELIX&&!t.isHelix())return!1;if(e.keyword===Hl.SHEET&&!t.isSheet())return!1;if(e.keyword===Hl.TURN&&!t.isTurn())return!1;if(e.keyword===Hl.ION&&!t.isIon())return!1;if(e.keyword===Hl.SACCHARIDE&&!t.isSaccharide())return!1}if(void 0!==e.atomindex&&0===ml(e.atomindex,t.atomOffset,t.atomEnd))return!1;if(void 0!==e.resname)if(Array.isArray(e.resname)){if(!e.resname.includes(t.resname))return!1}else if(e.resname!==t.resname)return!1;if(void 0!==e.sstruc&&e.sstruc!==t.sstruc)return!1;if(void 0!==e.resno)if(Array.isArray(e.resno)&&2===e.resno.length){if(e.resno[0]>t.resno||e.resno[1]<t.resno)return!1}else if(e.resno!==t.resno)return!1;return(void 0===e.inscode||e.inscode===t.inscode)&&((void 0===e.chainname||e.chainname===t.chainname)&&(void 0===e.model||e.model===t.modelIndex))}function lp(t,e){if(!(void 0!==e.chainname||void 0!==e.model||void 0!==e.atomindex||void 0!==e.keyword&&Zl.includes(e.keyword)&&t.entity))return-1;if(void 0!==e.keyword){if(e.keyword===Hl.POLYMER&&!t.entity.isPolymer())return!1;if(e.keyword===Hl.WATER&&!t.entity.isWater())return!1}return(void 0===e.atomindex||0!==ml(e.atomindex,t.atomOffset,t.atomEnd))&&((void 0===e.chainname||e.chainname===t.chainname)&&(void 0===e.model||e.model===t.modelIndex))}function pp(t,e){return void 0===e.model&&void 0===e.atomindex?-1:(void 0===e.atomindex||0!==ml(e.atomindex,t.atomOffset,t.atomEnd))&&(void 0===e.model||e.model===t.index)}function dp(s,c){if(null===s)return!1;if(s.error)return!1;if(!s.rules||0===s.rules.length)return!1;for(var u=s.rules.length,h=!s.negate,l=!!s.negate,p=[],t=0;t<u;++t){var e=s.rules[t];e.hasOwnProperty("operator")&&(p[t]=dp(e,c))}return function(t){for(var e="AND"===s.operator,i=!1,r=0;r<u;++r){var n=s.rules[r],o=void 0;if(n.hasOwnProperty("operator")){var a=p[r];if(-1===(o=!1!==a?a(t):-1)){i=!0;continue}if(!0===o){if(e)continue;return h}if(e)return l}else{if(n.keyword===Hl.ALL){if(e)continue;return h}if(n.keyword===Hl.NONE){if(e)continue;return l}if(-1!==(o=c(t,n))){if(!0===o){if(e)continue;return h}if(e)return l}else i=!0}}return i?-1:e?h:l}}function fp(t,e){if(t.error)return t;if(!t.rules||0===t.rules.length)return t;var i=t.rules.length,r={operator:t.operator,rules:[]};t.hasOwnProperty("negate")&&(r.negate=t.negate);for(var n=0;n<i;++n){var o=t.rules[n];if(o.hasOwnProperty("operator")){var a=fp(o,e);null!==a&&r.rules.push(a)}else e(o)||r.rules.push(o)}return 0<r.rules.length?t:null}function mp(t,e){void 0===e&&(e=!1);var i=t;return e&&(i=fp(t,function(t){return void 0!==t.keyword&&!Yl.includes(t.keyword)||(void 0!==t.model||(void 0!==t.chainname||(void 0!==t.resname||(void 0!==t.resno||void 0!==t.sstruc))))})),dp(i,up)}function gp(t,e){void 0===e&&(e=!1);var i=t;return e&&(i=fp(t,function(t){return!(void 0===t.keyword||!Yl.includes(t.keyword))||(void 0!==t.model||(void 0!==t.chainname||(void 0!==t.atomname||(void 0!==t.element||void 0!==t.altloc))))})),dp(i,hp)}function vp(t,e){void 0===e&&(e=!1);var i=t;return e&&(i=fp(t,function(t){return void 0!==t.keyword&&!Zl.includes(t.keyword)||(void 0!==t.resname||(void 0!==t.resno||(void 0!==t.atomname||(void 0!==t.element||(void 0!==t.altloc||(void 0!==t.sstruc||void 0!==t.inscode))))))})),dp(i,lp)}function yp(t,e){void 0===e&&(e=!1);var i=t;return e&&(i=fp(t,function(t){return void 0!==t.keyword||(void 0!==t.chainname||(void 0!==t.resname||(void 0!==t.resno||(void 0!==t.atomname||(void 0!==t.element||(void 0!==t.altloc||(void 0!==t.sstruc||void 0!==t.inscode)))))))})),dp(i,pp)}var bp=function(t){this.signals={stringChanged:new Wl},this.setString(t)},xp={type:{configurable:!0}};xp.type.get=function(){return"selection"},bp.prototype.setString=function(t,e){if(void 0===t&&(t=this.string||""),t!==this.string){try{this.selection=function(t){var e={operator:void 0,rules:[]};if(!t)return e;var i,r,n=e,o=[];"("===(t=t.replace(/\(/g," ( ").replace(/\)/g," ) ").trim()).charAt(0)&&")"===t.substr(-1)&&(t=t.slice(1,-1).trim());for(var a=t.split(/\s+/),s=function(t){i={operator:t,rules:[]},void 0===n?e=n=i:(n.rules.push(i),o.push(n),n=i)},c=function(t){r=n,void 0===(n=o.pop())&&(s(t),u(r))},u=function(t){n.rules.push(t)},h=!1,l=0;l<a.length;++l){var p=a[l],d=p.toUpperCase();if("("!==p)if(")"!==p){if(0<h)if("NOT"===d)h=1;else if(1===h)h=2;else{if(2!==h)throw new Error("something went wrong with 'not'");h=!1,c()}if("AND"!==d)if("OR"!==d)if("NOT"!==p.toUpperCase()){if(+d!=+d){var f=Hl[d];if(void 0!==f){u({keyword:f});continue}}if("HYDROGEN"!==d)if("SMALL"!==d)if("NUCLEOPHILIC"!==d)if("HYDROPHOBIC"!==d)if("AROMATIC"!==d)if("AMIDE"!==d)if("ACIDIC"!==d)if("BASIC"!==d)if("CHARGED"!==d)if("POLAR"!==d)if("NONPOLAR"!==d)if("CYCLIC"!==d)if("ALIPHATIC"!==d)if("SIDECHAINATTACHED"!==d)if("LIGAND"!==d)if(-1===Xl.indexOf(d))if("@"!==p.charAt(0))if("#"!==p.charAt(0))if("_"!==p.charAt(0))if("["!==p[0]||"]"!==p[p.length-1])if(1<=p.length&&p.length<=4&&"^"!==p[0]&&":"!==p[0]&&"."!==p[0]&&"%"!==p[0]&&"/"!==p[0]&&isNaN(parseInt(p)))u({resname:d});else{var m={operator:"AND",rules:[]},g=p.split("/");if(1<g.length&&g[1]){if(isNaN(parseInt(g[1])))throw new Error("model must be an integer");m.rules.push({model:parseInt(g[1])})}var v=g[0].split("%");1<v.length&&m.rules.push({altloc:v[1]});var y=v[0].split(".");if(1<y.length&&y[1]){if(4<y[1].length)throw new Error("atomname must be one to four characters");m.rules.push({atomname:y[1].substring(0,4).toUpperCase()})}var b=y[0].split(":");1<b.length&&b[1]&&m.rules.push({chainname:b[1]});var x=b[0].split("^");if(1<x.length&&m.rules.push({inscode:x[1]}),x[0]){var _=void 0,w=void 0;"-"===x[0][0]&&(x[0]=x[0].substr(1),_=!0),x[0].includes("--")&&(x[0]=x[0].replace("--","-"),w=!0);var S=x[0].split("-");if(1===S.length){var A=parseInt(S[0]);if(isNaN(A))throw new Error("resi must be an integer");_&&(A*=-1),m.rules.push({resno:A})}else{if(2!==S.length)throw new Error("resi range must contain one '-'");var M=S.map(function(t){return parseInt(t)});_&&(M[0]*=-1),w&&(M[1]*=-1),m.rules.push({resno:[M[0],M[1]]})}}if(1===m.rules.length)u(m.rules[0]);else{if(!(1<m.rules.length))throw new Error("empty selection chunk");u(m)}}else{var P=d.substr(1,p.length-2).split(","),E=1<P.length?P:P[0];u({resname:E})}else u({element:d.substr(1)});else console.error("# for element selection deprecated, use _"),u({element:d.substr(1)});else{var C=p.substr(1).split(",").map(function(t){return parseInt(t)});C.sort(function(t,e){return t-e}),u({atomindex:C})}else u({keyword:Hl.ALL});else u({operator:"AND",rules:[{operator:"OR",rules:[{operator:"AND",rules:[{keyword:Hl.HETERO},{negate:!0,operator:void 0,rules:[{keyword:Hl.POLYMER}]}]},{negate:!0,operator:void 0,rules:[{keyword:Hl.POLYMER}]}]},{negate:!0,operator:void 0,rules:[{operator:"OR",rules:[{keyword:Hl.WATER},{keyword:Hl.ION}]}]}]});else u({operator:"OR",rules:[{keyword:Hl.SIDECHAIN},{operator:"AND",negate:!1,rules:[{keyword:Hl.PROTEIN},{operator:"OR",negate:!1,rules:[{atomname:"CA"},{atomname:"BB"}]}]},{operator:"AND",negate:!1,rules:[{resname:"PRO"},{atomname:"N"}]},{operator:"AND",negate:!1,rules:[{keyword:Hl.NUCLEIC},{operator:"OR",negate:!0,rules:[{atomname:"P"},{atomname:"OP1"},{atomname:"OP2"},{atomname:"O3'"},{atomname:"O3*"},{atomname:"O5'"},{atomname:"O5*"},{atomname:"C5'"},{atomname:"C5*"}]}]}]});else u({resname:cp});else u({resname:sp});else u({resname:ap});else u({resname:op});else u({resname:np});else u({resname:rp});else u({resname:ip});else u({resname:ep});else u({resname:tp});else u({resname:Ql});else u({resname:Jl});else u({resname:Kl});else u({operator:"OR",rules:[{element:"H"},{element:"D"}]})}else h=1,s(),n.negate=!0;else"AND"===n.operator?c("OR"):n.operator="OR";else if("OR"===n.operator){var T=n.rules.pop();s("AND"),u(T)}else n.operator="AND"}else c(),n.negate&&c();else h=!1,s()}return void 0===e.operator&&1===e.rules.length&&e.rules[0].hasOwnProperty("operator")&&(e=e.rules[0]),e}(t)}catch(t){this.selection={error:t.message}}var i=this.selection;this.string=t,this.test=mp(i),this.residueTest=gp(i),this.chainTest=vp(i),this.modelTest=yp(i),this.atomOnlyTest=mp(i,!0),this.residueOnlyTest=gp(i,!0),this.chainOnlyTest=vp(i,!0),this.modelOnlyTest=yp(i,!0),e||this.signals.stringChanged.dispatch(this.string)}},bp.prototype.isAllSelection=function(){return Xl.includes(this.string.toUpperCase())},bp.prototype.isNoneSelection=function(){return ql.includes(this.string.toUpperCase())},Object.defineProperties(bp.prototype,xp);var _p=function(e){function t(t){var n=this;e.call(this,t),this.colormakerList=[],this.selectionList=[],(t.dataList||[]).forEach(function(t){var e=t[0],i=t[1],r=t[2];void 0===r&&(r={}),Up.hasScheme(e)?Object.assign(r,{scheme:e,structure:n.parameters.structure}):Object.assign(r,{scheme:"uniform",value:new Li(e).getHex()}),n.colormakerList.push(Up.getScheme(r)),n.selectionList.push(new bp(i))})}return e&&(t.__proto__=e),((t.prototype=Object.create(e&&e.prototype)).constructor=t).prototype.atomColor=function(t){for(var e=0,i=this.selectionList.length;e<i;++e){var r=this.selectionList[e].test;if(r&&r(t))return this.colormakerList[e].atomColor(t)}return 16777215},t}(Vl),wp={"":"",OrRd:"[S] Orange-Red",PuBu:"[S] Purple-Blue",BuPu:"[S] Blue-Purple",Oranges:"[S] Oranges",BuGn:"[S] Blue-Green",YlOrBr:"[S] Yellow-Orange-Brown",YlGn:"[S] Yellow-Green",Reds:"[S] Reds",RdPu:"[S] Red-Purple",Greens:"[S] Greens",YlGnBu:"[S] Yellow-Green-Blue",Purples:"[S] Purples",GnBu:"[S] Green-Blue",Greys:"[S] Greys",YlOrRd:"[S] Yellow-Orange-Red",PuRd:"[S] Purple-Red",Blues:"[S] Blues",PuBuGn:"[S] Purple-Blue-Green",Viridis:"[D] Viridis",Spectral:"[D] Spectral",RdYlGn:"[D] Red-Yellow-Green",RdBu:"[D] Red-Blue",PiYG:"[D] Pink-Yellowgreen",PRGn:"[D] Purplered-Green",RdYlBu:"[D] Red-Yellow-Blue",BrBG:"[D] Brown-Bluegreen",RdGy:"[D] Red-Grey",PuOr:"[D] Purple-Orange",Set1:"[Q] Set1",Set2:"[Q] Set2",Set3:"[Q] Set3",Dark2:"[Q] Dark2",Paired:"[Q] Paired",Pastel1:"[Q] Pastel1",Pastel2:"[Q] Pastel2",Accent:"[Q] Accent",rainbow:"[?] Rainbow",rwb:"[?] Red-White-Blue"},Sp={"":"",rgb:"Red Green Blue",hsv:"Hue Saturation Value",hsl:"Hue Saturation Lightness",hsi:"Hue Saturation Intensity",lab:"CIE L*a*b*",hcl:"Hue Chroma Lightness"},Ap=function(){this.schemes={},this.userSchemes={}};Ap.prototype.getScheme=function(t){var e=((t||{}).scheme||"").toLowerCase();return new(e in this.schemes?this.schemes[e]:e in this.userSchemes?this.userSchemes[e]:Vl)(t)},Ap.prototype.getSchemes=function(){var e={};return Object.keys(this.schemes).forEach(function(t){e[t]=t}),Object.keys(this.userSchemes).forEach(function(t){e[t]=t.split("|")[1]}),e},Ap.prototype.getScales=function(){return wp},Ap.prototype.getModes=function(){return Sp},Ap.prototype.add=function(t,e){t=t.toLowerCase(),this.schemes[t]=e},Ap.prototype.addScheme=function(t,e){return t instanceof Vl||(t=this._createScheme(t)),this._addUserScheme(t,e)},Ap.prototype._addUserScheme=function(t,e){e=e||"";var i=(Ll()+"|"+e).toLowerCase();return this.userSchemes[i]=t,i},Ap.prototype.removeScheme=function(t){t=t.toLowerCase(),delete this.userSchemes[t]},Ap.prototype._createScheme=function(e){var t=function(t){Vl.call(this,t),e.call(this,t)};return(t.prototype=Vl.prototype).constructor=Vl,t},Ap.prototype.addSelectionScheme=function(i,t){var e=function(e){function t(t){e.call(this,Object.assign({dataList:i},t))}return e&&(t.__proto__=e),(t.prototype=Object.create(e&&e.prototype)).constructor=t}(_p);return this._addUserScheme(e,t)},Ap.prototype.hasScheme=function(t){return(t=t.toLowerCase())in this.schemes||t in this.userSchemes};var Mp=function(t){function e(){t.call(this,"parser")}return t&&(e.__proto__=t),((e.prototype=Object.create(t&&t.prototype)).constructor=e).prototype.__hasObjName=function(t,e){var i=this.get(t);return i&&i.prototype.__objName===e},e.prototype.isTrajectory=function(t){return this.__hasObjName(t,"frames")},e.prototype.isStructure=function(t){return this.__hasObjName(t,"structure")},e.prototype.isVolume=function(t){return this.__hasObjName(t,"volume")},e.prototype.isSurface=function(t){return this.__hasObjName(t,"surface")},e.prototype.isBinary=function(t){var e=this.get(t);return e&&e.prototype.isBinary},e.prototype.isXml=function(t){var e=this.get(t);return e&&e.prototype.isXml},e.prototype.isJson=function(t){var e=this.get(t);return e&&e.prototype.isJson},e.prototype.getTrajectoryExtensions=function(){var e=this;return this.names.filter(function(t){return e.isTrajectory(t)})},e.prototype.getStructureExtensions=function(){var e=this;return this.names.filter(function(t){return e.isStructure(t)})},e.prototype.getVolumeExtensions=function(){var e=this;return this.names.filter(function(t){return e.isVolume(t)})},e.prototype.getSurfaceExtensions=function(){var e=this;return this.names.filter(function(t){return e.isSurface(t)})},e}(El);function Pp(t){return gl(function e(t){var i=t;return t.forEach(function(t){t.__deps&&Array.prototype.push.apply(i,e(t.__deps))}),i}(t)).map(function(t){return t.toString()}).join("\n\n\n")}function Ep(t,e){var i="'use strict';\n\n"+Pp(e);return i+="\n\n\nself.func = "+t.toString()+";",i+="\n\n\nself.onmessage = "+function(t){var e=t.data.__name,i=t.data.__postId;void 0===e?console.error("message __name undefined"):void 0===self.func?console.error("worker func undefined",e):self.func(t,function(e,t){e=e||{},void 0!==i&&(e.__postId=i);try{self.postMessage(e,t)}catch(t){console.error("self.postMessage:",t),self.postMessage(e)}})}.toString()+";",new Blob([i],{type:"application/javascript"})}var Cp=function(){this.activeWorkerCount=0,this._funcDict={},this._depsDict={},this._blobDict={}};Cp.prototype.add=function(t,e,i){this._funcDict[t]=e,this._depsDict[t]=i},Cp.prototype.get=function(t){return this._blobDict[t]||(this._blobDict[t]=Ep(this._funcDict[t],this._depsDict[t])),this._blobDict[t]};var Tp=hl(),Ip=!1;try{var Rp=Object.defineProperty({},"passive",{get:function(){Ip=!0}});window.addEventListener("test",function(t){},Rp)}catch(t){}var Lp="undefined"!=typeof window&&void 0!==window.orientation,Op=!1;var Dp=!1;var kp,Bp={log:Function.prototype.bind.call(console.log,console),info:Function.prototype.bind.call(console.info,console),warn:Function.prototype.bind.call(console.warn,console),error:Function.prototype.bind.call(console.error,console),time:Function.prototype.bind.call(console.time,console),timeEnd:Function.prototype.bind.call(console.timeEnd,console)},Np={color:"green",labelColor:"grey",labelAttachment:"bottom-center",labelSize:.7,labelZOffset:.5,labelYOffset:.1,labelBorder:!0,labelBorderColor:"lightgrey",labelBorderWidth:.25,lineOpacity:.8,linewidth:5,opacity:.6,labelUnit:"angstrom",arcVisible:!0,planeVisible:!1};de.Debug=!!(kp=ol("debug"))&&("string"!=typeof kp||/^1|true|t|yes|y$/i.test(kp));var Fp=["ngl","js"],zp=new Cp,Up=new Ap,jp=new El("datasource"),Gp=new El("representatation"),Vp=new Mp,Hp=new El("shader"),$p=new El("decompressor"),Wp=new El("component"),Xp=new El("buffer"),qp=new El("picker");var Yp=function(t,e){void 0===e&&(e={}),this.chunkSize=10485760,this.newline="\n",this.__pointer=0,this.__partialLine="",this.compressed=al(e.compressed,!1),this.binary=al(e.binary,!1),this.json=al(e.json,!1),this.xml=al(e.xml,!1),this.src=t};Yp.prototype.isBinary=function(){return this.binary||this.compressed},Yp.prototype.read=function(){var i=this;return this._read().then(function(t){var e=i.compressed?$p.get(i.compressed):void 0;return i.compressed&&e?i.data=e(t):((i.binary||i.compressed)&&t instanceof ArrayBuffer&&(t=new Uint8Array(t)),i.data=t),i.data})},Yp.prototype._chunk=function(t,e){return e=Math.min(this.data.length,e),0===t&&this.data.length===e?this.data:this.isBinary()?this.data.subarray(t,e):this.data.substring(t,e)},Yp.prototype.chunk=function(t){var e=t+this.chunkSize;return this._chunk(t,e)},Yp.prototype.peekLines=function(t){var e,i=this.data,r=i.length,n=this.isBinary()?this.newline.charCodeAt(0):this.newline,o=0;for(e=0;e<r&&(i[e]===n&&++o,o!==t);++e);var a=this._chunk(0,e+1);return this.chunkToLines(a,"",r<e).lines},Yp.prototype.chunkCount=function(){return Math.floor(this.data.length/this.chunkSize)+1},Yp.prototype.asText=function(){return this.isBinary()?vl(this.data):this.data},Yp.prototype.chunkToLines=function(t,e,i){var r=this.newline;if(!this.isBinary()&&t.length===this.data.length)return{lines:t.split(r),partialLine:""};var n=[],o=this.isBinary()?vl(t):t,a=o.lastIndexOf(r);if(-1===a)e+=o;else{var s=e+o.substr(0,a);n=n.concat(s.split(r)),e=a===o.length-r.length?"":o.substr(a+r.length)}return i&&""!==e&&n.push(e),{lines:n,partialLine:e}},Yp.prototype.nextChunk=function(){var t=this.__pointer;if(!(t>this.data.length))return this.__pointer+=this.chunkSize,this.chunk(t)},Yp.prototype.nextChunkOfLines=function(){var t=this.nextChunk();if(void 0!==t){var e=this.__pointer>this.data.length,i=this.chunkToLines(t,this.__partialLine,e);return this.__partialLine=i.partialLine,i.lines}},Yp.prototype.eachChunk=function(t){for(var e=this.chunkSize,i=this.data.length,r=this.chunkCount(),n=0;n<i;n+=e){t(this.chunk(n),Math.round(n/e),r)}},Yp.prototype.eachChunkOfLines=function(o){var a=this;this.eachChunk(function(t,e,i){var r=e===i+1,n=a.chunkToLines(t,a.__partialLine,r);a.__partialLine=n.partialLine,o(n.lines,e,i)})},Yp.prototype.dispose=function(){delete this.src};var Zp=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),((e.prototype=Object.create(t&&t.prototype)).constructor=e).prototype._read=function(){var n=this;return new Promise(function(e,i){var t=n.src,r=new FileReader;r.onload=function(t){t.target&&e(t.target.result)},r.onerror=function(t){return i(t)},n.binary||n.compressed?r.readAsArrayBuffer(t):r.readAsText(t)})},e}(Yp),Kp=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),((e.prototype=Object.create(t&&t.prototype)).constructor=e).prototype._read=function(){var n=this;return new Promise(function(t,e){var i=n.src,r=new XMLHttpRequest;r.open("GET",i,!0),r.addEventListener("load",function(){if(200===r.status||304===r.status||0===r.status)try{t(r.response)}catch(t){e(t)}else e(r.statusText)},!1),r.addEventListener("error",function(t){return e("network error")},!1),n.isBinary()?r.responseType="arraybuffer":n.json?r.responseType="json":n.xml?r.responseType="document":r.responseType="text",r.send(null)})},e}(Yp),Jp=function(t,e){void 0===e&&(e={}),this.parameters=sl(e,{ext:"",compressed:!1,binary:Vp.isBinary(e.ext||""),name:"",dir:"",path:"",protocol:""});var i={compressed:this.parameters.compressed,binary:this.parameters.binary,json:Vp.isJson(this.parameters.ext),xml:Vp.isXml(this.parameters.ext)};"undefined"!=typeof File&&t instanceof File||"undefined"!=typeof Blob&&t instanceof Blob?this.streamer=new Zp(t,i):this.streamer=new Kp(t,i)},Qp=function(i){function t(t,e){void 0===e&&(e={}),i.call(this,t,e),this.parserParams={voxelSize:e.voxelSize,firstModelOnly:e.firstModelOnly,asTrajectory:e.asTrajectory,cAlphaOnly:e.cAlphaOnly,name:this.parameters.name,path:this.parameters.path}}return i&&(t.__proto__=i),((t.prototype=Object.create(i&&i.prototype)).constructor=t).prototype.load=function(){return new(Vp.get(this.parameters.ext))(this.streamer,this.parserParams).parse()},t}(Jp),td=function(t,e,i){this.name=e,this.path=i,this.signals={elementAdded:new Wl,elementRemoved:new Wl,nameChanged:new Wl},this.type="Script",this.dir=i.substring(0,i.lastIndexOf("/")+1);try{this.fn=new Function("stage","__name","__path","__dir",t)}catch(t){Bp.error("Script compilation failed",t),this.fn=function(){}}};td.prototype.run=function(i){var r=this;return new Promise(function(t,e){try{r.fn.apply(null,[i,r.name,r.path,r.dir]),t()}catch(t){Bp.error("Script.fn",t),e(t)}})};var ed=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),((e.prototype=Object.create(t&&t.prototype)).constructor=e).prototype.load=function(){var t=this;return this.streamer.read().then(function(){return new td(t.streamer.asText(),t.parameters.name,t.parameters.path)})},e}(Jp);function id(t){var e,i,r=$p.names,n="",o=(e=t instanceof File?t.name:t instanceof Blob?"":t).lastIndexOf("?"),a=-1!==o?e.substring(o):"",s=(e=e.substring(0,-1===o?e.length:o)).replace(/^.*[\\/]/,""),c=s.substring(0,s.lastIndexOf(".")),u=s.split("."),h=1<u.length?(u.pop()||"").toLowerCase():"",l=e.match(/^(.+):\/\/(.+)$/);l&&(n=l[1].toLowerCase(),e=l[2]||"");var p=e.substring(0,e.lastIndexOf("/")+1);if(r.includes(h)){i=h;var d=e.length-h.length-1;h=(e.substr(0,d).split(".").pop()||"").toLowerCase();var f=c.length-h.length-1;c=c.substr(0,f)}else i=!1;return{path:e,name:s,ext:h,base:c,dir:p,compressed:i,protocol:n,query:a,src:t}}function rd(t){var e=id(t),i=jp.get(e.protocol);return i&&!(e=id(i.getUrl(e.src))).ext&&i.getExt&&(e.ext=i.getExt(t)),e}function nd(t,e){void 0===e&&(e={});var i,r=Object.assign(rd(t),e);return Vp.names.includes(r.ext)?i=new Qp(r.src,r):Fp.includes(r.ext)&&(i=new ed(r.src,r)),i?i.load():Promise.reject(new Error("autoLoad: ext '"+r.ext+"' unknown"))}var od=zl(function(t,e){!function(){var f={not_string:/[^s]/,not_bool:/[^t]/,not_type:/[^T]/,not_primitive:/[^v]/,number:/[diefg]/,numeric_arg:/[bcdiefguxX]/,json:/[j]/,not_json:/[^j]/,text:/^[^\x25]+/,modulo:/^\x25{2}/,placeholder:/^\x25(?:([1-9]\d*)\$|\(([^\)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-gijostTuvxX])/,key:/^([a-z_][a-z_\d]*)/i,key_access:/^\.([a-z_][a-z_\d]*)/i,index_access:/^\[(\d+)\]/,sign:/^[\+\-]/};function m(t){return function(t,e){var i,r,n,o,a,s,c,u,h,l=1,p=t.length,d="";for(r=0;r<p;r++)if("string"==typeof t[r])d+=t[r];else if("object"==typeof t[r]){if((o=t[r]).keys)for(i=e[l],n=0;n<o.keys.length;n++){if(null==i)throw new Error(m('[sprintf] Cannot access property "%s" of undefined value "%s"',o.keys[n],o.keys[n-1]));i=i[o.keys[n]]}else i=o.param_no?e[o.param_no]:e[l++];if(f.not_type.test(o.type)&&f.not_primitive.test(o.type)&&i instanceof Function&&(i=i()),f.numeric_arg.test(o.type)&&"number"!=typeof i&&isNaN(i))throw new TypeError(m("[sprintf] expecting number but found %T",i));switch(f.number.test(o.type)&&(u=0<=i),o.type){case"b":i=parseInt(i,10).toString(2);break;case"c":i=String.fromCharCode(parseInt(i,10));break;case"d":case"i":i=parseInt(i,10);break;case"j":i=JSON.stringify(i,null,o.width?parseInt(o.width):0);break;case"e":i=o.precision?parseFloat(i).toExponential(o.precision):parseFloat(i).toExponential();break;case"f":i=o.precision?parseFloat(i).toFixed(o.precision):parseFloat(i);break;case"g":i=o.precision?String(Number(i.toPrecision(o.precision))):parseFloat(i);break;case"o":i=(parseInt(i,10)>>>0).toString(8);break;case"s":i=String(i),i=o.precision?i.substring(0,o.precision):i;break;case"t":i=String(!!i),i=o.precision?i.substring(0,o.precision):i;break;case"T":i=Object.prototype.toString.call(i).slice(8,-1).toLowerCase(),i=o.precision?i.substring(0,o.precision):i;break;case"u":i=parseInt(i,10)>>>0;break;case"v":i=i.valueOf(),i=o.precision?i.substring(0,o.precision):i;break;case"x":i=(parseInt(i,10)>>>0).toString(16);break;case"X":i=(parseInt(i,10)>>>0).toString(16).toUpperCase()}f.json.test(o.type)?d+=i:(!f.number.test(o.type)||u&&!o.sign?h="":(h=u?"+":"-",i=i.toString().replace(f.sign,"")),s=o.pad_char?"0"===o.pad_char?"0":o.pad_char.charAt(1):" ",c=o.width-(h+i).length,a=o.width&&0<c?s.repeat(c):"",d+=o.align?h+i+a:"0"===s?h+a+i:a+h+i)}return d}(function(t){if(c[t])return c[t];var e,i=t,r=[],n=0;for(;i;){if(null!==(e=f.text.exec(i)))r.push(e[0]);else if(null!==(e=f.modulo.exec(i)))r.push("%");else{if(null===(e=f.placeholder.exec(i)))throw new SyntaxError("[sprintf] unexpected placeholder");if(e[2]){n|=1;var o=[],a=e[2],s=[];if(null===(s=f.key.exec(a)))throw new SyntaxError("[sprintf] failed to parse named argument key");for(o.push(s[1]);""!==(a=a.substring(s[0].length));)if(null!==(s=f.key_access.exec(a)))o.push(s[1]);else{if(null===(s=f.index_access.exec(a)))throw new SyntaxError("[sprintf] failed to parse named argument key");o.push(s[1])}e[2]=o}else n|=2;if(3===n)throw new Error("[sprintf] mixing positional and named placeholders is not (yet) supported");r.push({placeholder:e[0],param_no:e[1],keys:e[2],sign:e[3],pad_char:e[4],align:e[5],width:e[6],precision:e[7],type:e[8]})}i=i.substring(e[0].length)}return c[t]=r}(t),arguments)}function t(t,e){return m.apply(null,[t].concat(e||[]))}var c=Object.create(null);e.sprintf=m,e.vsprintf=t,"undefined"!=typeof window&&(window.sprintf=m,window.vsprintf=t)}()}).sprintf,ad=function(){};ad.prototype.getBlob=function(){return new Blob([this.getData()],{type:this.mimeType})},ad.prototype.download=function(t,e){t=al(t,this.defaultName),e=al(e,this.defaultExt),pl(this.getBlob(),t+"."+e)};var sd=function(n){function t(t,e){n.call(this),this.mimeType="text/plain",this.defaultName="structure",this.defaultExt="pdb";var i,r=Object.assign({},e);this.renumberSerial=al(r.renumberSerial,!0),this.remarks=(i=al(r.remarks,[]),Array.isArray(i)?i:[i]),this.structure=t,this._records=[]}return n&&(t.__proto__=n),((t.prototype=Object.create(n&&n.prototype)).constructor=t).prototype._writeRecords=function(){this._records.length=0,this._writeTitle(),this._writeRemarks(),this._writeAtoms()},t.prototype._writeTitle=function(){this._records.push(od("TITLE %-74s",this.structure.name))},t.prototype._writeRemarks=function(){var e=this;this.remarks.forEach(function(t){e._records.push(od("REMARK %-73s",t))}),this.structure.trajectory&&(this._records.push(od("REMARK %-73s","Trajectory '"+this.structure.trajectory.name+"'")),this._records.push(od("REMARK %-73s","Frame "+this.structure.trajectory.frame)))},t.prototype._writeAtoms=function(){var n=this,o=1,e=1;this.structure.eachModel(function(t){n._records.push(od("MODEL %-74d",e++)),t.eachAtom(function(t){var e=t.hetero?"HETATM%5d %-4s %3s %1s%4d    %8.3f%8.3f%8.3f%6.2f%6.2f      %4s%2s":"ATOM  %5d %-4s %3s %1s%4d    %8.3f%8.3f%8.3f%6.2f%6.2f      %4s%2s",i=n.renumberSerial?o:t.serial,r=t.atomname;1===r.length&&(r=" "+r),n._records.push(od(e,i,r,t.resname,al(t.chainname," "),t.resno,t.x,t.y,t.z,al(t.occupancy,1),al(t.bfactor,0),"",al(t.element,""))),o+=1}),n._records.push(od("%-80s","ENDMDL")),e+=1}),this._records.push(od("%-80s","END"))},t.prototype.getString=function(){return console.warn("PdbWriter.getString() is deprecated, use .getData instead"),this.getData()},t.prototype.getData=function(){return this._writeRecords(),this._records.join("\n")},t}(ad),cd=function(e){function t(t){e.call(this),this.mimeType="text/plain",this.defaultName="structure",this.defaultExt="sdf",this.structure=t,this._records=[]}e&&(t.__proto__=e),(t.prototype=Object.create(e&&e.prototype)).constructor=t;var i={idString:{configurable:!0},titleString:{configurable:!0},countsString:{configurable:!0},chargeLines:{configurable:!0}};return i.idString.get=function(){return this.structure.id},i.titleString.get=function(){return"  "+this.structure.title},i.countsString.get=function(){return od("%3i%3i  0  0  0  0  0  0  0  0999 V2000",this.structure.atomCount,this.structure.bondCount)},i.chargeLines.get=function(){var e=[];this.structure.eachAtom(function(t){null!=t.formalCharge&&0!==t.formalCharge&&e.push([t.index,t.formalCharge])});for(var t=[],i=0;i<e.length;i+=8){for(var r=Math.min(8,e.length-i),n=od("M  CHG%3i",r),o=i;o<i+r;o++)n+=od(" %3i %3i",e[o][0]+1,e[o][1]);t.push(n)}return t},t.prototype.formatAtom=function(t){var e=0;null!=t.formalCharge&&0!==t.formalCharge&&(e=4-t.formalCharge);var i=od("%10.4f%10.4f%10.4f %-3s 0%3i  0  0  0",t.x,t.y,t.z,t.element,e);if(48!==i.length)throw new Error("Incompatible atom for sdf format");return i},t.prototype.formatBond=function(t){return od("%3i%3i%3i  0  0  0",t.atomIndex1+1,t.atomIndex2+1,t.bondOrder)},t.prototype._writeRecords=function(){this._records.length=0,this._writeHeader(),this._writeCTab(),this._writeFooter()},t.prototype._writeHeader=function(){this._records.push(this.idString,this.titleString,"")},t.prototype._writeCTab=function(){var e=this;this._records.push(this.countsString),this.structure.eachAtom(function(t){e._records.push(e.formatAtom(t))}),this.structure.eachBond(function(t){e._records.push(e.formatBond(t))}),this.chargeLines.forEach(function(t){e._records.push(t)}),this._records.push("M  END")},t.prototype._writeFooter=function(){this._records.push("$$$$")},t.prototype.getData=function(){return this._writeRecords(),this._records.join("\n")},Object.defineProperties(t.prototype,i),t}(ad),ud=[],hd=function(t,e){void 0===e&&(e={}),this._mark=0,this._marks=[],this.offset=0;var i=!(this.littleEndian=!0);void 0===t&&(t=8192),"number"==typeof t?t=new ArrayBuffer(t):i=!0;var r=e.offset?e.offset>>>0:0,n=t.byteLength-r,o=r;t instanceof ArrayBuffer||(t.byteLength!==t.buffer.byteLength&&(o=t.byteOffset+r),t=t.buffer),this._lastWrittenByte=i?n:0,this.buffer=t,this.length=n,this.byteLength=n,this.byteOffset=o,this._data=new DataView(this.buffer,o,n)};hd.prototype.available=function(t){return void 0===t&&(t=1),this.offset+t<=this.length},hd.prototype.isLittleEndian=function(){return this.littleEndian},hd.prototype.setLittleEndian=function(){return this.littleEndian=!0,this},hd.prototype.isBigEndian=function(){return!this.littleEndian},hd.prototype.setBigEndian=function(){return this.littleEndian=!1,this},hd.prototype.skip=function(t){return void 0===t&&(t=1),this.offset+=t,this},hd.prototype.seek=function(t){return this.offset=t,this},hd.prototype.mark=function(){return this._mark=this.offset,this},hd.prototype.reset=function(){return this.offset=this._mark,this},hd.prototype.pushMark=function(){return this._marks.push(this.offset),this},hd.prototype.popMark=function(){var t=this._marks.pop();if(void 0===t)throw new Error("Mark stack empty");return this.seek(t),this},hd.prototype.rewind=function(){return this.offset=0,this},hd.prototype.ensureAvailable=function(t){if(void 0===t&&(t=1),!this.available(t)){var e=2*(this.offset+t),i=new Uint8Array(e);i.set(new Uint8Array(this.buffer)),this.buffer=i.buffer,this.length=this.byteLength=e,this._data=new DataView(this.buffer)}return this},hd.prototype.readBoolean=function(){return 0!==this.readUint8()},hd.prototype.readInt8=function(){return this._data.getInt8(this.offset++)},hd.prototype.readUint8=function(){return this._data.getUint8(this.offset++)},hd.prototype.readByte=function(){return this.readUint8()},hd.prototype.readBytes=function(t){void 0===t&&(t=1);for(var e=new Uint8Array(t),i=0;i<t;i++)e[i]=this.readByte();return e},hd.prototype.readInt16=function(){var t=this._data.getInt16(this.offset,this.littleEndian);return this.offset+=2,t},hd.prototype.readUint16=function(){var t=this._data.getUint16(this.offset,this.littleEndian);return this.offset+=2,t},hd.prototype.readInt32=function(){var t=this._data.getInt32(this.offset,this.littleEndian);return this.offset+=4,t},hd.prototype.readUint32=function(){var t=this._data.getUint32(this.offset,this.littleEndian);return this.offset+=4,t},hd.prototype.readFloat32=function(){var t=this._data.getFloat32(this.offset,this.littleEndian);return this.offset+=4,t},hd.prototype.readFloat64=function(){var t=this._data.getFloat64(this.offset,this.littleEndian);return this.offset+=8,t},hd.prototype.readChar=function(){return String.fromCharCode(this.readInt8())},hd.prototype.readChars=function(t){void 0===t&&(t=1),ud.length=t;for(var e=0;e<t;e++)ud[e]=this.readChar();return ud.join("")},hd.prototype.writeBoolean=function(t){return void 0===t&&(t=!1),this.writeUint8(t?255:0),this},hd.prototype.writeInt8=function(t){return this.ensureAvailable(1),this._data.setInt8(this.offset++,t),this._updateLastWrittenByte(),this},hd.prototype.writeUint8=function(t){return this.ensureAvailable(1),this._data.setUint8(this.offset++,t),this._updateLastWrittenByte(),this},hd.prototype.writeByte=function(t){return this.writeUint8(t)},hd.prototype.writeBytes=function(t){this.ensureAvailable(t.length);for(var e=0;e<t.length;e++)this._data.setUint8(this.offset++,t[e]);return this._updateLastWrittenByte(),this},hd.prototype.writeInt16=function(t){return this.ensureAvailable(2),this._data.setInt16(this.offset,t,this.littleEndian),this.offset+=2,this._updateLastWrittenByte(),this},hd.prototype.writeUint16=function(t){return this.ensureAvailable(2),this._data.setUint16(this.offset,t,this.littleEndian),this.offset+=2,this._updateLastWrittenByte(),this},hd.prototype.writeInt32=function(t){return this.ensureAvailable(4),this._data.setInt32(this.offset,t,this.littleEndian),this.offset+=4,this._updateLastWrittenByte(),this},hd.prototype.writeUint32=function(t){return this.ensureAvailable(4),this._data.setUint32(this.offset,t,this.littleEndian),this.offset+=4,this._updateLastWrittenByte(),this},hd.prototype.writeFloat32=function(t){return this.ensureAvailable(4),this._data.setFloat32(this.offset,t,this.littleEndian),this.offset+=4,this._updateLastWrittenByte(),this},hd.prototype.writeFloat64=function(t){return this.ensureAvailable(8),this._data.setFloat64(this.offset,t,this.littleEndian),this.offset+=8,this._updateLastWrittenByte(),this},hd.prototype.writeChar=function(t){return this.writeUint8(t.charCodeAt(0))},hd.prototype.writeChars=function(t){for(var e=0;e<t.length;e++)this.writeUint8(t.charCodeAt(e));return this},hd.prototype.toArray=function(){return new Uint8Array(this.buffer,this.byteOffset,this._lastWrittenByte)},hd.prototype._updateLastWrittenByte=function(){this.offset>this._lastWrittenByte&&(this._lastWrittenByte=this.offset)};var ld=function(e){function t(t){e.call(this),this.mimeType="application/vnd.ms-pki.stl",this.defaultName="surface",this.defaultExt="stl",this.surface=t}return e&&(t.__proto__=e),((t.prototype=Object.create(e&&e.prototype)).constructor=t).prototype.getData=function(){var t=this.surface.index.length/3,e=new hd(2*t+3*t*4*4+80+4);e.skip(80),e.writeUint32(t);for(var i=new Qe,r=new Qe,n=new Qe,o=new Qe,a=0;a<t;a++){var s=[this.surface.index[3*a],this.surface.index[3*a+1],this.surface.index[3*a+2]];r.fromArray(this.surface.normal,3*s[0]),n.fromArray(this.surface.normal,3*s[1]),o.fromArray(this.surface.normal,3*s[2]),i.addVectors(r,n).add(o).normalize(),e.writeFloat32(i.x),e.writeFloat32(i.y),e.writeFloat32(i.z);for(var c=0;c<3;c++)i.fromArray(this.surface.position,3*s[c]),e.writeFloat32(i.x),e.writeFloat32(i.y),e.writeFloat32(i.z);e.writeUint16(0)}return new DataView(e.buffer)},t}(ad),pd=function(){this.count=0,this.signals={countChanged:new Wl}};pd.prototype.clear=function(){this.change(-this.count)},pd.prototype.change=function(t){this.count+=t,this.signals.countChanged.dispatch(t,this.count),this.count<0&&Bp.warn("Counter.count below zero",this.count)},pd.prototype.increment=function(){this.change(1)},pd.prototype.decrement=function(){this.change(-1)},pd.prototype.listen=function(t){this.change(t.count),t.signals.countChanged.add(this.change,this)},pd.prototype.unlisten=function(t){var e=t.signals.countChanged;e.has(this.change,this)&&e.remove(this.change,this)},pd.prototype.onZeroOnce=function(t,e){var i=this;if(0===this.count)t.call(e);else{var r=function(){0===i.count&&(i.signals.countChanged.remove(r,i),t.call(e))};this.signals.countChanged.add(r,this)}},pd.prototype.dispose=function(){this.clear(),this.signals.countChanged.dispose()},Hp.add("shader/BasicLine.vert","void main(){\n#include begin_vertex\n#include project_vertex\n}"),Hp.add("shader/BasicLine.frag","uniform vec3 uColor;\n#include common\n#include fog_pars_fragment\nvoid main(){\ngl_FragColor = vec4( uColor, 1.0 );\n#include premultiplied_alpha_fragment\n#include tonemapping_fragment\n#include encodings_fragment\n#include fog_fragment\n}"),Hp.add("shader/Quad.vert","varying vec2 vUv;\nvoid main() {\nvUv = uv;\ngl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}"),Hp.add("shader/Quad.frag","varying vec2 vUv;\nuniform sampler2D tForeground;\nuniform float scale;\nvoid main() {\nvec4 foreground = texture2D( tForeground, vUv );\ngl_FragColor = foreground * scale;\n}");var dd=function(){this.signals={updated:new Wl},this.maxDuration=-1/0,this.minDuration=1/0,this.avgDuration=14,this.lastDuration=1/0,this.prevFpsTime=0,this.lastFps=1/0,this.lastFrames=1,this.frames=0,this.count=0,this.begin()};dd.prototype.update=function(){this.startTime=this.end(),this.currentTime=this.startTime,this.signals.updated.dispatch()},dd.prototype.begin=function(){this.startTime=window.performance.now(),this.lastFrames=this.frames},dd.prototype.end=function(){var t=window.performance.now();return this.count+=1,this.frames+=1,this.lastDuration=t-this.startTime,this.minDuration=Math.min(this.minDuration,this.lastDuration),this.maxDuration=Math.max(this.maxDuration,this.lastDuration),this.avgDuration-=this.avgDuration/30,this.avgDuration+=this.lastDuration/30,t>this.prevFpsTime+1e3&&(this.lastFps=this.frames,this.prevFpsTime=t,this.frames=0),t},Hp.add("shader/chunk/fog_fragment.glsl","#ifdef USE_FOG\nfloat depth = length( vViewPosition );\n#ifdef FOG_EXP2\nfloat fogFactor = whiteCompliment( exp2( - fogDensity * fogDensity * depth * depth * LOG2 ) );\n#else\nfloat fogFactor = smoothstep( fogNear, fogFar, depth );\n#endif\ngl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif"),Hp.add("shader/chunk/interior_fragment.glsl","if( gl_FrontFacing == false ){\n#ifdef USE_INTERIOR_COLOR\noutgoingLight.xyz = interiorColor;\n#else\n#ifdef DIFFUSE_INTERIOR\noutgoingLight.xyz = vColor;\n#endif\n#endif\noutgoingLight.xyz *= 1.0 - interiorDarkening;\n}"),Hp.add("shader/chunk/matrix_scale.glsl","float matrixScale( in mat4 m ){\nvec4 r = m[ 0 ];\nreturn sqrt( r[ 0 ] * r[ 0 ] + r[ 1 ] * r[ 1 ] + r[ 2 ] * r[ 2 ] );\n}"),Hp.add("shader/chunk/nearclip_vertex.glsl","#ifdef NEAR_CLIP\nif( vViewPosition.z < clipNear - 5.0 )\ngl_Position.z = 2.0 * gl_Position.w;\n#endif"),Hp.add("shader/chunk/nearclip_fragment.glsl","#ifdef NEAR_CLIP\nif( vViewPosition.z < clipNear )\ndiscard;\n#endif"),Hp.add("shader/chunk/opaque_back_fragment.glsl","#ifdef OPAQUE_BACK\n#ifdef FLIP_SIDED\nif( gl_FrontFacing == true ){\ngl_FragColor.a = 1.0;\n}\n#else\nif( gl_FrontFacing == false ){\ngl_FragColor.a = 1.0;\n}\n#endif\n#endif"),Hp.add("shader/chunk/radiusclip_vertex.glsl","#ifdef RADIUS_CLIP\nif( distance( vViewPosition, vClipCenter ) > clipRadius + 5.0 )\ngl_Position.z = 2.0 * gl_Position.w;\n#endif"),Hp.add("shader/chunk/radiusclip_fragment.glsl","#ifdef RADIUS_CLIP\nif( distance( vViewPosition, vClipCenter ) > clipRadius )\ndiscard;\n#endif"),Hp.add("shader/chunk/unpack_color.glsl","vec3 unpackColor(float f) {\nvec3 color;\ncolor.r = floor(f / 256.0 / 256.0);\ncolor.g = floor((f - color.r * 256.0 * 256.0) / 256.0);\ncolor.b = floor(f - color.r * 256.0 * 256.0 - color.g * 256.0);\nreturn color / 255.0;\n}");var fd=/^(?!\/\/)\s*#include\s+(\S+)/gim,md={};function gd(t,e){void 0===e&&(e={});var i=t+"|";for(var r in e)i+=r+":"+e[r];if(!md[i]){var n=function(t){if(void 0===t)return"";var e=[];for(var i in t){var r=t[i];r&&e.push("#define "+i+" "+r)}return e.join("\n")+"\n"}(e),o=Hp.get("shader/"+t);if(!o)throw new Error("empty shader, '"+t+"'");o=o.replace(fd,function(t,e){var i="shader/chunk/"+e+".glsl",r=Hp.get(i)||Ti[e];if(!r)throw new Error("empty chunk, '"+e+"'");return r}),md[i]=n+o}return md[i]}if("undefined"!=typeof WebGLRenderingContext){var vd=WebGLRenderingContext.prototype,yd=vd.getShaderParameter;vd.getShaderParameter=function(){return!de.Debug||yd.apply(this,arguments)};var bd=vd.getShaderInfoLog;vd.getShaderInfoLog=function(){return de.Debug?bd.apply(this,arguments):""};var xd=vd.getProgramParameter;vd.getProgramParameter=function(t,e){return!de.Debug&&e===vd.LINK_STATUS||xd.apply(this,arguments)};var _d=vd.getProgramInfoLog;vd.getProgramInfoLog=function(){return de.Debug?_d.apply(this,arguments):""}}var wd=[[[0,0]],[[4,4],[-4,-4]],[[-2,-6],[6,-2],[-6,2],[2,6]],[[1,-3],[-1,3],[5,1],[-3,-5],[-5,5],[-7,-1],[3,7],[7,-7]],[[1,1],[-1,-3],[-3,2],[4,-1],[-5,-2],[2,5],[5,3],[3,-5],[-2,6],[0,-7],[-4,-6],[-6,4],[-8,0],[7,-4],[6,7],[-7,-8]],[[-4,-7],[-7,-5],[-3,-5],[-5,-4],[-1,-4],[-2,-2],[-6,-1],[-4,0],[-7,1],[-1,2],[-6,3],[-3,3],[-7,6],[-3,6],[-5,7],[-1,7],[5,-7],[1,-6],[6,-5],[4,-4],[2,-3],[7,-2],[1,-1],[4,-1],[2,1],[6,2],[0,4],[4,4],[2,5],[7,5],[5,6],[3,7]]];wd.forEach(function(t){t.forEach(function(t){t[0]*=.0625,t[1]*=.0625})});var Sd=function(t,e,i,r){this.canvas=document.createElement("canvas"),this._viewer=i,this._factor=al(r.factor,2),this._antialias=al(r.antialias,!1),this._onProgress=r.onProgress,this._onFinish=r.onFinish,this._antialias&&(this._factor*=2),this._n=this._factor*this._factor,this._width=this._viewer.width,this._height=this._viewer.height,this._antialias?(this.canvas.width=this._width*this._factor/2,this.canvas.height=this._height*this._factor/2):(this.canvas.width=this._width*this._factor,this.canvas.height=this._height*this._factor),this._ctx=this.canvas.getContext("2d"),this._viewerSampleLevel=i.sampleLevel,this._viewer.setSampling(-1)};Sd.prototype._renderTile=function(t){var e=this._viewer,i=this._width,r=this._height,n=this._factor,o=t%n*i,a=Math.floor(t/n)*r;if(e.camera.setViewOffset(i*n,r*n,o,a,i,r),e.render(),this._antialias){var s=o%2*(i%2),c=a%2*(r%2);this._ctx.drawImage(e.renderer.domElement,Math.floor(o/2)+s,Math.floor(a/2)+c,Math.ceil(i/2)-s,Math.ceil(r/2)-c)}else this._ctx.drawImage(e.renderer.domElement,Math.floor(o),Math.floor(a),Math.ceil(i),Math.ceil(r));"function"==typeof this._onProgress&&this._onProgress(t+1,this._n,!1)},Sd.prototype._finalize=function(){this._viewer.setSampling(this._viewerSampleLevel),this._viewer.camera.view=null,"function"==typeof this._onFinish&&this._onFinish(this._n+1,this._n,!1)},Sd.prototype.render=function(){for(var t=0;t<=this._n;++t)t===this._n?this._finalize():this._renderTile(t)},Sd.prototype.renderAsync=function(){for(var t=this,e=0,i=this._n,r=function(){e===i?t._finalize():t._renderTile(e),e+=1},n=0;n<=i;++n)setTimeout(r,0)};var Ad=2*Math.PI,Md=(Math.PI,180/Math.PI);function Pd(t,e,i,r,n){void 0===i&&(i=1),void 0===r&&(r=0);var o=n?n.length:t.length/i,a=0,s=0;if(n)for(var c=0;c<o;++c){var u=(t[n[c]*i+r]+e)%e/e*Ad-Math.PI;a+=Math.cos(u),s+=Math.sin(u)}else for(var h=r;h<o;h+=i){var l=(t[h]+e)%e/e*Ad-Math.PI;a+=Math.cos(l),s+=Math.sin(l)}return a/=o,s/=o,(Math.atan2(s,a)+Math.PI)/Ad*e}function Ed(t,e,i,r){void 0===r&&(r=0);var n=t.length;i=i||new Float32Array(n);for(var o=0;o<n;o+=3)i[r+o+0]=(t[o+0]+e[o+0])/2,i[r+o+1]=(t[o+1]+e[o+1])/2,i[r+o+2]=(t[o+2]+e[o+2])/2;return i}function Cd(t,e){for(var i=t.length,r=new Float32Array(i),n=0;n<i;n+=3)r[n+0]=e[n+0]-t[n+0],r[n+1]=e[n+1]-t[n+1],r[n+2]=e[n+2]-t[n+2];return r}function Td(t,e,i){for(var r=i||new Float32Array(t),n=0;n<t;++n)r[n]=e;return r}function Id(t,e,i,r,n){for(var o=n||new Float32Array(3*t),a=0;a<t;++a){var s=3*a;o[s+0]=e,o[s+1]=i,o[s+2]=r}return o}function Rd(t){for(var e=new Float32Array(t),i=0;i<t;++i)e[i]=i;return e}function Ld(t,e,i,r){void 0===i&&(i=0);for(var n=r||new Float32Array(t*e),o=0;o<t;++o)for(var a=i+o*e,s=0;s<e;++s)n[a+s]=o;return n}function Od(t,e){for(var i=t.length,r=new Float32Array(i*e),n=0;n<i;++n)for(var o=n*e,a=t[n],s=0;s<e;++s)r[o+s]=a;return r}function Dd(t,e,i,r,n){for(var o=0;o<n;++o)e[r+o]=t[i+o]}function kd(t,e,i,r){Dd(t,t,e,i,r)}function Bd(t){for(var e=-1/0,i=0,r=t.length;i<r;++i)t[i]>e&&(e=t[i]);return e}function Nd(t){for(var e=1/0,i=0,r=t.length;i<r;++i)t[i]<e&&(e=t[i]);return e}function Fd(t,e,i){void 0===e&&(e=1),void 0===i&&(i=0);for(var r=t.length,n=0,o=i;o<r;o+=e)n+=t[o];return n}function zd(t,e,i){return void 0===e&&(e=1),void 0===i&&(i=0),Fd(t,e,i)/(t.length/e)}var Ud={trim:!1,factor:1,antialias:!1,transparent:!1,onProgress:void 0};function jd(o,r){void 0===r&&(r={});var t=sl(r,Ud),i=t.trim,e=t.factor,a=t.antialias,s=t.transparent,c=o.renderer,u=o.camera,h=c.getClearAlpha(),n=c.getClearColor();function l(t){void 0===t&&(t=!1);var i=e;a&&(i*=2),t&&(i=1/i),o.scene.traverse(function(t){var e=t.material;e&&e.linewidth&&(e.linewidth*=i),e&&e.uniforms&&e.uniforms.size&&void 0===e.uniforms.size.__seen&&(e.uniforms.size.value*=i,e.uniforms.size.__seen=!0),e&&e.uniforms&&e.uniforms.linewidth&&void 0===e.uniforms.linewidth.__seen&&(e.uniforms.linewidth.value*=i,e.uniforms.linewidth.__seen=!0)}),o.scene.traverse(function(t){var e=t.material;e&&e.uniforms&&e.uniforms.size&&delete e.uniforms.size.__seen,e&&e.uniforms&&e.uniforms.linewidth&&delete e.uniforms.linewidth.__seen})}function p(t){if(i){var e=n;return function(t,e,i,r,n){var o,a,s,c,u=t.height,h=t.width,l=t.getContext("2d").getImageData(0,0,h,u).data;for(s=!1,a=0;a<u;a++){for(o=0;o<h;o++)if(l[c=4*(a*h+o)]!==e||l[c+1]!==i||l[c+2]!==r||l[c+3]!==n){s=!0;break}if(s)break}var p=a;for(s=!1,o=0;o<h;o++){for(a=0;a<u;a++)if(l[c=4*(a*h+o)]!==e||l[c+1]!==i||l[c+2]!==r||l[c+3]!==n){s=!0;break}if(s)break}var d=o;for(s=!1,a=u-1;0<=a;a--){for(o=h-1;0<=o;o--)if(l[c=4*(a*h+o)]!==e||l[c+1]!==i||l[c+2]!==r||l[c+3]!==n){s=!0;break}if(s)break}var f=a;for(s=!1,o=h-1;0<=o;o--){for(a=u-1;0<=a;a--)if(l[c=4*(a*h+o)]!==e||l[c+1]!==i||l[c+2]!==r||l[c+3]!==n){s=!0;break}if(s)break}var m=o,g=document.createElement("canvas");return g.width=m-d,g.height=f-p,g.getContext("2d").drawImage(t,d,p,g.width,g.height,0,0,g.width,g.height),g}(t,s?0:255*e.r,s?0:255*e.g,s?0:255*e.b,s?0:255)}return t}function d(t,e,i){"function"==typeof r.onProgress&&r.onProgress(t,e,i)}return new Promise(function(i,r){var n=new Sd(c,u,o,{factor:e,antialias:a,onProgress:d,onFinish:function(t,e){p(n.canvas).toBlob(function(t){c.setClearAlpha(h),l(!0),o.requestRender(),d(e,e,!0),t?i(t):r("error creating image")},"image/png")}});c.setClearAlpha(s?0:1),l(),n.renderAsync()})}var Gd=new Qe,Vd=new Ke,Hd=new Ke;var $d=new Ze,Wd=new Ke,Xd=new Ke;function qd(t,e){Wd.getInverse(e.projectionMatrix),Xd.copy(e.projectionMatrix).transpose(),t.traverse(function(t){var e=t.material;if(e){var i=e.uniforms;i&&(i.projectionMatrixInverse&&i.projectionMatrixInverse.value.copy(Wd),i.projectionMatrixTranspose&&i.projectionMatrixTranspose.value.copy(Xd))}})}function Yd(t,e,i){var r=t.createShader(i);return t.shaderSource(r,e),t.compileShader(r),t.getShaderParameter(r,t.COMPILE_STATUS)?r:(console.log("error compiling shader "+r+": "+t.getShaderInfoLog(r)),t.deleteShader(r),null)}function Zd(t,e){var i=t.getExtension(e);return i||console.log("extension '"+e+"' not available"),i}var Kd=new Float32Array([-1,-1,1,-1,-1,1,-1,1,1,-1,1,1]);function Jd(t){var e=document.createElement("canvas");e.width=16,e.height=16,e.style.width="16px",e.style.height="16px";var i=e.getContext("webgl")||e.getContext("experimental-webgl");if(!i)return console.log("error creating webgl context for "+t),!1;Zd(i,"OES_texture_float"),Zd(i,"OES_texture_half_float"),Zd(i,"WEBGL_color_buffer_float");var r=Yd(i,"\nattribute vec4 a_position;\n\nvoid main() {\n  gl_Position = a_position;\n}",i.VERTEX_SHADER),n=Yd(i,"\nprecision mediump float;\nuniform vec4 u_color;\nuniform sampler2D u_texture;\n\nvoid main() {\n  gl_FragColor = texture2D(u_texture, vec2(0.5, 0.5)) * u_color;\n}",i.FRAGMENT_SHADER);if(!r||!n)return!1;var o,a,s,c,u,h=(a=[r,n],u=(o=i).createProgram(),a.forEach(function(t){return o.attachShader(u,t)}),s&&s.forEach(function(t,e){o.bindAttribLocation(u,c?c[e]:e,t)}),o.linkProgram(u),o.getProgramParameter(u,o.LINK_STATUS)?u:(console.log("error linking program: "+o.getProgramInfoLog(u)),o.deleteProgram(u),null));i.useProgram(h);var l=i.getAttribLocation(h,"a_position"),p=i.getUniformLocation(h,"u_color");if(!p)return console.log("error getting 'u_color' uniform location"),!1;var d=i.createBuffer();i.bindBuffer(i.ARRAY_BUFFER,d),i.bufferData(i.ARRAY_BUFFER,Kd,i.STATIC_DRAW),i.enableVertexAttribArray(l),i.vertexAttribPointer(l,2,i.FLOAT,!1,0,0);var f=i.createTexture(),m=new Uint8Array([255,255,255,255]);i.bindTexture(i.TEXTURE_2D,f),i.texImage2D(i.TEXTURE_2D,0,i.RGBA,1,1,0,i.RGBA,i.UNSIGNED_BYTE,m);var g=i.createTexture();i.bindTexture(i.TEXTURE_2D,g),i.texImage2D(i.TEXTURE_2D,0,i.RGBA,1,1,0,i.RGBA,t,null),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MIN_FILTER,i.NEAREST),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MAG_FILTER,i.NEAREST);var v=i.createFramebuffer();if(i.bindFramebuffer(i.FRAMEBUFFER,v),i.framebufferTexture2D(i.FRAMEBUFFER,i.COLOR_ATTACHMENT0,i.TEXTURE_2D,g,0),i.checkFramebufferStatus(i.FRAMEBUFFER)!==i.FRAMEBUFFER_COMPLETE)return console.log("error creating framebuffer for "+t),!1;i.bindTexture(i.TEXTURE_2D,f),i.uniform4fv(p,[0,10,20,1]),i.drawArrays(i.TRIANGLES,0,6),i.bindTexture(i.TEXTURE_2D,g),i.bindFramebuffer(i.FRAMEBUFFER,null),i.clearColor(1,0,0,1),i.clear(i.COLOR_BUFFER_BIT),i.uniform4fv(p,[0,.1,.05,1]),i.drawArrays(i.TRIANGLES,0,6);var y=new Uint8Array(4);if(i.readPixels(0,0,1,1,i.RGBA,i.UNSIGNED_BYTE,y),0!==y[0]||y[1]<248||y[2]<248||y[3]<254)return console.log("not able to actually render to "+t+" texture"),!1;if(t===i.FLOAT){i.bindFramebuffer(i.FRAMEBUFFER,v);var b=new Float32Array(4);i.readPixels(0,0,1,1,i.RGBA,i.FLOAT,b);var x=i.getError();if(x)return console.log("error reading pixels as float: '"+function(t,e){switch(e){case t.NO_ERROR:return"no error";case t.INVALID_ENUM:return"invalid enum";case t.INVALID_VALUE:return"invalid value";case t.INVALID_OPERATION:return"invalid operation";case t.INVALID_FRAMEBUFFER_OPERATION:return"invalid framebuffer operation";case t.OUT_OF_MEMORY:return"out of memory";case t.CONTEXT_LOST_WEBGL:return"context lost"}return"unknown error"}(i,x)+"'"),!1}return!0}var Qd=new Float32Array(4),tf=new Uint8Array(4),ef=new Ke;function rf(t,e,i,r,n){var o=n.uniforms,a=[];if(o.objectId&&(o.objectId.value=Op?this.id:this.id/255,a.push("objectId")),(o.modelViewMatrixInverse||o.modelViewMatrixInverseTranspose||o.modelViewProjectionMatrix||o.modelViewProjectionMatrixInverse)&&this.modelViewMatrix.multiplyMatrices(i.matrixWorldInverse,this.matrixWorld),o.modelViewMatrixInverse&&(o.modelViewMatrixInverse.value.getInverse(this.modelViewMatrix),a.push("modelViewMatrixInverse")),o.modelViewMatrixInverseTranspose&&(o.modelViewMatrixInverse?o.modelViewMatrixInverseTranspose.value.copy(o.modelViewMatrixInverse.value).transpose():o.modelViewMatrixInverseTranspose.value.getInverse(this.modelViewMatrix).transpose(),a.push("modelViewMatrixInverseTranspose")),o.modelViewProjectionMatrix&&(o.modelViewProjectionMatrix.value.multiplyMatrices(i.projectionMatrix,this.modelViewMatrix),a.push("modelViewProjectionMatrix")),o.modelViewProjectionMatrixInverse&&(o.modelViewProjectionMatrix?ef.copy(o.modelViewProjectionMatrix.value):ef.multiplyMatrices(i.projectionMatrix,this.modelViewMatrix),o.modelViewProjectionMatrixInverse.value.getInverse(ef),a.push("modelViewProjectionMatrixInverse")),a.length){var s=t.properties.get(n);if(s.program){var c=t.getContext(),u=s.program;c.useProgram(u.program);var h=u.getUniforms();a.forEach(function(t){h.setValue(c,t,o[t].value)})}}}var nf=function(t){if(this.boundingBox=new Ai,this.boundingBoxSize=new Qe,this.boundingBoxLength=0,this.info={memory:{programs:0,geometries:0,textures:0},render:{calls:0,vertices:0,faces:0,points:0}},this.distVector=new Qe,this.signals={ticked:new Wl,rendered:new Wl},"string"==typeof t){var e=document.getElementById(t);this.container=null===e?document.createElement("div"):e}else t instanceof HTMLElement?this.container=t:this.container=document.createElement("div");if(this.container===document.body)this.width=window.innerWidth||1,this.height=window.innerHeight||1;else{var i=this.container.getBoundingClientRect();this.width=i.width||1,this.height=i.height||1,this.container.style.overflow="hidden"}this.wrapper=document.createElement("div"),this.wrapper.style.position="relative",this.container.appendChild(this.wrapper),this._initParams(),this._initStats(),this._initCamera(),this._initScene(),!1!==this._initRenderer()?(this._initHelper(),this.setBackground(),this.setFog(),this.animate=this.animate.bind(this)):Bp.error("Viewer: could not initialize renderer")};nf.prototype._initParams=function(){this.parameters={fogColor:new Li(0),fogNear:50,fogFar:100,backgroundColor:new Li(0),cameraType:"perspective",cameraFov:40,cameraEyeSep:.3,cameraZ:-80,clipNear:0,clipFar:100,clipDist:10,lightColor:new Li(14540253),lightIntensity:1,ambientColor:new Li(14540253),ambientIntensity:.2,sampleLevel:0}},nf.prototype._initCamera=function(){var t=new Qe(0,0,0),e=this.width,i=this.height;this.perspectiveCamera=new ga(this.parameters.cameraFov,e/i),this.perspectiveCamera.position.z=this.parameters.cameraZ,this.perspectiveCamera.lookAt(t),this.orthographicCamera=new sr(e/-2,e/2,i/2,i/-2),this.orthographicCamera.position.z=this.parameters.cameraZ,this.orthographicCamera.lookAt(t),this.stereoCamera=new Uu,this.stereoCamera.aspect=.5,this.stereoCamera.eyeSep=this.parameters.cameraEyeSep;var r=this.parameters.cameraType;if("orthographic"===r)this.camera=this.orthographicCamera;else{if("perspective"!==r&&"stereo"!==r)throw new Error("Unknown cameraType '"+r+"'");this.camera=this.perspectiveCamera}this.camera.updateProjectionMatrix()},nf.prototype._initStats=function(){this.stats=new dd},nf.prototype._initScene=function(){this.scene||(this.scene=new wa,this.scene.name="scene"),this.rotationGroup=new ka,this.rotationGroup.name="rotationGroup",this.scene.add(this.rotationGroup),this.translationGroup=new ka,this.translationGroup.name="translationGroup",this.rotationGroup.add(this.translationGroup),this.modelGroup=new ka,this.modelGroup.name="modelGroup",this.translationGroup.add(this.modelGroup),this.pickingGroup=new ka,this.pickingGroup.name="pickingGroup",this.translationGroup.add(this.pickingGroup),this.backgroundGroup=new ka,this.backgroundGroup.name="backgroundGroup",this.translationGroup.add(this.backgroundGroup),this.helperGroup=new ka,this.helperGroup.name="helperGroup",this.translationGroup.add(this.helperGroup),this.scene.fog=new _a(this.parameters.fogColor.getHex()),this.spotLight=new Uc(this.parameters.lightColor.getHex(),this.parameters.lightIntensity),this.scene.add(this.spotLight),this.ambientLight=new Hc(this.parameters.ambientColor.getHex(),this.parameters.ambientIntensity),this.scene.add(this.ambientLight)},nf.prototype._initRenderer=function(){var t=window.devicePixelRatio,e=this.width,i=this.height;try{this.renderer=new ba({preserveDrawingBuffer:!0,alpha:!0,antialias:!0})}catch(t){return!(this.wrapper.innerHTML='<div style="display:flex;align-items:center;justify-content:center;height:100%;"><p style="padding:15px;text-align:center;">Your browser/graphics card does not seem to support <a target="_blank" href="https://en.wikipedia.org/wiki/WebGL">WebGL</a>.<br/><br/>Find out how to get it <a target="_blank" href="http://get.webgl.org/">here</a>.</p></div>')}this.renderer.setPixelRatio(t),this.renderer.setSize(e,i),this.renderer.autoClear=!1,this.renderer.sortObjects=!0;var r,n,o=this.renderer.getContext();r=this.renderer.extensions.get("EXT_frag_depth"),Dp=r,this.renderer.extensions.get("OES_element_index_uint"),n=this.renderer.extensions.get("OES_texture_float")&&this.renderer.extensions.get("WEBGL_color_buffer_float")||this.renderer.extensions.get("OES_texture_float")&&Jd(o.FLOAT),Op=n,this.wrapper.appendChild(this.renderer.domElement);var a=e*t,s=i*t;this.renderer.extensions.get("OES_texture_float"),this.supportsHalfFloat=this.renderer.extensions.get("OES_texture_half_float")&&Jd(36193),this.renderer.extensions.get("WEBGL_color_buffer_float"),de.Debug&&console.log(JSON.stringify({Browser:Tp,OES_texture_float:!!this.renderer.extensions.get("OES_texture_float"),OES_texture_half_float:!!this.renderer.extensions.get("OES_texture_half_float"),WEBGL_color_buffer_float:!!this.renderer.extensions.get("WEBGL_color_buffer_float"),"testTextureSupport Float":Jd(o.FLOAT),"testTextureSupport HalfFloat":Jd(36193),"this.supportsHalfFloat":this.supportsHalfFloat,SupportsReadPixelsFloat:Op},null,2)),this.pickingTarget=new _i(a,s,{minFilter:jt,magFilter:jt,stencilBuffer:!1,format:se,type:Op?Qt:Xt}),this.pickingTarget.texture.generateMipmaps=!1,this.renderer.clearTarget(this.pickingTarget,!0,!0,!0),this.renderer.setRenderTarget(null),this.sampleTarget=new _i(a,s,{minFilter:Ht,magFilter:Ht,format:se}),this.holdTarget=new _i(a,s,{minFilter:jt,magFilter:jt,format:se,type:Xt}),this.compositeUniforms={tForeground:new Lh(this.sampleTarget.texture),scale:new Lh(1)},this.compositeMaterial=new xn({uniforms:this.compositeUniforms,vertexShader:gd("Quad.vert"),fragmentShader:gd("Quad.frag"),premultipliedAlpha:!0,transparent:!0,blending:q,depthTest:!1,depthWrite:!1}),this.compositeCamera=new sr(-1,1,1,-1,0,1),this.compositeScene=new wa,this.compositeScene.name="compositeScene",this.compositeScene.add(new An(new Hr(2,2),this.compositeMaterial))},nf.prototype._initHelper=function(){var t=new Uint16Array([0,1,1,2,2,3,3,0,4,5,5,6,6,7,7,4,0,4,1,5,2,6,3,7]),e=new Float32Array(24),i=new jr;i.setIndex(new yr(t,1)),i.addAttribute("position",new yr(e,3));var r=new xn({uniforms:{uColor:{value:new Li("skyblue")}},vertexShader:gd("BasicLine.vert"),fragmentShader:gd("BasicLine.frag")});this.boundingBoxMesh=new Ra(i,r),this.helperGroup.add(this.boundingBoxMesh)},nf.prototype.updateHelper=function(){var t=this.boundingBoxMesh.geometry.attributes.position,e=t.array,i=this.boundingBox,r=i.min,n=i.max;e[0]=n.x,e[1]=n.y,e[2]=n.z,e[3]=r.x,e[4]=n.y,e[5]=n.z,e[6]=r.x,e[7]=r.y,e[8]=n.z,e[9]=n.x,e[10]=r.y,e[11]=n.z,e[12]=n.x,e[13]=n.y,e[14]=r.z,e[15]=r.x,e[16]=n.y,e[17]=r.z,e[18]=r.x,e[19]=r.y,e[20]=r.z,e[21]=n.x,e[22]=r.y,e[23]=r.z,t.needsUpdate=!0,this.boundingBox.isEmpty()||this.boundingBoxMesh.geometry.computeBoundingSphere()},nf.prototype.add=function(e,t){var i=this;t?t.forEach(function(t){return i.addBuffer(e,t)}):this.addBuffer(e),e.parameters.background?(this.backgroundGroup.add(e.group),this.backgroundGroup.add(e.wireframeGroup)):(this.modelGroup.add(e.group),this.modelGroup.add(e.wireframeGroup)),e.pickable&&this.pickingGroup.add(e.pickingGroup),de.Debug&&this.updateHelper()},nf.prototype.addBuffer=function(e,i){function r(t){t instanceof ka?t.children.forEach(r):(t.userData.buffer=e,t.userData.instance=i,t.onBeforeRender=rf)}var t=e.getMesh();i&&t.applyMatrix(i.matrix),r(t),e.group.add(t);var n=e.getWireframeMesh();if(i&&(n.matrix.copy(t.matrix),n.position.copy(t.position),n.quaternion.copy(t.quaternion),n.scale.copy(t.scale)),r(n),e.wireframeGroup.add(n),e.pickable){var o=e.getPickingMesh();i&&(o.matrix.copy(t.matrix),o.position.copy(t.position),o.quaternion.copy(t.quaternion),o.scale.copy(t.scale)),r(o),e.pickingGroup.add(o)}i?this._updateBoundingBox(e.geometry,e.matrix,i.matrix):this._updateBoundingBox(e.geometry,e.matrix)},nf.prototype.remove=function(e){this.translationGroup.children.forEach(function(t){t.remove(e.group),t.remove(e.wireframeGroup)}),e.pickable&&this.pickingGroup.remove(e.pickingGroup),this.updateBoundingBox(),de.Debug&&this.updateHelper()},nf.prototype._updateBoundingBox=function(t,e,i){var n=this.boundingBox;function r(t,e,i){t.boundingBox||t.computeBoundingBox();var r=t.boundingBox.clone();e&&r.applyMatrix4(e),i&&r.applyMatrix4(i),r.min.equals(r.max)&&r.expandByScalar(5),n.union(r)}function o(t){var e,i;void 0!==t.geometry&&(t.userData.buffer&&(e=t.userData.buffer.matrix),t.userData.instance&&(i=t.userData.instance.matrix),r(t.geometry,e,i))}t?r(t,e,i):(n.makeEmpty(),this.modelGroup.traverse(o),this.backgroundGroup.traverse(o)),n.getSize(this.boundingBoxSize),this.boundingBoxLength=this.boundingBoxSize.length()},nf.prototype.updateBoundingBox=function(){this._updateBoundingBox(),de.Debug&&this.updateHelper()},nf.prototype.getPickingPixels=function(){var t=this.width,e=this.height,i=t*e*4,r=Op?new Float32Array(i):new Uint8Array(i);return this.render(!0),this.renderer.readRenderTargetPixels(this.pickingTarget,0,0,t,e,r),r},nf.prototype.getImage=function(l){var p=this;return new Promise(function(t){if(l){var e=p,i=e.width,r=e.height,n=i*r*4,o=p.getPickingPixels();if(Op){for(var a=new Uint8Array(n),s=0;s<n;++s)a[s]=Math.round(255*o[s]);o=a}var c=document.createElement("canvas");c.width=i,c.height=r;var u=c.getContext("2d"),h=u.getImageData(0,0,i,r);h.data.set(o),u.putImageData(h,0,0),c.toBlob(t,"image/png")}else p.renderer.domElement.toBlob(t,"image/png")})},nf.prototype.makeImage=function(t){return void 0===t&&(t={}),jd(this,t)},nf.prototype.setLight=function(t,e,i,r){var n=this.parameters;void 0!==t&&n.lightColor.set(t),void 0!==e&&(n.lightIntensity=e),void 0!==i&&n.ambientColor.set(i),void 0!==r&&(n.ambientIntensity=r),this.requestRender()},nf.prototype.setFog=function(t,e,i){var r=this.parameters;void 0!==t&&r.fogColor.set(t),void 0!==e&&(r.fogNear=e),void 0!==i&&(r.fogFar=i),this.requestRender()},nf.prototype.setBackground=function(t){var e=this.parameters;t&&e.backgroundColor.set(t),this.setFog(e.backgroundColor),this.renderer.setClearColor(e.backgroundColor,0),this.renderer.domElement.style.backgroundColor=e.backgroundColor.getStyle(),this.requestRender()},nf.prototype.setSampling=function(t){void 0!==t&&(this.parameters.sampleLevel=t,this.sampleLevel=t),this.requestRender()},nf.prototype.setCamera=function(t,e,i){var r=this.parameters;if(t&&(r.cameraType=t),e&&(r.cameraFov=e),i&&(r.cameraEyeSep=i),"orthographic"===r.cameraType)this.camera!==this.orthographicCamera&&(this.camera=this.orthographicCamera,this.camera.position.copy(this.perspectiveCamera.position),this.camera.up.copy(this.perspectiveCamera.up),this.updateZoom());else{if("perspective"!==r.cameraType&&"stereo"!==r.cameraType)throw new Error("Unknown cameraType '"+r.cameraType+"'");this.camera!==this.perspectiveCamera&&(this.camera=this.perspectiveCamera,this.camera.position.copy(this.orthographicCamera.position),this.camera.up.copy(this.orthographicCamera.up))}this.perspectiveCamera.fov=r.cameraFov,this.stereoCamera.eyeSep=r.cameraEyeSep,this.camera.updateProjectionMatrix(),this.requestRender()},nf.prototype.setClip=function(t,e,i){var r=this.parameters;void 0!==t&&(r.clipNear=t),void 0!==e&&(r.clipFar=e),void 0!==i&&(r.clipDist=i),this.requestRender()},nf.prototype.setSize=function(t,e){this.width=t||1,this.height=e||1,this.perspectiveCamera.aspect=this.width/this.height,this.orthographicCamera.left=-this.width/2,this.orthographicCamera.right=this.width/2,this.orthographicCamera.top=this.height/2,this.orthographicCamera.bottom=-this.height/2,this.camera.updateProjectionMatrix();var i=window.devicePixelRatio;this.renderer.setPixelRatio(i),this.renderer.setSize(t,e);var r=this.width*i,n=this.height*i;this.pickingTarget.setSize(r,n),this.sampleTarget.setSize(r,n),this.holdTarget.setSize(r,n),this.requestRender()},nf.prototype.handleResize=function(){if(this.container===document.body)this.setSize(window.innerWidth,window.innerHeight);else{var t=this.container.getBoundingClientRect();this.setSize(t.width,t.height)}},nf.prototype.updateInfo=function(t){var e=this.info,i=e.memory,r=e.render;if(t)i.programs=0,i.geometries=0,i.textures=0,r.calls=0,r.vertices=0,r.points=0;else{var n=this.renderer.info,o=n.memory,a=n.render;i.geometries=o.geometries,i.textures=o.textures,r.calls+=a.calls,r.faces+=a.triangles,r.points+=a.points}},nf.prototype.animate=function(){if(this.signals.ticked.dispatch(this.stats),500<window.performance.now()-this.stats.startTime&&!this.isStill&&this.sampleLevel<3&&-1!==this.sampleLevel){var t=this.sampleLevel;this.sampleLevel=3,this.renderPending=!0,this.render(),this.isStill=!0,this.sampleLevel=t,de.Debug&&Bp.log("rendered still frame")}window.requestAnimationFrame(this.animate)},nf.prototype.pick=function(t,e){if("stereo"===this.parameters.cameraType)return{pid:0,instance:void 0,picker:void 0};var i,r,n;t*=window.devicePixelRatio,e*=window.devicePixelRatio;var o=Op?Qd:tf;this.render(!0),this.renderer.readRenderTargetPixels(this.pickingTarget,t,e,1,1,o),i=Op?Math.round(255*o[0])<<16&16711680|Math.round(255*o[1])<<8&65280|255&Math.round(255*o[2]):o[0]<<16|o[1]<<8|o[2];var a=Math.round(o[3]),s=this.pickingGroup.getObjectById(a);return s&&(r=s.userData.instance,n=s.userData.buffer.picking),{pid:i,instance:r,picker:n}},nf.prototype.requestRender=function(){var t=this;this.renderPending||(22<window.performance.now()-this.stats.startTime&&(this.stats.begin(),this.isStill=!1),this.renderPending=!0,window.requestAnimationFrame(function(){t.render(),t.stats.update()}))},nf.prototype.updateZoom=function(){var t=Tl(this.perspectiveCamera.fov),e=2*Math.tan(t/2)*-this.camera.position.z;this.orthographicCamera.zoom=this.height/e},nf.prototype.__updateClipping=function(){var t=this.parameters;this.cDist=this.distVector.copy(this.camera.position).length(),this.cDist||(this.camera.position.set(0,0,t.cameraZ),this.cDist=Math.abs(t.cameraZ)),this.bRadius=Math.max(10,.5*this.boundingBoxLength),this.bRadius+=this.boundingBox.getCenter(this.distVector).length(),(this.bRadius===1/0||this.bRadius===-1/0||isNaN(this.bRadius))&&(this.bRadius=50);var e=(50-t.clipNear)/50,i=-(50-t.clipFar)/50;this.camera.near=this.cDist-this.bRadius*e,this.camera.far=this.cDist+this.bRadius*i;var r=(50-t.fogNear)/50,n=-(50-t.fogFar)/50,o=this.scene.fog;o.color.set(t.fogColor),o.near=this.cDist-this.bRadius*r,o.far=this.cDist+this.bRadius*n,"PerspectiveCamera"===this.camera.type?(this.camera.near=Math.max(.1,t.clipDist,this.camera.near),this.camera.far=Math.max(1,this.camera.far),o.near=Math.max(.1,o.near),o.far=Math.max(1,o.far)):"OrthographicCamera"===this.camera.type&&0<t.clipDist&&(this.camera.near=Math.max(t.clipDist,this.camera.near))},nf.prototype.__updateCamera=function(){var t,e,i,o,a,r,n,s,c,u,h,l,v,p=this.camera;p.updateMatrix(),p.updateMatrixWorld(!0),p.updateProjectionMatrix(),t=this.scene,e=p,i=this.renderer,o=this.cDist,a=this.bRadius,r=i.getSize(),n=r.width,s=r.height,c=s,u=i.getPixelRatio(),h="OrthographicCamera"===e.type,$d.set(n,s),Wd.getInverse(e.projectionMatrix),Xd.copy(e.projectionMatrix).transpose(),t.traverse(function(t){var e=t.material;if(e){var i=e.uniforms;if(i){if(e.clipNear){var r=(50-e.clipNear)/50,n=o-a*r;i.clipNear.value=n}i.canvasHeight&&(i.canvasHeight.value=c),i.resolution&&i.resolution.value.copy($d),i.pixelRatio&&(i.pixelRatio.value=u),i.projectionMatrixInverse&&i.projectionMatrixInverse.value.copy(Wd),i.projectionMatrixTranspose&&i.projectionMatrixTranspose.value.copy(Xd),i.ortho&&(i.ortho.value=h)}}}),l=this.scene,v=p,l.traverseVisible(function(t){if(t instanceof Da&&t.userData.buffer.parameters.sortParticles){var e=t.geometry.attributes,i=e.position.count;if(0!==i){var r,n,o,a,s,c,u;Vd.multiplyMatrices(v.matrixWorldInverse,t.matrixWorld),Hd.multiplyMatrices(v.projectionMatrix,Vd),t.userData.sortData?(r=t.userData.sortData,o=r.__zArray,n=r.__sortArray,a=r.__cmpFn):(o=new Float32Array(i),n=new Uint32Array(i),r={__zArray:o,__sortArray:n,__cmpFn:a=function(t,e){var i=o[t],r=o[e];return r<i?1:i<r?-1:0}},t.userData.sortData=r);for(var h=0;h<i;++h)Gd.fromArray(e.position.array,3*h),Gd.applyMatrix4(Hd),o[h]=-Gd.z,n[h]=h;for(var l in function(r,t,e,i){void 0===e&&(e=0),t=t||function(t,e){return e<t?1:t<e?-1:0};var n,o,a,s=[],c=-1,u=e,h=i=(i||r.length)-1;function l(t,e){var i=r[t];r[t]=r[e],r[e]=i}for(;;)if(h-u<=25){for(var p=u+1;p<=h;++p){for(n=r[p],o=p-1;u<=o&&0<t(r[o],n);)r[o+1]=r[o],--o;r[o+1]=n}if(-1===c)break;h=s[c--],u=s[c--]}else{for(l(u+(a=h)>>1,o=u+1),0<t(r[u],r[h])&&l(u,h),0<t(r[o],r[h])&&l(o,h),0<t(r[u],r[o])&&l(u,o),n=r[o];;){for(;t(r[++o],n)<0;);for(;0<t(r[--a],n););if(a<o)break;l(o,a)}r[u+1]=r[a],r[a]=n,a-u<=h-o+1?(s[++c]=o,s[++c]=h,h=a-1):(s[++c]=u,s[++c]=a-1,u=o)}}(n,a),e){var p=e[l],d=p.array,f=p.itemSize;r[l]||(r[l]=new Float32Array(f*i)),u=r[l],r[l]=d;for(var m=0;m<i;++m){s=n[m];for(var g=0;g<f;++g)c=s*f+g,u[m*f+g]=d[c]}e[l].array=u,e[l].needsUpdate=!0}}}})},nf.prototype.__setVisibility=function(t,e,i,r){this.modelGroup.visible=t,this.pickingGroup.visible=e,this.backgroundGroup.visible=i,this.helperGroup.visible=r},nf.prototype.__updateLights=function(){this.spotLight.color.set(this.parameters.lightColor),this.spotLight.intensity=this.parameters.lightIntensity,this.distVector.copy(this.camera.position).setLength(100*this.boundingBoxLength),this.spotLight.position.copy(this.camera.position).add(this.distVector),this.ambientLight.color.set(this.parameters.ambientColor),this.ambientLight.intensity=this.parameters.ambientIntensity},nf.prototype.__renderPickingGroup=function(t){this.renderer.clearTarget(this.pickingTarget,!0,!0,!0),this.__setVisibility(!1,!0,!1,!1),this.renderer.render(this.scene,t,this.pickingTarget),this.updateInfo(),this.renderer.setRenderTarget(null)},nf.prototype.__renderModelGroup=function(t,e){e?this.renderer.clearTarget(e,!0,!0,!0):this.renderer.clear(),this.__setVisibility(!1,!1,!0,!1),this.renderer.render(this.scene,t,e),e?this.renderer.clearTarget(e,!1,!0,!1):this.renderer.clearDepth(),this.updateInfo(),this.__setVisibility(!0,!1,!1,de.Debug),this.renderer.render(this.scene,t,e),this.updateInfo()},nf.prototype.__renderSuperSample=function(t){var e=wd[Math.max(0,Math.min(this.sampleLevel,5))],i=1/e.length;this.compositeUniforms.tForeground.value=this.sampleTarget.texture;var r=this.sampleTarget.width,n=this.sampleTarget.height;"stereo"===this.parameters.cameraType&&(r/=2);for(var o=0;o<e.length;++o){var a=e[o];t.setViewOffset(r,n,a[0],a[1],r,n),t.updateProjectionMatrix(),qd(this.scene,t);var s=i;s+=1/32*((o+.5)/e.length-.5),this.compositeUniforms.scale.value=s,this.__renderModelGroup(t,this.sampleTarget),this.renderer.render(this.compositeScene,this.compositeCamera,this.holdTarget,0===o)}this.compositeUniforms.scale.value=1,this.compositeUniforms.tForeground.value=this.holdTarget.texture,t.clearViewOffset(),this.renderer.render(this.compositeScene,this.compositeCamera,null,!0)},nf.prototype.__renderStereo=function(t){void 0===t&&(t=!1);var e=this.stereoCamera;e.update(this.perspectiveCamera);var i=this.renderer,r=i.getSize();i.setScissorTest(!0),i.setScissor(0,0,r.width/2,r.height),i.setViewport(0,0,r.width/2,r.height),qd(this.scene,e.cameraL),this.__render(t,e.cameraL),i.setScissor(r.width/2,0,r.width/2,r.height),i.setViewport(r.width/2,0,r.width/2,r.height),qd(this.scene,e.cameraR),this.__render(t,e.cameraR),i.setScissorTest(!1),i.setViewport(0,0,r.width,r.height)},nf.prototype.__render=function(t,e){void 0===t&&(t=!1),t?this.lastRenderedPicking||this.__renderPickingGroup(e):0<this.sampleLevel&&"stereo"!==this.parameters.cameraType?this.__renderSuperSample(e):this.__renderModelGroup(e)},nf.prototype.render=function(t){void 0===t&&(t=!1),this.rendering?Bp.warn("'tried to call 'render' from within 'render'"):(this.rendering=!0,this.__updateClipping(),this.__updateCamera(),this.__updateLights(),this.updateInfo(!0),"stereo"===this.parameters.cameraType?this.__renderStereo(t):this.__render(t,this.camera),this.lastRenderedPicking=t,this.rendering=!1,this.renderPending=!1,this.signals.rendered.dispatch())},nf.prototype.clear=function(){Bp.log("scene cleared"),this.scene.remove(this.rotationGroup),this._initScene(),this.renderer.clear()},nf.prototype.dispose=function(){this.renderer.dispose()};function of(t){var e=t.touches[0].pageX-t.touches[1].pageX,i=t.touches[0].pageY-t.touches[1].pageY;return Math.sqrt(e*e+i*i)}var af=function(t,e){void 0===e&&(e={}),this.domElement=t,this.signals={moved:new Wl,scrolled:new Wl,dragged:new Wl,dropped:new Wl,clicked:new Wl,hovered:new Wl,doubleClicked:new Wl},this.position=new Ze,this.prevPosition=new Ze,this.down=new Ze,this.canvasPosition=new Ze,this.prevClickCP=new Ze,this.moving=!1,this.hovering=!0,this.scrolled=!1,this.lastMoved=1/0,this.which=0,this.buttons=0,this.pressed=!1,this.altKey=!1,this.ctrlKey=!1,this.metaKey=!1,this.shiftKey=!1,this.domElement.style.touchAction="none",this.hoverTimeout=al(e.hoverTimeout,50),this.handleScroll=al(e.handleScroll,!0),this.doubleClickSpeed=al(e.doubleClickSpeed,500),this._listen=this._listen.bind(this),this._onMousewheel=this._onMousewheel.bind(this),this._onMousemove=this._onMousemove.bind(this),this._onMousedown=this._onMousedown.bind(this),this._onMouseup=this._onMouseup.bind(this),this._onContextmenu=this._onContextmenu.bind(this),this._onTouchstart=this._onTouchstart.bind(this),this._onTouchend=this._onTouchend.bind(this),this._onTouchmove=this._onTouchmove.bind(this),this._listen(),document.addEventListener("mousewheel",this._onMousewheel),document.addEventListener("wheel",this._onMousewheel),document.addEventListener("MozMousePixelScroll",this._onMousewheel),document.addEventListener("mousemove",this._onMousemove),document.addEventListener("mousedown",this._onMousedown),document.addEventListener("mouseup",this._onMouseup),document.addEventListener("contextmenu",this._onContextmenu),document.addEventListener("touchstart",this._onTouchstart),document.addEventListener("touchend",this._onTouchend),document.addEventListener("touchmove",this._onTouchmove)},sf={key:{configurable:!0}};sf.key.get=function(){var t=0;return this.altKey&&(t+=1),this.ctrlKey&&(t+=2),this.metaKey&&(t+=4),this.shiftKey&&(t+=8),t},af.prototype.setParameters=function(t){void 0===t&&(t={}),this.hoverTimeout=al(t.hoverTimeout,this.hoverTimeout)},af.prototype._listen=function(){var t=window.performance.now(),e=this.canvasPosition;this.doubleClickPending&&t-this.lastClicked>this.doubleClickSpeed&&(this.doubleClickPending=!1),t-this.lastMoved>this.hoverTimeout&&(this.moving=!1),(this.scrolled||!this.moving&&!this.hovering)&&(this.scrolled=!1,-1!==this.hoverTimeout&&this.overElement&&(this.hovering=!0,this.signals.hovered.dispatch(e.x,e.y))),window.requestAnimationFrame(this._listen)},af.prototype._onMousewheel=function(t){var e=this;if(t.target===this.domElement&&this.handleScroll){t.preventDefault(),this._setKeys(t);var i=0;i=t.wheelDelta?t.wheelDelta/40:t.detail?-t.detail/3:-t.deltaY/(t.deltaMode?.33:30),this.signals.scrolled.dispatch(i),setTimeout(function(){e.scrolled=!0},this.hoverTimeout)}},af.prototype._onMousemove=function(t){t.target===this.domElement?(t.preventDefault(),this.overElement=!0):this.overElement=!1,this._setKeys(t),this.moving=!0,this.hovering=!1,this.lastMoved=window.performance.now(),this.prevPosition.copy(this.position),this.position.set(t.clientX,t.clientY),this._setCanvasPosition(t);var e=this.prevPosition.x-this.position.x,i=this.prevPosition.y-this.position.y;this.signals.moved.dispatch(e,i),this.pressed&&this.signals.dragged.dispatch(e,i)},af.prototype._onMousedown=function(t){t.target===this.domElement&&(t.preventDefault(),this._setKeys(t),this.moving=!1,this.hovering=!1,this.down.set(t.clientX,t.clientY),this.position.set(t.clientX,t.clientY),this.which=t.which,this.buttons=function(t){if("object"==typeof t){if("buttons"in t)return t.buttons;if("which"in t){var e=t.which;if(2===e)return 4;if(3===e)return 2;if(0<e)return 1<<e-1}else if("button"in t){var i=t.button;if(1===i)return 4;if(2===i)return 2;if(0<=i)return 1<<i}}return 0}(t),this.pressed=!0,this._setCanvasPosition(t))},af.prototype._onMouseup=function(t){t.target===this.domElement&&t.preventDefault(),this._setKeys(t);var e=this.canvasPosition;this._distance()<4&&(this.lastClicked=window.performance.now(),this.doubleClickPending&&this.prevClickCP.distanceTo(e)<4&&(this.signals.doubleClicked.dispatch(e.x,e.y),this.doubleClickPending=!1),this.signals.clicked.dispatch(e.x,e.y),this.doubleClickPending=!0,this.prevClickCP.copy(e)),this.which=void 0,this.buttons=void 0,this.pressed=void 0},af.prototype._onContextmenu=function(t){t.target===this.domElement&&t.preventDefault()},af.prototype._onTouchstart=function(t){if(t.target===this.domElement)switch(t.preventDefault(),this.pressed=!0,t.touches.length){case 1:this.moving=!1,this.hovering=!1,this.down.set(t.touches[0].pageX,t.touches[0].pageY),this.position.set(t.touches[0].pageX,t.touches[0].pageY),this._setCanvasPosition(t.touches[0]);break;case 2:this.down.set((t.touches[0].pageX+t.touches[1].pageX)/2,(t.touches[0].pageY+t.touches[1].pageY)/2),this.position.set((t.touches[0].pageX+t.touches[1].pageX)/2,(t.touches[0].pageY+t.touches[1].pageY)/2),this.lastTouchDistance=of(t)}},af.prototype._onTouchend=function(t){t.target===this.domElement&&t.preventDefault(),this.which=void 0,this.buttons=void 0,this.pressed=void 0},af.prototype._onTouchmove=function(t){switch(t.target===this.domElement?(t.preventDefault(),this.overElement=!0):this.overElement=!1,t.touches.length){case 1:this._setKeys(t),this.which=1,this.buttons=1,this.moving=!0,this.hovering=!1,this.lastMoved=window.performance.now(),this.prevPosition.copy(this.position),this.position.set(t.touches[0].pageX,t.touches[0].pageY),this._setCanvasPosition(t.touches[0]);var e=this.prevPosition.x-this.position.x,i=this.prevPosition.y-this.position.y;this.signals.moved.dispatch(e,i),this.pressed&&this.signals.dragged.dispatch(e,i);break;case 2:var r=of(t),n=r-this.lastTouchDistance;if(this.lastTouchDistance=r,this.prevPosition.copy(this.position),this.position.set((t.touches[0].pageX+t.touches[1].pageX)/2,(t.touches[0].pageY+t.touches[1].pageY)/2),2<Math.abs(n)&&this.handleScroll&&this.position.distanceTo(this.prevPosition)<2)this.which=0,this.buttons=0,this.signals.scrolled.dispatch(n/2);else{this.which=3,this.buttons=2;var o=this.prevPosition.x-this.position.x,a=this.prevPosition.y-this.position.y;this.signals.moved.dispatch(o,a),this.pressed&&this.signals.dragged.dispatch(o,a)}}},af.prototype._distance=function(){return this.position.distanceTo(this.down)},af.prototype._setCanvasPosition=function(t){var e,i,r=this.domElement.getBoundingClientRect();"offsetX"in t&&"offsetY"in t?(e=t.offsetX,i=t.offsetY):(e=t.clientX-r.left,i=t.clientY-r.top),this.canvasPosition.set(e,r.height-i)},af.prototype._setKeys=function(t){this.altKey=t.altKey,this.ctrlKey=t.ctrlKey,this.metaKey=t.metaKey,this.shiftKey=t.shiftKey},af.prototype.dispose=function(){document.removeEventListener("mousewheel",this._onMousewheel),document.removeEventListener("wheel",this._onMousewheel),document.removeEventListener("MozMousePixelScroll",this._onMousewheel),document.removeEventListener("mousemove",this._onMousemove),document.removeEventListener("mousedown",this._onMousedown),document.removeEventListener("mouseup",this._onMouseup),document.removeEventListener("contextmenu",this._onContextmenu),document.removeEventListener("touchstart",this._onTouchstart),document.removeEventListener("touchend",this._onTouchend),document.removeEventListener("touchmove",this._onTouchmove)},Object.defineProperties(af.prototype,sf);var cf=new Ke,uf=new Ke,hf=new Ke,lf=new Ke,pf=new Qe,df=new Je,ff=new Ke,mf=new Qe,gf=new Qe,vf=function(t,e){void 0===e&&(e={}),this.stage=t,this.rotateSpeed=al(e.rotateSpeed,2),this.zoomSpeed=al(e.zoomSpeed,1.2),this.panSpeed=al(e.panSpeed,1),this.viewer=t.viewer,this.mouse=t.mouseObserver,this.controls=t.viewerControls},yf={component:{configurable:!0},atom:{configurable:!0}};yf.component.get=function(){return this.stage.transformComponent},yf.atom.get=function(){return this.stage.transformAtom},vf.prototype._setPanVector=function(t,e,i){void 0===i&&(i=0);var r=this.controls.getCanvasScaleFactor(i);mf.set(t,e,0),mf.multiplyScalar(this.panSpeed*r)},vf.prototype._getRotateXY=function(t,e){return[this.rotateSpeed*-t*.01,this.rotateSpeed*e*.01]},vf.prototype._transformPanVector=function(){this.component&&(ff.extractRotation(this.component.transform),ff.premultiply(this.viewer.rotationGroup.matrix),ff.getInverse(ff),mf.applyMatrix4(ff))},vf.prototype.zoom=function(t){this.controls.zoom(this.zoomSpeed*t*.02)},vf.prototype.pan=function(t,e){this._setPanVector(t,e),ff.getInverse(this.viewer.rotationGroup.matrix),mf.applyMatrix4(ff),this.controls.translate(mf)},vf.prototype.panComponent=function(t,e){this.component&&(this._setPanVector(t,e),this._transformPanVector(),this.component.position.add(mf),this.component.updateMatrix())},vf.prototype.panAtom=function(t,e){this.atom&&this.component&&(this.atom.positionToVector3(gf),gf.add(this.viewer.translationGroup.position),gf.applyMatrix4(this.viewer.rotationGroup.matrix),this._setPanVector(t,e,gf.z),this._transformPanVector(),this.atom.positionAdd(mf),this.component.updateRepresentations({position:!0}))},vf.prototype.rotate=function(t,e){var i=this._getRotateXY(t,e),r=i[0],n=i[1];cf.makeRotationX(n),uf.makeRotationY(r),cf.multiply(uf),this.controls.applyMatrix(cf)},vf.prototype.zRotate=function(t,e){var i=this.rotateSpeed*((-t+e)/-2)*.01;hf.makeRotationZ(i),this.controls.applyMatrix(hf)},vf.prototype.rotateComponent=function(t,e){if(this.component){var i=this._getRotateXY(t,e),r=i[0],n=i[1];lf.extractRotation(this.component.transform),lf.premultiply(this.viewer.rotationGroup.matrix),lf.getInverse(lf),pf.set(1,0,0),pf.applyMatrix4(lf),cf.makeRotationAxis(pf,n),pf.set(0,1,0),pf.applyMatrix4(lf),uf.makeRotationAxis(pf,r),cf.multiply(uf),df.setFromRotationMatrix(cf),this.component.quaternion.premultiply(df),this.component.updateMatrix()}},Object.defineProperties(vf.prototype,yf);var bf=new Qe;var xf=function(t,e){this.stage=e,this.pid=t.pid,this.picker=t.picker,this.instance=t.instance,this.stage=e,this.controls=e.viewerControls,this.mouse=e.mouseObserver},_f={type:{configurable:!0},altKey:{configurable:!0},ctrlKey:{configurable:!0},metaKey:{configurable:!0},shiftKey:{configurable:!0},canvasPosition:{configurable:!0},component:{configurable:!0},object:{configurable:!0},position:{configurable:!0},closestBondAtom:{configurable:!0},closeAtom:{configurable:!0},arrow:{configurable:!0},atom:{configurable:!0},axes:{configurable:!0},bond:{configurable:!0},box:{configurable:!0},cone:{configurable:!0},clash:{configurable:!0},contact:{configurable:!0},cylinder:{configurable:!0},distance:{configurable:!0},ellipsoid:{configurable:!0},octahedron:{configurable:!0},point:{configurable:!0},mesh:{configurable:!0},slice:{configurable:!0},sphere:{configurable:!0},tetrahedron:{configurable:!0},torus:{configurable:!0},surface:{configurable:!0},unitcell:{configurable:!0},unknown:{configurable:!0},volume:{configurable:!0},wideline:{configurable:!0}};_f.type.get=function(){return this.picker.type},_f.altKey.get=function(){return this.mouse.altKey},_f.ctrlKey.get=function(){return this.mouse.ctrlKey},_f.metaKey.get=function(){return this.mouse.metaKey},_f.shiftKey.get=function(){return this.mouse.shiftKey},_f.canvasPosition.get=function(){return this.mouse.canvasPosition},_f.component.get=function(){return this.stage.getComponentsByObject(this.picker.data).list[0]},_f.object.get=function(){return this.picker.getObject(this.pid)},_f.position.get=function(){return this.picker.getPosition(this.pid,this.instance,this.component)},_f.closestBondAtom.get=function(){if("bond"===this.type&&this.bond){var t,e,i,r=this.bond,n=this.controls,o=this.canvasPosition,a=n.getPositionOnCanvas(r.atom1),s=n.getPositionOnCanvas(r.atom2);return e=a,i=s,(t=o).distanceTo(e)<t.distanceTo(i)?r.atom1:r.atom2}},_f.closeAtom.get=function(){var t=this.canvasPosition,e=this.closestBondAtom;if(e){var i=this.controls.getPositionOnCanvas(e);e.positionToVector3(bf),this.instance&&bf.applyMatrix4(this.instance.matrix),bf.applyMatrix4(this.component.matrix);var r=this.controls.viewer;bf.add(r.translationGroup.position),bf.applyMatrix4(r.rotationGroup.matrix);var n=this.controls.getCanvasScaleFactor(bf.z),o=this.component.getMaxRepresentationRadius(e.index);return t.distanceTo(i)<=o/n?e:void 0}},_f.arrow.get=function(){return this._objectIfType("arrow")},_f.atom.get=function(){return this._objectIfType("atom")},_f.axes.get=function(){return this._objectIfType("axes")},_f.bond.get=function(){return this._objectIfType("bond")},_f.box.get=function(){return this._objectIfType("box")},_f.cone.get=function(){return this._objectIfType("cone")},_f.clash.get=function(){return this._objectIfType("clash")},_f.contact.get=function(){return this._objectIfType("contact")},_f.cylinder.get=function(){return this._objectIfType("cylinder")},_f.distance.get=function(){return this._objectIfType("distance")},_f.ellipsoid.get=function(){return this._objectIfType("ellipsoid")},_f.octahedron.get=function(){return this._objectIfType("octahedron")},_f.point.get=function(){return this._objectIfType("point")},_f.mesh.get=function(){return this._objectIfType("mesh")},_f.slice.get=function(){return this._objectIfType("slice")},_f.sphere.get=function(){return this._objectIfType("sphere")},_f.tetrahedron.get=function(){return this._objectIfType("tetrahedron")},_f.torus.get=function(){return this._objectIfType("torus")},_f.surface.get=function(){return this._objectIfType("surface")},_f.unitcell.get=function(){return this._objectIfType("unitcell")},_f.unknown.get=function(){return this._objectIfType("unknown")},_f.volume.get=function(){return this._objectIfType("volume")},_f.wideline.get=function(){return this._objectIfType("wideline")},xf.prototype._objectIfType=function(t){return this.type===t?this.object:void 0},xf.prototype.getLabel=function(){var t=this.atom||this.closeAtom,e="nothing";return this.arrow?e=this.arrow.name:t?e="atom: "+t.qualifiedName()+" ("+t.structure.name+")":this.axes?e="axes":this.bond?e="bond: "+this.bond.atom1.qualifiedName()+" - "+this.bond.atom2.qualifiedName()+" ("+this.bond.structure.name+")":this.box?e=this.box.name:this.cone?e=this.cone.name:this.clash?e="clash: "+this.clash.clash.sele1+" - "+this.clash.clash.sele2:this.contact?e=this.contact.type+": "+this.contact.atom1.qualifiedName()+" - "+this.contact.atom2.qualifiedName()+" ("+this.contact.atom1.structure.name+")":this.cylinder?e=this.cylinder.name:this.distance?e="distance: "+this.distance.atom1.qualifiedName()+" - "+this.distance.atom2.qualifiedName()+" ("+this.distance.structure.name+")":this.ellipsoid?e=this.ellipsoid.name:this.octahedron?e=this.octahedron.name:this.point?e=this.point.name:this.mesh?e="mesh: "+(this.mesh.name||this.mesh.serial)+" ("+this.mesh.shape.name+")":this.slice?e="slice: "+this.slice.value.toPrecision(3)+" ("+this.slice.volume.name+")":this.sphere?e=this.sphere.name:this.surface?e="surface: "+this.surface.surface.name:this.tetrahedron?e=this.tetrahedron.name:this.torus?e=this.torus.name:this.unitcell?e="unitcell: "+this.unitcell.unitcell.spacegroup+" ("+this.unitcell.structure.name+")":this.unknown?e="unknown":this.volume?e="volume: "+this.volume.value.toPrecision(3)+" ("+this.volume.volume.name+")":this.wideline&&(e=this.wideline.name),e},Object.defineProperties(xf.prototype,_f);var wf=function(t){this.stage=t,this.viewer=t.viewer};wf.prototype.pick=function(t,e){var i=this.viewer.pick(t,e);if(i.picker&&"ignore"!==i.picker.type&&void 0!==i.pid){var r=i.picker.array;if(!(r&&i.pid>=r.length))return new xf(i,this.stage);console.error("pid >= picker.array.length")}};var Sf=new Je,Af=new Qe,Mf=new Qe,Pf=new Qe,Ef=new Qe,Cf=new Ke,Tf=new Qe,If=new Ke,Rf=function(t){this.stage=t,this.signals={changed:new Wl},this.viewer=t.viewer},Lf={position:{configurable:!0},rotation:{configurable:!0}};Lf.position.get=function(){return this.viewer.translationGroup.position},Lf.rotation.get=function(){return this.viewer.rotationGroup.quaternion},Rf.prototype.changed=function(){this.viewer.requestRender(),this.signals.changed.dispatch()},Rf.prototype.getPositionOnCanvas=function(t,e){var i=_l(e,Ze),r=this.viewer;return Pf.copy(t).add(r.translationGroup.position).applyMatrix4(r.rotationGroup.matrix).project(r.camera),i.set((Pf.x+1)*r.width/2,(Pf.y+1)*r.height/2)},Rf.prototype.getCanvasScaleFactor=function(t){void 0===t&&(t=0);var e=this.viewer.camera;if(e instanceof sr)return 1/e.zoom;t=-t,t+=e.position.z;var i=Tl(e.fov);return-2*t*Math.tan(i/2)/this.viewer.height},Rf.prototype.getOrientation=function(t){var e=Sl(t);e.copy(this.viewer.rotationGroup.matrix);var i=-this.viewer.camera.position.z;return e.scale(Ef.set(i,i,i)),e.setPosition(this.viewer.translationGroup.position),e},Rf.prototype.orient=function(t){Sl(t).decompose(Af,Sf,Mf);var e=this.viewer;e.rotationGroup.setRotationFromQuaternion(Sf),e.translationGroup.position.copy(Af),e.camera.position.z=-Mf.z,e.updateZoom(),this.changed()},Rf.prototype.translate=function(t){this.viewer.translationGroup.position.add(wl(t)),this.changed()},Rf.prototype.center=function(t){this.viewer.translationGroup.position.copy(wl(t)).negate(),this.changed()},Rf.prototype.zoom=function(t){this.distance(this.viewer.camera.position.z*(1-t))},Rf.prototype.distance=function(t){this.viewer.camera.position.z=Math.min(-1,t),this.viewer.updateZoom(),this.changed()},Rf.prototype.spin=function(t,e){Cf.getInverse(this.viewer.rotationGroup.matrix),Tf.copy(wl(t)).applyMatrix4(Cf),this.viewer.rotationGroup.rotateOnAxis(Tf,e),this.changed()},Rf.prototype.rotate=function(t){this.viewer.rotationGroup.setRotationFromQuaternion(Al(t)),this.changed()},Rf.prototype.align=function(t){If.getInverse(Sl(t)),this.viewer.rotationGroup.setRotationFromMatrix(If),this.changed()},Rf.prototype.applyMatrix=function(t){this.viewer.rotationGroup.applyMatrix(Sl(t)),this.changed()},Object.defineProperties(Rf.prototype,Lf);var Of=function(t,e){for(var i,r=[],n=arguments.length-2;0<n--;)r[n]=arguments[n+2];this.pausedTime=-1,this.elapsedDuration=0,this.pausedDuration=0,this.ignoreGlobalToggle=!1,this._paused=!1,this._resolveList=[],this.duration=al(t,1e3),this.controls=e,this.startTime=window.performance.now(),(i=this)._init.apply(i,r)},Df={done:{configurable:!0},paused:{configurable:!0}};Df.done.get=function(){return 1===this.alpha},Df.paused.get=function(){return this._paused},Of.prototype.tick=function(t){if(!this._paused)return this.elapsedDuration=t.currentTime-this.startTime-this.pausedDuration,0===this.duration?this.alpha=1:this.alpha=Nl(0,1,this.elapsedDuration/this.duration),this._tick(t),this.done&&this._resolveList.forEach(function(t){return t()}),this.done},Of.prototype.pause=function(t){t&&(this._hold=!0),-1===this.pausedTime&&(this.pausedTime=window.performance.now()),this._paused=!0},Of.prototype.resume=function(t){!t&&this._hold||(this.pausedDuration+=window.performance.now()-this.pausedTime,this._paused=!1,this._hold=!1,this.pausedTime=-1)},Of.prototype.toggle=function(){this._paused?this.resume():this.pause()},Of.prototype.then=function(t){var e=this;return(this.done?Promise.resolve():new Promise(function(t){return e._resolveList.push(t)})).then(t)},Object.defineProperties(Of.prototype,Df);var kf=function(n){function t(t,e){for(var i=[],r=arguments.length-2;0<r--;)i[r]=arguments[r+2];n.apply(this,[al(t,1/0),e].concat(i))}return n&&(t.__proto__=n),((t.prototype=Object.create(n&&n.prototype)).constructor=t).prototype._init=function(t,e){Array.isArray(t)?this.axis=(new Qe).fromArray(t):this.axis=al(t,new Qe(0,1,0)),this.angle=al(e,.01)},t.prototype._tick=function(t){this.axis&&this.angle&&this.controls.spin(this.axis,this.angle*t.lastDuration/16)},t}(Of),Bf=function(n){function t(t,e){for(var i=[],r=arguments.length-2;0<r--;)i[r]=arguments[r+2];n.apply(this,[al(t,1/0),e].concat(i)),this.angleSum=0,this.direction=1}return n&&(t.__proto__=n),((t.prototype=Object.create(n&&n.prototype)).constructor=t).prototype._init=function(t,e,i){Array.isArray(t)?this.axis=(new Qe).fromArray(t):this.axis=al(t,new Qe(0,1,0)),this.angleStep=al(e,.01),this.angleEnd=al(i,.2)},t.prototype._tick=function(t){if(this.axis&&this.angleStep&&this.angleEnd){var e=Nl(0,1,Math.abs(this.angleSum)/this.angleEnd),i=this.angleStep*this.direction*(1.1-e);this.controls.spin(this.axis,i*t.lastDuration/16),this.angleSum+=this.angleStep,this.angleSum>=this.angleEnd&&(this.direction*=-1,this.angleSum=-this.angleEnd)}},t}(Of),Nf=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),((e.prototype=Object.create(t&&t.prototype)).constructor=e).prototype._init=function(t,e){this.moveFrom=wl(al(t,new Qe)),this.moveTo=wl(al(e,new Qe))},e.prototype._tick=function(){this.controls.position.lerpVectors(this.moveFrom,this.moveTo,this.alpha).negate(),this.controls.changed()},e}(Of),Ff=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),((e.prototype=Object.create(t&&t.prototype)).constructor=e).prototype._init=function(t,e){this.zoomFrom=t,this.zoomTo=e},e.prototype._tick=function(){this.controls.distance(kl(this.zoomFrom,this.zoomTo,this.alpha))},e}(Of),zf=function(t){function e(){t.apply(this,arguments),this._currentRotation=new Je}return t&&(e.__proto__=t),((e.prototype=Object.create(t&&t.prototype)).constructor=e).prototype._init=function(t,e){this.rotateFrom=Al(t),this.rotateTo=Al(e),this._currentRotation=new Je},e.prototype._tick=function(){this._currentRotation.copy(this.rotateFrom).slerp(this.rotateTo,this.alpha),this.controls.rotate(this._currentRotation)},e}(Of),Uf=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),((e.prototype=Object.create(t&&t.prototype)).constructor=e).prototype._init=function(t,e,i){this.valueFrom=t,this.valueTo=e,this.callback=i},e.prototype._tick=function(){this.callback(kl(this.valueFrom,this.valueTo,this.alpha))},e}(Of),jf=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),((e.prototype=Object.create(t&&t.prototype)).constructor=e).prototype._init=function(t){this.callback=t},e.prototype._tick=function(){1===this.alpha&&this.callback()},e}(Of),Gf=function(t){void 0===t&&(t=[]),this._resolveList=[],this._list=t},Vf={done:{configurable:!0}};Vf.done.get=function(){return this._list.every(function(t){return t.done})},Gf.prototype.then=function(t){var e=this;return(this.done?Promise.resolve():new Promise(function(t){e._resolveList.push(t),e._list.forEach(function(t){t.then(function(){e._resolveList.forEach(function(t){t()}),e._resolveList.length=0})})})).then(t)},Object.defineProperties(Gf.prototype,Vf);var Hf=function(t){this.stage=t,this.animationList=[],this.finishedList=[],this.viewer=t.viewer,this.controls=t.viewerControls},$f={paused:{configurable:!0}};$f.paused.get=function(){return this.animationList.every(function(t){return t.paused})},Hf.prototype.add=function(t){return 0===t.duration?t.tick(this.viewer.stats):this.animationList.push(t),t},Hf.prototype.remove=function(t){var e=this.animationList,i=e.indexOf(t);-1<i&&e.splice(i,1)},Hf.prototype.run=function(t){for(var e=this.finishedList,i=this.animationList,r=i.length,n=0;n<r;++n){var o=i[n];o.tick(t)&&e.push(o)}var a=e.length;if(a){for(var s=0;s<a;++s)this.remove(e[s]);e.length=0}},Hf.prototype.spin=function(t,e,i){return this.add(new kf(i,this.controls,t,e))},Hf.prototype.rock=function(t,e,i,r){return this.add(new Bf(r,this.controls,t,e,i))},Hf.prototype.rotate=function(t,e){var i=this.viewer.rotationGroup.quaternion.clone();return this.add(new zf(e,this.controls,i,t))},Hf.prototype.move=function(t,e){var i=this.controls.position.clone().negate();return this.add(new Nf(e,this.controls,i,t))},Hf.prototype.zoom=function(t,e){var i=this.viewer.camera.position.z;return this.add(new Ff(e,this.controls,i,t))},Hf.prototype.zoomMove=function(t,e,i){return new Gf([this.move(t,i),this.zoom(e,i)])},Hf.prototype.orient=function(t,e){var i=new Qe,r=new Je,n=new Qe;return Sl(t).decompose(i,r,n),new Gf([this.move(i.negate(),e),this.rotate(r,e),this.zoom(-n.x,e)])},Hf.prototype.value=function(t,e,i,r){return this.add(new Uf(r,this.controls,t,e,i))},Hf.prototype.timeout=function(t,e){return this.add(new jf(e,this.controls,t))},Hf.prototype.spinComponent=function(t,e,i,r){return this.add(new kf(r,t.controls,e,i))},Hf.prototype.rockComponent=function(t,e,i,r,n){return this.add(new Bf(n,t.controls,e,i,r))},Hf.prototype.moveComponent=function(t,e,i){var r=t.controls.position.clone().negate();return this.add(new Nf(i,t.controls,r,e))},Hf.prototype.pause=function(){this.animationList.forEach(function(t){return t.pause()})},Hf.prototype.resume=function(){this.animationList.forEach(function(t){return t.resume()})},Hf.prototype.toggle=function(){this.paused?this.resume():this.pause()},Hf.prototype.clear=function(){this.animationList.length=0},Hf.prototype.dispose=function(){this.clear()},Object.defineProperties(Hf.prototype,$f);var Wf=function(t,e){if(this.fn=t,this.queue=[],this.pending=!1,this.next=this.next.bind(this),e){for(var i=0,r=e.length;i<r;++i)this.queue.push(e[i]);this.next()}};Wf.prototype.run=function(t){this.fn(t,this.next)},Wf.prototype.next=function(){var t=this,e=this.queue.shift();void 0!==e?(this.pending=!0,setTimeout(function(){return t.run(e)})):this.pending=!1},Wf.prototype.push=function(t){this.queue.push(t),this.pending||this.next()},Wf.prototype.kill=function(){this.queue.length=0},Wf.prototype.length=function(){return this.queue.length};var Xf=function(t,e,i){this.type="",this.parameters={lazy:{type:"boolean"},clipNear:{type:"range",step:1,max:100,min:0,buffer:!0},clipRadius:{type:"number",precision:1,max:1e3,min:0,buffer:!0},clipCenter:{type:"vector3",precision:1,buffer:!0},flatShaded:{type:"boolean",buffer:!0},opacity:{type:"range",step:.01,max:1,min:0,buffer:!0},depthWrite:{type:"boolean",buffer:!0},side:{type:"select",buffer:!0,options:{front:"front",back:"back",double:"double"}},wireframe:{type:"boolean",buffer:!0},colorScheme:{type:"select",update:"color",options:{}},colorScale:{type:"select",update:"color",options:Up.getScales()},colorReverse:{type:"boolean",update:"color"},colorValue:{type:"color",update:"color"},colorDomain:{type:"hidden",update:"color"},colorMode:{type:"select",update:"color",options:Up.getModes()},roughness:{type:"range",step:.01,max:1,min:0,buffer:!0},metalness:{type:"range",step:.01,max:1,min:0,buffer:!0},diffuse:{type:"color",buffer:!0},diffuseInterior:{type:"boolean",buffer:!0},useInteriorColor:{type:"boolean",buffer:!0},interiorColor:{type:"color",buffer:!0},interiorDarkening:{type:"range",step:.01,max:1,min:0,buffer:!0},matrix:{type:"hidden",buffer:!0},disablePicking:{type:"boolean",rebuild:!0}},this.viewer=e,this.tasks=new pd,this.queue=new Wf(this.make.bind(this)),this.bufferList=[],this.parameters.colorScheme&&(this.parameters.colorScheme.options=Up.getSchemes())};Xf.prototype.init=function(t){var e=t||{};this.clipNear=al(e.clipNear,0),this.clipRadius=al(e.clipRadius,0),this.clipCenter=al(e.clipCenter,new Qe),this.flatShaded=al(e.flatShaded,!1),this.side=al(e.side,"double"),this.opacity=al(e.opacity,1),this.depthWrite=al(e.depthWrite,!0),this.wireframe=al(e.wireframe,!1),this.setColor(e.color,e),this.colorScheme=al(e.colorScheme,"uniform"),this.colorScale=al(e.colorScale,""),this.colorReverse=al(e.colorReverse,!1),this.colorValue=al(e.colorValue,9474192),this.colorDomain=al(e.colorDomain,void 0),this.colorMode=al(e.colorMode,"hcl"),this.visible=al(e.visible,!0),this.quality=al(e.quality,void 0),this.roughness=al(e.roughness,.4),this.metalness=al(e.metalness,0),this.diffuse=al(e.diffuse,16777215),this.diffuseInterior=al(e.diffuseInterior,!1),this.useInteriorColor=al(e.useInteriorColor,!1),this.interiorColor=al(e.interiorColor,2236962),this.interiorDarkening=al(e.interiorDarkening,0),this.lazy=al(e.lazy,!1),this.lazyProps={build:!1,bufferParams:{},what:{}},this.matrix=al(e.matrix,new Ke),this.disablePicking=al(e.disablePicking,!1);var i=this.parameters;!0===i.sphereDetail&&(i.sphereDetail={type:"integer",max:3,min:0,rebuild:"impostor"}),!0===i.radialSegments&&(i.radialSegments={type:"integer",max:25,min:5,rebuild:"impostor"}),!0===i.openEnded&&(i.openEnded={type:"boolean",rebuild:"impostor",buffer:!0}),!0===i.disableImpostor&&(i.disableImpostor={type:"boolean",rebuild:!0}),"low"===e.quality?(i.sphereDetail&&(this.sphereDetail=0),i.radialSegments&&(this.radialSegments=5)):"medium"===e.quality?(i.sphereDetail&&(this.sphereDetail=1),i.radialSegments&&(this.radialSegments=10)):"high"===e.quality?(i.sphereDetail&&(this.sphereDetail=2),i.radialSegments&&(this.radialSegments=20)):(i.sphereDetail&&(this.sphereDetail=al(e.sphereDetail,1)),i.radialSegments&&(this.radialSegments=al(e.radialSegments,10))),i.openEnded&&(this.openEnded=al(e.openEnded,!0)),i.disableImpostor&&(this.disableImpostor=al(e.disableImpostor,!1))},Xf.prototype.getColorParams=function(t){return Object.assign({scheme:this.colorScheme,scale:this.colorScale,reverse:this.colorReverse,value:this.colorValue,domain:this.colorDomain,mode:this.colorMode},t)},Xf.prototype.getBufferParams=function(t){return Object.assign({clipNear:this.clipNear,clipRadius:this.clipRadius,clipCenter:this.clipCenter,flatShaded:this.flatShaded,opacity:this.opacity,depthWrite:this.depthWrite,side:this.side,wireframe:this.wireframe,roughness:this.roughness,metalness:this.metalness,diffuse:this.diffuse,diffuseInterior:this.diffuseInterior,useInteriorColor:this.useInteriorColor,interiorColor:this.interiorColor,interiorDarkening:this.interiorDarkening,matrix:this.matrix,disablePicking:this.disablePicking},t)},Xf.prototype.setColor=function(t,e){var i=Object.keys(Up.getSchemes());return"string"==typeof t&&i.includes(t.toLowerCase())?e?e.colorScheme=t:this.setParameters({colorScheme:t}):void 0!==t&&(t=new Li(t).getHex(),e?(e.colorScheme="uniform",e.colorValue=t):this.setParameters({colorScheme:"uniform",colorValue:t})),this},Xf.prototype.create=function(){},Xf.prototype.update=function(){this.build()},Xf.prototype.build=function(t){if(!this.lazy||this.visible&&this.opacity){if(!this.prepare)return this.tasks.increment(),void this.make();0<this.queue.length()?(this.tasks.change(1-this.queue.length()),this.queue.kill()):this.tasks.increment(),this.queue.push(t||!1)}else this.lazyProps.build=!0},Xf.prototype.make=function(t,e){var i=this;de.Debug&&Bp.time("Representation.make "+this.type);var r=function(){t?(i.update(t),i.viewer.requestRender(),i.tasks.decrement(),e&&e()):(i.clear(),i.create(),i.manualAttach||i.disposed||(de.Debug&&Bp.time("Representation.attach "+i.type),i.attach(function(){de.Debug&&Bp.timeEnd("Representation.attach "+i.type),i.tasks.decrement(),e&&e()}))),de.Debug&&Bp.timeEnd("Representation.make "+i.type)};this.prepare?this.prepare(r):r()},Xf.prototype.attach=function(t){this.setVisibility(this.visible),t()},Xf.prototype.setVisibility=function(e,t){if(this.visible=e,this.visible&&this.opacity){var i=this.lazyProps,r=i.bufferParams,n=i.what;if(i.build)return i.build=!1,void this.build();(Object.keys(r).length||Object.keys(n).length)&&(i.bufferParams={},i.what={},this.updateParameters(r,n))}return this.bufferList.forEach(function(t){t.setVisibility(e)}),t||this.viewer.requestRender(),this},Xf.prototype.setParameters=function(t,e,i){var r=this;void 0===e&&(e={}),void 0===i&&(i=!1);var n=t||{},o=this.parameters,a={};for(var s in this.opacity||void 0===n.opacity||(this.lazyProps.build?i=!(this.lazyProps.build=!1):(Object.assign(a,this.lazyProps.bufferParams),Object.assign(e,this.lazyProps.what),this.lazyProps.bufferParams={},this.lazyProps.what={})),this.setColor(n.color,n),n)void 0!==n[s]&&void 0!==o[s]&&(o[s].int&&(n[s]=parseInt(n[s])),o[s].float&&(n[s]=parseFloat(n[s])),(n[s]!==r[s]||n[s].equals&&!n[s].equals(r[s]))&&(r[s]&&r[s].copy&&n[s].copy?r[s].copy(n[s]):r[s]&&r[s].set?r[s].set(n[s]):r[s]=n[s],o[s].buffer&&(!0===o[s].buffer?a[s]=n[s]:a[o[s].buffer]=n[s]),o[s].update&&(e[o[s].update]=!0),!o[s].rebuild||"impostor"===o[s].rebuild&&Dp&&!r.disableImpostor||(i=!0)));return i?this.build():this.updateParameters(a,e),this},Xf.prototype.updateParameters=function(e,t){if(void 0===e&&(e={}),this.lazy&&(!this.visible||!this.opacity)&&void 0===e.opacity)return Object.assign(this.lazyProps.bufferParams,e),void Object.assign(this.lazyProps.what,t);this.bufferList.forEach(function(t){t.setParameters(e)}),Object.keys(t).length&&this.update(t),this.viewer.requestRender()},Xf.prototype.getParameters=function(){var e=this,i={lazy:this.lazy,visible:this.visible,quality:this.quality};return Object.keys(this.parameters).forEach(function(t){null!==e.parameters[t]&&(i[t]=e[t])}),i},Xf.prototype.clear=function(){var e=this;this.bufferList.forEach(function(t){e.viewer.remove(t),t.dispose()}),this.bufferList.length=0,this.viewer.requestRender()},Xf.prototype.dispose=function(){this.disposed=!0,this.queue.kill(),this.tasks.dispose(),this.clear()};var qf=function(r){var n=this;this.pending=0,this.postCount=0,this.onmessageDict={},this.onerrorDict={},this.name=r,this.blobUrl=window.URL.createObjectURL(zp.get(r)),this.worker=new Worker(this.blobUrl),zp.activeWorkerCount+=1,this.worker.onmessage=function(t){n.pending-=1;var e=t.data.__postId;de.Debug&&Bp.timeEnd("Worker.postMessage "+r+" #"+e);var i=n.onmessageDict[e];i&&i.call(n.worker,t),delete n.onmessageDict[e],delete n.onerrorDict[e]},this.worker.onerror=function(t){if(n.pending-=1,t.data){var e=t.data.__postId,i=n.onerrorDict[e];i?i.call(n.worker,t):Bp.error("Worker.onerror",e,r,t),delete n.onmessageDict[e],delete n.onerrorDict[e]}else Bp.error("Worker.onerror",r,t)}};qf.prototype.post=function(e,t,i,r){void 0===e&&(e={}),this.onmessageDict[this.postCount]=i,this.onerrorDict[this.postCount]=r,e.__name=this.name,e.__postId=this.postCount,e.__debug=de.Debug,de.Debug&&Bp.time("Worker.postMessage "+this.name+" #"+this.postCount);try{this.worker.postMessage(e,t)}catch(t){Bp.error("worker.post:",t),this.worker.postMessage(e)}return this.pending+=1,this.postCount+=1,this},qf.prototype.terminate=function(){this.worker?(this.worker.terminate(),window.URL.revokeObjectURL(this.blobUrl),zp.activeWorkerCount-=1):Bp.log("no worker to terminate")};var Yf=function(t,e){void 0===e&&(e=2),this.pool=[],this.count=0,this.maxCount=Math.min(8,e),this.name=t};function Zf(t){for(var e=t.length,i=e/3,r=0,n=0,o=0,a=0;a<e;a+=3)r+=t[a+0],n+=t[a+1],o+=t[a+2];return new Qe(r/i,n/i,o/i)}function Kf(t,e,i){return i?t.sub(i).projectOnVector(e).add(i):t.projectOnVector(e),t}function Jf(t){for(var e=1/0,i=1/0,r=1/0,n=-1/0,o=-1/0,a=-1/0,s=0,c=t.length;s<c;s+=3){var u=t[s],h=t[s+1],l=t[s+2];u<e&&(e=u),h<i&&(i=h),l<r&&(r=l),n<u&&(n=u),o<h&&(o=h),a<l&&(a=l)}return[im([e,i,r]),im([n,o,a])]}function Qf(t,e){for(var i=0,r=e.length;i<r;i+=3){var n=e[i],o=e[i+1],a=e[i+2];e[i]=t[0]*n+t[4]*o+t[8]*a+t[12],e[i+1]=t[1]*n+t[5]*o+t[9]*a+t[13],e[i+2]=t[2]*n+t[6]*o+t[10]*a+t[14]}}function tm(t,e){for(var i=0,r=e.length;i<r;i+=3){var n=e[i],o=e[i+1],a=e[i+2];e[i]=t[0]*n+t[3]*o+t[6]*a,e[i+1]=t[1]*n+t[4]*o+t[7]*a,e[i+2]=t[2]*n+t[5]*o+t[8]*a}}function em(t){for(var e=0,i=t.length;e<i;e+=3){var r=t[e],n=t[e+1],o=t[e+2],a=1/Math.sqrt(r*r+n*n+o*o);t[e]=r*a,t[e+1]=n*a,t[e+2]=o*a}}function im(t){return new Float32Array(t||3)}function rm(t,e,i){var r=e[0],n=e[1],o=e[2],a=i[0],s=i[1],c=i[2];t[0]=n*c-o*s,t[1]=o*a-r*c,t[2]=r*s-n*a}function nm(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}function om(t,e,i){t[0]=e[0]-i[0],t[1]=e[1]-i[1],t[2]=e[2]-i[2]}function am(t,e,i){t[0]=e[0]+i[0],t[1]=e[1]+i[1],t[2]=e[2]+i[2]}function sm(t,e,i){void 0===i&&(i=0),t[0]=e[i],t[1]=e[i+1],t[2]=e[i+2]}function cm(t,e,i){void 0===i&&(i=0),e[i]=t[0],e[i+1]=t[1],e[i+2]=t[2]}function um(t){return Math.sqrt(t[0]*t[0]+t[1]*t[1]+t[2]*t[2])}function hm(t,e,i){lm(t,e,1/i)}function lm(t,e,i){t[0]=e[0]*i,t[1]=e[1]*i,t[2]=e[2]*i}function pm(t,e){lm(t,e,1/um(e))}function dm(t,e,i){t[0]=e[0]-i,t[1]=e[1]-i,t[2]=e[2]-i}function fm(t,e,i){t[0]=e[0]+i,t[1]=e[1]+i,t[2]=e[2]+i}function mm(t,e){t[0]=Math.floor(e[0]),t[1]=Math.floor(e[1]),t[2]=Math.floor(e[2])}function gm(t,e){t[0]=Math.ceil(e[0]),t[1]=Math.ceil(e[1]),t[2]=Math.ceil(e[2])}function vm(t,e){t[0]=-e[0],t[1]=-e[1],t[2]=-e[2]}function ym(t,e){void 0===e&&(e=9);for(var i=Math.floor(e/2),r=t.position1.length/3,n=3*(i*r),o=1/e,a=Cd(t.position1,t.position2),s=new Float32Array(n),c=new Float32Array(n),u=new Qe,h=0;h<r;++h){var l=3*h;u.set(a[l],a[l+1],a[l+2]);for(var p=t.position1[l],d=t.position1[l+1],f=t.position1[l+2],m=0;m<i;++m){var g=i*l+3*m,v=o*(2*m+1),y=o*(2*m+2);s[g]=p+u.x*v,s[g+1]=d+u.y*v,s[g+2]=f+u.z*v,c[g]=p+u.x*y,c[g+1]=d+u.y*y,c[g+2]=f+u.z*y}}var b=Ed(s,c),x=function(t,e){for(var i=t.length/3,r=new Float32Array(i*e*3),n=0;n<i;++n)for(var o=3*n,a=n*e*3,s=t[o+0],c=t[o+1],u=t[o+2],h=0;h<e;++h){var l=a+3*h;r[l+0]=s,r[l+1]=c,r[l+2]=u}return r}(t.color,i),_={position:b,position1:s,position2:c,color:x,color2:x};return t.radius&&(_.radius=Od(t.radius,i)),t.picking&&t.picking.array&&(t.picking.array=Od(t.picking.array,i),_.picking=t.picking),t.primitiveId&&(_.primitiveId=Od(t.primitiveId,i)),_}function bm(t,e){void 0===e&&(e=.1);for(var i=Cd(t.position1,t.position2),r=[],n=[],o=[],a=t.radius?[]:void 0,s=t.picking?[]:void 0,c=t.primitiveId?[]:void 0,u=new Qe,h=t.position1.length/3,l=0,p=0;p<h;++p){var d=3*p;u.set(i[d],i[d+1],i[d+2]);for(var f=u.length()/e,m=Math.floor(f/2),g=1/f,v=t.position1[d],y=t.position1[d+1],b=t.position1[d+2],x=0;x<m;++x){var _=3*l+3*x,w=g*(2*x+1),S=g*(2*x+2);r[_]=v+u.x*w,r[_+1]=y+u.y*w,r[_+2]=b+u.z*w,n[_]=v+u.x*S,n[_+1]=y+u.y*S,n[_+2]=b+u.z*S,t.color&&(o[_]=t.color[d],o[_+1]=t.color[d+1],o[_+2]=t.color[d+2]),a&&(a[l+x]=t.radius[p]),s&&(t.picking.array?s[l+x]=t.picking.array[p]:s[l+x]=p),c&&(c[l+x]=t.primitiveId[p])}l+=m}var A=new Float32Array(r),M=new Float32Array(n),P=Ed(A,M),E=new Float32Array(o),C={position:P,position1:A,position2:M,color:E,color2:E};return a&&(C.radius=new Float32Array(a)),s&&t.picking&&(t.picking.array=new Float32Array(s),C.picking=t.picking),c&&(C.primitiveId=new Float32Array(c)),C}function xm(t,e){void 0===e&&(e=.1);for(var i=Cd(t.position1,t.position2),r=[],n=[],o=[],a=t.radius?[]:void 0,s=t.picking?[]:void 0,c=t.primitiveId?[]:void 0,u=new Qe,h=t.position1.length/3,l=e,p=!0,d=0,f=0,m=0,g=0;g<h;++g){var v=3*g,y=t.position1[v],b=t.position1[v+1],x=t.position1[v+2];u.set(i[v],i[v+1],i[v+2]);var _=u.length();p&&(r[f]=y,r[f+1]=b,r[f+2]=x);for(var w=l,S=1/_;w<_;){var A=p?n:r;A[f]=y+u.x*w*S,A[f+1]=b+u.y*w*S,A[f+2]=x+u.z*w*S,p&&(f=3*++d),p=!p,w+=l=e}p&&(n[f]=t.position2[v],n[f+1]=t.position2[v+1],n[f+2]=t.position2[v+2],f=3*++d),l=w-_;for(var M=m;M<d;M++){if(t.color){var P=3*M;o[P]=t.color[v],o[P+1]=t.color[v+1],o[P+2]=t.color[v+2]}a&&(a[M]=t.radius[g]),s&&(t.picking.array?s[M]=t.picking.array[g]:s[M]=g),c&&(c[M]=t.primitiveId[g])}m=d}if(!p&&0<h){var E=3*d;n[E]=t.position2[3*h-3],n[E+1]=t.position2[3*h-2],n[E+1]=t.position2[3*h-1]}var C=new Float32Array(r),T=new Float32Array(n),I=Ed(C,T),R=new Float32Array(o),L={position:I,position1:C,position2:T,color:R,color2:R};return a&&(L.radius=new Float32Array(a)),s&&t.picking&&(t.picking.array=new Float32Array(s),L.picking=t.picking),c&&(L.primitiveId=new Float32Array(c)),L}Yf.prototype.post=function(t,e,i,r){void 0===t&&(t={});var n=this.getNextWorker();return n?n.post(t,e,i,r):console.error("unable to get worker from pool"),this},Yf.prototype.terminate=function(){this.pool.forEach(function(t){t.terminate()})},Yf.prototype.getNextWorker=function(){for(var t,e=1/0,i=0;i<this.maxCount;++i){if(i>=this.count){t=new qf(this.name),this.pool.push(t),this.count+=1;break}var r=this.pool[i];if(0===r.pending){t=r;break}r.pending<e&&(e=r.pending,t=r)}return t},Yf.prototype.constructor=Yf,Jf.__deps=[im],hm.__deps=[lm],pm.__deps=[lm,um];var _m=new Qe,wm=function(){},Sm={Picker:{configurable:!0},Buffer:{configurable:!0}};Sm.Picker.get=function(){return qp.get(this.type)},Sm.Buffer.get=function(){return Xp.get(this.type)},wm.getShapeKey=function(t){return this.type+t[0].toUpperCase()+t.substr(1)},wm.expandBoundingBox=function(t,e){},wm.valueToShape=function(t,e,i){var r,n,o=t._primitiveData[this.getShapeKey(e)];switch(this.fields[e]){case"v3":case"c":n=o,void 0!==(r=i).toArray?r=r.toArray():void 0!==r.x?r=[r.x,r.y,r.z]:void 0!==r.r&&(r=[r.r,r.g,r.b]),n.push.apply(n,r);break;default:o.push(i)}},wm.objectToShape=function(e,i){var r=this;Object.keys(this.fields).forEach(function(t){r.valueToShape(e,t,i[t])}),this.valueToShape(e,"name",i.name),this.expandBoundingBox(e.boundingBox,i)},wm.valueFromShape=function(t,e,i){var r=t._primitiveData[this.getShapeKey(i)];switch(this.fields[i]){case"v3":return(new Qe).fromArray(r,3*e);case"c":return(new Li).fromArray(r,3*e);default:return r[e]}},wm.objectFromShape=function(e,i){var r=this,t=this.valueFromShape(e,i,"name");void 0===t&&(t=this.type+": "+i+" ("+e.name+")");var n={shape:e,name:t};return Object.keys(this.fields).forEach(function(t){n[t]=r.valueFromShape(e,i,t)}),n},wm.arrayFromShape=function(t,e){var i=t._primitiveData[this.getShapeKey(e)];switch(this.fields[e]){case"s":return i;default:return new Float32Array(i)}},wm.dataFromShape=function(e){var i=this,r={};return this.Picker&&(r.picking=new this.Picker(e)),Object.keys(this.fields).forEach(function(t){r[t]=i.arrayFromShape(e,t)}),r},wm.bufferFromShape=function(t,e){return new this.Buffer(this.dataFromShape(t),e)},Object.defineProperties(wm,Sm),wm.type="",wm.fields={};var Am=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),((e.prototype=Object.create(t&&t.prototype)).constructor=e).positionFromShape=function(t,e){return this.valueFromShape(t,e,"position")},e.expandBoundingBox=function(t,e){t.expandByPoint(_m.fromArray(e.position))},e}(wm);Am.type="sphere",Am.fields={position:"v3",color:"c",radius:"f"};var Mm=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),((e.prototype=Object.create(t&&t.prototype)).constructor=e).positionFromShape=function(t,e){return this.valueFromShape(t,e,"position")},e.expandBoundingBox=function(t,e){t.expandByPoint(_m.fromArray(e.position))},e}(wm);Mm.type="box",Mm.fields={position:"v3",color:"c",size:"f",heightAxis:"v3",depthAxis:"v3"};var Pm=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e}(Mm);Pm.type="octahedron";var Em=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e}(Mm);Em.type="tetrahedron";var Cm=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),((e.prototype=Object.create(t&&t.prototype)).constructor=e).positionFromShape=function(t,e){var i=this.valueFromShape(t,e,"position1"),r=this.valueFromShape(t,e,"position2");return i.add(r).multiplyScalar(.5)},e.expandBoundingBox=function(t,e){t.expandByPoint(_m.fromArray(e.position1)),t.expandByPoint(_m.fromArray(e.position2))},e.bufferFromShape=function(t,e){void 0===e&&(e={});var i=this.dataFromShape(t);return"cylinder"===this.type&&e.dashedCylinder&&(i=bm(i)),new this.Buffer(i,e)},e}(wm);Cm.type="cylinder",Cm.fields={position1:"v3",position2:"v3",color:"c",radius:"f"};var Tm=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e}(Cm);Tm.type="arrow";var Im=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e}(Cm);Im.type="cone";var Rm=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e}(Am);Rm.type="ellipsoid",Rm.fields={position:"v3",color:"c",radius:"f",majorAxis:"v3",minorAxis:"v3"};var Lm=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e}(Rm);Lm.type="torus";var Om=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),((e.prototype=Object.create(t&&t.prototype)).constructor=e).positionFromShape=function(t,e){return this.valueFromShape(t,e,"position")},e.expandBoundingBox=function(t,e){t.expandByPoint(_m.fromArray(e.position))},e}(wm);Om.type="text",Om.fields={position:"v3",color:"c",size:"f",text:"s"};var Dm=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),((e.prototype=Object.create(t&&t.prototype)).constructor=e).positionFromShape=function(t,e){return this.valueFromShape(t,e,"position")},e.expandBoundingBox=function(t,e){t.expandByPoint(_m.fromArray(e.position))},e}(wm);Dm.type="point",Dm.fields={position:"v3",color:"c"};var km=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),((e.prototype=Object.create(t&&t.prototype)).constructor=e).positionFromShape=function(t,e){var i=this.valueFromShape(t,e,"position1"),r=this.valueFromShape(t,e,"position2");return i.add(r).multiplyScalar(.5)},e.expandBoundingBox=function(t,e){t.expandByPoint(_m.fromArray(e.position1)),t.expandByPoint(_m.fromArray(e.position2))},e}(wm);km.type="wideline",km.fields={position1:"v3",position2:"v3",color:"c"};var Bm=function(t,e){this.exp=3;var i=e||function(t){for(var e=t.x,i=t.y,r=t.z,n=new Ai,o=e.length,a=n.min,s=n.max,c=0;c<o;c++)a.x=Math.min(e[c],a.x),a.y=Math.min(i[c],a.y),a.z=Math.min(r[c],a.z),s.x=Math.max(e[c],s.x),s.y=Math.max(i[c],s.y),s.z=Math.max(r[c],s.z);return n}(t);this.minX=i.min.x,this.minY=i.min.y,this.minZ=i.min.z,this.boundX=1+(i.max.x-this.minX>>this.exp),this.boundY=1+(i.max.y-this.minY>>this.exp),this.boundZ=1+(i.max.z-this.minZ>>this.exp);for(var r=this.boundX*this.boundY*this.boundZ,n=t.x.length,o=t.x,a=t.y,s=t.z,c=0,u=new Uint32Array(r),h=new Int32Array(n),l=0;l<n;++l){var p=o[l]-this.minX>>this.exp,d=a[l]-this.minY>>this.exp,f=s[l]-this.minZ>>this.exp,m=(p*this.boundY+d)*this.boundZ+f;1===(u[m]+=1)&&(c+=1),h[l]=m}for(var g=new Uint16Array(c),v=0,y=0;v<r;++v){var b=u[v];0<b&&(u[v]=y+1,g[y]=b,y+=1)}for(var x=new Uint32Array(c),_=1;_<c;++_)x[_]+=x[_-1]+g[_-1];for(var w=new Uint16Array(c),S=new Int32Array(n),A=0;A<n;++A){var M=u[h[A]];if(0<M){var P=M-1;S[x[P]+w[P]]=A,w[P]+=1}}this.grid=u,this.bucketCount=g,this.bucketOffset=x,this.bucketArray=S,this.xArray=o,this.yArray=a,this.zArray=s};Bm.prototype.within=function(t,e,i,r){var n=[];return this.eachWithin(t,e,i,r,function(t){return n.push(t)}),n},Bm.prototype.eachWithin=function(t,e,i,r,n){for(var o=r*r,a=Math.max(0,t-r-this.minX>>this.exp),s=Math.max(0,e-r-this.minY>>this.exp),c=Math.max(0,i-r-this.minZ>>this.exp),u=Math.min(this.boundX,t+r-this.minX>>this.exp),h=Math.min(this.boundY,e+r-this.minY>>this.exp),l=Math.min(this.boundZ,i+r-this.minZ>>this.exp),p=a;p<=u;++p)for(var d=s;d<=h;++d)for(var f=c;f<=l;++f){var m=(p*this.boundY+d)*this.boundZ+f,g=this.grid[m];if(0<g)for(var v=g-1,y=this.bucketOffset[v],b=y+this.bucketCount[v],x=y;x<b;++x){var _=this.bucketArray[x],w=this.xArray[_]-t,S=this.yArray[_]-e,A=this.zArray[_]-i,M=w*w+S*S+A*A;M<=o&&n(_,M)}}};var Nm=function(t){void 0===t&&(t=0),this._fields=this._defaultFields,this._init(0)};Nm.prototype._init=function(t){this.length=t;for(var e=this.count=0,i=this._fields.length;e<i;++e){var r=this._fields[e],n=r[0],o=r[1],a=r[2];this._initField(n,o,a)}},Nm.prototype._initField=function(t,e,i){this[t]=yl(i,this.length*e)},Nm.prototype.addField=function(t,e,i){this._fields.push([t,e,i]),this._initField(t,e,i)},Nm.prototype.resize=function(t){this.length=Math.round(t||0),this.count=Math.min(this.count,this.length);for(var e=0,i=this._fields.length;e<i;++e){var r=this._fields[e][0],n=this._fields[e][1],o=this.length*n,a=new this[r].constructor(o);this[r].length>o?a.set(this[r].subarray(0,o)):a.set(this[r]),this[r]=a}},Nm.prototype.growIfFull=function(){if(this.count>=this.length){var t=Math.round(1.5*this.length);this.resize(Math.max(256,t))}},Nm.prototype.copyFrom=function(t,e,i,r){for(var n=0,o=this._fields.length;n<o;++n)for(var a=this._fields[n][0],s=this._fields[n][1],c=this[a],u=t[a],h=0;h<r;++h)for(var l=s*(e+h),p=s*(i+h),d=0;d<s;++d)c[l+d]=u[p+d]},Nm.prototype.copyWithin=function(t,e,i){for(var r=0,n=this._fields.length;r<n;++r)for(var o=this._fields[r][0],a=this._fields[r][1],s=this[o],c=0;c<i;++c)for(var u=a*(t+c),h=a*(e+c),l=0;l<a;++l)s[u+l]=s[h+l]},Nm.prototype.sort=function(c){Bp.time("Store.sort");var u=this,h=new this.constructor(1);!function t(e,i){if(e<i){var r=Math.floor((e+i)/2),n=e,o=i;do{for(;c(n,r)<0;)n+=1;for(;0<c(o,r);)o-=1;n<=o&&(n===r?r=o:o===r&&(r=n),(a=n)!==(s=o)&&(h.copyFrom(u,0,a,1),u.copyWithin(a,s,1),u.copyFrom(h,s,0,1)),n+=1,o-=1)}while(n<=o);t(e,o),t(n,i)}var a,s}(0,this.count-1),Bp.timeEnd("Store.sort")},Nm.prototype.clear=function(){this.count=0},Nm.prototype.dispose=function(){delete this.length,delete this.count;for(var t=0,e=this._fields.length;t<e;++t){delete this[this._fields[t][0]]}};var Fm=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e;var i={_defaultFields:{configurable:!0}};return i._defaultFields.get=function(){return[["index1",1,"int32"],["index2",1,"int32"],["type",1,"int8"]]},e.prototype.addContact=function(t,e,i){this.growIfFull();var r=this.count;t<e?(this.index1[r]=t,this.index2[r]=e):(this.index2[r]=t,this.index1[r]=e),i&&(this.type[r]=i),this.count+=1},Object.defineProperties(e.prototype,i),e}(Nm);function zm(t){return 16843009*((t=(858993459&(t-=t>>>1&1431655765))+(t>>>2&858993459))+(t>>>4)&252645135)>>>24}var Um=function(t,e){this.length=t,this._words=new Uint32Array(t+32>>>5),!0===e&&this.setAll()};function jm(t){for(var e=t.edgeCount,i=t.nodeCount,r=t.nodeArray1,n=t.nodeArray2,o=new Uint8Array(i),a=new Int32Array(i),s=0;s<e;++s)o[r[s]]+=1,o[n[s]]+=1;for(var c=1;c<i;++c)a[c]+=a[c-1]+o[c-1];for(var u=2*e,h=new Int32Array(u),l=0;l<u;++l)h[l]=-1;for(var p=0;p<e;++p){for(var d=r[p],f=n[p],m=a[d];-1!==h[m]&&m<u;)m+=1;h[m]=p;for(var g=a[f];-1!==h[g]&&g<u;)g+=1;h[g]=p}return{countArray:o,offsetArray:a,indexArray:h}}function Gm(t,e){return void 0===t&&(t=0),void 0===e&&(e=0),{type:t,group:e,x:0,y:0,z:0,atomSet:[]}}function Vm(t,e){t.x+=e.x,t.y+=e.y,t.z+=e.z,t.atomSet.push(e.index)}function Hm(t,e){var i=e.atomSet.length;if(0<i){var r=t.types,n=t.groups,o=t.centers,a=t.atomSets;r.push(e.type),n.push(e.group),o.x.push(e.x/i),o.y.push(e.y/i),o.z.push(e.z/i),a.push(e.atomSet)}}Um.prototype.get=function(t){return 0!=(this._words[t>>>5]&1<<t)},Um.prototype.set=function(t){this._words[t>>>5]|=1<<t},Um.prototype.clear=function(t){this._words[t>>>5]&=~(1<<t)},Um.prototype.flip=function(t){this._words[t>>>5]^=1<<t},Um.prototype._assignRange=function(t,e,i){if(!(e<t)){for(var r=this._words,n=!0===i?4294967295:0,o=t>>>5,a=e>>>5,s=o;s<a;++s)r[s]=n;var c=o<<5,u=a<<5;if(!0===i)if(e-t<32)for(var h=t,l=e+1;h<l;++h)r[h>>>5]|=1<<h;else{for(var p=t,d=c;p<d;++p)r[p>>>5]|=1<<p;for(var f=u,m=e+1;f<m;++f)r[f>>>5]|=1<<f}else if(e-t<32)for(var g=t,v=e+1;g<v;++g)r[g>>>5]&=~(1<<g);else{for(var y=t,b=c;y<b;++y)r[y>>>5]&=~(1<<y);for(var x=u,_=e+1;x<_;++x)r[x>>>5]&=~(1<<x)}return this}},Um.prototype.setRange=function(t,e){return this._assignRange(t,e,!0)},Um.prototype.clearRange=function(t,e){return this._assignRange(t,e,!1)},Um.prototype.setBits=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];for(var i=this._words,r=t.length,n=0;n<r;++n){var o=t[n];i[o>>>5]|=1<<o}return this},Um.prototype.clearBits=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];for(var i=this._words,r=t.length,n=0;n<r;++n){var o=t[n];i[o>>>5]&=~(1<<o)}return this},Um.prototype.setAll=function(){return this._assignRange(0,this.length-1,!0)},Um.prototype.clearAll=function(){return this._assignRange(0,this.length-1,!1)},Um.prototype.flipAll=function(){for(var t=this._words.length,e=this._words,i=32-this.length%32,r=0;r<t-1;++r)e[r]=~e[r];return e[t-1]=~(e[t-1]<<i)>>>i,this},Um.prototype._isRangeValue=function(t,e,i){if(!(e<t)){for(var r=this._words,n=!0===i?4294967295:0,o=t>>>5,a=e>>>5,s=o;s<a;++s)if(r[s]!==n)return!1;if(e-t<32){for(var c=t,u=e+1;c<u;++c)if(!!(r[c>>>5]&1<<c)!==i)return!1}else{for(var h=a<<5,l=t,p=o<<5<<5;l<p;++l)if(!!(r[l>>>5]&1<<l)!==i)return!1;for(var d=h,f=e+1;d<f;++d)if(!!(r[d>>>5]&1<<d)!==i)return!1}return!0}},Um.prototype.isRangeSet=function(t,e){return this._isRangeValue(t,e,!0)},Um.prototype.isRangeClear=function(t,e){return this._isRangeValue(t,e,!1)},Um.prototype.isAllSet=function(){return this._isRangeValue(0,this.length-1,!0)},Um.prototype.isAllClear=function(){return this._isRangeValue(0,this.length-1,!1)},Um.prototype.isSet=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];for(var i=this._words,r=t.length,n=0;n<r;++n){var o=t[n];if(0==(i[o>>>5]&1<<o))return!1}return!0},Um.prototype.isClear=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];for(var i=this._words,r=t.length,n=0;n<r;++n){var o=t[n];if(0!=(i[o>>>5]&1<<o))return!1}return!0},Um.prototype.isEqualTo=function(t){for(var e=this._words,i=t._words,r=Math.min(e.length,i.length),n=0;n<r;++n)if(e[n]!==i[n])return!1;return!0},Um.prototype.getSize=function(){for(var t=this._words.length,e=this._words,i=0,r=0;r<t;++r)i+=zm(e[r]);return i},Um.prototype.difference=function(t){for(var e=this._words,i=t._words,r=Math.min(e.length,i.length),n=0;n<r;++n)e[n]=e[n]&~i[n];for(var o=e.length;o<r;++o)e[o]=0;return this},Um.prototype.union=function(t){for(var e=this._words,i=t._words,r=Math.min(e.length,i.length),n=0;n<r;++n)e[n]|=i[n];for(var o=e.length;o<r;++o)e[o]=0;return this},Um.prototype.intersection=function(t){for(var e=this._words,i=t._words,r=Math.min(e.length,i.length),n=0;n<r;++n)e[n]&=i[n];for(var o=e.length;o<r;++o)e[o]=0;return this},Um.prototype.intersects=function(t){for(var e=this._words,i=t._words,r=Math.min(e.length,i.length),n=0;n<r;++n)if(0!=(e[n]&i[n]))return!0;return!1},Um.prototype.getIntersectionSize=function(t){for(var e=this._words,i=t._words,r=Math.min(e.length,i.length),n=0,o=0;o<r;++o)n+=zm(e[o]&i[o]);return n},Um.prototype.makeIntersection=function(t){var e=this._words,i=t._words,r=Math.min(e.length,i.length),n=new Uint32Array(r),o=Object.create(Um.prototype);o._words=n,o.length=Math.min(this.length,t.length);for(var a=0;a<r;++a)n[a]=e[a]&i[a];return o},Um.prototype.forEach=function(t){for(var e=this._words.length,i=this._words,r=0,n=0;n<e;++n)for(var o=i[n];0!==o;){var a=o&-o;t((n<<5)+zm(a-1),r),o^=a,++r}},Um.prototype.toArray=function(){for(var t=this._words,e=new Array(this.getSize()),i=this._words.length,r=0,n=0;n<i;++n)for(var o=t[n];0!==o;){var a=o&-o;e[r++]=(n<<5)+zm(a-1),o^=a}return e},Um.prototype.toString=function(){return"{"+this.toArray().join(",")+"}"},Um.prototype.toSeleString=function(){var t=this.toArray().join(",");return t?"@"+t:"NONE"},Um.prototype.clone=function(){var t=Object.create(Um.prototype);return t.length=this.length,t._words=new Uint32Array(this._words),t};var $m=0,Wm=["D-BETA-PEPTIDE, C-GAMMA LINKING","D-GAMMA-PEPTIDE, C-DELTA LINKING","D-PEPTIDE COOH CARBOXY TERMINUS","D-PEPTIDE NH3 AMINO TERMINUS","D-PEPTIDE LINKING","L-BETA-PEPTIDE, C-GAMMA LINKING","L-GAMMA-PEPTIDE, C-DELTA LINKING","L-PEPTIDE COOH CARBOXY TERMINUS","L-PEPTIDE NH3 AMINO TERMINUS","L-PEPTIDE LINKING","PEPTIDE LINKING","PEPTIDE-LIKE"],Xm=["RNA OH 3 PRIME TERMINUS","RNA OH 5 PRIME TERMINUS","RNA LINKING"],qm=["DNA OH 3 PRIME TERMINUS","DNA OH 5 PRIME TERMINUS","DNA LINKING","L-DNA LINKING","L-RNA LINKING"],Ym=["D-SACCHARIDE","D-SACCHARIDE 1,4 AND 1,4 LINKING","D-SACCHARIDE 1,4 AND 1,6 LINKING","L-SACCHARIDE","L-SACCHARIDE 1,4 AND 1,4 LINKING","L-SACCHARIDE 1,4 AND 1,6 LINKING","SACCHARIDE"],Zm=["NON-POLYMER"].concat(["OTHER"],Ym),Km=["h","g","i"],Jm=["e","b"],Qm=["s","t","l",""],tg={H:1,D:1,T:1,HE:2,LI:3,BE:4,B:5,C:6,N:7,O:8,F:9,NE:10,NA:11,MG:12,AL:13,SI:14,P:15,S:16,CL:17,AR:18,K:19,CA:20,SC:21,TI:22,V:23,CR:24,MN:25,FE:26,CO:27,NI:28,CU:29,ZN:30,GA:31,GE:32,AS:33,SE:34,BR:35,KR:36,RB:37,SR:38,Y:39,ZR:40,NB:41,MO:42,TC:43,RU:44,RH:45,PD:46,AG:47,CD:48,IN:49,SN:50,SB:51,TE:52,I:53,XE:54,CS:55,BA:56,LA:57,CE:58,PR:59,ND:60,PM:61,SM:62,EU:63,GD:64,TB:65,DY:66,HO:67,ER:68,TM:69,YB:70,LU:71,HF:72,TA:73,W:74,RE:75,OS:76,IR:77,PT:78,AU:79,HG:80,TL:81,PB:82,BI:83,PO:84,AT:85,RN:86,FR:87,RA:88,AC:89,TH:90,PA:91,U:92,NP:93,PU:94,AM:95,CM:96,BK:97,CF:98,ES:99,FM:100,MD:101,NO:102,LR:103,RF:104,DB:105,SG:106,BH:107,HS:108,MT:109,DS:110,RG:111,CN:112,NH:113,FL:114,MC:115,LV:116,TS:117,OG:118},eg={1:1.1,2:1.4,3:1.81,4:1.53,5:1.92,6:1.7,7:1.55,8:1.52,9:1.47,10:1.54,11:2.27,12:1.73,13:1.84,14:2.1,15:1.8,16:1.8,17:1.75,18:1.88,19:2.75,20:2.31,21:2.3,22:2.15,23:2.05,24:2.05,25:2.05,26:2.05,27:2,28:2,29:2,30:2.1,31:1.87,32:2.11,33:1.85,34:1.9,35:1.83,36:2.02,37:3.03,38:2.49,39:2.4,40:2.3,41:2.15,42:2.1,43:2.05,44:2.05,45:2,46:2.05,47:2.1,48:2.2,49:2.2,50:1.93,51:2.17,52:2.06,53:1.98,54:2.16,55:3.43,56:2.68,57:2.5,58:2.48,59:2.47,60:2.45,61:2.43,62:2.42,63:2.4,64:2.38,65:2.37,66:2.35,67:2.33,68:2.32,69:2.3,70:2.28,71:2.27,72:2.25,73:2.2,74:2.1,75:2.05,76:2,77:2,78:2.05,79:2.1,80:2.05,81:1.96,82:2.02,83:2.07,84:1.97,85:2.02,86:2.2,87:3.48,88:2.83,89:2,90:2.4,91:2,92:2.3,93:2,94:2,95:2,96:2,97:2,98:2,99:2,100:2,101:2,102:2,103:2,104:2,105:2,106:2,107:2,108:2,109:2,110:2,111:2,112:2,113:2,114:2,115:2,116:2,117:2,118:2},ig={1:.31,2:.28,3:1.28,4:.96,5:.84,6:.76,7:.71,8:.66,9:.57,10:.58,11:1.66,12:1.41,13:1.21,14:1.11,15:1.07,16:1.05,17:1.02,18:1.06,19:2.03,20:1.76,21:1.7,22:1.6,23:1.53,24:1.39,25:1.39,26:1.32,27:1.26,28:1.24,29:1.32,30:1.22,31:1.22,32:1.2,33:1.19,34:1.2,35:1.2,36:1.16,37:2.2,38:1.95,39:1.9,40:1.75,41:1.64,42:1.54,43:1.47,44:1.46,45:1.42,46:1.39,47:1.45,48:1.44,49:1.42,50:1.39,51:1.39,52:1.38,53:1.39,54:1.4,55:2.44,56:2.15,57:2.07,58:2.04,59:2.03,60:2.01,61:1.99,62:1.98,63:1.98,64:1.96,65:1.94,66:1.92,67:1.92,68:1.89,69:1.9,70:1.87,71:1.87,72:1.75,73:1.7,74:1.62,75:1.51,76:1.44,77:1.41,78:1.36,79:1.36,80:1.32,81:1.45,82:1.46,83:1.48,84:1.4,85:1.5,86:1.5,87:2.6,88:2.21,89:2.15,90:2.06,91:2,92:1.96,93:1.9,94:1.87,95:1.8,96:1.69,97:1.6,98:1.6,99:1.6,100:1.6,101:1.6,102:1.6,103:1.6,104:1.6,105:1.6,106:1.6,107:1.6,108:1.6,109:1.6,110:1.6,111:1.6,112:1.6,113:1.6,114:1.6,115:1.6,116:1.6,117:1.6,118:1.6},rg={1:[1],2:[0],3:[1],4:[2],5:[3],6:[4],7:[3],8:[2],9:[1],10:[0],11:[1],12:[2],13:[6],14:[6],15:[3,5,7],16:[2,4,6],17:[1],18:[0],19:[1],20:[2],31:[3],32:[4],33:[3,5],34:[2,4,6],35:[1],36:[0],37:[1],38:[2],49:[3],50:[4],51:[3,5],52:[2],53:[1,2,5],54:[0,2],55:[1],56:[2],81:[3],82:[4],83:[3],84:[2],85:[1],86:[0],87:[1],88:[2]},ng={1:1,2:2,3:1,4:2,5:3,6:4,7:5,8:6,9:7,10:8,11:1,12:2,13:3,14:4,15:5,16:6,17:7,18:8,19:1,20:2,21:3,22:4,23:5,24:6,25:7,26:8,27:9,28:10,29:11,30:2,31:3,32:4,33:5,34:6,35:7,36:8,37:1,38:2,39:3,40:4,41:5,42:6,43:7,44:8,45:9,46:10,47:11,48:2,49:3,50:4,51:5,52:6,53:7,54:8,55:1,56:2,57:3,58:4,59:3,60:4,61:5,62:6,63:7,64:8,65:9,66:10,67:11,68:12,69:13,70:14,71:15,72:4,73:5,74:6,75:7,76:8,77:9,78:10,79:11,80:2,81:3,82:4,83:5,84:6,85:7,86:8,87:1,88:2,89:3,90:4,91:3,92:4,93:5,94:6,95:7,96:8,97:9,98:10,99:11,100:12,101:13,102:14,103:15,104:2,105:2,106:2,107:2,108:2,109:2,110:2,111:2,112:2,113:3,114:4,115:5,116:6,117:7,118:8},og={ALA:[.17,.5,.33],ARG:[.81,1.81,1],ASN:[.42,.85,.43],ASP:[1.23,3.64,2.41],ASH:[-.07,.43,.5],CYS:[-.24,-.02,.22],GLN:[.58,.77,.19],GLU:[2.02,3.63,1.61],GLH:[-.01,.11,.12],GLY:[.01,1.15,1.14],HIS:[.17,.11,-.06],ILE:[-.31,-1.12,-.81],LEU:[-.56,-1.25,-.69],LYS:[.99,2.8,1.81],MET:[-.23,-.67,-.44],PHE:[-1.13,-1.71,-.58],PRO:[.45,.14,-.31],SER:[.13,.46,.33],THR:[.14,.25,.11],TRP:[-1.85,-2.09,-.24],TYR:[-.94,-.71,.23],VAL:[.07,-.46,-.53]},ag=[0,0,0],sg={HIS:"H",ARG:"R",LYS:"K",ILE:"I",PHE:"F",LEU:"L",TRP:"W",ALA:"A",MET:"M",PRO:"P",CYS:"C",ASN:"N",VAL:"V",GLY:"G",SER:"S",GLN:"Q",TYR:"Y",ASP:"D",GLU:"E",THR:"T",SEC:"U",PYL:"O"},cg=Object.keys(sg),ug=["A","C","T","G","U"],hg=["DA","DC","DT","DG","DU"],lg=["A","G","DA","DG"],pg=ug.concat(hg),dg=["SOL","WAT","HOH","H2O","W","DOD","D3O","TIP3","TIP4","SPC"],fg=["118","119","1AL","1CU","2FK","2HP","2OF","3CO","3MT","3NI","3OF","3P8","4MO","4PU","543","6MO","ACT","AG","AL","ALF","AM","ATH","AU","AU3","AUC","AZI","BA","BCT","BEF","BF4","BO4","BR","BS3","BSY","CA","CAC","CD","CD1","CD3","CD5","CE","CHT","CL","CO","CO3","CO5","CON","CR","CS","CSB","CU","CU1","CU3","CUA","CUZ","CYN","DME","DMI","DSC","DTI","DY","E4N","EDR","EMC","ER3","EU","EU3","F","FE","FE2","FPO","GA","GD3","GEP","HAI","HG","HGC","IN","IOD","IR","IR3","IRI","IUM","K","KO4","LA","LCO","LCP","LI","LU","MAC","MG","MH2","MH3","MLI","MLT","MMC","MN","MN3","MN5","MN6","MO1","MO2","MO3","MO4","MO5","MO6","MOO","MOS","MOW","MW1","MW2","MW3","NA","NA2","NA5","NA6","NAO","NAW","NCO","NET","NH4","NI","NI1","NI2","NI3","NO2","NO3","NRU","O4M","OAA","OC1","OC2","OC3","OC4","OC5","OC6","OC7","OC8","OCL","OCM","OCN","OCO","OF1","OF2","OF3","OH","OS","OS4","OXL","PB","PBM","PD","PDV","PER","PI","PO3","PO4","PR","PT","PT4","PTN","RB","RH3","RHD","RU","SB","SCN","SE4","SEK","SM","SMO","SO3","SO4","SR","T1A","TB","TBA","TCN","TEA","TH","THE","TL","TMA","TRA","UNX","V","VN3","VO4","W","WO5","Y1","YB","YB2","YH","YT3","ZCM","ZN","ZN2","ZN3","ZNO","ZO3","OHX"],mg=["045","0AT","0BD","0MK","0NZ","0TS","0V4","0XY","0YT","10M","147","149","14T","15L","16G","18T","18Y","1AR","1BW","1GL","1GN","1JB","1LL","1NA","1S3","26M","26Q","26R","26V","26W","26Y","27C","289","291","293","2DG","2F8","2FG","2FL","2FP","2GL","2M4","2M5","32O","34V","3CM","3DO","3DY","3FM","3LR","3MF","3MG","3SA","3ZW","46D","46M","46Z","48Z","4CQ","4GC","4NN","50A","5DI","5GF","5MM","5RP","5SA","5SP","64K","6PG","6SA","7JZ","7SA","A1Q","A2G","AAB","AAL","AAO","ABC","ABD","ABE","ABF","ABL","ACG","ACI","ACR","ACX","ADA","ADG","ADR","AF1","AFD","AFL","AFO","AFP","AFR","AGC","AGH","AGL","AHR","AIG","ALL","ALX","AMU","AOG","AOS","ARA","ARB","ARE","ARI","ASG","ASO","AXP","AXR","B0D","B16","B2G","B4G","B6D","B8D","B9D","BBK","BCD","BDG","BDP","BDR","BEM","BFP","BGC","BGL","BGP","BGS","BHG","BMA","BMX","BNG","BNX","BOG","BRI","BXF","BXP","BXX","BXY","C3X","C4X","C5X","CAP","CBI","CBK","CBS","CDR","CEG","CGF","CHO","CR1","CR6","CRA","CT3","CTO","CTR","CTT","D6G","DAF","DAG","DDA","DDB","DDL","DEL","DFR","DFX","DG0","DGC","DGD","DGM","DGS","DIG","DLF","DLG","DMU","DNO","DOM","DP5","DQQ","DQR","DR2","DR3","DR4","DRI","DSR","DT6","DVC","E4P","E5G","EAG","EBG","EBQ","EGA","EJT","EPG","ERE","ERI","F1P","F1X","F6P","FBP","FCA","FCB","FCT","FDP","FDQ","FFC","FIX","FMO","FRU","FSI","FU4","FUB","FUC","FUD","FUL","FXP","G16","G1P","G2F","G3I","G4D","G4S","G6D","G6P","G6S","GAC","GAD","GAL","GC1","GC4","GCD","GCN","GCO","GCS","GCT","GCU","GCV","GCW","GCX","GE1","GFG","GFP","GIV","GL0","GL2","GL5","GL6","GL7","GL9","GLA","GLB","GLC","GLD","GLF","GLG","GLO","GLP","GLS","GLT","GLW","GMH","GN1","GNX","GP1","GP4","GPH","GPM","GQ1","GQ2","GQ4","GS1","GS4","GSA","GSD","GTE","GTH","GTK","GTR","GTZ","GU0","GU1","GU2","GU3","GU4","GU5","GU6","GU8","GU9","GUF","GUP","GUZ","GYP","GYV","H2P","HDL","HMS","HS2","HSD","HSG","HSH","HSJ","HSQ","HSR","HSU","HSX","HSY","HSZ","IAB","IDG","IDR","IDS","IDT","IDU","IDX","IDY","IMK","IN1","IPT","ISL","KBG","KD2","KDA","KDM","KDO","KFN","KO1","KO2","KTU","L6S","LAG","LAI","LAK","LAO","LAT","LB2","LBT","LCN","LDY","LGC","LGU","LM2","LMT","LMU","LOG","LOX","LPK","LSM","LTM","LVZ","LXB","LXZ","M1F","M3M","M6P","M8C","MA1","MA2","MA3","MAB","MAG","MAL","MAN","MAT","MAV","MAW","MBG","MCU","MDA","MDM","MDP","MFA","MFB","MFU","MG5","MGA","MGL","MLB","MMA","MMN","MN0","MRP","MTT","MUG","MVP","MXY","N1L","N9S","NAA","NAG","NBG","NDG","NED","NG1","NG6","NGA","NGB","NGC","NGE","NGF","NGL","NGS","NGY","NHF","NM6","NM9","NTF","NTO","NTP","NXD","NYT","OPG","OPM","ORP","OX2","P3M","P53","P6P","PA5","PNA","PNG","PNW","PRP","PSJ","PSV","PTQ","QDK","QPS","QV4","R1P","R1X","R2B","R5P","RAA","RAE","RAF","RAM","RAO","RAT","RB5","RBL","RCD","RDP","REL","RER","RF5","RG1","RGG","RHA","RIB","RIP","RNS","RNT","ROB","ROR","RPA","RST","RUB","RUU","RZM","S6P","S7P","SA0","SCR","SDD","SF6","SF9","SG4","SG5","SG6","SG7","SGA","SGC","SGD","SGN","SGS","SHB","SHG","SI3","SIO","SOE","SOL","SSG","SUC","SUP","SUS","T6P","T6T","TAG","TCB","TDG","TGK","TGY","TH1","TIA","TM5","TM6","TM9","TMR","TMX","TOA","TOC","TRE","TYV","UCD","UDC","VG1","X0X","X1X","X2F","X4S","X5S","X6X","XBP","XDN","XDP","XIF","XIM","XLF","XLS","XMM","XUL","XXR","XYP","XYS","YO5","Z3Q","Z6J","Z9M","ZDC","ZDM"],gg=["CA","C","N","O","O1","O2","OC1","OC2","OX1","OXT","H","H1","H2","H3","HA","HN","BB"],vg=["P","OP1","OP2","O2'","O3'","O4'","O5'","C1'","C2'","C3'","C4'","C5'","O2*","O3*","O4*","O5*","C1*","C2*","C3*","C4*","C5*"],yg={};function bg(t){switch(t){case 0:return 0;case 1:return 1;case 2:return 2;case 3:return 3;case 4:return 4;default:return 8}}yg[1]={trace:"CA",direction1:"C",direction2:["O","OC1","O1","OX1","OXT"],backboneStart:"N",backboneEnd:"C"},yg[2]={trace:["C4'","C4*"],direction1:["C1'","C1*"],direction2:["C3'","C3*"],backboneStart:"P",backboneEnd:["O3'","O3*"]},yg[3]={trace:["C3'","C3*"],direction1:["C2'","C2*"],direction2:["O4'","O4*"],backboneStart:"P",backboneEnd:["O3'","O3*"]},yg[4]={trace:["CA","BB"],backboneStart:["CA","BB"],backboneEnd:["CA","BB"]},yg[5]={trace:["C4'","C4*","P"],backboneStart:["C4'","C4*","P"],backboneEnd:["C4'","C4*","P"]},yg[6]={trace:["C3'","C3*","C2'","P"],backboneStart:["C3'","C3*","C2'","P"],backboneEnd:["C3'","C3*","C2'","P"]},yg[$m]={};var xg=new Map([[2,Tl(180)],[3,Tl(120)],[4,Tl(109.4721)],[6,Tl(90)]]);function _g(e,t){var i=[],r=new Qe,n=new Qe;return r.subVectors(t,e),e.eachBondedAtom(function(t){1!==t.number&&(n.subVectors(t,e),i.push(r.angleTo(n)))}),i}function wg(e,t){var i=e.clone(),r=new Qe;r.subVectors(t,e);var n=[new Qe,new Qe],o=0;if(e.eachBondedAtom(function(t){1<o||1!==t.number&&(i.index=t.index,n[o++].subVectors(t,e))}),1===o&&i.eachBondedAtom(function(t){1<o||1!==t.number&&t.index!==e.index&&n[o++].subVectors(t,e)}),2===o){var a=n[0].cross(n[1]);return Math.abs(Math.PI/2-a.angleTo(r))}}function Sg(t,s){var e=t.structure,i=e.atomCount,c=new Int8Array(i),u=new Int8Array(i),h=new Int8Array(i),l=new Int8Array(i);return e.eachAtom(function(t){var e=t.index,i=function(r,t){var e,i=r.bondToElementCount(1),n=r.formalCharge||0,o="always"===t.assignCharge||"auto"===t.assignCharge&&0===n,a="always"===t.assignH||"auto"===t.assignH&&0===i,s=r.bondCount,c=(e=0,r.eachBond(function(t){return e+=t.bondOrder}),e),u=function(e){var r=e.structure.getBondProxy(),t=e.number,n=8===t||7===t;if(n&&4===e.bondCount)return!1;var o=!1;return e.eachBond(function(t){if(1<t.bondOrder)o=!0;else if(n){var i=t.getOtherAtom(e);i.eachBond(function(t){if(1<t.bondOrder){var e=i.number;if((15===e||16===e)&&8===t.getOtherAtom(i).number)return;o=!0}},r)}}),o}(r),h=0<c-s,l=0,p=8;switch(r.number){case 1:o&&(0===s?(n=1,p=0):1===s&&(n=0,p=1));break;case 6:o&&(n=0),a&&(l=Math.max(0,4-c-Math.abs(n))),p=bg(s+l+Math.max(0,-n));break;case 7:if(o)if(a)if(u&&c<4)n=s-i==1&&c-i==2?1:0;else{var d=!1;r.eachBondedAtom(function(t){(16===t.number||t.isMetal())&&(d=!0)}),n=d?0:1}else n=c-3;a&&(l=Math.max(0,3-c+n)),p=bg(u&&!h?s+l-n:s+l+1-n);break;case 8:o&&(a||(n=c-2),1===c&&r.eachBondedAtom(function(i){i.eachBond(function(t){var e=t.getOtherAtom(i);e.index!==r.index&&8===e.number&&2===t.bondOrder&&(n=-1)})})),a&&(l=Math.max(0,2-c+n)),p=bg(u&&!h?s+l-n+1:s+l-n+2);break;case 16:o&&(a||(n=c<=3&&!r.bondToElementCount(8)?c-2:0)),a&&c<2&&(l=Math.max(0,2-c+n)),c<=3&&(p=bg(s+l-n+2));break;case 9:case 17:case 35:case 53:case 85:o&&(n=c-1);break;case 3:case 11:case 19:case 37:case 55:case 87:o&&(n=1-c);break;case 4:case 12:case 20:case 38:case 56:case 88:o&&(n=2-c);break;default:console.warn("Requested charge, protonation for an unhandled element",r.element)}return[n,l,l+i,p]}(t,s),r=i[0],n=i[1],o=i[2],a=i[3];c[e]=r,u[e]=n,h[e]=o,l[e]=a}),{charge:c,implicitH:u,totalH:h,idealGeometry:l}}function Ag(t){if(t["@valenceModel"])return t["@valenceModel"];var e=Sg(t,{assignCharge:"auto",assignH:"auto"});return t["@valenceModel"]=e}function Mg(t){return 15===t.number&&t.bondToElementCount(8)===t.bondCount}var Pg=["ARG","HIS","LYS"],Eg=["GLU","ASP"];function Cg(t,e,i){void 0===i&&(i={});for(var f=al(i.maxIonicDist,Ng.maxIonicDist),r=al(i.maxPiStackingDist,Ng.maxPiStackingDist),m=al(i.maxPiStackingOffset,Ng.maxPiStackingOffset),g=al(i.maxPiStackingAngle,Ng.maxPiStackingAngle),n=al(i.maxCationPiDist,Ng.maxCationPiDist),v=al(i.maxCationPiOffset,Ng.maxCationPiOffset),y=al(i.masterModelIndex,Ng.masterModelIndex),o=Math.max(f+2,r,n),b=r*r,x=n*n,a=e.features,s=e.spatialHash,c=e.contactStore,u=e.featureSet,_=a.types,h=a.centers,w=a.atomSets,l=h.x,p=h.y,S=h.z,d=_.length,A=t.atomStore.x,M=t.atomStore.y,P=t.atomStore.z,E=t.getAtomProxy(),C=t.getAtomProxy(),T=new Qe,I=new Qe,R=new Qe,L=new Qe,O=new Qe,D=new Qe,k=new Qe,B=function(t,e){T.set(A[t[0]],M[t[0]],P[t[0]]),I.set(A[t[1]],M[t[1]],P[t[1]]),R.set(A[t[2]],M[t[2]],P[t[2]]),L.subVectors(T,I),O.subVectors(T,R),e.crossVectors(L,O)},N=function(t,e,i){return T.set(l[t],p[t],S[t]),I.set(l[e],p[e],S[e]),T.sub(I).projectOnPlane(i).add(I).distanceTo(I)},F=function(t,e,i){u.setBits(t,e),c.addContact(t,e,i)},z=function(d){s.eachWithin(l[d],p[d],S[d],o,function(t,e){if(!(t<=d||(E.index=w[d][0],C.index=w[t][0],zg(E,C,y)))){var i,r,n,o,a,s=_[d],c=_[t];if(a=c,2===(o=s)&&1===a||1===o&&2===a)(function(t,e,i){for(var r=t.length,n=e.length,o=0;o<r;++o){E.index=t[o];for(var a=0;a<n;++a)if(C.index=e[a],E.distanceTo(C)<=i)return!0}return!1})(w[d],w[t],f)&&F(d,t,1);else if(n=c,3===s&&3===n){if(e<=b){B(w[d],D),B(w[t],k);var u=57.29578*D.angleTo(k);Math.min(N(d,t,k),N(t,d,D))<=m&&(u<=g||180-g<=u?F(d,t,3):u<=g+90&&90-g<=u&&F(d,t,3))}}else if(r=c,(3===(i=s)&&1===r||1===i&&3===r)&&e<=x){var h=3===s?[d,t]:[t,d],l=h[0],p=h[1];B(w[l],D),N(p,l,D)<=v&&F(l,p,2)}}})},U=0;U<d;++U)z(U)}function Tg(t){return"HIS"===t.resname&&7==t.number&&t.isRing()}var Ig=[3,11,19,37,55,12,20,38,56,13,31,49,81,21,50,82,83,51,80];var Rg=[17,35,53,85];var Lg=[7,8,16],Og=[6,7,15,16];var Dg=Tl(180),kg=Tl(120);function Bg(t,e,i){return!Fg(t,e,i)&&(t.modelIndex!==e.modelIndex||t.altloc&&e.altloc&&t.altloc!==e.altloc)}var Ng={maxHydrophobicDist:4,maxHbondDist:3.5,maxHbondSulfurDist:4.1,maxHbondAccAngle:45,maxHbondDonAngle:45,maxHbondAccPlaneAngle:90,maxHbondDonPlaneAngle:30,maxPiStackingDist:5.5,maxPiStackingOffset:2,maxPiStackingAngle:30,maxCationPiDist:6,maxCationPiOffset:2,maxIonicDist:5,maxHalogenBondDist:4,maxHalogenBondAngle:30,maxMetalDist:3,refineSaltBridges:!0,masterModelIndex:-1,lineOfSightDistFactor:1};function Fg(t,e,i){return t.modelIndex===i&&e.modelIndex!==i||e.modelIndex===i&&t.modelIndex!==i}function zg(t,e,i){return!Fg(t,e,i)&&(t.modelIndex!==e.modelIndex||t.residueIndex===e.residueIndex||t.altloc&&e.altloc&&t.altloc!==e.altloc)}function Ug(t){var e,s,i,c,r,u,n,h,o,a,l,p,d,f,m,g,v,y,b,x,_,w,S,A,M,P,E,C,T={types:[],groups:[],centers:{x:[],y:[],z:[]},atomSets:[]};return de.Debug&&Bp.time("calculateFeatures"),s=T,i=Ag((e=t).data).charge,c={},e.eachResidue(function(t){if(Pg.includes(t.resname)){var e=Gm(1);t.eachAtom(function(t){7===t.number&&t.isSidechain()&&Vm(e,t)}),Hm(s,e)}else cg.includes(t.resname)||t.isNucleic()||(t.eachAtom(function(t){var e,i,r,n,o=!1,a=Gm(1);n=0,6===(r=t).number&&3===r.bondCount&&3===r.bondToElementCount(7)&&r.eachBondedAtom(function(t){t.bondCount-t.bondToElementCount(1)==1&&++n}),2===n?(a.group=8,o=!0):(i=0,6===(e=t).number&&3===e.bondCount&&2===e.bondToElementCount(7)&&1===e.bondToElementCount(6)&&e.eachBondedAtom(function(t){t.bondCount-t.bondToElementCount(1)==1&&++i}),2===i&&(a.group=9,o=!0)),o&&(t.eachBondedAtom(function(t){7===t.number&&(c[t.index]=!0,Vm(a,t))}),Hm(s,a))}),t.eachAtom(function(t){var e=Gm(1);0<i[t.index]&&(c[t.index]||(Vm(e,t),Hm(s,e)))}))}),u=T,n=Ag((r=t).data).charge,h={},r.eachResidue(function(t){if(Eg.includes(t.resname)){var e=Gm(2);t.eachAtom(function(t){8===t.number&&t.isSidechain()&&Vm(e,t)}),Hm(u,e)}else if(pg.includes(t.resname)){var i=Gm(2);t.eachAtom(function(t){Mg(t)&&(i.group=6,t.eachBondedAtom(function(t){8===t.number&&Vm(i,t)}),Hm(u,i))})}else cg.includes(t.resname)||pg.includes(t.resname)||(t.eachAtom(function(t){var e,i,r,n,o=!1,a=Gm(2);16===(n=t).number&&3===n.bondToElementCount(8)?(a.group=4,o=!0):Mg(t)?(a.group=6,o=!0):16===(r=t).number&&4===r.bondToElementCount(8)?(a.group=5,o=!0):(i=0,6===(e=t).number&&2===e.bondToElementCount(8)&&1===e.bondToElementCount(6)&&e.eachBondedAtom(function(t){8===t.number&&t.bondCount-t.bondToElementCount(1)==1&&++i}),2===i&&(a.group=10,o=!0)),o&&(t.eachBondedAtom(function(t){8===t.number&&(h[t.index]=!0,Vm(a,t))}),Hm(u,a))}),t.eachAtom(function(t){var e=Gm(2);n[t.index]<0&&(h[t.index]||(Vm(e,t),Hm(u,e)))}))}),a=T,l=(o=t).getAtomProxy(),o.eachResidue(function(t){var e=t.getAromaticRings();if(e){var i=t.atomOffset;e.forEach(function(t){var e=Gm(3);t.forEach(function(t){l.index=t+i,Vm(e,l)}),Hm(a,e)})}}),d=T,f=Ag((p=t).data),m=f.charge,g=f.implicitH,v=f.idealGeometry,p.eachAtom(function(t){var e=Gm(5),i=t.number;if(8===i)Vm(e,t),Hm(d,e);else if(7===i){if(Tg(t))Vm(e,t),Hm(d,e);else if(m[t.index]<1){var r=t.bondCount+g[t.index],n=v[t.index];(4===n&&r<4||3===n&&r<3||2===n&&r<2)&&(Vm(e,t),Hm(d,e))}}else 16===i&&("CYS"!==t.resname&&"MET"!==t.resname&&-1!==t.formalCharge||(Vm(e,t),Hm(d,e)))}),b=T,x=Ag((y=t).data).totalH,y.eachAtom(function(t){var e=Gm(4),i=t.number;Tg(t)?(Vm(e,t),Hm(b,e)):0<x[t.index]&&(7===i||8===i||16===i)&&(Vm(e,t),Hm(b,e))}),w=T,S=Ag((_=t).data).totalH,_.eachAtom(function(t){if(6===t.number&&0<S[t.index]&&(0<t.bondToElementCount(7)||0<t.bondToElementCount(8)||function(r){if(!r.isAromatic())return!1;var t=r.residueType.getRings();if(!t)return!1;var e=!1;return t.rings.forEach(function(t){e||t.some(function(t){return r.index-r.residueAtomOffset===t})&&(e=t.some(function(t){var e=r.residueType.atomTypeIdList[t],i=r.atomMap.get(e).number;return 7===i||8===i}))}),e}(t))){var e=Gm(9);Vm(e,t),Hm(w,e)}}),A=T,t.eachAtom(function(t){var e=!1,i=!1,r=cg.includes(t.resname),n=pg.includes(t.resname);if(r||n?r?8===t.number?["ASP","GLU","SER","THR","TYR","ASN","GLN"].includes(t.resname)&&t.isSidechain()?i=e=!0:t.isBackbone()&&(i=e=!0):16===t.number&&"CYS"===t.resname?i=e=!0:7===t.number&&"HIS"===t.resname&&t.isSidechain()&&(e=!0):n&&(8===t.number&&t.isBackbone()?i=e=!0:["N3","N4","N7"].includes(t.atomname)?e=!0:["O2","O4","O6"].includes(t.atomname)&&(i=e=!0)):t.isHalogen()||8===t.number||16===t.number?i=e=!0:7===t.number&&(e=!0),e){var o=Gm(11);Vm(o,t),Hm(A,o)}if(i){var a=Gm(10);Vm(a,t),Hm(A,a)}}),M=T,t.eachAtom(function(t){if(t.isTransitionMetal()||30===t.number||48===t.number){var e=Gm(12);Vm(e,t),Hm(M,e)}else if(Ig.includes(t.number)){var i=Gm(13);Vm(i,t),Hm(M,i)}}),P=T,t.eachAtom(function(t){var e=Gm(8),i=!1;6===t.number?(i=!0,t.eachBondedAtom(function(t){var e=t.number;6!==e&&1!==e&&(i=!1)})):9===t.number&&(i=!0),i&&(Vm(e,t),Hm(P,e))}),E=T,t.eachAtom(function(t){if(Lg.includes(t.number)){var e=!1;if(t.eachBondedAtom(function(t){Og.includes(t.number)&&(e=!0)}),e){var i=Gm(7);Vm(i,t),Hm(E,i)}}}),C=T,t.eachAtom(function(t){if(Rg.includes(t.number)&&1===t.bondToElementCount(6)){var e=Gm(6);Vm(e,t),Hm(C,e)}}),de.Debug&&Bp.timeEnd("calculateFeatures"),T}function jg(t,e){void 0===e&&(e=Ng);var i,r,n,o=Ug(t),a=(r=(i=o).types,n=i.centers,{features:i,spatialHash:new Bm(n),contactStore:new Fm,featureSet:new Um(r.length,!1)});de.Debug&&Bp.time("calculateContacts"),Cg(t,a,e),function(t,e,i){void 0===i&&(i={});for(var r=al(i.maxHbondDist,Ng.maxHbondDist),n=al(i.maxHbondSulfurDist,Ng.maxHbondSulfurDist),A=Tl(al(i.maxHbondAccAngle,Ng.maxHbondAccAngle)),M=Tl(al(i.maxHbondDonAngle,Ng.maxHbondDonAngle)),P=Tl(al(i.maxHbondAccPlaneAngle,Ng.maxHbondAccPlaneAngle)),E=Tl(al(i.maxHbondDonPlaneAngle,Ng.maxHbondDonPlaneAngle)),C=al(i.masterModelIndex,Ng.masterModelIndex),o=Math.max(r,n),T=r*r,a=e.features,s=e.spatialHash,I=e.contactStore,R=e.featureSet,L=a.types,c=a.centers,O=a.atomSets,u=c.x,h=c.y,l=c.z,p=L.length,D=Ag(t.data).idealGeometry,k=t.getAtomProxy(),B=t.getAtomProxy(),d=function(S){s.eachWithin(u[S],h[S],l[S],o,function(t,e){if(!(t<=S)){var i,r,n=L[S],o=L[t],a=(r=o,9===(i=n)&&5===r||5===i&&9===r);if(a||(c=o,5===(s=n)&&4===c||4===s&&5===c)){var s,c,u=5===o?[S,t]:[t,S],h=u[0],l=u[1];if(k.index=O[h][0],B.index=O[l][0],!zg(k,B,C)&&!(16!==k.number&&16!==B.number&&T<e||k.connectedTo(B))){var p=_g(k,B),d=xg.get(D[k.index])||Tl(120);if(!p.some(function(t){return Math.abs(d-t)>M})){if(3===D[k.index]){var f=wg(k,B);if(void 0!==f&&E<f)return}var m=_g(B,k),g=xg.get(D[B.index])||Tl(120);if(!m.some(function(t){return A<g-t})){if(3===D[B.index]){var v=wg(B,k);if(void 0!==v&&P<v)return}R.setBits(h,l);var y,b,x,_,w=a?8:(_=b=B,(y=k).isWater()&&_.isWater()?9:(x=b,y.isBackbone()&&x.isBackbone()?10:4));I.addContact(h,l,w)}}}}}})},f=0;f<p;++f)d(f)}(t,a,e),function(t,e,i){void 0===i&&(i={});for(var r=al(i.maxMetalDist,Ng.maxMetalDist),c=al(i.masterModelIndex,Ng.masterModelIndex),n=e.features,o=e.spatialHash,u=e.contactStore,h=e.featureSet,l=n.types,a=n.centers,p=n.atomSets,d=a.x,f=a.y,m=a.z,s=l.length,g=t.getAtomProxy(),v=t.getAtomProxy(),y=function(s){o.eachWithin(d[s],f[s],m[s],r,function(t,e){if(!(t<=s||(g.index=p[s][0],v.index=p[t][0],zg(g,v,c)))){var i=g.isMetal(),r=v.isMetal();if(i||r){var n,o,a=i?[l[s],l[t]]:[l[t],l[s]];o=a[1],(12===(n=a[0])?11===o||12===o:13===n?10===o:void 0)&&(h.setBits(s,t),u.addContact(s,t,7))}}})},b=0;b<s;++b)y(b)}(t,a,e),function(t,e,i){void 0===i&&(i={});for(var r=al(i.maxHydrophobicDist,Ng.maxHydrophobicDist),o=al(i.masterModelIndex,Ng.masterModelIndex),n=e.features,a=e.spatialHash,s=e.contactStore,c=e.featureSet,u=n.types,h=n.centers,l=n.atomSets,p=h.x,d=h.y,f=h.z,m=u.length,g=t.getAtomProxy(),v=t.getAtomProxy(),y=function(n){a.eachWithin(p[n],d[n],f[n],r,function(t,e){var i,r;t<=n||(g.index=l[n][0],v.index=l[t][0],zg(g,v,o)||9===g.number&&9===v.number||g.connectedTo(v)||(i=u[n],r=u[t],8===i&&8===r&&(c.setBits(n,t),s.addContact(n,t,6))))})},b=0;b<m;++b)y(b)}(t,a,e),function(t,e,i){void 0===i&&(i={});for(var r=al(i.maxHalogenBondDist,Ng.maxHalogenBondDist),h=Tl(al(i.maxHalogenBondAngle,Ng.maxHalogenBondAngle)),l=al(i.masterModelIndex,Ng.masterModelIndex),n=e.features,o=e.spatialHash,p=e.contactStore,d=e.featureSet,f=n.types,a=n.centers,m=n.atomSets,s=a.x,c=a.y,g=a.z,u=f.length,v=t.getAtomProxy(),y=t.getAtomProxy(),b=function(u){o.eachWithin(s[u],c[u],g[u],r,function(t,e){if(!(t<=u)&&(v.index=m[u][0],y.index=m[t][0],!zg(v,y,l)&&(i=f[u],r=f[t],7===i&&6===r||6===i&&7===r))){var i,r,n=6===f[u]?[v,y]:[y,v],o=n[0],a=n[1],s=_g(o,a);if(1===s.length&&!(Dg-s[0]>h)){var c=_g(a,o);0!==c.length&&(c.some(function(t){return h<kg-t})||(d.setBits(u,t),p.addContact(u,t,5)))}}})},x=0;x<u;++x)b(x)}(t,a,e);var s,c,u,h,l,p,d,f,m,g,v,y,b,x,_,w,S,A,M,P,E,C,T,I,R,L,O,D,k,B,N,F,z,U,j,G,V,H,$,W,X,q,Y,Z,K,J,Q,tt=(c=(s=a).contactStore,u=jm({nodeArray1:c.index1,nodeArray2:c.index2,edgeCount:c.count,nodeCount:s.featureSet.length}),h=new Um(s.contactStore.count,!0),Object.assign({adjacencyList:u,contactSet:h},s));return function(t,e,i){void 0===i&&(i={}),de.Debug&&Bp.time("refineLineOfSight");var r=al(i.lineOfSightDistFactor,Ng.lineOfSightDistFactor),a=al(i.masterModelIndex,Ng.masterModelIndex),s=t.spatialHash,c=e.contactSet,n=e.contactStore,o=e.features,u=n.index1,h=n.index2,l=o.centers,p=o.atomSets,d=l.x,f=l.y,m=l.z,g=t.getAtomProxy(),v=t.getAtomProxy(),y=t.getAtomProxy(),b=new Qe,x=new Qe,_=3*r,w=r*r;c.forEach(function(i){b.set(d[u[i]],f[u[i]],m[u[i]]),x.set(d[h[i]],f[h[i]],m[h[i]]);var t=(b.x+x.x)/2,e=(b.y+x.y)/2,r=(b.z+x.z)/2,n=p[u[i]],o=p[h[i]];g.index=n[0],v.index=o[0],s.eachWithin(t,e,r,_,function(t,e){y.index=t,1!==y.number&&y.vdw*y.vdw*w>e&&!Bg(g,y,a)&&!Bg(v,y,a)&&!n.includes(t)&&!o.includes(t)&&1<b.distanceToSquared(y)&&1<x.distanceToSquared(y)&&(c.clear(i),de.Debug&&Bp.log("removing",g.qualifiedName(),v.qualifiedName(),"because",y.qualifiedName()))})}),de.Debug&&Bp.timeEnd("refineLineOfSight")}(t,tt,e),l=t,d=(p=tt).contactSet,f=p.contactStore,m=p.features,g=f.type,v=f.index1,y=f.index2,b=m.atomSets,x=l.getAtomProxy(),_=l.getAtomProxy(),w={},S=function(t,e,i){var r=w[i]||[1/0,-1],n=r[0],o=r[1];t<n?(-1!==o&&d.clear(o),w[i]=[t,e]):d.clear(e)},d.forEach(function(t){if(6===g[t]){x.index=b[v[t]][0],_.index=b[y[t]][0];var e=x.distanceTo(_);S(e,t,x.index+"|"+_.residueIndex),S(e,t,_.index+"|"+x.residueIndex)}}),e.refineSaltBridges&&(M=(A=tt).contactSet,P=A.contactStore,E=A.features,C=P.type,T=P.index1,I=P.index2,R=E.atomSets,L={},O=function(t,e){L[t]||(L[t]=[]),L[t].push(e)},M.forEach(function(e){1===C[e]&&(R[T[e]].forEach(function(t){return O(t,e)}),R[I[e]].forEach(function(t){return O(t,e)}))}),M.forEach(function(t){if(4===(e=C[t])||9===e||10===e){var e,i=L[R[T[t]][0]],r=L[R[I[t]][0]];if(i&&r)for(var n=i.length,o=0;o<n;++o)if(r.includes(i[o]))return void M.clear(t)}})),k=(D=tt).contactSet,B=D.contactStore,N=D.features,F=B.type,z=B.index1,U=B.index2,j=N.atomSets,G={},V=function(t,e){G[t]||(G[t]=[]),G[t].push(e)},k.forEach(function(e){3===F[e]&&(j[z[e]].forEach(function(t){return V(t,e)}),j[U[e]].forEach(function(t){return V(t,e)}))}),k.forEach(function(t){if(6===F[t]||2===F[t]){var e=G[j[z[t]][0]],i=G[j[U[t]][0]];if(e&&i)for(var r=e.length,n=0;n<r;++n)if(i.includes(e[n]))return void k.clear(t)}}),$=(H=tt).contactSet,W=H.contactStore,X=H.features,q=W.type,Y=W.index1,Z=W.index2,K=X.atomSets,J={},Q=function(t,e){J[t]||(J[t]=[]),J[t].push(e)},$.forEach(function(e){1===q[e]&&(K[Y[e]].forEach(function(t){return Q(t,e)}),K[Z[e]].forEach(function(t){return Q(t,e)}))}),$.forEach(function(t){if(7===q[t]){var e=J[K[Y[t]][0]],i=J[K[Z[t]][0]];if(e&&i)for(var r=e.length,n=0;n<r;++n)if(i.includes(e[n]))return void $.clear(e[n])}}),de.Debug&&Bp.timeEnd("calculateContacts"),tt}var Gg={hydrogenBond:!0,hydrophobic:!0,halogenBond:!0,ionicInteraction:!0,metalCoordination:!0,cationPi:!0,piStacking:!0,weakHydrogenBond:!0,waterHydrogenBond:!0,backboneHydrogenBond:!0,radius:1,filterSele:""},Vg=new Li;function Hg(t,e,i){var a=sl(i,Gg),s=[];a.hydrogenBond&&s.push(4),a.hydrophobic&&s.push(6),a.halogenBond&&s.push(5),a.ionicInteraction&&s.push(1),a.metalCoordination&&s.push(7),a.cationPi&&s.push(2),a.piStacking&&s.push(3),a.weakHydrogenBond&&s.push(8),a.waterHydrogenBond&&s.push(9),a.backboneHydrogenBond&&s.push(10);var c,r=t.features,n=t.contactSet,o=t.contactStore,u=r.centers,h=r.atomSets,l=u.x,p=u.y,d=u.z,f=o.index1,m=o.index2,g=o.type,v=[],y=[],b=[],x=[],_=[];return a.filterSele&&(c=Array.isArray(a.filterSele)?a.filterSele.map(function(t){return e.getAtomSet(new bp(t))}):e.getAtomSet(new bp(a.filterSele))),n.forEach(function(t){var e=g[t];if(s.includes(e)){if(c){var i=h[f[t]][0],r=h[m[t]][0];if(Array.isArray(c)){if(!(c[0].isSet(i)&&c[1].isSet(r)||c[1].isSet(i)&&c[0].isSet(r)))return}else if(!c.isSet(i)&&!c.isSet(r))return}var n=f[t],o=m[t];v.push(l[n],p[n],d[n]),y.push(l[o],p[o],d[o]),b.push.apply(b,function(t){switch(t){case 4:case 9:case 10:return Vg.setHex(2851770).toArray();case 6:return Vg.setHex(8421504).toArray();case 5:return Vg.setHex(4259775).toArray();case 1:return Vg.setHex(15779860).toArray();case 7:return Vg.setHex(9191577).toArray();case 2:return Vg.setHex(16744448).toArray();case 3:return Vg.setHex(9220966).toArray();case 8:return Vg.setHex(12967404).toArray();default:return Vg.setHex(13421772).toArray()}}(e)),x.push(a.radius),_.push(t)}}),{position1:new Float32Array(v),position2:new Float32Array(y),color:new Float32Array(b),radius:new Float32Array(x),picking:new Qg(_,t,e)}}var $g=function(t){this.array=t},Wg={type:{configurable:!0},data:{configurable:!0}};Wg.type.get=function(){return""},Wg.data.get=function(){return{}},$g.prototype.getIndex=function(t){return this.array?this.array[t]:t},$g.prototype.getObject=function(t){return{}},$g.prototype._applyTransformations=function(t,e,i){return e&&t.applyMatrix4(e.matrix),i&&t.applyMatrix4(i.matrix),t},$g.prototype._getPosition=function(){return new Qe},$g.prototype.getPosition=function(t,e,i){return this._applyTransformations(this._getPosition(t),e,i)},Object.defineProperties($g.prototype,Wg);var Xg=function(e){function t(t){e.call(this),this.shape=t}e&&(t.__proto__=e),(t.prototype=Object.create(e&&e.prototype)).constructor=t;var i={primitive:{configurable:!0},data:{configurable:!0},type:{configurable:!0}};return i.primitive.get=function(){},i.data.get=function(){return this.shape},i.type.get=function(){return this.primitive.type},t.prototype.getObject=function(t){return this.primitive.objectFromShape(this.shape,this.getIndex(t))},t.prototype._getPosition=function(t){return this.primitive.positionFromShape(this.shape,this.getIndex(t))},Object.defineProperties(t.prototype,i),t}($g),qg=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e;var i={primitive:{configurable:!0}};return i.primitive.get=function(){return Cm},Object.defineProperties(e.prototype,i),e}(Xg),Yg=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e;var i={primitive:{configurable:!0}};return i.primitive.get=function(){return Tm},Object.defineProperties(e.prototype,i),e}(Xg),Zg=function(i){function t(t,e){i.call(this,t),this.structure=e}i&&(t.__proto__=i),(t.prototype=Object.create(i&&i.prototype)).constructor=t;var e={type:{configurable:!0},data:{configurable:!0}};return e.type.get=function(){return"atom"},e.data.get=function(){return this.structure},t.prototype.getObject=function(t){return this.structure.getAtomProxy(this.getIndex(t))},t.prototype._getPosition=function(t){return(new Qe).copy(this.getObject(t))},Object.defineProperties(t.prototype,e),t}($g),Kg=function(e){function t(t){e.call(this),this.axes=t}e&&(t.__proto__=e),(t.prototype=Object.create(e&&e.prototype)).constructor=t;var i={type:{configurable:!0},data:{configurable:!0}};return i.type.get=function(){return"axes"},i.data.get=function(){return this.axes},t.prototype.getObject=function(){return{axes:this.axes}},t.prototype._getPosition=function(){return this.axes.center.clone()},Object.defineProperties(t.prototype,i),t}($g),Jg=function(r){function t(t,e,i){r.call(this,t),this.structure=e,this.bondStore=i||e.bondStore}r&&(t.__proto__=r),(t.prototype=Object.create(r&&r.prototype)).constructor=t;var e={type:{configurable:!0},data:{configurable:!0}};return e.type.get=function(){return"bond"},e.data.get=function(){return this.structure},t.prototype.getObject=function(t){var e=this.structure.getBondProxy(this.getIndex(t));return e.bondStore=this.bondStore,e},t.prototype._getPosition=function(t){var e=this.getObject(t);return(new Qe).copy(e.atom1).add(e.atom2).multiplyScalar(.5)},Object.defineProperties(t.prototype,e),t}($g),Qg=function(r){function t(t,e,i){r.call(this,t),this.contacts=e,this.structure=i}r&&(t.__proto__=r),(t.prototype=Object.create(r&&r.prototype)).constructor=t;var e={type:{configurable:!0},data:{configurable:!0}};return e.type.get=function(){return"contact"},e.data.get=function(){return this.contacts},t.prototype.getObject=function(t){var e=this.getIndex(t),i=this.contacts,r=i.features,n=i.contactStore,o=r.centers,a=r.atomSets,s=o.x,c=o.y,u=o.z,h=n.index1,l=n.index2,p=n.type,d=h[e],f=l[e];return{center1:new Qe(s[d],c[d],u[d]),center2:new Qe(s[f],c[f],u[f]),atom1:this.structure.getAtomProxy(a[d][0]),atom2:this.structure.getAtomProxy(a[f][0]),type:function(t){switch(t){case 4:case 9:case 10:return"hydrogen bond";case 6:return"hydrophobic contact";case 5:return"halogen bond";case 1:return"ionic interaction";case 7:return"metal coordination";case 2:return"cation-pi interaction";case 3:return"pi-pi stacking";case 8:return"weak hydrogen bond";default:return"unknown contact"}}(p[e])}},t.prototype._getPosition=function(t){var e=this.getObject(t),i=e.center1,r=e.center2;return(new Qe).addVectors(i,r).multiplyScalar(.5)},Object.defineProperties(t.prototype,e),t}($g),tv=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e;var i={primitive:{configurable:!0}};return i.primitive.get=function(){return Im},Object.defineProperties(e.prototype,i),e}(Xg),ev=function(r){function t(t,e,i){r.call(this,t),this.validation=e,this.structure=i}r&&(t.__proto__=r),(t.prototype=Object.create(r&&r.prototype)).constructor=t;var e={type:{configurable:!0},data:{configurable:!0}};return e.type.get=function(){return"clash"},e.data.get=function(){return this.validation},t.prototype.getObject=function(t){var e=this.validation,i=this.getIndex(t);return{validation:e,index:i,clash:e.clashArray[i]}},t.prototype._getAtomProxyFromSele=function(t){var e=new bp(t),i=this.structure.getAtomIndices(e)[0];return this.structure.getAtomProxy(i)},t.prototype._getPosition=function(t){var e=this.getObject(t).clash,i=this._getAtomProxyFromSele(e.sele1),r=this._getAtomProxyFromSele(e.sele2);return(new Qe).copy(i).add(r).multiplyScalar(.5)},Object.defineProperties(t.prototype,e),t}($g),iv=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e;var i={type:{configurable:!0}};return i.type.get=function(){return"distance"},Object.defineProperties(e.prototype,i),e}(Jg),rv=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e;var i={primitive:{configurable:!0}};return i.primitive.get=function(){return Rm},Object.defineProperties(e.prototype,i),e}(Xg),nv=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e;var i={primitive:{configurable:!0}};return i.primitive.get=function(){return Pm},Object.defineProperties(e.prototype,i),e}(Xg),ov=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e;var i={primitive:{configurable:!0}};return i.primitive.get=function(){return Mm},Object.defineProperties(e.prototype,i),e}(Xg),av=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e;var i={type:{configurable:!0}};return i.type.get=function(){return"ignore"},Object.defineProperties(e.prototype,i),e}($g),sv=function(i){function t(t,e){i.call(this,t),this.mesh=e}i&&(t.__proto__=i),(t.prototype=Object.create(i&&i.prototype)).constructor=t;var e={type:{configurable:!0}};return e.type.get=function(){return"mesh"},t.prototype.getObject=function(){var t=this.mesh;return{shape:this.shape,name:t.name,serial:t.serial}},t.prototype._getPosition=function(){return this.__position||(this.__position=Zf(this.mesh.position)),this.__position},Object.defineProperties(t.prototype,e),t}(Xg),cv=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e;var i={primitive:{configurable:!0}};return i.primitive.get=function(){return Am},Object.defineProperties(e.prototype,i),e}(Xg),uv=function(i){function t(t,e){i.call(this,t),this.surface=e}i&&(t.__proto__=i),(t.prototype=Object.create(i&&i.prototype)).constructor=t;var e={type:{configurable:!0},data:{configurable:!0}};return e.type.get=function(){return"surface"},e.data.get=function(){return this.surface},t.prototype.getObject=function(t){return{surface:this.surface,index:this.getIndex(t)}},t.prototype._getPosition=function(){return this.surface.center.clone()},Object.defineProperties(t.prototype,e),t}($g),hv=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e;var i={primitive:{configurable:!0}};return i.primitive.get=function(){return Em},Object.defineProperties(e.prototype,i),e}(Xg),lv=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e;var i={primitive:{configurable:!0}};return i.primitive.get=function(){return Lm},Object.defineProperties(e.prototype,i),e}(Xg),pv=function(i){function t(t,e){i.call(this),this.unitcell=t,this.structure=e}i&&(t.__proto__=i),(t.prototype=Object.create(i&&i.prototype)).constructor=t;var e={type:{configurable:!0},data:{configurable:!0}};return e.type.get=function(){return"unitcell"},e.data.get=function(){return this.unitcell},t.prototype.getObject=function(){return{unitcell:this.unitcell,structure:this.structure}},t.prototype._getPosition=function(){return this.unitcell.getCenter(this.structure)},Object.defineProperties(t.prototype,e),t}($g),dv=(function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e;var i={type:{configurable:!0}};i.type.get=function(){return"unknown"},Object.defineProperties(e.prototype,i)}($g),function(i){function t(t,e){i.call(this,t),this.volume=e}i&&(t.__proto__=i),(t.prototype=Object.create(i&&i.prototype)).constructor=t;var e={type:{configurable:!0},data:{configurable:!0}};return e.type.get=function(){return"volume"},e.data.get=function(){return this.volume},t.prototype.getObject=function(t){var e=this.volume,i=this.getIndex(t);return{volume:e,index:i,value:e.data[i]}},t.prototype._getPosition=function(t){var e=this.volume.position,i=this.getIndex(t);return new Qe(e[3*i],e[3*i+1],e[3*i+2])},Object.defineProperties(t.prototype,e),t}($g)),fv=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e;var i={type:{configurable:!0}};return i.type.get=function(){return"slice"},Object.defineProperties(e.prototype,i),e}(dv),mv=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e;var i={primitive:{configurable:!0}};return i.primitive.get=function(){return Dm},Object.defineProperties(e.prototype,i),e}(Xg),gv=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e;var i={primitive:{configurable:!0}};return i.primitive.get=function(){return km},Object.defineProperties(e.prototype,i),e}(Xg);function vv(){return new Uint32Array([0,265,515,778,1030,1295,1541,1804,2060,2309,2575,2822,3082,3331,3593,3840,400,153,915,666,1430,1183,1941,1692,2460,2197,2975,2710,3482,3219,3993,3728,560,825,51,314,1590,1855,1077,1340,2620,2869,2111,2358,3642,3891,3129,3376,928,681,419,170,1958,1711,1445,1196,2988,2725,2479,2214,4010,3747,3497,3232,1120,1385,1635,1898,102,367,613,876,3180,3429,3695,3942,2154,2403,2665,2912,1520,1273,2035,1786,502,255,1013,764,3580,3317,4095,3830,2554,2291,3065,2800,1616,1881,1107,1370,598,863,85,348,3676,3925,3167,3414,2650,2899,2137,2384,1984,1737,1475,1226,966,719,453,204,4044,3781,3535,3270,3018,2755,2505,2240,2240,2505,2755,3018,3270,3535,3781,4044,204,453,719,966,1226,1475,1737,1984,2384,2137,2899,2650,3414,3167,3925,3676,348,85,863,598,1370,1107,1881,1616,2800,3065,2291,2554,3830,4095,3317,3580,764,1013,255,502,1786,2035,1273,1520,2912,2665,2403,2154,3942,3695,3429,3180,876,613,367,102,1898,1635,1385,1120,3232,3497,3747,4010,2214,2479,2725,2988,1196,1445,1711,1958,170,419,681,928,3376,3129,3891,3642,2358,2111,2869,2620,1340,1077,1855,1590,314,51,825,560,3728,3993,3219,3482,2710,2975,2197,2460,1692,1941,1183,1430,666,915,153,400,3840,3593,3331,3082,2822,2575,2309,2060,1804,1541,1295,1030,778,515,265,0])}function yv(){return new Int32Array([-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,8,3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,1,9,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,8,3,9,8,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,2,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,8,3,1,2,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,9,2,10,0,2,9,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,8,3,2,10,8,10,9,8,-1,-1,-1,-1,-1,-1,-1,3,11,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,11,2,8,11,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,9,0,2,3,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,11,2,1,9,11,9,8,11,-1,-1,-1,-1,-1,-1,-1,3,10,1,11,10,3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,10,1,0,8,10,8,11,10,-1,-1,-1,-1,-1,-1,-1,3,9,0,3,11,9,11,10,9,-1,-1,-1,-1,-1,-1,-1,9,8,10,10,8,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,7,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,3,0,7,3,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,1,9,8,4,7,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,1,9,4,7,1,7,3,1,-1,-1,-1,-1,-1,-1,-1,1,2,10,8,4,7,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3,4,7,3,0,4,1,2,10,-1,-1,-1,-1,-1,-1,-1,9,2,10,9,0,2,8,4,7,-1,-1,-1,-1,-1,-1,-1,2,10,9,2,9,7,2,7,3,7,9,4,-1,-1,-1,-1,8,4,7,3,11,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,11,4,7,11,2,4,2,0,4,-1,-1,-1,-1,-1,-1,-1,9,0,1,8,4,7,2,3,11,-1,-1,-1,-1,-1,-1,-1,4,7,11,9,4,11,9,11,2,9,2,1,-1,-1,-1,-1,3,10,1,3,11,10,7,8,4,-1,-1,-1,-1,-1,-1,-1,1,11,10,1,4,11,1,0,4,7,11,4,-1,-1,-1,-1,4,7,8,9,0,11,9,11,10,11,0,3,-1,-1,-1,-1,4,7,11,4,11,9,9,11,10,-1,-1,-1,-1,-1,-1,-1,9,5,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,9,5,4,0,8,3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,5,4,1,5,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,5,4,8,3,5,3,1,5,-1,-1,-1,-1,-1,-1,-1,1,2,10,9,5,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3,0,8,1,2,10,4,9,5,-1,-1,-1,-1,-1,-1,-1,5,2,10,5,4,2,4,0,2,-1,-1,-1,-1,-1,-1,-1,2,10,5,3,2,5,3,5,4,3,4,8,-1,-1,-1,-1,9,5,4,2,3,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,11,2,0,8,11,4,9,5,-1,-1,-1,-1,-1,-1,-1,0,5,4,0,1,5,2,3,11,-1,-1,-1,-1,-1,-1,-1,2,1,5,2,5,8,2,8,11,4,8,5,-1,-1,-1,-1,10,3,11,10,1,3,9,5,4,-1,-1,-1,-1,-1,-1,-1,4,9,5,0,8,1,8,10,1,8,11,10,-1,-1,-1,-1,5,4,0,5,0,11,5,11,10,11,0,3,-1,-1,-1,-1,5,4,8,5,8,10,10,8,11,-1,-1,-1,-1,-1,-1,-1,9,7,8,5,7,9,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,9,3,0,9,5,3,5,7,3,-1,-1,-1,-1,-1,-1,-1,0,7,8,0,1,7,1,5,7,-1,-1,-1,-1,-1,-1,-1,1,5,3,3,5,7,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,9,7,8,9,5,7,10,1,2,-1,-1,-1,-1,-1,-1,-1,10,1,2,9,5,0,5,3,0,5,7,3,-1,-1,-1,-1,8,0,2,8,2,5,8,5,7,10,5,2,-1,-1,-1,-1,2,10,5,2,5,3,3,5,7,-1,-1,-1,-1,-1,-1,-1,7,9,5,7,8,9,3,11,2,-1,-1,-1,-1,-1,-1,-1,9,5,7,9,7,2,9,2,0,2,7,11,-1,-1,-1,-1,2,3,11,0,1,8,1,7,8,1,5,7,-1,-1,-1,-1,11,2,1,11,1,7,7,1,5,-1,-1,-1,-1,-1,-1,-1,9,5,8,8,5,7,10,1,3,10,3,11,-1,-1,-1,-1,5,7,0,5,0,9,7,11,0,1,0,10,11,10,0,-1,11,10,0,11,0,3,10,5,0,8,0,7,5,7,0,-1,11,10,5,7,11,5,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,10,6,5,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,8,3,5,10,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,9,0,1,5,10,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,8,3,1,9,8,5,10,6,-1,-1,-1,-1,-1,-1,-1,1,6,5,2,6,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,6,5,1,2,6,3,0,8,-1,-1,-1,-1,-1,-1,-1,9,6,5,9,0,6,0,2,6,-1,-1,-1,-1,-1,-1,-1,5,9,8,5,8,2,5,2,6,3,2,8,-1,-1,-1,-1,2,3,11,10,6,5,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,11,0,8,11,2,0,10,6,5,-1,-1,-1,-1,-1,-1,-1,0,1,9,2,3,11,5,10,6,-1,-1,-1,-1,-1,-1,-1,5,10,6,1,9,2,9,11,2,9,8,11,-1,-1,-1,-1,6,3,11,6,5,3,5,1,3,-1,-1,-1,-1,-1,-1,-1,0,8,11,0,11,5,0,5,1,5,11,6,-1,-1,-1,-1,3,11,6,0,3,6,0,6,5,0,5,9,-1,-1,-1,-1,6,5,9,6,9,11,11,9,8,-1,-1,-1,-1,-1,-1,-1,5,10,6,4,7,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,3,0,4,7,3,6,5,10,-1,-1,-1,-1,-1,-1,-1,1,9,0,5,10,6,8,4,7,-1,-1,-1,-1,-1,-1,-1,10,6,5,1,9,7,1,7,3,7,9,4,-1,-1,-1,-1,6,1,2,6,5,1,4,7,8,-1,-1,-1,-1,-1,-1,-1,1,2,5,5,2,6,3,0,4,3,4,7,-1,-1,-1,-1,8,4,7,9,0,5,0,6,5,0,2,6,-1,-1,-1,-1,7,3,9,7,9,4,3,2,9,5,9,6,2,6,9,-1,3,11,2,7,8,4,10,6,5,-1,-1,-1,-1,-1,-1,-1,5,10,6,4,7,2,4,2,0,2,7,11,-1,-1,-1,-1,0,1,9,4,7,8,2,3,11,5,10,6,-1,-1,-1,-1,9,2,1,9,11,2,9,4,11,7,11,4,5,10,6,-1,8,4,7,3,11,5,3,5,1,5,11,6,-1,-1,-1,-1,5,1,11,5,11,6,1,0,11,7,11,4,0,4,11,-1,0,5,9,0,6,5,0,3,6,11,6,3,8,4,7,-1,6,5,9,6,9,11,4,7,9,7,11,9,-1,-1,-1,-1,10,4,9,6,4,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,10,6,4,9,10,0,8,3,-1,-1,-1,-1,-1,-1,-1,10,0,1,10,6,0,6,4,0,-1,-1,-1,-1,-1,-1,-1,8,3,1,8,1,6,8,6,4,6,1,10,-1,-1,-1,-1,1,4,9,1,2,4,2,6,4,-1,-1,-1,-1,-1,-1,-1,3,0,8,1,2,9,2,4,9,2,6,4,-1,-1,-1,-1,0,2,4,4,2,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,3,2,8,2,4,4,2,6,-1,-1,-1,-1,-1,-1,-1,10,4,9,10,6,4,11,2,3,-1,-1,-1,-1,-1,-1,-1,0,8,2,2,8,11,4,9,10,4,10,6,-1,-1,-1,-1,3,11,2,0,1,6,0,6,4,6,1,10,-1,-1,-1,-1,6,4,1,6,1,10,4,8,1,2,1,11,8,11,1,-1,9,6,4,9,3,6,9,1,3,11,6,3,-1,-1,-1,-1,8,11,1,8,1,0,11,6,1,9,1,4,6,4,1,-1,3,11,6,3,6,0,0,6,4,-1,-1,-1,-1,-1,-1,-1,6,4,8,11,6,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7,10,6,7,8,10,8,9,10,-1,-1,-1,-1,-1,-1,-1,0,7,3,0,10,7,0,9,10,6,7,10,-1,-1,-1,-1,10,6,7,1,10,7,1,7,8,1,8,0,-1,-1,-1,-1,10,6,7,10,7,1,1,7,3,-1,-1,-1,-1,-1,-1,-1,1,2,6,1,6,8,1,8,9,8,6,7,-1,-1,-1,-1,2,6,9,2,9,1,6,7,9,0,9,3,7,3,9,-1,7,8,0,7,0,6,6,0,2,-1,-1,-1,-1,-1,-1,-1,7,3,2,6,7,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,3,11,10,6,8,10,8,9,8,6,7,-1,-1,-1,-1,2,0,7,2,7,11,0,9,7,6,7,10,9,10,7,-1,1,8,0,1,7,8,1,10,7,6,7,10,2,3,11,-1,11,2,1,11,1,7,10,6,1,6,7,1,-1,-1,-1,-1,8,9,6,8,6,7,9,1,6,11,6,3,1,3,6,-1,0,9,1,11,6,7,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7,8,0,7,0,6,3,11,0,11,6,0,-1,-1,-1,-1,7,11,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7,6,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3,0,8,11,7,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,1,9,11,7,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,1,9,8,3,1,11,7,6,-1,-1,-1,-1,-1,-1,-1,10,1,2,6,11,7,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,2,10,3,0,8,6,11,7,-1,-1,-1,-1,-1,-1,-1,2,9,0,2,10,9,6,11,7,-1,-1,-1,-1,-1,-1,-1,6,11,7,2,10,3,10,8,3,10,9,8,-1,-1,-1,-1,7,2,3,6,2,7,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,7,0,8,7,6,0,6,2,0,-1,-1,-1,-1,-1,-1,-1,2,7,6,2,3,7,0,1,9,-1,-1,-1,-1,-1,-1,-1,1,6,2,1,8,6,1,9,8,8,7,6,-1,-1,-1,-1,10,7,6,10,1,7,1,3,7,-1,-1,-1,-1,-1,-1,-1,10,7,6,1,7,10,1,8,7,1,0,8,-1,-1,-1,-1,0,3,7,0,7,10,0,10,9,6,10,7,-1,-1,-1,-1,7,6,10,7,10,8,8,10,9,-1,-1,-1,-1,-1,-1,-1,6,8,4,11,8,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3,6,11,3,0,6,0,4,6,-1,-1,-1,-1,-1,-1,-1,8,6,11,8,4,6,9,0,1,-1,-1,-1,-1,-1,-1,-1,9,4,6,9,6,3,9,3,1,11,3,6,-1,-1,-1,-1,6,8,4,6,11,8,2,10,1,-1,-1,-1,-1,-1,-1,-1,1,2,10,3,0,11,0,6,11,0,4,6,-1,-1,-1,-1,4,11,8,4,6,11,0,2,9,2,10,9,-1,-1,-1,-1,10,9,3,10,3,2,9,4,3,11,3,6,4,6,3,-1,8,2,3,8,4,2,4,6,2,-1,-1,-1,-1,-1,-1,-1,0,4,2,4,6,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,9,0,2,3,4,2,4,6,4,3,8,-1,-1,-1,-1,1,9,4,1,4,2,2,4,6,-1,-1,-1,-1,-1,-1,-1,8,1,3,8,6,1,8,4,6,6,10,1,-1,-1,-1,-1,10,1,0,10,0,6,6,0,4,-1,-1,-1,-1,-1,-1,-1,4,6,3,4,3,8,6,10,3,0,3,9,10,9,3,-1,10,9,4,6,10,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,9,5,7,6,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,8,3,4,9,5,11,7,6,-1,-1,-1,-1,-1,-1,-1,5,0,1,5,4,0,7,6,11,-1,-1,-1,-1,-1,-1,-1,11,7,6,8,3,4,3,5,4,3,1,5,-1,-1,-1,-1,9,5,4,10,1,2,7,6,11,-1,-1,-1,-1,-1,-1,-1,6,11,7,1,2,10,0,8,3,4,9,5,-1,-1,-1,-1,7,6,11,5,4,10,4,2,10,4,0,2,-1,-1,-1,-1,3,4,8,3,5,4,3,2,5,10,5,2,11,7,6,-1,7,2,3,7,6,2,5,4,9,-1,-1,-1,-1,-1,-1,-1,9,5,4,0,8,6,0,6,2,6,8,7,-1,-1,-1,-1,3,6,2,3,7,6,1,5,0,5,4,0,-1,-1,-1,-1,6,2,8,6,8,7,2,1,8,4,8,5,1,5,8,-1,9,5,4,10,1,6,1,7,6,1,3,7,-1,-1,-1,-1,1,6,10,1,7,6,1,0,7,8,7,0,9,5,4,-1,4,0,10,4,10,5,0,3,10,6,10,7,3,7,10,-1,7,6,10,7,10,8,5,4,10,4,8,10,-1,-1,-1,-1,6,9,5,6,11,9,11,8,9,-1,-1,-1,-1,-1,-1,-1,3,6,11,0,6,3,0,5,6,0,9,5,-1,-1,-1,-1,0,11,8,0,5,11,0,1,5,5,6,11,-1,-1,-1,-1,6,11,3,6,3,5,5,3,1,-1,-1,-1,-1,-1,-1,-1,1,2,10,9,5,11,9,11,8,11,5,6,-1,-1,-1,-1,0,11,3,0,6,11,0,9,6,5,6,9,1,2,10,-1,11,8,5,11,5,6,8,0,5,10,5,2,0,2,5,-1,6,11,3,6,3,5,2,10,3,10,5,3,-1,-1,-1,-1,5,8,9,5,2,8,5,6,2,3,8,2,-1,-1,-1,-1,9,5,6,9,6,0,0,6,2,-1,-1,-1,-1,-1,-1,-1,1,5,8,1,8,0,5,6,8,3,8,2,6,2,8,-1,1,5,6,2,1,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,3,6,1,6,10,3,8,6,5,6,9,8,9,6,-1,10,1,0,10,0,6,9,5,0,5,6,0,-1,-1,-1,-1,0,3,8,5,6,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,10,5,6,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,11,5,10,7,5,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,11,5,10,11,7,5,8,3,0,-1,-1,-1,-1,-1,-1,-1,5,11,7,5,10,11,1,9,0,-1,-1,-1,-1,-1,-1,-1,10,7,5,10,11,7,9,8,1,8,3,1,-1,-1,-1,-1,11,1,2,11,7,1,7,5,1,-1,-1,-1,-1,-1,-1,-1,0,8,3,1,2,7,1,7,5,7,2,11,-1,-1,-1,-1,9,7,5,9,2,7,9,0,2,2,11,7,-1,-1,-1,-1,7,5,2,7,2,11,5,9,2,3,2,8,9,8,2,-1,2,5,10,2,3,5,3,7,5,-1,-1,-1,-1,-1,-1,-1,8,2,0,8,5,2,8,7,5,10,2,5,-1,-1,-1,-1,9,0,1,5,10,3,5,3,7,3,10,2,-1,-1,-1,-1,9,8,2,9,2,1,8,7,2,10,2,5,7,5,2,-1,1,3,5,3,7,5,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,8,7,0,7,1,1,7,5,-1,-1,-1,-1,-1,-1,-1,9,0,3,9,3,5,5,3,7,-1,-1,-1,-1,-1,-1,-1,9,8,7,5,9,7,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,5,8,4,5,10,8,10,11,8,-1,-1,-1,-1,-1,-1,-1,5,0,4,5,11,0,5,10,11,11,3,0,-1,-1,-1,-1,0,1,9,8,4,10,8,10,11,10,4,5,-1,-1,-1,-1,10,11,4,10,4,5,11,3,4,9,4,1,3,1,4,-1,2,5,1,2,8,5,2,11,8,4,5,8,-1,-1,-1,-1,0,4,11,0,11,3,4,5,11,2,11,1,5,1,11,-1,0,2,5,0,5,9,2,11,5,4,5,8,11,8,5,-1,9,4,5,2,11,3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,5,10,3,5,2,3,4,5,3,8,4,-1,-1,-1,-1,5,10,2,5,2,4,4,2,0,-1,-1,-1,-1,-1,-1,-1,3,10,2,3,5,10,3,8,5,4,5,8,0,1,9,-1,5,10,2,5,2,4,1,9,2,9,4,2,-1,-1,-1,-1,8,4,5,8,5,3,3,5,1,-1,-1,-1,-1,-1,-1,-1,0,4,5,1,0,5,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,4,5,8,5,3,9,0,5,0,3,5,-1,-1,-1,-1,9,4,5,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,11,7,4,9,11,9,10,11,-1,-1,-1,-1,-1,-1,-1,0,8,3,4,9,7,9,11,7,9,10,11,-1,-1,-1,-1,1,10,11,1,11,4,1,4,0,7,4,11,-1,-1,-1,-1,3,1,4,3,4,8,1,10,4,7,4,11,10,11,4,-1,4,11,7,9,11,4,9,2,11,9,1,2,-1,-1,-1,-1,9,7,4,9,11,7,9,1,11,2,11,1,0,8,3,-1,11,7,4,11,4,2,2,4,0,-1,-1,-1,-1,-1,-1,-1,11,7,4,11,4,2,8,3,4,3,2,4,-1,-1,-1,-1,2,9,10,2,7,9,2,3,7,7,4,9,-1,-1,-1,-1,9,10,7,9,7,4,10,2,7,8,7,0,2,0,7,-1,3,7,10,3,10,2,7,4,10,1,10,0,4,0,10,-1,1,10,2,8,7,4,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,9,1,4,1,7,7,1,3,-1,-1,-1,-1,-1,-1,-1,4,9,1,4,1,7,0,8,1,8,7,1,-1,-1,-1,-1,4,0,3,7,4,3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,4,8,7,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,9,10,8,10,11,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3,0,9,3,9,11,11,9,10,-1,-1,-1,-1,-1,-1,-1,0,1,10,0,10,8,8,10,11,-1,-1,-1,-1,-1,-1,-1,3,1,10,11,3,10,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,2,11,1,11,9,9,11,8,-1,-1,-1,-1,-1,-1,-1,3,0,9,3,9,11,1,2,9,2,11,9,-1,-1,-1,-1,0,2,11,8,0,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,3,2,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,3,8,2,8,10,10,8,9,-1,-1,-1,-1,-1,-1,-1,9,10,2,0,9,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,2,3,8,2,8,10,0,1,8,1,10,8,-1,-1,-1,-1,1,10,2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,3,8,9,1,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,9,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,3,8,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1])}function bv(){return[[0,4,4,4,2,0,0,0,2,2,0,0],[4,0,4,4,0,8,0,0,0,8,8,0],[4,4,0,4,0,0,8,0,0,0,8,8],[4,4,4,0,0,0,0,1,1,0,0,1],[2,0,0,0,0,8,8,8,2,2,0,0],[0,8,0,0,8,0,8,8,0,8,8,0],[0,0,8,0,8,8,0,8,0,0,8,8],[0,0,0,1,8,8,8,0,1,0,0,1],[2,0,0,1,2,0,0,1,0,2,0,1],[2,8,0,0,2,8,0,0,2,0,8,0],[0,8,8,0,0,8,8,0,0,8,0,8],[0,0,8,1,0,0,8,1,1,0,8,0]]}function xv(I,E,C,T,d){var f,R,m,L,c,u,h,O=0,D=!1,k=!1,B=!1,l=E*C*T,N=E,F=E*C,z=new Int32Array(12),g=[],v=[],U=[],y=[],j=vv(),G=yv(),V=[[0,4,4,4,2,0,0,0,2,2,0,0],[4,0,4,4,0,8,0,0,0,8,8,0],[4,4,0,4,0,0,8,0,0,0,8,8],[4,4,4,0,0,0,0,1,1,0,0,1],[2,0,0,0,0,8,8,8,2,2,0,0],[0,8,0,0,8,0,8,8,0,8,8,0],[0,0,8,0,8,8,0,8,0,0,8,8],[0,0,0,1,8,8,8,0,1,0,0,1],[2,0,0,1,2,0,0,1,0,2,0,1],[2,8,0,0,2,8,0,0,2,0,8,0],[0,8,8,0,0,8,8,0,0,8,0,8],[0,0,8,1,0,0,8,1,1,0,8,0]];function b(t,e,i){return t+(e-t)*i}function H(t,e,i){return F*(i=(i+h)%T)+N*(e=(e+u)%C)+(t=(t+c)%E)}function $(t,e,i,r,n,o,a){var s=k?3*t:t;if(R[s]<0){var c=(O-o)/(a-o),u=f,h=3*m;if(g[h+0]=i+c,g[h+1]=r,g[h+2]=n,!D){var l=3*t;v[h]=-b(u[l],u[l+3],c),v[h+1]=-b(u[l+1],u[l+4],c),v[h+2]=-b(u[l+2],u[l+5],c)}d&&(y[m]=d[t+Math.round(c)]),R[s]=m,z[e]=m,m+=1}else z[e]=R[s]}function W(t,e,i,r,n,o,a){var s=k?3*t+1:t;if(R[s]<0){var c=(O-o)/(a-o),u=f,h=3*m;if(g[h]=i,g[h+1]=r+c,g[h+2]=n,!D){var l=3*t,p=l+3*N;v[h]=-b(u[l],u[p],c),v[h+1]=-b(u[l+1],u[p+1],c),v[h+2]=-b(u[l+2],u[p+2],c)}d&&(y[m]=d[t+Math.round(c)*N]),R[s]=m,z[e]=m,m+=1}else z[e]=R[s]}function X(t,e,i,r,n,o,a){var s=k?3*t+2:t;if(R[s]<0){var c=(O-o)/(a-o),u=f,h=3*m;if(g[h]=i,g[h+1]=r,g[h+2]=n+c,!D){var l=3*t,p=l+3*F;v[h]=-b(u[l],u[p],c),v[h+1]=-b(u[l+1],u[p+1],c),v[h+2]=-b(u[l+2],u[p+2],c)}d&&(y[m]=d[t+Math.round(c)*F]),R[s]=m,z[e]=m,m+=1}else z[e]=R[s]}function q(t){var e=3*t;0===f[e]&&(f[e]=I[(t-1+l)%l]-I[(t+1)%l],f[e+1]=I[(t-N+l)%l]-I[(t+N)%l],f[e+2]=I[(t-F+l)%l]-I[(t+F)%l])}function Y(t,e,i,r,n){var o,a,s,c,u,h,l;B?(r=H(t,e,i),o=H(t+1,e,i),a=H(t,e+1,i),s=H(t,e,i+1),c=H(t+1,e+1,i),u=H(t+1,e,i+1),h=H(t,e+1,i+1),l=H(t+1,e+1,i+1)):(o=r+1,c=(a=r+N)+1,u=(s=r+F)+1,l=(h=a+F)+1);var p=0,d=I[r],f=I[o],m=I[a],g=I[c],v=I[s],y=I[u],b=I[h],x=I[l];d<O&&(p|=1),f<O&&(p|=2),m<O&&(p|=8),g<O&&(p|=4),v<O&&(p|=16),y<O&&(p|=32),b<O&&(p|=128),x<O&&(p|=64);var _=j[p];if(0===_)return 0;var w=t+1,S=e+1,A=i+1;1&_&&(D||(q(r),q(o)),$(r,0,t,e,i,d,f)),2&_&&(D||(q(o),q(c)),W(o,1,w,e,i,f,g)),4&_&&(D||(q(a),q(c)),$(a,2,t,S,i,m,g)),8&_&&(D||(q(r),q(a)),W(r,3,t,e,i,d,m)),16&_&&(D||(q(s),q(u)),$(s,4,t,e,A,v,y)),32&_&&(D||(q(u),q(l)),W(u,5,w,e,A,y,x)),64&_&&(D||(q(h),q(l)),$(h,6,t,S,A,b,x)),128&_&&(D||(q(s),q(h)),W(s,7,t,e,A,v,b)),256&_&&(D||(q(r),q(s)),X(r,8,t,e,i,d,v)),512&_&&(D||(q(o),q(u)),X(o,9,w,e,i,f,y)),1024&_&&(D||(q(c),q(l)),X(c,10,w,S,i,g,x)),2048&_&&(D||(q(a),q(h)),X(a,11,t,S,i,m,b));for(var M,P,E,C=p<<4,T=0;-1!==G[C+T];)M=G[C+T],P=G[C+T+1],E=G[C+T+2],k?(V[M][P]&n&&(U[L++]=z[M],U[L++]=z[P]),V[P][E]&n&&(U[L++]=z[P],U[L++]=z[E]),V[M][E]&n&&(U[L++]=z[M],U[L++]=z[E])):(U[L++]=z[P],U[L++]=z[M],U[L++]=z[E]),T+=3}function p(t,e,i,r,n,o){var a,s,c,u,h,l,p,d,f,m,g,v,y;if(t=void 0!==t?t:0,e=void 0!==e?e:0,i=void 0!==i?i:0,r=void 0!==r?r:E-1,n=void 0!==n?n:C-1,o=void 0!==o?o:T-1,B||(D?(t=Math.max(0,t),e=Math.max(0,e),i=Math.max(0,i),r=Math.min(E-1,r),n=Math.min(C-1,n),o=Math.min(T-1,o)):(t=Math.max(1,t),e=Math.max(1,e),i=Math.max(1,i),r=Math.min(E-2,r),n=Math.min(C-2,n),o=Math.min(T-2,o))),B)for(d=t-2,f=e-2,g=r+2,v=n+2,y=o+2,h=m=i-2;h<y;++h)for(u=f;u<v;++u)for(c=d;c<g;++c)k?(s=3*H(c,u,h),R[s]=-1,R[s+1]=-1,R[s+2]=-1):(a=H(c,u,h),R[a]=-1);else for(d=Math.max(0,t-2),f=Math.max(0,e-2),m=Math.max(0,i-2),g=Math.min(E,r+2),v=Math.min(C,n+2),y=Math.min(T,o+2),h=m;h<y;++h)for(p=F*h,u=f;u<v;++u)for(l=p+N*u,c=d;c<g;++c)k?(R[a=3*(l+c)]=-1,R[a+1]=-1,R[a+2]=-1):R[a=l+c]=-1;if(!B){var b,x=t,_=e,w=i,S=r,A=n,M=o;for(b=!1,h=i;h<o;++h){for(u=e;u<n;++u){for(c=t;c<r;++c)if(I[a=E*C*h+E*u+c]>=O){w=h,b=!0;break}if(b)break}if(b)break}for(b=!1,u=e;u<n;++u){for(h=w;h<o;++h){for(c=t;c<r;++c)if(I[a=E*C*h+E*u+c]>=O){_=u,b=!0;break}if(b)break}if(b)break}for(b=!1,c=t;c<r;++c){for(u=_;u<n;++u){for(h=w;h<o;++h)if(I[a=E*C*h+E*u+c]>=O){x=c,b=!0;break}if(b)break}if(b)break}for(b=!1,h=o;i<=h;--h){for(u=n;e<=u;--u){for(c=r;t<=c;--c)if(I[a=E*C*h+E*u+c]>=O){M=h,b=!0;break}if(b)break}if(b)break}for(b=!1,u=n;e<=u;--u){for(h=M;i<=h;--h){for(c=r;t<=c;--c)if(I[a=E*C*h+E*u+c]>=O){A=u,b=!0;break}if(b)break}if(b)break}for(b=!1,c=r;t<=c;--c){for(u=A;e<=u;--u){for(h=M;i<=h;--h)if(I[a=E*C*h+E*u+c]>=O){S=c,b=!0;break}if(b)break}if(b)break}D?(t=Math.max(0,x-1),e=Math.max(0,_-1),i=Math.max(0,w-1),r=Math.min(E-1,S+1),n=Math.min(C-1,A+1),o=Math.min(T-1,M+1)):(t=Math.max(1,x-1),e=Math.max(1,_-1),i=Math.max(1,w-1),r=Math.min(E-2,S+1),n=Math.min(C-2,A+1),o=Math.min(T-2,M+1))}var P=15;for(h=i;h<o;++h,P&=-5)for(p=F*h,P|=2,u=e;u<n;++u,P&=-3)for(l=p+N*u,P|=1,c=t;c<r;++c,P&=-2)Y(c,u,h,a=l+c,P)}this.triangulate=function(t,e,i,r,n){O=t,k=r,B=n,(D=e||k)||f||(f=new Float32Array(3*l));var o=k?3*l:l;if(R&&R.length===o||(R=new Int32Array(o)),void(L=m=0)!==i){var a=i[0].map(Math.round),s=i[1].map(Math.round);c=E*Math.ceil(Math.abs(a[0])/E),u=C*Math.ceil(Math.abs(a[1])/C),h=T*Math.ceil(Math.abs(a[2])/T),p(a[0],a[1],a[2],s[0],s[1],s[2])}else c=u=h=0,p();return g.length=3*m,D||(v.length=3*m),U.length=L,d&&(y.length=m),{position:new Float32Array(g),normal:D?void 0:new Float32Array(v),index:bl(U,g.length/3),atomindex:d?new Int32Array(y):void 0,contour:k}}}qp.add("arrow",Yg),qp.add("box",ov),qp.add("cone",tv),qp.add("cylinder",qg),qp.add("ellipsoid",rv),qp.add("octahedron",nv),qp.add("sphere",cv),qp.add("tetrahedron",hv),qp.add("torus",lv),qp.add("point",mv),qp.add("wideline",gv),xv.__deps=[vv,yv,bv,bl];var _v=function(t,e){this.cols=t,this.rows=e,this.size=this.cols*this.rows,this.data=new Float32Array(this.size)};function wv(t,e){for(var i=0,r=0,n=e.rows,o=e.cols,a=0,s=0,c=0,u=e.data,h=t.data;i<n;s+=1,a+=o,i++)for(c=s,r=0;r<o;c+=n,r++)h[c]=u[a+r]}function Sv(t,e,i){for(var r=0,n=0,o=0,a=0,s=0,c=0,u=0,h=e.cols,l=e.rows,p=i.rows,d=e.data,f=i.data,m=t.data,g=0;r<l;a+=h,r++)for(n=c=0;n<p;u++,n++){for(s=a,o=g=0;o<h;s++,c++,o++)g+=d[s]*f[c];m[u]=g}}function Av(t,e,i){var r=t.data,n=e.data,o=i.data,a=n[0],s=n[1],c=n[2],u=n[3],h=n[4],l=n[5],p=n[6],d=n[7],f=n[8],m=o[0],g=o[1],v=o[2],y=o[3],b=o[4],x=o[5],_=o[6],w=o[7],S=o[8];r[0]=a*m+s*y+c*_,r[1]=a*g+s*b+c*w,r[2]=a*v+s*x+c*S,r[3]=u*m+h*y+l*_,r[4]=u*g+h*b+l*w,r[5]=u*v+h*x+l*S,r[6]=p*m+d*y+f*_,r[7]=p*g+d*b+f*w,r[8]=p*v+d*x+f*S}function Mv(t){for(var e=t.rows,i=t.cols,r=t.data,n=new Array(i),o=0;o<i;++o)n[o]=0;for(var a=0,s=0;a<e;++a)for(var c=0;c<i;++c,++s)n[c]+=r[s];for(var u=0;u<i;++u)n[u]/=e;return n}function Pv(t,e){for(var i=t.rows,r=t.cols,n=t.data,o=0,a=0;o<i;++o)for(var s=0;s<r;++s,++a)n[a]-=e[s]}function Ev(t,e,i,r){r=t[e],t[e]=t[i],t[i]=r}_v.prototype.copyTo=function(t){t.data.set(this.data)};var Cv=1.192092896e-7,Tv=1e-37;function Iv(t,e,i,r){var n=0,o=0,a=t.rows,s=t.cols,c=a,u=s;c<u&&(n=1,o=c,c=u,u=o);var h=new _v(c,c),l=new _v(1,u),p=new _v(u,u);if(0===n)wv(h,t);else{for(o=0;o<s*a;o++)h.data[o]=t.data[o];for(;o<u*c;o++)h.data[o]=0}if(function(t,e,i,r,n,o,a,s){for(var c,u,h=2*Cv,l=Tv,p=0,d=0,f=0,m=0,g=Math.max(o,30),v=0,y=0,b=0,x=0,_=0,w=0,S=0,A=0,M=0,P=0,E=0,C=0,T=0,I=0,R=0,L=0,O=0,D=4660,k=0,B=0,N=0,F=new Float64Array(a<<3);p<a;p++){for(E=f=0;f<o;f++)E+=(A=t[p*e+f])*A;if(F[p]=E,r){for(f=0;f<a;f++)r[p*n+f]=0;r[p*n+p]=1}}for(;m<g;m++){for(p=_=0;p<a-1;p++)for(d=p+1;d<a;d++){for(v=p*e|0,y=d*e|0,R=F[p],L=0,O=F[d],f=2,L+=t[v]*t[y],L+=t[v+1]*t[y+1];f<o;f++)L+=t[v+f]*t[y+f];if(!(Math.abs(L)<=h*Math.sqrt(R*O))){for(c=L*=2,u=C=R-O,c=Math.abs(c),T=(u=Math.abs(u))<c?(u/=c,c*Math.sqrt(1+u*u)):0<u?(c/=u,u*Math.sqrt(1+c*c)):0,C<0?(I=.5*(T-C),w=L/(T*(S=Math.sqrt(I/T))*2)):S=L/(T*(w=Math.sqrt((T+C)/(2*T)))*2),O=R=0,f=2,M=w*t[v]+S*t[y],P=-S*t[v]+w*t[y],R+=(t[v]=M)*M,O+=(t[y]=P)*P,M=w*t[v+1]+S*t[y+1],P=-S*t[v+1]+w*t[y+1],R+=(t[v+1]=M)*M,O+=(t[y+1]=P)*P;f<o;f++)M=w*t[v+f]+S*t[y+f],P=-S*t[v+f]+w*t[y+f],R+=(t[v+f]=M)*M,O+=(t[y+f]=P)*P;if(F[p]=R,F[d]=O,_=1,r)for(x=d*n|0,f=2,M=w*r[b=p*n|0]+S*r[x],P=-S*r[b]+w*r[x],r[b]=M,r[x]=P,M=w*r[b+1]+S*r[x+1],P=-S*r[b+1]+w*r[x+1],r[b+1]=M,r[x+1]=P;f<a;f++)M=w*r[b+f]+S*r[x+f],P=-S*r[b+f]+w*r[x+f],r[b+f]=M,r[x+f]=P}}if(0===_)break}for(p=0;p<a;p++){for(E=f=0;f<o;f++)E+=(A=t[p*e+f])*A;F[p]=Math.sqrt(E)}for(p=0;p<a-1;p++){for(f=(d=p)+1;f<a;f++)F[d]<F[f]&&(d=f);if(p!==d&&(Ev(F,p,d,E),r)){for(f=0;f<o;f++)Ev(t,p*e+f,d*e+f,A);for(f=0;f<a;f++)Ev(r,p*n+f,d*n+f,A)}}for(p=0;p<a;p++)i[p]=F[p];if(r)for(p=0;p<s;p++){for(E=p<a?F[p]:0;E<=l;){for(B=1/o,f=0;f<o;f++)k=0!=(256&(D=214013*D+2531011)>>16)?B:-B,t[p*e+f]=k;for(m=0;m<2;m++)for(d=0;d<p;d++){for(f=E=0;f<o;f++)E+=t[p*e+f]*t[d*e+f];for(f=N=0;f<o;f++)A=t[p*e+f]-E*t[d*e+f],t[p*e+f]=A,N+=Math.abs(A);for(N=N?1/N:0,f=0;f<o;f++)t[p*e+f]*=N}for(f=E=0;f<o;f++)E+=(A=t[p*e+f])*A;E=Math.sqrt(E)}for(S=1/E,f=0;f<o;f++)t[p*e+f]*=S}}(h.data,c,l.data,p.data,u,c,u,c),e){for(o=0;o<u;o++)e.data[o]=l.data[o];for(;o<s;o++)e.data[o]=0}0===n?(i&&wv(i,h),r&&wv(r,p)):(i&&wv(i,p),r&&wv(r,h))}function Rv(){return new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1])}function Lv(t,e,i,r,n,o,a,s,c,u,h,l,p,d,f,m,g){t[0]=e,t[4]=i,t[8]=r,t[12]=n,t[1]=o,t[5]=a,t[9]=s,t[13]=c,t[2]=u,t[6]=h,t[10]=l,t[14]=p,t[3]=d,t[7]=f,t[11]=m,t[15]=g}function Ov(t,e,i){var r=e[0],n=e[4],o=e[8],a=e[12],s=e[1],c=e[5],u=e[9],h=e[13],l=e[2],p=e[6],d=e[10],f=e[14],m=e[3],g=e[7],v=e[11],y=e[15],b=i[0],x=i[4],_=i[8],w=i[12],S=i[1],A=i[5],M=i[9],P=i[13],E=i[2],C=i[6],T=i[10],I=i[14],R=i[3],L=i[7],O=i[11],D=i[15];t[0]=r*b+n*S+o*E+a*R,t[4]=r*x+n*A+o*C+a*L,t[8]=r*_+n*M+o*T+a*O,t[12]=r*w+n*P+o*I+a*D,t[1]=s*b+c*S+u*E+h*R,t[5]=s*x+c*A+u*C+h*L,t[9]=s*_+c*M+u*T+h*O,t[13]=s*w+c*P+u*I+h*D,t[2]=l*b+p*S+d*E+f*R,t[6]=l*x+p*A+d*C+f*L,t[10]=l*_+p*M+d*T+f*O,t[14]=l*w+p*P+d*I+f*D,t[3]=m*b+g*S+v*E+y*R,t[7]=m*x+g*A+v*C+y*L,t[11]=m*_+g*M+v*T+y*O,t[15]=m*w+g*P+v*I+y*D}function Dv(t,e,i,r){Lv(t,e,0,0,0,0,i,0,0,0,0,r,0,0,0,0,1)}function kv(t,e,i,r){Lv(t,1,0,0,e,0,1,0,i,0,0,1,r,0,0,0,1)}function Bv(t,e){var i=Math.cos(e),r=Math.sin(e);Lv(t,i,0,r,0,0,1,0,0,-r,0,i,0,0,0,0,1)}function Nv(){return new Float32Array([1,0,0,0,1,0,0,0,1])}function Fv(t,e){var i=im([e[0],e[1],e[2]]),r=im([e[4],e[5],e[6]]),n=im([e[8],e[9],e[10]]),o=im();rm(o,r,n),t[0]=o[0],t[1]=o[1],t[2]=o[2],rm(o,n,i),t[3]=o[0],t[4]=o[1],t[5]=o[2],rm(o,i,r),t[6]=o[0],t[7]=o[1],t[8]=o[2]}function zv(t,e,i,r){i=i||1,r=r||!0;var n,o=t.length/3,a=e.length/3;r&&(n=new Float32Array(3*o));var s,c,u,h,l=new Float32Array(3*o),p=new Array(20);for(s=0;s<20;++s)p[s]=new Uint32Array(o);for(s=0;s<o;++s)p[0][s]=0;for(s=0;s<a;++s){var d=3*s,f=3*s+1,m=3*s+2;for(h=!0,u=p[c=0][e[d]];c<u;++c)if(e[f]===p[c+1][e[d]]){h=!1;break}for(h&&(p[0][e[d]]++,p[p[0][e[d]]][e[d]]=e[f]),h=!0,u=p[c=0][e[d]];c<u;++c)if(e[m]===p[c+1][e[d]]){h=!1;break}for(h&&(p[0][e[d]]++,p[p[0][e[d]]][e[d]]=e[m]),h=!0,u=p[c=0][e[f]];c<u;++c)if(e[d]===p[c+1][e[f]]){h=!1;break}for(h&&(p[0][e[f]]++,p[p[0][e[f]]][e[f]]=e[d]),h=!0,u=p[c=0][e[f]];c<u;++c)if(e[m]===p[c+1][e[f]]){h=!1;break}for(h&&(p[0][e[f]]++,p[p[0][e[f]]][e[f]]=e[m]),h=!0,c=0;c<p[0][e[m]];++c)if(e[d]===p[c+1][e[m]]){h=!1;break}for(h&&(p[0][e[m]]++,p[p[0][e[m]]][e[m]]=e[d]),h=!0,u=p[c=0][e[m]];c<u;++c)if(e[f]===p[c+1][e[m]]){h=!1;break}h&&(p[0][e[m]]++,p[p[0][e[m]]][e[m]]=e[f])}for(var g,v,y,b,x,_=0;_<i;++_){for(s=0;s<o;++s)if(g=3*s,(y=p[0][s])<3)l[g]=t[g],l[g+1]=t[g+1],l[g+2]=t[g+2];else if(3===y||4===y){for(l[g]=0,l[g+1]=0,c=l[g+2]=0;c<y;++c)v=3*p[c+1][s],l[g]+=t[v],l[g+1]+=t[v+1],l[g+2]+=t[v+2];l[g]+=.5*t[g],l[g+1]+=.5*t[g+1],l[g+2]+=.5*t[g+2],x=.5+y,l[g]/=x,l[g+1]/=x,l[g+2]/=x}else{for(l[g]=0,l[g+1]=0,c=l[g+2]=0;c<y;++c)v=3*p[c+1][s],l[g]+=t[v],l[g+1]+=t[v+1],l[g+2]+=t[v+2];l[g]+=1*t[g],l[g+1]+=1*t[g+1],l[g+2]+=1*t[g+2],b=1+y,l[g]/=b,l[g+1]/=b,l[g+2]/=b}if(t.set(l),r){Uv(t,e,n);var w=3*o;for(g=0;g<w;g+=3)t[g]+=.75/4.5*-1*n[g],t[g+1]+=.75/4.5*-1*n[g+1],t[g+2]+=.75/4.5*-1*n[g+2]}}}function Uv(t,e,i){var r,n;if(void 0===i)i=new Float32Array(t.length);else for(r=0,n=i.length;r<n;r++)i[r]=0;var o=new Float32Array(3),a=new Float32Array(3),s=new Float32Array(3),c=new Float32Array(3),u=new Float32Array(3);if(e)for(r=0,n=e.length;r<n;r+=3){var h=3*e[r],l=3*e[r+1],p=3*e[r+2];sm(o,t,h),sm(a,t,l),sm(s,t,p),om(c,s,a),om(u,o,a),rm(c,c,u),i[h]+=c[0],i[h+1]+=c[1],i[h+2]+=c[2],i[l]+=c[0],i[l+1]+=c[1],i[l+2]+=c[2],i[p]+=c[0],i[p+1]+=c[1],i[p+2]+=c[2]}else for(r=0,n=t.length;r<n;r+=9)sm(o,t,r),sm(a,t,r+3),sm(s,t,r+6),om(c,s,a),om(u,o,a),rm(c,c,u),i[r]=c[0],i[r+1]=c[1],i[r+2]=c[2],i[r+3]=c[0],i[r+4]=c[1],i[r+5]=c[2],i[r+6]=c[0],i[r+7]=c[1],i[r+8]=c[2];return em(i),i}function jv(t){for(var e={},i=0,r=t.length;i<r;++i)e[t[i]]=!0;return e}function Gv(t,e,i,r,n){var o=1/r*3;dm(t,t,n+(o+=i)),fm(e,e,n+o),lm(t,t,r),mm(t,t),hm(t,t,r),lm(e,e,r),gm(e,e),hm(e,e,r);var a=new Float32Array(3);om(a,e,t),lm(a,a,r),gm(a,a),fm(a,a,1);var s=256*Math.pow(10,6),c=a[0]*a[1]*a[2]*3;s<=c&&(lm(t,t,r*=Math.pow(s/c,1/3)),mm(t,t),hm(t,t,r),lm(e,e,r),gm(e,e),hm(e,e,r),om(a,e,t),lm(a,a,r),gm(a,a),fm(a,a,1));var u=new Float32Array(t);vm(u,u);var h=Rv(),l=Rv();Bv(l,Tl(90)),Ov(h,h,l);var p=Rv();Dv(p,-1/r,1/r,1/r),Ov(h,h,p);var d=Rv();return kv(d,-r*u[2],-r*u[1],-r*u[0]),Ov(h,h,d),{dim:a,tran:u,matrix:h,scaleFactor:r}}Dv.__deps=[Lv],kv.__deps=[Lv],Bv.__deps=[Lv],Fv.__deps=[im,rm],zv.__deps=[Uv],Uv.__deps=[om,rm,sm,em],Gv.__deps=[Tl,dm,fm,hm,lm,mm,gm,om,vm,Rv,Ov,kv,Dv,Bv];var Vv=function(t,e,i){this.name=t||"",this.path=e||"",this.info={},this.center=new Qe,this.boundingBox=new Ai,i instanceof vr||i instanceof jr||i instanceof ka?this.fromGeometry(i):i&&(this.set(i.position,i.index,i.normal,i.color,i.atomindex,i.contour),this.boundingBox.setFromArray(i.position),this.boundingBox.getCenter(this.center))},Hv={type:{configurable:!0}};function $v(t,e,i,r,n){var c=new xv(t,e,i,r,n);this.getSurface=function(t,e,i,r,n,o){var a=c.triangulate(t,e,i,n,o);if(e&&!n&&(zv(a.position,a.index,e,!0),a.normal=Uv(a.position,a.index)),r&&(Qf(r,a.position),a.normal)){var s=Nv();Fv(s,r),tm(s,a.normal)}return a}}Hv.type.get=function(){return"Surface"},Vv.prototype.set=function(t,e,i,r,n,o){this.position=t,this.index=e,this.normal=i,this.color=r,this.atomindex=n,this.size=t.length/3,this.contour=o},Vv.prototype.fromGeometry=function(t){var e,i,r,n;if(de.Debug&&Bp.time("GeometrySurface.fromGeometry"),t instanceof vr?(t.computeVertexNormals(!0),e=(new jr).fromGeometry(t)):e=t instanceof jr?t:t[0],e.boundingBox||e.computeBoundingBox(),this.boundingBox.copy(e.boundingBox),this.boundingBox.getCenter(this.center),e instanceof jr){var o=e.attributes,a=!!o.normal&&o.normal.array;(!a||0===a[0]&&0===a[1]&&0===a[2])&&e.computeVertexNormals(),i=o.position.array,r=o.index?o.index.array:null,n=o.normal.array}this.set(i,r,n,void 0,void 0),de.Debug&&Bp.timeEnd("GeometrySurface.setGeometry")},Vv.prototype.getPosition=function(){return this.position},Vv.prototype.getColor=function(t){var e=t||{},i=(e.surface=this).size,r=new Float32Array(3*i),n=Up.getScheme(e);if(n.volumeColor||"random"===e.scheme)for(var o=0;o<i;++o)n.volumeColorToArray(o,r,3*o);else if(n.positionColor)for(var a=new Qe,s=this.position,c=0;c<i;++c){var u=3*c;a.set(s[u],s[u+1],s[u+2]),n.positionColorToArray(a,r,u)}else if(n.atomColor&&this.atomindex)for(var h=e.structure.getAtomProxy(),l=this.atomindex,p=0;p<i;++p)h.index=l[p],n.atomColorToArray(h,r,3*p);else{var d=new Li(e.value);Id(i,d.r,d.g,d.b,r)}return r},Vv.prototype.getPicking=function(t){return this.atomindex&&t?new Zg(this.atomindex,t):new uv(Rd(this.size),this)},Vv.prototype.getNormal=function(){return this.normal},Vv.prototype.getSize=function(t,e){return Td(this.size,t*e)},Vv.prototype.getIndex=function(){return this.index},Vv.prototype.getFilteredIndex=function(t,e){if(t&&this.atomindex){for(var i=new bp(t),r=e.getAtomSet(i),n=[],o=this.atomindex,a=this.index,s=a.length,c=this.contour?2:3,u=0,h=0;h<s;h+=c){for(var l=!0,p=0;p<c;p++){var d=o[a[h+p]];if(!r.get(d)){l=!1;break}}if(l)for(var f=0;f<c;f++,u++)n[u]=a[h+f]}return bl(n,this.position.length/3)}return this.index},Vv.prototype.getAtomindex=function(){return this.atomindex},Vv.prototype.dispose=function(){},Object.defineProperties(Vv.prototype,Hv),$v.__deps=[zv,Uv,xv,Qf,tm,Nv,Fv],zp.add("surf",function(t,e){var i=t.data.args,r=t.data.params;if(i&&(self.volsurf=new $v(i[0],i[1],i[2],i[3],i[4])),r){var n=self.volsurf.getSurface(r.isolevel,r.smooth,r.box,r.matrix,r.contour,r.wrap),o=[n.position.buffer,n.index.buffer];n.normal&&o.push(n.normal.buffer),n.atomindex&&o.push(n.atomindex.buffer),e({sd:n,p:r},o)}},[$v]);var Wv=function(t,e,i,r,n,o,a){this.name=t,this.path=e,this.matrix=new Ke,this.normalMatrix=new ti,this.inverseMatrix=new Ke,this.center=new Qe,this.boundingBox=new Ai,this.setData(i,r,n,o,a)},Xv={type:{configurable:!0},position:{configurable:!0},min:{configurable:!0},max:{configurable:!0},sum:{configurable:!0},mean:{configurable:!0},rms:{configurable:!0}};function qv(t){return"front"===t?U:"back"===t?Y:Z}Xv.type.get=function(){return"Volume"},Wv.prototype.setData=function(t,e,i,r,n){this.nx=e||1,this.ny=i||1,this.nz=r||1,this.data=t||new Float32Array(1),this.setAtomindex(n),delete this._position,delete this._min,delete this._max,delete this._mean,delete this._rms,this.worker&&this.worker.terminate()},Wv.prototype.setStats=function(t,e,i,r){this._min=t,this._max=e,this._mean=i,this._rms=r},Wv.prototype.setMatrix=function(t){this.matrix.copy(t);var e=this.boundingBox,i=this.center,r=this.nx-1,n=this.ny-1,o=this.nz-1;e.makeEmpty(),e.expandByPoint(i.set(r,n,o)),e.expandByPoint(i.set(r,n,0)),e.expandByPoint(i.set(r,0,o)),e.expandByPoint(i.set(r,0,0)),e.expandByPoint(i.set(0,n,o)),e.expandByPoint(i.set(0,0,o)),e.expandByPoint(i.set(0,n,0)),e.expandByPoint(i.set(0,0,0)),e.applyMatrix4(this.matrix),e.getCenter(this.center);var a=this.matrix.elements,s=new Qe(a[0],a[1],a[2]),c=new Qe(a[4],a[5],a[6]),u=new Qe(a[8],a[9],a[10]),h=new Qe,l=this.normalMatrix.elements;h.crossVectors(c,u),l[0]=h.x,l[1]=h.y,l[2]=h.z,h.crossVectors(u,s),l[3]=h.x,l[4]=h.y,l[5]=h.z,h.crossVectors(s,c),l[6]=h.x,l[7]=h.y,l[8]=h.z,this.inverseMatrix.getInverse(this.matrix)},Wv.prototype.setAtomindex=function(t){this.atomindex=t},Wv.prototype.getBox=function(t,e,i){return i||(i=new Ai),i.set(t,t),i.expandByScalar(e),i.applyMatrix4(this.inverseMatrix),i.min.round(),i.max.round(),i},Wv.prototype._getBox=function(t,e){if(t&&e){this.__box||(this.__box=new Ai);var i=this.getBox(t,e,this.__box);return[i.min.toArray(),i.max.toArray()]}},Wv.prototype._makeSurface=function(t,e,i){var r=this.name+"@"+e.toPrecision(2),n=new Vv(r,"",t);return n.info.isolevel=e,n.info.smooth=i,n.info.volume=this,n},Wv.prototype.getSurface=function(t,e,i,r,n,o){t=isNaN(t)?this.getValueForSigma(2):t,e=al(e,0),void 0===this.volsurf&&(this.volsurf=new $v(this.data,this.nx,this.ny,this.nz,this.atomindex));var a=this._getBox(i,r),s=this.volsurf.getSurface(t,e,a,this.matrix.elements,n,o);return this._makeSurface(s,t,e)},Wv.prototype.getSurfaceWorker=function(i,r,n,o,a,s,c){var u=this;if(i=isNaN(i)?this.getValueForSigma(2):i,r=r||0,window.Worker){void 0===this.workerPool&&(this.workerPool=new Yf("surf",2));var t={},e=this.workerPool.getNextWorker();0===e.postCount&&(t.args=[this.data,this.nx,this.ny,this.nz,this.atomindex]),t.params={isolevel:i,smooth:r,box:this._getBox(n,o),matrix:this.matrix.elements,contour:a,wrap:s},e.post(t,void 0,function(t){var e=t.data.sd,i=t.data.p;c(u._makeSurface(e,i.isolevel,i.smooth))},function(t){console.warn("Volume.getSurfaceWorker error - trying without worker",t);var e=u.getSurface(i,r,n,o,a,s);c(e)})}else{var h=this.getSurface(i,r,n,o,a,s);c(h)}},Wv.prototype.getValueForSigma=function(t){return this.mean+al(t,2)*this.rms},Wv.prototype.getSigmaForValue=function(t){return(al(t,0)-this.mean)/this.rms},Xv.position.get=function(){if(!this._position){for(var t=this.nz,e=this.ny,i=this.nx,r=new Float32Array(i*e*t*3),n=0,o=0;o<t;++o)for(var a=0;a<e;++a)for(var s=0;s<i;++s)r[n+0]=s,r[n+1]=a,r[n+2]=o,n+=3;Qf(this.matrix.elements,r),this._position=r}return this._position},Wv.prototype.getDataAtomindex=function(){return this.atomindex},Wv.prototype.getDataPosition=function(){return this.position},Wv.prototype.getDataColor=function(t){var e=t||{};e.volume=this,e.scale=e.scale||"Spectral",e.domain=e.domain||[this.min,this.max];for(var i=Up.getScheme(e),r=this.position.length/3,n=new Float32Array(3*r),o=0;o<r;++o)i.volumeColorToArray(o,n,3*o);return n},Wv.prototype.getDataPicking=function(){var t=Rd(this.position.length/3);return new dv(t,this)},Wv.prototype.getDataSize=function(t,e){var i,r=this.data,n=this.position.length/3;switch(t){case"value":i=new Float32Array(r);break;case"abs-value":i=new Float32Array(r);for(var o=0;o<n;++o)i[o]=Math.abs(i[o]);break;case"value-min":i=new Float32Array(r);for(var a=this.min,s=0;s<n;++s)i[s]-=a;break;case"deviation":i=new Float32Array(r);break;default:i=Td(n,t)}if(1!==e)for(var c=0;c<n;++c)i[c]*=e;return i},Xv.min.get=function(){return void 0===this._min&&(this._min=Nd(this.data)),this._min},Xv.max.get=function(){return void 0===this._max&&(this._max=Bd(this.data)),this._max},Xv.sum.get=function(){return void 0===this._sum&&(this._sum=Fd(this.data)),this._sum},Xv.mean.get=function(){return void 0===this._mean&&(this._mean=zd(this.data)),this._mean},Xv.rms.get=function(){return void 0===this._rms&&(this._rms=function(t){for(var e=t.length,i=0,r=0;r<e;++r){var n=t[r];i+=n*n}return Math.sqrt(i/e)}(this.data)),this._rms},Wv.prototype.clone=function(){var t=new Wv(this.name,this.path,this.data,this.nx,this.ny,this.nz,this.atomindex);return t.matrix.copy(this.matrix),t.header=Object.assign({},this.header),t},Wv.prototype.dispose=function(){this.workerPool&&this.workerPool.terminate()},Object.defineProperties(Wv.prototype,Xv),Hp.add("shader/Mesh.vert","#define STANDARD\nuniform float clipNear;\nuniform vec3 clipCenter;\n#if defined( NEAR_CLIP ) || defined( RADIUS_CLIP ) || ( !defined( PICKING ) && !defined( NOLIGHT ) )\nvarying vec3 vViewPosition;\n#endif\n#if defined( RADIUS_CLIP )\nvarying vec3 vClipCenter;\n#endif\n#if defined( PICKING )\n#include unpack_color\nattribute float primitiveId;\nvarying vec3 vPickingColor;\n#elif defined( NOLIGHT )\nvarying vec3 vColor;\n#else\n#include color_pars_vertex\n#ifndef FLAT_SHADED\nvarying vec3 vNormal;\n#endif\n#endif\n#include common\nvoid main(){\n#if defined( PICKING )\nvPickingColor = unpackColor( primitiveId );\n#elif defined( NOLIGHT )\nvColor = color;\n#else\n#include color_vertex\n#include beginnormal_vertex\n#include defaultnormal_vertex\n#ifndef FLAT_SHADED\nvNormal = normalize( transformedNormal );\n#endif\n#endif\n#include begin_vertex\n#include project_vertex\n#if defined( NEAR_CLIP ) || defined( RADIUS_CLIP ) || ( !defined( PICKING ) && !defined( NOLIGHT ) )\nvViewPosition = -mvPosition.xyz;\n#endif\n#if defined( RADIUS_CLIP )\nvClipCenter = -( modelViewMatrix * vec4( clipCenter, 1.0 ) ).xyz;\n#endif\n#include nearclip_vertex\n}"),Hp.add("shader/Mesh.frag","#define STANDARD\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 interiorColor;\nuniform float interiorDarkening;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\nuniform float clipNear;\nuniform float clipRadius;\n#if defined( NEAR_CLIP ) || defined( RADIUS_CLIP ) || ( !defined( PICKING ) && !defined( NOLIGHT ) )\nvarying vec3 vViewPosition;\n#endif\n#if defined( RADIUS_CLIP )\nvarying vec3 vClipCenter;\n#endif\n#if defined( PICKING )\nuniform float objectId;\nvarying vec3 vPickingColor;\n#elif defined( NOLIGHT )\nvarying vec3 vColor;\n#else\n#ifndef FLAT_SHADED\nvarying vec3 vNormal;\n#endif\n#include common\n#include color_pars_fragment\n#include fog_pars_fragment\n#include bsdfs\n#include lights_pars_begin\n#include lights_physical_pars_fragment\n#endif\nvoid main(){\n#include nearclip_fragment\n#include radiusclip_fragment\n#if defined( PICKING )\nif( opacity < 0.3 )\ndiscard;\ngl_FragColor = vec4( vPickingColor, objectId );\n#elif defined( NOLIGHT )\ngl_FragColor = vec4( vColor, opacity );\n#else\nvec4 diffuseColor = vec4( diffuse, opacity );\nReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\nvec3 totalEmissiveLight = emissive;\n#include color_fragment\n#include roughnessmap_fragment\n#include metalnessmap_fragment\n#include normal_fragment_begin\n#include lights_physical_fragment\n#include lights_fragment_begin\n#include lights_fragment_end\nvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveLight;\n#include interior_fragment\ngl_FragColor = vec4( outgoingLight, diffuseColor.a );\n#include premultiplied_alpha_fragment\n#include tonemapping_fragment\n#include encodings_fragment\n#include fog_fragment\n#include opaque_back_fragment\n#endif\n}");var Yv={f:1,v2:2,v3:3,c:3};function Zv(t,e){t.matrix.copy(e),t.matrix.decompose(t.position,t.quaternion,t.scale),t.matrixWorldNeedsUpdate=!0}var Kv={opaqueBack:!1,side:"double",opacity:1,depthWrite:!0,clipNear:0,clipRadius:0,clipCenter:new Qe,flatShaded:!1,wireframe:!1,roughness:.4,metalness:0,diffuse:16777215,diffuseInterior:!1,useInteriorColor:!1,interiorColor:14540253,interiorDarkening:0,forceTransparent:!1,matrix:new Ke,disablePicking:!1,sortParticles:!1,background:!1},Jv={opaqueBack:{updateShader:!0},side:{updateShader:!0,property:!0},opacity:{uniform:!0},depthWrite:{property:!0},clipNear:{updateShader:!0,property:!0},clipRadius:{updateShader:!0,uniform:!0},clipCenter:{uniform:!0},flatShaded:{updateShader:!0},background:{updateShader:!0},wireframe:{updateVisibility:!0},roughness:{uniform:!0},metalness:{uniform:!0},diffuse:{uniform:!0},diffuseInterior:{updateShader:!0},useInteriorColor:{updateShader:!0},interiorColor:{uniform:!0},interiorDarkening:{uniform:!0},matrix:{}},Qv=function(t,e){void 0===e&&(e={}),this.parameterTypes=Jv,this.geometry=new jr,this.indexVersion=0,this.wireframeIndexVersion=-1,this.group=new ka,this.wireframeGroup=new ka,this.pickingGroup=new ka,this.vertexShader="",this.fragmentShader="",this.isImpostor=!1,this.isText=!1,this.isSurface=!1,this.isPoint=!1,this.isLine=!1,this.dynamic=!0,this.visible=!0,this.wireframeIndexCount=0,this.parameters=sl(e,this.defaultParameters),this.uniforms=Ii.merge([ki.common,{fogColor:{value:null},fogNear:{value:0},fogFar:{value:0},opacity:{value:this.parameters.opacity},clipNear:{value:0},clipRadius:{value:this.parameters.clipRadius},clipCenter:{value:this.parameters.clipCenter}},{emissive:{value:new Li(0)},roughness:{value:this.parameters.roughness},metalness:{value:this.parameters.metalness},interiorColor:{value:new Li(this.parameters.interiorColor)},interiorDarkening:{value:this.parameters.interiorDarkening}},ki.lights]),this.uniforms.diffuse.value.set(this.parameters.diffuse),this.pickingUniforms={clipNear:{value:0},objectId:{value:0},opacity:{value:this.parameters.opacity}};var i=t.position||t.position1;this._positionDataSize=i?i.length/3:0,t.primitiveId||(t.primitiveId=Rd(this._positionDataSize)),this.addAttributes({position:{type:"v3",value:t.position},color:{type:"c",value:t.color},primitiveId:{type:"f",value:t.primitiveId}}),e.matrix&&(this.matrix=e.matrix),t.index&&this.initIndex(t.index),this.picking=t.picking,this.makeWireframeGeometry()},ty={defaultParameters:{configurable:!0},matrix:{configurable:!0},transparent:{configurable:!0},size:{configurable:!0},attributeSize:{configurable:!0},pickable:{configurable:!0}};ty.defaultParameters.get=function(){return Kv},ty.matrix.set=function(t){this.setMatrix(t)},ty.matrix.get=function(){return this.group.matrix.clone()},ty.transparent.get=function(){return this.parameters.opacity<1||this.parameters.forceTransparent},ty.size.get=function(){return this._positionDataSize},ty.attributeSize.get=function(){return this.size},ty.pickable.get=function(){return!!this.picking&&!this.parameters.disablePicking},Qv.prototype.setMatrix=function(t){Zv(this.group,t),Zv(this.wireframeGroup,t),Zv(this.pickingGroup,t)},Qv.prototype.initIndex=function(t){this.geometry.setIndex(new yr(t,1)),this.geometry.getIndex().setDynamic(this.dynamic)},Qv.prototype.makeMaterial=function(){var t=qv(this.parameters.side),e=new xn({uniforms:this.uniforms,vertexShader:"",fragmentShader:"",depthTest:!0,transparent:this.transparent,depthWrite:this.parameters.depthWrite,lights:!0,fog:!0,side:t});e.vertexColors=2,e.extensions.derivatives=this.parameters.flatShaded,e.extensions.fragDepth=this.isImpostor;var i=new xn({uniforms:this.uniforms,vertexShader:"",fragmentShader:"",depthTest:!0,transparent:this.transparent,depthWrite:this.parameters.depthWrite,lights:!1,fog:!0,side:t});i.vertexColors=2;var r=new xn({uniforms:this.pickingUniforms,vertexShader:"",fragmentShader:"",depthTest:!0,transparent:!1,depthWrite:this.parameters.depthWrite,lights:!1,fog:!1,side:t,blending:W});r.vertexColors=2,r.extensions.fragDepth=this.isImpostor,e.clipNear=this.parameters.clipNear,i.clipNear=this.parameters.clipNear,r.clipNear=this.parameters.clipNear,this.material=e,this.wireframeMaterial=i,this.pickingMaterial=r,this.updateShader()},Qv.prototype.makeWireframeGeometry=function(){this.makeWireframeIndex();var t=this.geometry,e=this.wireframeIndex,i=new jr;i.attributes=t.attributes,e&&(i.setIndex(new yr(e,1).setDynamic(this.dynamic)),i.setDrawRange(0,this.wireframeIndexCount)),this.wireframeGeometry=i},Qv.prototype.makeWireframeIndex=function(){var n=[];function t(t,e){if(e<t){var i=t;t=e,e=i}var r=n[t];return void 0===r?(n[t]=[e],!0):!r.includes(e)&&(r.push(e),!0)}var e=this.geometry,i=e.index;if(this.parameters.wireframe)if(i){var r,o=i.array,a=o.length;if(e.drawRange.count!==1/0&&(a=e.drawRange.count),this.wireframeIndex&&this.wireframeIndex.length>2*a)r=this.wireframeIndex;else r=bl(2*a,e.attributes.position.count);for(var s=0,c=n.length=0;c<a;c+=3){var u=o[c+0],h=o[c+1],l=o[c+2];t(u,h)&&(r[s+0]=u,r[s+1]=h,s+=2),t(h,l)&&(r[s+0]=h,r[s+1]=l,s+=2),t(l,u)&&(r[s+0]=l,r[s+1]=u,s+=2)}this.wireframeIndex=r,this.wireframeIndexCount=s,this.wireframeIndexVersion=this.indexVersion}else{var p,d=e.attributes.position.count;p=this.wireframeIndex&&this.wireframeIndex.length>2*d?this.wireframeIndex:bl(2*d,d);for(var f=0,m=0;f<d;f+=3)p[m+0]=f,p[m+1]=f+1,p[m+2]=f+1,p[m+3]=f+2,p[m+4]=f+2,p[m+5]=f,m+=6;this.wireframeIndex=p,this.wireframeIndexCount=2*d,this.wireframeIndexVersion=this.indexVersion}else this.wireframeIndex=new Uint16Array(0),this.wireframeIndexCount=0},Qv.prototype.updateWireframeIndex=function(){if(this.wireframeGeometry&&this.wireframeIndex){if(this.wireframeGeometry.setDrawRange(0,1/0),this.wireframeIndexVersion<this.indexVersion&&this.makeWireframeIndex(),this.wireframeIndex.length>this.wireframeGeometry.index.array.length)this.wireframeGeometry.setIndex(new yr(this.wireframeIndex,1).setDynamic(this.dynamic));else{var t=this.wireframeGeometry.getIndex();t.set(this.wireframeIndex),t.needsUpdate=0<this.wireframeIndexCount,t.updateRange.count=this.wireframeIndexCount}this.wireframeGeometry.setDrawRange(0,this.wireframeIndexCount)}},Qv.prototype.getRenderOrder=function(){var t=0;return this.isText?t=1:this.transparent&&(t=this.isSurface?3:2),t},Qv.prototype._getMesh=function(t){this.material||this.makeMaterial();var e,i=this.geometry,r=this[t];return(e=this.isLine?new Ra(i,r):this.isPoint?new Da(i,r):new An(i,r)).frustumCulled=!1,e.renderOrder=this.getRenderOrder(),e},Qv.prototype.getMesh=function(){return this._getMesh("material")},Qv.prototype.getWireframeMesh=function(){var t;return this.material||this.makeMaterial(),this.wireframeGeometry||this.makeWireframeGeometry(),(t=new Ra(this.wireframeGeometry,this.wireframeMaterial)).frustumCulled=!1,t.renderOrder=this.getRenderOrder(),t},Qv.prototype.getPickingMesh=function(){return this._getMesh("pickingMaterial")},Qv.prototype.getShader=function(t,e){return gd(t,this.getDefines(e))},Qv.prototype.getVertexShader=function(t){return this.getShader(this.vertexShader,t)},Qv.prototype.getFragmentShader=function(t){return this.getShader(this.fragmentShader,t)},Qv.prototype.getDefines=function(t){var e={};return this.parameters.clipNear&&(e.NEAR_CLIP=1),this.parameters.clipRadius&&(e.RADIUS_CLIP=1),"picking"===t?e.PICKING=1:(("background"===t||this.parameters.background)&&(e.NOLIGHT=1),this.parameters.flatShaded&&(e.FLAT_SHADED=1),this.parameters.opaqueBack&&(e.OPAQUE_BACK=1),this.parameters.diffuseInterior&&(e.DIFFUSE_INTERIOR=1),this.parameters.useInteriorColor&&(e.USE_INTERIOR_COLOR=1)),e},Qv.prototype.getParameters=function(){return this.parameters},Qv.prototype.addUniforms=function(t){this.uniforms=Ii.merge([this.uniforms,t]),this.pickingUniforms=Ii.merge([this.pickingUniforms,t])},Qv.prototype.addAttributes=function(t){for(var e in t){var i=void 0,r=t[e],n=this.attributeSize*Yv[r.type];r.value?(n!==r.value.length&&Bp.error("attribute value has wrong length",e),i=r.value):i=yl("float32",n),this.geometry.addAttribute(e,new yr(i,Yv[r.type]).setDynamic(this.dynamic))}},Qv.prototype.updateRenderOrder=function(){var e=this.getRenderOrder();function t(t){t.renderOrder=e}this.group.children.forEach(t),this.pickingGroup&&this.pickingGroup.children.forEach(t)},Qv.prototype.updateShader=function(){var t=this.material,e=this.wireframeMaterial,i=this.pickingMaterial;t.vertexShader=this.getVertexShader(),t.fragmentShader=this.getFragmentShader(),t.needsUpdate=!0,e.vertexShader=this.getShader("Line.vert"),e.fragmentShader=this.getShader("Line.frag"),e.needsUpdate=!0,i.vertexShader=this.getVertexShader("picking"),i.fragmentShader=this.getFragmentShader("picking"),i.needsUpdate=!0},Qv.prototype.setParameters=function(t){var e=t,i=this.parameterTypes,r=this.parameters,n={},o={},a=!1,s=!1;for(var c in e){var u=e[c];void 0!==u&&(r[c]=u,void 0!==i[c]&&(i[c].property&&(!0!==i[c].property?n[i[c].property]=u:n[c]=u),i[c].uniform&&(!0!==i[c].uniform?o[i[c].uniform]=u:o[c]=u),i[c].updateShader&&(a=!0),i[c].updateVisibility&&(s=!0),this.dynamic&&"wireframe"===c&&!0===u&&this.updateWireframeIndex(),"flatShaded"===c&&(this.material.extensions.derivatives=this.parameters.flatShaded||this.isText),"forceTransparent"===c&&(n.transparent=this.transparent),"matrix"===c&&(this.matrix=u)))}this.setProperties(n),this.setUniforms(o),a&&this.updateShader(),s&&this.setVisibility(this.visible)},Qv.prototype.setAttributes=function(t){var e=this.geometry,i=e.attributes;for(var r in t)if("picking"!==r){var n=t[r],o=n.length;if("index"===r){var a=e.getIndex();e.setDrawRange(0,1/0),o>a.array.length?e.setIndex(new yr(n,1).setDynamic(this.dynamic)):(a.set(n),a.needsUpdate=0<o,a.updateRange.count=o,e.setDrawRange(0,o)),this.indexVersion++,this.parameters.wireframe&&this.updateWireframeIndex()}else{var s=i[r];o>s.array.length?e.addAttribute(r,new yr(n,s.itemSize).setDynamic(this.dynamic)):(i[r].set(n),i[r].needsUpdate=0<o,i[r].updateRange.count=o)}}},Qv.prototype.setUniforms=function(t){if(t){var e=this.material.uniforms,i=this.wireframeMaterial.uniforms,r=this.pickingMaterial.uniforms;for(var n in t)"opacity"===n&&this.setProperties({transparent:this.transparent}),void 0!==e[n]&&(e[n].value.isVector3?e[n].value.copy(t[n]):e[n].value.set?e[n].value.set(t[n]):e[n].value=t[n]),void 0!==i[n]&&(i[n].value.isVector3?i[n].value.copy(t[n]):i[n].value.set?i[n].value.set(t[n]):i[n].value=t[n]),void 0!==r[n]&&(r[n].value.isVector3?r[n].value.copy(t[n]):r[n].value.set?r[n].value.set(t[n]):r[n].value=t[n])}},Qv.prototype.setProperties=function(t){if(t){var e=this.material,i=this.wireframeMaterial,r=this.pickingMaterial;for(var n in t){var o=n,a=t[o];"transparent"===o?this.updateRenderOrder():"side"===o&&(a=qv(a)),e[o]=a,i[o]=a,r[o]=a}e.needsUpdate=!0,i.needsUpdate=!0,r.needsUpdate=!0}},Qv.prototype.setVisibility=function(t){this.visible=t,this.parameters.wireframe?(this.group.visible=!1,this.wireframeGroup.visible=t,this.pickable&&(this.pickingGroup.visible=!1)):(this.group.visible=t,this.wireframeGroup.visible=!1,this.pickable&&(this.pickingGroup.visible=t))},Qv.prototype.dispose=function(){this.material&&this.material.dispose(),this.wireframeMaterial&&this.wireframeMaterial.dispose(),this.pickingMaterial&&this.pickingMaterial.dispose(),this.geometry.dispose(),this.wireframeGeometry&&this.wireframeGeometry.dispose()},Object.defineProperties(Qv.prototype,ty);var ey=function(i){function t(t,e){void 0===e&&(e={}),i.call(this,t,e),this.vertexShader="Mesh.vert",this.fragmentShader="Mesh.frag",this.addAttributes({normal:{type:"v3",value:t.normal}}),void 0===t.normal&&this.geometry.computeVertexNormals()}return i&&(t.__proto__=i),(t.prototype=Object.create(i&&i.prototype)).constructor=t}(Qv),iy=function(t){function e(){t.apply(this,arguments),this.isSurface=!0}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e}(ey);function ry(t){t.visible=!0}function ny(t){t.visible=!1}var oy=function(t){this.group=new ka,this.wireframeGroup=new ka,this.pickingGroup=new ka,this.frontMeshes=[],this.backMeshes=[],this.size=t.size,this.side=t.parameters.side,this.visible=t.visible,this.geometry=t.geometry,this.picking=t.picking,this.group=new ka,this.wireframeGroup=new ka,this.pickingGroup=new ka,this.matrix=t.matrix;var e=t,i=new t.constructor({position:new Float32Array(0)});e.makeMaterial(),i.makeMaterial(),i.picking=t.picking,i.geometry=t.geometry,i.wireframeGeometry=t.wireframeGeometry,i.setParameters(t.getParameters()),i.updateShader(),e.setParameters({side:"front"}),i.setParameters({side:"back",opacity:i.parameters.opacity}),this.buffer=t,this.frontBuffer=e,this.backBuffer=i},ay={matrix:{configurable:!0},pickable:{configurable:!0},parameters:{configurable:!0}};ay.matrix.set=function(t){Qv.prototype.setMatrix.call(this,t)},ay.matrix.get=function(){return this.group.matrix.clone()},ay.pickable.get=function(){return!!this.picking&&!this.parameters.disablePicking},ay.parameters.get=function(){return this.buffer.parameters},oy.prototype.getParameters=function(){var t=Object.assign({},this.buffer.parameters);return t.side=this.side,t},oy.prototype.getMesh=function(t){var e,i;return t?(i=this.backBuffer.getPickingMesh(),e=this.frontBuffer.getPickingMesh()):(i=this.backBuffer.getMesh(),e=this.frontBuffer.getMesh()),this.frontMeshes.push(e),this.backMeshes.push(i),this.setParameters({side:this.side}),(new ka).add(i,e)},oy.prototype.getWireframeMesh=function(){return this.buffer.getWireframeMesh()},oy.prototype.getPickingMesh=function(){return this.getMesh(!0)},oy.prototype.setAttributes=function(t){this.buffer.setAttributes(t)},oy.prototype.setParameters=function(t){"front"===(t=Object.assign({},t)).side?(this.frontMeshes.forEach(ry),this.backMeshes.forEach(ny)):"back"===t.side?(this.frontMeshes.forEach(ny),this.backMeshes.forEach(ry)):"double"===t.side&&(this.frontMeshes.forEach(ry),this.backMeshes.forEach(ry)),void 0!==t.side&&(this.side=t.side),delete t.side,void 0!==t.matrix&&(this.matrix=t.matrix),delete t.matrix,this.frontBuffer.setParameters(t),void 0!==t.wireframe&&(this.wireframe=t.wireframe,this.setVisibility(this.visible)),delete t.wireframe,this.backBuffer.setParameters(t)},oy.prototype.setVisibility=function(t){this.visible=t,this.parameters.wireframe?(this.group.visible=!1,this.wireframeGroup.visible=t,this.pickable&&(this.pickingGroup.visible=!1)):(this.group.visible=t,this.wireframeGroup.visible=!1,this.pickable&&(this.pickingGroup.visible=t))},oy.prototype.dispose=function(){this.frontBuffer.dispose(),this.backBuffer.dispose()},Object.defineProperties(oy.prototype,ay),Hp.add("shader/Line.vert","uniform float clipNear;\nuniform vec3 clipCenter;\nvarying vec3 vViewPosition;\n#if defined( RADIUS_CLIP )\nvarying vec3 vClipCenter;\n#endif\n#include color_pars_vertex\nvoid main(){\n#include color_vertex\n#include begin_vertex\n#include project_vertex\nvViewPosition = -mvPosition.xyz;\n#if defined( RADIUS_CLIP )\nvClipCenter = -( modelViewMatrix * vec4( clipCenter, 1.0 ) ).xyz;\n#endif\n#include nearclip_vertex\n}"),Hp.add("shader/Line.frag","uniform float opacity;\nuniform float clipNear;\nuniform float clipRadius;\nvarying vec3 vViewPosition;\n#if defined( RADIUS_CLIP )\nvarying vec3 vClipCenter;\n#endif\n#include common\n#include color_pars_fragment\n#include fog_pars_fragment\nvoid main(){\n#include nearclip_fragment\n#include radiusclip_fragment\ngl_FragColor = vec4( vColor, opacity );\n#include premultiplied_alpha_fragment\n#include tonemapping_fragment\n#include encodings_fragment\n#include fog_fragment\n}");var sy=function(t){function e(){t.apply(this,arguments),this.isLine=!0,this.vertexShader="Line.vert",this.fragmentShader="Line.frag"}return t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e}(Qv),cy=function(r){function t(t,e,i){r.call(this,t,e,i),this.type="surface",this.parameters=Object.assign({isolevelType:{type:"select",options:{value:"value",sigma:"sigma"}},isolevel:{type:"number",precision:2,max:1e3,min:-1e3},negateIsolevel:{type:"boolean"},isolevelScroll:{type:"boolean"},smooth:{type:"integer",precision:1,max:10,min:0},background:{type:"boolean",rebuild:!0},opaqueBack:{type:"boolean",buffer:!0},boxSize:{type:"integer",precision:1,max:100,min:0},colorVolume:{type:"hidden"},contour:{type:"boolean",rebuild:!0},useWorker:{type:"boolean",rebuild:!0},wrap:{type:"boolean",rebuild:!0}},this.parameters),t instanceof Wv?(this.surface=void 0,this.volume=t):(this.surface=t,this.volume=void 0),this.boxCenter=new Qe,this.__boxCenter=new Qe,this.box=new Ai,this.__box=new Ai,this._position=new Qe,this.setBox=function(){this._position.copy(e.translationGroup.position).negate(),this._position.equals(this.boxCenter)||this.setParameters({boxCenter:this._position})},this.viewer.signals.ticked.add(this.setBox,this),this.init(i)}return r&&(t.__proto__=r),((t.prototype=Object.create(r&&r.prototype)).constructor=t).prototype.init=function(t){var e=t||{};e.colorScheme=al(e.colorScheme,"uniform"),e.colorValue=al(e.colorValue,14540253),this.isolevelType=al(e.isolevelType,"sigma"),this.isolevel=al(e.isolevel,2),this.negateIsolevel=al(e.negateIsolevel,!1),this.isolevelScroll=al(e.isolevelScroll,!1),this.smooth=al(e.smooth,0),this.background=al(e.background,!1),this.opaqueBack=al(e.opaqueBack,!0),this.boxSize=al(e.boxSize,0),this.colorVolume=al(e.colorVolume,void 0),this.contour=al(e.contour,!1),this.useWorker=al(e.useWorker,!0),this.wrap=al(e.wrap,!1),r.prototype.init.call(this,e),this.build()},t.prototype.attach=function(t){var e=this;this.bufferList.forEach(function(t){e.viewer.add(t)}),this.setVisibility(this.visible),t()},t.prototype.prepare=function(e){var t,i=this;if(this.volume)if(t="sigma"===this.isolevelType?this.volume.getValueForSigma(this.isolevel):this.isolevel,this.negateIsolevel&&(t*=-1),!this.surface||this.__isolevel!==t||this.__smooth!==this.smooth||this.__contour!==this.contour||this.__wrap!==this.wrap||this.__boxSize!==this.boxSize||0<this.boxSize&&!this.__boxCenter.equals(this.boxCenter)){this.__isolevel=t,this.__smooth=this.smooth,this.__contour=this.contour,this.__wrap=this.wrap,this.__boxSize=this.boxSize,this.__boxCenter.copy(this.boxCenter),this.__box.copy(this.box);var r=function(t){i.surface=t,e()};this.useWorker?this.volume.getSurfaceWorker(t,this.smooth,this.boxCenter,this.boxSize,this.contour,this.wrap,r):r(this.volume.getSurface(t,this.smooth,this.boxCenter,this.boxSize,this.contour,this.wrap))}else e();else e()},t.prototype.create=function(){var t,e={position:this.surface.getPosition(),color:this.surface.getColor(this.getColorParams()),index:this.surface.getIndex()};if(this.contour)t=new sy(e,this.getBufferParams({wireframe:!1}));else{e.normal=this.surface.getNormal(),e.picking=this.surface.getPicking();var i=new iy(e,this.getBufferParams({background:this.background,opaqueBack:this.opaqueBack,dullInterior:!1}));t=new oy(i)}this.bufferList.push(t)},t.prototype.update=function(t){if(0!==this.bufferList.length){var e={};(t=t||{}).position&&(e.position=this.surface.getPosition()),t.color&&(e.color=this.surface.getColor(this.getColorParams())),t.index&&(e.index=this.surface.getIndex()),t.normal&&(e.normal=this.surface.getNormal()),this.bufferList.forEach(function(t){t.setAttributes(e)})}},t.prototype.setParameters=function(t,e,i){return t&&void 0!==t.isolevelType&&this.volume&&("value"===this.isolevelType&&"sigma"===t.isolevelType?this.isolevel=this.volume.getSigmaForValue(this.isolevel):"sigma"===this.isolevelType&&"value"===t.isolevelType&&(this.isolevel=this.volume.getValueForSigma(this.isolevel)),this.isolevelType=t.isolevelType),t&&t.boxCenter&&(this.boxCenter.copy(t.boxCenter),delete t.boxCenter),t&&t.wireframe&&(t.contour||void 0===t.contour&&this.contour)&&(t.wireframe=!1),r.prototype.setParameters.call(this,t,e,i),this.volume&&this.volume.getBox(this.boxCenter,this.boxSize,this.box),t&&void 0!==t.colorVolume&&(e.color=!0),this.surface&&(void 0!==t.isolevel||void 0!==t.negateIsolevel||void 0!==t.smooth||void 0!==t.wrap||void 0!==t.boxSize||0<this.boxSize&&!this.__box.equals(this.box))&&this.build({position:!0,color:!0,index:!0,normal:!this.contour}),this},t.prototype.getColorParams=function(){var t=r.prototype.getColorParams.call(this);return t.volume=this.colorVolume,t},t.prototype.dispose=function(){this.viewer.signals.ticked.remove(this.setBox,this),r.prototype.dispose.call(this)},t}(Xf),uy=function(){};uy.zoomScroll=function(t,e){t.trackballControls.zoom(e)},uy.clipNearScroll=function(t,e){var i=t.getParameters();t.setParameters({clipNear:i.clipNear+e/10})},uy.focusScroll=function(t,e){var i=2*t.getParameters().clipNear,r=Math.sign(e)*function(t,e,i){if(e<t)return t;var r=t/e;return((2*i-e)*r+(2*e-3*i))*r*r+i}((100-i)/10,5,.2);t.setFocus(i+r)},uy.zoomFocusScroll=function(t,e){t.trackballControls.zoom(e);var i=t.viewer.camera.position.z;t.setFocus(100-Math.abs(i/8))},uy.isolevelScroll=function(t,e){var r=Math.sign(e)/10;t.eachRepresentation(function(t,e){if(t.repr instanceof cy){var i=t.getParameters();i.isolevelScroll&&t.setParameters({isolevel:i.isolevel+r})}})},uy.panDrag=function(t,e,i){t.trackballControls.pan(e,i)},uy.rotateDrag=function(t,e,i){t.trackballControls.rotate(e,i)},uy.zRotateDrag=function(t,e,i){t.trackballControls.zRotate(e,i)},uy.zoomDrag=function(t,e,i){t.trackballControls.zoom((e+i)/-2)},uy.zoomFocusDrag=function(t,e,i){t.trackballControls.zoom((e+i)/-2);var r=t.viewer.camera.position.z;t.setFocus(100-Math.abs(r/8))},uy.panComponentDrag=function(t,e,i){t.trackballControls.panComponent(e,i)},uy.panAtomDrag=function(t,e,i){t.trackballControls.panAtom(e,i)},uy.rotateComponentDrag=function(t,e,i){t.trackballControls.rotateComponent(e,i)},uy.movePick=function(t,e){e&&t.animationControls.move(e.position.clone())},uy.tooltipPick=function(t,e){var i=t.tooltip;if(t.getParameters().tooltip&&e){var r=e.mouse.position;i.innerText=e.getLabel(),i.style.bottom=window.innerHeight-r.y+3+"px",i.style.left=r.x+3+"px",i.style.display="block"}else i.style.display="none"};var hy={default:[["scroll",uy.zoomScroll],["scroll-shift",uy.focusScroll],["scroll-ctrl",uy.isolevelScroll],["scroll-shift-ctrl",uy.zoomFocusScroll],["drag-left",uy.rotateDrag],["drag-right",uy.panDrag],["drag-ctrl-left",uy.panDrag],["drag-ctrl-right",uy.zRotateDrag],["drag-shift-left",uy.zoomDrag],["drag-middle",uy.zoomFocusDrag],["drag-ctrl-shift-right",uy.panComponentDrag],["drag-ctrl-shift-left",uy.rotateComponentDrag],["clickPick-right",uy.measurePick=function(t,e){if(e&&(e.atom||e.bond)){var i=e.atom||e.closestBondAtom;e.component.measurePick(i)}else t.measureClear()}],["clickPick-ctrl-left",uy.measurePick],["clickPick-middle",uy.movePick],["clickPick-left",uy.movePick],["hoverPick",uy.tooltipPick]],pymol:[["drag-left",uy.rotateDrag],["drag-middle",uy.panDrag],["drag-right",uy.zoomDrag],["drag-shift-right",uy.focusScroll],["clickPick-ctrl+shift-middle",uy.movePick],["hoverPick",uy.tooltipPick]],coot:[["scroll",uy.isolevelScroll],["drag-left",uy.rotateDrag],["drag-middle",uy.panDrag],["drag-ctrl-left",uy.panDrag],["drag-right",uy.zoomFocusDrag],["drag-ctrl-right",uy.focusScroll],["clickPick-middle",uy.movePick],["hoverPick",uy.tooltipPick]],astexviewer:[["drag-left",uy.rotateDrag],["drag-ctrl-left",uy.panDrag],["drag-shift-left",uy.zoomDrag],["scroll",uy.focusScroll],["clickPick-middle",uy.movePick],["hoverPick",uy.tooltipPick]]};function ly(t){var e=t.split(/[-+]/),i="";e.includes("scroll")&&(i="scroll"),e.includes("drag")&&(i="drag"),e.includes("click")&&(i="click"),e.includes("doubleClick")&&(i="doubleClick"),e.includes("hover")&&(i="hover"),e.includes("clickPick")&&(i="clickPick"),e.includes("hoverPick")&&(i="hoverPick");var r=0;e.includes("alt")&&(r+=1),e.includes("ctrl")&&(r+=2),e.includes("meta")&&(r+=4),e.includes("shift")&&(r+=8);var n=0;return e.includes("left")&&(n+=1),e.includes("right")&&(n+=2),e.includes("middle")&&(n+=4),[i,r,n]}var py=function(t,e){void 0===e&&(e={}),this.stage=t,this.actionList=[],this.mouse=t.mouseObserver,this.disabled=e.disabled||!1,this.preset(e.preset||"default")};py.prototype.run=function(e){for(var i=this,r=[],t=arguments.length-1;0<t--;)r[t]=arguments[t+1];if(!this.disabled){var n=this.mouse.key||0,o=this.mouse.buttons||0;this.actionList.forEach(function(t){t.type===e&&t.key===n&&t.button===o&&t.callback.apply(t,[i.stage].concat(r))})}},py.prototype.add=function(t,e){var i=ly(t),r=i[0],n=i[1],o=i[2];this.actionList.push({type:r,key:n,button:o,callback:e})},py.prototype.remove=function(t,e){var i=t.includes("*"),r=ly(t),n=r[0],o=r[1],a=r[2],s=this.actionList.filter(function(t){return!((t.type===n||i&&""===n)&&(t.key===o||i&&0===o)&&(t.button===a||i&&0===a)&&(t.callback===e||void 0===e))});this.actionList=s},py.prototype.preset=function(t){var e=this;this.clear(),(hy[t]||[]).forEach(function(t){return e.add(t[0],t[1])})},py.prototype.clear=function(){this.actionList.length=0};var dy=function(){};dy.autoView=function(t){t.autoView(1e3)},dy.toggleAnimations=function(t){t.animationControls.toggle()},dy.toggleRock=function(t){t.toggleRock()};var fy={default:[["i",dy.toggleSpin=function(t){t.toggleSpin()}],["k",dy.toggleRock],["p",dy.toggleAnimations],["a",dy.toggleAntialiasing=function(t){var e=t.getParameters();t.setParameters({sampleLevel:-1===e.sampleLevel?0:-1})}],["r",dy.autoView]]},my=function(t,e){void 0===e&&(e={}),this.stage=t,this.actionList=[],this.disabled=e.disabled||!1,this.preset(e.preset||"default")};my.prototype.run=function(e){var i=this;this.disabled||this.actionList.forEach(function(t){t.key===e&&t.callback(i.stage)})},my.prototype.add=function(t,e){this.actionList.push({key:t,callback:e})},my.prototype.remove=function(e,i){var t=this.actionList.filter(function(t){return!(t.key===e&&(t.callback===i||void 0===i))});this.actionList=t},my.prototype.preset=function(t){var e=this;this.clear(),(fy[t]||[]).forEach(function(t){return e.add(t[0],t[1])})},my.prototype.clear=function(){this.actionList.length=0};var gy=function(t){this.stage=t,this.stage=t,this.mouse=t.mouseObserver,this.controls=t.mouseControls,this.mouse.signals.clicked.add(this._onClick,this),this.mouse.signals.hovered.add(this._onHover,this)};gy.prototype._onClick=function(t,e){var i=this.stage.pickingControls.pick(t,e);this.stage.signals.clicked.dispatch(i),this.controls.run("clickPick",i)},gy.prototype._onHover=function(t,e){var i=this.stage.pickingControls.pick(t,e);i&&this.mouse.down.equals(this.mouse.position)&&(this.stage.transformComponent=i.component,this.stage.transformAtom=i.atom),this.stage.signals.hovered.dispatch(i),this.controls.run("hoverPick",i)},gy.prototype.dispose=function(){this.mouse.signals.clicked.remove(this._onClick,this),this.mouse.signals.hovered.remove(this._onHover,this)};var vy=function(t){this.stage=t,this.stage=t,this.mouse=t.mouseObserver,this.controls=t.mouseControls,this.mouse.signals.moved.add(this._onMove,this),this.mouse.signals.scrolled.add(this._onScroll,this),this.mouse.signals.dragged.add(this._onDrag,this),this.mouse.signals.clicked.add(this._onClick,this),this.mouse.signals.hovered.add(this._onHover,this),this.mouse.signals.doubleClicked.add(this._onDblclick,this)};vy.prototype._onMove=function(){this.stage.tooltip.style.display="none"},vy.prototype._onScroll=function(t){this.controls.run("scroll",t)},vy.prototype._onDrag=function(t,e){this.controls.run("drag",t,e)},vy.prototype._onClick=function(t,e){this.controls.run("click",t,e)},vy.prototype._onDblclick=function(t,e){this.controls.run("doubleClick",t,e)},vy.prototype._onHover=function(t,e){this.controls.run("hover",t,e)},vy.prototype.dispose=function(){this.mouse.signals.moved.remove(this._onMove,this),this.mouse.signals.scrolled.remove(this._onScroll,this),this.mouse.signals.dragged.remove(this._onDrag,this),this.mouse.signals.clicked.remove(this._onClick,this),this.mouse.signals.hovered.remove(this._onHover,this)};var yy=function(t){this.stage=t,this.viewer=t.viewer,this.animationControls=t.animationControls,this.viewer.signals.ticked.add(this._onTick,this)};yy.prototype._onTick=function(t){this.animationControls.run(t)},yy.prototype.dispose=function(){this.viewer.signals.ticked.remove(this._onTick,this)};var by=!!Ip&&{passive:!0},xy=function(t){this.stage=t,this.stage=t,this.controls=t.keyControls,this.domElement=t.viewer.renderer.domElement,this.domElement.setAttribute("tabIndex","-1"),this.domElement.style.outline="none",this._focusDomElement=this._focusDomElement.bind(this),this._onKeydown=this._onKeydown.bind(this),this._onKeyup=this._onKeyup.bind(this),this._onKeypress=this._onKeypress.bind(this),this.domElement.addEventListener("mousedown",this._focusDomElement),this.domElement.addEventListener("touchstart",this._focusDomElement,by),this.domElement.addEventListener("keydown",this._onKeydown),this.domElement.addEventListener("keyup",this._onKeyup),this.domElement.addEventListener("keypress",this._onKeypress)};xy.prototype._onKeydown=function(){},xy.prototype._onKeyup=function(){},xy.prototype._onKeypress=function(t){var e;e="key"in KeyboardEvent.prototype?t.key:String.fromCharCode(t.which||t.keyCode),this.controls.run(e)},xy.prototype._focusDomElement=function(){this.domElement.focus()},xy.prototype.dispose=function(){this.domElement.removeEventListener("mousedown",this._focusDomElement),this.domElement.removeEventListener("touchstart",this._focusDomElement,by),this.domElement.removeEventListener("keydown",this._onKeypress),this.domElement.removeEventListener("keyup",this._onKeypress),this.domElement.removeEventListener("keypress",this._onKeypress)};var _y=function(t,e,i,r){void 0===r&&(r={}),this.component=t,this.position=e,this.offsetX=al(r.offsetX,0),this.offsetY=al(r.offsetY,0),this.visible=al(r.visible,!0),this.stage=t.stage,this.viewer=t.stage.viewer,this._viewerPosition=new Qe,this._updateViewerPosition(),this._canvasPosition=new Ze,this._cameraPosition=new Qe,this.element=document.createElement("div"),Object.assign(this.element.style,{display:"block",position:"absolute",pointerEvents:"none",whiteSpace:"nowrap",left:"-10000px"}),this.viewer.wrapper.appendChild(this.element),this.setContent(i),this.updateVisibility(),this.viewer.signals.rendered.add(this._update,this),this.component.signals.matrixChanged.add(this._updateViewerPosition,this)};_y.prototype.setContent=function(t){var e=this.element.style.display;if("none"===e&&(this.element.style.left="-10000px",this.element.style.display="block"),t instanceof HTMLElement)this.element.appendChild(t);else{var i=document.createElement("div");i.innerText=t,Object.assign(i.style,{backgroundColor:"rgba( 0, 0, 0, 0.6 )",color:"lightgrey",padding:"8px",fontFamily:"sans-serif"}),this.element.appendChild(i)}this._clientRect=this.element.getBoundingClientRect(),"none"===e&&(this.element.style.display=e)},_y.prototype.setVisibility=function(t){this.visible=t,this.updateVisibility()},_y.prototype.getVisibility=function(){return this.visible&&this.component.parameters.visible},_y.prototype.updateVisibility=function(){this.element.style.display=this.getVisibility()?"block":"none"},_y.prototype._updateViewerPosition=function(){this._viewerPosition.copy(this.position).applyMatrix4(this.component.matrix)},_y.prototype._update=function(){if(this.getVisibility()){var t=this.element.style,e=this._canvasPosition,i=this._viewerPosition,r=this._clientRect;if(this._cameraPosition.copy(i).add(this.viewer.translationGroup.position).applyMatrix4(this.viewer.rotationGroup.matrix).sub(this.viewer.camera.position),this._cameraPosition.z<0)t.display="none";else{t.display="block";var n=this._cameraPosition.length(),o=this.viewer.scene.fog;t.opacity=(1-Nl(o.near,o.far,n)).toString(),t.zIndex=Math.round(100*(o.far-n)).toString(),this.stage.viewerControls.getPositionOnCanvas(i,e),t.bottom=this.offsetX+e.y+r.height/2+"px",t.left=this.offsetY+e.x-r.width/2+"px"}}},_y.prototype.dispose=function(){this.viewer.wrapper.removeChild(this.element),this.viewer.signals.ticked.remove(this._update,this),this.component.signals.matrixChanged.remove(this._updateViewerPosition,this)};var wy=new Ke,Sy=new Qe,Ay=new Je,My=function(t){this.component=t,this.signals={changed:new Wl},this.stage=t.stage,this.viewer=t.stage.viewer},Py={position:{configurable:!0},rotation:{configurable:!0}};Py.position.get=function(){return this.component.position},Py.rotation.get=function(){return this.component.quaternion},My.prototype.changed=function(){this.component.updateMatrix(),this.viewer.requestRender(),this.signals.changed.dispatch()},My.prototype.spin=function(t,e){wy.getInverse(this.viewer.rotationGroup.matrix),Sy.copy(wl(t)).applyMatrix4(wy),wy.extractRotation(this.component.transform),wy.premultiply(this.viewer.rotationGroup.matrix),wy.getInverse(wy),Sy.copy(wl(t)),Sy.applyMatrix4(wy),wy.makeRotationAxis(Sy,e),Ay.setFromRotationMatrix(wy),this.component.quaternion.premultiply(Ay),this.changed()},Object.defineProperties(My.prototype,Py);var Ey={"":"",vdw:"by vdW radius",covalent:"by covalent radius",sstruc:"by secondary structure",bfactor:"by bfactor",size:"size",data:"data"},Cy=function(t){void 0===t&&(t={}),this.max=10,this.type=al(t.type,"size"),this.scale=al(t.scale,1),this.size=al(t.size,1),this.data=al(t.data,{})};Cy.prototype.atomRadius=function(t){var e;switch(this.type){case"vdw":e=t.vdw;break;case"covalent":e=t.covalent;break;case"bfactor":e=t.bfactor||1;break;case"sstruc":var i=t.sstruc;e="h"===i?.25:"g"===i?.25:"i"===i?.25:"e"===i?.25:"b"===i?.25:vg.includes(t.atomname)?.4:.1;break;case"data":e=al(this.data[t.index],1);break;default:e=this.size}return Math.min(e*this.scale,this.max)},Cy.types=Ey;var Ty=new Qe(-1,-1,-1),Iy=new Ke,Ry=function(t){var e=t.rows,i=e/3,r=new _v(e,3),n=new _v(3,3),o=new _v(1,3),a=new _v(3,3),s=new _v(3,3),c=Mv(t);Pv(t,c),wv(r,t),Sv(n,r,r),Iv(n,o,a,s);var u=new Qe(c[0],c[1],c[2]),h=new Qe(a.data[0],a.data[3],a.data[6]),l=new Qe(a.data[1],a.data[4],a.data[7]),p=new Qe(a.data[2],a.data[5],a.data[8]),d=h.clone().multiplyScalar(Math.sqrt(o.data[0]/i)),f=l.clone().multiplyScalar(Math.sqrt(o.data[1]/i)),m=p.clone().multiplyScalar(Math.sqrt(o.data[2]/i));this.begA=u.clone().sub(d),this.endA=u.clone().add(d),this.begB=u.clone().sub(f),this.endB=u.clone().add(f),this.begC=u.clone().sub(m),this.endC=u.clone().add(m),this.center=u,this.vecA=d,this.vecB=f,this.vecC=m,this.normVecA=h,this.normVecB=l,this.normVecC=p};Ry.prototype.getBasisMatrix=function(t){void 0===t&&(t=new Ke);var e=t;return e.makeBasis(this.normVecB,this.normVecA,this.normVecC),e.determinant()<0&&e.scale(Ty),e},Ry.prototype.getRotationQuaternion=function(t){void 0===t&&(t=new Je);var e=t;return e.setFromRotationMatrix(this.getBasisMatrix(Iy)),e.inverse()},Ry.prototype.getProjectedScaleForAtoms=function(t){var s=-1/0,c=-1/0,u=-1/0,h=-1/0,l=-1/0,p=-1/0,d=new Qe,f=new Qe,m=this.center,g=this.normVecA,v=this.normVecB,y=this.normVecC;return t.eachAtom(function(t){Kf(d.copy(t),g,m);var e=f.subVectors(d,m).normalize().dot(g),i=d.distanceTo(m);0<e?s<i&&(s=i):c<i&&(c=i),Kf(d.copy(t),v,m);var r=f.subVectors(d,m).normalize().dot(v),n=d.distanceTo(m);0<r?u<n&&(u=n):h<n&&(h=n),Kf(d.copy(t),y,m);var o=f.subVectors(d,m).normalize().dot(y),a=d.distanceTo(m);0<o?l<a&&(l=a):p<a&&(p=a)}),{d1a:s,d2a:u,d3a:l,d1b:-c,d2b:-h,d3b:-p}};var Ly=function(t,e,i,r){this.volume=t,this.setFilter(e,i,r)},Oy={header:{configurable:!0},matrix:{configurable:!0},normalMatrix:{configurable:!0},inverseMatrix:{configurable:!0},center:{configurable:!0},boundingBox:{configurable:!0},min:{configurable:!0},max:{configurable:!0},mean:{configurable:!0},rms:{configurable:!0}};Oy.header.get=function(){return this.volume.header},Oy.matrix.get=function(){return this.volume.matrix},Oy.normalMatrix.get=function(){return this.volume.normalMatrix},Oy.inverseMatrix.get=function(){return this.volume.inverseMatrix},Oy.center.get=function(){return this.volume.center},Oy.boundingBox.get=function(){return this.volume.boundingBox},Oy.min.get=function(){return this.volume.min},Oy.max.get=function(){return this.volume.max},Oy.mean.get=function(){return this.volume.mean},Oy.rms.get=function(){return this.volume.rms},Ly.prototype._getFilterHash=function(t,e,i){return JSON.stringify([t,e,i])},Ly.prototype.setFilter=function(t,e,i){isNaN(t)&&this.header&&(t=this.header.DMEAN+2*this.header.ARMS),t=void 0===t||isNaN(t)?-1/0:t,e=al(e,1/0),i=al(i,!1);var r=this.volume.data,n=this.volume.position,o=this.volume.atomindex,a=this._getFilterHash(t,e,i);if(a!==this._filterHash){if(t===-1/0&&e===1/0)this.data=r,this.position=n,this.atomindex=o;else{var s=r.length;this._dataBuffer||(this._dataBuffer=new ArrayBuffer(4*s),this._positionBuffer=new ArrayBuffer(3*s*4),o&&(this._atomindexBuffer=new ArrayBuffer(4*s)));var c,u=new Float32Array(this._dataBuffer),h=new Float32Array(this._positionBuffer);o&&(c=new Uint32Array(this._atomindexBuffer));for(var l=0,p=0;p<s;++p){var d=3*p,f=r[p];if(!i&&t<=f&&f<=e||i&&(f<t||e<f)){var m=3*l;u[l]=f,h[m+0]=n[d+0],h[m+1]=n[d+1],h[m+2]=n[d+2],o&&(c[l]=o[p]),l+=1}}this.data=new Float32Array(this._dataBuffer,0,l),this.position=new Float32Array(this._positionBuffer,0,3*l),o&&(this.atomindex=new Float32Array(this._atomindexBuffer,0,l))}this._filterHash=a}},Object.defineProperties(Ly.prototype,Oy),Ly.prototype.getValueForSigma=Wv.prototype.getValueForSigma,Ly.prototype.getSigmaForValue=Wv.prototype.getSigmaForValue,Ly.prototype.getDataAtomindex=Wv.prototype.getDataAtomindex,Ly.prototype.getDataPosition=Wv.prototype.getDataPosition,Ly.prototype.getDataColor=Wv.prototype.getDataColor,Ly.prototype.getDataPicking=Wv.prototype.getDataPicking,Ly.prototype.getDataSize=Wv.prototype.getDataSize;var Dy=function(t,e){var i=jm({nodeArray1:t.atomIndex1,nodeArray2:t.atomIndex2,edgeCount:t.count,nodeCount:e});this.countArray=i.countArray,this.offsetArray=i.offsetArray,this.indexArray=i.indexArray},ky=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e;var i={_defaultFields:{configurable:!0}};return i._defaultFields.get=function(){return[["atomIndex1",1,"int32"],["atomIndex2",1,"int32"],["bondOrder",1,"int8"]]},e.prototype.addBond=function(t,e,i){this.growIfFull();var r=this.count,n=t.index,o=e.index;n<o?(this.atomIndex1[r]=n,this.atomIndex2[r]=o):(this.atomIndex2[r]=n,this.atomIndex1[r]=o),i&&(this.bondOrder[r]=i),this.count+=1},e.prototype.addBondIfConnected=function(t,e,i){return!!t.connectedTo(e)&&(this.addBond(t,e,i),!0)},Object.defineProperties(e.prototype,i),e}(Nm),By=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e;var i={_defaultFields:{configurable:!0}};return i._defaultFields.get=function(){return[["residueIndex",1,"uint32"],["atomTypeId",1,"uint16"],["x",1,"float32"],["y",1,"float32"],["z",1,"float32"],["serial",1,"int32"],["bfactor",1,"float32"],["altloc",1,"uint8"],["occupancy",1,"float32"]]},e.prototype.setAltloc=function(t,e){this.altloc[t]=e.charCodeAt(0)},e.prototype.getAltloc=function(t){var e=this.altloc[t];return e?String.fromCharCode(e):""},Object.defineProperties(e.prototype,i),e}(Nm),Ny=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e;var i={_defaultFields:{configurable:!0}};return i._defaultFields.get=function(){return[["chainIndex",1,"uint32"],["atomOffset",1,"uint32"],["atomCount",1,"uint16"],["residueTypeId",1,"uint16"],["resno",1,"int32"],["sstruc",1,"uint8"],["inscode",1,"uint8"]]},e.prototype.setSstruc=function(t,e){this.sstruc[t]=e.charCodeAt(0)},e.prototype.getSstruc=function(t){var e=this.sstruc[t];return e?String.fromCharCode(e):""},e.prototype.setInscode=function(t,e){this.inscode[t]=e.charCodeAt(0)},e.prototype.getInscode=function(t){var e=this.inscode[t];return e?String.fromCharCode(e):""},Object.defineProperties(e.prototype,i),e}(Nm),Fy=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e;var i={_defaultFields:{configurable:!0}};return i._defaultFields.get=function(){return[["entityIndex",1,"uint16"],["modelIndex",1,"uint16"],["residueOffset",1,"uint32"],["residueCount",1,"uint32"],["chainname",4,"uint8"],["chainid",4,"uint8"]]},e.prototype.setChainname=function(t,e){var i=4*t;this.chainname[i]=e.charCodeAt(0),this.chainname[i+1]=e.charCodeAt(1),this.chainname[i+2]=e.charCodeAt(2),this.chainname[i+3]=e.charCodeAt(3)},e.prototype.getChainname=function(t){for(var e="",i=0;i<4;++i){var r=this.chainname[4*t+i];if(!r)break;e+=String.fromCharCode(r)}return e},e.prototype.setChainid=function(t,e){var i=4*t;this.chainid[i]=e.charCodeAt(0),this.chainid[i+1]=e.charCodeAt(1),this.chainid[i+2]=e.charCodeAt(2),this.chainid[i+3]=e.charCodeAt(3)},e.prototype.getChainid=function(t){for(var e="",i=0;i<4;++i){var r=this.chainid[4*t+i];if(!r)break;e+=String.fromCharCode(r)}return e},Object.defineProperties(e.prototype,i),e}(Nm),zy=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e;var i={_defaultFields:{configurable:!0}};return i._defaultFields.get=function(){return[["chainOffset",1,"uint32"],["chainCount",1,"uint32"]]},Object.defineProperties(e.prototype,i),e}(Nm),Uy=function(t){this.polymer=t,this.size=t.residueCount};Uy.prototype.getCenterIterator=function(s){void 0===s&&(s=0);var c=this.getPosition().center,u=c.length/3,h=0,e=-1,l=[new Qe,new Qe,new Qe,new Qe];return{size:u,next:function(){var t=this.get(e);return e+=1,t},get:function(t){t=Math.min(u-1,Math.max(0,t));var e=l[h%4],i=3*t;if(e.fromArray(c,i),s){for(var r=Math.min(s,t,u-t-1),n=1;n<=r;++n){var o=3*n,a=(r+1-n)/(r+1);e.x+=a*c[i-o+0]+a*c[i+o+0],e.y+=a*c[i-o+1]+a*c[i+o+1],e.z+=a*c[i-o+2]+a*c[i+o+2]}e.x/=r+1,e.y/=r+1,e.z/=r+1}return h+=1,e},reset:function(){h=0,e=-1}}},Uy.prototype.getColor=function(t){var e=this.polymer,i=e.structure,r=e.residueCount,n=e.residueIndexStart,o=new Float32Array(3*r),a=t||{};a.structure=i;for(var s=Up.getScheme(a),c=i.getResidueProxy(),u=i.getAtomProxy(),h=0;h<r;++h)c.index=n+h,u.index=c.traceAtomIndex,s.atomColorToArray(u,o,3*h);return{color:o}},Uy.prototype.getPicking=function(){for(var t=this.polymer,e=t.structure,i=t.residueCount,r=t.residueIndexStart,n=new Float32Array(i),o=e.getResidueProxy(),a=0;a<i;++a)o.index=r+a,n[a]=o.traceAtomIndex;return{picking:new Zg(n,e)}},Uy.prototype.getSize=function(t){for(var e=this.polymer,i=e.structure,r=e.residueCount,n=e.residueIndexStart,o=new Float32Array(r),a=new Cy(t),s=i.getResidueProxy(),c=i.getAtomProxy(),u=0;u<r;++u)s.index=n+u,c.index=s.traceAtomIndex,o[u]=a.atomRadius(c);return{size:o}},Uy.prototype.getPosition=function(){for(var t=this.polymer,e=t.structure,i=t.residueCount,r=i-3,n=new Float32Array(3*i),o=new Float32Array(3*i),a=new Float32Array(i),s=new Float32Array(i),c=new Float32Array(i),u=new Float32Array(i),h=new Float32Array(3*i),l=new Qe,p=new Qe,d=new Qe,f=new Qe,m=new Qe,g=new Qe,v=new Qe,y=new Qe,b=new Qe,x=new Qe,_=new Qe,w=new Qe(0,0,0),S="trace",A=e.getAtomProxy(),M=e.getAtomProxy(t.getAtomIndexByType(0,S)),P=e.getAtomProxy(t.getAtomIndexByType(1,S)),E=e.getAtomProxy(t.getAtomIndexByType(2,S)),C=0;C<r;++C){A.index=M.index,M.index=P.index,P.index=E.index,E.index=t.getAtomIndexByType(C+3,S);var T=3*C;l.subVectors(M,A),p.subVectors(P,M),d.subVectors(E,P),f.subVectors(l,p),m.subVectors(p,d),b.crossVectors(f,m).normalize(),b.toArray(o,T),0<C&&(a[C]=b.angleTo(x));var I=Math.cos(f.angleTo(m));u[C]=180/Math.PI*Math.acos(I);var R=f.length(),L=m.length();s[C]=Math.sqrt(L*R)/Math.max(2,2*(1-I)),c[C]=Math.abs(p.dot(b)),g.copy(f).multiplyScalar(s[C]/R),v.copy(m).multiplyScalar(s[C]/L),g.subVectors(M,g),v.subVectors(P,v),g.toArray(n,T+3),v.toArray(n,T+6),_.subVectors(A,w),_.toArray(h,T),x.copy(b),w.copy(g)}g.fromArray(n,3),v.fromArray(n,6),b.subVectors(g,v).normalize(),A.index=t.getAtomIndexByType(0,S),w.copy(A),y.copy(A),Kf(y,b,g),y.toArray(n,0),_.subVectors(w,g),_.toArray(h,0),g.fromArray(n,3*i-6),v.fromArray(n,3*i-9),b.subVectors(g,v).normalize(),A.index=t.getAtomIndexByType(i-1,S),w.copy(A),y.copy(A),Kf(y,b,g),y.toArray(n,3*i-3);for(var O=i-3;O<i;++O)g.fromArray(n,3*O),A.index=t.getAtomIndexByType(O,S),w.copy(A),_.subVectors(w,g),_.toArray(h,3*O);var D=new Float32Array(i),k=new Float32Array(i),B=new Float32Array(i),N=new Float32Array(i);D[1]=s[0],k[1]=u[0],B[1]=s[0];for(var F=2;F<i-2;++F)D[F]=.5*(s[F-2]+s[F-1]),k[F]=.5*(u[F-2]+u[F-1]),B[F]=.5*(c[F-2]+c[F-1]),g.fromArray(o,3*(F-2)),v.fromArray(o,3*(F-1)),N[F]=180/Math.PI*Math.acos(Math.cos(g.angleTo(v)));D[i-2]=s[i-4],k[i-2]=u[i-4],B[i-2]=c[i-4];var z=new Float32Array(3*i);Dd(o,z,0,0,3),Dd(o,z,0,3,3);for(var U=2;U<i-2;++U)g.fromArray(o,3*(U-2)),v.fromArray(o,3*(U-1)),b.addVectors(v,g).multiplyScalar(.5).normalize(),b.toArray(z,3*U);return Dd(o,z,3*i-12,3*i-6,3),Dd(o,z,3*i-12,3*i-3,3),{center:n,axis:z,bending:N,radius:D,rise:B,twist:k,resdir:h}};var jy=function(t){this.polymer=t,this.helixorient=new Uy(t),this.position=this.helixorient.getPosition()};jy.prototype.getAxis=function(t,e,i,r,n){t=t||30,e=e||2.5,i=void 0!==i&&i;var o=this.polymer,a=o.structure,s=o.residueCount,c=o.residueIndexStart,u=this.position,h=r||{};h.structure=a;for(var l,p,d=Up.getScheme(h),f=new Cy(n),m=0,g=0,v=[],y=[],b=[],x=[],_=[],w=[],S=[],A=[],M=[],P=new Float32Array(3*s),E=new Float32Array(3*s),C=new Qe,T=new Qe,I=a.getResidueProxy(),R=a.getResidueProxy(),L=a.getAtomProxy(),O=new Qe,D=new Qe,k=!1,B=0;B<s;++B)if(I.index=c+B,O.fromArray(u.center,3*B),B===s-1?k=!0:(R.index=c+B+1,D.fromArray(u.center,3*B+3),i&&I.sstruc!==R.sstruc?k=!0:O.distanceTo(D)>e?k=!0:u.bending[B]>t&&(k=!0)),k){if(B-m<4){m=B,k=!1;continue}L.index=I.traceAtomIndex,P=u.axis.subarray(3*m+3,3*B),E=u.center.subarray(3*m,3*B+3),l=Zf(P).normalize(),p=Zf(E),C.fromArray(E),Kf(C,l,p),T.fromArray(E,E.length-3),Kf(T,l,p),l.subVectors(T,C),l.toArray(v,g),p.toArray(y,g),C.toArray(b,g),T.toArray(x,g),d.atomColorToArray(L,_,g),w.push(L.index),S.push(f.atomRadius(L)),A.push(c+m),M.push(c+B+1-m),g+=3,m=B,k=!1}var N=new Float32Array(w);return{axis:new Float32Array(v),center:new Float32Array(y),begin:new Float32Array(b),end:new Float32Array(x),color:new Float32Array(_),picking:new Zg(N,a),size:new Float32Array(S),residueOffset:A,residueCount:M}};var Gy=function(t){this.scoreFunction=t,this.content=[],this.scoreFunction=t};Gy.prototype.push=function(t){this.content.push(t),this.bubbleUp(this.content.length-1)},Gy.prototype.pop=function(){var t=this.content[0],e=this.content.pop();return e&&0<this.content.length&&(this.content[0]=e,this.sinkDown(0)),t},Gy.prototype.peek=function(){return this.content[0]},Gy.prototype.remove=function(t){for(var e=this.content.length,i=0;i<e;i++)if(this.content[i]===t){var r=this.content.pop();return void(r&&i!==e-1&&(this.content[i]=r,this.scoreFunction(r)<this.scoreFunction(t)?this.bubbleUp(i):this.sinkDown(i)))}throw new Error("Node not found.")},Gy.prototype.size=function(){return this.content.length},Gy.prototype.bubbleUp=function(t){for(var e=this.content[t];0<t;){var i=Math.floor((t+1)/2)-1,r=this.content[i];if(!(this.scoreFunction(e)<this.scoreFunction(r)))break;this.content[i]=e,this.content[t]=r,t=i}},Gy.prototype.sinkDown=function(t){for(var e=this.content.length,i=this.content[t],r=this.scoreFunction(i),n=0;;){var o=2*(t+1),a=o-1,s=null;if(a<e){var c=this.content[a];(n=this.scoreFunction(c))<r&&(s=a)}if(o<e){var u=this.content[o];this.scoreFunction(u)<(null===s?r:n)&&(s=o)}if(null===s)break;this.content[t]=this.content[s],this.content[s]=i,t=s}};var Vy=function(t,e){this.points=t,this.metric=e,this.maxDepth=0,this.currentNode=0;for(var i=t.length/3,r=new Uint32Array(i),n=0;n<i;++n)r[n]=n;this.indices=r,this.nodes=new Int32Array(4*i),this.rootIndex=this.buildTree(0,-1,0,i)};Vy.prototype.buildTree=function(t,e,i,r){t>this.maxDepth&&(this.maxDepth=t);var n=r-i;if(0===n)return-1;var o=4*this.currentNode,a=this.nodes;if(this.currentNode+=1,1===n)return a[o]=i,a[o+1]=-1,a[o+2]=-1,a[o+3]=e,o;for(var s,c,u,h,l,p=this.indices,d=this.points,f=i+Math.floor(n/2),m=t%3,g=i,v=r-1;g<v;){for(h=d[3*p[u=g+v>>1]+m],c=p[u],p[u]=p[v],p[v]=c,s=l=g;s<v;++s)d[3*p[s]+m]<h&&(c=p[l],p[l]=p[s],p[s]=c,++l);if(c=p[v],p[v]=p[l],p[l]=c,f===(u=l))break;f<u?v=u-1:g=u+1}return a[o]=f,a[o+1]=this.buildTree(t+1,o,i,f),a[o+2]=this.buildTree(t+1,o,f+1,r),a[o+3]=e,o},Vy.prototype.getNodeDepth=function(t){var e=this.nodes[t+3];return-1===e?0:this.getNodeDepth(e)+1},Vy.prototype.nearest=function(d,f,m){var g=this,v=new Gy(function(t){return-t[1]}),y=this.nodes,b=this.points,x=this.indices,_=function(t){var e,i,r=g.getNodeDepth(t)%3,n=3*x[y[t]],o=[b[n+0],b[n+1],b[n+2]],a=g.metric(d,o);function s(t,e){v.push([t,e]),v.size()>f&&v.pop()}var c=y[t+1],u=y[t+2];if(-1!==u||-1!==c){e=-1===u?c:-1===c?u:d[r]<=b[n+r]?c:u,_(e),(v.size()<f||a<v.peek()[1])&&a<=m&&s(t,a);for(var h=[],l=0;l<3;l+=1)h[l]=l===r?d[l]:b[n+l];var p=g.metric(h,o);(v.size()<f||Math.abs(p)<v.peek()[1])&&Math.abs(p)<=m&&-1!==(i=e===c?u:c)&&_(i)}else(v.size()<f||a<v.peek()[1])&&a<=m&&s(t,a)};_(this.rootIndex);for(var t=[],e=0,i=Math.min(v.size(),f);e<i;e+=1)t.push(v.content[e]);return t},Vy.prototype.verify=function(t,e){void 0===e&&(e=0);var i=1;if(void 0===t&&(t=this.rootIndex),-1===t)throw new Error("node is null");var r=e%3,n=this.nodes,o=this.points,a=this.indices,s=n[t+1],c=n[t+2];if(-1!==s){if(o[3*a[n[s]]+r]>o[3*a[n[t]]+r])throw new Error("left child is > parent!");i+=this.verify(s,e+1)}if(-1!==c){if(o[3*a[n[c]]+r]<o[3*a[n[t]]+r])throw new Error("right child is < parent!");i+=this.verify(c,e+1)}return i};var Hy=function(t,e){void 0===e&&(e=0),this.structure=t,this.index=e,this.chainStore=t.chainStore,this.residueStore=t.residueStore,this.atomStore=t.atomStore,this.residueMap=t.residueMap,this.atomMap=t.atomMap},$y={bondHash:{configurable:!0},entity:{configurable:!0},entityIndex:{configurable:!0},modelIndex:{configurable:!0},chainIndex:{configurable:!0},residue:{configurable:!0},residueIndex:{configurable:!0},sstruc:{configurable:!0},inscode:{configurable:!0},resno:{configurable:!0},chainname:{configurable:!0},chainid:{configurable:!0},residueType:{configurable:!0},atomType:{configurable:!0},residueAtomOffset:{configurable:!0},resname:{configurable:!0},hetero:{configurable:!0},atomname:{configurable:!0},number:{configurable:!0},element:{configurable:!0},vdw:{configurable:!0},covalent:{configurable:!0},x:{configurable:!0},y:{configurable:!0},z:{configurable:!0},serial:{configurable:!0},bfactor:{configurable:!0},occupancy:{configurable:!0},altloc:{configurable:!0},partialCharge:{configurable:!0},formalCharge:{configurable:!0},aromatic:{configurable:!0},bondCount:{configurable:!0}};function Wy(t,e){var i=t[0]-e[0],r=t[1]-e[1],n=t[2]-e[2];return i*i+r*r+n*n}function Xy(t,e){return Math.sqrt(Wy(t,e))}$y.bondHash.get=function(){return this.structure.bondHash},$y.entity.get=function(){return this.structure.entityList[this.entityIndex]},$y.entityIndex.get=function(){return this.chainStore.entityIndex[this.chainIndex]},$y.modelIndex.get=function(){return this.chainStore.modelIndex[this.chainIndex]},$y.chainIndex.get=function(){return this.residueStore.chainIndex[this.residueIndex]},$y.residue.get=function(){return console.warn("residue - might be expensive"),this.structure.getResidueProxy(this.residueIndex)},$y.residueIndex.get=function(){return this.atomStore.residueIndex[this.index]},$y.residueIndex.set=function(t){this.atomStore.residueIndex[this.index]=t},$y.sstruc.get=function(){return this.residueStore.getSstruc(this.residueIndex)},$y.inscode.get=function(){return this.residueStore.getInscode(this.residueIndex)},$y.resno.get=function(){return this.residueStore.resno[this.residueIndex]},$y.chainname.get=function(){return this.chainStore.getChainname(this.chainIndex)},$y.chainid.get=function(){return this.chainStore.getChainid(this.chainIndex)},$y.residueType.get=function(){return this.residueMap.get(this.residueStore.residueTypeId[this.residueIndex])},$y.atomType.get=function(){return this.atomMap.get(this.atomStore.atomTypeId[this.index])},$y.residueAtomOffset.get=function(){return this.residueStore.atomOffset[this.residueIndex]},$y.resname.get=function(){return this.residueType.resname},$y.hetero.get=function(){return this.residueType.hetero},$y.atomname.get=function(){return this.atomType.atomname},$y.number.get=function(){return this.atomType.number},$y.element.get=function(){return this.atomType.element},$y.vdw.get=function(){return this.atomType.vdw},$y.covalent.get=function(){return this.atomType.covalent},$y.x.get=function(){return this.atomStore.x[this.index]},$y.x.set=function(t){this.atomStore.x[this.index]=t},$y.y.get=function(){return this.atomStore.y[this.index]},$y.y.set=function(t){this.atomStore.y[this.index]=t},$y.z.get=function(){return this.atomStore.z[this.index]},$y.z.set=function(t){this.atomStore.z[this.index]=t},$y.serial.get=function(){return this.atomStore.serial[this.index]},$y.serial.set=function(t){this.atomStore.serial[this.index]=t},$y.bfactor.get=function(){return this.atomStore.bfactor[this.index]},$y.bfactor.set=function(t){this.atomStore.bfactor[this.index]=t},$y.occupancy.get=function(){return this.atomStore.occupancy[this.index]},$y.occupancy.set=function(t){this.atomStore.occupancy[this.index]=t},$y.altloc.get=function(){return this.atomStore.getAltloc(this.index)},$y.altloc.set=function(t){this.atomStore.setAltloc(this.index,t)},$y.partialCharge.get=function(){return this.atomStore.partialCharge?this.atomStore.partialCharge[this.index]:null},$y.partialCharge.set=function(t){this.atomStore.partialCharge&&(this.atomStore.partialCharge[this.index]=t)},$y.formalCharge.get=function(){return this.atomStore.formalCharge?this.atomStore.formalCharge[this.index]:null},$y.formalCharge.set=function(t){this.atomStore.formalCharge&&(this.atomStore.formalCharge[this.index]=t)},$y.aromatic.get=function(){return this.atomStore.aromatic?this.atomStore.aromatic[this.index]:this.residueType.isAromatic(this)?1:0},$y.aromatic.set=function(t){this.atomStore.aromatic&&(this.atomStore.aromatic[this.index]=t)},$y.bondCount.get=function(){return this.bondHash.countArray[this.index]},Hy.prototype.eachBond=function(t,e){e=e||this.structure._bp;for(var i=this.index,r=this.bondHash,n=r.indexArray,o=r.countArray[i],a=r.offsetArray[i],s=0;s<o;++s)e.index=n[a+s],t(e)},Hy.prototype.eachBondedAtom=function(e,t){var i=t||this.structure._ap,r=this.index;this.eachBond(function(t){i.index=r!==t.atomIndex1?t.atomIndex1:t.atomIndex2,e(i)}),this.index=r},Hy.prototype.hasBondTo=function(e){var i=!1;return this.eachBondedAtom(function(t){e.index===t.index&&(i=!0)}),i},Hy.prototype.bondToElementCount=function(e){var i=0,t=this.index;return this.eachBondedAtom(function(t){t.number===e&&(i+=1)}),this.index=t,i},Hy.prototype.hasBondToElement=function(t){return 0<this.bondToElementCount(t)},Hy.prototype.isBackbone=function(){var t=this.residueType.backboneIndexList;return 0<t.length&&t.includes(this.index-this.residueAtomOffset)},Hy.prototype.isPolymer=function(){if(0<this.structure.entityList.length)return this.entity.isPolymer();var t=this.residueType.moleculeType;return 3===t||4===t||5===t},Hy.prototype.isSidechain=function(){return this.isPolymer()&&!this.isBackbone()},Hy.prototype.isCg=function(){var t=this.residueType.backboneType;return 4===t||5===t||6===t},Hy.prototype.isTrace=function(){return this.index===this.residueType.traceAtomIndex+this.residueAtomOffset},Hy.prototype.isHetero=function(){return 1===this.residueType.hetero},Hy.prototype.isProtein=function(){return 3===this.residueType.moleculeType},Hy.prototype.isNucleic=function(){var t=this.residueType.moleculeType;return 4===t||5===t},Hy.prototype.isRna=function(){return 4===this.residueType.moleculeType},Hy.prototype.isDna=function(){return 5===this.residueType.moleculeType},Hy.prototype.isWater=function(){return 1===this.residueType.moleculeType},Hy.prototype.isIon=function(){return 2===this.residueType.moleculeType},Hy.prototype.isSaccharide=function(){return 6===this.residueType.moleculeType},Hy.prototype.isHelix=function(){return Km.includes(this.sstruc)},Hy.prototype.isSheet=function(){return Jm.includes(this.sstruc)},Hy.prototype.isTurn=function(){return Qm.includes(this.sstruc)&&this.isProtein()},Hy.prototype.isBonded=function(){return 0!==this.bondHash.countArray[this.index]},Hy.prototype.isRing=function(){return 1===this.residueType.getRings().flags[this.index-this.residueAtomOffset]},Hy.prototype.isAromatic=function(){return 1===this.aromatic},Hy.prototype.isMetal=function(){return this.atomType.isMetal()},Hy.prototype.isNonmetal=function(){return this.atomType.isNonmetal()},Hy.prototype.isMetalloid=function(){return this.atomType.isMetalloid()},Hy.prototype.isHalogen=function(){return this.atomType.isHalogen()},Hy.prototype.isDiatomicNonmetal=function(){return this.atomType.isDiatomicNonmetal()},Hy.prototype.isPolyatomicNonmetal=function(){return this.atomType.isPolyatomicNonmetal()},Hy.prototype.isAlkaliMetal=function(){return this.atomType.isAlkaliMetal()},Hy.prototype.isAlkalineEarthMetal=function(){return this.atomType.isAlkalineEarthMetal()},Hy.prototype.isNobleGas=function(){return this.atomType.isNobleGas()},Hy.prototype.isTransitionMetal=function(){return this.atomType.isTransitionMetal()},Hy.prototype.isPostTransitionMetal=function(){return this.atomType.isPostTransitionMetal()},Hy.prototype.isLanthanide=function(){return this.atomType.isLanthanide()},Hy.prototype.isActinide=function(){return this.atomType.isActinide()},Hy.prototype.getDefaultValence=function(){return this.atomType.getDefaultValence()},Hy.prototype.getValenceList=function(){return this.atomType.getValenceList()},Hy.prototype.getOuterShellElectronCount=function(){return this.atomType.getOuterShellElectronCount()},Hy.prototype.distanceTo=function(t){var e=this.atomStore,i=t.atomStore,r=this.index,n=t.index,o=e.x[r]-i.x[n],a=e.y[r]-i.y[n],s=e.z[r]-i.z[n],c=o*o+a*a+s*s;return Math.sqrt(c)},Hy.prototype.connectedTo=function(t){var e=this.atomStore,i=t.atomStore,r=this.index,n=t.index;if(e.altloc&&i.altloc){var o=e.altloc[r],a=i.altloc[n];if(0!==o&&0!==a&&32!==o&&32!==a&&o!==a)return!1}var s=e.x[r]-i.x[n],c=e.y[r]-i.y[n],u=e.z[r]-i.z[n],h=s*s+c*c+u*u;if(h<64&&this.isCg())return!0;if(isNaN(h))return!1;var l=this.covalent+t.covalent,p=l+.3,d=l-.5;return h<p*p&&d*d<h},Hy.prototype.positionFromArray=function(t,e){return void 0===e&&(e=0),this.x=t[e+0],this.y=t[e+1],this.z=t[e+2],this},Hy.prototype.positionToArray=function(t,e){void 0===t&&(t=[]),void 0===e&&(e=0);var i=this.index,r=this.atomStore;return t[e+0]=r.x[i],t[e+1]=r.y[i],t[e+2]=r.z[i],t},Hy.prototype.positionToVector3=function(t){return void 0===t&&(t=new Qe),t.x=this.x,t.y=this.y,t.z=this.z,t},Hy.prototype.positionFromVector3=function(t){return this.x=t.x,this.y=t.y,this.z=t.z,this},Hy.prototype.positionAdd=function(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z,this},Hy.prototype.positionSub=function(t){return this.x-=t.x,this.y-=t.y,this.z-=t.z,this},Hy.prototype.getResidueBonds=function(t){void 0===t&&(t=!1);var e,i,r,n,o=this.residueAtomOffset,a=this.index-this.residueAtomOffset,s=this.residueType.getBonds(),c=s.atomIndices1,u=s.atomIndices2;for(t||(n=[]),e=c.indexOf(a);-1!==e;){if(r=u[e]+o,!n)return r;n.push(r),e=c.indexOf(a,e+1)}for(i=u.indexOf(a);-1!==i;){if(r=c[i]+o,!n)return r;n.push(r),i=u.indexOf(a,i+1)}return n},Hy.prototype.qualifiedName=function(t){void 0===t&&(t=!1);var e="";return this.resname&&!t&&(e+="["+this.resname+"]"),void 0!==this.resno&&(e+=this.resno),this.inscode&&(e+="^"+this.inscode),this.chainname&&(e+=":"+this.chainname),this.atomname&&(e+="."+this.atomname),this.altloc&&(e+="%"+this.altloc),1<this.structure.modelStore.count&&(e+="/"+this.modelIndex),e},Hy.prototype.clone=function(){return new Hy(this.structure,this.index)},Hy.prototype.toObject=function(){return{index:this.index,residueIndex:this.residueIndex,resname:this.resname,x:this.x,y:this.y,z:this.z,element:this.element,chainname:this.chainname,resno:this.resno,serial:this.serial,vdw:this.vdw,covalent:this.covalent,hetero:this.hetero,bfactor:this.bfactor,altloc:this.altloc,atomname:this.atomname,modelIndex:this.modelIndex}},Object.defineProperties(Hy.prototype,$y);var qy=new Float32Array(3),Yy=function(t,e){void 0===e&&(e=!1),de.Debug&&Bp.time("Kdtree build");var i=e?Wy:Xy,r=new Float32Array(3*t.atomCount),n=new Uint32Array(t.atomCount),o=0;t.eachAtom(function(t){r[o+0]=t.x,r[o+1]=t.y,r[o+2]=t.z,n[o/3]=t.index,o+=3}),this.atomIndices=n,this.points=r,this.kdtree=new Vy(r,i),de.Debug&&Bp.timeEnd("Kdtree build")};Yy.prototype.nearest=function(t,e,i){t instanceof Qe?t.toArray(qy):t instanceof Hy&&t.positionToArray(qy);for(var r=this.kdtree.nearest(qy,e,i),n=this.kdtree.indices,o=this.kdtree.nodes,a=this.atomIndices,s=[],c=0,u=r.length;c<u;++c){var h=r[c],l=h[0],p=h[1];s.push({index:a[n[o[l]]],distance:p})}return s};var Zy={" ":"X","!":"Y","#":"Z",$:"-X","%":"-Y","&":"-Z","'":"Y+1/2","(":"1/2+X",")":"1/2+Y","*":"1/2-X","+":"1/2+Z",",":"1/2-Y","-":"1/2-Z",".":"X+1/2","/":"Z+1/2",0:"-X+1/2",1:"-Y+1/2",2:"-Z+1/2",3:"1/4+X",4:"1/4-Y",5:"1/4+Z",6:"1/4-X",7:"1/4+Y",8:"3/4-Y",9:"3/4+Z",":":"3/4+Y",";":"3/4+X","<":"3/4-X","=":"1/4-Z",">":"3/4-Z","?":"X-Y","@":"Y-X",A:"Z+1/3",B:"Z+2/3",C:"X+2/3",D:"Y+1/3",E:"-Y+2/3",F:"X-Y+1/3",G:"Y-X+2/3",H:"-X+1/3",I:"X+1/3",J:"Y+2/3",K:"-Y+1/3",L:"X-Y+2/3",M:"Y-X+1/3",N:"-X+2/3",O:"2/3+X",P:"1/3+Y",Q:"1/3+Z",R:"2/3-Y",S:"1/3+X-Y",T:"2/3+Y-X",U:"1/3-X",V:"2/3-X",W:"1/3-Y",X:"1/3-Z",Y:"2/3+Y",Z:"1/3+Y-X","[":"2/3+X-Y","]":"1/3+X","^":"2/3+Z",_:"2/3-Z","`":"5/6+Z",a:"1/6+Z",b:"5/6-Z",c:"1/6-Z",d:"Z+5/6",e:"Z+1/6",f:"Z+1/4",g:"+Y"},Ky={"P 1":" !#","P -1":" !#$%&","P 1 2 1":" !#$!&","P 1 21 1":" !#$'&","C 1 2 1":" !#$!&()#*)&","P 1 m 1":" !# %#","P 1 c 1":" !# %+","C 1 m 1":" !# %#()#(,#","C 1 c 1":" !# %+()#(,+","P 1 2/m 1":" !# %#$!&$%&","P 1 21/m 1":" !#$)&$%& ,#","C 1 2/m 1":" !# %#$!&$%&()#(,#*)&*,&","P 1 2/c 1":" !#$!-$%& %+","P 1 21/c 1":" !#$%&$)- ,+","C 1 2/c 1":" !#$!-$%& %+()#*)-*,&(,+","P 2 2 2":" !#$%#$!& %&","P 2 2 21":" !#$%+$!- %&","P 21 21 2":" !#$%#*)&(,&","P 21 21 21":" !#*%+$)-(,&","C 2 2 21":" !#$%+$!- %&()#*,+*)-(,&","C 2 2 2":" !#$%#$!& %&()#*,#*)&(,&","F 2 2 2":" !#$%#$!& %& )+$,+$)- ,-(!+*%+*!-(%-()#*,#*)&(,&","I 2 2 2":" !#$%# %&$!&.'/01/.120'2","I 21 21 21":" !#*%+$)-(,&()+$,#*!& %-","P m m 2":" !#$%# %#$!#","P m c 21":" !#$%+ %+$!#","P c c 2":" !#$%# %+$!+","P m a 2":" !#$%#(%#*!#","P c a 21":" !#$%+(%#*!+","P n c 2":" !#$%# ,+$)+","P m n 21":" !#*%+(%+$!#","P b a 2":" !#$%#(,#*)#","P n a 21":" !#$%+(,#*)+","P n n 2":" !#$%#(,+*)+","C m m 2":" !#$%# %#$!#()#*,#(,#*)#","C m c 21":" !#$%+ %+$!#()#*,+(,+*)#","C c c 2":" !#$%# %+$!+()#*,#(,+*)+","A m m 2":" !#$%# %#$!# )+$,+ ,+$)+","A b m 2":" !#$%# ,#$)# )+$,+ %+$!+","A m a 2":" !#$%#(%#*!# )+$,+(,+*)+","A b a 2":" !#$%#(,#*)# )+$,+(%+*!+","F m m 2":" !#$%# %#$!# )+$,+ ,+$)+(!+*%+(%+*!+()#*,#(,#*)#","F d d 2":" !#$%#345675 )+$,+3896:9(!+*%+;49<79()#*,#;85<:5","I m m 2":" !#$%# %#$!#()+*,+(,+*)+","I b a 2":" !#$%#(,#*)#()+*,+ %+$!+","I m a 2":" !#$%#(%#*!#()+*,+ ,+$)+","P 2/m 2/m 2/m":" !#$%#$!& %&$%& !& %#$!#","P 2/n 2/n 2/n":" !#$%#$!& %&*,-()-(,+*)+","P 2/c 2/c 2/m":" !#$%#$!- %-$%& !& %+$!+","P 2/b 2/a 2/n":" !#$%#$!& %&*,&()&(,#*)#","P 21/m 2/m 2/a":" !#*%#$!&(%&$%&(!& %#*!#","P 2/n 21/n 2/a":" !#*%#*)- ,-$%&(!&(,+$)+","P 2/m 2/n 21/a":" !#*%+*!- %&$%&(!-(%+$!#","P 21/c 2/c 2/a":" !#*%#$!-(%-$%&(!& %+*!+","P 21/b 21/a 2/m":" !#$%#*)&(,&$%& !&(,#*)#","P 21/c 21/c 2/n":" !#*,#$)-(%-$%&()& ,+*!+","P 2/b 21/c 21/m":" !#$%+$)- ,&$%& !- ,+$)#","P 21/n 21/n 2/m":" !#$%#*)-(,-$%& !&(,+*)+","P 21/m 21/m 2/n":" !#$%#*'&.,&*,&.'& %#$!#","P 21/b 2/c 21/n":" !#*,+$!-(,&$%&()- %+*)#","P 21/b 21/c 21/a":" !#*%+$)-(,&$%&(!- ,+*)#","P 21/n 21/m 21/a":" !#0%/$'&.12$%&.!2 1#0'/","C 2/m 2/c 21/m":" !#$%+$!- %&$%& !- %+$!#()#*,+*)-(,&*,&()-(,+*)#","C 2/m 2/c 21/a":" !#$,+$)- %&$%& )- ,+$!#()#*%+*!-(,&*,&(!-(%+*)#","C 2/m 2/m 2/m":" !#$%#$!& %&$%& !& %#$!#()#*,#*)&(,&*,&()&(,#*)#","C 2/c 2/c 2/m":" !#$%#$!- %-$%& !& %+$!+()#*,#*)-(,-*,&()&(,+*)+","C 2/m 2/m 2/a":" !#$,#$)& %&$%& )& ,#$!#()#*%#*!&(,&*,&(!&(%#*)#","C 2/c 2/c 2/a":" !#*,#$!&(,&$,-(!- ,+*!+()#$%#*)& %&*%- )-(%+$)+","F 2/m 2/m 2/m":" !#$%#$!& %&$%& !& %#$!# )+$,+$)- ,-$,- )- ,+$)+(!+*%+*!-(%-*%-(!-(%+*!+()#*,#*)&(,&*,&()&(,#*)#","F 2/d 2/d 2/d":" !#$%#$!& %&64=37=345675 )+$,+$)- ,-68>3:>3896:9(!+*%+*!-(%-<4>;7>;49<79()#*,#*)&(,&<8=;:=;85<:5","I 2/m 2/m 2/m":" !#$%#$!& %&$%& !& %#$!#()+*,+*)-(,-*,-()-(,+*)+","I 2/b 2/a 2/m":" !#$%#*)&(,&$%& !&(,#*)#()+*,+$!- %-*,-()- %+$!+","I 21/b 21/c 21/a":" !#*%+$)-(,&$%&(!- ,+*)#()+$,#*!& %-*,- )&(%#$!+","I 21/m 21/m 21/a":" !#$,#$)& %&$%& )& ,#$!#()+*%+*!-(,-*,-(!-(%+*)+","P 4":" !#$%#% #!$#","P 41":" !#$%+% 5!$9","P 42":" !#$%#% +!$+","P 43":" !#$%+% 9!$5","I 4":" !#$%#% #!$#()+*,+,(+)*+","I 41":" !#*,+%(5)$9()+$%#, 9!*5","P -4":" !#$%#!$&% &","I -4":" !#$%#!$&% &()+*,+)*-,(-","P 4/m":" !#$%#% #!$#$%& !&!$&% &","P 42/m":" !#$%#% +!$+$%& !&!$-% -","P 4/n":" !#$%#,(#)*#*,&()&!$&% &","P 42/n":" !#$%#,(+)*+*,-()-!$&% &","I 4/m":" !#$%#% #!$#$%& !&!$&% &()+*,+,(+)*+*,-()-)*-,(-","I 41/a":" !#*,+%(5)$9$,=(!>!$&,(-()+$%#, 9!*5*%> )=)*-% &","P 4 2 2":" !#$%#% #!$#$!& %&! &%$&","P 4 21 2":" !#$%#,(#)*#*)&(,&! &%$&","P 41 2 2":" !#$%+% 5!$9$!& %-! >%$=","P 41 21 2":" !#$%+,(5)*9*)=(,>! &%$-","P 42 2 2":" !#$%#% +!$+$!& %&! -%$-","P 42 21 2":" !#$%#,(+)*+*)-(,-! &%$&","P 43 2 2":" !#$%+% 9!$5$!& %-! =%$>","P 43 21 2":" !#$%+,(9)*5*)>(,=! &%$-","I 4 2 2":" !#$%#% #!$#$!& %&! &%$&()+*,+,(+)*+*)-(,-)(-,*-","I 41 2 2":" !#*,+%(5)$9*!> ,=)(-%$&()+$%#, 9!*5$)=(%>! &,*-","P 4 m m":" !#$%#% #!$# %#$!#%$#! #","P 4 b m":" !#$%#% #!$#(,#*)#,*#)(#","P 42 c m":" !#$%#% +!$+ %+$!+%$#! #","P 42 n m":" !#$%#,(+)*+(,+*)+%$#! #","P 4 c c":" !#$%#% #!$# %+$!+%$+! +","P 4 n c":" !#$%#% #!$#(,+*)+,*+)(+","P 42 m c":" !#$%#% +!$+ %#$!#%$+! +","P 42 b c":" !#$%#% +!$+(,#*)#,*+)(+","I 4 m m":" !#$%#% #!$# %#$!#%$#! #()+*,+,(+)*+(,+*)+,*+)(+","I 4 c m":" !#$%#% #!$# %+$!+%$+! +()+*,+,(+)*+(,#*)#,*#)(#","I 41 m d":" !#*,+%(5)$9 %#*)+%*5) 9()+$%#, 9!*5(,+$!#,$9!(5","I 41 c d":" !#*,+%(5)$9 %+*)#%*9) 5()+$%#, 9!*5(,#$!+,$5!(9","P -4 2 m":" !#$%#% &!$&$!& %&%$#! #","P -4 2 c":" !#$%#% &!$&$!- %-%$+! +","P -4 21 m":" !#$%#% &!$&*)&(,&,*#)(#","P -4 21 c":" !#$%#% &!$&*)-(,-,*+)(+","P -4 m 2":" !#$%#!$&% & %#$!#! &%$&","P -4 c 2":" !#$%#% &!$& %+$!+! -%$-","P -4 b 2":" !#$%#% &!$&(,#*)#)(&,*&","P -4 n 2":" !#$%#% &!$&(,+*)+)(-,*-","I -4 m 2":" !#$%#% &!$& %#$!#! &%$&()+*,+,(-)*-(,+*)+)(-,*-","I -4 c 2":" !#$%#% &!$& %+$!+! -%$-()+*,+,(-)*-(,#*)#)(&,*&","I -4 2 m":" !#$%#% &!$&$!& %&%$#! #()+*,+,(-)*-*)-(,-,*+)(+","I -4 2 d":" !#$%#% &!$&*!>(%>,$9) 9()+*,+,(-)*-$)= ,=%*5!(5","P 4/m 2/m 2/m":" !#$%#% #!$#$!& %&! &%$&$%& !&!$&% & %#$!#%$#! #","P 4/m 2/c 2/c":" !#$%#% #!$#$!- %-! -%$-$%& !&!$&% & %+$!+%$+! +","P 4/n 2/b 2/m":" !#$%#% #!$#$!& %&! &%$&*,&()&)*&,(&(,#*)#,*#)(#","P 4/n 2/n 2/c":" !#$%#% #!$#$!& %&! &%$&*,-()-)*-,(-(,+*)+,*+)(+","P 4/m 21/b 2/m":" !#$%#% #!$#*)&(,&)(&,*&$%& !&!$&% &(,#*)#,*#)(#","P 4/m 21/n 2/c":" !#$%#% #!$#*)-(,-)(-,*-$%& !&!$&% &(,+*)+,*+)(+","P 4/n 21/m 2/m":" !#$%#,(#)*#*)&(,&! &%$&*,&()&!$&% & %#$!#,*#)(#","P 4/n 2/c 2/c":" !#$%#,(#)*#*)-(,-! -%$-*,&()&!$&% & %+$!+,*+)(+","P 42/m 2/m 2/c":" !#$%#% +!$+$!& %&! -%$-$%& !&!$-% - %#$!#%$+! +","P 42/m 2/c 2/m":" !#$%#% +!$+$!- %-! &%$&$%& !&!$-% - %+$!+%$#! #","P 42/n 2/b 2/c":" !#$%#,(+)*+$!- %-)(&,*&*,-()-!$&% &(,#*)#%$+! +","P 42/n 2/n 2/m":" !#$%#,(+)*+$!& %&)(-,*-*,-()-!$&% &(,+*)+%$#! #","P 42/m 21/b 2/c":" !#$%#% +!$+*)&(,&)(-,*-$%& !&!$-% -(,#*)#,*+)(+","P 42/m 21/n 2/m":" !#$%#,./'*/*'-.,-! &%$&$%& !&'*-,.-.,/*'/%$#! #","P 42/n 21/m 2/c":" !#$%#,(+)*+*)-(,-! &%$&*,-()-!$&% & %#$!#,*+)(+","P 42/n 21/c 2/m":" !#$%#,(+)*+*)&(,&! -%$-*,-()-!$&% & %+$!+,*#)(#","I 4/m 2/m 2/m":" !#$%#% #!$#$!& %&! &%$&$%& !&!$&% & %#$!#%$#! #()+*,+,(+)*+*)-(,-)(-,*-*,-()-)*-,(-(,+*)+,*+)(+","I 4/m 2/c 2/m":" !#$%#% #!$#$!- %-! -%$-$%& !&!$&% & %+$!+%$+! +()+*,+,(+)*+*)&(,&)(&,*&*,-()-)*-,(-(,#*)#,*#)(#","I 41/a 2/m 2/d":" !#*,+%(5)$9*!> ,=)(-%$&$,=(!>!$&,(-(,+$!#,$9!(5()+$%#, 9!*5$)=(%>! &,*-*%> )=)*-% & %#*)+%*5) 9","I 41/a 2/c 2/d":" !#*,+%(5)$9*!= ,>)(&%$-$,=(!>!$&,(-(,#$!+,$5!(9()+$%#, 9!*5$)>(%=! -,*&*%> )=)*-% & %+*)#%*9) 5","P 3":" !#%?#@$#","P 31":" !#%?A@$B","P 32":" !#%?B@$A","H 3":" !#%?#@$#CDAEFAGHAIJBKLBMNB","R 3":" !## !!# ","P -3":" !#%?#@$#$%&!@&? &","H -3":" !#%?#@$#$%&!@&? &OPQRSQTUQVWXYZX[]X]Y^W[^ZV^UR_PT_SO_","R -3":" !## !!# $%&&$%%&$","P 3 1 2":" !#%?#@$#%$&@!& ?&","P 3 2 1":" !#%?#@$#! &?%&$@&","P 31 1 2":" !#%?Q@$^%$_@!X ?&","P 31 2 1":" !#%?A@$B! &?%_$@X","P 32 1 2":" !#%?^@$Q%$X@!_ ?&","P 32 2 1":" !#%?B@$A! &?%X$@_","H 3 2":" !#%?#@$#! &?%&$@&OPQRSQTUQY]X[WXVZX]Y^W[^ZV^PO_SR_UT_","R 3 2":" !## !!# %$&$&%&%$","P 3 m 1":" !#%?#@$#%$#@!# ?#","P 3 1 m":" !#%?#@$#! #?%#$@#","P 3 c 1":" !#%?#@$#%$+@!+ ?+","P 3 1 c":" !#%?#@$#! +?%+$@+","H 3 m":" !#%?#@$#%$#@!# ?#OPQRSQTUQRUQTPQOSQ]Y^W[^ZV^WV^ZY^][^","R 3 m":" !## !!# ! # #!#! ","H 3 c":" !#%?#@$#%$+@!+ ?+OPQRSQTUQRU`TP`OS`]Y^W[^ZV^WVaZYa][a","R 3 c":" !## !!# '././'/'.","P -3 1 2/m":" !#%?#@$#%$&@!& ?&$%&!@&? &! #?%#$@#","P -3 1 2/c":" !#%?#@$#%$-@!- ?-$%&!@&? &! +?%+$@+","P -3 2/m 1":" !#%?#@$#! &?%&$@&$%&!@&? &%$#@!# ?#","P -3 2/c 1":" !#%?#@$#! -?%-$@-$%&!@&? &%$+@!+ ?+","H -3 2/m":" !#%?#@$#! &?%&$@&$%&!@&? &%$#@!# ?#OPQRSQTUQY]X[WXVZXVWXYZX[]XRUQTPQOSQ]Y^W[^ZV^PO_SR_UT_UR_PT_SO_WV^ZY^][^","R -3 2/m":" !## !!# %$&$&%&%$$%&&$%%&$! # #!#! ","H -3 2/c":" !#%?#@$#! -?%-$@-$%&!@&? &%$+@!+ ?+OPQRSQTUQY]b[WbVZbVWXYZX[]XRU`TP`OS`]Y^W[^ZV^POcSRcUTcUR_PT_SO_WVaZYa][a","R -3 2/c":" !## !!# 102021210$%&&$%%&$'././'/'.","P 6":" !#%?#@$#$%#!@#? #","P 61":" !#%?A@$B$%/!@d? e","P 65":" !#%?B@$A$%/!@e? d","P 62":" !#%?^@$Q$%#!@^? Q","P 64":" !#%?Q@$^$%#!@Q? ^","P 63":" !#%?#@$#$%+!@+? +","P -6":" !#%?#@$# !&%?&@$&","P 6/m":" !#%?#@$#$%#!@#? #$%&!@&? & !&%?&@$&","P 63/m":" !#%?#@$#$%+!@+? +$%&!@&? & !-%?-@$-","P 6 2 2":" !#%?#@$#$%#!@#? #! &?%&$@&%$&@!& ?&","P 61 2 2":" !#%?Q@$^$%+!@`? a! X?%&$@_%$b@!- ?c","P 65 2 2":" !#%?^@$Q$%+!@a? `! _?%&$@X%$c@!- ?b","P 62 2 2":" !#%?^@$Q$%#!@^? Q! _?%&$@X%$_@!& ?X","P 64 2 2":" !#%?Q@$^$%#!@Q? ^! X?%&$@_%$X@!& ?_","P 63 2 2":" !#%?#@$#$%+!@+? +! &?%&$@&%$-@!- ?-","P 6 m m":" !#%?#@$#$%#!@#? #%$#@!# ?#! #?%#$@#","P 6 c c":" !#%?#@$#$%#!@#? #%$+@!+ ?+! +?%+$@+","P 63 c m":" !#%?#@$#$%+!@+? +%$+@!+ ?+! #?%#$@#","P 63 m c":" !#%?#@$#$%+!@+? +%$#@!# ?#! +?%+$@+","P -6 m 2":" !#%?#@$# !&%?&@$&%$#@!# ?#%$&@!& ?&","P -6 c 2":" !#%?#@$# !-%?-@$-%$+@!+ ?+%$&@!& ?&","P -6 2 m":" !#%?#@$# !&%?&@$&! &?%&$@&! #?%#$@#","P -6 2 c":" !#%?#@$# !-%?-@$-! &?%&$@&! +?%+$@+","P 6/m 2/m 2/m":" !#%?#@$#$%#!@#? #! &?%&$@&%$&@!& ?&$%&!@&? & !&@$&%?&%$#@!# ?#! #?%#$@#","P 6/m 2/c 2/c":" !#%?#@$#$%#!@#? #! -?%-$@-%$-@!- ?-$%&!@&? & !&@$&%?&%$+@!+ ?+! +?%+$@+","P 63/m 2/c 2/m":" !#%?#@$#$%+!@+? +! -?%-$@-%$&@!& ?&$%&!@&? & !-@$-%?-%$+@!+ ?+! #?%#$@#","P 63/m 2/m 2/c":" !#%?#@$#$%+!@+? +! &?%&$@&%$-@!- ?-$%&!@&? & !-@$-%?-%$#@!# ?#! +?%+$@+","P 2 3":" !#$%#$!& %&# !#$%&$!& %!# %#$!&$%& ","F 2 3":" !#$%#$!& %&# !#$%&$!& %!# %#$!&$%&  )+$,+$)- ,-#()#*,&*)&(,!+(%+*!-*%-((!+*%+*!-(%-+ )+$,-$)- ,)#(,#*)&*,&(()#*,#*)&(,&+(!+*%-*!-(%)+ ,+$)-$,- ","I 2 3":" !#$%#$!& %&# !#$%&$!& %!# %#$!&$%& ()+*,+*)-(,-+()+*,-*)-(,)+(,+*)-*,-(","P 21 3":" !#*%+$)-(,&# !+*%-$)&(,!# %+*)-$,&(","I 21 3":" !#*%+$)-(,&# !+*%-$)&(,!# %+*)-$,&(()+$,#*!& %-+()#$,&*!- %)+(,#$!&*%- ","P 2/m -3":" !#$%#$!& %&# !#$%&$!& %!# %#$!&$%& $%& !& %#$!#&$%& !# %#$!%&$!& %# !#$","P 2/n -3":" !#$%#$!& %&# !#$%&$!& %!# %#$!&$%& *,-()-(,+*)+-*,-()+(,+*),-*)-(,+()+*","F 2/m -3":" !#$%#$!& %&# !#$%&$!& %!# %#$!&$%& $%& !& %#$!#&$%& !# %#$!%&$!& %# !#$ )+$,+$)- ,-#()#*,&*)&(,!+(%+*!-*%-($,- )- ,+$)+&*,&()#(,#*)%-*!-(%+(!+*(!+*%+*!-(%-+ )+$,-$)- ,)#(,#*)&*,&(*%-(!-(%+*!+-$,- )+ ,+$),&*)&(,#()#*()#*,#*)&(,&+(!+*%-*!-(%)+ ,+$)-$,- *,&()&(,#*)#-*%-(!+(%+*!,-$)- ,+ )+$","F 2/d -3":" !#$%#$!& %&# !#$%&$!& %!# %#$!&$%& 64=37=345675=64=375345674=67=3453756 )+$,+$)- ,-#()#*,&*)&(,!+(%+*!-*%-(68>3:>3896:9=<8=;:5;85<:4><7>;49;79<(!+*%+*!-(%-+ )+$,-$)- ,)#(,#*)&*,&(<4>;7>;49<79>68>3:93896:8=<:=;85;:5<()#*,#*)&(,&+(!+*%-*!-(%)+ ,+$)-$,- <8=;:=;8f<:f><4>;79;49<78>6:>3893:96","I 2/m -3":" !#$%#$!& %&# !#$%&$!& %!# %#$!&$%& $%& !& %#$!#&$%& !# %#$!%&$!& %# !#$()+*,+*)-(,-+()+*,-*)-(,)+(,+*)-*,-(*,-()-(,+*)+-*,-()+(,+*),-*)-(,+()+*","P 21/a -3":" !#*%+$)-(,&# !+*%-$)&(,!# %+*)-$,&($%&(!- ,+*)#&$%-(!+ ,#*)%&$!-(,+ )#*","I 21/a -3":" !#*%+$)-(,&# !+*%-$)&(,!# %+*)-$,&($%&(!- ,+*)#&$%-(!+ ,#*)%&$!-(,+ )#*()+$,#*g& %-+()#$,&*!- %)+(,#$!&*%- *,- )&(%#$!+-*,& )#(%+$!,-*)& %#(!+$","P 4 3 2":" !#$%#$!& %&# !#$%&$!& %!# %#$!&$%& ! &%$&!$#% # #%$#!$&% &!#!$#% &! &%$","P 42 3 2":" !#$%#$!& %&# !#$%&$!& %!# %#$!&$%& )(-,*-)*+,(+(+,*+)*-,(-)+)*+,(-)(-,*","F 4 3 2":" !#$%#$!& %&# !#$%&$!& %!# %#$!&$%& ! &%$&!$#% # #%$#!$&% &!#!$#% &! &%$ )+$,+$)- ,-#()#*,&*)&(,!+(%+*!-*%-(!(-%*-!*+%(+ +,$+)$-, -)#)*#,(&)(&,*(!+*%+*!-(%-+ )+$,-$)- ,)#(,#*)&*,&() -,$-)$+, +(#,*#)*&,(&)+!*+%(-!(-%*()#*,#*)&(,&+(!+*%-*!-(%)+ ,+$)-$,- )(&,*&)*#,(#(+%*+!*-%(-!+)$+, -) -,$","F 41 3 2":" !#$,+*)&(%-# !+$,&*)-(%!# ,+$)&*%-(:3>46=7<98;5;58<976=43>:97<58;>:3=46 )+$%#*!-(,&#()+*%&$!- ,!+(,#*)-$%& :;=4<>765839;94<5:6>83=79:6543>7;=8<(!+*,#$)- %&+ )#$%-*!&(,)#(%+*!&$,- 73=86>:<54;935469:<=8;>7576983=:;>4<()#*%+$!& ,-+(!#*,-$)& %)+ %#$!-*,&(7;>8<=:69435398657<>4;=:5:<94;=73>86","I 4 3 2":" !#$%#$!& %&# !#$%&$!& %!# %#$!&$%& ! &%$&!$#% # #%$#!$&% &!#!$#% &! &%$()+*,+*)-(,-+()+*,-*)-(,)+(,+*)-*,-()(-,*-)*+,(+(+,*+)*-,(-)+)*+,(-)(-,*","P 43 3 2":" !#*%+$)-(,&# !+*%-$)&(,!# %+*)-$,&(7;>46=:<5839398<5:6=4;>75:<983>7;=46","P 41 3 2":" !#*%+$)-(,&# !+*%-$)&(,!# %+*)-$,&(:3=8<>7694;5;54697<>83=:97654;=:3>8<","I 41 3 2":" !#*%+$)-(,&# !+*%-$)&(,!# %+*)-$,&(:3=8<>7694;5;54697<>83=:97654;=:3>8<()+$,#*!& %-+()#$,&*!- %)+(,#$!&*%- 7;>46=:<5839398<5:6=4;>75:<983>7;=46","P -4 3 m":" !#$%#$!& %&# !#$%&$!& %!# %#$!&$%& ! #%$#!$&% & #!$#%$&! &%#! #%$&!$&% ","F -4 3 m":" !#$%#$!& %&# !#$%&$!& %!# %#$!&$%& ! #%$#!$&% & #!$#%$&! &%#! #%$&!$&%  )+$,+$)- ,-#()#*,&*)&(,!+(%+*!-*%-(!(+%*+!*-%(- +)$+,$-) -,#)(#,*&)*&,((!+*%+*!-(%-+ )+$,-$)- ,)#(,#*)&*,&() +,$+)$-, -(#)*#,*&)(&,+!(+%*-!*-%(()#*,#*)&(,&+(!+*%-*!-(%)+ ,+$)-$,- )(#,*#)*&,(&(+!*+%*-!(-%+) +,$-)$-, ","I -4 3 m":" !#$%#$!& %&# !#$%&$!& %!# %#$!&$%& ! #%$#!$&% & #!$#%$&! &%#! #%$&!$&% ()+*,+*)-(,-+()+*,-*)-(,)+(,+*)-*,-()(+,*+)*-,(-(+)*+,*-)(-,+)(+,*-)*-,(","P -4 3 n":" !#$%#$!& %&# !#$%&$!& %!# %#$!&$%& )(+,*+)*-,(-(+)*+,*-)(-,+)(+,*-)*-,(","F -4 3 c":" !#$%#$!& %&# !#$%&$!& %!# %#$!&$%& )(+,*+)*-,(-(+)*+,*-)(-,+)(+,*-)*-,( )+$,+$)- ,-#()#*,&*)&(,!+(%+*!-*%-() #,$#)$&, &(#!*#%*&!(&%+! +%$-!$-% (!+*%+*!-(%-+ )+$,-$)- ,)#(,#*)&*,&(!(#%*#!*&%(& +!$+%$-! -%#) #,$&)$&, ()#*,#*)&(,&+(!+*%-*!-(%)+ ,+$)-$,- ! +%$+!$-% - #)$#,$&) &,#!(#%*&!*&%(","I -4 3 d":" !#*%+$)-(,&# !+*%-$)&(,!# %+*)-$,&(7354<9:6>8;=357<946>:;=857394<>:6=8;()+$,#*!& %-+()#$,&*!- %)+(,#$!&*%- :;98657<=43>;9:658<=73>49:;586=7<>43","P 4/m -3 2/m":" !#$%#$!& %&# !#$%&$!& %!# %#$!&$%& ! &%$&!$#% # #%$#!$&% &!#!$#% &! &%$$%& !& %#$!#&$%& !# %#$!%&$!& %# !#$%$#! #% &!$&$&! &% #!$#%&% &!$#%$#! ","P 4/n -3 2/n":" !#$%#$!& %&# !#$%&$!& %!# %#$!&$%& ! &%$&!$#% # #%$#!$&% &!#!$#% &! &%$*,-()-(,+*)+-*,-()+(,+*),-*)-(,+()+*,*+)(+,(-)*-*-)(-,(+)*+,-,(-)*+,*+)(","P 42/m -3 2/n":" !#$%#$!& %&# !#$%&$!& %!# %#$!&$%& )(-,*-)*+,(+(+,*+)*-,(-)+)*+,(-)(-,*$%& !& %#$!#&$%& !# %#$!%&$!& %# !#$,*+)(+,(-)*-*-)(-,(+)*+,-,(-)*+,*+)(","P 42/n -3 2/m":" !#$%#$!& %&# !#$%&$!& %!# %#$!&$%& )(-,*-)*+,(+(+,*+)*-,(-)+)*+,(-)(-,**,-()-(,+*)+-*,-()+(,+*),-*)-(,+()+*%$#! #% &!$&$&! &% #!$#%&% &!$#%$#! ","F 4/m -3 2/m":" !#$%#$!& %&# !#$%&$!& %!# %#$!&$%& ! &%$&!$#% # #%$#!$&% &!#!$#% &! &%$$%& !& %#$!#&$%& !# %#$!%&$!& %# !#$%$#! #% &!$&$&! &% #!$#%&% &!$#%$#!  )+$,+$)- ,-#()#*,&*)&(,!+(%+*!-*%-(!(-%*-!*+%(+ +,$+)$-, -)#)*#,(&)(&,*$,- )- ,+$)+&*,&()#(,#*)%-*!-(%+(!+*%*+!(+%(-!*-$-) -, +)$+,&,(&)*#,*#)((!+*%+*!-(%-+ )+$,-$)- ,)#(,#*)&*,&() -,$-)$+, +(#,*#)*&,(&)+!*+%(-!(-%**%-(!-(%+*!+-$,- )+ ,+$),&*)&(,#()#*,$+) +, -)$-*&)(&,(#)*#,-%(-!*+%*+!(()#*,#*)&(,&+(!+*%-*!-(%)+ ,+$)-$,- )(&,*&)*#,(#(+%*+!*-%(-!+)$+, -) -,$*,&()&(,#*)#-*%-(!+(%+*!,-$)- ,+ )+$,*#)(#,(&)*&*-!(-%(+!*+%-, -)$+,$+) ","F 4/m -3 2/c":" !#$%#$!& %&# !#$%&$!& %!# %#$!&$%& )(-,*-)*+,(+(+,*+)*-,(-)+)*+,(-)(-,*$%& !& %#$!#&$%& !# %#$!%&$!& %# !#$,*+)(+,(-)*-*-)(-,(+)*+,-,(-)*+,*+)( )+$,+$)- ,-#()#*,&*)&(,!+(%+*!-*%-() &,$&)$#, #(#%*#!*&%(&!+!$+% -! -%$$,- )- ,+$)+&*,&()#(,#*)%-*!-(%+(!+*,$#) #, &)$&*&!(&%(#!*#%-% -!$+%$+! (!+*%+*!-(%-+ )+$,-$)- ,)#(,#*)&*,&(!(&%*&!*#%(# +%$+!$-% -!#)$#, &) &,$*%-(!-(%+*!+-$,- )+ ,+$),&*)&(,#()#*%*#!(#%(&!*&$-! -% +!$+%&, &)$#,$#) ()#*,#*)&(,&+(!+*%-*!-(%)+ ,+$)-$,- ! -%$-!$+% + #,$#)$&, &)#!*#%(&!(&%**,&()&(,#*)#-*%-(!+(%+*!,-$)- ,+ )+$%$+! +% -!$-$&) &, #)$#,&%(&!*#%*#!(","F 41/d -3 2/m":" !#$,+*)&(%-# !+$,&*)-(%!# ,+$)&*%-(:3>46=7<98;5;58<976=43>:97<58;>:3=4664=3:>;85<79=64>3:5;89<74=6:>385;79<,$+! #%(-)*&*&)(-% #!$+,-%(&)*+,$#!  )+$%#*!-(,&#()+*%&$!- ,!+(,#*)-$%& :;=4<>765839;94<5:6>83=79:6543>7;=8<68>37=;49<:5=<8>;753496:4><:=;893756,*#!(+% &)$-*-!(&, +)$#%-, &!$+%*#)((!+*,#$)- %&+ )#$%-*!&(,)#(%+*!&$,- 73=86>:<54;935469:<=8;>7576983=:;>4<<4>;:=389675>68=379;45<:8=<7>;453:96%$#) +,(&!*-$&! -,(#)*+%&% -)$#,*+!(()#*%+$!& ,-+(!#*,-$)& %)+ %#$!-*,&(7;>8<=:69435398657<>4;=:5:<94;=73>86<8=;7>3456:9><4=;:9385678>67=349;:5<%*+)(#, -!$&$-) &%(+!*#,&,(-!*#%$+) ","F 41/d -3 2/c":" !#$,+*)&(%-# !+$,&*)-(%!# ,+$)&*%-(:3>46=7<98;5;58<976=43>:97<58;>:3=46<8>;7=3496:5><8=;793456:8><7=;493:56%*#)(+, &!$-$-! &,(+)*#%&, -!$#%*+)( )+$%#*!-(,&#()+*%&$!- ,!+(,#*)-$%& :;=4<>765839;94<5:6>83=79:6543>7;=8<<4=;:>385679>64=3:9;85<78=67>345;:9<%$+) #,(-!*&$&) -%(#!*+,&%(-)*#,$+! (!+*,#$)- %&+ )#$%-*!&(,)#(%+*!&$,- 73=86>:<54;935469:<=8;>7576983=:;>4<68=37>;45<:9=<4>;:5389674>6:=389;75<,*+!(#% -)$&*-)(&% +!$#,-,(&!*+%$#) ()#*%+$!& ,-+(!#*,-$)& %)+ %#$!-*,&(7;>8<=:69435398657<>4;=:5:<94;=73>8664>3:=;89<75=68>375;49<:4=<:>;853796,$#! +%(&)*-*&!(-, #)$+%-% &)$+,*#!(","I 4/m -3 2/m":" !#$%#$!& %&# !#$%&$!& %!# %#$!&$%& ! &%$&!$#% # #%$#!$&% &!#!$#% &! &%$$%& !& %#$!#&$%& !# %#$!%&$!& %# !#$%$#! #% &!$&$&! &% #!$#%&% &!$#%$#! ()+*,+*)-(,-+()+*,-*)-(,)+(,+*)-*,-()(-,*-)*+,(+(+,*+)*-,(-)+)*+,(-)(-,**,-()-(,+*)+-*,-()+(,+*),-*)-(,+()+*,*+)(+,(-)*-*-)(-,(+)*+,-,(-)*+,*+)(","I 41/a -3 2/d":" !#*%+$)-(,&# !+*%-$)&(,!# %+*)-$,&(:3=8<>7694;5;54697<>83=:97654;=:3>8<$%&(!- ,+*)#&$%-(!+ ,#*)%&$!-(,+ )#*4<97358;=:6>6>:;=8357<94=8;>:694<573()+$,#*!& %-+()#$,&*!- %)+(,#$!&*%- 7;>46=:<5839398<5:6=4;>75:<983>7;=46*,- )&(%#$!+-*,& )#(%+$!,-*)& %#(!+$865:;943>7<=<=73>4;9:658>43=7<5869:;","P 1 1 2":" !#$%#","P 1 1 21":" !#$%+","B 1 1 2":" !#$%#(g+*%+","A 1 2 1":" !#$!& )+$)-","C 1 21 1":" !#$)&()#*!&","I 1 2 1":" !#$!&.'/0'2","I 1 21 1":" !#$)&.'/0!-","P 1 1 m":" !# !&","P 1 1 b":" !# )&","B 1 1 m":" !# !&(!+(!-","B 1 1 b":" !# )&(!+()-","P 1 1 2/m":" !# !&$%#$%&","P 1 1 21/m":" !#$%+$%& !-","B 1 1 2/m":" !# !&$%#$%&(!+(!-*%+*%-","P 1 1 2/b":" !#$,#$%& )&","P 1 1 21/b":" !#$%&$,+ )-","B 1 1 2/b":" !#$,#$%& )&(!+*,+*%-()-","P 21 2 2":" !#$!&(%&*%#","P 2 21 2":" !# ,&$)&$%#","P 21 21 2 (a)":" !#*,#.%&$'&","P 21 2 21":" !#$!&(%-*%+","P 2 21 21":" !# %&$)-$,+","C 2 2 21a)":" !#*%+(,&$)-()#$,+ %&*!-","C 2 2 2a":" !#*,#.%&$'&()#$%# ,&*!&","F 2 2 2a":" !#*,#.%&$'& '/*%/.12$!2.!/$,/ %20'2.'#$%# 1&0!&","I 2 2 2a":" !#*,#.%&$'&()+$%+*!- ,-","P 21/m 21/m 2/n a":" !#*,#$)&(%&$%&.'& ,#*!#","P 42 21 2a":" !#*,#%.+'$+$'&.%&! -,*-","I 2 3a":" !#*,#.%&$'&!# ,- '&$%/$# !-*!/$%&.%()+$%+ ,-*!-)+(%&(!-*,#*+()&$)#*,- ,"},Jy=/^[1-9]$/;function Qy(t){var e="";return 0<t.length&&(e=":"+gl(t).join(" OR :")),new bp(e)}var tb=function(t){void 0===t&&(t=""),this.name=t,this.partList=[]},eb={type:{configurable:!0}};eb.type.get=function(){return"Assembly"},tb.prototype.addPart=function(t,e){var i=new ib(t,e);return this.partList.push(i),i},tb.prototype.getAtomCount=function(i){return this.partList.reduce(function(t,e){return t+e.getAtomCount(i)},0)},tb.prototype.getResidueCount=function(i){return this.partList.reduce(function(t,e){return t+e.getResidueCount(i)},0)},tb.prototype.getInstanceCount=function(){var e=0;return this.partList.forEach(function(t){e+=t.matrixList.length}),e},tb.prototype.isIdentity=function(t){if(1!==this.partList.length)return!1;var e=this.partList[0];if(1!==e.matrixList.length)return!1;if(!(new Ke).equals(e.matrixList[0]))return!1;var i=[];return t.eachChain(function(t){i.push(t.chainname)}),i=gl(i),e.chainList.length===i.length},tb.prototype.getBoundingBox=function(i){var r=new Ai;return this.partList.forEach(function(t){var e=t.getBoundingBox(i);r.expandByPoint(e.min),r.expandByPoint(e.max)}),r},tb.prototype.getCenter=function(t){return this.getBoundingBox(t).getCenter(new Qe)},tb.prototype.getSelection=function(){var e=[];return this.partList.forEach(function(t){e=e.concat(t.chainList)}),Qy(e)},Object.defineProperties(tb.prototype,eb);var ib=function(t,e){void 0===t&&(t=[]),void 0===e&&(e=[]),this.matrixList=t,this.chainList=e},rb={type:{configurable:!0}};rb.type.get=function(){return"AssemblyPart"},ib.prototype._getCount=function(t,e){var i=this,r=0;return t.eachChain(function(t){(0===i.chainList.length||i.chainList.includes(t.chainname))&&(r+=t[e])}),this.matrixList.length*r},ib.prototype.getAtomCount=function(t){return this._getCount(t,"atomCount")},ib.prototype.getResidueCount=function(t){return this._getCount(t,"residueCount")},ib.prototype.getBoundingBox=function(t){var e=new Ai,i=new Ai,r=this.getSelection(),n=t.getBoundingBox(r);return this.matrixList.forEach(function(t){i.copy(n).applyMatrix4(t),e.expandByPoint(i.min),e.expandByPoint(i.max)}),e},ib.prototype.getSelection=function(){return Qy(this.chainList)},ib.prototype.getView=function(t){var e=this.getSelection();return e?t.getView(e):t},ib.prototype.getInstanceList=function(){for(var t=[],e=0,i=this.matrixList.length;e<i;++e)t.push({id:e+1,name:e,matrix:this.matrixList[e]});return t},Object.defineProperties(ib.prototype,rb);var nb=function(t){this.structure=t,this.currentModelindex=null,this.currentChainid=null,this.currentResname=null,this.currentResno=null,this.currentInscode=null,this.currentHetero=null,this.previousResname="",this.previousHetero=null,this.ai=-1,this.ri=-1,this.ci=-1,this.mi=-1};function ob(t,e){if(e){de.Debug&&Bp.time("assignSecondaryStructure");var i=[];t.eachModel(function(t){t.eachChain(function(t){i.push(t.chainname)})});var c=i.slice().sort(),u=[];c.forEach(function(t){u.push(i.indexOf(t))});var l=e.helices.filter(function(t){return 0<=fl(c,t[0])});l.sort(function(t,e){var i=t[0],r=e[0],n=t[1],o=e[1];if(i===r)return n===o?0:n<o?-1:1;var a=fl(c,i),s=fl(c,r);return u[a]<u[s]?-1:1});var p=t.residueStore;t.eachModel(function(t){var a=0,s=l.length;if(0!==s){var c=l[a],u=!1,h=!1;t.eachChain(function(t){var e=!1;if(t.chainname===c[0])for(var i=t.residueCount,r=t.residueOffset,n=r+i,o=r;o<n;++o)if(p.resno[o]===c[1]&&p.getInscode(o)===c[2]&&(u=!0),u&&(p.sstruc[o]=c[6],p.resno[o]===c[4]&&p.getInscode(o)===c[5]&&(u=!1,(a+=1)<s?(o=r-1,c=l[a],e=t.chainname!==c[0]):h=!0)),e||h)return})}});var d=e.sheets.filter(function(t){return 0<=fl(c,t[0])});d.sort(function(t,e){var i=t[0],r=e[0];if(i===r)return 0;var n=fl(c,i),o=fl(c,r);return u[n]<u[o]?-1:1});var f="e".charCodeAt(0);t.eachModel(function(t){var a=0,s=d.length;if(0!==s){var c=d[a],u=!1,h=!1;t.eachChain(function(t){var e=!1;if(t.chainname===c[0])for(var i=t.residueCount,r=t.residueOffset,n=r+i,o=r;o<n;++o)if(p.resno[o]===c[1]&&p.getInscode(o)===c[2]&&(u=!0),u&&(p.sstruc[o]=f,p.resno[o]===c[4]&&p.getInscode(o)===c[5]&&(u=!1,(a+=1)<s?(o=r-1,c=d[a],e=t.chainname!==c[0]):h=!0)),e||h)return})}}),de.Debug&&Bp.timeEnd("assignSecondaryStructure")}}nb.prototype.addResidueType=function(t){for(var e=this.structure.atomStore,i=this.structure.residueStore,r=this.structure.residueMap,n=i.atomCount[t],o=i.atomOffset[t],a=new Array(n),s=0;s<n;++s)a[s]=e.atomTypeId[o+s];i.residueTypeId[t]=r.add(this.previousResname,a,this.previousHetero)},nb.prototype.addAtom=function(t,e,i,r,n,o,a,s){var c=this.structure.atomStore,u=this.structure.residueStore,h=this.structure.chainStore,l=this.structure.modelStore,p=!1,d=!1,f=!1;this.currentModelindex!==t?(f=d=p=!0,this.mi+=1,this.ci+=1,this.ri+=1):this.currentChainid!==i?(f=d=!0,this.ci+=1,this.ri+=1):this.currentResno===n&&this.currentResname===r&&this.currentInscode===s||(f=!0,this.ri+=1),this.ai+=1,p&&(l.growIfFull(),l.chainOffset[this.mi]=this.ci,l.chainCount[this.mi]=0,l.count+=1,h.modelIndex[this.ci]=this.mi),d&&(h.growIfFull(),h.setChainname(this.ci,e),h.setChainid(this.ci,i),h.residueOffset[this.ci]=this.ri,h.residueCount[this.ci]=0,h.count+=1,h.modelIndex[this.ci]=this.mi,l.chainCount[this.mi]+=1,u.chainIndex[this.ri]=this.ci),f&&(this.previousResname=this.currentResname,this.previousHetero=this.currentHetero,0<this.ri&&this.addResidueType(this.ri-1),u.growIfFull(),u.resno[this.ri]=n,void 0!==a&&(u.sstruc[this.ri]=a.charCodeAt(0)),void 0!==s&&(u.inscode[this.ri]=s.charCodeAt(0)),u.atomOffset[this.ri]=this.ai,u.atomCount[this.ri]=0,u.count+=1,u.chainIndex[this.ri]=this.ci,h.residueCount[this.ci]+=1),c.count+=1,c.residueIndex[this.ai]=this.ri,u.atomCount[this.ri]+=1,this.currentModelindex=t,this.currentChainid=i,this.currentResname=r,this.currentResno=n,this.currentInscode=s,this.currentHetero=o},nb.prototype.finalize=function(){this.previousResname=this.currentResname,this.previousHetero=this.currentHetero,-1<this.ri&&this.addResidueType(this.ri)};var ab,sb=(ab=function(t,e,i,r){for(var n=t.structure,o=t.residueIndexStart,a=n.getResidueProxy(),s=n.getResidueProxy(),c=n.getAtomProxy(),u=n.getAtomProxy(),h=Math.max(0,e-2);h<=e;++h)for(var l=2;l<5;++l)if(!(h+l>=t.residueCount)){a.index=o+h,s.index=o+h+l,c.index=a.traceAtomIndex,u.index=s.traceAtomIndex;var p=c.distanceTo(u);if(Math.abs(p-i[l-2])>r)return!1}return!0},function(t){de.Debug&&Bp.time("calculateSecondaryStructure"),t.eachPolymer(function(t){if(!(t.residueCount<4)){if(t.isCg())!function(t){for(var e=t.residueStore,i=t.residueIndexStart,r=new jy(t).position,n=new Qe,o=new Qe,a=0,s=t.residueCount;a<s;++a){n.fromArray(r.center,3*a),o.fromArray(r.center,3*a+3);var c=n.distanceTo(o);c<2&&1<c&&r.bending[a]<20&&(e.sstruc[i+a]="h".charCodeAt(0),e.sstruc[i+a+1]="h".charCodeAt(0))}}(t);else{if(!t.isProtein())return;!function(t){for(var e=t.residueStore,i=t.residueIndexStart,r=0,n=t.residueCount;r<n;++r){var o="c";ab(t,r,[5.45,5.18,6.37],2.1)?o="h":ab(t,r,[6.1,10.4,13],1.42)&&(o="s"),e.sstruc[i+r]=o.charCodeAt(0)}}(t)}var e,i=0;t.eachResidue(function(t){t.sstruc===e?i+=1:(1===i&&(t.index-=1,t.sstruc="c"),i=1,e=t.sstruc)})}}),de.Debug&&Bp.timeEnd("calculateSecondaryStructure")}),cb="ABCDEFGHIJKLMNOPQRSTUVWXYZ";function ub(t){for(var e=cb.length,i=t,r=0,n=cb[i%e];e<=i;)i=Math.floor(i/e),n+=cb[i%e],r+=1;return 5<=r&&Bp.warn("chainname overflow"),n}function hb(t,a){void 0===a&&(a=!1),de.Debug&&Bp.time("calculateChainnames");var e=!0;if(t.eachChain(function(t){t.chainname&&(e=!1)}),e){var s=t.modelStore,c=t.chainStore,u=t.residueStore,h=t.getAtomProxy(),l=t.getAtomProxy(),p=0,d=0,f=0,m=0,g=[];1===u.count?g.push({mIndex:0,chainname:"A",rStart:0,rCount:1}):t.eachResidueN(2,function(t,e){var i=!1,r=t.backboneType,n=e.backboneType,o=$m;m=t.index,t.modelIndex!==e.modelIndex?i=!0:t.moleculeType!==e.moleculeType?i=!0:r!==o&&r===n&&(h.index=t.backboneEndAtomIndex,l.index=e.backboneStartAtomIndex,i=a?!h.hasBondTo(l):!h.connectedTo(l)),i||e.index!==u.count-1||(i=!0,m=e.index),i&&(g.push({mIndex:d,chainname:ub(p),rStart:f,rCount:m-f+1}),p+=1,t.modelIndex!==e.modelIndex&&(p=0,d+=1),e.index===u.count-1&&m!==e.index&&g.push({mIndex:d,chainname:ub(p),rStart:u.count-1,rCount:1}),f=e.index,m=e.index)}),c.count=0,g.forEach(function(t){!function(t,e,i,r){for(var n=c.count,o=0;o<r;++o)u.chainIndex[i+o]=n;c.growIfFull(),c.modelIndex[n]=t,c.setChainname(n,e),c.setChainid(n,e),c.residueOffset[n]=i,c.residueCount[n]=r,c.count+=1,s.chainCount[t]+=1}(t.mIndex,t.chainname,t.rStart,t.rCount)});var i=0;t.eachModel(function(t){s.chainOffset[t.index]=i,s.chainCount[t.index]-=1,i+=s.chainCount[t.index]})}de.Debug&&Bp.timeEnd("calculateChainnames")}function lb(t){de.Debug&&Bp.time("calculateBonds"),fb(t),mb(t),de.Debug&&Bp.timeEnd("calculateBonds")}var pb={"HIS|CD2|CG":2,"HIS|CE1|ND1":2,"ARG|CZ|NH2":2,"PHE|CE1|CZ":2,"PHE|CD2|CE2":2,"PHE|CD1|CG":2,"TRP|CD1|CG":2,"TRP|CD2|CE2":2,"TRP|CE3|CZ3":2,"TRP|CH2|CZ2":2,"ASN|CG|OD1":2,"GLN|CD|OE1":2,"TYR|CD1|CG":2,"TYR|CD2|CE2":2,"TYR|CE1|CZ":2,"ASP|CG|OD1":2,"GLU|CD|OE1":2,"G|C8|N7":2,"G|C4|C5":2,"G|C2|N3":2,"G|C6|O6":2,"C|C4|N3":2,"C|C5|C6":2,"C|C2|O2":2,"A|C2|N3":2,"A|C6|N1":2,"A|C4|C5":2,"A|C8|N7":2,"U|C5|C6":2,"U|C2|O2":2,"U|C4|O4":2,"DG|C8|N7":2,"DG|C4|C5":2,"DG|C2|N3":2,"DG|C6|O6":2,"DC|C4|N3":2,"DC|C5|C6":2,"DC|C2|O2":2,"DA|C2|N3":2,"DA|C6|N1":2,"DA|C4|C5":2,"DA|C8|N7":2,"DT|C5|C6":2,"DT|C2|O2":2,"DT|C4|O4":2};function db(t,e,i){var r;return e=(r=e<i?[e,i]:[i,e])[0],i=r[1],cg.includes(t)&&"C"===e&&"O"===i?2:pg.includes(t)&&"OP1"===e&&"P"===i?2:pb[t+"|"+e+"|"+i]||1}function fb(t,f){void 0===f&&(f=!1),de.Debug&&Bp.time("calculateBondsWithin");var m=t.bondStore,g=t.rungBondStore,v=t.getAtomSet(!1),y=t.getAtomProxy(),b=t.getAtomProxy(),x=t.getBondProxy(),_=f?null:function(t){de.Debug&&Bp.time("calculateAtomBondMap");var r=[];return t.eachBond(function(t){var e=t.atomIndex1,i=t.atomIndex2;void 0===r[e]&&(r[e]=[]),r[e][i]=t.index}),de.Debug&&Bp.timeEnd("calculateAtomBondMap"),r}(t);t.eachResidue(function(t){if(!f&&_){var e=t.atomCount,i=t.atomOffset;if(500<e)return void Bp.warn("more than 500 atoms, skip residue for auto-bonding",t.qualifiedName());for(var r=t.getBonds(),n=r.atomIndices1,o=r.atomIndices2,a=r.bondOrders,s=n.length,c=0;c<s;++c){var u=n[c]+i,h=o[c]+i,l=_[u];if(void 0!==l&&void 0!==l[h])x.index=l[h],a[t.residueType.getBondIndex(u,h)]=x.bondOrder;else y.index=u,b.index=h,m.addBond(y,b,a[c])}}var p=t.residueType.traceAtomIndex,d=t.residueType.rungEndAtomIndex;-1!==p&&-1!==d&&(y.index=t.traceAtomIndex,b.index=t.rungEndAtomIndex,g.addBond(y,b),v.set(y.index),v.set(b.index))}),t.atomSetDict.rung=v,de.Debug&&Bp.timeEnd("calculateBondsWithin")}function mb(t,n,o){void 0===n&&(n=!1),void 0===o&&(o=!1),de.Debug&&Bp.time("calculateBondsBetween");var a=t.bondStore,s=t.backboneBondStore,c=t.getAtomSet(!1),u=t.getAtomProxy(),h=t.getAtomProxy();function e(t,e){var i=t.backboneType,r=e.backboneType;i!==$m&&i===r&&(u.index=t.backboneEndAtomIndex,h.index=e.backboneStartAtomIndex,(o&&u.hasBondTo(h)||u.connectedTo(h))&&(n||a.addBond(u,h,1),u.index=t.traceAtomIndex,h.index=e.traceAtomIndex,s.addBond(u,h),c.set(u.index),c.set(h.index)))}0===s.count&&s.resize(t.residueStore.count),t.eachResidueN(2,e);var i=t.getResidueProxy(),r=t.getResidueProxy();if(t.eachChain(function(t){0!==t.residueCount&&(i.index=t.residueOffset,r.index=t.residueOffset+t.residueCount-1,e(r,i))}),t.atomSetDict.backbone=c,!n){de.Debug&&Bp.time("calculateBondsBetween inter");var l=t.spatialHash;t.eachResidue(function(t){t.backboneType!==$m||t.isWater()||t.eachAtom(function(e){e.isMetal()||l.eachWithin(e.x,e.y,e.z,4,function(t){h.index=t,e.modelIndex!==h.modelIndex||e.residueIndex===h.residueIndex||h.isMetal()||a.addBondIfConnected(e,h,1)})})}),de.Debug&&Bp.timeEnd("calculateBondsBetween inter")}de.Debug&&Bp.timeEnd("calculateBondsBetween")}function gb(t){if(t.unitcell){de.Debug&&Bp.time("buildUnitcellAssembly");var n=t.unitcell,o=t.center.clone().applyMatrix4(n.cartToFrac),a=o.clone().floor(),s=function(t){var e=Ky[t],i={};if(void 0===e)return console.warn("spacegroup '"+t+"' not found in symop library"),i;for(var r=[],n=0,o=e.length;n<o;n+=3){for(var a=[],s=0;s<3;++s)a.push(Zy[e[n+s]]);r.push(a)}return r.forEach(function(t){var s=0,e=(new Ke).set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1),c=e.elements;i[t.toString()]=e,t.forEach(function(t){for(var e=!1,i=!1,r=0,n=t.length;r<n;++r){var o=t[r];if("-"===o)e=!0;else if("+"===o)e=!1;else if("/"===o)i=!0;else if("X"===o)c[0+s]=e?-1:1;else if("Y"===o)c[4+s]=e?-1:1;else if("Z"===o)c[8+s]=e?-1:1;else if(Jy.test(o)){var a=parseInt(o);i?c[12+s]/=a:c[12+s]=a}else Bp.warn("getSymmetryOperations: unknown token '"+o+"'")}s+=1})}),i}(n.spacegroup),c=new Qe,u=new Qe,e=new tb("UNITCELL"),i=m(),r=[];if(t.biomolDict.NCS){r.push.apply(r,[new Ke].concat(t.biomolDict.NCS.partList[0].matrixList));var h=[];i.forEach(function(e){r.forEach(function(t){h.push(e.clone().multiply(t))})}),e.addPart(h)}else e.addPart(i);var l=new Qe,p=new tb("SUPERCELL"),d=Array.prototype.concat.call(m(l.set(1,0,0)),m(l.set(0,1,0)),m(l.set(0,0,1)),m(l.set(-1,0,0)),m(l.set(0,-1,0)),m(l.set(0,0,-1)),m(l.set(1,1,0)),m(l.set(1,0,1)),m(l.set(0,1,1)),m(l.set(-1,-1,0)),m(l.set(-1,0,-1)),m(l.set(0,-1,-1)),m(l.set(1,-1,-1)),m(l.set(1,1,-1)),m(l.set(1,-1,1)),m(l.set(-1,1,1)),m(l.set(-1,-1,1)),m(l.set(-1,1,-1)),m(l.set(0,1,-1)),m(l.set(0,-1,1)),m(l.set(1,0,-1)),m(l.set(-1,0,1)),m(l.set(1,-1,0)),m(l.set(-1,1,0)),m(),m(l.set(1,1,1)),m(l.set(-1,-1,-1)));if(t.biomolDict.NCS){var f=[];d.forEach(function(e){r.forEach(function(t){f.push(e.clone().multiply(t))})}),p.addPart(f)}else p.addPart(d);t.biomolDict.UNITCELL=e,t.biomolDict.SUPERCELL=p,de.Debug&&Bp.timeEnd("buildUnitcellAssembly")}function m(i){var r=[];return Object.keys(s).forEach(function(t){var e=s[t].clone();c.copy(o).applyMatrix4(e).floor(),u.setFromMatrixPosition(e),u.sub(c),u.add(a),i&&u.add(i),e.setPosition(u),e.multiplyMatrices(n.fracToCart,e),e.multiply(n.cartToFrac),r.push(e)}),r}}var vb=["H","C","O","N","S","P"],yb=["NA","CL","FE"];function bb(t){var e=t.trim().toUpperCase();parseInt(e.charAt(0))&&(e=e.substr(1)),parseInt(e.charAt(0))&&(e=e.substr(1));var i=e.length;if(0===i)return"";if(1===i)return e;if(2===i){if(-1!==yb.indexOf(e))return e;if(-1!==vb.indexOf(e[0]))return e[0]}return 3<=i&&-1!==vb.indexOf(e[0])?e[0]:""}function xb(t){var e=t.bondHash,f=e.countArray,m=e.offsetArray,g=e.indexArray,v=t.getBondProxy();t.eachResidue(function(t){var e=t.residueType;if(void 0===e.bonds){var u=t.atomOffset,h=[],l=[],p=[],d={};t.eachAtom(function(t){for(var e=t.index,i=m[e],r=0,n=f[e];r<n;++r){v.index=g[i+r];var o=v.atomIndex1,a=v.atomIndex2;if(a<o){var s=a;a=o,o=s}var c=o+"|"+a;void 0===d[c]&&(d[c]=!0,h.push(o-u),l.push(a-u),p.push(v.bondOrder))}}),e.bonds={atomIndices1:h,atomIndices2:l,bondOrders:p}}})}var _b=[3,11,19,37,55,87],wb=[4,12,20,38,56,88],Sb=[6,15,16,34],Ab=[1,7,8,9,17,35,53],Mb=[2,10,18,36,54,86],Pb=[13,30,31,48,49,50,80,81,82,83,84,85,112],Eb=[5,14,32,33,51,52,85],Cb=[9,17,35,53,85],Tb=function(t,e,i){this.structure=t,this.atomname=e,i=i||bb(e),this.element=i,this.number=tg[i]||0,this.vdw=eg[this.number]||2,this.covalent=ig[this.number]||1.6};Tb.prototype.getDefaultValence=function(){var t=rg[this.number];return t?t[0]:-1},Tb.prototype.getValenceList=function(){return rg[this.number]||[]},Tb.prototype.getOuterShellElectronCount=function(){return ng[this.number]||2},Tb.prototype.isMetal=function(){return this.isAlkaliMetal()||this.isAlkalineEarthMetal()||this.isLanthanide()||this.isActinide()||this.isTransitionMetal()||this.isPostTransitionMetal()},Tb.prototype.isNonmetal=function(){return this.isDiatomicNonmetal()||this.isPolyatomicNonmetal()||this.isNobleGas()},Tb.prototype.isMetalloid=function(){return Eb.includes(this.number)},Tb.prototype.isHalogen=function(){return Cb.includes(this.number)},Tb.prototype.isDiatomicNonmetal=function(){return Ab.includes(this.number)},Tb.prototype.isPolyatomicNonmetal=function(){return Sb.includes(this.number)},Tb.prototype.isAlkaliMetal=function(){return _b.includes(this.number)},Tb.prototype.isAlkalineEarthMetal=function(){return wb.includes(this.number)},Tb.prototype.isNobleGas=function(){return Mb.includes(this.number)},Tb.prototype.isTransitionMetal=function(){var t=this.number;return 21<=t&&t<=29||39<=t&&t<=47||72<=t&&t<=79||104<=t&&t<=108},Tb.prototype.isPostTransitionMetal=function(){return Pb.includes(this.number)},Tb.prototype.isLanthanide=function(){return 57<=this.number&&this.number<=71},Tb.prototype.isActinide=function(){return 89<=this.number&&this.number<=103};var Ib=function(t){this.structure=t,this.dict={},this.list=[],this.structure=t};Ib.prototype.add=function(t,e){t=t.toUpperCase(),e=e?e.toUpperCase():bb(t);var i=t+"|"+e,r=this.dict[i];if(void 0===r){var n=new Tb(this.structure,t,e);r=this.list.length,this.dict[i]=r,this.list.push(n)}return r},Ib.prototype.get=function(t){return this.list[t]};var Rb=function(t,e,i,r,n,o){this.structure=t,this.bondReferenceAtomIndices=[],this.resname=e,this.atomTypeIdList=i,this.hetero=r?1:0,this.chemCompType=n,this.bonds=o,this.atomCount=i.length,this.moleculeType=this.getMoleculeType(),this.backboneType=this.getBackboneType(0),this.backboneEndType=this.getBackboneType(-1),this.backboneStartType=this.getBackboneType(1),this.backboneIndexList=this.getBackboneIndexList();var a=yg[this.backboneType],s=yg[this.backboneStartType],c=yg[this.backboneEndType],u=this.getAtomIndexByName(a.trace);this.traceAtomIndex=al(u,-1);var h=this.getAtomIndexByName(a.direction1);this.direction1AtomIndex=al(h,-1);var l=this.getAtomIndexByName(a.direction2);this.direction2AtomIndex=al(l,-1);var p=this.getAtomIndexByName(s.backboneStart);this.backboneStartAtomIndex=al(p,-1);var d,f=this.getAtomIndexByName(c.backboneEnd);this.backboneEndAtomIndex=al(f,-1),d=lg.includes(e)?this.getAtomIndexByName("N1"):this.getAtomIndexByName("N3"),this.rungEndAtomIndex=al(d,-1)};Rb.prototype.getBackboneIndexList=function(){var t,e=[];switch(this.moleculeType){case 3:t=gg;break;case 4:case 5:t=vg;break;default:return e}for(var i=this.structure.atomMap,r=this.atomTypeIdList,n=0,o=this.atomCount;n<o;++n){var a=i.get(r[n]);t.includes(a.atomname)&&e.push(n)}return e},Rb.prototype.getMoleculeType=function(){return this.isProtein()?3:this.isRna()?4:this.isDna()?5:this.isWater()?1:this.isIon()?2:this.isSaccharide()?6:0},Rb.prototype.getBackboneType=function(t){return this.hasProteinBackbone(t)?1:this.hasRnaBackbone(t)?2:this.hasDnaBackbone(t)?3:this.hasCgProteinBackbone(t)?4:this.hasCgRnaBackbone(t)?5:this.hasCgDnaBackbone(t)?6:$m},Rb.prototype.isProtein=function(){return this.chemCompType?Wm.includes(this.chemCompType):this.hasAtomWithName("CA","C","N")||cg.includes(this.resname)},Rb.prototype.isCg=function(){var t=this.backboneType;return 4===t||5===t||6===t},Rb.prototype.isNucleic=function(){return this.isRna()||this.isDna()},Rb.prototype.isRna=function(){return this.chemCompType?Xm.includes(this.chemCompType):this.hasAtomWithName(["P","O3'","O3*"],["C4'","C4*"],["O2'","O2*","F2'","F2*"])||ug.includes(this.resname)&&this.hasAtomWithName(["O2'","O2*","F2'","F2*"])},Rb.prototype.isDna=function(){return this.chemCompType?qm.includes(this.chemCompType):this.hasAtomWithName(["P","O3'","O3*"],["C3'","C3*"])&&!this.hasAtomWithName(["O2'","O2*","F2'","F2*"])||hg.includes(this.resname)},Rb.prototype.isHetero=function(){return 1===this.hetero},Rb.prototype.isIon=function(){return fg.includes(this.resname)},Rb.prototype.isWater=function(){return dg.includes(this.resname)},Rb.prototype.isSaccharide=function(){return this.chemCompType?Ym.includes(this.chemCompType):mg.includes(this.resname)},Rb.prototype.isStandardAminoacid=function(){return cg.includes(this.resname)},Rb.prototype.isStandardBase=function(){return pg.includes(this.resname)},Rb.prototype.hasBackboneAtoms=function(t,e){var i=yg[e];return-1===t?this.hasAtomWithName(i.trace,i.backboneEnd,i.direction1,i.direction2):0===t?this.hasAtomWithName(i.trace,i.direction1,i.direction2):1===t?this.hasAtomWithName(i.trace,i.backboneStart,i.direction1,i.direction2):this.hasAtomWithName(i.trace,i.backboneStart,i.backboneEnd,i.direction1,i.direction2)},Rb.prototype.hasProteinBackbone=function(t){return this.isProtein()&&this.hasBackboneAtoms(t,1)},Rb.prototype.hasRnaBackbone=function(t){return this.isRna()&&this.hasBackboneAtoms(t,2)},Rb.prototype.hasDnaBackbone=function(t){return this.isDna()&&this.hasBackboneAtoms(t,3)},Rb.prototype.hasCgProteinBackbone=function(t){return this.atomCount<7&&this.isProtein()&&this.hasBackboneAtoms(t,4)},Rb.prototype.hasCgRnaBackbone=function(t){return this.atomCount<11&&this.isRna()&&this.hasBackboneAtoms(t,5)},Rb.prototype.hasCgDnaBackbone=function(t){return this.atomCount<11&&this.isDna()&&this.hasBackboneAtoms(t,6)},Rb.prototype.hasBackbone=function(t){return this.hasProteinBackbone(t)||this.hasRnaBackbone(t)||this.hasDnaBackbone(t)||this.hasCgProteinBackbone(t)||this.hasCgRnaBackbone(t)||this.hasCgDnaBackbone(t)},Rb.prototype.getAtomIndexByName=function(t){var e=this.atomCount,i=this.structure.atomMap,r=this.atomTypeIdList;if(Array.isArray(t))for(var n=0;n<e;++n){var o=r[n];if(t.includes(i.get(o).atomname))return n}else for(var a=0;a<e;++a){var s=r[a];if(t===i.get(s).atomname)return a}},Rb.prototype.hasAtomWithName=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];for(var i=t.length,r=0;r<i;++r)if(void 0!==t[r]&&void 0===this.getAtomIndexByName(t[r]))return!1;return!0},Rb.prototype.getBonds=function(t){return void 0===this.bonds&&(this.bonds=function(t){var e=t.structure,i=e.getAtomProxy(),r=e.getAtomProxy(),n=t.atomCount,o=t.atomOffset,a=o+n-1,s=[],c=[],u=[];if(500<n)de.Debug&&Bp.warn("more than 500 atoms, skip residue for auto-bonding",t.qualifiedName());else if(50<n)for(var h=new Yy(t,!0),l=t.isCg()?1.2:2.3,p=o;p<a;++p){i.index=p;for(var d=i.covalent+l+.3,f=h.nearest(i,1/0,d*d),m=f.length,g=0;g<m;++g)r.index=f[g].index,i.index<r.index&&i.connectedTo(r)&&(s.push(i.index-o),c.push(r.index-o),u.push(db(i.resname,i.atomname,r.atomname)))}else for(var v=o;v<a;++v)for(var y=(i.index=v)+1;y<=a;++y)r.index=y,i.connectedTo(r)&&(s.push(v-o),c.push(y-o),u.push(db(i.resname,i.atomname,r.atomname)));return{atomIndices1:s,atomIndices2:c,bondOrders:u}}(t)),this.bonds},Rb.prototype.getRings=function(){return void 0===this.rings&&this.calculateRings(),this.rings},Rb.prototype.getBondGraph=function(){return void 0===this.bondGraph&&this.calculateBondGraph(),this.bondGraph},Rb.prototype.getAromatic=function(t){return void 0===this.aromaticAtoms&&this.calculateAromatic(this.structure.getResidueProxy(t.residueIndex)),this.aromaticAtoms},Rb.prototype.getAromaticRings=function(t){return void 0===this.aromaticRings&&this.calculateAromatic(t),this.aromaticRings},Rb.prototype.calculateBondGraph=function(){for(var t=this.bondGraph={},e=this.getBonds(),i=e.atomIndices1.length,r=e.atomIndices1,n=e.atomIndices2,o=0;o<i;++o){var a=r[o],s=n[o];(t[a]=t[a]||[]).push(s),(t[s]=t[s]||[]).push(a)}},Rb.prototype.calculateRings=function(){for(var t=function(t,e){for(var i={count:e,visited:new Int32Array(e),queue:new Int32Array(e),pred:new Int32Array(e),left:new Int32Array(Bb),right:new Int32Array(Bb),color:new Int32Array(e),currentColor:0,rings:[],flags:new Int8Array(e),bonds:t},r=0;r<e;r++)i.visited[r]=-1,i.pred[r]=-1;return i}(this.getBondGraph(),this.atomCount),e=0;e<t.count;e++)0<=t.visited[e]||kb(t,e);this.rings={flags:t.flags,rings:t.rings}},Rb.prototype.isAromatic=function(t){return this.aromaticAtoms=this.getAromatic(t),1===this.aromaticAtoms[t.index-t.residueAtomOffset]},Rb.prototype.calculateAromatic=function(e){var i=this,r=this.aromaticAtoms=new Uint8Array(this.atomCount),t=this.getRings().rings,n=t.map(function(t){return function(t){if(t.some(function(t){return!Lb.includes(t.number)}))return!1;var e=0,i=new _v(3,t.length),r=i.data;return t.forEach(function(t){r[e+0]=t.x,r[e+1]=t.y,r[e+2]=t.z,e+=3}),new Ry(i).vecC.length()<Ob}(t.map(function(t){return i.structure.getAtomProxy(t+e.atomOffset)}))}),o=this.aromaticRings=[];t.forEach(function(t,e){n[e]&&(o.push(t),t.forEach(function(t){return r[t]=1}))})},Rb.prototype.assignBondReferenceAtomIndices=function(){for(var t=this.getBondGraph(),e=this.getRings(),i=e.flags,r=e.rings,n=this.bonds,o=n.atomIndices1,a=n.atomIndices2,s=n.bondOrders,c=this.bondReferenceAtomIndices,u=n.atomIndices1.length,h=c.length=0;h<u;++h)if(!(s[h]<=1)){var l=o[h],p=a[h];if(i[l]&&i[p]){for(var d=0;d<r.length&&void 0===c[h];++d)for(var f=r[d],m=null,g=!1,v=0;v<f.length;++v){var y=f[v];if(y===l||y===p?g=!0:m=y,g&&null!==m){c[h]=m;break}}if(void 0!==c[h])continue}if(1<t[l].length)for(var b=0;b<t[l].length;++b){var x=t[l][b];if(x!==p){c[h]=x;break}}else if(1<t[p].length)for(var _=0;_<t[p].length;++_){var w=t[p][_];if(w!==l){c[h]=w;break}}else;}},Rb.prototype.getBondIndex=function(t,e){for(var i=this.bonds,r=i.atomIndices1,n=i.atomIndices2,o=r.indexOf(t),a=n.indexOf(e),s=a;-1!==o;){for(;-1!==a;){if(o===a)return o;a=n.indexOf(e,a+1)}o=r.indexOf(t,o+1),a=s}},Rb.prototype.getBondReferenceAtomIndex=function(t,e){var i=this.getBondIndex(t,e);if(void 0!==i)return 0===this.bondReferenceAtomIndices.length&&this.assignBondReferenceAtomIndices(),this.bondReferenceAtomIndices[i]};var Lb=[5,6,7,8,14,15,16,32,33,50,51,83],Ob=.05;function Db(t,e,i){if(!(i<e)){for(var r=t.pred,n=t.color,o=t.left,a=t.right,s=++t.currentColor,c=e,u=0;u<Bb&&(n[c]=s,!((c=r[c])<0));u++);var h=0,l=0,p=!1,d=0;c=i;for(var f=0;f<Bb;f++){if(n[c]===s){d=c,p=!0;break}if((c=r[a[l++]=c])<0)break}if(p){c=e;for(var m=0;m<Bb&&d!==(o[h++]=c)&&!((c=r[c])<0);m++);for(var g=h+l,v=new Array(g),y=0,b=0;b<h;b++)v[y++]=o[b];for(var x=l-1;0<=x;x--)v[y++]=a[x];for(var _=0;_<g;++_)t.flags[v[_]]=1;t.rings.push(v)}}}function kb(t,e){var i=t.bonds,r=t.visited,n=t.queue,o=t.pred;r[e]=1,n[0]=e;for(var a=0,s=1;a<s;){var c=n[a++];if(void 0!==i[c])for(var u=i[c].length,h=0;h<u;h++){var l=i[c][h];0<r[l]?o[l]!==c&&o[c]!==l&&Db(t,c,l):(r[l]=1,o[n[s++]=l]=c)}}}var Bb=4;var Nb=function(t){this.structure=t,this.dict={},this.list=[]};Nb.prototype.add=function(t,e,i,r,n){void 0===r&&(r=""),t=t.toUpperCase();var o,a,s=(o=i,void 0===(a=r)&&(a=""),t+"|"+e.join(",")+"|"+(o?1:0)+"|"+a),c=this.dict[s];if(void 0===c){var u=new Rb(this.structure,t,e,i,r,n);c=this.list.length,this.dict[s]=c,this.list.push(u)}return c},Nb.prototype.get=function(t){return this.list[t]};var Fb=function(t,e){void 0===e&&(e=0),this.structure=t,this.index=e,this.bondStore=t.bondStore,this._v12=new Qe,this._v13=new Qe,this._ap1=this.structure.getAtomProxy(),this._ap2=this.structure.getAtomProxy(),this._ap3=this.structure.getAtomProxy()},zb={atom1:{configurable:!0},atom2:{configurable:!0},atomIndex1:{configurable:!0},atomIndex2:{configurable:!0},bondOrder:{configurable:!0}};zb.atom1.get=function(){return this.structure.getAtomProxy(this.atomIndex1)},zb.atom2.get=function(){return this.structure.getAtomProxy(this.atomIndex2)},zb.atomIndex1.get=function(){return this.bondStore.atomIndex1[this.index]},zb.atomIndex1.set=function(t){this.bondStore.atomIndex1[this.index]=t},zb.atomIndex2.get=function(){return this.bondStore.atomIndex2[this.index]},zb.atomIndex2.set=function(t){this.bondStore.atomIndex2[this.index]=t},zb.bondOrder.get=function(){return this.bondStore.bondOrder[this.index]},zb.bondOrder.set=function(t){this.bondStore.bondOrder[this.index]=t},Fb.prototype.getOtherAtomIndex=function(t){return t===this.atomIndex1?this.atomIndex2:this.atomIndex1},Fb.prototype.getOtherAtom=function(t){return this.structure.getAtomProxy(this.getOtherAtomIndex(t.index))},Fb.prototype.getReferenceAtomIndex=function(){var t=this._ap1,e=this._ap2;if(t.index=this.atomIndex1,e.index=this.atomIndex2,t.residueIndex===e.residueIndex){var i=t.index-t.residueAtomOffset,r=e.index-e.residueAtomOffset,n=t.residueType.getBondReferenceAtomIndex(i,r);if(void 0!==n)return n+t.residueAtomOffset;console.warn("No reference atom found",t.index,e.index)}},Fb.prototype.calculateShiftDir=function(t){void 0===t&&(t=new Qe);var e=this._ap1,i=this._ap2,r=this._ap3,n=this._v12,o=this._v13;e.index=this.atomIndex1,i.index=this.atomIndex2;var a=this.getReferenceAtomIndex();n.subVectors(e,i).normalize(),void 0!==a?(r.index=a,o.subVectors(e,r)):o.copy(e),o.normalize();var s=n.dot(o);return 1-Math.abs(s)<1e-5&&(o.set(1,0,0),s=n.dot(o),1-Math.abs(s)<1e-5&&(o.set(0,1,0),s=n.dot(o))),t.copy(o.sub(n.multiplyScalar(s))).normalize()},Fb.prototype.qualifiedName=function(){return this.atomIndex1+"="+this.atomIndex2},Fb.prototype.clone=function(){return new Fb(this.structure,this.index)},Fb.prototype.toObject=function(){return{atomIndex1:this.atomIndex1,atomIndex2:this.atomIndex2,bondOrder:this.bondOrder}},Object.defineProperties(Fb.prototype,zb);var Ub=function(t,e){void 0===e&&(e=0),this.structure=t,this.index=e,this.chainStore=t.chainStore,this.residueStore=t.residueStore,this.atomStore=t.atomStore,this.residueMap=t.residueMap,this.atomMap=t.atomMap},jb={entity:{configurable:!0},entityIndex:{configurable:!0},chain:{configurable:!0},chainIndex:{configurable:!0},atomOffset:{configurable:!0},atomCount:{configurable:!0},atomEnd:{configurable:!0},modelIndex:{configurable:!0},chainname:{configurable:!0},chainid:{configurable:!0},resno:{configurable:!0},sstruc:{configurable:!0},inscode:{configurable:!0},residueType:{configurable:!0},resname:{configurable:!0},hetero:{configurable:!0},moleculeType:{configurable:!0},backboneType:{configurable:!0},backboneStartType:{configurable:!0},backboneEndType:{configurable:!0},traceAtomIndex:{configurable:!0},direction1AtomIndex:{configurable:!0},direction2AtomIndex:{configurable:!0},backboneStartAtomIndex:{configurable:!0},backboneEndAtomIndex:{configurable:!0},rungEndAtomIndex:{configurable:!0},x:{configurable:!0},y:{configurable:!0},z:{configurable:!0}};jb.entity.get=function(){return this.structure.entityList[this.entityIndex]},jb.entityIndex.get=function(){return this.chainStore.entityIndex[this.chainIndex]},jb.chain.get=function(){return this.structure.getChainProxy(this.chainIndex)},jb.chainIndex.get=function(){return this.residueStore.chainIndex[this.index]},jb.chainIndex.set=function(t){this.residueStore.chainIndex[this.index]=t},jb.atomOffset.get=function(){return this.residueStore.atomOffset[this.index]},jb.atomOffset.set=function(t){this.residueStore.atomOffset[this.index]=t},jb.atomCount.get=function(){return this.residueStore.atomCount[this.index]},jb.atomCount.set=function(t){this.residueStore.atomCount[this.index]=t},jb.atomEnd.get=function(){return this.atomOffset+this.atomCount-1},jb.modelIndex.get=function(){return this.chainStore.modelIndex[this.chainIndex]},jb.chainname.get=function(){return this.chainStore.getChainname(this.chainIndex)},jb.chainid.get=function(){return this.chainStore.getChainid(this.chainIndex)},jb.resno.get=function(){return this.residueStore.resno[this.index]},jb.resno.set=function(t){this.residueStore.resno[this.index]=t},jb.sstruc.get=function(){return this.residueStore.getSstruc(this.index)},jb.sstruc.set=function(t){this.residueStore.setSstruc(this.index,t)},jb.inscode.get=function(){return this.residueStore.getInscode(this.index)},jb.inscode.set=function(t){this.residueStore.setInscode(this.index,t)},jb.residueType.get=function(){return this.residueMap.get(this.residueStore.residueTypeId[this.index])},jb.resname.get=function(){return this.residueType.resname},jb.hetero.get=function(){return this.residueType.hetero},jb.moleculeType.get=function(){return this.residueType.moleculeType},jb.backboneType.get=function(){return this.residueType.backboneType},jb.backboneStartType.get=function(){return this.residueType.backboneStartType},jb.backboneEndType.get=function(){return this.residueType.backboneEndType},jb.traceAtomIndex.get=function(){return this.residueType.traceAtomIndex+this.atomOffset},jb.direction1AtomIndex.get=function(){return this.residueType.direction1AtomIndex+this.atomOffset},jb.direction2AtomIndex.get=function(){return this.residueType.direction2AtomIndex+this.atomOffset},jb.backboneStartAtomIndex.get=function(){return this.residueType.backboneStartAtomIndex+this.atomOffset},jb.backboneEndAtomIndex.get=function(){return this.residueType.backboneEndAtomIndex+this.atomOffset},jb.rungEndAtomIndex.get=function(){return this.residueType.rungEndAtomIndex+this.atomOffset},jb.x.get=function(){for(var t=0,e=this.atomOffset;e<=this.atomEnd;++e)t+=this.atomStore.x[e];return t/this.atomCount},jb.y.get=function(){for(var t=0,e=this.atomOffset;e<=this.atomEnd;++e)t+=this.atomStore.y[e];return t/this.atomCount},jb.z.get=function(){for(var t=0,e=this.atomOffset;e<=this.atomEnd;++e)t+=this.atomStore.z[e];return t/this.atomCount},Ub.prototype.eachAtom=function(t,e){var i=this.atomCount,r=this.atomOffset,n=this.structure._ap,o=r+i;if(e&&e.atomOnlyTest)for(var a=e.atomOnlyTest,s=r;s<o;++s)n.index=s,a(n)&&t(n);else for(var c=r;c<o;++c)n.index=c,t(n)},Ub.prototype.positionToArray=function(t,e){return void 0===t&&(t=[]),void 0===e&&(e=0),t[e+0]=this.x,t[e+1]=this.y,t[e+2]=this.z,t},Ub.prototype.isProtein=function(){return 3===this.residueType.moleculeType},Ub.prototype.isNucleic=function(){var t=this.residueType.moleculeType;return 4===t||5===t},Ub.prototype.isRna=function(){return 4===this.residueType.moleculeType},Ub.prototype.isDna=function(){return 5===this.residueType.moleculeType},Ub.prototype.isCg=function(){var t=this.residueType.backboneType;return 4===t||5===t||6===t},Ub.prototype.isPolymer=function(){if(0<this.structure.entityList.length)return this.entity.isPolymer();var t=this.residueType.moleculeType;return 3===t||4===t||5===t},Ub.prototype.isHetero=function(){return 1===this.residueType.hetero},Ub.prototype.isWater=function(){return 1===this.residueType.moleculeType},Ub.prototype.isIon=function(){return 2===this.residueType.moleculeType},Ub.prototype.isSaccharide=function(){return 6===this.residueType.moleculeType},Ub.prototype.isStandardAminoacid=function(){return this.residueType.isStandardAminoacid()},Ub.prototype.isStandardBase=function(){return this.residueType.isStandardBase()},Ub.prototype.isHelix=function(){return Km.includes(this.sstruc)},Ub.prototype.isSheet=function(){return Jm.includes(this.sstruc)},Ub.prototype.isTurn=function(){return Qm.includes(this.sstruc)&&this.isProtein()},Ub.prototype.getAtomType=function(t){return this.atomMap.get(this.atomStore.atomTypeId[t])},Ub.prototype.getResname1=function(){return sg[this.resname.toUpperCase()]||"X"},Ub.prototype.getBackboneType=function(t){switch(t){case-1:return this.residueType.backboneStartType;case 1:return this.residueType.backboneEndType;default:return this.residueType.backboneType}},Ub.prototype.getAtomIndexByName=function(t){var e=this.residueType.getAtomIndexByName(t);return void 0!==e&&(e+=this.atomOffset),e},Ub.prototype.hasAtomWithName=function(t){return this.residueType.hasAtomWithName(t)},Ub.prototype.getAtomnameList=function(){console.warn("getAtomnameList - might be expensive");for(var t=this.atomCount,e=this.atomOffset,i=new Array(t),r=0;r<t;++r)i[r]=this.getAtomType(e+r).atomname;return i},Ub.prototype.connectedTo=function(t){var e=this.structure.getAtomProxy(this.backboneEndAtomIndex),i=this.structure.getAtomProxy(t.backboneStartAtomIndex);return!(!e||!i)&&e.connectedTo(i)},Ub.prototype.getNextConnectedResidue=function(){var t=this.chainStore.residueOffset[this.chainIndex],e=this.chainStore.residueCount[this.chainIndex],i=this.index+1;if(i<t+e){var r=this.structure.getResidueProxy(i);if(this.connectedTo(r))return r}else if(i===t+e){var n=this.structure.getResidueProxy(t);if(this.connectedTo(n))return n}},Ub.prototype.getPreviousConnectedResidue=function(t){var e=this.chainStore.residueOffset[this.chainIndex],i=this.index-1;if(e<=i){var r=al(t,this.structure.getResidueProxy());if(r.index=i,r.connectedTo(this))return r}else if(i===e-1){var n=this.chainStore.residueCount[this.chainIndex],o=al(t,this.structure.getResidueProxy());if(o.index=e+n-1,o.connectedTo(this))return o}},Ub.prototype.getBonds=function(){return this.residueType.getBonds(this)},Ub.prototype.getRings=function(){return this.residueType.getRings()},Ub.prototype.getAromaticRings=function(){return this.residueType.getAromaticRings(this)},Ub.prototype.qualifiedName=function(t){void 0===t&&(t=!1);var e="";return this.resname&&!t&&(e+="["+this.resname+"]"),void 0!==this.resno&&(e+=this.resno),this.inscode&&(e+="^"+this.inscode),this.chain&&(e+=":"+this.chainname),e+="/"+this.modelIndex},Ub.prototype.clone=function(){return new Ub(this.structure,this.index)},Ub.prototype.toObject=function(){return{index:this.index,chainIndex:this.chainIndex,atomOffset:this.atomOffset,atomCount:this.atomCount,resno:this.resno,resname:this.resname,sstruc:this.sstruc}},Object.defineProperties(Ub.prototype,jb);var Gb=function(t,e,i){this.structure=t,this.residueIndexStart=e,this.residueIndexEnd=i,this.chainStore=t.chainStore,this.residueStore=t.residueStore,this.atomStore=t.atomStore,this.residueCount=i-e+1;var r=this.structure.getResidueProxy(this.residueIndexStart),n=this.structure.getResidueProxy(this.residueIndexEnd);this.isPrevConnected=void 0!==r.getPreviousConnectedResidue();var o=n.getNextConnectedResidue();this.isNextConnected=void 0!==o,this.isNextNextConnected=void 0!==o&&void 0!==o.getNextConnectedResidue(),this.isCyclic=n.connectedTo(r),this.__residueProxy=this.structure.getResidueProxy()},Vb={chainIndex:{configurable:!0},modelIndex:{configurable:!0},chainname:{configurable:!0}};Vb.chainIndex.get=function(){return this.residueStore.chainIndex[this.residueIndexStart]},Vb.modelIndex.get=function(){return this.chainStore.modelIndex[this.chainIndex]},Vb.chainname.get=function(){return this.chainStore.getChainname(this.chainIndex)},Gb.prototype.isProtein=function(){return this.__residueProxy.index=this.residueIndexStart,this.__residueProxy.isProtein()},Gb.prototype.isCg=function(){return this.__residueProxy.index=this.residueIndexStart,this.__residueProxy.isCg()},Gb.prototype.isNucleic=function(){return this.__residueProxy.index=this.residueIndexStart,this.__residueProxy.isNucleic()},Gb.prototype.getMoleculeType=function(){return this.__residueProxy.index=this.residueIndexStart,this.__residueProxy.moleculeType},Gb.prototype.getBackboneType=function(t){return this.__residueProxy.index=this.residueIndexStart,this.__residueProxy.getBackboneType(t)},Gb.prototype.getAtomIndexByType=function(t,e){this.isCyclic?-1===t?t=this.residueCount-1:t===this.residueCount&&(t=0):(-1!==t||this.isPrevConnected||(t+=1),t!==this.residueCount||this.isNextNextConnected||(t-=1));var i,r=this.__residueProxy;switch(r.index=this.residueIndexStart+t,e){case"trace":i=r.traceAtomIndex;break;case"direction1":i=r.direction1AtomIndex;break;case"direction2":i=r.direction2AtomIndex;break;default:i=r.getAtomIndexByName(e)}return i},Gb.prototype.eachAtom=function(e,i){this.eachResidue(function(t){t.eachAtom(e,i)})},Gb.prototype.eachAtomN=function(t,e,i){for(var r=this.residueCount,n=new Array(t),o=0;o<t;++o)n[o]=this.structure.getAtomProxy(this.getAtomIndexByType(o,i));e.apply(this,n);for(var a=t;a<r;++a){for(var s=1;s<t;++s)n[s-1].index=n[s].index;n[t-1].index=this.getAtomIndexByType(a,i),e.apply(this,n)}},Gb.prototype.eachResidue=function(t){for(var e=this.structure.getResidueProxy(),i=this.residueCount,r=this.residueIndexStart,n=0;n<i;++n)e.index=r+n,t(e)},Gb.prototype.qualifiedName=function(){var t=this.structure.getResidueProxy(this.residueIndexStart),e=this.structure.getResidueProxy(this.residueIndexEnd);return t.qualifiedName()+" - "+e.qualifiedName()},Object.defineProperties(Gb.prototype,Vb);var Hb=function(t,e){void 0===e&&(e=0),this.structure=t,this.index=e,this.chainStore=t.chainStore,this.residueStore=t.residueStore},$b={entity:{configurable:!0},model:{configurable:!0},entityIndex:{configurable:!0},modelIndex:{configurable:!0},residueOffset:{configurable:!0},residueCount:{configurable:!0},residueEnd:{configurable:!0},atomOffset:{configurable:!0},atomEnd:{configurable:!0},atomCount:{configurable:!0},chainname:{configurable:!0},chainid:{configurable:!0}};$b.entity.get=function(){return this.structure.entityList[this.entityIndex]},$b.model.get=function(){return this.structure.getModelProxy(this.modelIndex)},$b.entityIndex.get=function(){return this.chainStore.entityIndex[this.index]},$b.entityIndex.set=function(t){this.chainStore.entityIndex[this.index]=t},$b.modelIndex.get=function(){return this.chainStore.modelIndex[this.index]},$b.modelIndex.set=function(t){this.chainStore.modelIndex[this.index]=t},$b.residueOffset.get=function(){return this.chainStore.residueOffset[this.index]},$b.residueOffset.set=function(t){this.chainStore.residueOffset[this.index]=t},$b.residueCount.get=function(){return this.chainStore.residueCount[this.index]},$b.residueCount.set=function(t){this.chainStore.residueCount[this.index]=t},$b.residueEnd.get=function(){return this.residueOffset+this.residueCount-1},$b.atomOffset.get=function(){return this.residueStore.atomOffset[this.residueOffset]},$b.atomEnd.get=function(){return this.residueStore.atomOffset[this.residueEnd]+this.residueStore.atomCount[this.residueEnd]-1},$b.atomCount.get=function(){return 0===this.residueCount?0:this.atomEnd-this.atomOffset+1},$b.chainname.get=function(){return this.chainStore.getChainname(this.index)},$b.chainname.set=function(t){this.chainStore.setChainname(this.index,t)},$b.chainid.get=function(){return this.chainStore.getChainid(this.index)},$b.chainid.set=function(t){this.chainStore.setChainid(this.index,t)},Hb.prototype.eachAtom=function(e,i){this.eachResidue(function(t){t.eachAtom(e,i)},i)},Hb.prototype.eachResidue=function(t,e){var i=this.residueCount,r=this.residueOffset,n=this.structure._rp,o=r+i;if(e&&e.test){var a=e.residueOnlyTest;if(a)for(var s=r;s<o;++s)n.index=s,a(n)&&t(n);else for(var c=r;c<o;++c)n.index=c,t(n)}else for(var u=r;u<o;++u)n.index=u,t(n)},Hb.prototype.eachResidueN=function(t,e){var i=this.residueCount,r=this.residueOffset,n=r+i;if(!(i<t)){for(var o=new Array(t),a=0;a<t;++a)o[a]=this.structure.getResidueProxy(r+a);e.apply(this,o);for(var s=r+t;s<n;++s){for(var c=0;c<t;++c)o[c].index+=1;e.apply(this,o)}}},Hb.prototype.eachPolymer=function(t,e){for(var i=0,r=0,n=e?e.residueOnlyTest:void 0,o=this.model.structure,a=this.residueCount,s=this.residueOffset,c=s+a,u=this.structure.getResidueProxy(),h=this.structure.getResidueProxy(s),l=this.structure.getAtomProxy(),p=this.structure.getAtomProxy(),d=!0,f=s+1;f<c;++f){u.index=h.index,h.index=f;var m=d?u.backboneEndType:u.backboneType,g=h.backboneType;d&&(i=u.index,d=!1),r=h.index,m!==$m&&m===g?(l.index=u.backboneEndAtomIndex,p.index=h.backboneStartAtomIndex,l&&p&&l.connectedTo(p)&&(!n||n(u)&&n(h))||(1<u.index-i&&t(new Gb(o,i,u.index)),i=r)):(m!==$m&&1<u.index-i&&t(new Gb(o,i,u.index)),i=r)}1<r-i&&this.structure.getResidueProxy(i).backboneEndType&&t(new Gb(o,i,r))},Hb.prototype.qualifiedName=function(){return":"+this.chainname+"/"+this.modelIndex},Hb.prototype.clone=function(){return new Hb(this.structure,this.index)},Hb.prototype.toObject=function(){return{index:this.index,residueOffset:this.residueOffset,residueCount:this.residueCount,chainname:this.chainname}},Object.defineProperties(Hb.prototype,$b);var Wb=function(t,e){void 0===e&&(e=0),this.structure=t,this.index=e,this.modelStore=t.modelStore,this.chainStore=t.chainStore,this.residueStore=t.residueStore},Xb={chainOffset:{configurable:!0},chainCount:{configurable:!0},residueOffset:{configurable:!0},atomOffset:{configurable:!0},chainEnd:{configurable:!0},residueEnd:{configurable:!0},atomEnd:{configurable:!0},residueCount:{configurable:!0},atomCount:{configurable:!0}};Xb.chainOffset.get=function(){return this.modelStore.chainOffset[this.index]},Xb.chainOffset.set=function(t){this.modelStore.chainOffset[this.index]=t},Xb.chainCount.get=function(){return this.modelStore.chainCount[this.index]},Xb.chainCount.set=function(t){this.modelStore.chainCount[this.index]=t},Xb.residueOffset.get=function(){return this.chainStore.residueOffset[this.chainOffset]},Xb.atomOffset.get=function(){return this.residueStore.atomOffset[this.residueOffset]},Xb.chainEnd.get=function(){return this.chainOffset+this.chainCount-1},Xb.residueEnd.get=function(){return this.chainStore.residueOffset[this.chainEnd]+this.chainStore.residueCount[this.chainEnd]-1},Xb.atomEnd.get=function(){return this.residueStore.atomOffset[this.residueEnd]+this.residueStore.atomCount[this.residueEnd]-1},Xb.residueCount.get=function(){return 0===this.chainCount?0:this.residueEnd-this.residueOffset+1},Xb.atomCount.get=function(){return 0===this.residueCount?0:this.atomEnd-this.atomOffset+1},Wb.prototype.eachAtom=function(e,i){this.eachChain(function(t){t.eachAtom(e,i)},i)},Wb.prototype.eachResidue=function(e,i){this.eachChain(function(t){t.eachResidue(e,i)},i)},Wb.prototype.eachPolymer=function(e,i){if(i&&i.chainOnlyTest){var r=i.chainOnlyTest;this.eachChain(function(t){r(t)&&t.eachPolymer(e,i)})}else this.eachChain(function(t){t.eachPolymer(e,i)})},Wb.prototype.eachChain=function(t,e){var i=this.chainCount,r=this.chainOffset,n=this.structure._cp,o=r+i;if(e&&e.test){var a=e.chainOnlyTest;if(a)for(var s=r;s<o;++s)n.index=s,a(n)&&t(n);else for(var c=r;c<o;++c)n.index=c,t(n)}else for(var u=r;u<o;++u)n.index=u,t(n)},Wb.prototype.qualifiedName=function(){return"/"+this.index},Wb.prototype.clone=function(){return new Wb(this.structure,this.index)},Wb.prototype.toObject=function(){return{index:this.index,chainOffset:this.chainOffset,chainCount:this.chainCount}},Object.defineProperties(Wb.prototype,Xb);var qb=function(t,e){void 0===t&&(t=""),void 0===e&&(e=""),this.signals={refreshed:new Wl},this.init(t,e)},Yb={type:{configurable:!0}};qb.prototype.init=function(t,e){this.name=t,this.path=e,this.title="",this.id="",this.data={structure:this,"@spatialLookup":void 0,"@valenceModel":void 0},this.header={},this.extraData={},this.atomSetCache={},this.atomSetDict={},this.biomolDict={},this.entityList=[],this.unitcell=void 0,this.frames=[],this.boxes=[],this.validation=void 0,this.bondStore=new ky(0),this.backboneBondStore=new ky(0),this.rungBondStore=new ky(0),this.atomStore=new By(0),this.residueStore=new Ny(0),this.chainStore=new Fy(0),this.modelStore=new zy(0),this.atomMap=new Ib(this),this.residueMap=new Nb(this),this.bondHash=void 0,this.spatialHash=void 0,this.atomSet=void 0,this.bondSet=void 0,this.center=new Qe,this.boundingBox=new Ai,this._bp=this.getBondProxy(),this._ap=this.getAtomProxy(),this._rp=this.getResidueProxy(),this._cp=this.getChainProxy()},Yb.type.get=function(){return"Structure"},qb.prototype.finalizeAtoms=function(){this.atomSet=this.getAtomSet(),this.atomCount=this.atomStore.count,this.boundingBox=this.getBoundingBox(void 0,this.boundingBox),this.center=this.boundingBox.getCenter(new Qe),this.spatialHash=new Bm(this.atomStore,this.boundingBox)},qb.prototype.finalizeBonds=function(){for(var t in this.bondSet=this.getBondSet(),this.bondCount=this.bondStore.count,this.bondHash=new Dy(this.bondStore,this.atomStore.count),this.atomSetCache={},this.atomSetDict.rung||(this.atomSetDict.rung=this.getAtomSet(!1)),this.atomSetDict)this.atomSetCache["__"+t]=this.atomSetDict[t].clone()},qb.prototype.getBondProxy=function(t){return new Fb(this,t)},qb.prototype.getAtomProxy=function(t){return new Hy(this,t)},qb.prototype.getResidueProxy=function(t){return new Ub(this,t)},qb.prototype.getChainProxy=function(t){return new Hb(this,t)},qb.prototype.getModelProxy=function(t){return new Wb(this,t)},qb.prototype.getBondSet=function(){var t=this.bondStore.count,e=new Um(t),i=this.atomSet;if(i)if(i.isAllSet())e.setAll();else if(i.isAllClear())e.clearAll();else for(var r=this.getBondProxy(),n=0;n<t;++n)r.index=n,i.isSet(r.atomIndex1,r.atomIndex2)&&e.set(r.index);else e.setAll();return e},qb.prototype.getBackboneBondSet=function(){var t=this.backboneBondStore.count,e=new Um(t),i=this.atomSetCache.__backbone;if(i){var r=this.getBondProxy();r.bondStore=this.backboneBondStore;for(var n=0;n<t;++n)r.index=n,i.isSet(r.atomIndex1,r.atomIndex2)&&e.set(r.index)}else e.setAll();return e},qb.prototype.getRungBondSet=function(){var t=this.rungBondStore.count,e=new Um(t),i=this.atomSetCache.__rung;if(i){var r=this.getBondProxy();r.bondStore=this.rungBondStore;for(var n=0;n<t;++n)r.index=n,i.isSet(r.atomIndex1,r.atomIndex2)&&e.set(r.index)}else e.setAll();return e},qb.prototype.getAtomSet=function(t){var e=this.atomStore.count;if(void 0===t)return new Um(e,!0);if(t instanceof Um)return t;if(!0===t)return new Um(e,!0);if(t&&t.test){var i=t.string;if(i in this.atomSetCache)return this.atomSetCache[i];if(""===i)return new Um(e,!0);var r=new Um(e);return this.eachAtom(function(t){r.set(t.index)},t),this.atomSetCache[i]=r}return!1===t?new Um(e):new Um(e,!0)},qb.prototype.getAtomSetWithinSelection=function(t,e){var i=this.spatialHash,r=this.getAtomSet(!1),n=this.getAtomProxy();return i&&this.getAtomSet(t).forEach(function(t){n.index=t,i.within(n.x,n.y,n.z,e).forEach(function(t){r.set(t)})}),r},qb.prototype.getAtomSetWithinPoint=function(t,e){var i=t,r=this.getAtomSet(!1);return this.spatialHash&&this.spatialHash.within(i.x,i.y,i.z,e).forEach(function(t){r.set(t)}),r},qb.prototype.getAtomSetWithinVolume=function(t,e,i,r,n){var o=new Ly(t,i,r,n),a=o.getDataPosition(),s=a.length,c=o.matrix.getMaxScaleOnAxis(),u=this.getAtomSet(!1);if(!this.spatialHash)return u;for(var h=0;h<s;h+=3)this.spatialHash.within(a[h],a[h+1],a[h+2],c).forEach(function(t){u.set(t)});return u},qb.prototype.getAtomSetWithinGroup=function(t){var i=this.atomStore.residueIndex,r=this.getAtomSet(!1),n=this.getResidueProxy();return this.getAtomSet(t).forEach(function(t){n.index=i[t];for(var e=n.atomOffset;e<=n.atomEnd;++e)r.set(e)}),r},qb.prototype.getSelection=function(){return!1},qb.prototype.getStructure=function(){return this},qb.prototype.eachEntity=function(e,i){this.entityList.forEach(function(t){void 0!==i&&t.getEntityType()!==i||e(t)})},qb.prototype.eachBond=function(e,t){var i,r=this.getBondProxy();if(t&&t.test&&(i=this.getBondSet(),this.bondSet&&i.intersection(this.bondSet)),i)i.forEach(function(t){r.index=t,e(r)});else for(var n=this.bondStore.count,o=0;o<n;++o)r.index=o,e(r)},qb.prototype.eachAtom=function(e,i){if(i&&i.test)this.eachModel(function(t){t.eachAtom(e,i)},i);else for(var t=this.atomStore.count,r=this.getAtomProxy(),n=0;n<t;++n)r.index=n,e(r)},qb.prototype.eachResidue=function(t,e){if(e&&e.test){var i=this.modelStore.count,r=this.getModelProxy(),n=e.modelOnlyTest;if(n)for(var o=0;o<i;++o)r.index=o,n(r)&&r.eachResidue(t,e);else for(var a=0;a<i;++a)r.index=a,r.eachResidue(t,e)}else for(var s=this.residueStore.count,c=this.getResidueProxy(),u=0;u<s;++u)c.index=u,t(c)},qb.prototype.eachResidueN=function(t,e){var i=this.residueStore.count;if(!(i<t)){for(var r=new Array(t),n=0;n<t;++n)r[n]=this.getResidueProxy(n);e.apply(this,r);for(var o=t;o<i;++o){for(var a=0;a<t;++a)r[a].index+=1;e.apply(this,r)}}},qb.prototype.eachPolymer=function(e,i){if(i&&i.modelOnlyTest){var r=i.modelOnlyTest;this.eachModel(function(t){r(t)&&t.eachPolymer(e,i)})}else this.eachModel(function(t){t.eachPolymer(e,i)})},qb.prototype.eachChain=function(e,i){if(i&&i.test)this.eachModel(function(t){t.eachChain(e,i)});else for(var t=this.chainStore.count,r=this.getChainProxy(),n=0;n<t;++n)r.index=n,e(r)},qb.prototype.eachModel=function(t,e){var i=this.modelStore.count,r=this.getModelProxy();if(e&&e.test){var n=e.modelOnlyTest;if(n)for(var o=0;o<i;++o)r.index=o,n(r)&&t(r);else for(var a=0;a<i;++a)r.index=a,t(r)}else for(var s=0;s<i;++s)r.index=s,t(r)},qb.prototype.getAtomData=function(t){var e=Object.assign({},t);e.colorParams&&(e.colorParams.structure=this.getStructure());var r,n,i=e.what,o=al(e.atomSet,this.atomSet),a={},s=this.getAtomProxy(),c=o.getSize();i&&!i.position||(a.position=new Float32Array(3*c)),i&&!i.color||!e.colorParams||(a.color=new Float32Array(3*c),n=Up.getScheme(e.colorParams)),i&&!i.picking||(a.picking=new Zg(new Float32Array(c),this.getStructure())),i&&!i.radius||(a.radius=new Float32Array(c),r=new Cy(e.radiusParams)),i&&!i.index||(a.index=new Uint32Array(c));var u=a.position,h=a.color,l=a.picking,p=a.radius,d=a.index;return o.forEach(function(t,e){var i=3*e;s.index=t,u&&s.positionToArray(u,i),h&&n.atomColorToArray(s,h,i),l&&(l.array[e]=t),p&&(p[e]=r.atomRadius(s)),d&&(d[e]=t)}),a},qb.prototype.getBondData=function(t){var e=Object.assign({},t);e.colorParams&&(e.colorParams.structure=this.getStructure());var i,r,n=e.what,o=al(e.bondSet,this.bondSet),a=al(e.multipleBond,"off"),s="off"!==a,c="offset"===a,u=al(e.bondScale,.4),h=al(e.bondSpacing,1),l={},p=this.getBondProxy();e.bondStore&&(p.bondStore=e.bondStore);var d,f=this.getAtomProxy(),m=this.getAtomProxy();if(s){var g=p.bondStore.bondOrder;d=0,o.forEach(function(t){d+=g[t]})}else d=o.getSize();n&&!n.position||(l.position1=new Float32Array(3*d),l.position2=new Float32Array(3*d)),n&&!n.color||!e.colorParams||(l.color=new Float32Array(3*d),l.color2=new Float32Array(3*d),r=Up.getScheme(e.colorParams)),n&&!n.picking||(l.picking=new Jg(new Float32Array(d),this.getStructure(),e.bondStore)),(!n||n.radius||s&&n.position)&&(i=new Cy(e.radiusParams)),n&&!n.radius||(l.radius=new Float32Array(d),e.radius2&&(l.radius2=new Float32Array(d)));var v,y,b,x,_,w,S=l.position1,A=l.position2,M=l.color,P=l.color2,E=l.picking,C=l.radius,T=l.radius2,I=0,R=new Qe,L=new Qe,O=new Qe;return o.forEach(function(t){if(y=3*I,p.index=t,f.index=p.atomIndex1,m.index=p.atomIndex2,x=p.bondOrder,S)if(s&&1<x){var e=i.atomRadius(f);w=e*u/(.5*x),p.calculateShiftDir(O),c?(_=2*h*e,O.multiplyScalar(_),O.negate(),L.subVectors(m,f).multiplyScalar(Math.max(.1,_/1.88)),f.positionToArray(S,y),m.positionToArray(A,y),2<=x&&(R.addVectors(f,O).add(L).toArray(S,y+3),R.addVectors(m,O).sub(L).toArray(A,y+3),3<=x&&(R.subVectors(f,O).add(L).toArray(S,y+6),R.subVectors(m,O).sub(L).toArray(A,y+6)))):(_=(h-u)*e,O.multiplyScalar(_),2===x?(R.addVectors(f,O).toArray(S,y),R.subVectors(f,O).toArray(S,y+3),R.addVectors(m,O).toArray(A,y),R.subVectors(m,O).toArray(A,y+3)):3===x?(f.positionToArray(S,y),R.addVectors(f,O).toArray(S,y+3),R.subVectors(f,O).toArray(S,y+6),m.positionToArray(A,y),R.addVectors(m,O).toArray(A,y+3),R.subVectors(m,O).toArray(A,y+6)):(f.positionToArray(S,y),m.positionToArray(A,y)))}else f.positionToArray(S,y),m.positionToArray(A,y);if(M&&P&&(r.bondColorToArray(p,1,M,y),r.bondColorToArray(p,0,P,y),s&&1<x))for(v=1;v<x;++v)kd(M,y,b=3*v+y,3),kd(P,y,b,3);if(E&&(E.array[I]=t,s&&1<x))for(v=1;v<x;++v)E.array[I+v]=t;if(C&&(C[I]=i.atomRadius(f),s&&1<x))for(w=C[I]*u/(c?1:.5*x),v=c?1:0;v<x;++v)C[I+v]=w;if(T&&(T[I]=i.atomRadius(m),s&&1<x))for(w=T[I]*u/(c?1:.5*x),v=c?1:0;v<x;++v)T[I+v]=w;I+=s?x:1}),l},qb.prototype.getBackboneAtomData=function(t){return t=Object.assign({atomSet:this.atomSetCache.__backbone},t),this.getAtomData(t)},qb.prototype.getBackboneBondData=function(t){return t=Object.assign({bondSet:this.getBackboneBondSet(),bondStore:this.backboneBondStore},t),this.getBondData(t)},qb.prototype.getRungAtomData=function(t){return t=Object.assign({atomSet:this.atomSetCache.__rung},t),this.getAtomData(t)},qb.prototype.getRungBondData=function(t){return t=Object.assign({bondSet:this.getRungBondSet(),bondStore:this.rungBondStore},t),this.getBondData(t)},qb.prototype.getBoundingBox=function(t,e){de.Debug&&Bp.time("getBoundingBox"),e=e||new Ai;var n=1/0,o=1/0,a=1/0,s=-1/0,c=-1/0,u=-1/0;return this.eachAtom(function(t){var e=t.x,i=t.y,r=t.z;e<n&&(n=e),i<o&&(o=i),r<a&&(a=r),s<e&&(s=e),c<i&&(c=i),u<r&&(u=r)},t),e.min.set(n,o,a),e.max.set(s,c,u),de.Debug&&Bp.timeEnd("getBoundingBox"),e},qb.prototype.getPrincipalAxes=function(t){de.Debug&&Bp.time("getPrincipalAxes");var e=0,i=new _v(3,this.atomCount),r=i.data;return this.eachAtom(function(t){r[e+0]=t.x,r[e+1]=t.y,r[e+2]=t.z,e+=3},t),de.Debug&&Bp.timeEnd("getPrincipalAxes"),new Ry(i)},qb.prototype.atomCenter=function(t){return t?this.getBoundingBox(t).getCenter(new Qe):this.center.clone()},qb.prototype.hasCoords=function(){if(void 0===this._hasCoords){var t=this.atomStore;this._hasCoords=0!==Nd(t.x)||0!==Bd(t.x)||0!==Nd(t.y)||0!==Bd(t.y)||0!==Nd(t.z)||0!==Bd(t.z)||t.count/this.modelStore.count==1}return this._hasCoords},qb.prototype.getSequence=function(t){var e=[],i=this.getResidueProxy();return this.eachAtom(function(t){i.index=t.residueIndex,t.index===i.traceAtomIndex&&e.push(i.getResname1())},t),e},qb.prototype.getAtomIndices=function(t){if(t&&t.string){var e=[];return this.eachAtom(function(t){e.push(t.index)},t),new Uint32Array(e)}return this.getAtomData({what:{index:!0}}).index},qb.prototype.getChainnameCount=function(t){var e=new Set;return this.eachChain(function(t){t.residueCount&&e.add(t.chainname)},t),e.size},qb.prototype.updatePosition=function(e){var i=0;this.eachAtom(function(t){t.positionFromArray(e,i),i+=3},void 0),this._hasCoords=void 0},qb.prototype.refreshPosition=function(){this.getBoundingBox(void 0,this.boundingBox),this.boundingBox.getCenter(this.center),this.spatialHash=new Bm(this.atomStore,this.boundingBox)},qb.prototype.dispose=function(){this.frames&&(this.frames.length=0),this.boxes&&(this.boxes.length=0),this.bondStore.dispose(),this.backboneBondStore.dispose(),this.rungBondStore.dispose(),this.atomStore.dispose(),this.residueStore.dispose(),this.chainStore.dispose(),this.modelStore.dispose(),delete this.bondStore,delete this.atomStore,delete this.residueStore,delete this.chainStore,delete this.modelStore,delete this.frames,delete this.boxes,delete this.bondSet,delete this.atomSet},Object.defineProperties(qb.prototype,Yb);var Zb=new Ai,Kb=[Tm,Mm,Im,Cm,Rm,Pm,Am,Em,Om,Lm,Dm,km],Jb={aspectRatio:1.5,sphereDetail:2,radialSegments:50,disableImpostor:!1,openEnded:!1,dashedCylinder:!1,labelParams:{},pointSize:2,sizeAttenuation:!1,useTexture:!0,lineWidth:2},Qb=function(t,e){var i=this;void 0===t&&(t="shape"),void 0===e&&(e={}),this.boundingBox=new Ai,this.bufferList=[],this.meshCount=0,this._primitiveData={},this.name=t,this.parameters=sl(e,Jb),Kb.forEach(function(e){Object.keys(e.fields).forEach(function(t){i._primitiveData[e.getShapeKey(t)]=[]}),i._primitiveData[e.getShapeKey("name")]=[]})},tx={center:{configurable:!0},type:{configurable:!0}};Qb.prototype.addBuffer=function(t){this.bufferList.push(t);var e=t.geometry;return e.boundingBox||e.computeBoundingBox(),this.boundingBox.union(e.boundingBox),this},Qb.prototype.addMesh=function(t,e,i,r,n){t=Ml(t),e=Ml(e),Array.isArray(i)&&(i=bl(i,t.length)),r&&(r=Ml(r));var o={position:t,color:e,index:i,normal:r},a=new sv(this,Object.assign({serial:this.meshCount,name:n},o)),s=new ey(Object.assign({picking:a},o));return this.bufferList.push(s),Zb.setFromArray(t),this.boundingBox.union(Zb),this.meshCount+=1,this},Qb.prototype.addSphere=function(t,e,i,r){return Am.objectToShape(this,{position:t,color:e,radius:i,name:r}),this},Qb.prototype.addEllipsoid=function(t,e,i,r,n,o){return Rm.objectToShape(this,{position:t,color:e,radius:i,majorAxis:r,minorAxis:n,name:o}),this},Qb.prototype.addTorus=function(t,e,i,r,n,o){return Lm.objectToShape(this,{position:t,color:e,radius:i,majorAxis:r,minorAxis:n,name:o}),this},Qb.prototype.addCylinder=function(t,e,i,r,n){return Cm.objectToShape(this,{position1:t,position2:e,color:i,radius:r,name:n}),this},Qb.prototype.addCone=function(t,e,i,r,n){return Im.objectToShape(this,{position1:t,position2:e,color:i,radius:r,name:n}),this},Qb.prototype.addArrow=function(t,e,i,r,n){return Tm.objectToShape(this,{position1:t,position2:e,color:i,radius:r,name:n}),this},Qb.prototype.addBox=function(t,e,i,r,n,o){return Mm.objectToShape(this,{position:t,color:e,size:i,heightAxis:r,depthAxis:n,name:o}),this},Qb.prototype.addOctahedron=function(t,e,i,r,n,o){return Pm.objectToShape(this,{position:t,color:e,size:i,heightAxis:r,depthAxis:n,name:o}),this},Qb.prototype.addTetrahedron=function(t,e,i,r,n,o){return Em.objectToShape(this,{position:t,color:e,size:i,heightAxis:r,depthAxis:n,name:o}),this},Qb.prototype.addText=function(t,e,i,r){return Om.objectToShape(this,{position:t,color:e,size:i,text:r}),this},Qb.prototype.addPoint=function(t,e,i){return Dm.objectToShape(this,{position:t,color:e,name:i}),this},Qb.prototype.addWideline=function(t,e,i,r){return km.objectToShape(this,{position1:t,position2:e,color:i,name:r}),this},Qb.prototype.addLabel=function(t,e,i,r){return console.warn("Shape.addLabel is deprecated, use .addText instead"),this.addText(t,e,i,r)},Qb.prototype.getBufferList=function(){var e=this,i=[];return Kb.forEach(function(t){e._primitiveData[t.getShapeKey("color")].length&&i.push(t.bufferFromShape(e,e.parameters))}),this.bufferList.concat(i)},Qb.prototype.dispose=function(){var i=this;this.bufferList.forEach(function(t){t.dispose()}),this.bufferList.length=0,Kb.forEach(function(e){Object.keys(e.fields).forEach(function(t){i._primitiveData[e.getShapeKey(t)].length=0}),i._primitiveData[e.getShapeKey("name")].length=0})},tx.center.get=function(){return this._center||(this._center=this.boundingBox.getCenter(new Qe)),this._center},tx.type.get=function(){return"Shape"},Object.defineProperties(Qb.prototype,tx);var ex=function(r){function t(t,e,i){Array.isArray(t)||(t=[t]),r.call(this,t,e,i),this.type="buffer",this.parameters=Object.assign({},this.parameters,{colorScheme:null,colorScale:null,colorValue:null,colorDomain:null,colorMode:null}),this.buffer=t,this.init(i)}return r&&(t.__proto__=r),((t.prototype=Object.create(r&&r.prototype)).constructor=t).prototype.init=function(t){r.prototype.init.call(this,t),this.build()},t.prototype.create=function(){this.bufferList.push.apply(this.bufferList,this.buffer)},t.prototype.attach=function(t){var e=this;this.bufferList.forEach(function(t){e.viewer.add(t),t.setParameters(e.getBufferParams())}),this.setVisibility(this.visible),t()},t}(Xf),ix=new Ke,rx=new ti;var nx=function(y){function t(t,e,i){var r,n,o,a,s,c,u,h,l,p,d;void 0===e&&(e={}),y.call(this,(r=t,a=(n=i).attributes.position.array,s=n.index?n.index.array:void 0,c=r.position.length/3,u=a.length/3,h=c*u,l=new Float32Array(3*h),p=new Float32Array(3*h),d=new Float32Array(3*h),s&&(o=bl(c*s.length,h)),{position:l,color:d,index:o,normal:p,primitiveId:r.primitiveId||Ld(c,u),picking:r.picking}),e),this.updateNormals=!1;var f=i.attributes.position.array,m=i.attributes.normal.array,g=i.index?i.index.array:void 0;this.geoPosition=f,this.geoNormal=m,this.geoIndex=g,this.positionCount=t.position.length/3,this.geoPositionCount=f.length/3,this.transformedGeoPosition=new Float32Array(3*this.geoPositionCount),this.transformedGeoNormal=new Float32Array(3*this.geoPositionCount);var v=this.geometry.attributes;this.meshPosition=v.position.array,this.meshColor=v.color.array,this.meshNormal=v.normal.array,this.setAttributes(t),g&&(this.meshIndex=this.geometry.getIndex().array,this.makeIndex())}return y&&(t.__proto__=y),((t.prototype=Object.create(y&&y.prototype)).constructor=t).prototype.setAttributes=function(t,e){void 0===t&&(t={}),void 0===e&&(e=!1);var i,r,n,o,a,s,c,u,h,l=this.geometry.attributes,p=this.updateNormals;t.position&&(i=t.position,n=this.geoPosition,c=this.meshPosition,a=this.transformedGeoPosition,l.position.needsUpdate=!0,(p||e)&&(o=this.geoNormal,h=this.meshNormal,s=this.transformedGeoNormal,l.normal.needsUpdate=!0)),t.color&&(r=t.color,u=this.meshColor,l.color.needsUpdate=!0);for(var d=this.positionCount,f=this.geoPositionCount,m=0;m<d;++m){var g=void 0,v=void 0,y=m*f*3,b=3*m;if(i&&a&&c&&h&&n&&o&&(a.set(n),ix.makeTranslation(i[b],i[b+1],i[b+2]),this.applyPositionTransform(ix,m,b),Qf(ix.elements,a),c.set(a,y),p&&s?(s.set(o),rx.getNormalMatrix(ix),tm(rx.elements,s),h.set(s,y)):e&&h.set(o,y)),r&&u)for(g=0;g<f;++g)u[v=y+3*g]=r[b],u[v+1]=r[b+1],u[v+2]=r[b+2]}},t.prototype.makeIndex=function(){var t=this.geoIndex,e=this.meshIndex;if(t)for(var i=this.positionCount,r=this.geoPositionCount,n=3*(t.length/3),o=0;o<i;++o){var a=o*n,s=a+n;e.set(t,a);for(var c=a;c<s;++c)e[c]+=o*r}},t}(ey),ox=new Qe,ax=Object.assign({sphereDetail:1},Kv),sx=function(i){function t(t,e){void 0===e&&(e={}),i.call(this,t,e,new Ya(1,al(e.sphereDetail,1))),this.setAttributes(t,!0)}i&&(t.__proto__=i),(t.prototype=Object.create(i&&i.prototype)).constructor=t;var e={defaultParameters:{configurable:!0}};return e.defaultParameters.get=function(){return ax},t.prototype.applyPositionTransform=function(t,e){var i=this._radius[e];ox.set(i,i,i),t.scale(ox)},t.prototype.setAttributes=function(t,e){void 0===t&&(t={}),t.radius&&(this._radius=t.radius),i.prototype.setAttributes.call(this,t,e)},Object.defineProperties(t.prototype,e),t}(nx);Hp.add("shader/SphereImpostor.vert","uniform mat4 projectionMatrixInverse;\nuniform float clipNear;\nvarying float vRadius;\nvarying float vRadiusSq;\nvarying vec3 vPoint;\nvarying vec3 vPointViewPosition;\nattribute vec2 mapping;\nattribute float radius;\n#ifdef PICKING\n#include unpack_color\nattribute float primitiveId;\nvarying vec3 vPickingColor;\n#else\n#include color_pars_vertex\n#endif\n#include matrix_scale\nconst mat4 D = mat4(\n1.0, 0.0, 0.0, 0.0,\n0.0, 1.0, 0.0, 0.0,\n0.0, 0.0, 1.0, 0.0,\n0.0, 0.0, 0.0, -1.0\n);\nmat4 transpose( in mat4 inMatrix ) {\nvec4 i0 = inMatrix[0];\nvec4 i1 = inMatrix[1];\nvec4 i2 = inMatrix[2];\nvec4 i3 = inMatrix[3];\nmat4 outMatrix = mat4(\nvec4(i0.x, i1.x, i2.x, i3.x),\nvec4(i0.y, i1.y, i2.y, i3.y),\nvec4(i0.z, i1.z, i2.z, i3.z),\nvec4(i0.w, i1.w, i2.w, i3.w)\n);\nreturn outMatrix;\n}\nvoid ComputePointSizeAndPositionInClipCoordSphere(){\nvec2 xbc;\nvec2 ybc;\nmat4 T = mat4(\nradius, 0.0, 0.0, 0.0,\n0.0, radius, 0.0, 0.0,\n0.0, 0.0, radius, 0.0,\nposition.x, position.y, position.z, 1.0\n);\nmat4 R = transpose( projectionMatrix * modelViewMatrix * T );\nfloat A = dot( R[ 3 ], D * R[ 3 ] );\nfloat B = -2.0 * dot( R[ 0 ], D * R[ 3 ] );\nfloat C = dot( R[ 0 ], D * R[ 0 ] );\nxbc[ 0 ] = ( -B - sqrt( B * B - 4.0 * A * C ) ) / ( 2.0 * A );\nxbc[ 1 ] = ( -B + sqrt( B * B - 4.0 * A * C ) ) / ( 2.0 * A );\nfloat sx = abs( xbc[ 0 ] - xbc[ 1 ] ) * 0.5;\nA = dot( R[ 3 ], D * R[ 3 ] );\nB = -2.0 * dot( R[ 1 ], D * R[ 3 ] );\nC = dot( R[ 1 ], D * R[ 1 ] );\nybc[ 0 ] = ( -B - sqrt( B * B - 4.0 * A * C ) ) / ( 2.0 * A );\nybc[ 1 ] = ( -B + sqrt( B * B - 4.0 * A * C ) ) / ( 2.0 * A );\nfloat sy = abs( ybc[ 0 ] - ybc[ 1 ] ) * 0.5;\ngl_Position.xy = vec2( 0.5 * ( xbc.x + xbc.y ), 0.5 * ( ybc.x + ybc.y ) );\ngl_Position.xy -= mapping * vec2( sx, sy );\ngl_Position.xy *= gl_Position.w;\n}\nvoid main(void){\n#ifdef PICKING\nvPickingColor = unpackColor( primitiveId );\n#else\n#include color_vertex\n#endif\nvRadius = radius * matrixScale( modelViewMatrix );\nvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\nmvPosition.z -= vRadius;\ngl_Position = projectionMatrix * vec4( mvPosition.xyz, 1.0 );\nComputePointSizeAndPositionInClipCoordSphere();\nvRadiusSq = vRadius * vRadius;\nvec4 vPoint4 = projectionMatrixInverse * gl_Position;\nvPoint = vPoint4.xyz / vPoint4.w;\nvPointViewPosition = -mvPosition.xyz / mvPosition.w;\n}"),Hp.add("shader/SphereImpostor.frag","#define STANDARD\n#define IMPOSTOR\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 interiorColor;\nuniform float interiorDarkening;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\nuniform float clipNear;\nuniform mat4 projectionMatrix;\nuniform float ortho;\nvarying float vRadius;\nvarying float vRadiusSq;\nvarying vec3 vPoint;\nvarying vec3 vPointViewPosition;\n#ifdef PICKING\nuniform float objectId;\nvarying vec3 vPickingColor;\n#else\n#include common\n#include color_pars_fragment\n#include fog_pars_fragment\n#include bsdfs\n#include lights_pars_begin\n#include lights_physical_pars_fragment\n#endif\nbool flag2 = false;\nbool interior = false;\nvec3 cameraPos;\nvec3 cameraNormal;\nfloat calcDepth( in vec3 cameraPos ){\nvec2 clipZW = cameraPos.z * projectionMatrix[2].zw + projectionMatrix[3].zw;\nreturn 0.5 + 0.5 * clipZW.x / clipZW.y;\n}\nfloat calcClip( vec3 cameraPos ){\nreturn dot( vec4( cameraPos, 1.0 ), vec4( 0.0, 0.0, 1.0, clipNear - 0.5 ) );\n}\nbool Impostor( out vec3 cameraPos, out vec3 cameraNormal ){\nvec3 cameraSpherePos = -vPointViewPosition;\ncameraSpherePos.z += vRadius;\nvec3 rayOrigin = mix( vec3( 0.0, 0.0, 0.0 ), vPoint, ortho );\nvec3 rayDirection = mix( normalize( vPoint ), vec3( 0.0, 0.0, 1.0 ), ortho );\nvec3 cameraSphereDir = mix( cameraSpherePos, rayOrigin - cameraSpherePos, ortho );\nfloat B = dot( rayDirection, cameraSphereDir );\nfloat det = B * B + vRadiusSq - dot( cameraSphereDir, cameraSphereDir );\nif( det < 0.0 ){\ndiscard;\nreturn false;\n}\nfloat sqrtDet = sqrt( det );\nfloat posT = mix( B + sqrtDet, B + sqrtDet, ortho );\nfloat negT = mix( B - sqrtDet, sqrtDet - B, ortho );\ncameraPos = rayDirection * negT + rayOrigin;\n#ifdef NEAR_CLIP\nif( calcDepth( cameraPos ) <= 0.0 ){\ncameraPos = rayDirection * posT + rayOrigin;\ninterior = true;\n}else if( calcClip( cameraPos ) > 0.0 ){\ncameraPos = rayDirection * posT + rayOrigin;\ninterior = true;\nflag2 = true;\n}\n#else\nif( calcDepth( cameraPos ) <= 0.0 ){\ncameraPos = rayDirection * posT + rayOrigin;\ninterior = true;\n}\n#endif\ncameraNormal = normalize( cameraPos - cameraSpherePos );\ncameraNormal *= float(!interior) * 2.0 - 1.0;\nreturn !interior;\n}\nvoid main(void){\nbool flag = Impostor( cameraPos, cameraNormal );\n#ifdef NEAR_CLIP\nif( calcClip( cameraPos ) > 0.0 )\ndiscard;\n#endif\ngl_FragDepthEXT = calcDepth( cameraPos );\nif( !flag ){\n#ifdef NEAR_CLIP\nif( flag2 ){\ngl_FragDepthEXT = max( 0.0, calcDepth( vec3( - ( clipNear - 0.5 ) ) ) + ( 0.0000001 / vRadius ) );\n}else if( gl_FragDepthEXT >= 0.0 ){\ngl_FragDepthEXT = 0.0 + ( 0.0000001 / vRadius );\n}\n#else\nif( gl_FragDepthEXT >= 0.0 ){\ngl_FragDepthEXT = 0.0 + ( 0.0000001 / vRadius );\n}\n#endif\n}\nif (gl_FragDepthEXT < 0.0)\ndiscard;\nif (gl_FragDepthEXT > 1.0)\ndiscard;\n#ifdef PICKING\nif( opacity < 0.3 )\ndiscard;\ngl_FragColor = vec4( vPickingColor, objectId );\n#else\nvec3 vNormal = cameraNormal;\nvec3 vViewPosition = -cameraPos;\nvec4 diffuseColor = vec4( diffuse, opacity );\nReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\nvec3 totalEmissiveLight = emissive;\n#include color_fragment\n#include roughnessmap_fragment\n#include metalnessmap_fragment\n#include normal_fragment_begin\n#include lights_physical_fragment\n#include lights_fragment_begin\n#include lights_fragment_end\nvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveLight;\nif( interior ){\n#ifdef USE_INTERIOR_COLOR\noutgoingLight.xyz = interiorColor;\n#else\n#ifdef DIFFUSE_INTERIOR\noutgoingLight.xyz = vColor;\n#endif\n#endif\noutgoingLight.xyz *= 1.0 - interiorDarkening;\n}\ngl_FragColor = vec4( outgoingLight, diffuseColor.a );\n#include premultiplied_alpha_fragment\n#include tonemapping_fragment\n#include encodings_fragment\n#include fog_fragment\n#endif\n}");var cx=function(n){function t(t,e,i){void 0===i&&(i={}),n.call(this,e,i),this.index=bl(this.indexSize,this.attributeSize),this.makeIndex(),this.initIndex(this.index),this.addAttributes({mapping:{type:t,value:null}}),this.setAttributes({primitiveId:Rd(this.size)})}n&&(t.__proto__=n),(t.prototype=Object.create(n&&n.prototype)).constructor=t;var e={attributeSize:{configurable:!0},indexSize:{configurable:!0}};return e.attributeSize.get=function(){return this.size*this.mappingSize},e.indexSize.get=function(){return this.size*this.mappingIndicesSize},t.prototype.addAttributes=function(t){var e={};for(var i in t){var r=t[i];e[i]={type:r.type,value:null}}n.prototype.addAttributes.call(this,e)},t.prototype.getAttributeIndex=function(t){return 3*t*this.mappingSize},t.prototype.setAttributes=function(t){t&&!t.position&&t.position1&&t.position2&&(t.position=Ed(t.position1,t.position2));var e,i,r,n,o,a,s,c=this.size,u=this.mappingSize,h=this.geometry.attributes;for(var l in t)if("index"!==l&&"picking"!==l){i=t[l],r=(e=h[l]).itemSize,n=e.array;for(var p=0;p<c;++p){a=(o=p*r)*u;for(var d=0;d<u;++d){s=a+r*d;for(var f=0;f<r;++f)n[s+f]=i[o+f]}}e.needsUpdate=!0}},t.prototype.makeMapping=function(){for(var t=this.size,e=this.mapping,i=this.mappingSize,r=this.mappingItemSize,n=this.geometry.attributes.mapping.array,o=0;o<t;o++)n.set(e,o*r*i)},t.prototype.makeIndex=function(){for(var t=this.size,e=this.mappingSize,i=this.mappingIndices,r=this.mappingIndicesSize,n=this.index,o=0;o<t;o++){var a=o*r,s=o*e;n.set(i,a);for(var c=0;c<r;++c)n[a+c]+=s}},Object.defineProperties(t.prototype,e),t}(Qv),ux=new Float32Array([-1,1,-1,-1,1,1,1,-1]),hx=new Uint16Array([0,1,2,1,3,2]),lx=function(i){function t(t,e){void 0===e&&(e={}),i.call(this,"v2",t,e)}i&&(t.__proto__=i),(t.prototype=Object.create(i&&i.prototype)).constructor=t;var e={mapping:{configurable:!0},mappingIndices:{configurable:!0},mappingIndicesSize:{configurable:!0},mappingSize:{configurable:!0},mappingItemSize:{configurable:!0}};return e.mapping.get=function(){return ux},e.mappingIndices.get=function(){return hx},e.mappingIndicesSize.get=function(){return 6},e.mappingSize.get=function(){return 4},e.mappingItemSize.get=function(){return 2},Object.defineProperties(t.prototype,e),t}(cx),px=function(i){function t(t,e){void 0===e&&(e={}),i.call(this,t,e),this.isImpostor=!0,this.vertexShader="SphereImpostor.vert",this.fragmentShader="SphereImpostor.frag",this.addUniforms({projectionMatrixInverse:{value:new Ke},ortho:{value:0}}),this.addAttributes({radius:{type:"f",value:null}}),this.setAttributes(t),this.makeMapping()}return i&&(t.__proto__=i),(t.prototype=Object.create(i&&i.prototype)).constructor=t}(lx),dx=(Object.assign({disableImpostor:!1},ax),function(t,e){return!Dp||e&&e.disableImpostor?new sx(t,e):new px(t,e)});Xp.add("sphere",dx),Hp.add("shader/Point.vert","uniform float clipNear;\nuniform float clipRadius;\nuniform vec3 clipCenter;\nuniform float size;\nuniform float canvasHeight;\nuniform float pixelRatio;\n#if defined( RADIUS_CLIP )\nvarying vec3 vClipCenter;\n#endif\n#if defined( PICKING )\n#include unpack_color\nattribute float primitiveId;\nvarying vec3 vPickingColor;\n#else\n#include color_pars_vertex\nvarying vec3 vViewPosition;\n#endif\n#include common\nvoid main(){\n#if defined( PICKING )\nvPickingColor = unpackColor( primitiveId );\n#else\n#include color_vertex\n#endif\n#include begin_vertex\n#include project_vertex\n#ifdef USE_SIZEATTENUATION\ngl_PointSize = size * pixelRatio * ( ( canvasHeight / 2.0 ) / -mvPosition.z );\n#else\ngl_PointSize = size * pixelRatio;\n#endif\n#ifndef PICKING\nvViewPosition = -mvPosition.xyz;\n#endif\n#if defined( RADIUS_CLIP )\nvClipCenter = -( modelViewMatrix * vec4( clipCenter, 1.0 ) ).xyz;\n#endif\n#include nearclip_vertex\n#include radiusclip_vertex\n}"),Hp.add("shader/Point.frag","uniform vec3 diffuse;\nuniform float opacity;\nuniform float clipNear;\nuniform float clipRadius;\n#if defined( RADIUS_CLIP )\nvarying vec3 vClipCenter;\n#endif\n#ifdef USE_MAP\nuniform sampler2D map;\n#endif\n#if defined( PICKING )\nuniform float objectId;\nvarying vec3 vPickingColor;\n#else\n#include common\n#include color_pars_fragment\n#include fog_pars_fragment\nvarying vec3 vViewPosition;\n#endif\nvoid main(){\n#include nearclip_fragment\n#include radiusclip_fragment\n#if defined( PICKING )\n#ifdef USE_MAP\nif( texture2D( map, vec2( gl_PointCoord.x, 1.0 - gl_PointCoord.y ) ).a < 0.5 )\ndiscard;\n#endif\nif( opacity < 0.3 )\ndiscard;\ngl_FragColor = vec4( vPickingColor, objectId );\n#else\nvec3 outgoingLight = vec3( 0.0 );\nvec4 diffuseColor = vec4( diffuse, 1.0 );\n#ifdef USE_MAP\ndiffuseColor *= texture2D( map, vec2( gl_PointCoord.x, 1.0 - gl_PointCoord.y ) );\n#endif\n#include color_fragment\n#include alphatest_fragment\noutgoingLight = diffuseColor.rgb;\ngl_FragColor = vec4( outgoingLight, diffuseColor.a * opacity );\n#include premultiplied_alpha_fragment\n#include tonemapping_fragment\n#include encodings_fragment\n#include fog_fragment\n#endif\n}");var fx=Object.assign({pointSize:1,sizeAttenuation:!0,sortParticles:!1,alphaTest:.5,useTexture:!1,forceTransparent:!1,edgeBleach:0},Kv),mx=Object.assign({pointSize:{uniform:"size"},sizeAttenuation:{updateShader:!0},sortParticles:{},alphaTest:{updateShader:!0},useTexture:{updateShader:!0},forceTransparent:{},edgeBleach:{uniform:!0}},Jv),gx=function(r){function t(t,e){void 0===e&&(e={}),r.call(this,t,e),this.parameterTypes=mx,this.vertexShader="Point.vert",this.fragmentShader="Point.frag",this.isPoint=!0,this.addUniforms({size:{value:this.parameters.pointSize},canvasHeight:{value:1},pixelRatio:{value:1},map:{value:null}})}r&&(t.__proto__=r),(t.prototype=Object.create(r&&r.prototype)).constructor=t;var e={defaultParameters:{configurable:!0}};return e.defaultParameters.get=function(){return fx},t.prototype.makeMaterial=function(){r.prototype.makeMaterial.call(this),this.makeTexture();var t=this.material,e=this.wireframeMaterial,i=this.pickingMaterial;t.uniforms.map.value=this.tex,t.needsUpdate=!0,e.uniforms.map.value=this.tex,e.needsUpdate=!0,i.uniforms.map.value=this.tex,i.needsUpdate=!0},t.prototype.makeTexture=function(){this.tex&&this.tex.dispose(),this.tex=function(t){for(var e,i,r=t||{},n=al(r.width,256),o=al(r.height,256),a=[n/2,o/2],s=Math.min(n/2,o/2),c=al(r.delta,1/(s+1))*s,u=0,h=0,l=new Uint8Array(n*o*4),p=0,d=l.length;p<d;p+=4){var f=1-Nl(s-c,s,(e=a[0]-u,i=a[1]-h,Math.sqrt(e*e+i*i)));l[p]=255*f,l[p+1]=255*f,l[p+2]=255*f,l[p+3]=255*f,++u===n&&(u=0,h++)}var m=new Si(l,n,o);return m.needsUpdate=!0,m}({delta:this.parameters.edgeBleach})},t.prototype.getDefines=function(t){var e=r.prototype.getDefines.call(this,t);return this.parameters.sizeAttenuation&&(e.USE_SIZEATTENUATION=1),this.parameters.useTexture&&(e.USE_MAP=1),0<this.parameters.alphaTest&&this.parameters.alphaTest<=1&&(e.ALPHATEST=this.parameters.alphaTest.toPrecision(2)),e},t.prototype.setUniforms=function(t){t&&void 0!==t.edgeBleach&&(this.makeTexture(),t.map=this.tex),r.prototype.setUniforms.call(this,t)},t.prototype.dispose=function(){r.prototype.dispose.call(this),this.tex&&this.tex.dispose()},Object.defineProperties(t.prototype,e),t}(Qv);Xp.add("point",gx);var vx=function(r){function t(t,e,i){r.call(this,t,e,i),this.type="dot",this.parameters=Object.assign({thresholdType:{type:"select",rebuild:!0,options:{value:"value",sigma:"sigma"}},thresholdMin:{type:"number",precision:3,max:1/0,min:-1/0,rebuild:!0},thresholdMax:{type:"number",precision:3,max:1/0,min:-1/0,rebuild:!0},thresholdOut:{type:"boolean",rebuild:!0},dotType:{type:"select",rebuild:!0,options:{"":"",sphere:"sphere",point:"point"}},radiusType:{type:"select",options:{"":"",value:"value","abs-value":"abs-value","value-min":"value-min",deviation:"deviation",size:"size"}},radius:{type:"number",precision:3,max:10,min:.001,property:"size"},scale:{type:"number",precision:3,max:10,min:.001},sphereDetail:!0,disableImpostor:!0,pointSize:{type:"number",precision:1,max:100,min:0,buffer:!0},sizeAttenuation:{type:"boolean",buffer:!0},sortParticles:{type:"boolean",rebuild:!0},useTexture:{type:"boolean",buffer:!0},alphaTest:{type:"range",step:.001,max:1,min:0,buffer:!0},forceTransparent:{type:"boolean",buffer:!0},edgeBleach:{type:"range",step:.001,max:1,min:0,buffer:!0}},this.parameters,{colorScheme:{type:"select",update:"color",options:{"":"",value:"value",uniform:"uniform",random:"random"}}}),t instanceof Wv?(this.surface=void 0,this.volume=new Ly(t)):(this.surface=t,this.volume=void 0),this.init(i)}return r&&(t.__proto__=r),((t.prototype=Object.create(r&&r.prototype)).constructor=t).prototype.init=function(t){var e=t||{};e.colorScheme=al(e.colorScheme,"uniform"),e.colorValue=al(e.colorValue,14540253),this.thresholdType=al(e.thresholdType,"sigma"),this.thresholdMin=al(e.thresholdMin,2),this.thresholdMax=al(e.thresholdMax,1/0),this.thresholdOut=al(e.thresholdOut,!1),this.dotType=al(e.dotType,"point"),this.radius=al(e.radius,.1),this.scale=al(e.scale,1),this.pointSize=al(e.pointSize,1),this.sizeAttenuation=al(e.sizeAttenuation,!0),this.sortParticles=al(e.sortParticles,!1),this.useTexture=al(e.useTexture,!1),this.alphaTest=al(e.alphaTest,.5),this.forceTransparent=al(e.forceTransparent,!1),this.edgeBleach=al(e.edgeBleach,0),r.prototype.init.call(this,e),this.build()},t.prototype.attach=function(t){var e=this;this.bufferList.forEach(function(t){e.viewer.add(t)}),this.setVisibility(this.visible),t()},t.prototype.create=function(){var t={};if(this.volume){var e,i,r=this.volume;"sigma"===this.thresholdType?(e=r.getValueForSigma(this.thresholdMin),i=r.getValueForSigma(this.thresholdMax)):(e=this.thresholdMin,i=this.thresholdMax),r.setFilter(e,i,this.thresholdOut),t.position=r.getDataPosition(),t.color=r.getDataColor(this.getColorParams()),"sphere"===this.dotType&&(t.radius=r.getDataSize(this.radius,this.scale),t.picking=r.getDataPicking())}else{var n=this.surface;t.position=n.getPosition(),t.color=n.getColor(this.getColorParams()),"sphere"===this.dotType&&(t.radius=n.getSize(this.radius,this.scale),t.picking=n.getPicking())}"sphere"===this.dotType?this.dotBuffer=new dx(t,this.getBufferParams({sphereDetail:this.sphereDetail,disableImpostor:this.disableImpostor,dullInterior:!1})):this.dotBuffer=new gx(t,this.getBufferParams({pointSize:this.pointSize,sizeAttenuation:this.sizeAttenuation,sortParticles:this.sortParticles,useTexture:this.useTexture,alphaTest:this.alphaTest,forceTransparent:this.forceTransparent,edgeBleach:this.edgeBleach})),this.bufferList.push(this.dotBuffer)},t.prototype.update=function(t){if(0!==this.bufferList.length){var e={};(t=t||{}).color&&(this.volume?e.color=this.volume.getDataColor(this.getColorParams()):e.color=this.surface.getColor(this.getColorParams())),"sphere"===this.dotType&&(t.radius||t.scale)&&(this.volume?e.radius=this.volume.getDataSize(this.radius,this.scale):e.radius=this.surface.getSize(this.radius,this.scale)),this.dotBuffer.setAttributes(e)}},t.prototype.setParameters=function(t,e,i){return e=e||{},t&&void 0!==t.thresholdType&&this.volume instanceof Wv&&("value"===this.thresholdType&&"sigma"===t.thresholdType?(this.thresholdMin=this.volume.getSigmaForValue(this.thresholdMin),this.thresholdMax=this.volume.getSigmaForValue(this.thresholdMax)):"sigma"===this.thresholdType&&"value"===t.thresholdType&&(this.thresholdMin=this.volume.getValueForSigma(this.thresholdMin),this.thresholdMax=this.volume.getValueForSigma(this.thresholdMax)),this.thresholdType=t.thresholdType),t&&void 0!==t.radiusType&&("radius"===t.radiusType?this.radius=.1:this.radius=t.radiusType,e.radius=!0,"sphere"!==this.dotType||Dp&&!this.disableImpostor||(i=!0)),t&&void 0!==t.radius&&(e.radius=!0,"sphere"!==this.dotType||Dp&&!this.disableImpostor||(i=!0)),t&&void 0!==t.scale&&(e.scale=!0,"sphere"!==this.dotType||Dp&&!this.disableImpostor||(i=!0)),r.prototype.setParameters.call(this,t,e,i),this},t}(Xf);Hp.add("shader/Image.vert","uniform float clipRadius;\nuniform vec3 clipCenter;\nvarying vec2 vUv;\n#if defined( NEAR_CLIP ) || defined( RADIUS_CLIP ) || !defined( PICKING )\nvarying vec3 vViewPosition;\n#endif\n#if defined( RADIUS_CLIP )\nvarying vec3 vClipCenter;\n#endif\nvoid main() {\n#include begin_vertex\n#include project_vertex\nvUv = uv;\n#if defined( NEAR_CLIP ) || defined( RADIUS_CLIP ) || !defined( PICKING )\nvViewPosition = -mvPosition.xyz;\n#endif\n#if defined( RADIUS_CLIP )\nvClipCenter = -( modelViewMatrix * vec4( clipCenter, 1.0 ) ).xyz;\n#endif\n}"),Hp.add("shader/Image.frag","uniform sampler2D map;\nuniform float opacity;\nuniform vec2 mapSize;\nuniform float clipNear;\nuniform float clipRadius;\nvarying vec2 vUv;\n#if defined( NEAR_CLIP ) || defined( RADIUS_CLIP ) || !defined( PICKING )\nvarying vec3 vViewPosition;\n#endif\n#if defined( RADIUS_CLIP )\nvarying vec3 vClipCenter;\n#endif\n#if defined( PICKING )\nuniform sampler2D pickingMap;\nuniform float objectId;\n#else\n#include fog_pars_fragment\n#endif\n#if defined( CUBIC_INTERPOLATION )\n#if defined( CATMULROM_FILTER ) || defined( MITCHELL_FILTER )\n#if defined( CATMULROM_FILTER )\nconst float B = 0.0;\nconst float C = 0.5;\n#elif defined( MITCHELL_FILTER )\nconst float B = 0.333;\nconst float C = 0.333;\n#endif\nfloat filter( float x ){\nfloat f = x;\nif( f < 0.0 ){\nf = -f;\n}\nif( f < 1.0 ){\nreturn ( ( 12.0 - 9.0 * B - 6.0 * C ) * ( f * f * f ) +\n( -18.0 + 12.0 * B + 6.0 *C ) * ( f * f ) +\n( 6.0 - 2.0 * B ) ) / 6.0;\n}else if( f >= 1.0 && f < 2.0 ){\nreturn ( ( -B - 6.0 * C ) * ( f * f * f )\n+ ( 6.0 * B + 30.0 * C ) * ( f *f ) +\n( - ( 12.0 * B ) - 48.0 * C ) * f +\n8.0 * B + 24.0 * C ) / 6.0;\n}else{\nreturn 0.0;\n}\n}\n#elif defined( BSPLINE_FILTER )\nfloat filter( float x ){\nfloat f = x;\nif( f < 0.0 ){\nf = -f;\n}\nif( f >= 0.0 && f <= 1.0 ){\nreturn ( 2.0 / 3.0 ) + ( 0.5 ) * ( f * f * f ) - ( f * f );\n}else if( f > 1.0 && f <= 2.0 ){\nreturn 1.0 / 6.0 * pow( ( 2.0 - f ), 3.0 );\n}\nreturn 1.0;\n}\n#else\nfloat filter( float x ){\nreturn 1.0;\n}\n#endif\nvec4 biCubic( sampler2D tex, vec2 texCoord ){\nvec2 texelSize = 1.0 / mapSize;\ntexCoord -= texelSize / 2.0;\nvec4 nSum = vec4( 0.0 );\nfloat nDenom = 0.0;\nvec2 cell = fract( texCoord * mapSize );\nfor( float m = -1.0; m <= 2.0; ++m ){\nfor( float n = -1.0; n <= 2.0; ++n ){\nvec4 vecData = texture2D(\ntex, texCoord + texelSize * vec2( m, n )\n);\nfloat c = filter( m - cell.x ) * filter( -n + cell.y );\nnSum += vecData * c;\nnDenom += c;\n}\n}\nreturn nSum / nDenom;\n}\n#endif\nvoid main(){\n#include nearclip_fragment\n#include radiusclip_fragment\n#if defined( CUBIC_INTERPOLATION )\ngl_FragColor = biCubic( map, vUv );\n#else\ngl_FragColor = texture2D( map, vUv );\n#endif\n#if defined( PICKING )\nif( gl_FragColor.a < 0.3 )\ndiscard;\ngl_FragColor = vec4( texture2D( pickingMap, vUv ).xyz, objectId );\n#else\nif( gl_FragColor.a < 0.01 )\ndiscard;\ngl_FragColor.a *= opacity;\n#include fog_fragment\n#endif\n}");var yx=new Uint16Array([0,1,2,1,3,2]),bx=new Float32Array([0,1,0,0,1,1,1,0]),xx=Object.assign({filter:"nearest",forceTransparent:!0},Kv),_x=Object.assign({filter:{updateShader:!0,uniform:!0}},Jv),wx=function(l){function t(t,e){l.call(this,{position:t.position,index:yx,picking:t.picking},e),this.parameterTypes=_x,this.alwaysTransparent=!0,this.hasWireframe=!1,this.vertexShader="Image.vert",this.fragmentShader="Image.frag";var i=t.imageData,r=t.width,n=t.height,o=new Si(i,r,n);o.flipY=!0,this.tex=o;for(var a=i.length,s=new Uint8Array(a),c=0;c<a;c+=4){var u=c/4;s[c]=u>>16&255,s[c+1]=u>>8&255,s[c+2]=255&u}var h=new Si(s,r,n);h.flipY=!0,h.minFilter=jt,h.magFilter=jt,this.pickingTex=h,this.addUniforms({map:{value:o},pickingMap:{value:h},mapSize:{value:new Ze(r,n)}}),this.geometry.addAttribute("uv",new yr(bx,2))}l&&(t.__proto__=l),(t.prototype=Object.create(l&&l.prototype)).constructor=t;var e={defaultParameters:{configurable:!0}};return e.defaultParameters.get=function(){return xx},t.prototype.getDefines=function(t){var e=l.prototype.getDefines.call(this,t),i=this.parameters.filter;return i.startsWith("cubic")&&(e.CUBIC_INTERPOLATION=1,i.endsWith("bspline")?e.BSPLINE_FILTER=1:i.endsWith("catmulrom")?e.CATMULROM_FILTER=1:i.endsWith("mitchell")&&(e.MITCHELL_FILTER=1)),e},t.prototype.updateTexture=function(){var t=this.tex,e=this.parameters.filter;e.startsWith("cubic")?(t.minFilter=jt,t.magFilter=jt):"linear"===e?(t.minFilter=Ht,t.magFilter=Ht):(t.minFilter=jt,t.magFilter=jt),t.needsUpdate=!0,this.pickingTex.needsUpdate=!0},t.prototype.makeMaterial=function(){l.prototype.makeMaterial.call(this),this.updateTexture();var t=this.material;t.uniforms.map.value=this.tex,t.blending=X,t.needsUpdate=!0;var e=this.wireframeMaterial;e.uniforms.map.value=this.tex,e.blending=X,e.needsUpdate=!0;var i=this.pickingMaterial;i.uniforms.map.value=this.tex,i.uniforms.pickingMap.value=this.pickingTex,i.blending=X,i.needsUpdate=!0},t.prototype.setUniforms=function(t){t&&void 0!==t.filter&&(this.updateTexture(),t.map=this.tex),l.prototype.setUniforms.call(this,t)},Object.defineProperties(t.prototype,e),t}(Qv),Sx=function(t,e){var i=e||{};this.dimension=al(i.dimension,"x"),this.positionType=al(i.positionType,"percent"),this.position=al(i.position,30),this.thresholdType=al(i.thresholdType,"sigma"),this.thresholdMin=al(i.thresholdMin,-1/0),this.thresholdMax=al(i.thresholdMax,1/0),this.normalize=al(i.normalize,!1),this.volume=t};Sx.prototype.getPositionFromCoordinate=function(t){var e,i=this.dimension,r=this.volume,n=r.matrix,o=(new Qe).setFromMatrixPosition(n)[i],a=(new Qe).setFromMatrixScale(n)[i];return e="x"===i?r.nx:"y"===i?r.ny:r.nz,Math.round(((t-o)/(e/100)+1)/a)},Sx.prototype.getData=function(t){t=t||{};var e,n=this.volume,i=n.data,o=n.matrix;function r(t){return Math.round(t/100*(e-1))}function a(t,e,i,r){return 3*(i*n.ny*n.nx+e*n.nx+t)+r}e="coordinate"===this.positionType?this.getPositionFromCoordinate(this.position):this.position;var s,c,u,h,l,p=new Float32Array(12),d=new Qe,f=0,m=0,g=0,v=n.nx,y=n.ny,b=n.nz;function x(t,e,i,r){d.set(t,e,i).applyMatrix4(o).toArray(p,r)}"x"===this.dimension?(u=r(n.nx),h=n.ny-1,l=n.nz-1,s=n.nz,c=n.ny,v=(f=u)+1,x(u,0,0,0),x(u,h,0,3),x(u,0,l,6),x(u,h,l,9)):"y"===this.dimension?(u=n.nx-1,h=r(n.ny),l=n.nz-1,s=n.nz,c=n.nx,y=(m=h)+1,x(0,h,0,0),x(u,h,0,3),x(0,h,l,6),x(u,h,l,9)):"z"===this.dimension&&(u=n.nx-1,h=n.ny-1,l=r(n.nz),s=n.nx,c=n.ny,b=(g=l)+1,x(0,0,l,0),x(0,h,l,3),x(u,0,l,6),x(u,h,l,9));var _,w,S=0,A=0,M=new Uint8Array(s*c*4),P=new Float32Array(s*c);"sigma"===this.thresholdType?(_=n.getValueForSigma(this.thresholdMin),w=n.getValueForSigma(this.thresholdMax)):(_=this.thresholdMin,w=this.thresholdMax);var E=Object.assign({},t.colorParams,{volume:n});this.normalize&&(E.domain=[0,1]);var C,T,I,R=Up.getScheme(E),L=new Float32Array(3),O=R.getScale();if(this.normalize){C=1/0,T=-1/0;for(var D=m;D<y;++D)for(var k=f;k<v;++k)for(var B=g;B<b;++B){var N=i[a(k,D,B,0)/3];N<C&&(C=N),T<N&&(T=N)}I=T-C}for(var F=m;F<y;++F)for(var z=f;z<v;++z)for(var U=g;U<b;++U){var j=a(z,F,U,0)/3,G=i[j];this.normalize&&(G=(G-C)/I),R.colorToArray(O(G),L),M[S]=Math.round(255*L[0]),M[S+1]=Math.round(255*L[1]),M[S+2]=Math.round(255*L[2]),M[S+3]=_<G&&G<w?255:0,P[A]=j,++A,S+=4}var V=new fv(P,n);return{position:p,imageData:M,width:s,height:c,picking:V}};var Ax=function(r){function t(t,e,i){r.call(this,t,e,i),this.type="slice",this.parameters=Object.assign({filter:{type:"select",buffer:!0,options:{nearest:"nearest",linear:"linear","cubic-bspline":"cubic-bspline","cubic-catmulrom":"cubic-catmulrom","cubic-mitchell":"cubic-mitchell"}},positionType:{type:"select",rebuild:!0,options:{percent:"percent",coordinate:"coordinate"}},position:{type:"range",step:.1,max:100,min:1,rebuild:!0},dimension:{type:"select",rebuild:!0,options:{x:"x",y:"y",z:"z"}},thresholdType:{type:"select",rebuild:!0,options:{value:"value",sigma:"sigma"}},thresholdMin:{type:"number",precision:3,max:1/0,min:-1/0,rebuild:!0},thresholdMax:{type:"number",precision:3,max:1/0,min:-1/0,rebuild:!0},normalize:{type:"boolean",rebuild:!0}},this.parameters,{flatShaded:null,side:null,wireframe:null,linewidth:null,colorScheme:null,roughness:null,metalness:null,diffuse:null}),this.volume=t,this.init(i)}return r&&(t.__proto__=r),((t.prototype=Object.create(r&&r.prototype)).constructor=t).prototype.init=function(t){var e=this.volume,i=t||{};i.colorDomain=al(i.colorDomain,[e.min,e.max]),i.colorScheme=al(i.colorScheme,"value"),i.colorScale=al(i.colorScale,"Spectral"),this.colorScheme="value",this.dimension=al(i.dimension,"x"),this.filter=al(i.filter,"cubic-bspline"),this.positionType=al(i.positionType,"percent"),this.position=al(i.position,30),this.thresholdType=al(i.thresholdType,"sigma"),this.thresholdMin=al(i.thresholdMin,-1/0),this.thresholdMax=al(i.thresholdMax,1/0),this.normalize=al(i.normalize,!1),r.prototype.init.call(this,i),this.build()},t.prototype.attach=function(t){var e=this;this.bufferList.forEach(function(t){e.viewer.add(t)}),this.setVisibility(this.visible),t()},t.prototype.create=function(){var t=new Sx(this.volume,{positionType:this.positionType,position:this.position,dimension:this.dimension,thresholdType:this.thresholdType,thresholdMin:this.thresholdMin,thresholdMax:this.thresholdMax,normalize:this.normalize}),e=new wx(t.getData({colorParams:this.getColorParams()}),this.getBufferParams({filter:this.filter}));this.bufferList.push(e)},t}(Xf);function Mx(t){Bp.error("makeRepresentation: representation type "+t+" unknown")}var Px={name:"some element",status:""},Ex=function(t,e){void 0===e&&(e={}),this.stage=t,this.signals={statusChanged:new Wl,nameChanged:new Wl,disposed:new Wl},this.parameters=sl(e,this.defaultParameters),this.uuid=Ll()},Cx={defaultParameters:{configurable:!0},name:{configurable:!0}};Cx.defaultParameters.get=function(){return Px},Cx.name.get=function(){return this.parameters.name},Ex.prototype.setStatus=function(t){return this.parameters.status=t,this.signals.statusChanged.dispatch(t),this},Ex.prototype.setName=function(t){return this.parameters.name=t,this.signals.nameChanged.dispatch(t),this},Ex.prototype.dispose=function(){this.signals.disposed.dispatch()},Object.defineProperties(Ex.prototype,Cx);var Tx=Object.assign({visible:!0},Px),Ix=function(n){function t(t,e,i,r){void 0===i&&(i={}),n.call(this,t,Object.assign({name:e.type},i)),this.parent=r,this.signals=Object.assign({visibilityChanged:new Wl,parametersChanged:new Wl},this.signals),this.setRepresentation(e)}n&&(t.__proto__=n),(t.prototype=Object.create(n&&n.prototype)).constructor=t;var e={defaultParameters:{configurable:!0},visible:{configurable:!0},type:{configurable:!0}};return e.defaultParameters.get=function(){return Tx},e.visible.get=function(){return this.parameters.visible},e.type.get=function(){return"representation"},t.prototype.getType=function(){return this.repr.type},t.prototype.setRepresentation=function(t){this._disposeRepresentation(),this.repr=t,this.stage.tasks.listen(this.repr.tasks),this.updateVisibility()},t.prototype._disposeRepresentation=function(){this.repr&&(this.stage.tasks.unlisten(this.repr.tasks),this.repr.dispose())},t.prototype.dispose=function(){this.parent&&this.parent.hasRepresentation(this)?this.parent.removeRepresentation(this):(this._disposeRepresentation(),this.signals.disposed.dispatch())},t.prototype.setVisibility=function(t){return this.parameters.visible=t,this.updateVisibility(),this.signals.visibilityChanged.dispatch(this.parameters.visible),this},t.prototype.getVisibility=function(){return this.parent?this.parent.parameters.visible&&this.parameters.visible:this.parameters.visible},t.prototype.toggleVisibility=function(){return this.setVisibility(!this.parameters.visible)},t.prototype.updateVisibility=function(){this.repr.setVisibility(this.getVisibility())},t.prototype.update=function(t){return this.repr.update(t),this},t.prototype.build=function(t){return this.repr.build(t),this},t.prototype.setSelection=function(t){var e=this.repr;return e.setSelection&&e.setSelection(t),this},t.prototype.setParameters=function(t){return this.repr.setParameters(t),this.signals.parametersChanged.dispatch(this.repr.getParameters()),this},t.prototype.getParameters=function(){return this.repr.getParameters()},t.prototype.setColor=function(t){return this.repr.setColor(t),this},Object.defineProperties(t.prototype,e),t}(Ex),Rx=new Ke,Lx=new Qe,Ox={name:"",status:"",visible:!0},Dx=function(t,e,i){void 0===i&&(i={}),this.stage=t,this.object=e,this.signals={representationAdded:new Wl,representationRemoved:new Wl,visibilityChanged:new Wl,matrixChanged:new Wl,statusChanged:new Wl,nameChanged:new Wl,disposed:new Wl},this.reprList=[],this.annotationList=[],this.matrix=new Ke,this.position=new Qe,this.quaternion=new Je,this.scale=new Qe(1,1,1),this.transform=new Ke,this.parameters=sl(i,this.defaultParameters),this.uuid=Ll(),this.viewer=t.viewer,this.controls=new My(this)},kx={defaultParameters:{configurable:!0},name:{configurable:!0},status:{configurable:!0},visible:{configurable:!0}};kx.defaultParameters.get=function(){return Ox},kx.name.get=function(){return this.parameters.name},kx.status.get=function(){return this.parameters.status},kx.visible.get=function(){return this.parameters.visible},Dx.prototype.setPosition=function(t){return Array.isArray(t)?this.position.fromArray(t):this.position.copy(t),this.updateMatrix(),this},Dx.prototype.setRotation=function(t){if(Array.isArray(t))if(3===t.length){var e=(new Fi).fromArray(t);this.quaternion.setFromEuler(e)}else this.quaternion.fromArray(t);else t instanceof Fi?this.quaternion.setFromEuler(t):this.quaternion.copy(t);return this.updateMatrix(),this},Dx.prototype.setScale=function(t){return this.scale.set(t,t,t),this.updateMatrix(),this},Dx.prototype.setTransform=function(t){return this.transform.copy(t),this.updateMatrix(),this},Dx.prototype.updateMatrix=function(){var e=this,t=this.getCenterUntransformed(Lx);this.matrix.makeTranslation(-t.x,-t.y,-t.z),Rx.makeRotationFromQuaternion(this.quaternion),this.matrix.premultiply(Rx),Rx.makeScale(this.scale.x,this.scale.y,this.scale.z),this.matrix.premultiply(Rx);var i=this.position;Rx.makeTranslation(i.x+t.x,i.y+t.y,i.z+t.z),this.matrix.premultiply(Rx),this.matrix.premultiply(this.transform),this.reprList.forEach(function(t){t.setParameters({matrix:e.matrix})}),this.stage.viewer.updateBoundingBox(),this.signals.matrixChanged.dispatch(this.matrix)},Dx.prototype.addAnnotation=function(t,e,i){var r=new _y(this,t,e,i);return this.annotationList.push(r),r},Dx.prototype.eachAnnotation=function(t){this.annotationList.slice().forEach(t)},Dx.prototype.removeAnnotation=function(t){var e=this.annotationList.indexOf(t);-1!==e&&(this.annotationList.splice(e,1),t.dispose())},Dx.prototype.removeAllAnnotations=function(){this.eachAnnotation(function(t){return t.dispose()}),this.annotationList.length=0},Dx.prototype._addRepresentation=function(t,e,i,r){void 0===r&&(r=!1);var n=i||{},o=this.stage.getParameters();n.matrix=this.matrix.clone(),n.quality=n.quality||o.quality,n.disableImpostor=al(n.disableImpostor,!o.impostor),n.useWorker=al(n.useWorker,o.workerDefault),n.visible=al(n.visible,!0);var a=Object.assign({},n,{visible:this.parameters.visible&&n.visible}),s=function(t,e,i,r){var n;if(de.Debug&&Bp.time("makeRepresentation "+t),e instanceof qb){if(!(n=Gp.get(t)))return void Mx(t)}else if(e instanceof Vv)if("surface"===t)n=cy;else{if("dot"!==t)return void Mx(t);n=vx}else if(e instanceof Wv)if("surface"===t)n=cy;else if("dot"===t)n=vx;else{if("slice"!==t)return void Mx(t);n=Ax}else if(e instanceof Qb)n=ex,e=e.getBufferList();else{if("buffer"!==t)return void Bp.error("makeRepresentation: object "+e+" unknown");n=ex}var o=new n(e,i,r);return de.Debug&&Bp.timeEnd("makeRepresentation "+t),o}(t,e,this.viewer,a),c=new Ix(this.stage,s,n,this);return r||(this.reprList.push(c),this.signals.representationAdded.dispatch(c)),c},Dx.prototype.addBufferRepresentation=function(t,e){return this._addRepresentation.call(this,"buffer",t,e)},Dx.prototype.hasRepresentation=function(t){return-1!==this.reprList.indexOf(t)},Dx.prototype.eachRepresentation=function(t){this.reprList.slice().forEach(t)},Dx.prototype.removeRepresentation=function(t){var e=this.reprList.indexOf(t);-1!==e&&(this.reprList.splice(e,1),t.dispose(),this.signals.representationRemoved.dispatch(t))},Dx.prototype.updateRepresentations=function(e){this.reprList.forEach(function(t){return t.update(e)}),this.stage.viewer.requestRender()},Dx.prototype.removeAllRepresentations=function(){this.eachRepresentation(function(t){return t.dispose()})},Dx.prototype.dispose=function(){this.removeAllAnnotations(),this.removeAllRepresentations(),delete this.annotationList,delete this.reprList,this.signals.disposed.dispatch()},Dx.prototype.setVisibility=function(t){return this.parameters.visible=t,this.eachRepresentation(function(t){return t.updateVisibility()}),this.eachAnnotation(function(t){return t.updateVisibility()}),this.signals.visibilityChanged.dispatch(t),this},Dx.prototype.setStatus=function(t){return this.parameters.status=t,this.signals.statusChanged.dispatch(t),this},Dx.prototype.setName=function(t){return this.parameters.name=t,this.signals.nameChanged.dispatch(t),this},Dx.prototype.getBox=function(){for(var t,e=[],i=arguments.length;i--;)e[i]=arguments[i];return(t=this).getBoxUntransformed.apply(t,e).clone().applyMatrix4(this.matrix)},Dx.prototype.getCenter=function(){for(var t,e=[],i=arguments.length;i--;)e[i]=arguments[i];return(t=this).getCenterUntransformed.apply(t,e).clone().applyMatrix4(this.matrix)},Dx.prototype.getZoom=function(){for(var t,e=[],i=arguments.length;i--;)e[i]=arguments[i];return this.stage.getZoomForBox((t=this).getBox.apply(t,e))},Dx.prototype.getBoxUntransformed=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];return new Ai},Dx.prototype.getCenterUntransformed=function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];return this.getBoxUntransformed().getCenter(new Qe)},Dx.prototype.autoView=function(t){this.stage.animationControls.zoomMove(this.getCenter(),this.getZoom(),al(t,0))},Object.defineProperties(Dx.prototype,kx);var Bx=function(t){void 0===t&&(t=[]);for(var e=(this.list=t).length,i=0;i<e;++i){t[i].signals.disposed.add(this._remove,this)}},Nx={first:{configurable:!0}};Bx.prototype._remove=function(t){var e=this.list.indexOf(t);-1!==e&&this.list.splice(e,1)},Nx.first.get=function(){return 0<this.list.length?this.list[0]:void 0},Bx.prototype.forEach=function(t){return this.list.forEach(t),this},Bx.prototype.dispose=function(){return this.forEach(function(t){return t.dispose()})},Object.defineProperties(Bx.prototype,Nx);var Fx=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),((e.prototype=Object.create(t&&t.prototype)).constructor=e).prototype.setParameters=function(e){return this.forEach(function(t){return t.setParameters(e)})},e.prototype.setVisibility=function(e){return this.forEach(function(t){return t.setVisibility(e)})},e.prototype.setSelection=function(e){return this.forEach(function(t){return t.setSelection(e)})},e.prototype.setColor=function(e){return this.forEach(function(t){return t.setColor(e)})},e.prototype.update=function(e){return this.forEach(function(t){return t.update(e)})},e.prototype.build=function(e){return this.forEach(function(t){return t.build(e)})},e.prototype.dispose=function(t){return this.forEach(function(t){return t.dispose()})},e}(Bx),zx=Object.assign({defaultStep:1,defaultTimeout:50,defaultInterpolateType:"",defaultInterpolateStep:5,defaultMode:"loop",defaultDirection:"forward",initialFrame:0},Px),Ux=function(n){function t(t,e,i){var r=this;void 0===i&&(i={}),n.call(this,t,Object.assign({name:e.name},i)),this.trajectory=e,this.signals=Object.assign(this.signals,{frameChanged:new Wl,playerChanged:new Wl,countChanged:new Wl,parametersChanged:new Wl}),e.signals.frameChanged.add(function(t){r.signals.frameChanged.dispatch(t)}),e.signals.playerChanged.add(function(t){r.signals.playerChanged.dispatch(t)}),e.signals.countChanged.add(function(t){r.signals.countChanged.dispatch(t)}),void 0!==i.initialFrame&&this.setFrame(i.initialFrame)}n&&(t.__proto__=n),(t.prototype=Object.create(n&&n.prototype)).constructor=t;var e={defaultParameters:{configurable:!0},type:{configurable:!0}};return e.defaultParameters.get=function(){return zx},e.type.get=function(){return"trajectory"},t.prototype.setFrame=function(t){this.trajectory.setFrame(t)},t.prototype.setParameters=function(t){void 0===t&&(t={}),this.trajectory.setParameters(t),this.signals.parametersChanged.dispatch(t)},t.prototype.dispose=function(){this.trajectory.dispose(),n.prototype.dispose.call(this)},Object.defineProperties(t.prototype,e),t}(Ex),jx=function(t,e){this.name=t,this.path=e,this.coordinates=[],this.boxes=[],this.times=[],this.timeOffset=0,this.deltaTime=1},Gx={type:{configurable:!0}};Gx.type.get=function(){return"Frames"},Object.defineProperties(jx.prototype,Gx);var Vx=function(t,e){var i,r;if(this.A=new _v(3,3),this.W=new _v(1,3),this.U=new _v(3,3),this.V=new _v(3,3),this.VH=new _v(3,3),this.R=new _v(3,3),this.tmp=new _v(3,3),this.c=new _v(3,3),t instanceof qb)i=t.atomCount;else{if(!(t instanceof Float32Array))return;i=t.length/3}if(e instanceof qb)r=e.atomCount;else{if(!(e instanceof Float32Array))return;r=e.length/3}var n=Math.min(i,r),o=new _v(3,n),a=new _v(3,n);this.coords1t=new _v(n,3),this.coords2t=new _v(n,3),this.c.data.set([1,0,0,0,1,0,0,0,-1]),this.prepCoords(t,o,n),this.prepCoords(e,a,n),this._superpose(o,a)};Vx.prototype._superpose=function(t,e){var i,r,n,o,a,s,c,u,h,l,p,d,f,m,g,v,y,b,x,_,w,S;this.mean1=Mv(t),this.mean2=Mv(e),Pv(t,this.mean1),Pv(e,this.mean2),wv(this.coords1t,t),wv(this.coords2t,e),Sv(this.A,this.coords2t,this.coords1t),Iv(this.A,this.W,this.U,this.V),i=this.V,r=this.VH,n=i.data,o=r.data,a=n[4],s=n[8],c=n[5],u=n[7],h=n[0],l=h*a,p=h*c,d=n[3],f=n[1],m=d*f,g=n[2],v=d*g,y=n[6],_=1/(l*s-p*u-m*s+v*u+(b=y*f)*c-(x=y*g)*a),o[0]=(a*s-c*u)*_,o[1]=-(f*s-g*u)*_,o[2]=-(-f*c+g*a)*_,o[3]=-(d*s-c*y)*_,o[4]=(h*s-x)*_,o[5]=-(p-v)*_,o[6]=-(-d*u+a*y)*_,o[7]=-(h*u-b)*_,o[8]=(l-m)*_,Av(this.R,this.U,this.VH),w=this.R,(S=w.data)[0]*S[4]*S[8]-S[0]*S[5]*S[7]-S[3]*S[1]*S[8]+S[3]*S[2]*S[7]+S[6]*S[1]*S[5]-S[6]*S[2]*S[4]<0&&(de.Debug&&Bp.log("R not a right handed system"),Av(this.tmp,this.c,this.VH),Av(this.R,this.U,this.tmp))},Vx.prototype.prepCoords=function(t,e,i){var r=0,n=3*i,o=e.data;t instanceof qb?t.eachAtom(function(t){r<n&&(o[r+0]=t.x,o[r+1]=t.y,o[r+2]=t.z,r+=3)}):t instanceof Float32Array?o.set(t.subarray(0,n)):Bp.warn("prepCoords: input type unknown")},Vx.prototype.transform=function(t){var e;if(t instanceof qb)e=t.atomCount;else{if(!(t instanceof Float32Array))return;e=t.length/3}var i=new _v(3,e),r=new _v(e,3);this.prepCoords(t,i,e),Pv(i,this.mean1),Sv(r,this.R,i),wv(i,r),function(t,e){for(var i=t.rows,r=t.cols,n=t.data,o=0,a=0;o<i;++o)for(var s=0;s<r;++s,++a)n[a]+=e[s]}(i,this.mean2);var n=0,o=i.data;t instanceof qb?t.eachAtom(function(t){t.x=o[n+0],t.y=o[n+1],t.z=o[n+2],n+=3}):t instanceof Float32Array?t.set(o.subarray(0,3*e)):Bp.warn("transform: input type unknown")};var Hx={step:1,timeout:50,start:0,end:0,interpolateType:"",interpolateStep:5,mode:"loop",direction:"forward"},$x=function(t,e){var i=this;void 0===e&&(e={}),this.signals={startedRunning:new Wl,haltedRunning:new Wl},this._run=!1,this._previousTime=0,this._currentTime=0,this._currentStep=1,t.signals.playerChanged.add(function(t){t!==i&&i.pause()},this);var r=al(t.frameCount,1);this.traj=t,this.parameters=sl(e,Hx),this.parameters.end=Math.min(al(e.end,r-1),r-1),this.parameters.step=al(e.step,Math.ceil((r+1)/100)),this._currentFrame=this.parameters.start,this._direction="bounce"===this.parameters.direction?"forward":this.parameters.direction,t.signals.countChanged.add(function(t){i.parameters.end=Math.min(al(i.parameters.end,t-1),t-1)},this),this._animate=this._animate.bind(this)},Wx={isRunning:{configurable:!0}};Wx.isRunning.get=function(){return this._run},$x.prototype.setParameters=function(t){void 0===t&&(t={}),cl(this.parameters,t),void 0!==t.direction&&"bounce"!==this.parameters.direction&&(this._direction=this.parameters.direction)},$x.prototype._animate=function(){if(this._run){this._currentTime=window.performance.now();var t=this._currentTime-this._previousTime,e=this.parameters.interpolateType?this.parameters.interpolateStep:1,i=this.parameters.timeout/e,r=this.traj;if(r&&r.frameCount&&!r.inProgress&&i<=t)if(this.parameters.interpolateType)if(this._currentStep>this.parameters.interpolateStep&&(this._currentStep=1),1===this._currentStep&&(this._currentFrame=this._nextInterpolated()),r.hasFrame(this._currentFrame)){this._currentStep+=1;var n=this._currentStep/(this.parameters.interpolateStep+1),o=this._currentFrame,a=o[0],s=o[1],c=o[2],u=o[3];r.setFrameInterpolated(a,s,c,u,n,this.parameters.interpolateType),this._previousTime=this._currentTime}else r.loadFrame(this._currentFrame);else{var h=this._next();r.hasFrame(h)?(r.setFrame(h),this._previousTime=this._currentTime):r.loadFrame(h)}window.requestAnimationFrame(this._animate)}},$x.prototype._next=function(){var t,e=this.parameters;return((t="forward"===this._direction?this.traj.currentFrame+e.step:this.traj.currentFrame-e.step)>e.end||t<e.start)&&("bounce"===e.direction&&("forward"===this._direction?this._direction="backward":this._direction="forward"),"once"===e.mode?(this.pause(),t="forward"===e.direction?e.end:"backward"===e.direction?e.start:"forward"===this._direction?e.start:e.end):"forward"===this._direction?(t=e.start,e.interpolateType&&(t=Math.min(e.end,t+e.step))):(t=e.end,e.interpolateType&&(t=Math.max(e.start,t-e.step)))),t},$x.prototype._nextInterpolated=function(){var t,e,i,r=this.parameters,n=this._next();return"forward"===this._direction?(t=Math.max(r.start,n-r.step),e=Math.max(r.start,n-2*r.step),i=Math.max(r.start,n-3*r.step)):(t=Math.min(r.end,n+r.step),e=Math.min(r.end,n+2*r.step),i=Math.min(r.end,n+3*r.step)),[n,t,e,i]},$x.prototype.toggle=function(){this._run?this.pause():this.play()},$x.prototype.play=function(){if(!this._run){this.traj.player!==this&&this.traj.setPlayer(this),this._currentStep=1;var t=this.parameters,e=this.traj.currentFrame,i=Math.ceil(e/t.step)*t.step;"forward"===t.direction&&e>=t.end?i=t.start:"backward"===t.direction&&e<=t.start&&(i=t.end),this.traj.setFrame(i),this._run=!0,this._animate(),this.signals.startedRunning.dispatch()}},$x.prototype.pause=function(){this._run=!1,this.signals.haltedRunning.dispatch()},$x.prototype.stop=function(){this.pause(),this.traj.setFrame(this.parameters.start)},Object.defineProperties($x.prototype,Wx);var Xx=function(t,e,i){var r=this;void 0===i&&(i={}),this.signals={countChanged:new Wl,frameChanged:new Wl,playerChanged:new Wl},this.frameCache={},this.loadQueue={},this.boxCache={},this.pathCache={},this.frameCacheSize=0,this._frameCount=0,this._currentFrame=-1,this._disposed=!1,this.deltaTime=al(i.deltaTime,0),this.timeOffset=al(i.timeOffset,0),this.centerPbc=al(i.centerPbc,!1),this.removePbc=al(i.removePbc,!1),this.removePeriodicity=al(i.removePeriodicity,!1),this.superpose=al(i.superpose,!1),this.name=t.replace(/^.*[\\/]/,""),this.trajPath=t,this.selection=new bp(al(i.sele,"backbone and not hydrogen")),this.selection.signals.stringChanged.add(function(){r.selectionIndices=r.structure.getAtomIndices(r.selection),r._resetCache(),r._saveInitialCoords(),r.setFrame(r._currentFrame)})},qx={frameCount:{configurable:!0},currentFrame:{configurable:!0}};qx.frameCount.get=function(){return this._frameCount},qx.currentFrame.get=function(){return this._currentFrame},Xx.prototype._init=function(t){this.setStructure(t),this._loadFrameCount(),this.setPlayer(new $x(this))},Xx.prototype._loadFrameCount=function(){},Xx.prototype.setStructure=function(t){this.structure=t,this.atomCount=t.atomCount,this.backboneIndices=this._getIndices(new bp("backbone and not hydrogen")),this._makeAtomIndices(),this._saveStructureCoords(),this.selectionIndices=this._getIndices(this.selection),this._resetCache(),this._saveInitialCoords(),this.setFrame(this._currentFrame)},Xx.prototype._saveInitialCoords=function(){var t=this;this.structure.hasCoords()?(this.initialCoords=new Float32Array(this.structureCoords),this._makeSuperposeCoords()):this.frameCache[0]?(this.initialCoords=new Float32Array(this.frameCache[0]),this._makeSuperposeCoords()):this.loadFrame(0,function(){return t._saveInitialCoords()})},Xx.prototype._saveStructureCoords=function(){this.structureCoords=this.structure.getAtomData({what:{position:!0}}).position},Xx.prototype.setSelection=function(t){return this.selection.setString(t),this},Xx.prototype._getIndices=function(t){var e=0,i=t.test,r=[];return i&&this.structure.eachAtom(function(t){i(t)&&r.push(e),e+=1}),r},Xx.prototype._makeSuperposeCoords=function(){var t=3*this.selectionIndices.length;this.coords1=new Float32Array(t),this.coords2=new Float32Array(t);for(var e=this.initialCoords,i=this.coords2,r=0;r<t;r+=3){var n=3*this.selectionIndices[r/3];i[r+0]=e[n+0],i[r+1]=e[n+1],i[r+2]=e[n+2]}},Xx.prototype._makeAtomIndices=function(){Bp.error("Trajectory._makeAtomIndices not implemented")},Xx.prototype._resetCache=function(){this.frameCache={},this.loadQueue={},this.boxCache={},this.pathCache={},this.frameCacheSize=0,this.initialCoords=new Float32Array(0)},Xx.prototype.setParameters=function(t){void 0===t&&(t={});var e=!1;void 0!==t.centerPbc&&t.centerPbc!==this.centerPbc&&(this.centerPbc=t.centerPbc,e=!0),void 0!==t.removePeriodicity&&t.removePeriodicity!==this.removePeriodicity&&(this.removePeriodicity=t.removePeriodicity,e=!0),void 0!==t.removePbc&&t.removePbc!==this.removePbc&&(this.removePbc=t.removePbc,e=!0),void 0!==t.superpose&&t.superpose!==this.superpose&&(this.superpose=t.superpose,e=!0),this.deltaTime=al(t.deltaTime,this.deltaTime),this.timeOffset=al(t.timeOffset,this.timeOffset),e&&(this._resetCache(),this.setFrame(this._currentFrame))},Xx.prototype.hasFrame=function(t){var e=this;return Array.isArray(t)?t.every(function(t){return!!e.frameCache[t]}):!!this.frameCache[t]},Xx.prototype.setFrame=function(t,e){var i=this;return void 0===t||(this.inProgress=!0,-1===t||this.frameCache[t]?(this._updateStructure(t),e&&e()):this.loadFrame(t,function(){i._updateStructure(t),e&&e()})),this},Xx.prototype._interpolate=function(t,e,i,r,n,o){var a,s=this.frameCache;a="spline"===o?function(t,e,i,r,n){for(var o=t.length,a=new Float32Array(o),s=0;s<o;s+=3){var c=s+1,u=s+2;a[s]=Bl(r[s],i[s],e[s],t[s],n,1),a[c]=Bl(r[c],i[c],e[c],t[c],n,1),a[u]=Bl(r[u],i[u],e[u],t[u],n,1)}return a}(s[t],s[e],s[i],s[r],n):function(t,e,i){for(var r=t.length,n=new Float32Array(r),o=0;o<r;o+=3){var a=o+1,s=o+2;n[o]=kl(e[o],t[o],i),n[a]=kl(e[a],t[a],i),n[s]=kl(e[s],t[s],i)}return n}(s[t],s[e],n),this.structure.updatePosition(a),this._currentFrame=t,this.signals.frameChanged.dispatch(t)},Xx.prototype.setFrameInterpolated=function(t,e,i,r,n,o,a){var s=this;if(void 0===t)return this;var c=this.frameCache,u=[];return c[r]||u.push(r),c[i]||u.push(i),c[e]||u.push(e),c[t]||u.push(t),u.length?this.loadFrame(u,function(){s._interpolate(t,e,i,r,n,o),a&&a()}):(this._interpolate(t,e,i,r,n,o),a&&a()),this},Xx.prototype.loadFrame=function(t,e){var i=this;Array.isArray(t)?t.forEach(function(t){i.loadQueue[t]||i.frameCache[t]||(i.loadQueue[t]=!0,i._loadFrame(t,function(){delete i.loadQueue[t]}))}):this.loadQueue[t]||this.frameCache[t]||(this.loadQueue[t]=!0,this._loadFrame(t,function(){delete i.loadQueue[t],e&&e()}))},Xx.prototype._loadFrame=function(t,e){Bp.error("Trajectory._loadFrame not implemented",t,e)},Xx.prototype._updateStructure=function(t){this._disposed?console.error("updateStructure: traj disposed"):(-1===t?this.structureCoords&&this.structure.updatePosition(this.structureCoords):this.structure.updatePosition(this.frameCache[t]),this.structure.trajectory={name:this.trajPath,frame:t},this._currentFrame=t,this.inProgress=!1,this.signals.frameChanged.dispatch(t))},Xx.prototype._doSuperpose=function(t){for(var e=3*this.selectionIndices.length,i=this.coords1,r=this.coords2,n=0;n<e;n+=3){var o=3*this.selectionIndices[n/3];i[n+0]=t[o+0],i[n+1]=t[o+1],i[n+2]=t[o+2]}new Vx(i,r).transform(t)},Xx.prototype._process=function(t,e,i,r){if(this._setFrameCount(r),e){if(0<this.backboneIndices.length&&this.centerPbc){var n=[e[0],e[4],e[8]];!function(t,e,i){if(0!==i[0]&&0!==i[8]&&0!==i[4])for(var r=t.length,n=i[0],o=i[1],a=i[2],s=-e[0]+n+n/2,c=-e[1]+o+o/2,u=-e[2]+a+a/2,h=0;h<r;h+=3)t[h+0]=(t[h+0]+s)%n,t[h+1]=(t[h+1]+c)%o,t[h+2]=(t[h+2]+u)%a}(i,(a=this.backboneIndices,[Pd(s=i,(c=n)[0],3,0,a),Pd(s,c[1],3,1,a),Pd(s,c[2],3,2,a)]),n)}if(this.removePeriodicity)!function(t,e,i){if(0!==e[0]&&0!==e[8]&&0!==e[4]){for(var r=t.length,n=3;n<r;n+=3)for(var o=0;o<3;++o){var a=(t[n+o]-i[o])/e[3*o+o];.5<Math.abs(a)&&(t[n+o]-=e[3*o+o]*Math.round(a))}}}(i,e,[zd(o=i,3,0),zd(o,3,1),zd(o,3,2)]);this.removePbc&&function(t,e){if(0!==e[0]&&0!==e[8]&&0!==e[4]){for(var i=t.length,r=3;r<i;r+=3)for(var n=0;n<3;++n){var o=t[r+n]-t[r-3+n];if(Math.abs(o)>.9*e[3*n+n])if(0<o)for(var a=0;a<3;++a)t[r+a]-=e[3*n+a];else for(var s=0;s<3;++s)t[r+s]+=e[3*n+s]}}}(i,e)}var o,a,s,c;0<this.selectionIndices.length&&this.coords1&&this.superpose&&this._doSuperpose(i),this.frameCache[t]=i,this.boxCache[t]=e,this.frameCacheSize+=1},Xx.prototype._setFrameCount=function(t){t!==this._frameCount&&(this._frameCount=t,this.signals.countChanged.dispatch(t))},Xx.prototype.dispose=function(){this._resetCache(),this._disposed=!0,this.player&&this.player.stop()},Xx.prototype.setPlayer=function(t){this.player=t,this.signals.playerChanged.dispatch(t)},Xx.prototype.getFrameTime=function(t){return this.timeOffset+t*this.deltaTime},Object.defineProperties(Xx.prototype,qx);var Yx=function(n){function t(t,e,i){var r=i||{};r.timeOffset=al(r.timeOffset,t.timeOffset),r.deltaTime=al(r.deltaTime,t.deltaTime),n.call(this,"",e,r),this.name=t.name,this.path=t.path,this.frames=t.coordinates,this.boxes=t.boxes,this._init(e)}n&&(t.__proto__=n),(t.prototype=Object.create(n&&n.prototype)).constructor=t;var e={type:{configurable:!0}};return e.type.get=function(){return"frames"},t.prototype._makeAtomIndices=function(){"StructureView"===this.structure.type?this.atomIndices=this.structure.getAtomIndices():this.atomIndices=void 0},t.prototype._loadFrame=function(t,e){var i,r=this.frames[t];if(this.atomIndices){var n=this.atomIndices,o=n.length;i=new Float32Array(3*o);for(var a=0;a<o;++a){var s=3*a,c=3*n[a];i[s+0]=r[c+0],i[s+1]=r[c+1],i[s+2]=r[c+2]}}else i=new Float32Array(r);var u=this.boxes[t],h=this.frames.length;this._process(t,u,i,h),"function"==typeof e&&e()},t.prototype._loadFrameCount=function(){this.frames&&this._setFrameCount(this.frames.length)},Object.defineProperties(t.prototype,e),t}(Xx),Zx=function(r){function t(t,e,i){r.call(this,"",e,i),this._init(e)}r&&(t.__proto__=r),(t.prototype=Object.create(r&&r.prototype)).constructor=t;var e={type:{configurable:!0}};return e.type.get=function(){return"structure"},t.prototype._makeAtomIndices=function(){this.structure.atomSet&&this.structure.atomSet.getSize()<this.structure.atomStore.count?this.atomIndices=this.structure.getAtomIndices():this.atomIndices=void 0},t.prototype._loadFrame=function(t,e){var i,r=this.structure,n=r.frames[t];if(this.atomIndices){var o=this.atomIndices,a=o.length;i=new Float32Array(3*a);for(var s=0;s<a;++s){var c=3*s,u=3*o[s];i[c+0]=n[u+0],i[c+1]=n[u+1],i[c+2]=n[u+2]}}else i=new Float32Array(n);var h=r.boxes[t],l=r.frames.length;this._process(t,h,i,l),"function"==typeof e&&e()},t.prototype._loadFrameCount=function(){this._setFrameCount(this.structure.frames.length)},Object.defineProperties(t.prototype,e),t}(Xx),Kx=function(r){function t(t,e,i){r.call(this,t,e,i),this._init(e)}r&&(t.__proto__=r),(t.prototype=Object.create(r&&r.prototype)).constructor=t;var e={type:{configurable:!0}};return e.type.get=function(){return"remote"},t.prototype._makeAtomIndices=function(){var t=[];if("StructureView"===this.structure.type){for(var e=this.structure.getAtomIndices(),i=e.length,r=e[0],n=e[0],o=1;o<i;++o){var a=e[o];n+1<a&&(t.push([r,n+1]),r=a),n=a}t.push([r,n+1])}else t.push([0,this.atomCount]);this.atomIndices=t},t.prototype._loadFrame=function(n,o){var a=this,s=new XMLHttpRequest,c=de.TrajectoryDatasource.getFrameUrl(this.trajPath,n),t=de.TrajectoryDatasource.getFrameParams(this.trajPath,this.atomIndices);s.open("POST",c,!0),s.responseType="arraybuffer",s.setRequestHeader("Content-type","application/x-www-form-urlencoded"),s.addEventListener("load",function(){var t=s.response;if(t){var e=new Int32Array(t,0,1)[0],i=new Float32Array(t,8,9),r=new Float32Array(t,44);a._process(n,i,r,e),"function"==typeof o&&o()}else Bp.error("empty arrayBuffer for '"+c+"'")},!1),s.send(t)},t.prototype._loadFrameCount=function(){var t=this,e=new XMLHttpRequest,i=de.TrajectoryDatasource.getCountUrl(this.trajPath);e.open("GET",i,!0),e.addEventListener("load",function(){t._setFrameCount(parseInt(e.response))},!1),e.send(null)},Object.defineProperties(t.prototype,e),t}(Xx);qb.prototype.getView=function(t){return new Jx(this,t)};var Jx=function(i){function t(t,e){i.call(this),this.structure=t,this.selection=e,this.center=new Qe,this.boundingBox=new Ai,this._bp=this.getBondProxy(),this._ap=this.getAtomProxy(),this._rp=this.getResidueProxy(),this._cp=this.getChainProxy(),this.selection&&this.selection.signals.stringChanged.add(this.refresh,this),this.structure.signals.refreshed.add(this.refresh,this),this.refresh()}i&&(t.__proto__=i);var e={type:{configurable:!0},name:{configurable:!0},path:{configurable:!0},title:{configurable:!0},id:{configurable:!0},data:{configurable:!0},atomSetDict:{configurable:!0},biomolDict:{configurable:!0},entityList:{configurable:!0},unitcell:{configurable:!0},frames:{configurable:!0},boxes:{configurable:!0},validation:{configurable:!0},bondStore:{configurable:!0},backboneBondStore:{configurable:!0},rungBondStore:{configurable:!0},atomStore:{configurable:!0},residueStore:{configurable:!0},chainStore:{configurable:!0},modelStore:{configurable:!0},atomMap:{configurable:!0},residueMap:{configurable:!0},bondHash:{configurable:!0},spatialHash:{configurable:!0},_hasCoords:{configurable:!0}};return((t.prototype=Object.create(i&&i.prototype)).constructor=t).prototype.init=function(){},e.type.get=function(){return"StructureView"},e.name.get=function(){return this.structure.name},e.path.get=function(){return this.structure.path},e.title.get=function(){return this.structure.title},e.id.get=function(){return this.structure.id},e.data.get=function(){return this.structure.data},e.atomSetDict.get=function(){return this.structure.atomSetDict},e.biomolDict.get=function(){return this.structure.biomolDict},e.entityList.get=function(){return this.structure.entityList},e.unitcell.get=function(){return this.structure.unitcell},e.frames.get=function(){return this.structure.frames},e.boxes.get=function(){return this.structure.boxes},e.validation.get=function(){return this.structure.validation},e.bondStore.get=function(){return this.structure.bondStore},e.backboneBondStore.get=function(){return this.structure.backboneBondStore},e.rungBondStore.get=function(){return this.structure.rungBondStore},e.atomStore.get=function(){return this.structure.atomStore},e.residueStore.get=function(){return this.structure.residueStore},e.chainStore.get=function(){return this.structure.chainStore},e.modelStore.get=function(){return this.structure.modelStore},e.atomMap.get=function(){return this.structure.atomMap},e.residueMap.get=function(){return this.structure.residueMap},e.bondHash.get=function(){return this.structure.bondHash},e.spatialHash.get=function(){return this.structure.spatialHash},e._hasCoords.get=function(){return this.structure._hasCoords},e._hasCoords.set=function(t){this.structure._hasCoords=t},t.prototype.refresh=function(){de.Debug&&Bp.time("StructureView.refresh"),this.atomSetCache={};var t=this.structure;if(this.selection.isAllSelection()&&t!==this&&t.atomSet&&t.bondSet){for(var e in this.atomSet=t.atomSet.clone(),this.bondSet=t.bondSet.clone(),this.atomSetDict){var i=this.atomSetDict[e];this.atomSetCache["__"+e]=i.clone()}this.atomCount=t.atomCount,this.bondCount=t.bondCount,this.boundingBox.copy(t.boundingBox),this.center.copy(t.center)}else if(this.selection.isNoneSelection()&&t!==this&&t.atomSet&&t.bondSet){for(var r in this.atomSet=new Um(t.atomCount),this.bondSet=new Um(t.bondCount),this.atomSetDict)this.atomSetCache["__"+r]=new Um(t.atomCount);this.atomCount=0,this.bondCount=0,this.boundingBox.makeEmpty(),this.center.set(0,0,0)}else{for(var n in this.atomSet=this.getAtomSet(this.selection,!0),t.atomSet&&(this.atomSet=this.atomSet.intersection(t.atomSet)),this.bondSet=this.getBondSet(),this.atomSetDict){var o=this.atomSetDict[n];this.atomSetCache["__"+n]=o.makeIntersection(this.atomSet)}this.atomCount=this.atomSet.getSize(),this.bondCount=this.bondSet.getSize(),this.boundingBox=this.getBoundingBox(),this.center=this.boundingBox.getCenter(new Qe)}de.Debug&&Bp.timeEnd("StructureView.refresh"),this.signals.refreshed.dispatch()},t.prototype.setSelection=function(t){this.selection=t,this.refresh()},t.prototype.getSelection=function(t){var e=[];t&&t.string&&e.push(t.string);var i=this.structure.getSelection();i&&i.string&&e.push(i.string),this.selection&&this.selection.string&&e.push(this.selection.string);var r="";return 0<e.length&&(r="( "+e.join(" ) AND ( ")+" )"),new bp(r)},t.prototype.getStructure=function(){return this.structure.getStructure()},t.prototype.eachBond=function(t,e){this.structure.eachBond(t,this.getSelection(e))},t.prototype.eachAtom=function(e,t){var i=this.getAtomProxy(),r=this.getAtomSet(t),n=this.atomStore.count;if(r.getSize()<n)r.forEach(function(t){i.index=t,e(i)});else for(var o=0;o<n;++o)i.index=o,e(i)},t.prototype.eachResidue=function(t,e){this.structure.eachResidue(t,this.getSelection(e))},t.prototype.eachResidueN=function(t,e){console.error("StructureView.eachResidueN() not implemented")},t.prototype.eachChain=function(t,e){this.structure.eachChain(t,this.getSelection(e))},t.prototype.eachModel=function(t,e){this.structure.eachModel(t,this.getSelection(e))},t.prototype.getAtomSet=function(t,e){void 0===e&&(e=!1);var i=this.structure.getAtomSet(t);return!e&&this.atomSet&&(i=i.makeIntersection(this.atomSet)),i},t.prototype.getAtomIndices=function(t){return this.structure.getAtomIndices(this.getSelection(t))},t.prototype.refreshPosition=function(){return this.structure.refreshPosition()},t.prototype.dispose=function(){this.selection&&this.selection.signals.stringChanged.remove(this.refresh,this),this.structure.signals.refreshed.remove(this.refresh,this),delete this.structure,delete this.atomSet,delete this.bondSet,delete this.atomCount,delete this.bondCount},Object.defineProperties(t.prototype,e),t}(qb),Qx=[[4,0,-2,-1,-2,0,-2,-1,-1,-1,-1,-2,-1,-1,-1,1,0,0,-3,-2],[0,9,-3,-4,-2,-3,-3,-1,-3,-1,-1,-3,-3,-3,-3,-1,-1,-1,-2,-2],[-2,-3,6,2,-3,-1,-1,-3,-1,-4,-3,1,-1,0,-2,0,-1,-3,-4,-3],[-1,-4,2,5,-3,-2,0,-3,1,-3,-2,0,-1,2,0,0,-1,-2,-3,-2],[-2,-2,-3,-3,6,-3,-1,0,-3,0,0,-3,-4,-3,-3,-2,-2,-1,1,3],[0,-3,-1,-2,-3,6,-2,-4,-2,-4,-3,0,-2,-2,-2,0,-2,-3,-2,-3],[-2,-3,-1,0,-1,-2,8,-3,-1,-3,-2,1,-2,0,0,-1,-2,-3,-2,2],[-1,-1,-3,-3,0,-4,-3,4,-3,2,1,-3,-3,-3,-3,-2,-1,3,-3,-1],[-1,-3,-1,1,-3,-2,-1,-3,5,-2,-1,0,-1,1,2,0,-1,-2,-3,-2],[-1,-1,-4,-3,0,-4,-3,2,-2,4,2,-3,-3,-2,-2,-2,-1,1,-2,-1],[-1,-1,-3,-2,0,-3,-2,1,-1,2,5,-2,-2,0,-1,-1,-1,1,-1,-1],[-2,-3,1,0,-3,0,1,-3,0,-3,-2,6,-2,0,0,1,0,-3,-4,-2],[-1,-3,-1,-1,-4,-2,-2,-3,-1,-3,-2,-2,7,-1,-2,-1,-1,-2,-4,-3],[-1,-3,0,2,-3,-2,0,-3,1,-2,0,0,-1,5,1,0,-1,-2,-2,-1],[-1,-3,-2,0,-3,-2,0,-3,2,-2,-1,0,-2,1,5,-1,-1,-3,-3,-2],[1,-1,0,0,-2,0,-1,-2,0,-2,-1,1,-1,0,-1,4,1,-2,-3,-2],[0,-1,-1,-1,-2,-2,-2,-1,-1,-1,-1,0,-1,-1,-1,1,5,0,-2,-2],[0,-1,-3,-2,-1,-3,-3,3,-2,1,1,-3,-2,-2,-3,-2,0,4,-3,-1],[-3,-2,-4,-3,1,-2,-2,-3,-3,-2,-1,-4,-4,-2,-3,-3,-2,-3,11,2],[-2,-2,-3,-2,3,-3,2,-1,-2,-1,-1,-2,-3,-1,-2,-2,-2,-1,2,7]];function t_(i,t){var r,n=0,o={};return t.forEach(function(t){r=0;var e={};t.forEach(function(t){e[i[r++]]=t}),o[i[n++]]=e}),o}var e_={blosum62:t_("ARNDCQEGHILKMFPSTWYVBZ?",[[4,-1,-2,-2,0,-1,-1,0,-2,-1,-1,-1,-1,-2,-1,1,0,-3,-2,0,-2,-1,0],[-1,5,0,-2,-3,1,0,-2,0,-3,-2,2,-1,-3,-2,-1,-1,-3,-2,-3,-1,0,-1],[-2,0,6,1,-3,0,0,0,1,-3,-3,0,-2,-3,-2,1,0,-4,-2,-3,3,0,-1],[-2,-2,1,6,-3,0,2,-1,-1,-3,-4,-1,-3,-3,-1,0,-1,-4,-3,-3,4,1,-1],[0,-3,-3,-3,9,-3,-4,-3,-3,-1,-1,-3,-1,-2,-3,-1,-1,-2,-2,-1,-3,-3,-2],[-1,1,0,0,-3,5,2,-2,0,-3,-2,1,0,-3,-1,0,-1,-2,-1,-2,0,3,-1],[-1,0,0,2,-4,2,5,-2,0,-3,-3,1,-2,-3,-1,0,-1,-3,-2,-2,1,4,-1],[0,-2,0,-1,-3,-2,-2,6,-2,-4,-4,-2,-3,-3,-2,0,-2,-2,-3,-3,-1,-2,-1],[-2,0,1,-1,-3,0,0,-2,8,-3,-3,-1,-2,-1,-2,-1,-2,-2,2,-3,0,0,-1],[-1,-3,-3,-3,-1,-3,-3,-4,-3,4,2,-3,1,0,-3,-2,-1,-3,-1,3,-3,-3,-1],[-1,-2,-3,-4,-1,-2,-3,-4,-3,2,4,-2,2,0,-3,-2,-1,-2,-1,1,-4,-3,-1],[-1,2,0,-1,-3,1,1,-2,-1,-3,-2,5,-1,-3,-1,0,-1,-3,-2,-2,0,1,-1],[-1,-1,-2,-3,-1,0,-2,-3,-2,1,2,-1,5,0,-2,-1,-1,-1,-1,1,-3,-1,-1],[-2,-3,-3,-3,-2,-3,-3,-3,-1,0,0,-3,0,6,-4,-2,-2,1,3,-1,-3,-3,-1],[-1,-2,-2,-1,-3,-1,-1,-2,-2,-3,-3,-1,-2,-4,7,-1,-1,-4,-3,-2,-2,-1,-2],[1,-1,1,0,-1,0,0,0,-1,-2,-2,0,-1,-2,-1,4,1,-3,-2,-2,0,0,0],[0,-1,0,-1,-1,-1,-1,-2,-2,-1,-1,-1,-1,-2,-1,1,5,-2,-2,0,-1,-1,0],[-3,-3,-4,-4,-2,-2,-3,-2,-2,-3,-2,-3,-1,1,-4,-3,-2,11,2,-3,-4,-3,-2],[-2,-2,-2,-3,-2,-1,-2,-3,2,-1,-1,-2,-1,3,-3,-2,-2,2,7,-1,-3,-2,-1],[0,-3,-3,-3,-1,-2,-2,-3,-3,3,1,-2,1,-1,-2,-2,0,-3,-1,4,-3,-2,-1],[-2,-1,3,4,-3,0,1,-1,0,-3,-4,0,-3,-3,-2,0,-1,-4,-3,-3,4,1,-1],[-1,0,0,1,-3,3,4,-2,0,-3,-3,1,-1,-3,-1,0,-1,-3,-2,-2,1,4,-1],[0,-1,-1,-1,-2,-1,-1,-1,-1,-1,-1,-1,-1,-1,-2,0,0,-2,-1,-1,-1,-1,-1]]),blosum62x:t_("ACDEFGHIKLMNPQRSTVWY",Qx)},i_=function(t,e,i,r,n){void 0===i&&(i=-10),void 0===r&&(r=-1),void 0===n&&(n="blosum62"),this.seq1=t,this.seq2=e,this.gapPenalty=i,this.gapExtensionPenalty=r,n&&(this.substMatrix=e_[n])};function r_(t,e,i,r,n){var o,a,s,c,u;if(void 0===i&&(i=!1),void 0===r&&(r=""),void 0===n&&(n=""),i){var h=t,l=e;r&&n&&(h=t.getView(new bp(r)),l=e.getView(new bp(n)));var p,d,f=h.getSequence(),m=l.getSequence(),g=new i_(f.join(""),m.join(""));g.calc(),g.trace(),a=o=0,s=g.ali1.length;for(var v=[],y=[],b=0;b<s;++b){var x=g.ali1[b],_=g.ali2[b];d=p=0,"-"===x?y[a]=!1:(y[a]=!0,p=1),"-"===_?v[o]=!1:(v[o]=!0,d=1),o+=p,a+=d}var w=[],S=[],A=h.getAtomProxy(),M=l.getAtomProxy();o=0,h.eachResidue(function(t){void 0!==t.traceAtomIndex&&t.traceAtomIndex===t.getAtomIndexByName("CA")&&(v[o]&&(A.index=t.getAtomIndexByName("CA"),w.push(A.x,A.y,A.z)),o+=1)}),o=0,l.eachResidue(function(t){void 0!==t.traceAtomIndex&&t.traceAtomIndex===t.getAtomIndexByName("CA")&&(y[o]&&(M.index=t.getAtomIndexByName("CA"),S.push(M.x,M.y,M.z)),o+=1)}),c=new Float32Array(w),u=new Float32Array(S)}else{c=t.getView(new bp(r+" and .CA")),u=e.getView(new bp(n+" and .CA"))}new Vx(c,u).transform(t),t.refreshPosition()}i_.prototype.initMatrices=function(){var t=this;this.n=this.seq1.length,this.m=this.seq2.length,this.score=void 0,this.ali="",this.S=[],this.V=[],this.H=[];for(var e=0;e<=this.n;++e){t.S[e]=[],t.V[e]=[],t.H[e]=[];for(var i=0;i<=this.m;++i)t.S[e][i]=0,t.V[e][i]=0,t.H[e][i]=0}for(var r=0;r<=this.n;++r)t.S[r][0]=t.gap(0),t.H[r][0]=-1/0;for(var n=0;n<=this.m;++n)t.S[0][n]=t.gap(0),t.V[0][n]=-1/0;this.S[0][0]=0},i_.prototype.gap=function(t){return this.gapPenalty+t*this.gapExtensionPenalty},i_.prototype.makeScoreFn=function(){var n=this.seq1,o=this.seq2,a=this.substMatrix;return a?function(t,e){var i=n[t],r=o[e];try{return a[i][r]}catch(t){return-4}}:(Bp.warn("Alignment: no subst matrix"),function(t,e){return n[t]===o[e]?5:-3})},i_.prototype.calc=function(){de.Debug&&Bp.time("Alignment.calc"),this.initMatrices();for(var t,e,i,r,n,o=this.gap(0),a=this.makeScoreFn(),s=this.gapExtensionPenalty,c=this.V,u=this.H,h=this.S,l=this.n,p=this.m,d=1;d<=l;++d){e=h[d-1],t=c[d-1],i=c[d],r=u[d],n=h[d];for(var f=1;f<=p;++f)i[f]=Math.max(e[f]+o,t[f]+s),r[f]=Math.max(n[f-1]+o,r[f-1]+s),n[f]=Math.max(e[f-1]+a(d-1,f-1),i[f],r[f])}de.Debug&&Bp.timeEnd("Alignment.calc"),de.Debug&&Bp.log(this.S,this.V,this.H)},i_.prototype.trace=function(){var t=this;de.Debug&&Bp.time("Alignment.trace"),this.ali1="",this.ali2="";var e,i=this.makeScoreFn(),r=this.n,n=this.m;for(this.S[r][n]>=this.V[r][n]?(e="S",this.score=this.S[r][n]):this.V[r][n]>=this.H[r][n]?(e="V",this.score=this.V[r][n]):(e="H",this.score=this.H[r][n]),de.Debug&&Bp.log("Alignment: SCORE",this.score),de.Debug&&Bp.log("Alignment: S, V, H",this.S[r][n],this.V[r][n],this.H[r][n]);0<r&&0<n;)"S"===e?t.S[r][n]===t.S[r-1][n-1]+i(r-1,n-1)?(t.ali1=t.seq1[r-1]+t.ali1,t.ali2=t.seq2[n-1]+t.ali2,--r,--n,e="S"):t.S[r][n]===t.V[r][n]?e="V":t.S[r][n]===t.H[r][n]?e="H":(--r,--n):"V"===e?t.V[r][n]===t.V[r-1][n]+t.gapExtensionPenalty?(t.ali1=t.seq1[r-1]+t.ali1,t.ali2="-"+t.ali2,--r,e="V"):t.V[r][n]===t.S[r-1][n]+t.gap(0)?(t.ali1=t.seq1[r-1]+t.ali1,t.ali2="-"+t.ali2,--r,e="S"):--r:"H"===e?t.H[r][n]===t.H[r][n-1]+t.gapExtensionPenalty?(t.ali1="-"+t.ali1,t.ali2=t.seq2[n-1]+t.ali2,--n,e="H"):t.H[r][n]===t.S[r][n-1]+t.gap(0)?(t.ali1="-"+t.ali1,t.ali2=t.seq2[n-1]+t.ali2,--n,e="S"):--n:Bp.error("Alignment: no matrix");for(;0<r;)t.ali1=t.seq1[r-1]+t.ali1,t.ali2="-"+t.ali2,--r;for(;0<n;)t.ali1="-"+t.ali1,t.ali2=t.seq2[n-1]+t.ali2,--n;de.Debug&&Bp.timeEnd("Alignment.trace"),de.Debug&&Bp.log([this.ali1,this.ali2])};var n_=Object.assign({sele:"",defaultAssembly:""},Ox),o_=function(c){function t(t,e,i){var r,n,o,a,s;void 0===i&&(i={}),c.call(this,t,e,Object.assign({name:e.name},i)),this.structure=e,this.trajList=[],this.signals=Object.assign(this.signals,{trajectoryAdded:new Wl,trajectoryRemoved:new Wl,defaultAssemblyChanged:new Wl}),this.initSelection(this.parameters.sele),this.pickBuffer=(r=4,o=n=0,a=[],{has:function(t){return-1!==a.indexOf(t)},get:function(t){return a[t]},push:function(t){a[n]=t,n=(r+n+1)%r,++o},get count(){return o},get data(){return a.slice(0,Math.min(o,r))},clear:function(){n=o=0,a.length=0}}),this.pickDict=(s={},{has:function(t){return void 0!==s[JSON.stringify(t)]},add:function(t,e){s[JSON.stringify(t)]=e},del:function(t){delete s[JSON.stringify(t)]},get values(){return Object.keys(s).map(function(t){return s[t]})}}),this.spacefillRepresentation=this.addRepresentation("spacefill",{sele:"none",opacity:Np.opacity,color:Np.color,disablePicking:!0,radiusType:"data"},!0),this.distanceRepresentation=this.addRepresentation("distance",Np,!0),this.angleRepresentation=this.addRepresentation("angle",Np,!0),this.dihedralRepresentation=this.addRepresentation("dihedral",Np,!0),this.measureRepresentations=new Fx([this.spacefillRepresentation,this.distanceRepresentation,this.angleRepresentation,this.dihedralRepresentation]),this.setDefaultAssembly(this.parameters.defaultAssembly)}c&&(t.__proto__=c),(t.prototype=Object.create(c&&c.prototype)).constructor=t;var e={defaultParameters:{configurable:!0},type:{configurable:!0}};return e.defaultParameters.get=function(){return n_},e.type.get=function(){return"structure"},t.prototype.initSelection=function(t){var e=this;this.selection=new bp(t),this.structureView=new Jx(this.structure,this.selection),this.selection.signals.stringChanged.add(function(){e.structureView.setSelection(e.selection),e.rebuildRepresentations(),e.rebuildTrajectories()})},t.prototype.setSelection=function(t){return this.parameters.sele=t,this.selection.setString(t),this},t.prototype.setDefaultAssembly=function(t){if(void 0===this.structure.biomolDict[t]&&(t=""),this.parameters.defaultAssembly!==t){var e={defaultAssembly:t};this.reprList.forEach(function(t){return t.setParameters(e)}),this.measureRepresentations.setParameters(e),this.parameters.defaultAssembly=t,this.signals.defaultAssemblyChanged.dispatch(t)}return this},t.prototype.rebuildRepresentations=function(){this.reprList.forEach(function(t){t.build()}),this.measureRepresentations.build()},t.prototype.rebuildTrajectories=function(){var e=this;this.trajList.forEach(function(t){t.trajectory.setStructure(e.structureView)})},t.prototype.updateRepresentations=function(t){c.prototype.updateRepresentations.call(this,t),this.measureRepresentations.update(t)},t.prototype.addRepresentation=function(t,e,i){var r=this;void 0===e&&(e={}),void 0===i&&(i=!1),e.defaultAssembly=this.parameters.defaultAssembly;var n=this._addRepresentation(t,this.structureView,e,i);return i||n.signals.parametersChanged.add(function(){return r.measureUpdate()}),n},t.prototype.addTrajectory=function(t,e){var i=this;void 0===t&&(t=""),void 0===e&&(e={});var r,n,o,a=(r=t,n=this.structureView,o=e,r&&r instanceof jx?new Yx(r,n,o):!r&&n.frames?new Zx(r,n,o):new Kx(r,n,o));a.signals.frameChanged.add(function(){i.updateRepresentations({position:!0})});var s=new Ux(this.stage,a,e);return this.trajList.push(s),this.signals.trajectoryAdded.dispatch(s),s},t.prototype.removeTrajectory=function(t){var e=this.trajList.indexOf(t);-1!==e&&this.trajList.splice(e,1),t.dispose(),this.signals.trajectoryRemoved.dispatch(t)},t.prototype.dispose=function(){this.trajList.slice().forEach(function(t){return t.dispose()}),this.trajList.length=0,this.structure.dispose(),this.measureRepresentations.dispose(),c.prototype.dispose.call(this)},t.prototype.autoView=function(t,e){"number"==typeof t&&(e=t,t=""),this.stage.animationControls.zoomMove(this.getCenter(t),this.getZoom(t),al(e,0))},t.prototype.getBoxUntransformed=function(t){return t?this.structureView.getBoundingBox(new bp(t)):this.structureView.boundingBox},t.prototype.getCenterUntransformed=function(t){return t&&"string"==typeof t?this.structure.atomCenter(new bp(t)):this.structure.center},t.prototype.superpose=function(t,e,i,r){return r_(this.structureView,t.structureView,e,i,r),this.updateRepresentations({position:!0}),this},t.prototype.getMaxRepresentationRadius=function(t){var i=0,r=this.structure.getAtomProxy(t);return this.eachRepresentation(function(t){if(t.getVisibility()){var e=t.repr;i=Math.max(e.getAtomRadius(r),i)}}),i},t.prototype.measurePick=function(t){var e=this.pickBuffer.count;if(this.lastPick===t.index&&1<=e){if(1<e){var i=this.pickBuffer.data,r=this.pickBuffer.data.sort();this.pickDict.has(r)?this.pickDict.del(r):this.pickDict.add(r,i),2===e?this.distanceRepresentation.setParameters({atomPair:this.pickDict.values.filter(function(t){return 2===t.length})}):3===e?this.angleRepresentation.setParameters({atomTriple:this.pickDict.values.filter(function(t){return 3===t.length})}):4===e&&this.dihedralRepresentation.setParameters({atomQuad:this.pickDict.values.filter(function(t){return 4===t.length})})}this.pickBuffer.clear(),this.lastPick=void 0}else this.pickBuffer.has(t.index)||this.pickBuffer.push(t.index),this.lastPick=t.index;this.measureUpdate()},t.prototype.measureClear=function(){this.pickBuffer.clear(),this.lastPick=void 0,this.spacefillRepresentation.setSelection("none")},t.prototype.measureBuild=function(){var t=this.measureData();this.distanceRepresentation.setParameters({atomPair:t.distance}),this.angleRepresentation.setParameters({atomTriple:t.angle}),this.dihedralRepresentation.setParameters({atomQuad:t.dihedral})},t.prototype.measureUpdate=function(){var i=this,t=this.pickBuffer.data,r={};t.forEach(function(t){var e=Math.max(.1,i.getMaxRepresentationRadius(t));r[t]=e*(2.3-Nl(.1,2,e))}),this.spacefillRepresentation.setSelection(t.length?"@"+t.join(","):"none"),this.spacefillRepresentation.setParameters({radiusData:r})},t.prototype.measureData=function(){var t=this.pickDict.values;return{distance:t.filter(function(t){return 2===t.length}),angle:t.filter(function(t){return 3===t.length}),dihedral:t.filter(function(t){return 4===t.length})}},t.prototype.removeAllMeasurements=function(t){var i=this.pickDict,r=i.values,e=function(e){r.filter(function(t){return t.length===e}).forEach(function(t){return i.del(t.slice().sort())})};(!t||1&t)&&e(2),(!t||2&t)&&e(3),(!t||4&t)&&e(4),this.measureBuild()},t.prototype.removeMeasurement=function(t){this.pickDict.del(t.slice().sort()),this.measureBuild()},t.prototype.addMeasurement=function(t){if(!(t.length<2||4<t.length)){var e=t.slice().sort();this.pickDict.has(e)||this.pickDict.add(e,t),this.measureBuild()}},Object.defineProperties(t.prototype,e),t}(Dx);Wp.add("structure",o_),Wp.add("structureview",o_);var a_=function(r){function t(t,e,i){void 0===i&&(i={}),r.call(this,t,e,Object.assign({name:e.name},i)),this.surface=e}r&&(t.__proto__=r),(t.prototype=Object.create(r&&r.prototype)).constructor=t;var e={type:{configurable:!0}};return e.type.get=function(){return"surface"},t.prototype.addRepresentation=function(t,e){return void 0===e&&(e={}),this._addRepresentation(t,this.surface,e)},t.prototype.getBoxUntransformed=function(){return this.surface.boundingBox},t.prototype.getCenterUntransformed=function(){return this.surface.center},t.prototype.dispose=function(){this.surface.dispose(),r.prototype.dispose.call(this)},Object.defineProperties(t.prototype,e),t}(Dx);Wp.add("surface",a_);var s_=function(r){function t(t,e,i){void 0===i&&(i={}),r.call(this,t,e,Object.assign({name:e.name},i)),this.volume=e}r&&(t.__proto__=r),(t.prototype=Object.create(r&&r.prototype)).constructor=t;var e={type:{configurable:!0}};return e.type.get=function(){return"volume"},t.prototype.addRepresentation=function(t,e){return void 0===e&&(e={}),this._addRepresentation(t,this.volume,e)},t.prototype.getBoxUntransformed=function(){return this.volume.boundingBox},t.prototype.getCenterUntransformed=function(){return this.volume.center},t.prototype.dispose=function(){this.volume.dispose(),r.prototype.dispose.call(this)},Object.defineProperties(t.prototype,e),t}(Dx);Wp.add("volume",s_);var c_=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),((e.prototype=Object.create(t&&t.prototype)).constructor=e).prototype.addRepresentation=function(e,i){return this.forEach(function(t){return t.addRepresentation(e,i)})},e.prototype.autoView=function(e){return this.forEach(function(t){return t.autoView(e)})},e}(Bx);function u_(t,e){return t instanceof RegExp?null!==e.name.match(t):e.name===t}var h_=new Qe,l_={impostor:!0,quality:"medium",workerDefault:!0,sampleLevel:0,backgroundColor:"black",rotateSpeed:2,zoomSpeed:1.2,panSpeed:1,clipNear:0,clipFar:100,clipDist:10,fogNear:50,fogFar:100,cameraFov:40,cameraEyeSep:.3,cameraType:"perspective",lightColor:14540253,lightIntensity:1,ambientColor:14540253,ambientIntensity:.2,hoverTimeout:0,tooltip:!0,mousePreset:"default"},p_=function(t,e){void 0===e&&(e={}),this.signals={parametersChanged:new Wl,fullscreenChanged:new Wl,componentAdded:new Wl,componentRemoved:new Wl,clicked:new Wl,hovered:new Wl},this.tasks=new pd,this.compList=[],this.defaultFileParams={},this.logList=[],this.viewer=new nf(t),this.viewer.renderer&&(this.tooltip=document.createElement("div"),Object.assign(this.tooltip.style,{display:"none",position:"fixed",zIndex:"1000000",pointerEvents:"none",backgroundColor:"rgba( 0, 0, 0, 0.6 )",color:"lightgrey",padding:"8px",fontFamily:"sans-serif"}),this.viewer.container.appendChild(this.tooltip),this.mouseObserver=new af(this.viewer.renderer.domElement),this.viewerControls=new Rf(this),this.trackballControls=new vf(this),this.pickingControls=new wf(this),this.animationControls=new Hf(this),this.mouseControls=new py(this),this.keyControls=new my(this),this.pickingBehavior=new gy(this),this.mouseBehavior=new vy(this),this.animationBehavior=new yy(this),this.keyBehavior=new xy(this),this.spinAnimation=this.animationControls.spin([0,1,0],.005),this.spinAnimation.pause(!0),this.rockAnimation=this.animationControls.rock([0,1,0],.005),this.rockAnimation.pause(!0),this.parameters=sl(e,l_),this.setParameters(this.parameters),this.viewer.animate())};p_.prototype.setParameters=function(t){void 0===t&&(t={}),cl(this.parameters,t);var e=t,i=this.parameters,r=this.viewer,n=this.trackballControls;return void 0!==e.quality&&this.setQuality(i.quality),void 0!==e.impostor&&this.setImpostor(i.impostor),void 0!==e.rotateSpeed&&(n.rotateSpeed=i.rotateSpeed),void 0!==e.zoomSpeed&&(n.zoomSpeed=i.zoomSpeed),void 0!==e.panSpeed&&(n.panSpeed=i.panSpeed),void 0!==e.mousePreset&&this.mouseControls.preset(i.mousePreset),this.mouseObserver.setParameters({hoverTimeout:i.hoverTimeout}),r.setClip(i.clipNear,i.clipFar,i.clipDist),r.setFog(void 0,i.fogNear,i.fogFar),r.setCamera(i.cameraType,i.cameraFov,i.cameraEyeSep),r.setSampling(i.sampleLevel),r.setBackground(i.backgroundColor),r.setLight(i.lightColor,i.lightIntensity,i.ambientColor,i.ambientIntensity),this.signals.parametersChanged.dispatch(this.getParameters()),this},p_.prototype.log=function(t){console.log("STAGE LOG",t),this.logList.push(t)},p_.prototype.getParameters=function(){return Object.assign({},this.parameters)},p_.prototype.defaultFileRepresentation=function(t){if(t instanceof o_){var e,i,r;t.setSelection("/0");var n=t.structure;if(n.biomolDict.BU1){var o=n.biomolDict.BU1;e=o.getAtomCount(n),i=o.getResidueCount(n),r=o.getInstanceCount(),t.setDefaultAssembly("BU1")}else e=n.getModelProxy(0).atomCount,i=n.getModelProxy(0).residueCount,r=1;var a=e;Lp&&(a*=4);var s=n.atomStore.count/n.residueStore.count<2;s&&(a*=10);var c="chainname",u="RdYlBu",h=!1;if(1===n.getChainnameCount(new bp("polymer and /0"))&&(c="residueindex",u="spectral",h=!0),de.Debug&&console.log(a,e,r,s),i/r<4)t.addRepresentation("ball+stick",{colorScheme:"element",radiusScale:2,aspectRatio:1.5,bondScale:.3,bondSpacing:.75,quality:"auto"});else if(5<r&&15e3<a||7e5<a){var l=Math.min(1.5,Math.max(.1,2e3/(a/r)));s&&(l=Math.min(l,.15)),t.addRepresentation("surface",{colorScheme:c,colorScale:u,colorReverse:h,sele:"polymer",surfaceType:"sas",probeRadius:1.4,scaleFactor:l,useWorker:!1})}else 25e4<a?t.addRepresentation("backbone",{colorScheme:c,colorScale:u,colorReverse:h,lineOnly:!0}):1e5<a?t.addRepresentation("backbone",{colorScheme:c,colorScale:u,colorReverse:h,quality:"low",disableImpostor:!0,radiusScale:2}):8e4<a?t.addRepresentation("backbone",{colorScheme:c,colorScale:u,colorReverse:h,radiusScale:2}):(t.addRepresentation("cartoon",{colorScheme:c,colorScale:u,colorReverse:h,radiusScale:.7,aspectRatio:5,quality:"auto"}),a<5e4&&t.addRepresentation("base",{colorScheme:c,colorScale:u,colorReverse:h,quality:"auto"}),t.addRepresentation("ball+stick",{sele:"ligand",colorScheme:"element",radiusScale:2,aspectRatio:1.5,bondScale:.3,bondSpacing:.75,quality:"auto"}));t.structure.frames.length&&t.addTrajectory()}else t instanceof a_?t.addRepresentation("surface"):t instanceof s_&&t.addRepresentation("surface");this.tasks.onZeroOnce(this.autoView,this)},p_.prototype.loadFile=function(t,e){var i=this;void 0===e&&(e={});var r=Object.assign({},this.defaultFileParams,e),n=id(t).name;this.tasks.increment(),this.log("loading file '"+n+"'");var o=al(r.ext,id(t).ext);return(Vp.isTrajectory(o)?Promise.reject(new Error("loadFile: ext '"+o+"' is a trajectory and must be loaded into a structure component")):nd(t,r)).then(function(t){i.log("loaded '"+n+"'");var e=i.addComponentFromObject(t,r);return r.defaultRepresentation&&i.defaultFileRepresentation(e),i.tasks.decrement(),e},function(t){i.tasks.decrement();var e="error loading file: '"+t+"'";throw i.log(e),e})},p_.prototype.loadScript=function(t){var i=this,r=id(t).name;return this.log("loading script '"+r+"'"),nd(t).then(function(t){i.tasks.increment(),i.log("running script '"+r+"'"),t.run(i).then(function(){i.tasks.decrement(),i.log("finished script '"+r+"'")}),i.log("called script '"+r+"'")},function(t){i.tasks.decrement();var e="errored script '"+r+"' \""+t+'"';throw i.log(e),e})},p_.prototype.addComponent=function(t){t?(this.compList.push(t),this.signals.componentAdded.dispatch(t)):Bp.warn("Stage.addComponent: no component given")},p_.prototype.addComponentFromObject=function(t,e){void 0===e&&(e={});var i=Wp.get(t.type);if(i){var r=new i(this,t,e);return this.addComponent(r),r}Bp.warn("no component for object type",t.type)},p_.prototype.removeComponent=function(t){var e=this.compList.indexOf(t);-1!==e&&(this.compList.splice(e,1),t.dispose(),this.signals.componentRemoved.dispatch(t))},p_.prototype.removeAllComponents=function(){var e=this;this.compList.slice().forEach(function(t){return e.removeComponent(t)})},p_.prototype.handleResize=function(){this.viewer.handleResize()},p_.prototype.setSize=function(t,e){var i=this.viewer.container;i!==document.body&&(void 0!==t&&(i.style.width=t),void 0!==e&&(i.style.height=e),this.handleResize())},p_.prototype.toggleFullscreen=function(t){if(document.fullscreenEnabled||document.mozFullScreenEnabled||document.webkitFullscreenEnabled||document.msFullscreenEnabled){var e=this;t=t||this.viewer.container,this.lastFullscreenElement=t,i()?document.exitFullscreen?document.exitFullscreen():document.msExitFullscreen?document.msExitFullscreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.webkitExitFullscreen&&document.webkitExitFullscreen():(t.dataset.normalWidth=t.style.width||"",t.dataset.normalHeight=t.style.height||"",t.style.width=window.screen.width+"px",t.style.height=window.screen.height+"px",t.requestFullscreen?t.requestFullscreen():t.msRequestFullscreen?t.msRequestFullscreen():t.mozRequestFullScreen?t.mozRequestFullScreen():t.webkitRequestFullscreen&&t.webkitRequestFullscreen(),document.addEventListener("fullscreenchange",r),document.addEventListener("mozfullscreenchange",r),document.addEventListener("webkitfullscreenchange",r),document.addEventListener("MSFullscreenChange",r),this.handleResize(),this.signals.fullscreenChanged.dispatch(!0),setTimeout(function(){e.handleResize()},100))}else Bp.log("fullscreen mode (currently) not possible");function i(){return document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement}function r(){if(!i()&&e.lastFullscreenElement){var t=e.lastFullscreenElement;t.style.width=t.dataset.normalWidth||"",t.style.height=t.dataset.normalHeight||"",document.removeEventListener("fullscreenchange",r),document.removeEventListener("mozfullscreenchange",r),document.removeEventListener("webkitfullscreenchange",r),document.removeEventListener("MSFullscreenChange",r),e.handleResize(),e.signals.fullscreenChanged.dispatch(!1)}}},p_.prototype.setSpin=function(t){t?(this.spinAnimation.resume(!0),this.rockAnimation.pause(!0)):this.spinAnimation.pause(!0)},p_.prototype.setRock=function(t){t?(this.rockAnimation.resume(!0),this.spinAnimation.pause(!0)):this.rockAnimation.pause(!0)},p_.prototype.toggleSpin=function(){this.setSpin(this.spinAnimation.paused)},p_.prototype.toggleRock=function(){this.setRock(this.rockAnimation.paused)},p_.prototype.setFocus=function(t){var e=Ol(t/2,0,49.9),i=100-e,r=(i-e)/2;this.setParameters({clipNear:e,clipFar:i,fogNear:Dl(i-r),fogFar:Dl(i+r)})},p_.prototype.getZoomForBox=function(t){var e=t.getSize(h_),i=Math.max(e.x,e.y,e.z),r=Math.min(e.x,e.y,e.z),n=i+Math.sqrt(r),o=Tl(this.viewer.perspectiveCamera.fov),a=this.viewer.width,s=this.viewer.height,c=s<a?1:a/s;return n=Math.abs(.5*n/c/Math.sin(o/2)),-(n+=this.parameters.clipDist)},p_.prototype.getBox=function(){return this.viewer.boundingBox},p_.prototype.getZoom=function(){return this.getZoomForBox(this.getBox())},p_.prototype.getCenter=function(t){return this.getBox().getCenter(t||new Qe)},p_.prototype.autoView=function(t){this.animationControls.zoomMove(this.getCenter(),this.getZoom(),al(t,0))},p_.prototype.makeImage=function(t){var r=this;return void 0===t&&(t={}),new Promise(function(e,i){r.tasks.onZeroOnce(function(){r.tasks.increment(),r.viewer.makeImage(t).then(function(t){r.tasks.decrement(),e(t)}).catch(function(t){r.tasks.decrement(),i(t)})})})},p_.prototype.setImpostor=function(i){this.parameters.impostor=i;var r=["spacefill","ball+stick","licorice","hyperball","backbone","rocket","helixorient","contact","distance","dot"];this.eachRepresentation(function(t){if(r.includes(t.getType())){var e=t.getParameters();e.disableImpostor=!i,t.build(e)}})},p_.prototype.setQuality=function(i){this.parameters.quality=i;var r=["tube","cartoon","ribbon","trace","rope"],n=["spacefill","ball+stick","licorice","hyperball","backbone","rocket","helixorient","contact","distance","dot"];this.eachRepresentation(function(t){var e=t.getParameters();if(!r.includes(t.getType())){if(!n.includes(t.getType()))return;if(!e.disableImpostor)return void(t.repr.quality=i)}e.quality=i,t.build(e)})},p_.prototype.eachComponent=function(e,i){this.compList.slice().forEach(function(t){void 0!==i&&i!==t.type||e(t)})},p_.prototype.eachRepresentation=function(i,r){this.eachComponent(function(e){e.reprList.slice().forEach(function(t){void 0!==r&&r!==t.getType()||i(t,e)})})},p_.prototype.getComponentsByName=function(e){var i=[];return this.eachComponent(function(t){(void 0===e||u_(e,t))&&i.push(t)}),new c_(i)},p_.prototype.getComponentsByObject=function(e){var i=[];return this.eachComponent(function(t){t.object===e&&i.push(t)}),new c_(i)},p_.prototype.getRepresentationsByName=function(i){var r=[];return this.eachRepresentation(function(t,e){(void 0===i||u_(i,t))&&r.push(t)}),new Fx(r)},p_.prototype.measureClear=function(){this.eachComponent(function(t){return t.measureClear()},"structure")},p_.prototype.measureUpdate=function(){this.eachComponent(function(t){return t.measureUpdate()},"structure")},p_.prototype.dispose=function(){this.tasks.dispose(),this.viewer.dispose()};var d_=function(i){function t(t){var e=this;i.call(this,t),t.scale||(this.parameters.scale="rainbow",this.parameters.reverse=al(t.reverse,!0)),this.scalePerModel={},t.structure.eachModel(function(t){e.parameters.domain=[t.atomOffset,t.atomEnd],e.scalePerModel[t.index]=e.getScale()})}return i&&(t.__proto__=i),((t.prototype=Object.create(i&&i.prototype)).constructor=t).prototype.atomColor=function(t){return this.scalePerModel[t.modelIndex](t.index)},t}(Vl);Up.add("atomindex",d_);var f_=function(n){function t(t){if(n.call(this,t),t.scale||(this.parameters.scale="OrRd"),!t.domain){var e,i=1/0,r=-1/0;t.sele&&(e=new bp(t.sele)),t.structure.eachAtom(function(t){var e=t.bfactor;i=Math.min(i,e),r=Math.max(r,e)},e),this.parameters.domain=[i,r]}this.bfactorScale=this.getScale()}return n&&(t.__proto__=n),((t.prototype=Object.create(n&&n.prototype)).constructor=t).prototype.atomColor=function(t){return this.bfactorScale(t.bfactor)},t}(Vl);Up.add("bfactor",f_);var m_=function(e){function t(t){var r=this;e.call(this,t),this.chainidDictPerModel={},this.scalePerModel={},t.scale||(this.parameters.scale="Spectral"),t.structure.eachModel(function(t){var e=0,i={};t.eachChain(function(t){void 0===i[t.chainid]&&(i[t.chainid]=e,e+=1)}),r.parameters.domain=[0,e-1],r.chainidDictPerModel[t.index]=i,r.scalePerModel[t.index]=r.getScale()})}return e&&(t.__proto__=e),((t.prototype=Object.create(e&&e.prototype)).constructor=t).prototype.atomColor=function(t){var e=this.chainidDictPerModel[t.modelIndex];return this.scalePerModel[t.modelIndex](e[t.chainid])},t}(Vl);Up.add("chainid",m_);var g_=function(i){function t(t){var e=this;i.call(this,t),this.scalePerModel={},t.scale||(this.parameters.scale="Spectral"),t.structure.eachModel(function(t){e.parameters.domain=[t.chainOffset,t.chainEnd],e.scalePerModel[t.index]=e.getScale()})}return i&&(t.__proto__=i),((t.prototype=Object.create(i&&i.prototype)).constructor=t).prototype.atomColor=function(t){return this.scalePerModel[t.modelIndex](t.chainIndex)},t}(Vl);Up.add("chainindex",g_);var v_=function(e){function t(t){var r=this;e.call(this,t),this.chainnameDictPerModel={},this.scalePerModel={},t.scale||(this.parameters.scale="Spectral"),t.structure.eachModel(function(t){var e=0,i={};t.eachChain(function(t){void 0===i[t.chainname]&&(i[t.chainname]=e,e+=1)}),r.parameters.domain=[0,e-1],r.chainnameDictPerModel[t.index]=i,r.scalePerModel[t.index]=r.getScale()})}return e&&(t.__proto__=e),((t.prototype=Object.create(e&&e.prototype)).constructor=t).prototype.atomColor=function(t){var e=this.chainnameDictPerModel[t.modelIndex];return this.scalePerModel[t.modelIndex](e[t.chainname])},t}(Vl);Up.add("chainname",v_);var y_=function(i){function t(t){i.call(this,t),this.rsrzDict={},this.rsccDict={},t.scale||(this.parameters.scale="RdYlBu"),this.rsrzScale=this.getScale({domain:[2,0]}),this.rsccScale=this.getScale({domain:[.678,1]});var e=t.structure.validation;e&&(this.rsrzDict=e.rsrzDict,this.rsccDict=e.rsccDict)}return i&&(t.__proto__=i),((t.prototype=Object.create(i&&i.prototype)).constructor=t).prototype.atomColor=function(t){var e=t.resno+"";t.inscode&&(e+="^"+t.inscode),t.chainname&&(e+=":"+t.chainname),e+="/"+t.modelIndex;var i=this.rsrzDict[e];if(void 0!==i)return this.rsrzScale(i);var r=this.rsccDict[e];return void 0!==r?this.rsccScale(r):9474192},t}(Vl);Up.add("densityfit",y_);var b_={ARG:{CD:.1,CZ:.5,NE:-.1},ASN:{CG:.55,OD1:-.55},ASP:{CB:-.16,CG:.36,OD1:-.6,OD2:-.6},CYS:{CB:.19,SG:-.19},GLN:{CD:.55,OE1:-.55},GLU:{CD:.36,CG:-.16,OE1:-.6,OE2:-.6},HIS:{CB:.1,CD2:.2,CE1:.45,CG:.15,ND1:.05,NE2:.05},LYS:{CE:.25,NZ:.75},MET:{CE:.06,CG:.06,SD:-.12},PTR:{C:.55,CA:.1,CZ:.25,N:-.35,O:-.55,O1P:-.85,O2P:-.85,O3P:-.85,OG1:-1.1,P:1.4},SEP:{C:.55,CA:.1,CB:.25,N:-.35,O:-.55,O1P:-.85,O2P:-.85,O3P:-.85,OG1:-1.1,P:1.4},SER:{CB:.25,OG:-.25},THR:{CB:.25,OG1:-.25},TPO:{C:.55,CA:.1,CB:.25,N:-.35,O:-.55,OG1:-1.1,O1P:-.85,O2P:-.85,O3P:-.85,P:1.4},TRP:{CD1:.06,CD2:.1,CE2:-.04,CE3:-.03,CG:-.03,NE1:-.06},TYR:{CZ:.25,OH:-.25},backbone:{C:.55,O:-.55,N:-.35,CA:.1}},x_=1.04;var __=function(i){function t(t){var r=this;i.call(this,t),this.delta=new Qe,this.hCharges=[],t.scale||(this.parameters.scale="rwb"),t.domain||(this.parameters.domain=[-.5,0,.5]),this.scale=this.getScale(),this.charges=new Float32Array(t.structure.atomCount);var n=[];t.structure.eachAtom(function(t){var e;if(r.charges[t.index]=((e=t).isProtein()&&(b_[e.resname]&&b_[e.resname][e.atomname]||b_.backbone[e.atomname])||0)*t.occupancy,"N"===t.atomname){var i=function(t,e){void 0===e&&(e=new Qe);var i=!1,r=!1,n=!1;return e.set(2*t.x,2*t.y,2*t.z),t.eachBondedAtom(function(t){if(!i)return"H"===t.atomname?(e.set(t.x,t.y,t.z),void(i=!0)):void(r||"CA"!==t.atomname?n||"C"!==t.atomname||(n=!0,e.sub(t)):(e.sub(t),r=!0))}),i?e:r&&n?(e.normalize(),e.multiplyScalar(x_),e.add(t),e):void 0}(t);void 0!==i&&(n.push(i),r.hCharges.push(.25*t.occupancy))}});var e=t.structure.getBoundingBox();e.expandByScalar(x_),this.hStore=function(t){for(var e=t.length,i=new Float32Array(e),r=new Float32Array(e),n=new Float32Array(e),o=0;o<t.length;o++){var a=t[o];i[o]=a.x,r[o]=a.y,n[o]=a.z}return{x:i,y:r,z:n,count:e}}(n),this.hHash=new Bm(this.hStore,e),this.hash=new Bm(t.structure.atomStore,e)}return i&&(t.__proto__=i),((t.prototype=Object.create(i&&i.prototype)).constructor=t).prototype.positionColor=function(t){for(var e=this,i=0,r=this.hash.within(t.x,t.y,t.z,12),n=0;n<r.length;n++){var o=r[n],a=e.charges[o];if(0!==a){e.atomProxy.index=o,e.delta.x=t.x-e.atomProxy.x,e.delta.y=t.y-e.atomProxy.y,e.delta.z=t.z-e.atomProxy.z;var s=e.delta.lengthSq();s<144&&(i+=a/s)}}for(var c=this.hHash.within(t.x,t.y,t.z,12),u=0;u<c.length;u++){var h=c[u];e.delta.x=t.x-e.hStore.x[h],e.delta.y=t.y-e.hStore.y[h],e.delta.z=t.z-e.hStore.z[h];var l=e.delta.lengthSq();l<144&&(i+=e.hCharges[h]/l)}return this.scale(i)},t}(Vl);Up.add("electrostatic",__);var w_={H:16777215,HE:14286847,LI:13402367,BE:12779264,B:16758197,C:9474192,N:3166456,O:16715021,F:9494608,NE:11789301,NA:11230450,MG:9109248,AL:12560038,SI:1578e4,P:16744448,S:16777008,CL:2093087,AR:8442339,K:9388244,CA:4062976,SC:15132390,TI:12567239,V:10921643,CR:9083335,MN:10255047,FE:14706227,CO:15765664,NI:5296208,CU:13140019,ZN:8224944,GA:12750735,GE:6721423,AS:12419299,SE:16752896,BR:10889513,KR:6076625,RB:7351984,SR:65280,Y:9764863,ZR:9756896,NB:7586505,MO:5551541,TC:3907230,RU:2396047,RH:687500,PD:27013,AG:12632256,CD:16767375,IN:10909043,SN:6717568,SB:10380213,TE:13924864,I:9699476,XE:9699476,CS:5707663,BA:51456,LA:7394559,CE:16777159,PR:14286791,ND:13107143,PM:10747847,SM:9437127,EU:6422471,GD:4587463,TB:3211207,DY:2097095,HO:65436,ER:58997,TM:54354,YB:48952,LU:43812,HF:5096191,TA:5089023,W:2200790,RE:2522539,OS:2516630,IR:1528967,PT:13684960,AU:16765219,HG:12105936,TL:10900557,PB:5724513,BI:10375093,PO:11230208,AT:7688005,RN:4358806,FR:4325478,RA:32e3,AC:7384058,TH:47871,PA:41471,U:36863,NP:33023,PU:27647,AM:5528818,CM:7888099,BK:9064419,CF:10565332,ES:11739092,FM:11739066,MD:11734438,NO:12389767,LR:13041766,RF:13369433,DB:13697103,SG:14221381,BH:14680120,HS:15073326,MT:15400998,DS:16777215,RG:16777215,CN:16777215,UUT:16777215,FL:16777215,UUP:16777215,LV:16777215,UUH:16777215,D:16777152,T:16777120},S_=function(e){function t(t){t.value=al(t.value,w_.C),e.call(this,t)}return e&&(t.__proto__=e),((t.prototype=Object.create(e&&e.prototype)).constructor=t).prototype.atomColor=function(t){var e=t.element;return"C"===e?this.parameters.value:w_[e]||16777215},t}(Vl);Up.add("element",S_);var A_=function(e){function t(t){e.call(this,t),t.scale||(this.parameters.scale="Spectral"),t.domain||(this.parameters.domain=[0,t.structure.entityList.length-1]),this.entityindexScale=this.getScale()}return e&&(t.__proto__=e),((t.prototype=Object.create(e&&e.prototype)).constructor=t).prototype.atomColor=function(t){return this.entityindexScale(t.entityIndex)},t}(Vl);Up.add("entityindex",A_);var M_=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),((e.prototype=Object.create(t&&t.prototype)).constructor=e).prototype.atomColor=function(t){var e=t.entity;switch(e?e.entityType:void 0){case 1:return 8374655;case 2:return 16629894;case 3:return 12496596;case 4:return 3697840;default:return 16777113}},e}(Vl);Up.add("entitytype",M_);var P_=function(i){function t(t){i.call(this,t),this.geoAtomDict={},this.geoDict={};var e=t.structure.validation;e&&(this.geoAtomDict=e.geoAtomDict,this.geoDict=e.geoDict)}return i&&(t.__proto__=i),((t.prototype=Object.create(i&&i.prototype)).constructor=t).prototype.atomColor=function(t){var e,i=t.resno+"";t.inscode&&(i+="^"+t.inscode),t.chainname&&(i+=":"+t.chainname),i+="/"+t.modelIndex;var r,n=this.geoAtomDict[i];if(void 0!==n){var o=n[t.atomname]||0;r=o,e=16843009*((r=(858993459&(r-=r>>1&1431655765))+(r>>2&858993459))+(r>>4)&252645135)>>24}else e=this.geoDict[i]||0;return 0===e?2188972:1===e?16703627:2===e?16018755:3<=e?10813478:9474192},t}(Vl);Up.add("geoquality",P_);var E_=function(a){function t(t){a.call(this,t),this.resHF={},t.scale||(this.parameters.scale="RdYlGn");for(var e in og)this.resHF[e]=og[e][0];if(this.defaultResidueHydrophobicity=ag[0],!t.domain){var i=1/0,r=-1/0;for(var n in this.resHF){var o=this.resHF[n];i=Math.min(i,o),r=Math.max(r,o)}this.parameters.domain=[i,0,r]}this.hfScale=this.getScale()}return a&&(t.__proto__=a),((t.prototype=Object.create(a&&a.prototype)).constructor=t).prototype.atomColor=function(t){return this.hfScale(this.resHF[t.resname]||this.defaultResidueHydrophobicity)},t}(Vl);Up.add("hydrophobicity",E_);var C_=function(e){function t(t){e.call(this,t),t.scale||(this.parameters.scale="rainbow"),t.domain||(this.parameters.domain=[0,t.structure.modelStore.count]),this.modelindexScale=this.getScale()}return e&&(t.__proto__=e),((t.prototype=Object.create(e&&e.prototype)).constructor=t).prototype.atomColor=function(t){return this.modelindexScale(t.modelIndex)},t}(Vl);Up.add("modelindex",C_);var T_=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),((e.prototype=Object.create(t&&t.prototype)).constructor=e).prototype.atomColor=function(t){switch(t.residueType.moleculeType){case 1:return 3697840;case 2:return 15729279;case 3:return 12496596;case 4:return 16629894;case 5:return 12540695;case 6:return 8374655;default:return 16777113}},e}(Vl);Up.add("moleculetype",T_);var I_=function(e){function t(t){e.call(this,t),t.scale||(this.parameters.scale="PuBu"),t.domain||(this.parameters.domain=[0,1]),this.occupancyScale=this.getScale()}return e&&(t.__proto__=e),((t.prototype=Object.create(e&&e.prototype)).constructor=t).prototype.atomColor=function(t){return this.occupancyScale(t.occupancy)},t}(Vl);Up.add("occupancy",I_);var R_=function(e){function t(t){e.call(this,t),t.scale||(this.parameters.scale="rwb"),t.domain||(this.parameters.domain=[-1,1]),this.partialchargeScale=this.getScale()}return e&&(t.__proto__=e),((t.prototype=Object.create(e&&e.prototype)).constructor=t).prototype.atomColor=function(t){return this.partialchargeScale(t.partialCharge||0)},t}(Vl);function L_(){return 16777215*Math.random()}Up.add("partialcharge",R_);var O_=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),((e.prototype=Object.create(t&&t.prototype)).constructor=e).prototype.atomColor=function(){return L_()},e.prototype.volumeColor=function(){return L_()},e.prototype.positionColor=function(){return L_()},e}(Vl);Up.add("random",O_);var D_=function(i){function t(t){var e=this;i.call(this,t),this.scalePerChain={},t.scale||(this.parameters.scale="rainbow",this.parameters.reverse=al(t.reverse,!0)),t.structure.eachChain(function(t){e.parameters.domain=[t.residueOffset,t.residueEnd],e.scalePerChain[t.index]=e.getScale()})}return i&&(t.__proto__=i),((t.prototype=Object.create(i&&i.prototype)).constructor=t).prototype.atomColor=function(t){return this.scalePerChain[t.chainIndex](t.residueIndex)},t}(Vl);Up.add("residueindex",D_);var k_={ALA:9240460,ARG:124,ASN:16743536,ASP:10485826,CYS:16777072,GLN:16731212,GLU:6684672,GLY:16777215,HIS:7368959,ILE:19456,LEU:4546117,LYS:4671416,MET:12099650,PHE:5459026,PRO:5395026,SER:16740418,THR:12078080,TRP:5195264,TYR:9203788,VAL:16747775,ASX:16711935,GLX:16711935,ASH:16711935,GLH:16711935,A:14423100,G:3329330,I:10145074,X:8190976,C:16766720,T:4286945,U:4251856,D:35723,DA:14423100,DG:3329330,DI:10145074,DX:8190976,DC:16766720,DT:4286945,DU:4251856,DD:35723},B_=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),((e.prototype=Object.create(t&&t.prototype)).constructor=e).prototype.atomColor=function(t){return k_[t.resname]||16711935},e}(Vl);Up.add("resname",B_);var N_=16711808,F_=10485888,z_=6291584,U_=16762880,j_=6324479,G_=16777215,V_=11403518,H_=16580962,$_=10921722,W_=function(e){function t(t){e.call(this,t),this.residueProxy=t.structure.getResidueProxy()}return e&&(t.__proto__=e),((t.prototype=Object.create(e&&e.prototype)).constructor=t).prototype.atomColor=function(t){var e=t.sstruc,i=this.residueProxy;return"h"===e?N_:"g"===e?F_:"i"===e?z_:"e"===e||"b"===e?U_:"t"===e?j_:(i.index=t.residueIndex,i.isDna()?V_:i.isRna()?H_:i.isSaccharide()?$_:i.isProtein()||"s"===e||"l"===e?G_:8421504)},t}(Vl);Up.add("sstruc",W_);var X_=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),((e.prototype=Object.create(t&&t.prototype)).constructor=e).prototype.atomColor=function(){return this.parameters.value},e.prototype.bondColor=function(){return this.parameters.value},e.prototype.valueColor=function(){return this.parameters.value},e.prototype.volumeColor=function(){return this.parameters.value},e}(Vl);Up.add("uniform",X_);var q_=function(e){function t(t){e.call(this,t),this.valueScale=this.getScale()}return e&&(t.__proto__=e),((t.prototype=Object.create(e&&e.prototype)).constructor=t).prototype.volumeColor=function(t){return this.valueScale(this.parameters.volume.data[t])},t}(Vl);Up.add("value",q_);var Y_=function(e){function t(t){e.call(this,t),this.vec=new Qe,this.valueScale=this.getScale()}return e&&(t.__proto__=e),((t.prototype=Object.create(e&&e.prototype)).constructor=t).prototype.positionColor=function(t){var e=this.parameters.volume;if(!e||!e.inverseMatrix)return this.parameters.value;var i=this.vec,r=e.data,n=e.nx,o=e.ny,a=n*o;i.copy(t),i.applyMatrix4(e.inverseMatrix);var s=Math.floor(i.x),c=Math.floor(i.y),u=Math.floor(i.z),h=(u*o+c)*n+s,l=h+1,p=h+n,d=h+a,f=p+1,m=d+1,g=p+a,v=g+1,y=r[h],b=r[l],x=r[p],_=r[d],w=r[f],S=r[m],A=r[g],M=r[v],P=i.x-s,E=i.y-c,C=i.z-u,T=kl(y,b,P),I=kl(_,S,P),R=kl(x,w,P),L=kl(A,M,P),O=kl(kl(T,R,E),kl(I,L,E),C);return this.valueScale(O)},t}(Vl);Up.add("volume",Y_);var Z_=function(r){function t(t,e,i){void 0===i&&(i={}),r.call(this,t,e,Object.assign({name:e.name},i)),this.shape=e}r&&(t.__proto__=r),(t.prototype=Object.create(r&&r.prototype)).constructor=t;var e={type:{configurable:!0}};return e.type.get=function(){return"shape"},t.prototype.addRepresentation=function(t,e){return void 0===e&&(e={}),this._addRepresentation(t,this.shape,e)},t.prototype.getBoxUntransformed=function(){return this.shape.boundingBox},t.prototype.getCenterUntransformed=function(){return this.shape.center},t.prototype.dispose=function(){this.shape.dispose(),r.prototype.dispose.call(this)},Object.defineProperties(t.prototype,e),t}(Dx);Wp.add("shape",Z_);var K_=function(o){function t(t,e,i){var r=i||{};if(o.call(this,t,e,r),this.type="structure",this.parameters=Object.assign({radiusType:{type:"select",options:Cy.types},radiusData:{type:"hidden"},radiusSize:{type:"number",precision:3,max:10,min:.001},radiusScale:{type:"number",precision:3,max:10,min:.001},assembly:null,defaultAssembly:{type:"hidden"}},this.parameters),this.selection=new bp(r.sele),this.dataList=[],this.structure=t,this.structureView=this.structure.getView(this.selection),t.biomolDict){var n={default:"default","":t.unitcell?"AU":"FULL"};Object.keys(t.biomolDict).forEach(function(t){n[t]=t}),this.parameters.assembly={type:"select",options:n,rebuild:!0}}else this.parameters.assembly=null}o&&(t.__proto__=o),(t.prototype=Object.create(o&&o.prototype)).constructor=t;var e={defaultScale:{configurable:!0}};return e.defaultScale.get=function(){return{vdw:1,covalent:1,bfactor:.01,sstruc:1}},t.prototype.init=function(t){var e=t||{};e.colorScheme=al(e.colorScheme,"element"),this.setRadius(e.radius,e),this.radiusType=al(e.radiusType,"vdw"),this.radiusData=al(e.radiusData,{}),this.radiusSize=al(e.radiusSize,1),this.radiusScale=al(e.radiusScale,1),this.assembly=al(e.assembly,"default"),this.defaultAssembly=al(e.defaultAssembly,""),"auto"===e.quality&&(e.quality=this.getQuality()),o.prototype.init.call(this,e),this.selection.signals.stringChanged.add(function(){this.build()},this),this.build()},t.prototype.setRadius=function(t,e){var i=Object.keys(Ey);return"string"==typeof t&&i.includes(t.toLowerCase())?e.radiusType=t:void 0!==t&&(e.radiusType="size",e.radiusSize=t),this},t.prototype.getAssembly=function(){var t="default"===this.assembly?this.defaultAssembly:this.assembly;return this.structure.biomolDict[t]},t.prototype.getQuality=function(){var t,e=this.structureView,i=this.getAssembly();return t=i?i.getAtomCount(e):e.atomCount,Lp&&(t*=4),e.atomStore.count/e.residueStore.count<2&&(t*=10),t<15e3?"high":t<8e4?"medium":"low"},t.prototype.create=function(){if(0!==this.structureView.atomCount)if(this.structureView.hasCoords()){this.needsBuild=!1;var t=this.getAssembly();if(t)t.partList.forEach(function(t,e){var i=t.getView(this.structureView);if(0!==i.atomCount){var r=this.createData(i,e);r&&(r.sview=i,r.instanceList=t.getInstanceList(),this.dataList.push(r))}},this);else{var e=this.createData(this.structureView,0);e&&(e.sview=this.structureView,this.dataList.push(e))}}else this.needsBuild=!0},t.prototype.createData=function(){console.error("createData not implemented")},t.prototype.update=function(e){!this.lazy||this.visible?this.needsBuild?this.build():this.dataList.forEach(function(t){0<t.bufferList.length&&this.updateData(e,t)},this):Object.assign(this.lazyProps.what,e)},t.prototype.updateData=function(){this.build()},t.prototype.getColorParams=function(){var t=o.prototype.getColorParams.call(this);return t.structure=this.structure,t},t.prototype.getRadiusParams=function(){return{type:this.radiusType,scale:this.radiusScale,size:this.radiusSize,data:this.radiusData}},t.prototype.getAtomParams=function(t,e){return Object.assign({what:t,colorParams:this.getColorParams(),radiusParams:this.getRadiusParams()},e)},t.prototype.getBondParams=function(t,e){return Object.assign({what:t,colorParams:this.getColorParams(),radiusParams:this.getRadiusParams()},e)},t.prototype.getAtomRadius=function(t){return this.structureView.atomSet.isSet(t.index)?new Cy(this.getRadiusParams()).atomRadius(t):0},t.prototype.setSelection=function(t,e){return this.selection.setString(t,e),this},t.prototype.setParameters=function(t,e,i){void 0===e&&(e={}),void 0===i&&(i=!1);var r=t||{};return this.setRadius(r.radius,r),void 0===r.radiusType&&void 0===r.radiusData&&void 0===r.radiusSize&&void 0===r.radiusScale||(e.radius=!0,Dp&&!this.disableImpostor||(i=!0)),void 0!==r.defaultAssembly&&r.defaultAssembly!==this.defaultAssembly&&("default"===this.assembly&&void 0===r.assembly||"default"===r.assembly)&&(i=!0),o.prototype.setParameters.call(this,r,e,i),this},t.prototype.getParameters=function(){return Object.assign(o.prototype.getParameters.call(this),{sele:this.selection?this.selection.string:void 0,defaultAssembly:this.defaultAssembly})},t.prototype.attach=function(t){var i=this.viewer,r=this.bufferList;this.dataList.forEach(function(e){e.bufferList.forEach(function(t){r.push(t),i.add(t,e.instanceList)})}),this.setVisibility(this.visible),t()},t.prototype.clear=function(){this.dataList.length=0,o.prototype.clear.call(this)},t.prototype.dispose=function(){this.structureView.dispose(),delete this.structure,delete this.structureView,o.prototype.dispose.call(this)},Object.defineProperties(t.prototype,e),t}(Xf),J_=function(r){function t(t,e,i){r.call(this,t,e,i),this.n=0,this.parameters=Object.assign({labelVisible:{type:"boolean"},labelSize:{type:"number",precision:3,max:10,min:.001},labelColor:{type:"color"},labelFontFamily:{type:"select",options:{"sans-serif":"sans-serif",monospace:"monospace",serif:"serif"},buffer:"fontFamily"},labelFontStyle:{type:"select",options:{normal:"normal",italic:"italic"},buffer:"fontStyle"},labelFontWeight:{type:"select",options:{normal:"normal",bold:"bold"},buffer:"fontWeight"},labelsdf:{type:"boolean",buffer:"sdf"},labelXOffset:{type:"number",precision:1,max:20,min:-20,buffer:"xOffset"},labelYOffset:{type:"number",precision:1,max:20,min:-20,buffer:"yOffset"},labelZOffset:{type:"number",precision:1,max:20,min:-20,buffer:"zOffset"},labelAttachment:{type:"select",options:{"bottom-left":"bottom-left","bottom-center":"bottom-center","bottom-right":"bottom-right","middle-left":"middle-left","middle-center":"middle-center","middle-right":"middle-right","top-left":"top-left","top-center":"top-center","top-right":"top-right"},rebuild:!0},labelBorder:{type:"boolean",buffer:"showBorder"},labelBorderColor:{type:"color",buffer:"borderColor"},labelBorderWidth:{type:"number",precision:2,max:.3,min:0,buffer:"borderWidth"},labelBackground:{type:"boolean",rebuild:!0},labelBackgroundColor:{type:"color",buffer:"backgroundColor"},labelBackgroundMargin:{type:"number",precision:2,max:2,min:0,rebuild:!0},labelBackgroundOpacity:{type:"range",step:.01,max:1,min:0,buffer:"backgroundOpacity"},labelFixedSize:{type:"boolean",buffer:"fixedSize"},lineOpacity:{type:"range",min:0,max:1,step:.01},linewidth:{type:"integer",max:50,min:1,buffer:!0}},this.parameters,{flatShaded:null})}return r&&(t.__proto__=r),((t.prototype=Object.create(r&&r.prototype)).constructor=t).prototype.init=function(t){var e=t||{};this.labelVisible=al(e.labelVisible,!0),this.labelSize=al(e.labelSize,2),this.labelColor=al(e.labelColor,16777215),this.labelFontFamily=al(e.labelFontFamily,"sans-serif"),this.labelFontStyle=al(e.labelFontstyle,"normal"),this.labelFontWeight=al(e.labelFontWeight,"bold"),this.labelsdf=al(e.labelsdf,"Chrome"===Tp),this.labelXOffset=al(e.labelXOffset,0),this.labelYOffset=al(e.labelYOffset,0),this.labelZOffset=al(e.labelZOffset,.5),this.labelAttachment=al(e.labelAttachment,"bottom-left"),this.labelBorder=al(e.labelBorder,!1),this.labelBorderColor=al(e.labelBorderColor,"lightgrey"),this.labelBorderWidth=al(e.labelBorderWidth,.15),this.labelBackground=al(e.labelBackground,!1),this.labelBackgroundColor=al(e.labelBackgroundColor,"lightgrey"),this.labelBackgroundMargin=al(e.labelBackgroundMargin,.5),this.labelBackgroundOpacity=al(e.labelBackgroundOpacity,1),this.labelFixedSize=al(e.labelFixedSize,!1),this.lineOpacity=al(e.lineOpacity,1),this.linewidth=al(e.linewidth,2),r.prototype.init.call(this,e)},t.prototype.update=function(t){t.position?this.build():r.prototype.update.call(this,t)},t.prototype.updateData=function(t,e){var i={};if(t&&!t.labelSize||(i.size=Td(this.n,this.labelSize)),!t||t.labelColor){var r=new Li(this.labelColor);i.color=Id(this.n,r.r,r.g,r.b)}this.textBuffer.setAttributes(i)},t.prototype.setParameters=function(t){var e={};return t&&t.labelSize&&(e.labelSize=!0),t&&(t.labelColor||0===t.labelColor)&&(e.labelColor=!0),r.prototype.setParameters.call(this,t,e,!1),t&&void 0!==t.opacity&&this.textBuffer.setParameters({opacity:1}),t&&void 0!==t.labelVisible&&this.setVisibility(this.visible),this},t.prototype.setVisibility=function(t,e){return r.prototype.setVisibility.call(this,t,!0),this.textBuffer&&this.textBuffer.setVisibility(this.labelVisible&&this.visible),e||this.viewer.requestRender(),this},t.prototype.getLabelBufferParams=function(t){return r.prototype.getBufferParams.call(this,Object.assign({fontFamily:this.labelFontFamily,fontStyle:this.labelFontStyle,fontWeight:this.labelFontWeight,sdf:this.labelsdf,xOffset:this.labelXOffset,yOffset:this.labelYOffset,zOffset:this.labelZOffset,attachment:this.labelAttachment,showBorder:this.labelBorder,borderColor:this.labelBorderColor,borderWidth:this.labelBorderWidth,showBackground:this.labelBackground,backgroundColor:this.labelBackgroundColor,backgroundMargin:this.labelBackgroundMargin,backgroundOpacity:this.labelBackgroundOpacity,fixedSize:this.labelFixedSize,disablePicking:!0,visible:this.labelVisible},t,{opacity:1}))},t.prototype.getAtomRadius=function(){return 0},t}(K_);function Q_(a,t){var s=a.getAtomProxy(),c=new bp,e=t.length;if(0===e)return new Float32Array(0);var u=t[0].length,h=a.getAtomSet(),l=new Float32Array(e*u*3),p=0;return t.forEach(function(t){for(var e=!1,i=0;i<u;i++){var r=t[i];if(Number.isInteger(r)){if(!h.get(r)){e=!0;break}s.index=r}else{c.setString(r);var n=a.getAtomIndices(c);if(!n.length){e=!0;break}s.index=n[0]}var o=p+3*i;l[o++]=s.x,l[o++]=s.y,l[o++]=s.z}e||(p+=3*u)}),l.subarray(0,p)}function tw(t,e,i,r,n){var o=Math.cos(n),a=Math.sin(n);t[0]=e[0]+i[0]*o+r[0]*a,t[1]=e[1]+i[1]*o+r[1]*a,t[2]=e[2]+i[2]*o+r[2]*a}function ew(t,e,i,r,n,o,a){for(var s=0;s<e;s++){for(var c=0;c<i;c++)r[c]=t[c*e+s];iw(r,n,o,a,i);for(var u=0;u<i;u++)t[u*e+s]=n[u]}for(var h=0;h<i;h++){for(var l=0;l<e;l++)r[l]=t[h*e+l];iw(r,n,o,a,e);for(var p=0;p<e;p++)t[h*e+p]=Math.sqrt(n[p])}}function iw(t,e,i,r,n){r[i[0]=0]=Number.MIN_SAFE_INTEGER,r[1]=Number.MAX_SAFE_INTEGER;for(var o=1,a=0;o<n;o++){for(var s=(t[o]+o*o-(t[i[a]]+i[a]*i[a]))/(2*o-2*i[a]);s<=r[a];)a--,s=(t[o]+o*o-(t[i[a]]+i[a]*i[a]))/(2*o-2*i[a]);i[++a]=o,r[a]=s,r[a+1]=Number.MAX_SAFE_INTEGER}for(var c=0,u=0;c<n;c++){for(;r[u+1]<c;)u++;e[c]=(c-i[u])*(c-i[u])+t[i[u]]}}Hp.add("shader/SDFFont.vert","uniform float clipNear;\nuniform float clipRadius;\nuniform vec3 clipCenter;\nuniform float xOffset;\nuniform float yOffset;\nuniform float zOffset;\nuniform bool ortho;\nuniform float canvasHeight;\nuniform float pixelRatio;\n#if defined( NEAR_CLIP ) || defined( RADIUS_CLIP ) || ( !defined( PICKING ) && !defined( NOLIGHT ) )\nvarying vec3 vViewPosition;\n#endif\nvarying vec2 texCoord;\n#if defined( RADIUS_CLIP )\nvarying vec3 vClipCenter;\n#endif\n#if defined( PICKING )\n#include unpack_color\nattribute float primitiveId;\nvarying vec3 vPickingColor;\n#else\n#include color_pars_vertex\n#endif\nattribute vec2 mapping;\nattribute vec2 inputTexCoord;\nattribute float inputSize;\n#include matrix_scale\n#include common\nvoid main(void){\n#if defined( PICKING )\nvPickingColor = unpackColor( primitiveId );\n#else\n#include color_vertex\n#endif\ntexCoord = inputTexCoord;\nfloat scale = matrixScale( modelViewMatrix );\nfloat _xOffset = xOffset * scale;\nfloat _yOffset = yOffset * scale;\nfloat _zOffset = zOffset * scale;\nif( texCoord.x == 10.0 ){\n_zOffset -= 0.001;\n}\nvec4 cameraPos = modelViewMatrix * vec4( position, 1.0 );\n#ifdef FIXED_SIZE\nif ( ortho ) {\nscale /= pixelRatio * (( canvasHeight / 2.0 ) / -cameraPosition.z) * 0.1;\n} else {\nscale /= pixelRatio * (( canvasHeight / 2.0 ) / -cameraPos.z) * 0.1;\n}\n#endif\nvec4 cameraCornerPos = vec4( cameraPos.xyz, 1.0 );\ncameraCornerPos.xy += mapping * inputSize * 0.01 * scale;\ncameraCornerPos.x += _xOffset;\ncameraCornerPos.y += _yOffset;\nif( ortho ){\ncameraCornerPos.xyz += normalize( -cameraPosition ) * _zOffset;\n} else {\ncameraCornerPos.xyz += normalize( -cameraCornerPos.xyz ) * _zOffset;\n}\ngl_Position = projectionMatrix * cameraCornerPos;\n#if defined( NEAR_CLIP ) || defined( RADIUS_CLIP ) || ( !defined( PICKING ) && !defined( NOLIGHT ) )\nvViewPosition = -cameraCornerPos.xyz;\n#endif\n#if defined( RADIUS_CLIP )\nvClipCenter = -( modelViewMatrix * vec4( clipCenter, 1.0 ) ).xyz;\n#endif\n#include nearclip_vertex\n#include radiusclip_vertex\n}"),Hp.add("shader/SDFFont.frag","uniform sampler2D fontTexture;\nuniform float opacity;\nuniform bool showBorder;\nuniform vec3 borderColor;\nuniform float borderWidth;\nuniform vec3 backgroundColor;\nuniform float backgroundOpacity;\nuniform float clipNear;\nuniform float clipRadius;\nvarying vec3 vViewPosition;\nvarying vec2 texCoord;\n#if defined( RADIUS_CLIP )\nvarying vec3 vClipCenter;\n#endif\n#if defined( PICKING )\nuniform float objectId;\nvarying vec3 vPickingColor;\nconst vec3 vColor = vec3( 0.0 );\n#else\n#include common\n#include color_pars_fragment\n#include fog_pars_fragment\n#endif\nconst float gamma = 2.2 * 1.4142 / 128.0;\nconst float padding = 0.75;\nvoid main(){\n#include nearclip_fragment\n#include radiusclip_fragment\nif( texCoord.x > 1.0 ){\ngl_FragColor = vec4( backgroundColor, backgroundOpacity );\n}else{\nfloat sdf = texture2D( fontTexture, texCoord ).a;\nif( showBorder ) sdf += borderWidth;\nfloat a = smoothstep(padding - gamma, padding + gamma, sdf);\nif( a < 0.2 ) discard;\na *= opacity;\nvec3 outgoingLight = vColor;\nif( showBorder && sdf < ( padding + borderWidth ) ){\noutgoingLight = borderColor;\n}\ngl_FragColor = vec4( outgoingLight, a );\n}\n#if defined( PICKING )\nif( opacity < 0.3 )\ndiscard;\ngl_FragColor = vec4( vPickingColor, objectId );\n#else\n#include premultiplied_alpha_fragment\n#include tonemapping_fragment\n#include encodings_fragment\n#include fog_fragment\n#endif\n}");var rw={};var nw={font:"sans-serif",size:36,style:"normal",variant:"normal",weight:"normal",outline:3,width:1024,height:1024},ow=function(t){void 0===t&&(t={}),this.gamma=1,this.mapped={},this.scratchW=0,this.scratchH=0,this.currentX=0,this.currentY=0,this.cutoff=.25,this.parameters=sl(t,nw);var e=this.parameters;this.radius=e.size/8,this.padding=e.size/3;var i=this.lineHeight=e.size+2*e.outline+Math.round(e.size/4),r=this.maxWidth=e.width/4,n=this.canvas=document.createElement("canvas");n.width=r,n.height=i;var o=this.context=this.canvas.getContext("2d");o.font=e.style+" "+e.variant+" "+e.weight+" "+e.size+"px "+e.font,o.fillStyle="black",o.textAlign="left",o.textBaseline="bottom",o.lineJoin="round",this.gridOuter=new Float64Array(i*r),this.gridInner=new Float64Array(i*r),this.f=new Float64Array(Math.max(i,r)),this.d=new Float64Array(Math.max(i,r)),this.z=new Float64Array(Math.max(i,r)+1),this.v=new Int16Array(Math.max(i,r)),this.data=new Uint8Array(e.width*e.height*4),this.canvas2=document.createElement("canvas"),this.canvas2.width=e.width,this.canvas2.height=e.height,this.context2=this.canvas2.getContext("2d"),this.placeholder=this.map(String.fromCharCode(65533));for(var a=32;a<=126;++a)this.map(String.fromCharCode(a));this.map(String.fromCharCode(176)),this.map(String.fromCharCode(8491)),this.texture=new la(this.canvas2),this.texture.flipY=!1,this.texture.needsUpdate=!0};ow.prototype.map=function(t){var e=this.parameters;return void 0===this.mapped[t]&&(this.draw(t),this.currentX+this.scratchW>e.width&&(this.currentX=0,this.currentY+=this.scratchH),this.currentY+this.scratchH>e.height&&console.warn("canvas to small"),this.mapped[t]={x:this.currentX,y:this.currentY,w:this.scratchW,h:this.scratchH},this.context2.drawImage(this.canvas,0,0,this.scratchW,this.scratchH,this.currentX,this.currentY,this.scratchW,this.scratchH),this.currentX+=this.scratchW),this.mapped[t]},ow.prototype.get=function(t){return this.mapped[t]||this.placeholder},ow.prototype.draw=function(t){var e=this.parameters,i=this.lineHeight,r=e.outline,n=this.context,o=this.maxWidth,a=r,s=i-e.outline,c=n.measureText(t),u=Math.min(o,Math.ceil(c.width+2*a+1)),h=u*i;n.clearRect(0,0,u,i),n.fillText(t,a,s);for(var l=n.getImageData(0,0,u,i),p=l.data,d=0;d<h;d++){var f=l.data[4*d+3]/255;this.gridOuter[d]=1===f?0:0===f?Number.MAX_SAFE_INTEGER:Math.pow(Math.max(0,.5-f),2),this.gridInner[d]=1===f?Number.MAX_SAFE_INTEGER:0===f?0:Math.pow(Math.max(0,f-.5),2)}ew(this.gridOuter,u,i,this.f,this.d,this.v,this.z),ew(this.gridInner,u,i,this.f,this.d,this.v,this.z);for(var m=0;m<h;m++){var g=this.gridOuter[m]-this.gridInner[m];p[4*m+3]=Math.max(0,Math.min(255,Math.round(255-255*(g/this.radius+this.cutoff))))}n.putImageData(l,0,0),this.scratchW=u,this.scratchH=i};var aw=Object.assign({fontFamily:"sans-serif",fontStyle:"normal",fontWeight:"bold",fontSize:36,xOffset:0,yOffset:0,zOffset:.5,attachment:"bottom-left",showBorder:!1,borderColor:"lightgrey",borderWidth:.15,showBackground:!1,backgroundColor:"lightgrey",backgroundMargin:.5,backgroundOpacity:1,forceTransparent:!0,fixedSize:!1},Kv),sw=Object.assign({fontFamily:{uniform:!0},fontStyle:{uniform:!0},fontWeight:{uniform:!0},fontSize:{uniform:!0},xOffset:{uniform:!0},yOffset:{uniform:!0},zOffset:{uniform:!0},showBorder:{uniform:!0},borderColor:{uniform:!0},borderWidth:{uniform:!0},backgroundColor:{uniform:!0},backgroundOpacity:{uniform:!0},fixedSize:{updateShader:!0}},Jv);function cw(t,e){for(var i=t.position.length/3,r=0,n=0;n<i;++n)r+=t.text[n].length;return e.showBackground&&(r+=i),r}var uw=function(n){function t(t,e){void 0===e&&(e={}),n.call(this,{position:new Float32Array(3*cw(t,e)),color:new Float32Array(3*cw(t,e)),picking:new av},e),this.parameterTypes=sw,this.alwaysTransparent=!0,this.hasWireframe=!1,this.isText=!0,this.vertexShader="SDFFont.vert",this.fragmentShader="SDFFont.frag",this.text=t.text,this.positionCount=t.position.length/3,this.addUniforms({fontTexture:{value:null},xOffset:{value:this.parameters.xOffset},yOffset:{value:this.parameters.yOffset},zOffset:{value:this.parameters.zOffset},ortho:{value:!1},showBorder:{value:this.parameters.showBorder},borderColor:{value:new Li(this.parameters.borderColor)},borderWidth:{value:this.parameters.borderWidth},backgroundColor:{value:new Li(this.parameters.backgroundColor)},backgroundOpacity:{value:this.parameters.backgroundOpacity},canvasHeight:{value:1},pixelRatio:{value:1}}),this.addAttributes({inputTexCoord:{type:"v2",value:null},inputSize:{type:"f",value:null}}),this.setAttributes(t),this.makeTexture(),this.makeMapping()}n&&(t.__proto__=n),(t.prototype=Object.create(n&&n.prototype)).constructor=t;var e={defaultParameters:{configurable:!0}};return e.defaultParameters.get=function(){return aw},t.prototype.makeMaterial=function(){n.prototype.makeMaterial.call(this);var t=this.texture,e=this.material;e.transparent=!0,e.extensions.derivatives=!0,e.lights=!1,e.uniforms.fontTexture.value=t,e.needsUpdate=!0;var i=this.wireframeMaterial;i.transparent=!0,i.extensions.derivatives=!0,i.lights=!1,i.uniforms.fontTexture.value=t,i.needsUpdate=!0;var r=this.pickingMaterial;r.extensions.derivatives=!0,r.lights=!1,r.uniforms.fontTexture.value=t,r.needsUpdate=!0},t.prototype.setAttributes=function(t){var e,i,r,n,o,a;void 0===t&&(t={});var s=this.text,c=this.geometry.attributes;t.position&&(e=t.position,n=c.position.array,c.position.needsUpdate=!0),t.size&&(i=t.size,o=c.inputSize.array,c.inputSize.needsUpdate=!0),t.color&&(r=t.color,a=c.color.array,c.color.needsUpdate=!0);for(var u,h,l,p,d=this.positionCount,f=0,m=0;m<d;++m)for(h=3*m,p=s[m].length,this.parameters.showBackground&&(p+=1),l=0;l<p;++l,++f)for(var g=0;g<4;g++)u=4*f*3+3*g,e&&(n[u]=e[h],n[u+1]=e[h+1],n[u+2]=e[h+2]),i&&(o[4*f+g]=i[m]),r&&(a[u]=r[h],a[u+1]=r[h+1],a[u+2]=r[h+2])},t.prototype.makeTexture=function(){var t,e;this.textAtlas=(t={font:this.parameters.fontFamily,style:this.parameters.fontStyle,weight:this.parameters.fontWeight,size:this.parameters.fontSize},e=JSON.stringify(t),void 0===rw[e]&&(rw[e]=new ow(t)),rw[e]),this.texture=this.textAtlas.texture},t.prototype.makeMapping=function(){for(var t,e,i,r,n,o,a,s,c=this.textAtlas,u=this.text,h=this.parameters.attachment,l=c.lineHeight*this.parameters.backgroundMargin*.1-10,p=this.geometry.attributes,d=p.inputTexCoord.array,f=p.mapping.array,m=this.positionCount,g=0,v=0;v<m;++v){for(r=0,o=(i=u[v]).length,n=0;n<o;++n)r+=(t=c.get(i[n])).w-2*c.parameters.outline;for(s=h.startsWith("top")?c.lineHeight/1.25:h.startsWith("middle")?c.lineHeight/2.5:0,a=h.endsWith("right")?r:h.endsWith("center")?r/2:0,a+=c.parameters.outline,s+=c.parameters.outline,this.parameters.showBackground&&(f[(e=2*g*4)+0]=-c.lineHeight/6-a-l,f[e+1]=c.lineHeight-s+l,f[e+2]=-c.lineHeight/6-a-l,f[e+3]=0-s-l,f[e+4]=r+c.lineHeight/6-a+2*c.parameters.outline+l,f[e+5]=c.lineHeight-s+l,f[e+6]=r+c.lineHeight/6-a+2*c.parameters.outline+l,f[e+7]=0-s-l,d[e+0]=10,d[e+2]=10,d[e+4]=10,d[e+6]=10,g+=1),n=r=0;n<o;++n,++g){t=c.get(i[n]),f[(e=2*g*4)+0]=r-a,f[e+1]=t.h-s,f[e+2]=r-a,f[e+3]=0-s,f[e+4]=r+t.w-a,f[e+5]=t.h-s,f[e+6]=r+t.w-a,f[e+7]=0-s;var y=c.parameters.width,b=c.parameters.height,x=[t.x/y,t.y/b,t.x/y,(t.y+t.h)/b,(t.x+t.w)/y,t.y/b,(t.x+t.w)/y,(t.y+t.h)/b];d.set(x,e),r+=t.w-2*c.parameters.outline}}p.inputTexCoord.needsUpdate=!0,p.mapping.needsUpdate=!0},t.prototype.getDefines=function(t){var e=n.prototype.getDefines.call(this,t);return this.parameters.fixedSize&&(e.FIXED_SIZE=1),e},t.prototype.setUniforms=function(t){!t||void 0===t.fontFamily&&void 0===t.fontStyle&&void 0===t.fontWeight&&void 0===t.fontSize||(this.makeTexture(),this.makeMapping(),this.texture.needsUpdate=!0,t.fontTexture=this.texture),n.prototype.setUniforms.call(this,t)},Object.defineProperties(t.prototype,e),t}(lx);Xp.add("text",uw),Hp.add("shader/WideLine.vert","\nuniform float clipNear;\nuniform vec3 clipCenter;\nuniform float linewidth;\nuniform vec2 resolution;\nuniform mat4 projectionMatrixInverse;\nattribute vec2 mapping;\nattribute vec3 position1;\nattribute vec3 position2;\n#ifdef PICKING\n#include unpack_color\nattribute float primitiveId;\nvarying vec3 vPickingColor;\n#else\nattribute vec3 color2;\nvarying vec3 vColor;\nvarying vec3 vColor2;\nvarying float flag;\nvarying vec3 vViewPosition;\n#endif\n#if defined( RADIUS_CLIP )\nvarying vec3 vClipCenter;\n#endif\nvoid trimSegment( const in vec4 start, inout vec4 end ) {\nfloat a = projectionMatrix[ 2 ][ 2 ]; float b = projectionMatrix[ 3 ][ 2 ]; float nearEstimate = - 0.5 * b / a;\nfloat alpha = ( nearEstimate - start.z ) / ( end.z - start.z );\nend.xyz = mix( start.xyz, end.xyz, alpha );\n}\nvoid main() {\nfloat aspect = resolution.x / resolution.y;\n#ifdef PICKING\nvPickingColor = unpackColor( primitiveId );\n#else\nflag = mapping.y;\nvColor = color;\nvColor2 = color2;\n#endif\nvec4 start = modelViewMatrix * vec4( position1, 1.0 );\nvec4 end = modelViewMatrix * vec4( position2, 1.0 );\nbool perspective = ( projectionMatrix[ 2 ][ 3 ] == -1.0 ); if ( perspective ) {\nif ( start.z < 0.0 && end.z >= 0.0 ) {\ntrimSegment( start, end );\n} else if ( end.z < 0.0 && start.z >= 0.0 ) {\ntrimSegment( end, start );\n}\n}\nvec4 clipStart = projectionMatrix * start;\nvec4 clipEnd = projectionMatrix * end;\nvec2 ndcStart = clipStart.xy / clipStart.w;\nvec2 ndcEnd = clipEnd.xy / clipEnd.w;\nvec2 dir = ndcEnd - ndcStart;\ndir.x *= aspect;\ndir = normalize( dir );\nvec2 offset = vec2( dir.y, - dir.x );\ndir.x /= aspect;\noffset.x /= aspect;\nif ( mapping.x < 0.0 ) offset *= - 1.0;\noffset *= linewidth;\noffset /= resolution.y;\nvec4 clip = ( mapping.y < 0.5 ) ? clipStart : clipEnd;\noffset *= clip.w;\nclip.xy += offset;\ngl_Position = clip;\n#ifndef PICKING\nvViewPosition = ( projectionMatrixInverse * clip ).xyz;\n#endif\n#if defined( RADIUS_CLIP )\nvClipCenter = -( modelViewMatrix * vec4( clipCenter, 1.0 ) ).xyz;\n#endif\n#include nearclip_vertex\n}"),Hp.add("shader/WideLine.frag","uniform vec3 diffuse;\nuniform float opacity;\nuniform float clipNear;\nuniform float clipRadius;\n#if defined( RADIUS_CLIP )\nvarying vec3 vClipCenter;\n#endif\n#ifdef PICKING\nuniform float objectId;\nvarying vec3 vPickingColor;\n#else\n#include common\n#include fog_pars_fragment\nvarying vec3 vViewPosition;\nvarying vec3 vColor;\nvarying vec3 vColor2;\nvarying float flag;\n#endif\nvoid main() {\n#include nearclip_fragment\n#include radiusclip_fragment\n#if defined( PICKING )\nif( opacity < 0.3 )\ndiscard;\ngl_FragColor = vec4( vPickingColor, objectId );\n#else\nvec3 outgoingLight = vec3( 0.0 );\nvec4 diffuseColor = vec4( diffuse, 1.0 );\nif ( flag < 0.0 ) {\ndiffuseColor.rgb *= vColor;\n} else {\ndiffuseColor.rgb *= vColor2;\n}\n#include alphatest_fragment\noutgoingLight = diffuseColor.rgb;\ngl_FragColor = vec4( outgoingLight, diffuseColor.a * opacity );\n#include premultiplied_alpha_fragment\n#include tonemapping_fragment\n#include encodings_fragment\n#include fog_fragment\n#endif\n}");var hw=Object.assign({linewidth:2},Kv),lw=Object.assign({linewidth:{uniform:!0}},Jv),pw=function(i){function t(t,e){void 0===e&&(e={}),i.call(this,t,e),this.parameterTypes=lw,this.vertexShader="WideLine.vert",this.fragmentShader="WideLine.frag",!t.color2&&t.color&&(t.color2=t.color),this.addUniforms({linewidth:{value:this.parameters.linewidth},resolution:{value:new Ze},projectionMatrixInverse:{value:new Ke}}),this.addAttributes({position1:{type:"v3",value:null},position2:{type:"v3",value:null},color2:{type:"c",value:null}}),this.setAttributes(t),this.makeMapping()}i&&(t.__proto__=i),(t.prototype=Object.create(i&&i.prototype)).constructor=t;var e={defaultParameters:{configurable:!0}};return e.defaultParameters.get=function(){return hw},Object.defineProperties(t.prototype,e),t}(lx);Xp.add("wideline",pw);var dw=function(a){function t(t,e,i){a.call(this,t,e,i),this.type="angle",this.parameters=Object.assign({atomTriple:{type:"hidden",rebuild:!0},vectorVisible:{type:"boolean",default:!0},arcVisible:{type:"boolean",default:!0},sectorVisible:{type:"boolean",default:!0}},this.parameters),this.init(i)}return a&&(t.__proto__=a),((t.prototype=Object.create(a&&a.prototype)).constructor=t).prototype.init=function(t){var e=t||{};e.side=al(e.side,"double"),e.opacity=al(e.opacity,.5),this.atomTriple=al(e.atomTriple,[]),this.arcVisible=al(e.arcVisible,!0),this.sectorVisible=al(e.sectorVisible,!0),this.vectorVisible=al(e.vectorVisible,!0),a.prototype.init.call(this,e)},t.prototype.createData=function(t){if(t.atomCount&&this.atomTriple.length){var e,i,r=function(d,t){for(var f=al((t=t||{}).angleStep,Math.PI/90),e=d.length/9,m=new Float32Array(e),g=new Float32Array(3*e),v=new Array(e),y=new Float32Array(6*e),b=new Float32Array(6*e),x=new Array(e),_=new Array(e),w=new Array(e),S=0,A=im(),M=im(),P=im(),E=im(),C=im(),T=im(),I=im(),R=im(),L=im(),i=function(t){var e=9*t;sm(A,d,e),sm(M,d,e+3),sm(P,d,e+6);var i=6*t;cm(A,y,i),cm(M,b,i),cm(M,y,i+3),cm(P,b,i+3),om(E,A,M),om(C,P,M),pm(E,E),pm(C,C),rm(T,E,C);var r=um(T),n=nm(E,C),o=m[t]=Math.atan2(r,n);v[t]=(Md*o).toFixed(1)+String.fromCharCode(176),0===um(T)&&(T[0]=1,T[1]=0,T[2]=0),rm(I,T,E),pm(I,I),tw(R,M,E,I,o/2),cm(R,g,3*t);var a=Math.ceil(o/f),s=new Float32Array(9*a);w[t]=s;var c=new Float32Array(3*a),u=new Float32Array(3*a);x[t]=c,_[t]=u,am(L,M,E);for(var h=function(t,e){var i=9*e,r=3*e;cm(M,s,i),cm(L,s,i+3),cm(L,c,r),tw(L,M,E,I,t),cm(L,s,i+6),cm(L,u,r)},l=0,p=f;p<o;p+=f)h(p,l),l++;h(o,l),S+=a},r=0;r<e;r++)i(r);for(var n=3*S,o=9*S,a=new Float32Array(n),s=new Float32Array(n),c=new Float32Array(o),u=0,h=0,l=0;l<e;l++){var p=x[l],O=_[l];Dd(p,a,0,h,p.length),Dd(O,s,0,h,O.length),h+=p.length;var D=w[l];Dd(D,c,0,u,D.length),u+=D.length}return{labelPosition:g,labelText:v,vectorPosition1:y,vectorPosition2:b,arcPosition1:a,arcPosition2:s,sectorPosition:c}}((e=t,i=this.atomTriple,function(e){for(var t=[],i=e.length/9,r=0;r<i;r++){for(var n=!0,o=r;o<r+3;o+=3)e[o]===e[o+3]&&e[o+1]===e[o+4]&&e[o+2]===e[o+5]&&(n=!1);n&&t.push(r)}var a=new Float32Array(9*t.length),s=0;return t.forEach(function(t){Dd(e,a,9*t,9*s,9),s++}),a}(Q_(e,i)))),n=this.n=r.labelPosition.length/3,o=new Li(this.labelColor);this.textBuffer=new uw({position:r.labelPosition,size:Td(n,this.labelSize),color:Id(n,o.r,o.g,o.b),text:r.labelText},this.getLabelBufferParams());var a=new Li(this.colorValue);return this.vectorBuffer=new pw(xm({position1:r.vectorPosition1,position2:r.vectorPosition2,color:Id(2*n,a.r,a.g,a.b),color2:Id(2*n,a.r,a.g,a.b)}),this.getBufferParams({linewidth:this.linewidth,visible:this.vectorVisible,opacity:this.lineOpacity})),this.arcLength=r.arcPosition1.length/3,this.arcBuffer=new pw(xm({position1:r.arcPosition1,position2:r.arcPosition2,color:Id(this.arcLength,a.r,a.g,a.b),color2:Id(this.arcLength,a.r,a.g,a.b)}),this.getBufferParams({linewidth:this.linewidth,visible:this.arcVisible,opacity:this.lineOpacity})),this.sectorLength=r.sectorPosition.length/3,this.sectorBuffer=new ey({position:r.sectorPosition,color:Id(this.sectorLength,a.r,a.g,a.b)},this.getBufferParams({visible:this.sectorVisible})),{bufferList:[this.textBuffer,this.vectorBuffer,this.arcBuffer,this.sectorBuffer]}}},t.prototype.updateData=function(t,e){a.prototype.updateData.call(this,t,e);var i={},r={},n={};if(t.color){var o=new Li(this.colorValue);i.color=i.color2=Id(2*this.n,o.r,o.g,o.b),r.color=r.color2=Id(this.arcLength,o.r,o.g,o.b),n.color=Id(this.sectorLength,o.r,o.g,o.b)}this.vectorBuffer.setAttributes(i),this.arcBuffer.setAttributes(r),this.sectorBuffer.setAttributes(n)},t.prototype.setParameters=function(t){return a.prototype.setParameters.call(this,t,{},!1),!t||void 0===t.vectorVisible&&void 0===t.arcVisible&&void 0===t.sectorVisible||this.setVisibility(this.visible),t&&t.lineOpacity&&(this.vectorBuffer.setParameters({opacity:t.lineOpacity}),this.arcBuffer.setParameters({opacity:t.lineOpacity})),t&&void 0!==t.opacity&&(this.vectorBuffer.setParameters({opacity:this.lineOpacity}),this.arcBuffer.setParameters({opacity:this.lineOpacity})),t&&t.linewidth&&(this.vectorBuffer.setParameters({linewidth:t.linewidth}),this.arcBuffer.setParameters({linewidth:t.linewidth})),this},t.prototype.setVisibility=function(t,e){return a.prototype.setVisibility.call(this,t,!0),this.vectorBuffer&&this.vectorBuffer.setVisibility(this.vectorVisible&&this.visible),this.arcBuffer&&this.arcBuffer.setVisibility(this.arcVisible&&this.visible),this.sectorBuffer&&this.sectorBuffer.setVisibility(this.sectorVisible&&this.visible),e||this.viewer.requestRender(),this},t}(J_);Gp.add("angle",dw);var fw=new Qe,mw=new Qe,gw=new Qe,vw=new Qe(0,1,0),yw=Object.assign({radialSegments:1,openEnded:!0},Kv);function bw(t){void 0===t&&(t={});var e=al(t.radialSegments,10),i=al(t.openEnded,!0),r=(new Ke).makeRotationX(Math.PI/2),n=new Hs(1,1,1,e,1,i);return n.applyMatrix(r),n}var xw=function(n){function t(t,e){void 0===e&&(e={}),n.call(this,function(t,e){void 0===e&&(e={});var i=bw(e),r=t.position1.length,n=i.attributes.position.array.length/3,o=r/3,a=new Float32Array(2*o*n);return Ld(o,n,0,a),Ld(o,n,o*n,a),{position:new Float32Array(2*r),color:new Float32Array(2*r),primitiveId:a,picking:t.picking}}(t,e),e,bw(e)),this.updateNormals=!0;var i=t.position1.length,r=t.radius.length;this.__center=new Float32Array(i),this._position=new Float32Array(2*i),this._color=new Float32Array(2*i),this._from=new Float32Array(2*i),this._to=new Float32Array(2*i),this._radius=new Float32Array(2*r),this.setAttributes(t,!0)}n&&(t.__proto__=n),(t.prototype=Object.create(n&&n.prototype)).constructor=t;var e={defaultParameters:{configurable:!0}};return e.defaultParameters.get=function(){return yw},t.prototype.applyPositionTransform=function(t,e,i){mw.fromArray(this._from,i),gw.fromArray(this._to,i),t.lookAt(mw,gw,vw);var r=this._radius[e];fw.set(r,r,mw.distanceTo(gw)),t.scale(fw)},t.prototype.setAttributes=function(t,e){void 0===t&&(t={});var i={};t.position1&&t.position2&&(Ed(t.position1,t.position2,this.__center),Ed(t.position1,this.__center,this._position),Ed(this.__center,t.position2,this._position,t.position1.length),this._from.set(t.position1),this._from.set(this.__center,t.position1.length),this._to.set(this.__center),this._to.set(t.position2,this.__center.length),i.position=this._position),t.color&&t.color2&&(this._color.set(t.color),this._color.set(t.color2,t.color.length),i.color=this._color),t.radius&&(this._radius.set(t.radius),this._radius.set(t.radius,t.radius.length),i.radius=this._radius),n.prototype.setAttributes.call(this,i,e)},Object.defineProperties(t.prototype,e),t}(nx);Hp.add("shader/CylinderImpostor.vert","\nattribute vec3 mapping;\nattribute vec3 position1;\nattribute vec3 position2;\nattribute float radius;\nvarying vec3 axis;\nvarying vec4 base_radius;\nvarying vec4 end_b;\nvarying vec3 U;\nvarying vec3 V;\nvarying vec4 w;\n#ifdef PICKING\n#include unpack_color\nattribute float primitiveId;\nvarying vec3 vPickingColor;\n#else\nattribute vec3 color2;\nvarying vec3 vColor1;\nvarying vec3 vColor2;\n#endif\nuniform mat4 modelViewMatrixInverse;\nuniform float ortho;\n#include matrix_scale\nvoid main(){\n#ifdef PICKING\nvPickingColor = unpackColor( primitiveId );\n#else\nvColor1 = color;\nvColor2 = color2;\n#endif\nbase_radius.w = radius * matrixScale( modelViewMatrix );\nvec3 center = position;\nvec3 dir = normalize( position2 - position1 );\nfloat ext = length( position2 - position1 ) / 2.0;\nvec3 cam_dir;\nif( ortho == 0.0 ){\ncam_dir = ( modelViewMatrixInverse * vec4( 0, 0, 0, 1 ) ).xyz - center;\n}else{\ncam_dir = ( modelViewMatrixInverse * vec4( 0, 0, 1, 0 ) ).xyz;\n}\ncam_dir = normalize( cam_dir );\nvec3 ldir;\nfloat b = dot( cam_dir, dir );\nend_b.w = b;\nif( b < 0.0 )\nldir = -ext * dir;\nelse\nldir = ext * dir;\nvec3 left = normalize( cross( cam_dir, ldir ) );\nleft = radius * left;\nvec3 up = radius * normalize( cross( left, ldir ) );\naxis = normalize( normalMatrix * ldir );\nU = normalize( normalMatrix * up );\nV = normalize( normalMatrix * left );\nvec4 base4 = modelViewMatrix * vec4( center - ldir, 1.0 );\nbase_radius.xyz = base4.xyz / base4.w;\nvec4 top_position = modelViewMatrix * vec4( center + ldir, 1.0 );\nvec4 end4 = top_position;\nend_b.xyz = end4.xyz / end4.w;\nw = modelViewMatrix * vec4(\ncenter + mapping.x*ldir + mapping.y*left + mapping.z*up, 1.0\n);\ngl_Position = projectionMatrix * w;\ngl_Position.z = 0.99;\n}"),Hp.add("shader/CylinderImpostor.frag","#define STANDARD\n#define IMPOSTOR\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 interiorColor;\nuniform float interiorDarkening;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\nuniform float clipNear;\nuniform mat4 projectionMatrix;\nuniform float ortho;\nvarying vec3 axis;\nvarying vec4 base_radius;\nvarying vec4 end_b;\nvarying vec3 U;\nvarying vec3 V;\nvarying vec4 w;\n#ifdef PICKING\nuniform float objectId;\nvarying vec3 vPickingColor;\n#else\nvarying vec3 vColor1;\nvarying vec3 vColor2;\n#include common\n#include fog_pars_fragment\n#include bsdfs\n#include lights_pars_begin\n#include lights_physical_pars_fragment\n#endif\nbool interior = false;\nfloat distSq3( vec3 v3a, vec3 v3b ){\nreturn (\n( v3a.x - v3b.x ) * ( v3a.x - v3b.x ) +\n( v3a.y - v3b.y ) * ( v3a.y - v3b.y ) +\n( v3a.z - v3b.z ) * ( v3a.z - v3b.z )\n);\n}\nfloat calcDepth( in vec3 cameraPos ){\nvec2 clipZW = cameraPos.z * projectionMatrix[2].zw + projectionMatrix[3].zw;\nreturn 0.5 + 0.5 * clipZW.x / clipZW.y;\n}\nfloat calcClip( vec3 cameraPos ){\nreturn dot( vec4( cameraPos, 1.0 ), vec4( 0.0, 0.0, 1.0, clipNear - 0.5 ) );\n}\nvoid main(){\nvec3 point = w.xyz / w.w;\nvec3 base = base_radius.xyz;\nfloat vRadius = base_radius.w;\nvec3 end = end_b.xyz;\nfloat b = end_b.w;\nvec3 end_cyl = end;\nvec3 surface_point = point;\nvec3 ray_target = surface_point;\nvec3 ray_origin = vec3(0.0);\nvec3 ray_direction = mix(normalize(ray_origin - ray_target), vec3(0.0, 0.0, 1.0), ortho);\nmat3 basis = mat3( U, V, axis );\nvec3 diff = ray_target - 0.5 * (base + end_cyl);\nvec3 P = diff * basis;\nfloat dz = dot( axis, ray_direction );\nfloat radius2 = vRadius*vRadius;\nvec3 D = vec3(dot(U, ray_direction),\ndot(V, ray_direction),\ndz);\nfloat a0 = P.x*P.x + P.y*P.y - radius2;\nfloat a1 = P.x*D.x + P.y*D.y;\nfloat a2 = D.x*D.x + D.y*D.y;\nfloat d = a1*a1 - a0*a2;\nif (d < 0.0)\ndiscard;\nfloat dist = (-a1 + sqrt(d)) / a2;\nvec3 new_point = ray_target + dist * ray_direction;\nvec3 tmp_point = new_point - base;\nvec3 _normal = normalize( tmp_point - axis * dot(tmp_point, axis) );\nray_origin = mix( ray_origin, surface_point, ortho );\nfloat front_cap_test = dot( tmp_point, axis );\nfloat end_cap_test = dot((new_point - end_cyl), axis);\n#ifndef CAP\nvec3 new_point2 = ray_target + ( (-a1 - sqrt(d)) / a2 ) * ray_direction;\nvec3 tmp_point2 = new_point2 - base;\n#endif\nif (front_cap_test < 0.0)\n{\nfloat dNV = dot(-axis, ray_direction);\nif (dNV < 0.0)\ndiscard;\nfloat near = dot(-axis, (base)) / dNV;\nvec3 front_point = ray_direction * near + ray_origin;\nif (dot(front_point - base, front_point-base) > radius2)\ndiscard;\n#ifdef CAP\nnew_point = front_point;\n_normal = axis;\n#else\nnew_point = ray_target + ( (-a1 - sqrt(d)) / a2 ) * ray_direction;\ndNV = dot(-axis, ray_direction);\nnear = dot(axis, end_cyl) / dNV;\nnew_point2 = ray_direction * near + ray_origin;\nif (dot(new_point2 - end_cyl, new_point2-base) < radius2)\ndiscard;\ninterior = true;\n#endif\n}\nif( end_cap_test > 0.0 )\n{\nfloat dNV = dot(axis, ray_direction);\nif (dNV < 0.0)\ndiscard;\nfloat near = dot(axis, end_cyl) / dNV;\nvec3 end_point = ray_direction * near + ray_origin;\nif( dot(end_point - end_cyl, end_point-base) > radius2 )\ndiscard;\n#ifdef CAP\nnew_point = end_point;\n_normal = axis;\n#else\nnew_point = ray_target + ( (-a1 - sqrt(d)) / a2 ) * ray_direction;\ndNV = dot(-axis, ray_direction);\nnear = dot(-axis, (base)) / dNV;\nnew_point2 = ray_direction * near + ray_origin;\nif (dot(new_point2 - base, new_point2-base) < radius2)\ndiscard;\ninterior = true;\n#endif\n}\ngl_FragDepthEXT = calcDepth( new_point );\n#ifdef NEAR_CLIP\nif( calcClip( new_point ) > 0.0 ){\ndist = (-a1 - sqrt(d)) / a2;\nnew_point = ray_target + dist * ray_direction;\nif( calcClip( new_point ) > 0.0 )\ndiscard;\ninterior = true;\ngl_FragDepthEXT = calcDepth( new_point );\nif( gl_FragDepthEXT >= 0.0 ){\ngl_FragDepthEXT = max( 0.0, calcDepth( vec3( - ( clipNear - 0.5 ) ) ) + ( 0.0000001 / vRadius ) );\n}\n}else if( gl_FragDepthEXT <= 0.0 ){\ndist = (-a1 - sqrt(d)) / a2;\nnew_point = ray_target + dist * ray_direction;\ninterior = true;\ngl_FragDepthEXT = calcDepth( new_point );\nif( gl_FragDepthEXT >= 0.0 ){\ngl_FragDepthEXT = 0.0 + ( 0.0000001 / vRadius );\n}\n}\n#else\nif( gl_FragDepthEXT <= 0.0 ){\ndist = (-a1 - sqrt(d)) / a2;\nnew_point = ray_target + dist * ray_direction;\ninterior = true;\ngl_FragDepthEXT = calcDepth( new_point );\nif( gl_FragDepthEXT >= 0.0 ){\ngl_FragDepthEXT = 0.0 + ( 0.0000001 / vRadius );\n}\n}\n#endif\nif (gl_FragDepthEXT < 0.0)\ndiscard;\nif (gl_FragDepthEXT > 1.0)\ndiscard;\n#ifdef PICKING\nif( opacity < 0.3 )\ndiscard;\ngl_FragColor = vec4( vPickingColor, objectId );\n#else\nvec3 vViewPosition = -new_point;\nvec3 vNormal = _normal;\nvec3 vColor;\nif( distSq3( new_point, end_cyl ) < distSq3( new_point, base ) ){\nif( b < 0.0 ){\nvColor = vColor1;\n}else{\nvColor = vColor2;\n}\n}else{\nif( b > 0.0 ){\nvColor = vColor1;\n}else{\nvColor = vColor2;\n}\n}\nvec4 diffuseColor = vec4( diffuse, opacity );\nReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\nvec3 totalEmissiveLight = emissive;\n#include color_fragment\n#include roughnessmap_fragment\n#include metalnessmap_fragment\nvec3 normal = normalize( vNormal );\n#include lights_physical_fragment\n#include lights_fragment_begin\n#include lights_fragment_end\nvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveLight;\nif( interior ){\n#ifdef USE_INTERIOR_COLOR\noutgoingLight.xyz = interiorColor;\n#else\n#ifdef DIFFUSE_INTERIOR\noutgoingLight.xyz = vColor;\n#endif\n#endif\noutgoingLight.xyz *= 1.0 - interiorDarkening;\n}\ngl_FragColor = vec4( outgoingLight, diffuseColor.a );\n#include premultiplied_alpha_fragment\n#include tonemapping_fragment\n#include encodings_fragment\n#include fog_fragment\n#endif\n}");var _w=new Float32Array([-1,1,-1,-1,-1,-1,1,1,-1,1,1,1,1,-1,-1,1,-1,1]),ww=new Uint16Array([0,1,2,1,4,2,2,4,3,4,5,3]),Sw=function(i){function t(t,e){void 0===e&&(e={}),i.call(this,"v3",t,e)}i&&(t.__proto__=i),(t.prototype=Object.create(i&&i.prototype)).constructor=t;var e={mapping:{configurable:!0},mappingIndices:{configurable:!0},mappingIndicesSize:{configurable:!0},mappingSize:{configurable:!0},mappingItemSize:{configurable:!0}};return e.mapping.get=function(){return _w},e.mappingIndices.get=function(){return ww},e.mappingIndicesSize.get=function(){return 12},e.mappingSize.get=function(){return 6},e.mappingItemSize.get=function(){return 3},Object.defineProperties(t.prototype,e),t}(cx),Aw=Object.assign({openEnded:!1},Kv),Mw=Object.assign({openEnded:{updateShader:!0}},Jv),Pw=function(i){function t(t,e){void 0===e&&(e={}),i.call(this,t,e),this.parameterTypes=Mw,this.isImpostor=!0,this.vertexShader="CylinderImpostor.vert",this.fragmentShader="CylinderImpostor.frag",this.addUniforms({modelViewMatrixInverse:{value:new Ke},ortho:{value:0}}),this.addAttributes({position1:{type:"v3",value:null},position2:{type:"v3",value:null},color2:{type:"c",value:null},radius:{type:"f",value:null}}),this.setAttributes(t),this.makeMapping()}i&&(t.__proto__=i),(t.prototype=Object.create(i&&i.prototype)).constructor=t;var e={defaultParameters:{configurable:!0}};return e.defaultParameters.get=function(){return Aw},t.prototype.getDefines=function(t){var e=i.prototype.getDefines.call(this,t);return this.parameters.openEnded||(e.CAP=1),e},Object.defineProperties(t.prototype,e),t}(Sw),Ew=(Object.assign({disableImpostor:!1},yw,Aw),function(t,e){return void 0===e&&(e={}),!t.color2&&t.color&&(t.color2=t.color),!Dp||e&&e.disableImpostor?new xw(t,e):new Pw(t,e)});Xp.add("cylinder",Ew);var Cw=function(r){function t(t,e,i){r.call(this,t,e,i),this.type="axes",this.parameters=Object.assign({radiusSize:{type:"number",precision:3,max:10,min:.001},sphereDetail:!0,radialSegments:!0,disableImpostor:!0,showAxes:{type:"boolean",rebuild:!0},showBox:{type:"boolean",rebuild:!0}},this.parameters,{assembly:null}),this.init(i)}return r&&(t.__proto__=r),((t.prototype=Object.create(r&&r.prototype)).constructor=t).prototype.init=function(t){var e=t||{};e.radiusSize=al(e.radiusSize,.5),e.colorValue=al(e.colorValue,"lightgreen"),e.useInteriorColor=al(e.useInteriorColor,!0),this.showAxes=al(e.showAxes,!0),this.showBox=al(e.showBox,!1),r.prototype.init.call(this,e)},t.prototype.getPrincipalAxes=function(){var t,e=this.getAssembly();return e&&(t=e.partList[0].getSelection()),this.structureView.getPrincipalAxes(t)},t.prototype.getAxesData=function(t){var r=this.getPrincipalAxes(t),e=new Li(this.colorValue),i=0,n=0;this.showAxes&&(i+=6,n+=3),this.showBox&&(i+=8,n+=12);var o=new Float32Array(3*i),a=Id(i,e.r,e.g,e.b),s=Td(i,this.radiusSize),c=new Float32Array(3*n),u=new Float32Array(3*n),h=Id(n,e.r,e.g,e.b),l=Td(n,this.radiusSize),p=0;if(this.showAxes){var d=function(t,e){t.toArray(o,2*p),e.toArray(o,2*p+3),t.toArray(c,p),e.toArray(u,p),p+=3};d(r.begA,r.endA),d(r.begB,r.endB),d(r.begC,r.endC)}if(this.showBox){var f=new Qe,m=r.getProjectedScaleForAtoms(t),g=m.d1a,v=m.d2a,y=m.d3a,b=m.d1b,x=m.d2b,_=m.d3b,w=2*p,S=function(t,e,i){f.copy(r.center).addScaledVector(r.normVecA,t).addScaledVector(r.normVecB,e).addScaledVector(r.normVecC,i),f.toArray(o,w),w+=3};S(g,v,y),S(g,v,_),S(g,x,_),S(g,x,y),S(b,x,_),S(b,x,y),S(b,v,y),S(b,v,_);var A=p,M=function(t,e){f.fromArray(o,2*p+3*t).toArray(c,A),f.fromArray(o,2*p+3*e).toArray(u,A),A+=3};M(0,1),M(0,3),M(0,6),M(1,2),M(1,7),M(2,3),M(2,4),M(3,5),M(4,5),M(4,7),M(5,6),M(6,7)}var P=new Kg(r);return{vertex:{position:o,color:a,radius:s,picking:P},edge:{position1:c,position2:u,color:h,color2:h,radius:l,picking:P}}},t.prototype.create=function(){var t=this.getAxesData(this.structureView);this.sphereBuffer=new dx(t.vertex,this.getBufferParams({sphereDetail:this.sphereDetail,disableImpostor:this.disableImpostor,dullInterior:!0})),this.cylinderBuffer=new Ew(t.edge,this.getBufferParams({openEnded:!0,radialSegments:this.radialSegments,disableImpostor:this.disableImpostor,dullInterior:!0})),this.dataList.push({sview:this.structureView,bufferList:[this.sphereBuffer,this.cylinderBuffer]})},t.prototype.updateData=function(t,e){var i=this.getAxesData(e.sview),r={},n={};t&&!t.position||(r.position=i.vertex.position,n.position1=i.edge.position1,n.position2=i.edge.position2),t&&!t.color||(r.color=i.vertex.color,n.color=i.edge.color,n.color2=i.edge.color),t&&!t.radius||(r.radius=i.vertex.radius,n.radius=i.edge.radius),this.sphereBuffer.setAttributes(r),this.cylinderBuffer.setAttributes(n)},t}(K_);Gp.add("axes",Cw);var Tw=function(r){function t(t,e,i){r.call(this,t,e,i),this.type="ball+stick",this.parameters=Object.assign({sphereDetail:!0,radialSegments:!0,openEnded:!0,disableImpostor:!0,aspectRatio:{type:"number",precision:1,max:10,min:1},lineOnly:{type:"boolean",rebuild:!0},cylinderOnly:{type:"boolean",rebuild:!0},multipleBond:{type:"select",rebuild:!0,options:{off:"off",symmetric:"symmetric",offset:"offset"}},bondScale:{type:"number",precision:2,max:1,min:.01},bondSpacing:{type:"number",precision:2,max:2,min:.5},linewidth:{type:"integer",max:50,min:1,buffer:!0}},this.parameters),this.init(i)}return r&&(t.__proto__=r),((t.prototype=Object.create(r&&r.prototype)).constructor=t).prototype.init=function(t){var e=t||{};e.radiusType=al(e.radiusType,"size"),e.radiusSize=al(e.radiusSize,.15),e.useInteriorColor=al(e.useInteriorColor,!0),this.aspectRatio=al(e.aspectRatio,2),this.lineOnly=al(e.lineOnly,!1),this.cylinderOnly=al(e.cylinderOnly,!1),this.multipleBond=al(e.multipleBond,"off"),this.bondSpacing=al(e.bondSpacing,1),this.bondScale=al(e.bondScale,.4),this.linewidth=al(e.linewidth,2),r.prototype.init.call(this,e)},t.prototype.getAtomRadius=function(t){return this.aspectRatio*r.prototype.getAtomRadius.call(this,t)},t.prototype.getAtomParams=function(t,e){var i=r.prototype.getAtomParams.call(this,t,e);return i.radiusParams.scale*=this.aspectRatio,i},t.prototype.getAtomData=function(t,e,i){return t.getAtomData(this.getAtomParams(e,i))},t.prototype.getBondParams=function(t,e){return e=Object.assign({multipleBond:this.multipleBond,bondSpacing:this.bondSpacing,bondScale:this.bondScale},e),r.prototype.getBondParams.call(this,t,e)},t.prototype.getBondData=function(t,e,i){return t.getBondData(this.getBondParams(e,i))},t.prototype.createData=function(t){var e=[];if(this.lineOnly)this.lineBuffer=new pw(this.getBondData(t,{position:!0,color:!0,picking:!0}),this.getBufferParams({linewidth:this.linewidth})),e.push(this.lineBuffer);else{var i=new Ew(this.getBondData(t),this.getBufferParams({openEnded:this.openEnded,radialSegments:this.radialSegments,disableImpostor:this.disableImpostor,dullInterior:!0}));if(e.push(i),!this.cylinderOnly){var r=new dx(this.getAtomData(t),this.getBufferParams({sphereDetail:this.sphereDetail,disableImpostor:this.disableImpostor,dullInterior:!0}));e.push(r)}}return{bufferList:e}},t.prototype.updateData=function(t,e){"off"!==this.multipleBond&&t&&t.radius&&(t.position=!0);var i=this.getBondData(e.sview,t);if(this.lineOnly){var r={};t&&!t.position||(r.position1=i.position1,r.position2=i.position2),t&&!t.color||(r.color=i.color,r.color2=i.color2),e.bufferList[0].setAttributes(r)}else{var n={};if(t&&!t.position||(n.position1=i.position1,n.position2=i.position2),t&&!t.color||(n.color=i.color,n.color2=i.color2),t&&!t.radius||(n.radius=i.radius),e.bufferList[0].setAttributes(n),!this.cylinderOnly){var o=this.getAtomData(e.sview,t),a={};t&&!t.position||(a.position=o.position),t&&!t.color||(a.color=o.color),t&&!t.radius||(a.radius=o.radius),e.bufferList[1].setAttributes(a)}}},t.prototype.setParameters=function(t){void 0===t&&(t={});var e=!1,i={};return(t.aspectRatio||t.bondSpacing||t.bondScale)&&(i.radius=!0,Dp&&!this.disableImpostor||(e=!0)),r.prototype.setParameters.call(this,t,i,e),this},t}(K_);Gp.add("ball+stick",Tw);var Iw=function(r){function t(t,e,i){r.call(this,t,e,i),this.type="backbone",this.parameters=Object.assign({},this.parameters,{multipleBond:null,bondSpacing:null}),this.init(i)}return r&&(t.__proto__=r),((t.prototype=Object.create(r&&r.prototype)).constructor=t).prototype.init=function(t){var e=t||{};e.aspectRatio=al(e.aspectRatio,1),e.radiusSize=al(e.radiusSize,.25),r.prototype.init.call(this,e)},t.prototype.getAtomRadius=function(t){return t.isTrace()?r.prototype.getAtomRadius.call(this,t):0},t.prototype.getAtomData=function(t,e,i){return t.getBackboneAtomData(this.getAtomParams(e,i))},t.prototype.getBondData=function(t,e,i){return t.getBackboneBondData(this.getBondParams(e,i))},t}(Tw);Gp.add("backbone",Iw);var Rw=function(r){function t(t,e,i){r.call(this,t,e,i),this.type="base",this.parameters=Object.assign({},this.parameters,{multipleBond:null,bondSpacing:null})}return r&&(t.__proto__=r),((t.prototype=Object.create(r&&r.prototype)).constructor=t).prototype.init=function(t){var e=t||{};e.aspectRatio=al(e.aspectRatio,1),e.radiusSize=al(e.radiusSize,.3),r.prototype.init.call(this,e)},t.prototype.getAtomData=function(t,e,i){return t.getRungAtomData(this.getAtomParams(e,i))},t.prototype.getBondData=function(t,e,i){var r=this.getBondParams(e,i);return r.colorParams.rung=!0,t.getRungBondData(r)},t}(Tw);function Lw(M,f){var g=1/M,l=1e-4,v=new Qe,y=new Qe;function b(t,e,i,r,n,o){o.x=Bl(t.x,e.x,i.x,r.x,n,f),o.y=Bl(t.y,e.y,i.y,r.y,n,f),o.z=Bl(t.z,e.z,i.z,r.z,n,f)}function s(t,e,i,r,n,o){for(var a=0;a<M;++a){s=t,c=e,u=i,h=r,l=g*a,(p=n)[(d=o+3*a)+0]=Bl(s.x,c.x,u.x,h.x,l,f),p[d+1]=Bl(s.y,c.y,u.y,h.y,l,f),p[d+2]=Bl(s.z,c.z,u.z,h.z,l,f)}var s,c,u,h,l,p,d}function o(t,e,i,r,n,o){for(var a=0;a<M;++a){var s=g*a,c=s-l,u=s+l,h=o+3*a;c<0&&(c=0),1<u&&(u=1),b(t,e,i,r,c,v),b(t,e,i,r,u,y),y.sub(v).normalize(),y.toArray(n,h)}}function c(t,e,i,r,n){for(var o=e.next(),a=e.next(),s=e.next(),c=e.size,u=c-1,h=r||0,l=0;l<u;++l)t(o,o=a,a=s,s=e.next(),i,h),h+=3*M;n&&(t(e.get(c-2),o=e.get(c-1),a=e.get(0),s=e.get(1),i,h),h+=3*M)}this.getPosition=function(t,e,i,r){t.reset(),c(s,t,e,i,r);var n=t.size-1,o=n*M*3;r&&(o+=3*M);var a=t.get(r?0:n);e[o]=a.x,e[o+1]=a.y,e[o+2]=a.z},this.getTangent=function(t,e,i,r){t.reset(),c(o,t,e,i,r);var n=(t.size-1)*M*3;r&&(n+=3*M),Dd(e,e,n-3,n,3)};var x=new Qe,_=new Qe,P=new Qe,E=new Qe,C=Math.ceil(M/2);function T(t,e,i,r,n,o,a,s,c,u,h,l,p){for(var d=0;d<M;++d){var f=l+3*d;p&&(f+=3*C);var m=g*d;b(t,e,i,r,m,v),b(n,o,a,s,m,y),x.subVectors(y,v).normalize(),_.fromArray(c,f),E.crossVectors(x,_).normalize(),E.toArray(h,f),P.crossVectors(_,E).normalize(),P.toArray(u,f)}}function u(t,e,i,r,n){for(var o=0;o<M;++o){var a=n+3*o;t.copy(P),_.fromArray(e,a),E.crossVectors(t,_).normalize(),E.toArray(r,a),P.crossVectors(_,E).normalize(),P.toArray(i,a)}}function h(t,e,i,r,n){var o;for(o=0;o<C;++o)i(t,r,n+3*o);for(o=C;o<M;++o)i(e,r,n+3*o)}function p(t,e,i,r,n){var o;for(o=0;o<C;++o)r[n+o]=i(t);for(o=C;o<M;++o)r[n+o]=i(e)}function d(t,e,i,r,n){for(var o=i(t),a=i(e),s=0;s<M;++s){var c=s/M;r[n+s]=(1-c)*o+c*a}}this.getNormal=function(t,e,i,r,n,o){P.set(0,0,1);for(var a=t-1,s=n||0,c=0;c<a;++c)u(x,e,i,r,s),s+=3*M;o&&(u(x,e,i,r,s),s+=3*M),E.toArray(r,s),P.toArray(i,s)},this.getNormalDir=function(t,e,i,r,n,o,a,s){t.reset(),e.reset();var c=new Qe,u=new Qe,h=new Qe,l=new Qe,p=new Qe,d=(new Qe).copy(t.next()),f=(new Qe).copy(t.next()),m=(new Qe).copy(t.next()),g=new Qe,v=(new Qe).copy(e.next()),y=(new Qe).copy(e.next()),b=(new Qe).copy(e.next());P.set(0,0,1);for(var x=t.size,_=x-1,w=o||0,S=0;S<_;++S)p.copy(d),d.copy(f),f.copy(m),m.copy(t.next()),g.copy(v),v.copy(y),y.copy(b),b.copy(e.next()),0===S?(c.subVectors(g,p),u.subVectors(v,d),c.dot(u)<0&&(u.multiplyScalar(-1),v.addVectors(d,u)),h.subVectors(y,f),u.dot(h)<0&&(h.multiplyScalar(-1),y.addVectors(f,h))):h.copy(l),l.subVectors(b,m),h.dot(l)<0&&(l.multiplyScalar(-1),b.addVectors(m,l)),T(p,d,f,m,g,v,y,b,i,r,n,w,s),w+=3*M;if(a&&(p.copy(t.get(x-2)),d.copy(t.get(x-1)),f.copy(t.get(0)),m.copy(t.get(1)),g.copy(e.get(x-2)),v.copy(e.get(x-1)),y.copy(e.get(0)),b.copy(e.get(1)),h.copy(l),l.subVectors(b,m),h.dot(l)<0&&(l.multiplyScalar(-1),b.addVectors(m,l)),T(p,d,f,m,g,v,y,b,i,r,n,w,s),w+=3*M),s){E.fromArray(n,3*C),P.fromArray(r,3*C);for(var A=0;A<C;++A)E.toArray(n,3*A),P.toArray(r,3*A)}else E.toArray(n,w),P.toArray(r,w)},this.getColor=function(t,e,i,r,n){t.reset(),t.next();for(var o=t.next(),a=t.size,s=a-1,c=r||0,u=0;u<s;++u)h(o,o=t.next(),e,i,c),c+=3*M;n&&(h(t.get(a-1),o=t.get(0),e,i,c),c+=3*M),i[c]=i[c-3],i[c+1]=i[c-2],i[c+2]=i[c-1]},this.getPicking=function(t,e,i,r,n){t.reset(),t.next();for(var o=t.next(),a=t.size,s=a-1,c=r||0,u=0;u<s;++u)p(o,o=t.next(),e,i,c),c+=M;n&&(p(t.get(a-1),o=t.get(0),e,i,c),c+=M),i[c]=i[c-1]},this.getSize=function(t,e,i,r,n){t.reset(),t.next();for(var o=t.next(),a=t.size,s=a-1,c=r||0,u=0;u<s;++u)d(o,o=t.next(),e,i,c),c+=M;n&&(d(t.get(a-1),o=t.get(0),e,i,c),c+=M),i[c]=i[c-1]}}function Ow(t,e){this.polymer=t,this.size=t.residueCount;var i=e||{};this.directional=i.directional||!1,this.positionIterator=i.positionIterator||!1,this.subdiv=i.subdiv||1,this.smoothSheet=i.smoothSheet||!1,i.tension?this.tension=i.tension:this.tension=this.polymer.isNucleic()?.5:.9,this.interpolator=new Lw(this.subdiv,this.tension)}Gp.add("base",Rw),Ow.prototype={constructor:Ow,getAtomIterator:function(r,n){var o=this.polymer,t=o.structure,a=o.residueCount,s=0,e=-1,c=[t.getAtomProxy(),t.getAtomProxy(),t.getAtomProxy(),t.getAtomProxy()],u=[new Qe,new Qe,new Qe,new Qe];var h=t.getAtomProxy(),l=t.getAtomProxy();return{size:a,next:function(){var t=this.get(e);return e+=1,t},get:function(t){var e=c[s%4];if(e.index=o.getAtomIndexByType(t,r),n&&0<t&&t<a&&"e"===e.sstruc){var i=u[s%4];return h.index=o.getAtomIndexByType(t+1,r),l.index=o.getAtomIndexByType(t-1,r),i.addVectors(h,l).add(e).add(e).multiplyScalar(.25),s+=1,i}return s+=1,e},reset:function(){s=0,e=-1}}},getSubdividedColor:function(t){var e=this.subdiv,i=this.polymer,r=(i.residueCount-1)*e*3+3;i.isCyclic&&(r+=3*e);var n=new Float32Array(r),o=this.getAtomIterator("trace"),a=t||{};a.structure=i.structure;var s=Up.getScheme(a);return this.interpolator.getColor(o,function(t,e,i){s.atomColorToArray(t,e,i)},n,0,i.isCyclic),{color:n}},getSubdividedPicking:function(){var t=this.subdiv,e=this.polymer,i=(e.residueCount-1)*t+1;e.isCyclic&&(i+=t);var r=e.structure,n=this.getAtomIterator("trace"),o=new Float32Array(i);return this.interpolator.getPicking(n,function(t){return t.index},o,0,e.isCyclic),{picking:new Zg(o,r)}},getSubdividedPosition:function(){return{position:this.getPosition()}},getSubdividedOrientation:function(){var t=this.getTangent(),e=this.getNormals(t);return{tangent:t,normal:e.normal,binormal:e.binormal}},getSubdividedSize:function(t){var e=this.subdiv,i=this.polymer,r=(i.residueCount-1)*e+1;i.isCyclic&&(r+=e);var n=new Float32Array(r),o=this.getAtomIterator("trace"),a=new Cy(t);return this.interpolator.getSize(o,function(t){return a.atomRadius(t)},n,0,i.isCyclic),{size:n}},getPosition:function(){var t=this.subdiv,e=this.polymer,i=(e.residueCount-1)*t*3+3;e.isCyclic&&(i+=3*t);var r=new Float32Array(i),n=this.positionIterator||this.getAtomIterator("trace",this.smoothSheet);return this.interpolator.getPosition(n,r,0,e.isCyclic),r},getTangent:function(){var t=this.subdiv,e=this.polymer,i=(this.size-1)*t*3+3;e.isCyclic&&(i+=3*t);var r=new Float32Array(i),n=this.positionIterator||this.getAtomIterator("trace",this.smoothSheet);return this.interpolator.getTangent(n,r,0,e.isCyclic),r},getNormals:function(t){var e=this.subdiv,i=this.polymer,r=i.isProtein(),n=this.size,o=(n-1)*e*3+3;i.isCyclic&&(o+=3*e);var a=new Float32Array(o),s=new Float32Array(o);if(this.directional&&!this.polymer.isCg()){var c=this.getAtomIterator("direction1"),u=this.getAtomIterator("direction2");this.interpolator.getNormalDir(c,u,t,a,s,0,i.isCyclic,r)}else this.interpolator.getNormal(n,t,a,s,0,i.isCyclic,r);return{normal:a,binormal:s}}};var Dw=new Qe,kw=new Qe,Bw=Object.assign({radialSegments:4,capped:!1,aspectRatio:1},Kv);var Nw=function(i){function t(t,e){void 0===e&&(e={}),i.call(this,function(t,e){void 0===e&&(e={});var i=al(e.radialSegments,4),r=al(e.capped,!1),n=r?i:0,o=r?i-2:0,a=t.position.length/3,s=a*i*3+2*n*3,c=2*(a-1)*i*3+2*o*3;return{position:new Float32Array(s),color:new Float32Array(s),index:bl(c,s/3),normal:new Float32Array(s),picking:t.picking}}(t,e),e),this.capVertices=this.parameters.capped?this.parameters.radialSegments:0,this.capTriangles=this.parameters.capped?this.parameters.radialSegments-2:0,this.size2=t.position.length/3,t.primitiveId=Rd(this.size2),this.setAttributes(t),this.makeIndex()}i&&(t.__proto__=i),(t.prototype=Object.create(i&&i.prototype)).constructor=t;var e={defaultParameters:{configurable:!0}};return e.defaultParameters.get=function(){return Bw},t.prototype.setAttributes=function(t){void 0===t&&(t={});var e,i,r,n,o,a,s,c,u,h,l,p,d,f=this.parameters.aspectRatio,m=this.size2,g=m-1,v=this.parameters.radialSegments,y=this.geometry.attributes;t.position&&(e=t.position,i=t.normal,r=t.binormal,n=t.tangent,a=t.size,c=y.position.array,h=y.normal.array,y.position.needsUpdate=!0,y.normal.needsUpdate=!0),t.color&&(o=t.color,u=y.color.array,y.color.needsUpdate=!0),t.primitiveId&&(s=t.primitiveId,l=y.primitiveId.array,y.primitiveId.needsUpdate=!0);var b=0,x=0,_=0,w=0,S=0,A=0,M=0,P=0,E=0,C=0,T=[],I=[],R=[],L=[],O=[],D=[];if(e)for(var k=0;k<v;++k){var B=k/v*2*Math.PI;T[k]=f*Math.cos(B),I[k]=Math.sin(B),R[k]=f*Math.cos(B-.01),L[k]=Math.sin(B-.01),O[k]=f*Math.cos(B+.01),D[k]=Math.sin(B+.01)}for(var N=0;N<m;++N){d=(p=3*N)*v,e&&n&&i&&r&&a&&(Dw.set(n[p],n[p+1],n[p+2]),x=i[p],_=i[p+1],w=i[p+2],S=r[p],A=r[p+1],M=r[p+2],P=e[p],E=e[p+1],C=e[p+2],b=a[N]);for(var F=0;F<v;++F){var z=d+3*F;if(e){var U=-b*T[F],j=b*I[F],G=-b*R[F],V=b*L[F],H=-b*O[F],$=b*D[F];c[z]=P+U*x+j*S,c[z+1]=E+U*_+j*A,c[z+2]=C+U*w+j*M,kw.set(H*x+$*S-(G*x+V*S),H*_+$*A-(G*_+V*A),H*w+$*M-(G*w+V*M)).cross(Dw),h[z]=kw.x,h[z+1]=kw.y,h[z+2]=kw.z}o&&(u[z]=o[p],u[z+1]=o[p+1],u[z+2]=o[p+2]),s&&(l[N*v+F]=s[N])}}d=3*m*v;for(var W=p=0;W<v;++W){var X=p+3*W,q=d+3*W;e&&n&&(c[q]=c[X],c[q+1]=c[X+1],c[q+2]=c[X+2],h[q]=n[p],h[q+1]=n[p+1],h[q+2]=n[p+2]),o&&(u[q]=u[X],u[q+1]=u[X+1],u[q+2]=u[X+2]),s&&(l[m*v+W]=l[0+W])}p=3*(m-1)*v,d=3*(m+1)*v;for(var Y=0;Y<v;++Y){var Z=p+3*Y,K=d+3*Y;e&&n&&(c[K]=c[Z],c[K+1]=c[Z+1],c[K+2]=c[Z+2],h[K]=n[3*g],h[K+1]=n[3*g+1],h[K+2]=n[3*g+2]),o&&(u[K]=u[Z],u[K+1]=u[Z+1],u[K+2]=u[Z+2]),s&&(l[(m+1)*v+Y]=l[(m-1)*v+Y])}},t.prototype.makeIndex=function(){for(var t,e,i=this.geometry.getIndex().array,r=this.size2,n=r-1,o=this.capTriangles,a=this.parameters.radialSegments,s=this.parameters.radialSegments+1,c=0;c<n;++c)for(var u=c*a*3*2,h=c*a,l=(c+1)*a,p=0;p<a;++p)i[e=u+3*p*2]=h+p,i[e+1]=h+(p+1)%a,i[e+2]=l+p,i[e+3]=l+p,i[e+4]=h+(p+1)%a,i[e+5]=l+(p+1)%a;for(var d=[0],f=1;f<s/2;++f)d.push(f),a-f!==f&&d.push(a-f);e=n*a*3*2,t=r*a;for(var m=0;m<d.length-2;++m)m%2==0?(i[e+3*m+0]=t+d[m+0],i[e+3*m+1]=t+d[m+1],i[e+3*m+2]=t+d[m+2]):(i[e+3*m+0]=t+d[m+2],i[e+3*m+1]=t+d[m+1],i[e+3*m+2]=t+d[m+0]);e=n*a*3*2+3*o,t=r*a+a;for(var g=0;g<d.length-2;++g)g%2==0?(i[e+3*g+0]=t+d[g+0],i[e+3*g+1]=t+d[g+1],i[e+3*g+2]=t+d[g+2]):(i[e+3*g+0]=t+d[g+2],i[e+3*g+1]=t+d[g+1],i[e+3*g+2]=t+d[g+0])},Object.defineProperties(t.prototype,e),t}(ey),Fw=function(r){function t(t,e,i){r.call(this,t,e,i),this.type="cartoon",this.parameters=Object.assign({aspectRatio:{type:"number",precision:1,max:10,min:1,rebuild:!0},subdiv:{type:"integer",max:50,min:1,rebuild:!0},radialSegments:{type:"integer",max:50,min:1,rebuild:!0},tension:{type:"number",precision:1,max:1,min:.1},capped:{type:"boolean",rebuild:!0},smoothSheet:{type:"boolean",rebuild:!0}},this.parameters),this.init(i)}return r&&(t.__proto__=r),((t.prototype=Object.create(r&&r.prototype)).constructor=t).prototype.init=function(t){var e=t||{};e.colorScheme=al(e.colorScheme,"chainname"),e.colorScale=al(e.colorScale,"RdYlBu"),e.radiusType=al(e.radiusType,"sstruc"),e.radiusScale=al(e.radiusScale,.7),e.useInteriorColor=al(e.useInteriorColor,!0),this.aspectRatio=al(e.aspectRatio,5),this.tension=al(e.tension,NaN),this.capped=al(e.capped,!0),this.smoothSheet=al(e.smoothSheet,!1),"low"===e.quality?(this.subdiv=3,this.radialSegments=6):"medium"===e.quality?this.subdiv=6:"high"===e.quality?this.subdiv=12:this.subdiv=al(e.subdiv,6),r.prototype.init.call(this,e)},t.prototype.getSplineParams=function(t){return Object.assign({subdiv:this.subdiv,tension:this.tension,directional:1!==this.aspectRatio,smoothSheet:this.smoothSheet},t)},t.prototype.getSpline=function(t){return new Ow(t,this.getSplineParams())},t.prototype.getAspectRatio=function(t){return t.isCg()?1:this.aspectRatio},t.prototype.getAtomRadius=function(t){return t.isTrace()?r.prototype.getAtomRadius.call(this,t):0},t.prototype.createData=function(t){var c=this,u=[],h=[];return this.structure.eachPolymer(function(t){if(!(t.residueCount<4)){h.push(t);var e=c.getSpline(t),i=c.getAspectRatio(t),r=e.getSubdividedPosition(),n=e.getSubdividedOrientation(),o=e.getSubdividedColor(c.getColorParams()),a=e.getSubdividedPicking(),s=e.getSubdividedSize(c.getRadiusParams());u.push(new Nw(Object.assign({},r,n,o,a,s),c.getBufferParams({radialSegments:c.radialSegments,aspectRatio:i,capped:c.capped})))}},t.getSelection()),{bufferList:u,polymerList:h}},t.prototype.updateData=function(t,e){de.Debug&&Bp.time(this.type+" repr update"),t=t||{};for(var i=0,r=e.polymerList.length;i<r;++i){var n={},o=e.polymerList[i],a=this.getSpline(o),s=this.getAspectRatio(o);if(e.bufferList[i].aspectRatio=s,t.position||t.radius){var c=a.getSubdividedPosition(),u=a.getSubdividedOrientation(),h=a.getSubdividedSize(this.getRadiusParams(s));n.position=c.position,n.normal=u.normal,n.binormal=u.binormal,n.tangent=u.tangent,n.size=h.size}if(t.color){var l=a.getSubdividedColor(this.getColorParams());n.color=l.color}if(t.picking){var p=a.getSubdividedPicking();n.picking=p.picking}e.bufferList[i].setAttributes(n)}de.Debug&&Bp.timeEnd(this.type+" repr update")},t.prototype.setParameters=function(t){var e={};return t&&t.aspectRatio&&(e.radius=!0),t&&t.tension&&(e.position=!0),r.prototype.setParameters.call(this,t,e,!1),this},t}(K_);Gp.add("cartoon",Fw);var zw=function(r){function t(t,e,i){r.call(this,t,e,i),this.type="contact",this.parameters=Object.assign({hydrogenBond:{type:"boolean",rebuild:!0},weakHydrogenBond:{type:"boolean",rebuild:!0},waterHydrogenBond:{type:"boolean",rebuild:!0},backboneHydrogenBond:{type:"boolean",rebuild:!0},hydrophobic:{type:"boolean",rebuild:!0},halogenBond:{type:"boolean",rebuild:!0},ionicInteraction:{type:"boolean",rebuild:!0},metalCoordination:{type:"boolean",rebuild:!0},cationPi:{type:"boolean",rebuild:!0},piStacking:{type:"boolean",rebuild:!0},filterSele:{type:"text",rebuild:!0},maxHydrophobicDist:{type:"number",precision:1,max:10,min:.1,rebuild:!0},maxHbondDist:{type:"number",precision:1,max:10,min:.1,rebuild:!0},maxHbondSulfurDist:{type:"number",precision:1,max:10,min:.1,rebuild:!0},maxHbondAccAngle:{type:"integer",max:180,min:0,rebuild:!0},maxHbondDonAngle:{type:"integer",max:180,min:0,rebuild:!0},maxHbondAccPlaneAngle:{type:"integer",max:90,min:0,rebuild:!0},maxHbondDonPlaneAngle:{type:"integer",max:90,min:0,rebuild:!0},maxPiStackingDist:{type:"number",precision:1,max:10,min:.1,rebuild:!0},maxPiStackingOffset:{type:"number",precision:1,max:10,min:.1,rebuild:!0},maxPiStackingAngle:{type:"integer",max:180,min:0,rebuild:!0},maxCationPiDist:{type:"number",precision:1,max:10,min:.1,rebuild:!0},maxCationPiOffset:{type:"number",precision:1,max:10,min:.1,rebuild:!0},maxIonicDist:{type:"number",precision:1,max:10,min:.1,rebuild:!0},maxHalogenBondDist:{type:"number",precision:1,max:10,min:.1,rebuild:!0},maxHalogenBondAngle:{type:"integer",max:180,min:0,rebuild:!0},maxMetalDist:{type:"number",precision:1,max:10,min:.1,rebuild:!0},refineSaltBridges:{type:"boolean",rebuild:!0},masterModelIndex:{type:"integer",max:1e3,min:-1,rebuild:!0},lineOfSightDistFactor:{type:"number",precision:1,max:10,min:0,rebuild:!0},radialSegments:!0,disableImpostor:!0},this.parameters),this.init(i)}return r&&(t.__proto__=r),((t.prototype=Object.create(r&&r.prototype)).constructor=t).prototype.init=function(t){var e=t||{};e.radiusSize=al(e.radiusSize,.05),e.useInteriorColor=al(e.useInteriorColor,!0),this.hydrogenBond=al(e.hydrogenBond,!0),this.weakHydrogenBond=al(e.weakHydrogenBond,!1),this.waterHydrogenBond=al(e.waterHydrogenBond,!1),this.backboneHydrogenBond=al(e.backboneHydrogenBond,!1),this.hydrophobic=al(e.hydrophobic,!1),this.halogenBond=al(e.halogenBond,!0),this.ionicInteraction=al(e.ionicInteraction,!0),this.metalCoordination=al(e.metalCoordination,!0),this.cationPi=al(e.cationPi,!0),this.piStacking=al(e.piStacking,!0),this.filterSele=al(e.filterSele,""),this.maxHydrophobicDist=al(e.maxHydrophobicDist,4),this.maxHbondDist=al(e.maxHbondDist,3.5),this.maxHbondSulfurDist=al(e.maxHbondSulfurDist,4.1),this.maxHbondAccAngle=al(e.maxHbondAccAngle,45),this.maxHbondDonAngle=al(e.maxHbondDonAngle,45),this.maxHbondAccPlaneAngle=al(e.maxHbondAccPlaneAngle,90),this.maxHbondDonPlaneAngle=al(e.maxHbondDonPlaneAngle,30),this.maxPiStackingDist=al(e.maxPiStackingDist,5.5),this.maxPiStackingOffset=al(e.maxPiStackingOffset,2),this.maxPiStackingAngle=al(e.maxPiStackingAngle,30),this.maxCationPiDist=al(e.maxCationPiDist,6),this.maxCationPiOffset=al(e.maxCationPiOffset,2),this.maxIonicDist=al(e.maxIonicDist,5),this.maxHalogenBondDist=al(e.maxHalogenBondDist,3.5),this.maxHalogenBondAngle=al(e.maxHalogenBondAngle,30),this.maxMetalDist=al(e.maxMetalDist,3),this.refineSaltBridges=al(e.refineSaltBridges,!0),this.masterModelIndex=al(e.masterModelIndex,-1),this.lineOfSightDistFactor=al(e.lineOfSightDistFactor,1),r.prototype.init.call(this,e)},t.prototype.getAtomRadius=function(){return 0},t.prototype.getContactData=function(t){var e={maxHydrophobicDist:this.maxHydrophobicDist,maxHbondDist:this.maxHbondDist,maxHbondSulfurDist:this.maxHbondSulfurDist,maxHbondAccAngle:this.maxHbondAccAngle,maxHbondDonAngle:this.maxHbondDonAngle,maxHbondAccPlaneAngle:this.maxHbondAccPlaneAngle,maxHbondDonPlaneAngle:this.maxHbondDonPlaneAngle,maxPiStackingDist:this.maxPiStackingDist,maxPiStackingOffset:this.maxPiStackingOffset,maxPiStackingAngle:this.maxPiStackingAngle,maxCationPiDist:this.maxCationPiDist,maxCationPiOffset:this.maxCationPiOffset,maxIonicDist:this.maxIonicDist,maxHalogenBondDist:this.maxHalogenBondDist,maxHalogenBondAngle:this.maxHalogenBondAngle,maxMetalDist:this.maxMetalDist,refineSaltBridges:this.refineSaltBridges,masterModelIndex:this.masterModelIndex,lineOfSightDistFactor:this.lineOfSightDistFactor},i={hydrogenBond:this.hydrogenBond,weakHydrogenBond:this.weakHydrogenBond,waterHydrogenBond:this.waterHydrogenBond,backboneHydrogenBond:this.backboneHydrogenBond,hydrophobic:this.hydrophobic,halogenBond:this.halogenBond,ionicInteraction:this.ionicInteraction,metalCoordination:this.metalCoordination,cationPi:this.cationPi,piStacking:this.piStacking,radius:this.radiusSize*this.radiusScale,filterSele:this.filterSele};return ym(Hg(jg(t,e),t,i))},t.prototype.createData=function(t){return{bufferList:[new Ew(this.getContactData(t),this.getBufferParams({sphereDetail:1,dullInterior:!0,disableImpostor:this.disableImpostor}))]}},t}(K_);Gp.add("contact",zw);var Uw=function(a){function t(t,e,i){a.call(this,t,e,i),this.type="dihedral",this.parameters=Object.assign({atomQuad:{type:"hidden",rebuild:!0},extendLine:{type:"boolean",rebuild:!0,default:!0},lineVisible:{type:"boolean",default:!0},planeVisible:{type:"boolean",default:!0},sectorVisible:{type:"boolean",default:!0}},this.parameters),this.init(i)}return a&&(t.__proto__=a),((t.prototype=Object.create(a&&a.prototype)).constructor=t).prototype.init=function(t){var e=t||{};e.side=al(e.side,"double"),e.opacity=al(e.opacity,.5),this.atomQuad=al(e.atomQuad,[]),this.extendLine=al(e.extendLine,!0),this.lineVisible=al(e.lineVisible,!0),this.planeVisible=al(e.planeVisible,!0),this.sectorVisible=al(e.sectorVisible,!0),a.prototype.init.call(this,e)},t.prototype.createData=function(t){if(t.atomCount&&this.atomQuad.length){var e=function(m,g){for(var v=al((g=g||{}).angleStep,Math.PI/90),t=m.length,e=m.length/12,y=new Float32Array(e),b=new Float32Array(3*e),x=new Array(e),_=new Array(e),w=new Array(e),S=new Array(e),A=new Array(e),M=0,P=0,E=0,C=im(),T=im(),I=im(),R=im(),L=im(),O=im(),D=im(),k=im(),B=im(),N=im(),F=im(),z=im(),U=im(),j=im(),G=im(),V=0,i=function(t){if(sm(C,m,t),sm(T,m,t+3),sm(I,m,t+6),sm(R,m,t+9),om(L,C,T),om(O,I,T),0!==um(O)){om(D,R,I),lm(k,O,.5),am(B,T,k),pm(L,L),pm(O,O),pm(D,D),om(k,C,B);var e=0<nm(k,O);om(k,R,B);var i=nm(k,O)<0;if(lm(k,O,nm(O,L)),om(N,L,k),lm(k,O,nm(O,D)),om(F,D,k),0!==um(N)&&0!==um(F)){pm(N,N),pm(F,F);var r=y[V]=Math.acos(nm(N,F));x[V]=(Md*r).toFixed(1)+String.fromCharCode(176),rm(j,N,O),pm(j,j),nm(j,F)<0&&vm(j,j),tw(k,B,N,j,r/2),cm(k,b,3*V);var n=Math.ceil(r/v),o=n+(g.extendLine?4:2),a=g.extendLine?36:0,s=new Float32Array(3*o),c=new Float32Array(3*o),u=new Float32Array(9*n),h=new Float32Array(a);_[V]=s,w[V]=c,S[V]=u,A[V]=h,g.extendLine&&(e?(om(k,C,I),pm(k,k),lm(z,k,1/nm(N,k)),am(z,z,I)):(lm(z,L,1/nm(N,L)),am(z,z,T)),i?(om(k,R,T),pm(k,k),lm(U,k,1/nm(F,k)),am(U,U,T)):(lm(U,D,1/nm(F,D)),am(U,U,I))),am(G,B,N);var l=0;g.extendLine?(cm(C,s,l),cm(z,c,l),cm(z,s,l+=3),cm(G,c,l),l+=3,cm(z,h,0),cm(G,h,3),cm(e?I:T,h,6),cm(e?I:T,h,9),cm(G,h,12),cm(B,h,15)):(cm(B,s,l),cm(G,c,l),l+=3);for(var p=function(t,e){var i=9*e;cm(B,u,i),cm(G,u,i+3),cm(G,s,l),tw(G,B,N,j,t),cm(G,u,i+6),cm(G,c,l),l+=3},d=0,f=v;f<r;f+=v)p(f,d++);p(r,d++),g.extendLine?(cm(G,s,3*(o-2)),cm(U,c,3*(o-2)),cm(U,s,3*(o-1)),cm(R,c,3*(o-1)),cm(U,h,18),cm(G,h,21),cm(i?T:I,h,24),cm(i?T:I,h,27),cm(G,h,30),cm(B,h,33)):(cm(G,s,l),cm(B,c,l),l+=3),M+=3*o,P+=9*n,E+=a,V+=1}}},r=0;r<t;r+=12)i(r);for(var n=V,o=new Float32Array(M),a=new Float32Array(M),s=new Float32Array(P),c=new Float32Array(E),u=0,h=0,l=0,p=0;p<n;p++){var d=_[p],f=w[p],H=S[p],$=A[p];Dd(d,o,0,u,d.length),Dd(f,a,0,u,f.length),Dd(H,s,0,h,H.length),Dd($,c,0,l,$.length),u+=d.length,h+=H.length,l+=$.length}return{labelPosition:b.subarray(0,3*n),labelText:x.slice(0,n),linePosition1:o,linePosition2:a,planePosition:c,sectorPosition:s}}(Q_(t,this.atomQuad),{extendLine:this.extendLine}),i=this.n=e.labelText.length,r=new Li(this.labelColor);this.textBuffer=new uw({position:e.labelPosition,size:Td(i,this.labelSize),color:Id(i,r.r,r.g,r.b),text:e.labelText},this.getLabelBufferParams());var n=new Li(this.colorValue);this.lineLength=e.linePosition1.length/3;var o=Id(this.lineLength,n.r,n.g,n.b);return this.lineBuffer=new pw(xm({position1:e.linePosition1,position2:e.linePosition2,color:o,color2:o}),this.getBufferParams({linewidth:this.linewidth,visible:this.lineVisible,opacity:this.lineOpacity})),this.planeLength=e.planePosition.length/3,this.planeBuffer=new ey({position:e.planePosition,color:Id(this.planeLength,n.r,n.g,n.b)},this.getBufferParams({visible:this.planeVisible})),this.sectorLength=e.sectorPosition.length/3,this.sectorBuffer=new ey({position:e.sectorPosition,color:Id(this.sectorLength,n.r,n.g,n.b)},this.getBufferParams({visible:this.sectorVisible})),{bufferList:[this.textBuffer,this.lineBuffer,this.planeBuffer,this.sectorBuffer]}}},t.prototype.updateData=function(t,e){a.prototype.updateData.call(this,t,e);var i={},r={},n={};if(t.color){var o=new Li(this.colorValue);i.color=i.color2=Id(this.lineLength,o.r,o.g,o.b),r.color=Id(this.planeLength,o.r,o.g,o.b),n.color=Id(this.sectorLength,o.r,o.g,o.b)}this.lineBuffer.setAttributes(i),this.planeBuffer.setAttributes(r),this.sectorBuffer.setAttributes(n)},t.prototype.setParameters=function(t){return a.prototype.setParameters.call(this,t,{},!1),!t||void 0===t.lineVisible&&void 0===t.sectorVisible&&void 0===t.planeVisible||this.setVisibility(this.visible),t&&t.lineOpacity&&this.lineBuffer.setParameters({opacity:t.lineOpacity}),t&&void 0!==t.opacity&&this.lineBuffer.setParameters({opacity:this.lineOpacity}),t&&t.linewidth&&this.lineBuffer.setParameters({linewidth:t.linewidth}),this},t.prototype.setVisibility=function(t,e){return a.prototype.setVisibility.call(this,t,!0),this.lineBuffer&&this.lineBuffer.setVisibility(this.lineVisible&&this.visible),this.planeBuffer&&this.planeBuffer.setVisibility(this.planeVisible&&this.visible),this.sectorBuffer&&this.sectorBuffer.setVisibility(this.sectorVisible&&this.visible),e||this.viewer.requestRender(),this},t}(J_);Gp.add("dihedral",Uw);var jw=function(o){function t(t,e,i){o.call(this,t,e,i),this.type="distance",this.parameters=Object.assign({radialSegments:!0,openEnded:!0,disableImpostor:!0,labelUnit:{type:"select",rebuild:!0,options:{"":"",angstrom:"angstrom",nm:"nm"}},useCylinder:{type:"boolean",rebuild:!0},atomPair:{type:"hidden",rebuild:!0}},this.parameters),this.init(i)}return o&&(t.__proto__=o),((t.prototype=Object.create(o&&o.prototype)).constructor=t).prototype.init=function(t){var e=t||{};e.linewidth=al(e.linewidth,5),e.radiusType=al(e.radiusType,"size"),e.radiusSize=al(e.radiusSize,.2),this.labelUnit=al(e.labelUnit,""),this.useCylinder=al(e.useCylinder,!1),this.atomPair=al(e.atomPair,[]),o.prototype.init.call(this,e)},t.prototype.getDistanceData=function(c,t){var e=t.length,u=new Array(e),h=new Float32Array(3*e),l=new bp,p=new bp,d=new ky,f=c.getAtomProxy(),m=c.getAtomProxy(),g=0,v=c.getAtomSet();t.forEach(function(t,e){var i=t[0],r=t[1];if(Number.isInteger(i)&&Number.isInteger(r)){if(!v.get(i)||!v.get(r))return void(g+=1);f.index=i,m.index=r}else{l.setString(i),p.setString(r);var n=c.getAtomIndices(l),o=c.getAtomIndices(p);if(!n.length||!o.length)return void(g+=1);f.index=n[0],m.index=o[0]}d.addBond(f,m,1),e-=g;var a=f.distanceTo(m);switch(this.labelUnit){case"angstrom":u[e]=a.toFixed(2)+" "+String.fromCharCode(8491);break;case"nm":u[e]=(a/10).toFixed(2)+" nm";break;default:u[e]=a.toFixed(2)}var s=3*e;h[s+0]=(f.x+m.x)/2,h[s+1]=(f.y+m.y)/2,h[s+2]=(f.z+m.z)/2},this),0<g&&(e-=g,h=h.subarray(0,3*e));var i=new Um(d.count,!0);return{text:u,position:h,bondSet:i,bondStore:d}},t.prototype.getBondData=function(t,e,i){var r=t.getBondData(this.getBondParams(e,i));return r.picking&&(r.picking=new iv(r.picking.array,r.picking.structure,i.bondStore)),r},t.prototype.createData=function(t){if(t.atomCount&&this.atomPair.length){var e=this.atomPair.length,i=new Li(this.labelColor),r=this.getDistanceData(t,this.atomPair);this.textBuffer=new uw({position:r.position,size:Td(e,this.labelSize),color:Id(e,i.r,i.g,i.b),text:r.text},this.getLabelBufferParams());var n={bondSet:r.bondSet,bondStore:r.bondStore},o=this.getBondData(t,{position:!0,color:!0,picking:!0,radius:this.useCylinder},n);return this.useCylinder?this.distanceBuffer=new Ew(o,this.getBufferParams({openEnded:this.openEnded,radialSegments:this.radialSegments,disableImpostor:this.disableImpostor,dullInterior:!0})):this.distanceBuffer=new pw(bm(o),this.getBufferParams({linewidth:this.linewidth,visible:this.lineVisible,opacity:this.lineOpacity})),{bondSet:r.bondSet,bondStore:r.bondStore,position:r.position,bufferList:[this.textBuffer,this.distanceBuffer]}}},t.prototype.updateData=function(t,e){o.prototype.updateData.call(this,t,e);var i={bondSet:e.bondSet,bondStore:e.bondStore},r=this.getBondData(e.sview,t,i),n={};t&&!t.color||(n.color=r.color,n.color2=r.color2),t&&!t.radius||(n.radius=r.radius),this.distanceBuffer.setAttributes(n)},t.prototype.setParameters=function(t){return o.prototype.setParameters.call(this,t,{},!1),this.useCylinder||(t&&t.lineOpacity&&this.distanceBuffer.setParameters({opacity:t.lineOpacity}),t&&void 0!==t.opacity&&this.distanceBuffer.setParameters({opacity:this.lineOpacity}),t&&t.linewidth&&this.distanceBuffer.setParameters({linewidth:t.linewidth})),this},t}(J_);function Gw(t){return 2*(t.position.length/3)*3}Gp.add("distance",jw);var Vw=Object.assign({scale:1,color:"grey"},Kv),Hw=function(n){function t(t,e){void 0===e&&(e={}),n.call(this,{position:new Float32Array(Gw(t)),color:new Float32Array(Gw(t))},e),this.isLine=!0,this.vertexShader="Line.vert",this.fragmentShader="Line.frag";var i=new Li(this.parameters.color),r=this.geometry.attributes;Id(Gw(t)/3,i.r,i.g,i.b,r.color.array),this.setAttributes(t)}n&&(t.__proto__=n),(t.prototype=Object.create(n&&n.prototype)).constructor=t;var e={defaultParameters:{configurable:!0}};return e.defaultParameters.get=function(){return Vw},t.prototype.setAttributes=function(t){void 0===t&&(t={});var e,i,r,n=this.geometry.attributes;t.position&&t.vector&&(e=t.position,i=t.vector,r=n.position.array,n.position.needsUpdate=!0);var o=this.size/2,a=this.parameters.scale;if(e&&i)for(var s=0;s<o;s++){var c=2*s*3,u=3*s;r[c+0]=e[u+0],r[c+1]=e[u+1],r[c+2]=e[u+2],r[c+3]=e[u+0]+i[u+0]*a,r[c+4]=e[u+1]+i[u+1]*a,r[c+5]=e[u+2]+i[u+2]*a}},Object.defineProperties(t.prototype,e),t}(Qv),$w=function(r){function t(t,e,i){r.call(this,t,e,i),this.type="helixorient",this.parameters=Object.assign({sphereDetail:!0,disableImpostor:!0},this.parameters),this.init(i)}return r&&(t.__proto__=r),((t.prototype=Object.create(r&&r.prototype)).constructor=t).prototype.init=function(t){var e=t||{};e.colorScheme=al(e.colorScheme,"sstruc"),e.radiusType=al(e.radiusType,"size"),e.radiusSize=al(e.radiusSize,.15),e.radiusScale=al(e.radiusScale,1),e.useInteriorColor=al(e.useInteriorColor,!0),r.prototype.init.call(this,e)},t.prototype.createData=function(t){var a=this,s=[],c=[];return this.structure.eachPolymer(function(t){if(!(t.residueCount<4)){c.push(t);var e=new Uy(t),i=e.getPosition(),r=e.getColor(a.getColorParams()),n=e.getSize(a.getRadiusParams()),o=e.getPicking();s.push(new dx({position:i.center,color:r.color,radius:n.size,picking:o.picking},a.getBufferParams({sphereDetail:a.sphereDetail,disableImpostor:a.disableImpostor,dullInterior:!0})),new Hw({position:i.center,vector:i.axis},a.getBufferParams({color:"skyblue",scale:1})),new Hw({position:i.center,vector:i.resdir},a.getBufferParams({color:"lightgreen",scale:1})))}},t.getSelection()),{bufferList:s,polymerList:c}},t.prototype.updateData=function(t,e){de.Debug&&Bp.time(this.type+" repr update"),t=t||{};for(var i=0,r=e.polymerList.length;i<r;++i){var n=3*i,o={},a=e.polymerList[i],s=new Uy(a);if(t.position){var c=s.getPosition();o.position=c.center,e.bufferList[n+1].setAttributes({position:c.center,vector:c.axis}),e.bufferList[n+2].setAttributes({position:c.center,vector:c.resdir})}e.bufferList[n].setAttributes(o)}de.Debug&&Bp.timeEnd(this.type+" repr update")},t}(K_);Gp.add("helixorient",$w);var Ww=function(r){function t(t,e,i){r.call(this,t,e,i),this.type="licorice",this.parameters=Object.assign({},this.parameters,{aspectRatio:null})}return r&&(t.__proto__=r),((t.prototype=Object.create(r&&r.prototype)).constructor=t).prototype.init=function(t){var e=t||{};e.aspectRatio=1,r.prototype.init.call(this,e)},t}(Tw);Gp.add("licorice",Ww),Hp.add("shader/HyperballStickImpostor.vert","\nattribute vec3 mapping;\nattribute float radius;\nattribute float radius2;\nattribute vec3 position1;\nattribute vec3 position2;\nvarying mat4 matrix_near;\nvarying vec4 prime1;\nvarying vec4 prime2;\nvarying float vRadius;\nvarying float vRadius2;\n#ifdef PICKING\n#include unpack_color\nattribute float primitiveId;\nvarying vec3 vPickingColor;\n#else\nattribute vec3 color2;\nvarying vec3 vColor1;\nvarying vec3 vColor2;\n#endif\nuniform float shrink;\nuniform mat4 modelViewProjectionMatrix;\nuniform mat4 modelViewProjectionMatrixInverse;\nvoid main(){\nvRadius = radius;\nvRadius2 = radius2;\nvec4 spaceposition;\nvec3 position_atom1;\nvec3 position_atom2;\nvec4 vertex_position;\n#ifdef PICKING\nvPickingColor = unpackColor( primitiveId );\n#else\nvColor1 = color;\nvColor2 = color2;\n#endif\nfloat radius1 = radius;\nposition_atom1 = position1;\nposition_atom2 = position2;\nfloat distance = distance( position_atom1, position_atom2 );\nspaceposition.z = mapping.z * distance;\nif (radius1 > radius2) {\nspaceposition.y = mapping.y * 1.5 * radius1;\nspaceposition.x = mapping.x * 1.5 * radius1;\n} else {\nspaceposition.y = mapping.y * 1.5 * radius2;\nspaceposition.x = mapping.x * 1.5 * radius2;\n}\nspaceposition.w = 1.0;\nvec4 e3 = vec4( 1.0 );\nvec3 e1, e1_temp, e2, e2_temp;\ne3.xyz = normalize(position_atom1-position_atom2);\nif (e3.z == 0.0) { e3.z = 0.0000000000001;}\nif ( (position_atom1.x - position_atom2.x) == 0.0) { position_atom1.x += 0.001;}\nif ( (position_atom1.y - position_atom2.y) == 0.0) { position_atom1.y += 0.001;}\nif ( (position_atom1.z - position_atom2.z) == 0.0) { position_atom1.z += 0.001;}\nvec4 focus = vec4( 1.0 );\nfocus.x = ( position_atom1.x*position_atom1.x - position_atom2.x*position_atom2.x +\n( radius2*radius2 - radius1*radius1 )*e3.x*e3.x/shrink )/(2.0*(position_atom1.x - position_atom2.x));\nfocus.y = ( position_atom1.y*position_atom1.y - position_atom2.y*position_atom2.y +\n( radius2*radius2 - radius1*radius1 )*e3.y*e3.y/shrink )/(2.0*(position_atom1.y - position_atom2.y));\nfocus.z = ( position_atom1.z*position_atom1.z - position_atom2.z*position_atom2.z +\n( radius2*radius2 - radius1*radius1 )*e3.z*e3.z/shrink )/(2.0*(position_atom1.z - position_atom2.z));\ne1.x = 1.0;\ne1.y = 1.0;\ne1.z = ( (e3.x*focus.x + e3.y*focus.y + e3.z*focus.z) - e1.x*e3.x - e1.y*e3.y)/e3.z;\ne1_temp = e1 - focus.xyz;\ne1 = normalize(e1_temp);\ne2_temp = e1.yzx * e3.zxy - e1.zxy * e3.yzx;\ne2 = normalize(e2_temp);\nmat3 R= mat3( e1.xyz, e2.xyz, e3.xyz );\nvertex_position.xyz = R * spaceposition.xyz;\nvertex_position.w = 1.0;\nvertex_position.x += (position_atom1.x+position_atom2.x) / 2.0;\nvertex_position.y += (position_atom1.y+position_atom2.y) / 2.0;\nvertex_position.z += (position_atom1.z+position_atom2.z) / 2.0;\ngl_Position = modelViewProjectionMatrix * vertex_position;\nvec4 i_near, i_far;\nvec4 near = gl_Position;\nnear.z = 0.0 ;\nnear = modelViewProjectionMatrixInverse * near;\ni_near = near;\nvec4 far = gl_Position;\nfar.z = far.w ;\ni_far = modelViewProjectionMatrixInverse * far;\nprime1 = vec4( position_atom1 - (position_atom1 - focus.xyz)*shrink, 1.0 );\nprime2 = vec4( position_atom2 - (position_atom2 - focus.xyz)*shrink, 1.0 );\nfloat Rsquare = (radius1*radius1/shrink) - (\n(position_atom1.x - focus.x)*(position_atom1.x - focus.x) +\n(position_atom1.y - focus.y)*(position_atom1.y - focus.y) +\n(position_atom1.z - focus.z)*(position_atom1.z - focus.z)\n);\nfocus.w = Rsquare;\nmatrix_near = mat4( i_near, i_far, focus, e3 );\ngl_Position.z = 1.0;\n}"),Hp.add("shader/HyperballStickImpostor.frag","#define STANDARD\n#define IMPOSTOR\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 interiorColor;\nuniform float interiorDarkening;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\nuniform float clipNear;\nuniform float shrink;\nuniform mat4 modelViewMatrix;\nuniform mat4 modelViewProjectionMatrix;\nuniform mat4 modelViewMatrixInverseTranspose;\nuniform mat4 projectionMatrix;\nvarying mat4 matrix_near;\nvarying vec4 prime1;\nvarying vec4 prime2;\nvarying float vRadius;\nvarying float vRadius2;\n#ifdef PICKING\nuniform float objectId;\nvarying vec3 vPickingColor;\n#else\nvarying vec3 vColor1;\nvarying vec3 vColor2;\n#include common\n#include fog_pars_fragment\n#include bsdfs\n#include lights_pars_begin\n#include lights_physical_pars_fragment\n#endif\nbool interior = false;\nfloat calcClip( vec4 cameraPos ){\nreturn dot( cameraPos, vec4( 0.0, 0.0, 1.0, clipNear - 0.5 ) );\n}\nfloat calcClip( vec3 cameraPos ){\nreturn calcClip( vec4( cameraPos, 1.0 ) );\n}\nfloat calcDepth( in vec3 cameraPos ){\nvec2 clipZW = cameraPos.z * projectionMatrix[2].zw + projectionMatrix[3].zw;\nreturn 0.5 + 0.5 * clipZW.x / clipZW.y;\n}\nstruct Ray {\nvec3 origin ;\nvec3 direction ;\n};\nbool cutoff_plane (vec3 M, vec3 cutoff, vec3 x3){\nfloat a = x3.x;\nfloat b = x3.y;\nfloat c = x3.z;\nfloat d = -x3.x*cutoff.x-x3.y*cutoff.y-x3.z*cutoff.z;\nfloat l = a*M.x+b*M.y+c*M.z+d;\nif (l<0.0) {return true;}\nelse{return false;}\n}\nvec3 isect_surf(Ray r, mat4 matrix_coef){\nvec4 direction = vec4(r.direction, 0.0);\nvec4 origin = vec4(r.origin, 1.0);\nfloat a = dot(direction,(matrix_coef*direction));\nfloat b = dot(origin,(matrix_coef*direction));\nfloat c = dot(origin,(matrix_coef*origin));\nfloat delta =b*b-a*c;\ngl_FragColor.a = 1.0;\nif (delta<0.0){\ndiscard;\n}\nfloat t1 =(-b-sqrt(delta))/a;\nreturn r.origin+t1*r.direction;\n}\nvec3 isect_surf2(Ray r, mat4 matrix_coef){\nvec4 direction = vec4(r.direction, 0.0);\nvec4 origin = vec4(r.origin, 1.0);\nfloat a = dot(direction,(matrix_coef*direction));\nfloat b = dot(origin,(matrix_coef*direction));\nfloat c = dot(origin,(matrix_coef*origin));\nfloat delta =b*b-a*c;\ngl_FragColor.a = 1.0;\nif (delta<0.0){\ndiscard;\n}\nfloat t2 =(-b+sqrt(delta))/a;\nreturn r.origin+t2*r.direction;\n}\nRay primary_ray(vec4 near1, vec4 far1){\nvec3 near=near1.xyz/near1.w;\nvec3 far=far1.xyz/far1.w;\nreturn Ray(near,far-near);\n}\nfloat update_z_buffer(vec3 M, mat4 ModelViewP){\nfloat depth1;\nvec4 Ms=(ModelViewP*vec4(M,1.0));\nreturn depth1=(1.0+Ms.z/Ms.w)/2.0;\n}\nvoid main(){\nfloat radius = max( vRadius, vRadius2 );\nvec4 i_near, i_far, focus;\nvec3 e3, e1, e1_temp, e2;\ni_near = vec4(matrix_near[0][0],matrix_near[0][1],matrix_near[0][2],matrix_near[0][3]);\ni_far = vec4(matrix_near[1][0],matrix_near[1][1],matrix_near[1][2],matrix_near[1][3]);\nfocus = vec4(matrix_near[2][0],matrix_near[2][1],matrix_near[2][2],matrix_near[2][3]);\ne3 = vec3(matrix_near[3][0],matrix_near[3][1],matrix_near[3][2]);\ne1.x = 1.0;\ne1.y = 1.0;\ne1.z = ( (e3.x*focus.x + e3.y*focus.y + e3.z*focus.z) - e1.x*e3.x - e1.y*e3.y)/e3.z;\ne1_temp = e1 - focus.xyz;\ne1 = normalize(e1_temp);\ne2 = normalize(cross(e1,e3));\nvec4 equation = focus;\nfloat shrinkfactor = shrink;\nfloat t1 = -1.0/(1.0-shrinkfactor);\nfloat t2 = 1.0/(shrinkfactor);\nvec4 colonne1, colonne2, colonne3, colonne4;\nmat4 mat;\nvec3 equation1 = vec3(t2,t2,t1);\nfloat A1 = - e1.x*equation.x - e1.y*equation.y - e1.z*equation.z;\nfloat A2 = - e2.x*equation.x - e2.y*equation.y - e2.z*equation.z;\nfloat A3 = - e3.x*equation.x - e3.y*equation.y - e3.z*equation.z;\nfloat A11 = equation1.x*e1.x*e1.x + equation1.y*e2.x*e2.x + equation1.z*e3.x*e3.x;\nfloat A21 = equation1.x*e1.x*e1.y + equation1.y*e2.x*e2.y + equation1.z*e3.x*e3.y;\nfloat A31 = equation1.x*e1.x*e1.z + equation1.y*e2.x*e2.z + equation1.z*e3.x*e3.z;\nfloat A41 = equation1.x*e1.x*A1 + equation1.y*e2.x*A2 + equation1.z*e3.x*A3;\nfloat A22 = equation1.x*e1.y*e1.y + equation1.y*e2.y*e2.y + equation1.z*e3.y*e3.y;\nfloat A32 = equation1.x*e1.y*e1.z + equation1.y*e2.y*e2.z + equation1.z*e3.y*e3.z;\nfloat A42 = equation1.x*e1.y*A1 + equation1.y*e2.y*A2 + equation1.z*e3.y*A3;\nfloat A33 = equation1.x*e1.z*e1.z + equation1.y*e2.z*e2.z + equation1.z*e3.z*e3.z;\nfloat A43 = equation1.x*e1.z*A1 + equation1.y*e2.z*A2 + equation1.z*e3.z*A3;\nfloat A44 = equation1.x*A1*A1 + equation1.y*A2*A2 + equation1.z*A3*A3 - equation.w;\ncolonne1 = vec4(A11,A21,A31,A41);\ncolonne2 = vec4(A21,A22,A32,A42);\ncolonne3 = vec4(A31,A32,A33,A43);\ncolonne4 = vec4(A41,A42,A43,A44);\nmat = mat4(colonne1,colonne2,colonne3,colonne4);\nRay ray = primary_ray(i_near,i_far) ;\nvec3 M;\nM = isect_surf(ray, mat);\nif (cutoff_plane(M, prime1.xyz, -e3) || cutoff_plane(M, prime2.xyz, e3)){ discard; }\nvec4 M1 = vec4(M,1.0);\nvec4 M2 = mat*M1;\nvec3 _normal = ( modelViewMatrixInverseTranspose * M2 ).xyz;\ngl_FragDepthEXT = update_z_buffer(M, modelViewProjectionMatrix) ;\n#ifdef NEAR_CLIP\nif( calcClip( modelViewMatrix * vec4( M, 1.0 ) ) > 0.0 ){\nM = isect_surf2(ray, mat);\nif( calcClip( modelViewMatrix * vec4( M, 1.0 ) ) > 0.0 )\ndiscard;\ninterior = true;\ngl_FragDepthEXT = update_z_buffer(M, modelViewProjectionMatrix) ;\nif( gl_FragDepthEXT >= 0.0 ){\ngl_FragDepthEXT = max( 0.0, calcDepth( vec3( - ( clipNear - 0.5 ) ) ) + ( 0.0000001 / radius ) );\n}\n}else if( gl_FragDepthEXT <= 0.0 ){\nM = isect_surf2(ray, mat);\ninterior = true;\ngl_FragDepthEXT = update_z_buffer(M, modelViewProjectionMatrix);\nif( gl_FragDepthEXT >= 0.0 ){\ngl_FragDepthEXT = 0.0 + ( 0.0000001 / radius );\n}\n}\n#else\nif( gl_FragDepthEXT <= 0.0 ){\nM = isect_surf2(ray, mat);\ninterior = true;\ngl_FragDepthEXT = update_z_buffer(M, modelViewProjectionMatrix) ;\nif( gl_FragDepthEXT >= 0.0 ){\ngl_FragDepthEXT = 0.0 + ( 0.0000001 / radius );\n}\n}\n#endif\nif (cutoff_plane(M, prime1.xyz, -e3) || cutoff_plane(M, prime2.xyz, e3)){ discard; }\nif (gl_FragDepthEXT < 0.0)\ndiscard;\nif (gl_FragDepthEXT > 1.0)\ndiscard;\nfloat distance_ratio = ((M.x-prime2.x)*e3.x + (M.y-prime2.y)*e3.y +(M.z-prime2.z)*e3.z) /\ndistance(prime2.xyz,prime1.xyz);\n#ifdef PICKING\nif( opacity < 0.3 )\ndiscard;\ngl_FragColor = vec4( vPickingColor, objectId );\n#else\nvec3 vViewPosition = -( modelViewMatrix * vec4( M, 1.0 ) ).xyz;\nvec3 vNormal = _normal;\nvec3 vColor;\nif( distance_ratio>0.5 ){\nvColor = vColor1;\n}else{\nvColor = vColor2;\n}\nvec4 diffuseColor = vec4( diffuse, opacity );\nReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\nvec3 totalEmissiveLight = emissive;\n#include color_fragment\n#include roughnessmap_fragment\n#include metalnessmap_fragment\nvec3 normal = normalize( vNormal );\n#include lights_physical_fragment\n#include lights_fragment_begin\n#include lights_fragment_end\nvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveLight;\nif( interior ){\n#ifdef USE_INTERIOR_COLOR\noutgoingLight.xyz = interiorColor;\n#else\n#ifdef DIFFUSE_INTERIOR\noutgoingLight.xyz = vColor;\n#endif\n#endif\noutgoingLight.xyz *= 1.0 - interiorDarkening;\n}\ngl_FragColor = vec4( outgoingLight, diffuseColor.a );\n#include premultiplied_alpha_fragment\n#include tonemapping_fragment\n#include encodings_fragment\n#include fog_fragment\n#endif\n}");var Xw=new Float32Array([-1,-1,-1,1,-1,-1,1,-1,1,-1,-1,1,-1,1,-1,1,1,-1,1,1,1,-1,1,1]),qw=new Uint16Array([0,1,2,0,2,3,1,5,6,1,6,2,4,6,5,4,7,6,0,7,4,0,3,7,0,5,1,0,4,5,3,2,6,3,6,7]),Yw=function(i){function t(t,e){void 0===e&&(e={}),i.call(this,"v3",t,e)}i&&(t.__proto__=i),(t.prototype=Object.create(i&&i.prototype)).constructor=t;var e={mapping:{configurable:!0},mappingIndices:{configurable:!0},mappingIndicesSize:{configurable:!0},mappingSize:{configurable:!0},mappingItemSize:{configurable:!0}};return e.mapping.get=function(){return Xw},e.mappingIndices.get=function(){return qw},e.mappingIndicesSize.get=function(){return 36},e.mappingSize.get=function(){return 8},e.mappingItemSize.get=function(){return 3},Object.defineProperties(t.prototype,e),t}(cx),Zw=Object.assign({shrink:.14},Kv),Kw=Object.assign({shrink:{uniform:!0}},Jv),Jw=function(i){function t(t,e){void 0===e&&(e={}),i.call(this,t,e),this.parameterTypes=Kw,this.isImpostor=!0,this.vertexShader="HyperballStickImpostor.vert",this.fragmentShader="HyperballStickImpostor.frag",this.addUniforms({modelViewProjectionMatrix:{value:new Ke},modelViewProjectionMatrixInverse:{value:new Ke},modelViewMatrixInverseTranspose:{value:new Ke},shrink:{value:this.parameters.shrink}}),this.addAttributes({position1:{type:"v3",value:null},position2:{type:"v3",value:null},color2:{type:"c",value:null},radius:{type:"f",value:null},radius2:{type:"f",value:null}}),this.setAttributes(t),this.makeMapping()}i&&(t.__proto__=i),(t.prototype=Object.create(i&&i.prototype)).constructor=t;var e={defaultParameters:{configurable:!0}};return e.defaultParameters.get=function(){return Zw},Object.defineProperties(t.prototype,e),t}(Yw),Qw=(Object.assign({disableImpostor:!1},yw,Zw),function(t,e){return void 0===e&&(e={}),!Dp||e&&e.disableImpostor?(t.radius=function(t,e){for(var i=t.length,r=new Float32Array(i),n=0;n<i;n++)r[n]=Math.min(t[n],e[n]);return r}(t.radius,t.radius2),new xw(t,e)):new Jw(t,e)}),tS=function(r){function t(t,e,i){r.call(this,t,e,i),this.type="hyperball",this.parameters=Object.assign({shrink:{type:"number",precision:3,max:1,min:.001,buffer:!0}},this.parameters,{multipleBond:null,bondSpacing:null})}return r&&(t.__proto__=r),((t.prototype=Object.create(r&&r.prototype)).constructor=t).prototype.init=function(t){var e=t||{};e.radiusScale=al(e.radiusScale,.2),e.radiusType=al(e.radiusType,"vdw"),e.useInteriorColor=al(e.useInteriorColor,!0),this.shrink=al(e.shrink,.12),r.prototype.init.call(this,e)},t.prototype.getBondParams=function(t,e){return t&&!t.radius||(e=Object.assign({radius2:!0},e)),r.prototype.getBondParams.call(this,t,e)},t.prototype.createData=function(t){var e=new dx(t.getAtomData(this.getAtomParams()),this.getBufferParams({sphereDetail:this.sphereDetail,disableImpostor:this.disableImpostor,dullInterior:!0}));return this.__center=new Float32Array(3*t.bondCount),{bufferList:[e,new Qw(t.getBondData(this.getBondParams()),this.getBufferParams({shrink:this.shrink,radialSegments:this.radialSegments,disableImpostor:this.disableImpostor,dullInterior:!0}))]}},t.prototype.updateData=function(t,e){var i=e.sview.getAtomData(this.getAtomParams()),r=e.sview.getBondData(this.getBondParams()),n={},o={};if(!t||t.position){n.position=i.position;var a=r.position1,s=r.position2;o.position=Ed(a,s,this.__center),o.position1=a,o.position2=s}t&&!t.color||(n.color=i.color,o.color=r.color,o.color2=r.color2),t&&!t.radius||(n.radius=i.radius,o.radius=r.radius,o.radius2=r.radius2),e.bufferList[0].setAttributes(n),e.bufferList[1].setAttributes(o)},t}(Ww);Gp.add("hyperball",tS);var eS=function(t,e,i){void 0===e&&(e={}),void 0===i&&(i=""),this.type=t,this.text=e,this.format=i};eS.prototype.atomLabel=function(t){var e;switch(this.type){case"atomname":e=t.atomname;break;case"atomindex":e=""+t.index;break;case"occupancy":e=t.occupancy.toFixed(2);break;case"bfactor":e=t.bfactor.toFixed(2);break;case"serial":e=""+t.serial;break;case"element":e=t.element;break;case"atom":e=t.atomname+"|"+t.index;break;case"resname":e=t.resname;break;case"resno":e=""+t.resno;break;case"res":e=""+(sg[t.resname.toUpperCase()]||t.resname)+t.resno;break;case"residue":var i=sg[t.resname.toUpperCase()];e=i&&!t.inscode?""+i+t.resno:"["+t.resname+"]"+t.resno+t.inscode;break;case"text":e=this.text[t.index];break;case"format":e=od(this.format,t);break;default:e=t.qualifiedName()}return void 0===e?"":e},eS.types={"":"",atomname:"atom name",atomindex:"atom index",occupancy:"occupancy",bfactor:"b-factor",serial:"serial",element:"element",atom:"atom name + index",resname:"residue name",resno:"residue no",res:"one letter code + no",residue:"[residue name] + no + inscode",text:"text",format:"format",qualified:"qualified name"};var iS=function(r){function t(t,e,i){r.call(this,t,e,i),this.type="label",this.parameters=Object.assign({labelType:{type:"select",options:eS.types,rebuild:!0},labelText:{type:"hidden",rebuild:!0},labelFormat:{type:"text",rebuild:!0},labelGrouping:{type:"select",options:{atom:"atom",residue:"residue"},rebuild:!0},fontFamily:{type:"select",options:{"sans-serif":"sans-serif",monospace:"monospace",serif:"serif"},buffer:!0},fontStyle:{type:"select",options:{normal:"normal",italic:"italic"},buffer:!0},fontWeight:{type:"select",options:{normal:"normal",bold:"bold"},buffer:!0},xOffset:{type:"number",precision:1,max:20,min:-20,buffer:!0},yOffset:{type:"number",precision:1,max:20,min:-20,buffer:!0},zOffset:{type:"number",precision:1,max:20,min:-20,buffer:!0},attachment:{type:"select",options:{"bottom-left":"bottom-left","bottom-center":"bottom-center","bottom-right":"bottom-right","middle-left":"middle-left","middle-center":"middle-center","middle-right":"middle-right","top-left":"top-left","top-center":"top-center","top-right":"top-right"},rebuild:!0},showBorder:{type:"boolean",buffer:!0},borderColor:{type:"color",buffer:!0},borderWidth:{type:"number",precision:2,max:.3,min:0,buffer:!0},showBackground:{type:"boolean",rebuild:!0},backgroundColor:{type:"color",buffer:!0},backgroundMargin:{type:"number",precision:2,max:2,min:0,rebuild:!0},backgroundOpacity:{type:"range",step:.01,max:1,min:0,buffer:!0},fixedSize:{type:"boolean",buffer:!0}},this.parameters,{side:null,flatShaded:null,wireframe:null,linewidth:null,roughness:null,metalness:null,diffuse:null}),this.init(i)}return r&&(t.__proto__=r),((t.prototype=Object.create(r&&r.prototype)).constructor=t).prototype.init=function(t){var e=t||{};this.labelType=al(e.labelType,"res"),this.labelText=al(e.labelText,{}),this.labelFormat=al(e.labelFormat,""),this.labelGrouping=al(e.labelGrouping,"atom"),this.fontFamily=al(e.fontFamily,"sans-serif"),this.fontStyle=al(e.fontStyle,"normal"),this.fontWeight=al(e.fontWeight,"bold"),this.xOffset=al(e.xOffset,0),this.yOffset=al(e.yOffset,0),this.zOffset=al(e.zOffset,.5),this.attachment=al(e.attachment,"bottom-left"),this.showBorder=al(e.showBorder,!1),this.borderColor=al(e.borderColor,"lightgrey"),this.borderWidth=al(e.borderWidth,.15),this.showBackground=al(e.showBackground,!1),this.backgroundColor=al(e.backgroundColor,"lightgrey"),this.backgroundMargin=al(e.backgroundMargin,.5),this.backgroundOpacity=al(e.backgroundOpacity,1),this.fixedSize=al(e.fixedSize,!1),r.prototype.init.call(this,e)},t.prototype.getTextData=function(t,i){var r,n,o,a,e=this.getAtomParams(i),s=new eS(this.labelType,this.labelText,this.labelFormat);if("atom"===this.labelGrouping){var c=t.getAtomData(e);r=c.position,n=c.radius,o=c.color,i&&!i.text||(a=[],t.eachAtom(function(t){return a.push(s.atomLabel(t))}))}else if("residue"===this.labelGrouping){i&&!i.position||(r=[]),i&&!i.color||(o=[]),i&&!i.radius||(n=[]),i&&!i.text||(a=[]),e.colorParams&&(e.colorParams.structure=t.getStructure());var u=Up.getScheme(e.colorParams),h=new Cy(e.radiusParams),l=t.getAtomProxy(),p=0;t.eachResidue(function(t){var e=3*p;t.isProtein()||t.isNucleic()?(l.index=t.traceAtomIndex,i&&!i.position||l.positionToArray(r,e)):(l.index=t.atomOffset,i&&!i.position||t.positionToArray(r,e)),i&&!i.color||u.atomColorToArray(l,o,e),i&&!i.radius||(n[p]=h.atomRadius(l)),i&&!i.text||a.push(s.atomLabel(l)),++p}),i&&!i.position||(r=new Float32Array(r)),i&&!i.color||(o=new Float32Array(o)),i&&!i.radius||(n=new Float32Array(n))}return{position:r,size:n,color:o,text:a}},t.prototype.createData=function(t){return{bufferList:[new uw(this.getTextData(t,{position:!0,color:!0,radius:!0,text:!0}),this.getBufferParams({fontFamily:this.fontFamily,fontStyle:this.fontStyle,fontWeight:this.fontWeight,xOffset:this.xOffset,yOffset:this.yOffset,zOffset:this.zOffset,attachment:this.attachment,showBorder:this.showBorder,borderColor:this.borderColor,borderWidth:this.borderWidth,showBackground:this.showBackground,backgroundColor:this.backgroundColor,backgroundMargin:this.backgroundMargin,backgroundOpacity:this.backgroundOpacity,fixedSize:this.fixedSize}))]}},t.prototype.updateData=function(t,e){e.bufferList[0].setAttributes(this.getTextData(e.sview,t))},t.prototype.getAtomRadius=function(){return 0},t}(K_);Gp.add("label",iS);var rS=function(r){function t(t,e,i){r.call(this,t,e,i),this.type="line",this.parameters=Object.assign({multipleBond:{type:"select",rebuild:!0,options:{off:"off",symmetric:"symmetric",offset:"offset"}},bondSpacing:{type:"number",precision:2,max:2,min:.5},linewidth:{type:"integer",max:50,min:1,buffer:!0},lines:{type:"boolean",rebuild:!0},crosses:{type:"select",rebuild:!0,options:{off:"off",lone:"lone",all:"all"}},crossSize:{type:"number",precision:2,max:2,min:.1}},this.parameters,{flatShaded:null,side:null,wireframe:null,roughness:null,metalness:null}),this.init(i)}return r&&(t.__proto__=r),((t.prototype=Object.create(r&&r.prototype)).constructor=t).prototype.init=function(t){var e=t||{};this.multipleBond=al(e.multipleBond,"off"),this.bondSpacing=al(e.bondSpacing,1),this.linewidth=al(e.linewidth,2),this.lines=al(e.lines,!0),this.crosses=al(e.crosses,"lone"),this.crossSize=al(e.crossSize,.4),r.prototype.init.call(this,e)},t.prototype.getAtomRadius=function(t){return.1},t.prototype.getBondParams=function(t,e){return e=Object.assign({multipleBond:this.multipleBond,bondSpacing:this.bondSpacing,radiusParams:{type:"size",size:.1,scale:1}},e),r.prototype.getBondParams.call(this,t,e)},t.prototype._crossData=function(t,e){if(!t||t.position||t.color){var i,r,n,o,a={};"lone"===this.crosses&&(a.atomSet=(r=(i=e).getAtomSet(),n=i.getBondSet(),o=i.getBondProxy(),n.forEach(function(t){o.index=t,r.clear(o.atomIndex1),r.clear(o.atomIndex2)}),r));var s,c,u,h,l,p,d=e.getAtomData(this.getAtomParams(t,a)),f={},m=d.position,g=d.color,v=d.picking,y=(m||g).length,b=3*y;t&&!t.position||(s=f.position1=new Float32Array(b),c=f.position2=new Float32Array(b),l=this.crossSize/2),t&&!t.color||(u=f.color=new Float32Array(b),h=f.color2=new Float32Array(b)),t&&!t.picking||(p=new Float32Array(3*d.picking.array.length));for(var x=0;x<y;x++){var _=3*x,w=3*_;if(!t||t.position){var S=m[_],A=m[_+1],M=m[_+2];s[w]=S-l,s[w+1]=A,s[w+2]=M,c[w]=S+l,c[w+1]=A,c[w+2]=M,s[w+3]=S,s[w+4]=A-l,s[w+5]=M,c[w+3]=S,c[w+4]=A+l,c[w+5]=M,s[w+6]=S,s[w+7]=A,s[w+8]=M-l,c[w+6]=S,c[w+7]=A,c[w+8]=M+l}if(!t||t.color)for(var P=w+9,E=w;E<P;E+=3)u[E]=h[E]=g[_],u[E+1]=h[E+1]=g[_+1],u[E+2]=h[E+2]=g[_+2];t&&!t.picking||(p[_]=p[_+1]=p[_+2]=v.array[x])}return t&&!t.picking||(f.picking=new Zg(p,d.picking.structure)),f}},t.prototype.createData=function(t){var e={position:!0,color:!0,picking:!0},i=[];if(this.lines){var r=t.getBondData(this.getBondParams(e)),n=new pw(r,this.getBufferParams({linewidth:this.linewidth}));i.push(n)}if("off"!==this.crosses){var o=new pw(this._crossData(e,t),this.getBufferParams({linewidth:this.linewidth}));i.push(o)}return{bufferList:i}},t.prototype.updateData=function(t,e){var i=0;if(this.lines){var r=e.sview.getBondData(this.getBondParams(t)),n={};t&&!t.position||(n.position1=r.position1,n.position2=r.position2),t&&!t.color||(n.color=r.color,n.color2=r.color2),e.bufferList[i++].setAttributes(n)}if("off"!==this.crosses){var o=this._crossData(t,e.sview),a={};t&&!t.position||(a.position1=o.position1,a.position2=o.position2),t&&!t.color||(a.color=o.color,a.color2=o.color2),e.bufferList[i++].setAttributes(a)}},t.prototype.setParameters=function(t){var e={};return t&&(t.bondSpacing||t.crossSize)&&(e.position=!0),r.prototype.setParameters.call(this,t,e,!1),this},t}(K_);function nS(t,r,n,e,s){var c=new(e=e||Int32Array)(t*r*n*(s=s||1));function u(t,e,i){return((t*r+e)*n+i)*s}this.data=c,this.index=u,this.set=function(t,e,i){for(var r=arguments,n=u(t,e,i),o=0;o<s;++o)c[n+o]=r[3+o]},this.toArray=function(t,e,i,r,n){var o=u(t,e,i);void 0===r&&(r=[]),void 0===n&&(n=0);for(var a=0;a<s;++a)r[n+a]=c[o+a]},this.fromArray=function(t,e,i,r,n){var o=u(t,e,i);void 0===n&&(n=0);for(var a=0;a<s;++a)c[o+a]=r[n+a]},this.copy=function(t){this.data.set(t.data)},this.clone=function(){return new nS(t,r,n,e,s).copy(this)}}function oS(T,I,c){var p=jv(I),t=Jf(T);0===T.length&&(t[0].set([0,0,0]),t[1].set([0,0,0]));var d,R,g,L,O,D,u,k,B,N,v,F,z,w,U,h=t[0],l=t[1];var j=1,E=2,S=4,A=[new Int32Array([1,0,0]),new Int32Array([-1,0,0]),new Int32Array([0,1,0]),new Int32Array([0,-1,0]),new Int32Array([0,0,1]),new Int32Array([0,0,-1]),new Int32Array([1,1,0]),new Int32Array([1,-1,0]),new Int32Array([-1,1,0]),new Int32Array([-1,-1,0]),new Int32Array([1,0,1]),new Int32Array([1,0,-1]),new Int32Array([-1,0,1]),new Int32Array([-1,0,-1]),new Int32Array([0,1,1]),new Int32Array([0,1,-1]),new Int32Array([0,-1,1]),new Int32Array([0,-1,-1]),new Int32Array([1,1,1]),new Int32Array([1,1,-1]),new Int32Array([1,-1,1]),new Int32Array([-1,1,1]),new Int32Array([1,-1,-1]),new Int32Array([-1,-1,1]),new Int32Array([-1,1,-1]),new Int32Array([-1,-1,-1])];function f(t){var e,i,r,n,o,a,s,c,u,h;for(var l in p)if(e=parseFloat(l),!B[l]){for(a=(s=t?(e+d)*R+.5:e*R+.5)*s,c=Math.floor(s)+1,u=new Int32Array(c*c),i=h=0;i<c;++i)for(r=0;r<c;++r)a<(n=i*i+r*r)?u[h]=-1:(o=Math.sqrt(a-n),u[h]=Math.floor(o)),++h;N[l]=c,B[l]=u}}function m(t){var e,i,r,n,o,a,s,c,u,h,l,p,d,f,m,g,v,y,b=3*t,x=t;e=Math.floor(.5+R*(T[b]+k[0])),i=Math.floor(.5+R*(T[b+1]+k[1])),r=Math.floor(.5+R*(T[b+2]+k[2]));var _,w=I[x],S=B[w],A=0,M=O*D,P=N[w];for(h=0;h<P;++h)for(l=0;l<P;++l){if(-1!==(_=S[A]))for(g=-1;g<2;++g)for(v=-1;v<2;++v)for(y=-1;y<2;++y)if(0!==g&&0!==v&&0!==y)for(s=g*h,u=y*l,p=0;p<=_;++p)if(f=i+(c=p*v),m=r+u,!((d=e+s)<0||f<0||m<0||L<=d||O<=f||D<=m)){var E=d*M+f*D+m;if(F)if(z[E]&j){if(z[E]&j){var C=U[E];C!==b&&s*s+c*c+u*u<(n=e+s-Math.floor(.5+R*(T[C]+k[0])))*n+(o=i+c-Math.floor(.5+R*(T[C+1]+k[1])))*o+(a=r+u-Math.floor(.5+R*(T[C+2]+k[2])))*a&&(U[E]=t)}}else z[E]|=j,U[E]=t;else z[E]|=j}A++}}function y(t){var e,i,r,n,o,a,s,c,u,h,l,p,d,f,m,g,v,y,b,x=3*t,_=t,w=0;e=Math.floor(.5+R*(T[x]+k[0])),i=Math.floor(.5+R*(T[x+1]+k[1])),r=Math.floor(.5+R*(T[x+2]+k[2]));var S=I[_],A=O*D;for(d=0,b=N[S];d<b;++d)for(f=0;f<b;++f){if(-1!==B[S][w])for(g=-1;g<2;++g)for(v=-1;v<2;++v)for(y=-1;y<2;++y)if(0!==g&&0!==v&&0!==y)for(s=g*d,u=y*f,m=0;m<=B[S][w];++m)if(l=i+(c=m*v),p=r+u,!((h=e+s)<0||l<0||p<0||L<=h||O<=l||D<=p)){var M=h*A+l*D+p;if(z[M]&E){if(F){var P=U[M];s*s+c*c+u*u<(n=Math.floor(.5+R*(T[P]+k[0])))*n+(o=Math.floor(.5+R*(T[P+1]+k[1])))*o+(a=Math.floor(.5+R*(T[P+2]+k[2])))*a&&(U[M]=t)}}else z[M]|=E,F&&(U[M]=t)}w++}}function b(t,e,i,r){var n,o,a,s,c,u,h,l,p,d,f,m,g=new Uint16Array(3),v=0;if(0===i)return v;var y=-1,b=-1,x=-1,_=O*D;for(h=0,p=i;h<p;h+=3)for(n=t[h],o=t[h+1],a=t[h+2],e.toArray(n,o,a,g),l=0;l<6;++l)y=n+(m=A[l])[0],b=o+m[1],x=a+m[2],y<L&&-1<y&&b<O&&-1<b&&x<D&&-1<x&&(z[f=y*_+D*b+x]&j&&!(z[f]&E)?(e.fromArray(y,b,x,g),d=(s=y-g[0])*s+(c=b-g[1])*c+(u=x-g[2])*u,w[f]=d,z[f]|=E,z[f]|=S,r[v]=y,r[v+1]=b,r[v+2]=x,v+=3):z[f]&j&&z[f]&E&&(d=(s=y-g[0])*s+(c=b-g[1])*c+(u=x-g[2])*u)<w[f]&&(e.fromArray(y,b,x,g),w[f]=d,z[f]&S||(z[f]|=S,r[v]=y,r[v+1]=b,r[v+2]=x,v+=3)));for(h=0,p=i;h<p;h+=3)for(n=t[h],o=t[h+1],a=t[h+2],e.toArray(n,o,a,g),l=6;l<18;l++)y=n+(m=A[l])[0],b=o+m[1],x=a+m[2],y<L&&-1<y&&b<O&&-1<b&&x<D&&-1<x&&(z[f=y*_+D*b+x]&j&&!(z[f]&E)?(e.fromArray(y,b,x,g),d=(s=y-g[0])*s+(c=b-g[1])*c+(u=x-g[2])*u,w[f]=d,z[f]|=E,z[f]|=S,r[v]=y,r[v+1]=b,r[v+2]=x,v+=3):z[f]&j&&z[f]&E&&(d=(s=y-g[0])*s+(c=b-g[1])*c+(u=x-g[2])*u)<w[f]&&(e.fromArray(y,b,x,g),w[f]=d,z[f]&S||(z[f]|=S,r[v]=y,r[v+1]=b,r[v+2]=x,v+=3)));for(h=0,p=i;h<p;h+=3)for(n=t[h],o=t[h+1],a=t[h+2],e.toArray(n,o,a,g),l=18;l<26;l++)y=n+(m=A[l])[0],b=o+m[1],x=a+m[2],y<L&&-1<y&&b<O&&-1<b&&x<D&&-1<x&&(z[f=y*_+D*b+x]&j&&!(z[f]&E)?(e.fromArray(y,b,x,g),d=(s=y-g[0])*s+(c=b-g[1])*c+(u=x-g[2])*u,w[f]=d,z[f]|=E,z[f]|=S,r[v]=y,r[v+1]=b,r[v+2]=x,v+=3):z[f]&j&&z[f]&E&&(d=(s=y-g[0])*s+(c=b-g[1])*c+(u=x-g[2])*u)<w[f]&&(e.fromArray(y,b,x,g),w[f]=d,z[f]&S||(z[f]|=S,r[v]=y,r[v+1]=b,r[v+2]=x,v+=3)));return v}this.getVolume=function(t,e,i,r,n){console.time("EDTSurface.getVolume");var o="vws"!==t;!function(t,e,i,r,n){d=e||1.4,R=i||2,F=n||!0;var o=0;for(var a in p)o=Math.max(o,a);var s=Gv(h,l,o,R,t?d:0);L=s.dim[0],O=s.dim[1],D=s.dim[2],u=s.matrix,k=s.tran,R=s.scaleFactor,B={},N={},f(t),v=d*R,g=r||d/R,z=new Uint8Array(L*O*D),t&&(w=new Float64Array(L*O*D)),F&&(U=new Int32Array(L*O*D))}(o,e,i,r,n),function(t){var e,i;for(console.time("EDTSurface fillvoxels"),e=0,i=z.length;e<i;++e)z[e]=0,t&&(w[e]=-1),F&&(U[e]=-1);for(e=0,i=T.length/3;e<i;++e)m(e);for(e=0,i=z.length;e<i;++e)z[e]&j&&(z[e]|=E);console.timeEnd("EDTSurface fillvoxels")}(o),function(){var t,e,i,r=O*D;for(t=0;t<L;++t)for(e=0;e<D;++e)for(i=0;i<O;++i){var n=t*r+i*D+e;if(z[n]&j)for(var o=0;o<26;){var a=t+A[o][0],s=e+A[o][2],c=i+A[o][1];if(-1<a&&a<L&&-1<c&&c<O&&-1<s&&s<D&&!(z[a*r+c*D+s]&j)){z[n]|=S;break}o++}}}(),"ms"!==t&&"ses"!==t||function(){var t,e,i,r;console.time("EDTSurface fastdistancemap");var n,o=new nS(L,O,D,Uint16Array,3),a=O*D,s=v*v,c=0;for(t=0;t<L;++t)for(e=0;e<O;++e)for(i=0;i<D;++i)z[n=t*a+e*D+i]&=~E,z[n]&j&&z[n]&S&&(o.set(t,e,i,t,e,i),w[n]=0,z[n]|=E,c+=1);var u=new Int32Array(3*c),h=0,l=new Int32Array(3*c),p=0;for(t=0;t<L;++t)for(e=0;e<O;++e)for(i=0;i<D;++i)z[n=t*a+e*D+i]&S&&(u[h]=t,u[h+1]=e,u[h+2]=i,h+=3,z[n]&=~S);do{for(p=b(u,o,h,l),t=h=0,r=p;t<r;t+=3)n=a*l[t]+D*l[t+1]+l[t+2],z[n]&=~S,w[n]<=1.0404*s&&(u[h]=l[t],u[h+1]=l[t+1],u[h+2]=l[t+2],h+=3)}while(0<h);var d,f=g*g,m=new Uint16Array(3);for(t=0;t<L;++t)for(e=0;e<O;++e)for(i=0;i<D;++i)z[n=t*a+e*D+i]&=~S,z[n]&j&&(z[n]&E&&!(z[n]&E&&w[n]>=f)||(z[n]|=S,F&&z[n]&E&&(o.toArray(t,e,i,m),d=m[0]*a+m[1]*D+m[2],U[n]=U[d])));console.timeEnd("EDTSurface fastdistancemap")}(),"ses"===t&&(f(!1),function(){var t,e;for(t=0,e=z.length;t<e;++t)z[t]&=~E;for(t=0,e=T.length/3;t<e;++t)y(t)}()),function(t){var e,i=z.length;if("vws"===t)for(e=0;e<i;++e)z[e]&=~S,z[e]=z[e]&E?1:0;else if("ms"===t)for(e=0;e<i;++e)z[e]&=~E,z[e]&S&&(z[e]|=E),z[e]&=~S,z[e]=z[e]&E?1:0;else if("ses"===t)for(e=0;e<i;++e)z[e]&S&&z[e]&E?z[e]&=~S:z[e]&S&&!(z[e]&E)&&(z[e]|=E),z[e]=z[e]&E?1:0;else if("sas"===t)for(e=0;e<i;++e)z[e]&=~S,z[e]=z[e]&E?1:0}(t);for(var a=0,s=U.length;a<s;++a)U[a]=c[U[a]];return console.timeEnd("EDTSurface.getVolume"),{data:z,nx:D,ny:O,nz:L,atomindex:U}},this.getSurface=function(t,e,i,r,n,o,a){var s=this.getVolume(t,e,i,r,n);return new $v(s.data,s.nx,s.ny,s.nz,s.atomindex).getSurface(1,o,void 0,u,a)}}function aS(T,I,R,L,t,e,i){var r=T.length,O=t[0],D=t[1],k=t[2],n=e[0],o=e[1],a=e[2];function B(t,e){return Math.floor((t-e)/i)}for(var s,c,u,N=B(n,O)+1,F=B(o,D)+1,z=B(a,k)+1,h=N*F*z,U=F*z,l=[],p=0;p<r;p++){var d=(s=T[p],c=I[p],u=R[p],(B(s,O)*F+B(c,D))*z+B(u,k));void 0===l[d]?l[d]=[p]:l[d].push(p)}var j=new Uint32Array(h),G=new Uint16Array(h),V=new Uint32Array(r),f=0,m=0;for(p=0;p<h;p++){var g=j[p]=f,v=l[p];if(void 0!==v)for(var y=0;y<v.length;y++)V[f]=v[y],f++;var b=f-g;m<(G[p]=b)&&(m=b)}this.neighbourListLength=27*m+1,this.withinRadii=function(t,e,i,r,n){for(var o=0,a=B(t,O),s=B(e,D),c=B(i,k),u=Math.max(0,a-1),h=Math.max(0,s-1),l=Math.max(0,c-1),p=Math.min(N,a+1),d=Math.min(F,s+1),f=Math.min(z,c+1),m=u;m<=p;++m)for(var g=m*U,v=h;v<=d;++v)for(var y=v*z,b=l;b<=f;++b)for(var x=g+y+b,_=j[x],w=_+G[x],S=_;S<w;S++){var A=V[S],M=T[A]-t,P=I[A]-e,E=R[A]-i,C=L[A]+r;M*M+P*P+E*E<=C*C&&(n[o++]=V[S])}n[o]=-1}}function sS(u,c,r){for(var O=c.length,N=new Float32Array(O),F=new Float32Array(O),z=new Float32Array(O),t=0;t<O;t++){var e=3*t;N[t]=u[e],F[t]=u[e+1],z[t]=u[e+2]}var i=Jf(u);0===u.length&&(i[0].set([0,0,0]),i[1].set([0,0,0]));var U,D,h,l,j,G,V,H,p,$,W,X,q,Y,Z,K,k,B,J,Q=i[0],d=i[1],tt=-1,et=new Float32Array([0,0,0]),it=new Float32Array([0,0,0]),rt=new Float32Array([0,0,0]);function n(t,e,i,r){l=al(t,1.4),j=al(e,2),G=al(i,!0),V=al(r,30),U=new Float32Array(O),D=new Float32Array(O);for(var n=0;n<U.length;++n){var o=c[n]+l;U[n]=o,D[n]=o*o}for(var a=h=0;a<U.length;++a)U[a]>h&&(h=U[a]);var s;s=Gv(Q,d,h,j,0),j=s.scaleFactor,H=s.dim,p=s.matrix,J=Math.min(5,2+Math.floor(l*j)),$=Td(H[0]*H[1]*H[2],-1001),W=new Int32Array($.length),X=new Float32Array(H[0]),q=new Float32Array(H[1]),Y=new Float32Array(H[2]),f(X,Q[0],1/j),f(q,Q[1],1/j),f(Y,Q[2],1/j),function(){var t=0,e=2*Math.PI/V;K=new Float32Array(V),Z=new Float32Array(V);for(var i=0;i<V;i++)K[i]=Math.cos(t),Z[i]=Math.sin(t),t+=e}(),k=new aS(N,F,z,U,Q,d,2.01*h),B=new Int32Array(k.neighbourListLength),tt=-1}function f(t,e,i){for(var r=0;r<t.length;r++)t[r]=e+i*r}function nt(t,e,i,r,n){var o;if(-1!==tt){if((o=tt)!==r&&o!==n&&s(o,t,e,i))return o;tt=-1}var a=0;for(o=B[a];0<=o;){if(o!==r&&o!==n&&s(o,t,e,i))return tt=o;o=B[++a]}return tt=-1}function s(t,e,i,r){var n=3*t,o=D[t],a=u[n]-e,s=u[n+1]-i,c=u[n+2]-r;return a*a+s*s+c*c<o}function o(t,e){var i,r,n=U[t],o=U[e],a=et[0]=N[e]-N[t],s=et[1]=F[e]-F[t],c=et[2]=z[e]-z[t],u=a*a+s*s+c*c,h=Math.sqrt(u),l=n*((n*n+h*h-o*o)/(2*n*h));pm(et,et),r=et,(i=it)[0]=i[1]=i[2]=1,0!==r[0]?i[0]=(r[1]+r[2])/-r[0]:0!==r[1]?i[1]=(r[0]+r[2])/-r[1]:0!==r[2]&&(i[2]=(r[0]+r[1])/-r[2]),pm(it,it),rm(rt,et,it),pm(rt,rt);var p=Math.sqrt(n*n-l*l);lm(it,it,p),lm(rt,rt,p),lm(et,et,l),et[0]+=N[t],et[1]+=F[t],et[2]+=z[t],tt=-1;for(var d=J,f=0;f<V;f++){var m=K[f],g=Z[f],v=et[0]+m*it[0]+g*rt[0],y=et[1]+m*it[1]+g*rt[1],b=et[2]+m*it[2]+g*rt[2];if(-1===nt(v,y,b,t,e))for(var x=Math.floor(j*(v-Q[0])),_=Math.floor(j*(y-Q[1])),w=Math.floor(j*(b-Q[2])),S=Math.max(0,x-d),A=Math.max(0,_-d),M=Math.max(0,w-d),P=Math.min(H[0],x+d+2),E=Math.min(H[1],_+d+2),C=Math.min(H[2],w+d+2),T=S;T<P;T++){a=v-X[T];for(var I=H[1]*H[2]*T,R=A;R<E;R++)for(var L=a*a+(s=y-q[R])*s,O=I+H[2]*R,D=M;D<C;D++){u=L+(c=b-Y[D])*c;var k=D+O,B=$[k];0<B&&u<B*B&&($[k]=Math.sqrt(u),G&&(W[k]=t))}}}}function m(t,e,i){console.time("AVSurface.getVolume"),console.time("AVSurface.init"),n(t,e,i),console.timeEnd("AVSurface.init"),console.time("AVSurface.projectPoints"),function(){for(var t=0;t<O;t++){var e=N[t],i=F[t],r=z[t],n=U[t],o=D[t];k.withinRadii(e,i,r,n,B);for(var a=Math.ceil(n*j),s=Math.floor(j*(e-Q[0])),c=Math.floor(j*(i-Q[1])),u=Math.floor(j*(r-Q[2])),h=Math.max(0,s-a),l=Math.max(0,c-a),p=Math.max(0,u-a),d=Math.min(H[0],s+a+2),f=Math.min(H[1],c+a+2),m=Math.min(H[2],u+a+2),g=h;g<d;g++)for(var v=X[g]-e,y=H[1]*H[2]*g,b=l;b<f;b++)for(var x=q[b]-i,_=v*v+x*x,w=y+H[2]*b,S=p;S<m;S++){var A=Y[S]-r,M=_+A*A;if(M<o){var P=S+w;$[P]<0&&($[P]=-$[P]);var E=Math.sqrt(M),C=n/E,T=v*C,I=x*C,R=A*C;if(-1===nt(T+=e,I+=i,R+=r,t,-1)){var L=n-E;L<$[P]&&($[P]=L,G&&(W[P]=t))}}}}}(),console.timeEnd("AVSurface.projectPoints"),console.time("AVSurface.projectTorii"),function(){for(var t=0;t<O;t++){k.withinRadii(N[t],F[t],z[t],U[t],B);for(var e=0,i=B[e];0<=i;)t<i&&o(t,i),i=B[++e]}}(),console.timeEnd("AVSurface.projectTorii"),function(){for(var t=0;t<$.length;t++)$[t]<0&&($[t]=0)}(),function(){for(var t=0;t<W.length;t++)W[t]=r[W[t]]}(),console.timeEnd("AVSurface.getVolume")}this.getSurface=function(t,e,i,r,n,o,a){return m(e,i,n),new $v($,H[2],H[1],H[0],W).getSurface(e,!1,void 0,p,a)}}Gp.add("line",rS),oS.__deps=[Gv,jv,$v,Jf,nS],sS.__deps=[Gv,$v,Td,Jf,lm,rm,pm,aS,al],zp.add("molsurf",function(t,e){var i=t.data.args,r=t.data.params;if(i&&r){var n=new("av"===r.type?sS:oS)(i.coordList,i.radiusList,i.indexList).getSurface(r.type,r.probeRadius,r.scaleFactor,r.cutoff,!0,r.smooth,r.contour),o=[n.position.buffer,n.index.buffer];n.normal&&o.push(n.normal.buffer),n.atomindex&&o.push(n.atomindex.buffer),e({sd:n,p:r},o)}},[oS,sS]);var cS=function(t){this.structure=t};cS.prototype._getAtomData=function(){return this.structure.getAtomData({what:{position:!0,radius:!0,index:!0},radiusParams:{type:"vdw",scale:1}})},cS.prototype._makeSurface=function(t,e){var i=new Vv(e.name,"",t);return i.info.type=e.type,i.info.probeRadius=e.probeRadius,i.info.scaleFactor=e.scaleFactor,i.info.smooth=e.smooth,i.info.cutoff=e.cutoff,i},cS.prototype.getSurface=function(t){var e=t||{},i=this._getAtomData(),r=i.position,n=i.radius,o=i.index,a=new("av"===e.type?sS:oS)(r,n,o).getSurface(e.type,e.probeRadius,e.scaleFactor,e.cutoff,!0,e.smooth,e.contour);return this._makeSurface(a,e)},cS.prototype.getSurfaceWorker=function(t,i){var r=this,n=Object.assign({},t);if(window.Worker){void 0===this.worker&&(this.worker=new qf("molsurf"));var e=this._getAtomData(),o=e.position,a=e.radius,s=e.index,c={args:{coordList:o,radiusList:a,indexList:s},params:n},u=[o.buffer,a.buffer,s.buffer];this.worker.post(c,u,function(t){i(r._makeSurface(t.data.sd,n))},function(t){console.warn("MolecularSurface.getSurfaceWorker error - trying without worker",t),r.worker.terminate(),r.worker=void 0;var e=r.getSurface(n);i(e)})}else{var h=this.getSurface(n);i(h)}},cS.prototype.dispose=function(){this.worker&&this.worker.terminate()};var uS=function(r){function t(t,e,i){r.call(this,t,e,i),this.type="surface",this.parameters=Object.assign({surfaceType:{type:"select",rebuild:!0,options:{vws:"vws",sas:"sas",ms:"ms",ses:"ses",av:"av"}},probeRadius:{type:"number",precision:1,max:20,min:0,rebuild:!0},smooth:{type:"integer",precision:1,max:10,min:0,rebuild:!0},scaleFactor:{type:"number",precision:1,max:5,min:0,rebuild:!0},cutoff:{type:"number",precision:2,max:50,min:0,rebuild:!0},contour:{type:"boolean",rebuild:!0},background:{type:"boolean",rebuild:!0},opaqueBack:{type:"boolean",buffer:!0},filterSele:{type:"text",rebuild:!0},colorVolume:{type:"hidden"},useWorker:{type:"boolean",rebuild:!0}},this.parameters,{radiusType:null,radius:null,scale:null}),this.__infoList=[],this.structure.signals.refreshed.add(function(){this.__forceNewMolsurf=!0},this),this.init(i)}return r&&(t.__proto__=r),((t.prototype=Object.create(r&&r.prototype)).constructor=t).prototype.init=function(t){var e=t||{};e.colorScheme=al(e.colorScheme,"uniform"),e.colorValue=al(e.colorValue,14540253),e.disablePicking=al(e.disablePicking,!0),this.surfaceType=al(e.surfaceType,"ms"),this.probeRadius=al(e.probeRadius,1.4),this.smooth=al(e.smooth,2),this.scaleFactor=al(e.scaleFactor,2),this.cutoff=al(e.cutoff,0),this.contour=al(e.contour,!1),this.background=al(e.background,!1),this.opaqueBack=al(e.opaqueBack,!0),this.filterSele=al(e.filterSele,""),this.colorVolume=al(e.colorVolume,void 0),this.useWorker=al(e.useWorker,!0),r.prototype.init.call(this,t)},t.prototype.prepareData=function(t,e,i){var r=this.__infoList[e];if(r||(r={},this.__infoList[e]=r),r.molsurf&&r.sele===t.selection.string)i(e);else{if(this.filterSele){var n=t.structure.getView(new bp(this.filterSele)),o=n.boundingBox.getSize(),a=Math.max(o.x,o.y,o.z),s=t.getAtomSetWithinPoint(n.center,a/2+6);t=t.getView(new bp(t.getAtomSetWithinSelection(s,3).toSeleString()))}r.sele=t.selection.string,r.molsurf=new cS(t);var c=this.getSurfaceParams(),u=function(t){r.surface=t,i(e)};this.useWorker?r.molsurf.getSurfaceWorker(c,u):u(r.molsurf.getSurface(c))}},t.prototype.prepare=function(t){var r=this;if((this.__forceNewMolsurf||this.__sele!==this.selection.string||this.__surfaceParams!==JSON.stringify(this.getSurfaceParams()))&&(this.__infoList.forEach(function(t){t.molsurf.dispose()}),this.__infoList.length=0),0!==this.structureView.atomCount){var n=function(){this.__sele=this.selection.string,this.__surfaceParams=JSON.stringify(this.getSurfaceParams()),this.__forceNewMolsurf=!1,t()}.bind(this),e="default"===this.assembly?this.defaultAssembly:this.assembly,o=this.structure.biomolDict[e];o?o.partList.forEach(function(t,e){var i=t.getView(r.structureView);r.prepareData(i,e,function(t){t===o.partList.length-1&&n()})}):this.prepareData(this.structureView,0,n)}else t()},t.prototype.createData=function(t,e){var i=this.__infoList[e],r=i.surface,n={position:r.getPosition(),color:r.getColor(this.getColorParams()),index:r.getFilteredIndex(this.filterSele,t)},o=[];if(r.contour){var a=new sy(n,this.getBufferParams({wireframe:!1}));o.push(a)}else{n.normal=r.getNormal(),n.picking=r.getPicking(t.getStructure());var s=new iy(n,this.getBufferParams({background:this.background,opaqueBack:this.opaqueBack,dullInterior:!1})),c=new oy(s);o.push(c)}return{bufferList:o,info:i}},t.prototype.updateData=function(t,e){var i={};if(t.position)return this.__forceNewMolsurf=!0,void this.build();t.color&&(i.color=e.info.surface.getColor(this.getColorParams())),t.index&&(i.index=e.info.surface.getFilteredIndex(this.filterSele,e.sview)),e.bufferList[0].setAttributes(i)},t.prototype.setParameters=function(t,e,i){return e=e||{},t&&t.filterSele&&(e.index=!0),t&&void 0!==t.colorVolume&&(e.color=!0),t&&t.wireframe&&(t.contour||void 0===t.contour&&this.contour)&&(t.wireframe=!1),r.prototype.setParameters.call(this,t,e,i),this},t.prototype.getSurfaceParams=function(t){return Object.assign({type:this.surfaceType,probeRadius:this.probeRadius,scaleFactor:this.scaleFactor,smooth:this.smooth&&!this.contour,cutoff:this.cutoff,contour:this.contour,useWorker:this.useWorker},t)},t.prototype.getColorParams=function(){var t=r.prototype.getColorParams.call(this);return t.volume=this.colorVolume,t},t.prototype.getAtomRadius=function(){return 0},t.prototype.clear=function(){r.prototype.clear.call(this)},t.prototype.dispose=function(){this.__infoList.forEach(function(t){t.molsurf.dispose()}),this.__infoList.length=0,r.prototype.dispose.call(this)},t}(K_);Gp.add("surface",uS);var hS=function(r){function t(t,e,i){r.call(this,t,e,i),this.type="point",this.parameters=Object.assign({pointSize:{type:"number",precision:1,max:100,min:0,buffer:!0},sizeAttenuation:{type:"boolean",buffer:!0},sortParticles:{type:"boolean",rebuild:!0},useTexture:{type:"boolean",buffer:!0},alphaTest:{type:"range",step:.001,max:1,min:0,buffer:!0},forceTransparent:{type:"boolean",buffer:!0},edgeBleach:{type:"range",step:.001,max:1,min:0,buffer:!0}},this.parameters,{flatShaded:null,wireframe:null,linewidth:null,side:null,roughness:null,metalness:null}),this.init(i)}return r&&(t.__proto__=r),((t.prototype=Object.create(r&&r.prototype)).constructor=t).prototype.init=function(t){var e=t||{};this.pointSize=al(e.pointSize,1),this.sizeAttenuation=al(e.sizeAttenuation,!0),this.sortParticles=al(e.sortParticles,!1),this.useTexture=al(e.useTexture,!1),this.alphaTest=al(e.alphaTest,.5),this.forceTransparent=al(e.forceTransparent,!1),this.edgeBleach=al(e.edgeBleach,0),r.prototype.init.call(this,e)},t.prototype.createData=function(t){var e=t.getAtomData(this.getAtomParams({position:!0,color:!0,picking:!0}));return{bufferList:[new gx(e,this.getBufferParams({pointSize:this.pointSize,sizeAttenuation:this.sizeAttenuation,sortParticles:this.sortParticles,useTexture:this.useTexture,alphaTest:this.alphaTest,forceTransparent:this.forceTransparent,edgeBleach:this.edgeBleach}))]}},t.prototype.updateData=function(t,e){var i=e.sview.getAtomData(this.getAtomParams(t)),r={};t&&!t.position||(r.position=i.position),t&&!t.color||(r.color=i.color),e.bufferList[0].setAttributes(r)},t.prototype.getAtomRadius=function(){return.1},t}(K_);Gp.add("point",hS),Hp.add("shader/Ribbon.vert","#define STANDARD\nuniform float clipNear;\nuniform vec3 clipCenter;\n#if defined( NEAR_CLIP ) || defined( RADIUS_CLIP ) || !defined( PICKING )\nvarying vec3 vViewPosition;\n#endif\n#if defined( RADIUS_CLIP )\nvarying vec3 vClipCenter;\n#endif\nattribute vec3 dir;\nattribute float size;\n#ifdef PICKING\n#include unpack_color\nattribute float primitiveId;\nvarying vec3 vPickingColor;\n#else\n#include color_pars_vertex\n#ifndef FLAT_SHADED\nvarying vec3 vNormal;\n#endif\n#endif\n#include common\nvoid main(void){\n#ifdef PICKING\nvPickingColor = unpackColor( primitiveId );\n#else\n#include color_vertex\n#include beginnormal_vertex\n#include defaultnormal_vertex\n#ifndef FLAT_SHADED\nvNormal = normalize( transformedNormal );\n#endif\n#endif\n#include begin_vertex\ntransformed += normalize( dir ) * size;\n#include project_vertex\n#if defined( NEAR_CLIP ) || defined( RADIUS_CLIP ) || !defined( PICKING )\nvViewPosition = -mvPosition.xyz;\n#endif\n#if defined( RADIUS_CLIP )\nvClipCenter = -( modelViewMatrix * vec4( clipCenter, 1.0 ) ).xyz;\n#endif\n#include nearclip_vertex\n}");var lS=new Uint16Array([0,1,2,1,3,2]);function pS(t){return 3*(4*(t.position.length/3-1))}var dS=function(o){function t(t,e){void 0===e&&(e={}),o.call(this,{position:new Float32Array(pS(t)),color:new Float32Array(pS(t)),index:bl(pS(t),pS(t)/3),normal:new Float32Array(pS(t)),picking:t.picking},e),this.vertexShader="Ribbon.vert";var i=t.position.length/3-1,r=4*i,n=3*r;this.addAttributes({dir:{type:"v3",value:new Float32Array(n)}}),this.addAttributes({size:{type:"f",value:new Float32Array(r)}}),t.primitiveId=Rd(i),this.setAttributes(t),this.makeIndex()}return o&&(t.__proto__=o),((t.prototype=Object.create(o&&o.prototype)).constructor=t).prototype.setAttributes=function(t){void 0===t&&(t={});var e,i,r,n,o,a,s,c,u,h,l,p,d,f,m,g,v,y,b,x=this.size/4,_=this.geometry.attributes;t.position&&(e=t.position,s=_.position.array,_.position.needsUpdate=!0),t.normal&&(i=t.normal,c=_.normal.array,_.normal.needsUpdate=!0),t.size&&(r=t.size,u=_.size.array,_.size.needsUpdate=!0),t.dir&&(n=t.dir,h=_.dir.array,_.dir.needsUpdate=!0),t.color&&(o=t.color,l=_.color.array,_.color.needsUpdate=!0),t.primitiveId&&(a=t.primitiveId,p=_.primitiveId.array,_.primitiveId.needsUpdate=!0);var w=r?r[0]:null;for(d=0;d<x;++d){for(m=(y=3*d)*4,v=4*d,e&&(s[m]=s[m+3]=e[y],s[m+1]=s[m+4]=e[y+1],s[m+2]=s[m+5]=e[y+2],s[m+6]=s[m+9]=e[y+3],s[m+7]=s[m+10]=e[y+4],s[m+8]=s[m+11]=e[y+5]),i&&(c[m]=c[m+3]=-i[y],c[m+1]=c[m+4]=-i[y+1],c[m+2]=c[m+5]=-i[y+2],c[m+6]=c[m+9]=-i[y+3],c[m+7]=c[m+10]=-i[y+4],c[m+8]=c[m+11]=-i[y+5]),f=0;f<4;++f)g=m+3*f,o&&(l[g]=o[y],l[g+1]=o[y+1],l[g+2]=o[y+2]),a&&(p[v+f]=a[d]);r&&(b=r[d],w!==r[d]?(u[v]=w,u[v+1]=w):(u[v]=b,u[v+1]=b),u[v+2]=b,w=u[v+3]=b),n&&(h[m]=n[y],h[m+1]=n[y+1],h[m+2]=n[y+2],h[m+3]=-n[y],h[m+4]=-n[y+1],h[m+5]=-n[y+2],h[m+6]=n[y+3],h[m+7]=n[y+4],h[m+8]=n[y+5],h[m+9]=-n[y+3],h[m+10]=-n[y+4],h[m+11]=-n[y+5])}},t.prototype.makeIndex=function(){for(var t=this.geometry.getIndex().array,e=t.length/4/3,i=0;i<e;++i){var r=6*i,n=4*i;t.set(lS,r);for(var o=0;o<6;++o)t[r+o]+=n}},t}(ey),fS=function(r){function t(t,e,i){r.call(this,t,e,i),this.type="ribbon",this.parameters=Object.assign({subdiv:{type:"integer",max:50,min:1,rebuild:!0},tension:{type:"number",precision:1,max:1,min:.1},smoothSheet:{type:"boolean",rebuild:!0}},this.parameters,{side:null,wireframe:null,linewidth:null}),this.init(i)}return r&&(t.__proto__=r),((t.prototype=Object.create(r&&r.prototype)).constructor=t).prototype.init=function(t){var e=t||{};e.colorScheme=al(e.colorScheme,"chainname"),e.colorScale=al(e.colorScale,"RdYlBu"),e.radiusType=al(e.radiusType,"sstruc"),e.radiusScale=al(e.radiusScale,4),"low"===e.quality?this.subdiv=3:"medium"===e.quality?this.subdiv=6:"high"===e.quality?this.subdiv=12:this.subdiv=al(e.subdiv,6),this.tension=al(e.tension,NaN),this.smoothSheet=al(e.smoothSheet,!1),r.prototype.init.call(this,e)},t.prototype.getSplineParams=function(t){return Object.assign({subdiv:this.subdiv,tension:this.tension,directional:!0,smoothSheet:this.smoothSheet},t)},t.prototype.getAtomRadius=function(t){return t.isTrace()?r.prototype.getAtomRadius.call(this,t):0},t.prototype.createData=function(t){var s=this,c=[],u=[];return this.structure.eachPolymer(function(t){if(!(t.residueCount<4)){u.push(t);var e=new Ow(t,s.getSplineParams()),i=e.getSubdividedPosition(),r=e.getSubdividedOrientation(),n=e.getSubdividedColor(s.getColorParams()),o=e.getSubdividedPicking(),a=e.getSubdividedSize(s.getRadiusParams());c.push(new dS({position:i.position,normal:r.binormal,dir:r.normal,color:n.color,size:a.size,picking:o.picking},s.getBufferParams()))}},t.getSelection()),{bufferList:c,polymerList:u}},t.prototype.updateData=function(t,e){t=t||{};var i=0,r=e.polymerList.length;for(i=0;i<r;++i){var n={},o=new Ow(e.polymerList[i],this.getSplineParams());if(t.position){var a=o.getSubdividedPosition(),s=o.getSubdividedOrientation();n.position=a.position,n.normal=s.binormal,n.dir=s.normal}if(t.radius||t.scale){var c=o.getSubdividedSize(this.getRadiusParams());n.size=c.size}if(t.color){var u=o.getSubdividedColor(this.getColorParams());n.color=u.color}e.bufferList[i].setAttributes(n)}},t.prototype.setParameters=function(t){var e={};return t&&t.tension&&(e.position=!0),r.prototype.setParameters.call(this,t,e,!1),this},t}(K_);Gp.add("ribbon",fS);var mS=function(r){function t(t,e,i){r.call(this,t,e,i),this.type="rocket",this.parameters=Object.assign({localAngle:{type:"integer",max:180,min:0,rebuild:!0},centerDist:{type:"number",precision:1,max:10,min:0,rebuild:!0},ssBorder:{type:"boolean",rebuild:!0},radialSegments:!0,openEnded:!0,disableImpostor:!0},this.parameters),this.helixbundleList=[],this.init(i)}return r&&(t.__proto__=r),((t.prototype=Object.create(r&&r.prototype)).constructor=t).prototype.init=function(t){var e=t||{};e.colorScheme=al(e.colorScheme,"sstruc"),e.radiusSize=al(e.radiusSize,1.5),e.radiusScale=al(e.radiusScale,1),e.openEnded=al(e.openEnded,!1),e.useInteriorColor=al(e.useInteriorColor,!0),this.localAngle=al(e.localAngle,30),this.centerDist=al(e.centerDist,2.5),this.ssBorder=al(e.ssBorder,!1),r.prototype.init.call(this,e)},t.prototype.createData=function(t){var r=this,n=0,o=[],a=[];this.structure.eachPolymer(function(t){if(!(t.residueCount<4||t.isNucleic())){var e=new jy(t),i=e.getAxis(r.localAngle,r.centerDist,r.ssBorder,r.getColorParams(),r.getRadiusParams());n+=i.size.length,o.push(i),a.push(e)}},t.getSelection());var e={begin:new Float32Array(3*n),end:new Float32Array(3*n),size:new Float32Array(n),color:new Float32Array(3*n),picking:new Float32Array(n)},i=0;return o.forEach(function(t){e.begin.set(t.begin,3*i),e.end.set(t.end,3*i),e.size.set(t.size,i),e.color.set(t.color,3*i),e.picking.set(t.picking.array,i),i+=t.size.length}),n&&(e.picking=new Zg(e.picking,t.getStructure())),{bufferList:[new Ew({position1:e.begin,position2:e.end,color:e.color,color2:e.color,radius:e.size,picking:e.picking},this.getBufferParams({openEnded:this.openEnded,radialSegments:this.radialSegments,disableImpostor:this.disableImpostor,dullInterior:!0}))],axisList:o,helixbundleList:a,axisData:e}},t.prototype.updateData=function(i,r){var n=this;if((i=i||{}).position)this.build();else{var t={};if(i.color||i.radius){var o=0;r.helixbundleList.forEach(function(t){var e=t.getAxis(n.localAngle,n.centerDist,n.ssBorder,n.getColorParams(),n.getRadiusParams());i.color&&r.axisData.color.set(e.color,3*o),(i.radius||i.scale)&&r.axisData.size.set(e.size,o),o+=e.size.length}),i.color&&(t.color=r.axisData.color,t.color2=r.axisData.color),(i.radius||i.scale)&&(t.radius=r.axisData.size)}r.bufferList[0].setAttributes(t)}},t}(K_);Gp.add("rocket",mS);var gS=function(r){function t(t,e,i){r.call(this,t,e,i),this.type="rope",this.parameters=Object.assign({smooth:{type:"integer",max:15,min:0,rebuild:!0}},this.parameters,{aspectRatio:null,smoothSheet:null})}return r&&(t.__proto__=r),((t.prototype=Object.create(r&&r.prototype)).constructor=t).prototype.init=function(t){var e=t||{};e.aspectRatio=1,e.tension=al(e.tension,.5),e.radiusScale=al(e.radiusScale,5),e.smoothSheet=!1,this.smooth=al(e.smooth,2),r.prototype.init.call(this,e)},t.prototype.getSpline=function(t){var e=new Uy(t);return new Ow(t,this.getSplineParams({directional:!1,positionIterator:e.getCenterIterator(this.smooth)}))},t}(Fw);Gp.add("rope",gS);var vS=function(r){function t(t,e,i){r.call(this,t,e,i),this.type="spacefill",this.parameters=Object.assign({sphereDetail:!0,disableImpostor:!0},this.parameters),this.init(i)}return r&&(t.__proto__=r),((t.prototype=Object.create(r&&r.prototype)).constructor=t).prototype.init=function(t){var e=t||{};e.useInteriorColor=al(e.useInteriorColor,!0),r.prototype.init.call(this,e)},t.prototype.createData=function(t){return{bufferList:[new dx(t.getAtomData(this.getAtomParams()),this.getBufferParams({sphereDetail:this.sphereDetail,dullInterior:!0,disableImpostor:this.disableImpostor}))]}},t.prototype.updateData=function(t,e){var i=e.sview.getAtomData(this.getAtomParams(t)),r={};t&&!t.position||(r.position=i.position),t&&!t.color||(r.color=i.color),t&&!t.radius||(r.radius=i.radius),e.bufferList[0].setAttributes(r)},t}(K_);function yS(t){return 3*(t.position.length/3-1)*2}Gp.add("spacefill",vS);var bS=function(i){function t(t,e){void 0===e&&(e={}),i.call(this,{position:new Float32Array(yS(t)),color:new Float32Array(yS(t))},e),this.isLine=!0,this.vertexShader="Line.vert",this.fragmentShader="Line.frag",this.setAttributes(t)}return i&&(t.__proto__=i),((t.prototype=Object.create(i&&i.prototype)).constructor=t).prototype.setAttributes=function(t){var e,i,r,n,o=this.geometry.attributes;if(t.position&&(e=t.position,r=o.position.array,o.position.needsUpdate=!0),t.color&&(i=t.color,n=o.color.array,o.color.needsUpdate=!0),e||i)for(var a,s,c=this.size-1,u=0;u<c;++u)s=(a=3*u)*2,e&&(r[s]=e[a],r[s+1]=e[a+1],r[s+2]=e[a+2],r[s+3]=e[a+3],r[s+4]=e[a+4],r[s+5]=e[a+5]),i&&(n[s]=i[a],n[s+1]=i[a+1],n[s+2]=i[a+2],n[s+3]=i[a+3],n[s+4]=i[a+4],n[s+5]=i[a+5]);else Bp.warn("TraceBuffer.prototype.setAttributes no data")},t}(Qv),xS=function(r){function t(t,e,i){r.call(this,t,e,i),this.type="trace",this.parameters=Object.assign({subdiv:{type:"integer",max:50,min:1,rebuild:!0},tension:{type:"number",precision:1,max:1,min:.1},smoothSheet:{type:"boolean",rebuild:!0}},this.parameters,{flatShaded:null,side:null,wireframe:null}),this.init(i)}return r&&(t.__proto__=r),((t.prototype=Object.create(r&&r.prototype)).constructor=t).prototype.init=function(t){var e=t||{};e.colorScheme=al(e.colorScheme,"chainname"),e.colorScale=al(e.colorScale,"RdYlBu"),"low"===e.quality?this.subdiv=3:"medium"===e.quality?this.subdiv=6:"high"===e.quality?this.subdiv=12:this.subdiv=al(e.subdiv,6),this.tension=al(e.tension,NaN),this.smoothSheet=al(e.smoothSheet,!1),r.prototype.init.call(this,e)},t.prototype.getSplineParams=function(t){return Object.assign({subdiv:this.subdiv,tension:this.tension,directional:!1,smoothSheet:this.smoothSheet},t)},t.prototype.getAtomRadius=function(t){return t.isTrace()?.1:0},t.prototype.createData=function(t){var n=this,o=[],a=[];return this.structure.eachPolymer(function(t){if(!(t.residueCount<4)){a.push(t);var e=new Ow(t,n.getSplineParams()),i=e.getSubdividedPosition(),r=e.getSubdividedColor(n.getColorParams());o.push(new bS(Object.assign({},i,r),n.getBufferParams()))}},t.getSelection()),{bufferList:o,polymerList:a}},t.prototype.updateData=function(t,e){t=t||{};var i=0,r=e.polymerList.length;for(i=0;i<r;++i){var n={},o=new Ow(e.polymerList[i],this.getSplineParams());if(t.position){var a=o.getSubdividedPosition();n.position=a.position}if(t.color){var s=o.getSubdividedColor(this.getColorParams());n.color=s.color}e.bufferList[i].setAttributes(n)}},t.prototype.setParameters=function(t){var e={};return t&&t.tension&&(e.position=!0),r.prototype.setParameters.call(this,t,e,!1),this},t}(K_);Gp.add("trace",xS);var _S=function(r){function t(t,e,i){r.call(this,t,e,i),this.type="tube",this.parameters=Object.assign({},this.parameters,{aspectRatio:null})}return r&&(t.__proto__=r),((t.prototype=Object.create(r&&r.prototype)).constructor=t).prototype.init=function(t){var e=t||{};e.aspectRatio=1,e.radiusScale=al(e.radiusScale,2),"low"===e.quality&&(this.radialSegments=5),r.prototype.init.call(this,e)},t.prototype.getSplineParams=function(){return r.prototype.getSplineParams.call(this,{directional:!1})},t}(Fw);Gp.add("tube",_S);var wS=function(r){function t(t,e,i){r.call(this,t,e,i),this.type="unitcell",this.parameters=Object.assign({radiusSize:{type:"number",precision:3,max:10,min:.001},sphereDetail:!0,radialSegments:!0,disableImpostor:!0},this.parameters,{assembly:null}),this.init(i)}return r&&(t.__proto__=r),((t.prototype=Object.create(r&&r.prototype)).constructor=t).prototype.init=function(t){var e=t||{},i=.5;this.structure.unitcell&&(i=Math.cbrt(this.structure.unitcell.volume)/200),e.radiusSize=al(e.radiusSize,i),e.colorValue=al(e.colorValue,"orange"),e.useInteriorColor=al(e.useInteriorColor,!0),r.prototype.init.call(this,e)},t.prototype.getUnitcellData=function(t){return t.unitcell.getData(t)},t.prototype.create=function(){var t=this.structureView.getStructure();if(t.unitcell){var e=this.getUnitcellData(t);this.sphereBuffer=new dx(e.vertex,this.getBufferParams({sphereDetail:this.sphereDetail,disableImpostor:this.disableImpostor,dullInterior:!0})),this.cylinderBuffer=new Ew(e.edge,this.getBufferParams({openEnded:!0,radialSegments:this.radialSegments,disableImpostor:this.disableImpostor,dullInterior:!0})),this.dataList.push({sview:this.structureView,bufferList:[this.sphereBuffer,this.cylinderBuffer]})}},t.prototype.updateData=function(t,e){var i=e.sview.getStructure(),r=this.getUnitcellData(i),n={},o={};t&&!t.position||(n.position=r.vertexPosition,o.position1=r.edgePosition1,o.position2=r.edgePosition2),t&&!t.color||(n.color=r.vertexColor,o.color=r.edgeColor,o.color2=r.edgeColor),t&&!t.radius||(n.radius=r.vertexRadius,o.radius=r.edgeRadius),this.sphereBuffer.setAttributes(n),this.cylinderBuffer.setAttributes(o)},t}(K_);Gp.add("unitcell",wS);var SS=function(r){function t(t,e,i){r.call(this,t,e,i),this.type="validation",this.parameters=Object.assign({},this.parameters,{radiusType:null,radiusSize:null,radiusScale:null}),this.init(i)}return r&&(t.__proto__=r),((t.prototype=Object.create(r&&r.prototype)).constructor=t).prototype.init=function(t){var e=t||{};e.colorValue=al(e.colorValue,"#f0027f"),e.useInteriorColor=al(e.useInteriorColor,!0),r.prototype.init.call(this,e)},t.prototype.createData=function(t){if(t.validation){var e=t.validation.getClashData({structure:t,color:this.colorValue});return{bufferList:[new Ew(e,this.getBufferParams({openEnded:!1}))]}}},t}(K_);Gp.add("validation",SS);var AS=new Qe,MS=new Qe,PS=new Qe,ES=new Qe(0,1,0);var CS=Object.assign({radialSegments:60,openEnded:!1},Kv),TS=function(i){function t(t,e){void 0===e&&(e={}),i.call(this,{position:new Float32Array(t.position1.length),color:t.color,picking:t.picking},e,function(t){void 0===t&&(t={});var e=new Ws(1,1,al(t.radialSegments,60),1,al(t.openEnded,!1));return e.applyMatrix((new Ke).makeRotationX(-Math.PI/2)),e}(e)),this.updateNormals=!0,this._position=new Float32Array(t.position1.length),this.setAttributes(t,!0)}i&&(t.__proto__=i),(t.prototype=Object.create(i&&i.prototype)).constructor=t;var e={defaultParameters:{configurable:!0}};return e.defaultParameters.get=function(){return CS},t.prototype.applyPositionTransform=function(t,e,i){MS.fromArray(this._position1,i),PS.fromArray(this._position2,i),t.lookAt(MS,PS,ES);var r=this._radius[e];AS.set(r,r,MS.distanceTo(PS)),t.scale(AS)},t.prototype.setAttributes=function(t,e){void 0===t&&(t={}),t.position1&&t.position2&&(Ed(t.position1,t.position2,this._position),this._position1=t.position1,this._position2=t.position2,t.position=this._position),t.radius&&(this._radius=t.radius),i.prototype.setAttributes.call(this,t,e)},Object.defineProperties(t.prototype,e),t}(nx);Xp.add("cone",TS);var IS=function(t){void 0===t&&(t=[]),this.geometryList=t};IS.prototype.computeBoundingBox=function(){var e=this;this.boundingBox?this.boundingBox.empty():this.boundingBox=new Ai,this.geometryList.forEach(function(t){t.boundingBox||t.computeBoundingBox(),e.boundingBox.union(t.boundingBox)})};var RS=Object.assign({aspectRatio:1.5,radialSegments:50,openEnded:!1,disableImpostor:!1},Kv),LS=function(t,e){void 0===e&&(e={}),this.group=new ka,this.wireframeGroup=new ka,this.pickingGroup=new ka,this.visible=!0,this.parameters=sl(e,this.defaultParameters),this.splitPosition=new Float32Array(t.position1.length),this.cylinderRadius=new Float32Array(t.radius.length);var i=this.makeAttributes(t),r={radialSegments:this.parameters.radialSegments,openEnded:this.parameters.openEnded,disableImpostor:this.parameters.disableImpostor};this.cylinderBuffer=new Ew(i.cylinder,r),this.coneBuffer=new TS(i.cone,r),this.geometry=new IS([this.cylinderBuffer.geometry,this.coneBuffer.geometry]),this.matrix=al(e.matrix,new Ke),this.picking=t.picking},OS={defaultParameters:{configurable:!0},matrix:{configurable:!0},pickable:{configurable:!0}};OS.defaultParameters.get=function(){return RS},OS.matrix.set=function(t){Qv.prototype.setMatrix.call(this,t)},OS.matrix.get=function(){return this.group.matrix.clone()},OS.pickable.get=function(){return!!this.picking},LS.prototype.makeAttributes=function(t){void 0===t&&(t={});var e,i,r=this.splitPosition,n=this.cylinderRadius,o=this.parameters.aspectRatio,a={},s={};if(t.radius){for(e=0,i=n.length;e<i;++e)n[e]=t.radius[e]/o;a.radius=n,s.radius=t.radius}if(t.position1&&t.position2){var c=new Qe,u=new Qe,h=new Qe,l=new Qe;for(e=0,i=r.length;e<i;e+=3){c.fromArray(t.position1,e),u.fromArray(t.position2,e),h.subVectors(c,u);var p=h.length(),d=n[e/3]*o*2,f=Math.min(p,d);h.setLength(f),l.copy(u).add(h),l.toArray(r,e)}a.position1=t.position1,a.position2=r,s.position1=r,s.position2=t.position2}return t.color&&(a.color=t.color,a.color2=t.color,s.color=t.color),{cylinder:a,cone:s}},LS.prototype.getMesh=function(){return(new ka).add(this.cylinderBuffer.getMesh(),this.coneBuffer.getMesh())},LS.prototype.getWireframeMesh=function(){return(new ka).add(this.cylinderBuffer.getWireframeMesh(),this.coneBuffer.getWireframeMesh())},LS.prototype.getPickingMesh=function(){return(new ka).add(this.cylinderBuffer.getPickingMesh(),this.coneBuffer.getPickingMesh())},LS.prototype.setAttributes=function(t){void 0===t&&(t={});var e=this.makeAttributes(t);this.cylinderBuffer.setAttributes(e.cylinder),this.coneBuffer.setAttributes(e.cone)},LS.prototype.setParameters=function(t){void 0===t&&(t={}),(t=Object.assign({},t))&&void 0!==t.matrix&&(this.matrix=t.matrix),delete t.matrix,t&&void 0!==t.wireframe&&(this.parameters.wireframe=t.wireframe,this.setVisibility(this.visible)),this.cylinderBuffer.setParameters(t),this.coneBuffer.setParameters(t)},LS.prototype.setVisibility=function(t){Qv.prototype.setVisibility.call(this,t)},LS.prototype.dispose=function(){this.cylinderBuffer.dispose(),this.coneBuffer.dispose()},Object.defineProperties(LS.prototype,OS),Xp.add("arrow",LS);var DS=new Qe,kS=new Qe,BS=new Qe,NS=new Qe(0,0,0),FS=function(i){function t(t,e){void 0===e&&(e={}),i.call(this,t,e,new Vr(1,1,1)),this.updateNormals=!0,this.setAttributes(t,!0)}return i&&(t.__proto__=i),((t.prototype=Object.create(i&&i.prototype)).constructor=t).prototype.applyPositionTransform=function(t,e,i){kS.fromArray(this._heightAxis,i),BS.fromArray(this._depthAxis,i),t.lookAt(NS,kS,BS),DS.set(this._size[e],BS.length(),kS.length()),t.scale(DS)},t.prototype.setAttributes=function(t,e){void 0===t&&(t={}),t.size&&(this._size=t.size),t.heightAxis&&(this._heightAxis=t.heightAxis),t.depthAxis&&(this._depthAxis=t.depthAxis),i.prototype.setAttributes.call(this,t,e)},t}(nx);Xp.add("box",FS);var zS=new Qe,US=new Qe,jS=new Qe,GS=new Qe(0,0,0),VS=Object.assign({sphereDetail:2},Kv),HS=function(i){function t(t,e){void 0===e&&(e={}),i.call(this,t,e,new Ya(1,al(e.sphereDetail,2))),this.updateNormals=!0,this.setAttributes(t,!0)}i&&(t.__proto__=i),(t.prototype=Object.create(i&&i.prototype)).constructor=t;var e={defaultParameters:{configurable:!0}};return e.defaultParameters.get=function(){return VS},t.prototype.applyPositionTransform=function(t,e,i){US.fromArray(this._majorAxis,i),jS.fromArray(this._minorAxis,i),t.lookAt(GS,US,jS),zS.set(this._radius[e],jS.length(),US.length()),t.scale(zS)},t.prototype.setAttributes=function(t,e){void 0===t&&(t={}),t.radius&&(this._radius=t.radius),t.majorAxis&&(this._majorAxis=t.majorAxis),t.minorAxis&&(this._minorAxis=t.minorAxis),i.prototype.setAttributes.call(this,t,e)},Object.defineProperties(t.prototype,e),t}(nx);Xp.add("ellipsoid",HS);var $S=new Qe,WS=new Qe,XS=new Qe,qS=new Qe(0,0,0),YS=function(i){function t(t,e){void 0===e&&(e={}),i.call(this,t,e,new Xa(1,0)),this.updateNormals=!0,this.setAttributes(t,!0)}return i&&(t.__proto__=i),((t.prototype=Object.create(i&&i.prototype)).constructor=t).prototype.applyPositionTransform=function(t,e,i){WS.fromArray(this._heightAxis,i),XS.fromArray(this._depthAxis,i),t.lookAt(qS,WS,XS),$S.set(this._size[e],XS.length(),WS.length()),t.scale($S)},t.prototype.setAttributes=function(t,e){void 0===t&&(t={}),t.size&&(this._size=t.size),t.heightAxis&&(this._heightAxis=t.heightAxis),t.depthAxis&&(this._depthAxis=t.depthAxis),i.prototype.setAttributes.call(this,t,e)},t}(nx);Xp.add("octahedron",YS);var ZS=new Qe,KS=new Qe,JS=new Qe,QS=new Qe(0,0,0),tA=function(i){function t(t,e){void 0===e&&(e={}),i.call(this,t,e,new $a(1,0)),this.updateNormals=!0,this.setAttributes(t,!0)}return i&&(t.__proto__=i),((t.prototype=Object.create(i&&i.prototype)).constructor=t).prototype.applyPositionTransform=function(t,e,i){KS.fromArray(this._heightAxis,i),JS.fromArray(this._depthAxis,i),t.lookAt(QS,KS,JS),ZS.set(this._size[e],JS.length(),KS.length()),t.scale(ZS)},t.prototype.setAttributes=function(t,e){void 0===t&&(t={}),t.size&&(this._size=t.size),t.heightAxis&&(this._heightAxis=t.heightAxis),t.depthAxis&&(this._depthAxis=t.depthAxis),i.prototype.setAttributes.call(this,t,e)},t}(nx);Xp.add("tetrahedron",tA);var eA=new Qe,iA=new Qe,rA=new Qe,nA=new Qe(0,0,0),oA=Object.assign({radiusRatio:.2,radialSegments:16,tubularSegments:32},Kv),aA=function(i){function t(t,e){void 0===e&&(e={}),i.call(this,t,e,new rs(1,al(e.radiusRatio,.2),al(e.radialSegments,16),al(e.tubularSegments,32))),this.updateNormals=!0,this.setAttributes(t,!0)}i&&(t.__proto__=i),(t.prototype=Object.create(i&&i.prototype)).constructor=t;var e={defaultParameters:{configurable:!0}};return e.defaultParameters.get=function(){return oA},t.prototype.applyPositionTransform=function(t,e,i){iA.fromArray(this._majorAxis,i),rA.fromArray(this._minorAxis,i),t.lookAt(nA,iA,rA);var r=this._radius[e];eA.set(r,r,r),t.scale(eA)},t.prototype.setAttributes=function(t,e){void 0===t&&(t={}),t.radius&&(this._radius=t.radius),t.majorAxis&&(this._majorAxis=t.majorAxis),t.minorAxis&&(this._minorAxis=t.minorAxis),i.prototype.setAttributes.call(this,t,e)},Object.defineProperties(t.prototype,e),t}(nx);Xp.add("torus",aA);var sA=function(t,e){var i=e||{};this.streamer=t,this.name=al(i.name,""),this.path=al(i.path,"")},cA={type:{configurable:!0},__objName:{configurable:!0},isBinary:{configurable:!0},isJson:{configurable:!0},isXml:{configurable:!0}};cA.type.get=function(){return""},cA.__objName.get=function(){return""},cA.isBinary.get=function(){return!1},cA.isJson.get=function(){return!1},cA.isXml.get=function(){return!1},sA.prototype.parse=function(){var t=this;return this.streamer.read().then(function(){return t._beforeParse(),t._parse(),t._afterParse(),t[t.__objName]})},sA.prototype._parse=function(){},sA.prototype._beforeParse=function(){},sA.prototype._afterParse=function(){de.Debug&&Bp.log(this[this.__objName])},Object.defineProperties(sA.prototype,cA);var uA=function(r){function t(t,e){var i=e||{};r.call(this,t,i),this.firstModelOnly=al(i.firstModelOnly,!1),this.asTrajectory=al(i.asTrajectory,!1),this.cAlphaOnly=al(i.cAlphaOnly,!1),this.structure=new qb(this.name,this.path),this.structureBuilder=new nb(this.structure)}r&&(t.__proto__=r),(t.prototype=Object.create(r&&r.prototype)).constructor=t;var e={type:{configurable:!0},__objName:{configurable:!0}};return e.type.get=function(){return"structure"},e.__objName.get=function(){return"structure"},Object.defineProperties(t.prototype,e),t}(sA);var hA=function(e,i,t,r,n){void 0===t&&(t=""),void 0===n&&(n=[]),this.structure=e,this.index=i,this.description=t,this.entityType=function(t){switch(t=t.toLowerCase()){case"polymer":return 1;case"non-polymer":return 2;case"macrolide":return 3;case"water":return 4;default:return 0}}(r||""),(this.chainIndexList=n).forEach(function(t){e.chainStore.entityIndex[t]=i})},lA={type:{configurable:!0}};lA.type.get=function(){return"Entity"},hA.prototype.getEntityType=function(){return this.entityType},hA.prototype.isPolymer=function(){return 1===this.entityType},hA.prototype.isNonPolymer=function(){return 2===this.entityType},hA.prototype.isMacrolide=function(){return 3===this.entityType},hA.prototype.isWater=function(){return 4===this.entityType},hA.prototype.eachChain=function(e){var i=this.structure.getChainProxy();this.chainIndexList.forEach(function(t){i.index=t,e(i)})},Object.defineProperties(hA.prototype,lA);var pA={a:1,b:1,c:1,alpha:90,beta:90,gamma:90,spacegroup:"P 1"},dA=function(t){void 0===t&&(t=pA),this.cartToFrac=new Ke,this.fracToCart=new Ke,this.a=t.a,this.b=t.b,this.c=t.c,this.alpha=t.alpha,this.beta=t.beta,this.gamma=t.gamma,this.spacegroup=t.spacegroup;var e=Tl(this.alpha),i=Tl(this.beta),r=Tl(this.gamma),n=Math.cos(e),o=Math.cos(i),a=Math.cos(r),s=Math.sin(i),c=Math.sin(r);if(this.volume=this.a*this.b*this.c*Math.sqrt(1-n*n-o*o-a*a+2*n*o*a),void 0===t.cartToFrac){var u=this.a*this.b*c/this.volume,h=(o*a-n)/(s*c);this.fracToCart.set(this.a,0,0,0,this.b*a,this.b*c,0,0,this.c*o,-this.c*s*h,1/u,0,0,0,0,1).transpose(),this.cartToFrac.getInverse(this.fracToCart)}else this.cartToFrac.copy(t.cartToFrac),this.fracToCart.getInverse(this.cartToFrac)};dA.prototype.getPosition=function(t){var r=new Float32Array(24);if(t.unitcell){var n=t.unitcell,o=t.center.clone().applyMatrix4(n.cartToFrac).floor(),a=new Qe,s=0,e=function(t,e,i){a.set(t,e,i).add(o).applyMatrix4(n.fracToCart).toArray(r,s),s+=3};e(0,0,0),e(1,0,0),e(0,1,0),e(0,0,1),e(1,1,0),e(1,0,1),e(0,1,1),e(1,1,1)}return r},dA.prototype.getCenter=function(t){return function(t,e){void 0===e&&(e=new Qe);for(var i=t.length,r=0;r<i;r+=3)e.x+=t[r],e.y+=t[r+1],e.z+=t[r+2];return e.divideScalar(i/3),e}(this.getPosition(t))},dA.prototype.getData=function(t,e){void 0===e&&(e={});var i=al(e.colorValue,"orange"),r=al(e.radius,Math.cbrt(this.volume)/200),n=new Li(i),o=new Qe,a=this.getPosition(t),s=Id(8,n.r,n.g,n.b),c=Td(8,r),u=new Float32Array(36),h=new Float32Array(36),l=Id(12,n.r,n.g,n.b),p=Td(12,r),d=0;function f(t,e){o.fromArray(a,3*t).toArray(u,d),o.fromArray(a,3*e).toArray(h,d),d+=3}f(0,1),f(0,2),f(0,3),f(1,4),f(1,5),f(2,6),f(3,5),f(4,7),f(5,7),f(2,4),f(7,6),f(3,6);var m=new pv(this,t);return{vertex:{position:a,color:s,radius:c,picking:m},edge:{position1:u,position2:h,color:l,color2:l,radius:p,picking:m}}};var fA={1:"h",2:"h",3:"i",4:"h",5:"g",6:"h",7:"h",8:"h",9:"h",10:"h","":"h"},mA=["DAL","DAR","DSG","DAS","DCY","DGL","DGN","DHI","DIL","DLE","DLY","MED","DPN","DPR","DSN","DTH","DTR","DTY","DVA","DNE"],gA=["MOL_ID","MOLECULE","CHAIN","FRAGMENT","SYNONYM","EC","ENGINEERED","MUTATION","OTHER_DETAILS"],vA=/\s+/;function yA(t,e,i){var r=""+t;return e&&(r+=":"+e),i&&(r+="^"+i),r}var bA=function(r){function t(t,e){var i=e||{};r.call(this,t,i),this.hex=al(i.hex,!1)}r&&(t.__proto__=r),(t.prototype=Object.create(r&&r.prototype)).constructor=t;var e={type:{configurable:!0}};return e.type.get=function(){return"pdb"},t.prototype._parse=function(){de.Debug&&Bp.time("PdbParser._parse "+this.name);var it=!1,t=this.streamer.peekLines(1)[0],e=t.substr(62,4),i=t.substr(72,4);e===i&&i.trim()&&(it=!0);var rt,nt,ot,at,st,ct,ut,ht,lt,pt,dt,ft,mt,gt,vt,yt,bt,xt,_t,wt,St,At,Mt,Pt,Et,Ct,Tt,It,Rt,Lt,Ot,Dt,kt,Bt="pqr"===this.type,Nt="pdbqt"===this.type,Ft=this.structure,zt=this.structureBuilder,Ut=this.hex,jt=10,Gt=10,Vt=this.firstModelOnly,Ht=this.asTrajectory,$t=this.cAlphaOnly,Wt=Ft.frames,Xt=Ft.boxes,qt=!1,Yt=Ft.biomolDict,Zt={},Kt={},Jt={},Qt=[],te={},ee={},ie={},re={},r={helices:[],sheets:[]},ne=r.helices,oe=r.sheets,ae=Ft.atomMap,se=Ft.atomStore;se.resize(Math.round(this.streamer.data.length/80)),(Bt||Nt)&&se.addField("partialCharge",1,"float32"),Bt&&se.addField("radius",1,"float32");var ce=Ft.getAtomProxy(),ue=Ft.getAtomProxy(),he=0,le=0,pe=!0;this.streamer.eachChunkOfLines(function(t){!function(t,e,i){for(var r,n=t;n<e;++n)if(ct=i[n],"ATOM  "===(ut=ct.substr(0,6))||"HETATM"===ut){if(pe&&(Ht?(qt?(rt=new Float32Array(3*se.count),Wt.push(rt)):rt=[],nt=0):Vt||(Zt={}),Tt=(Ct=1).toString(),pe=!(It=!0)),Vt&&0<le)continue;var o=void 0,a=void 0,s=void 0,c=void 0,u=void 0;if(Bt){if(u=10===(c=ct.split(vA)).length?1:0,gt=c[2],$t&&"CA"!==gt)continue;o=parseFloat(c[6-u]),a=parseFloat(c[7-u]),s=parseFloat(c[8-u])}else{if(gt=ct.substr(12,4).trim(),$t&&"CA"!==gt)continue;o=parseFloat(ct.substr(30,8)),a=parseFloat(ct.substr(38,8)),s=parseFloat(ct.substr(46,8))}if(Ht){var h=3*nt;if(rt[h+0]=o,rt[h+1]=a,rt[h+2]=s,nt+=1,qt)continue}var l=void 0;Bt?(ht=parseInt(c[1]),l="",vt="H"===ct[0]?1:0,lt=u?"":c[4],pt=parseInt(c[5-u]),mt="",dt=c[3],bt="",ft=0):(ht=parseInt(ct.substr(6,5),jt),Ut&&99999===ht&&(jt=16),vt="H"===ct[0]?1:0,lt=ct[21].trim(),pt=parseInt(ct.substr(22,4),Gt),Ut&&9999===pt&&(Gt=16),mt=ct[26].trim(),dt=ct.substr(17,4).trim()||"MOL",yt=parseFloat(ct.substr(60,6)),bt=ct[16].trim(),ft=parseFloat(ct.substr(54,6)),it||(Nt?l=ct.substr(12,2).trim():(l=ct.substr(76,2).trim(),lt||(lt=ct.substr(72,4).trim())))),se.growIfFull(),se.atomTypeId[he]=ae.add(gt,l),se.x[he]=o,se.y[he]=a,se.z[he]=s,se.serial[he]=ht,se.altloc[he]=bt.charCodeAt(0),se.occupancy[he]=isNaN(ft)?0:ft,Bt?(se.partialCharge[he]=parseFloat(c[9-u]),se.radius[he]=parseFloat(c[10-u])):(se.bfactor[he]=isNaN(yt)?0:yt,Nt&&(se.partialCharge[he]=parseFloat(ct.substr(70,6))));var p=yA(pt,lt,mt);!vt||ee[p]||mA.includes(dt)?It||Rt===lt||(Tt=(Ct+=1).toString()):Rt===lt&&Ot===dt&&(dg.includes(dt)||Lt===pt&&Dt===mt)||(Tt=(Ct+=1).toString(),Lt=pt,Ot=dt,Dt=mt),zt.addAtom(le,lt,Tt,dt,pt,vt,void 0,mt),Zt[ht]=he,he+=1,It=!1,Rt=lt}else if("CONECT"===ut){var d=Zt[parseInt(ct.substr(6,5))],f=[11,16,21,26],m={};if(void 0===d)continue;for(var g=0;g<4;++g){var v=parseInt(ct.substr(f[g],5));if(!Number.isNaN(v)&&void 0!==(v=Zt[v]))if(d<v?(ce.index=d,ue.index=v):(ce.index=v,ue.index=d),void 0!==m[v])Ft.bondStore.bondOrder[m[v]]+=1;else{var y=ce.index+"|"+ue.index;void 0===Jt[y]&&(Jt[y]=!0,m[v]=Ft.bondStore.count,Ft.bondStore.addBond(ce,ue,1))}}}else if("HELIX "===ut){xt=ct[19].trim(),_t=parseInt(ct.substr(21,4)),wt=ct[25].trim(),St=ct[31].trim(),At=parseInt(ct.substr(33,4)),Mt=ct[37].trim();var b=parseInt(ct.substr(39,1));b=(fA[b]||fA[""]).charCodeAt(0),ne.push([xt,_t,wt,St,At,Mt,b])}else if("SHEET "===ut)xt=ct[21].trim(),_t=parseInt(ct.substr(22,4)),wt=ct[26].trim(),St=ct[32].trim(),At=parseInt(ct.substr(33,4)),Mt=ct[37].trim(),oe.push([xt,_t,wt,St,At,Mt]);else if("HETNAM"===ut)te[ct.substr(11,3)]=ct.substr(15).trim();else if("SEQRES"===ut){var x=ct[11].trim();x!==kt&&(re[x]=[],kt=x),(r=re[x]).push.apply(r,ct.substr(19).trim().split(vA))}else if("MODRES"===ut){var _=ct.substr(12,3).trim(),w=ct[16].trim(),S=ct[22].trim(),A=parseInt(ct.substr(18,4).trim()),M=yA(A,w,S);ee[M]={resname:_,chainname:w,inscode:S,resno:A}}else if("COMPND"===ut){var P=ct.substr(10,70).trim(),E=P.indexOf(":"),C=P.substring(0,E),T=void 0;gA.includes(C)?(Et=C,T=P.substring(E+2)):T=P,T=T.replace(/;$/,""),"MOL_ID"===Et?(Pt={chainList:[],name:""},Qt.push(Pt)):"MOLECULE"===Et?(Pt.name&&(Pt.name+=" "),Pt.name+=T):"CHAIN"===Et&&Array.prototype.push.apply(Pt.chainList,T.split(/\s*,\s*/))}else if(ct.startsWith("TER")){var I=Ft.getChainProxy(Ft.chainStore.count-1);ie[I.chainname]=I.index,Tt=(Ct+=1).toString(),It=!0}else if("REMARK"===ut&&"350"===ct.substr(7,3)){if("BIOMOLECULE:"===ct.substr(11,12)){var R=ct.substr(23).trim();/^(0|[1-9][0-9]*)$/.test(R)&&(R="BU"+R),ot=new tb(R),Yt[R]=ot}else if("BIOMT"===ct.substr(13,5)){var L=ct.split(/\s+/),O=parseInt(ct[18])-1;0===O&&(st=new Ke,at.matrixList.push(st));var D=st.elements;D[0+O]=parseFloat(L[4]),D[4+O]=parseFloat(L[5]),D[8+O]=parseFloat(L[6]),D[12+O]=parseFloat(L[7])}else if("APPLY THE FOLLOWING TO CHAINS:"===ct.substr(11,30)||"                   AND CHAINS:"===ct.substr(11,30)){"APPLY"===ct.substr(11,5)&&(at=ot.addPart());for(var k=ct.substr(41,30).split(","),B=0,N=k.length;B<N;++B){var F=k[B].trim();F&&at.chainList.push(F)}}}else if("HEADER"===ut)Ft.id=ct.substr(62,4);else if("TITLE "===ut)Ft.title+=(Ft.title?" ":"")+ct.substr(10,70).trim();else if("MODEL "===ut)pe=!0;else if("ENDMDL"===ut||"END"===ct.trim()){if(pe)continue;Ht&&!qt&&(Wt.push(new Float32Array(rt)),qt=!0),le+=1,pe=!0}else if("MTRIX"===ct.substr(0,5)){if("1"===ct[59])continue;ot&&"NCS"===ot.name||(ot=new tb("NCS"),Yt.NCS=ot,at=ot.addPart());var z=ct.split(/\s+/),U=parseInt(ct[5])-1;0===U&&(st=new Ke,at.matrixList.push(st));var j=st.elements;j[0+U]=parseFloat(z[2]),j[4+U]=parseFloat(z[3]),j[8+U]=parseFloat(z[4]),j[12+U]=parseFloat(z[5])}else if("ORIGX"===ct.substr(0,5)){Kt.origx||(Kt.origx=new Ke);var G=ct.split(/\s+/),V=parseInt(ct[5])-1,H=Kt.origx.elements;H[0+V]=parseFloat(G[1]),H[4+V]=parseFloat(G[2]),H[8+V]=parseFloat(G[3]),H[12+V]=parseFloat(G[4])}else if("SCALE"===ct.substr(0,5)){Kt.scale||(Kt.scale=new Ke);var $=ct.split(/\s+/),W=parseInt(ct[5])-1,X=Kt.scale.elements;X[0+W]=parseFloat($[1]),X[4+W]=parseFloat($[2]),X[8+W]=parseFloat($[3]),X[12+W]=parseFloat($[4])}else if("CRYST1"===ut){var q=parseFloat(ct.substr(6,9)),Y=parseFloat(ct.substr(15,9)),Z=parseFloat(ct.substr(24,9)),K=parseFloat(ct.substr(33,7)),J=parseFloat(ct.substr(40,7)),Q=parseFloat(ct.substr(47,7)),tt=ct.substr(55,11).trim(),et=new Float32Array(9);et[0]=q,et[4]=Y,et[8]=Z,Xt.push(et),0===le&&(Kt.a=q,Kt.b=Y,Kt.c=Z,Kt.alpha=K,Kt.beta=J,Kt.gamma=Q,Kt.spacegroup=tt)}}(0,t.length,t)});var n=Qt.length;if(n){Ft.eachChain(function(t){t.entityIndex=n}),Qt.forEach(function(t,e){var i=t.chainList.map(function(t){return ie[t]});Ft.entityList.push(new hA(Ft,e,t.name,"polymer",i))});var o=Qt.length,a=Ft.getResidueProxy(),s={};Ft.eachChain(function(t){t.entityIndex===n&&(a.index=t.residueOffset,s[a.resname]||(s[a.resname]=[]),s[a.resname].push(t.index))}),Object.keys(s).forEach(function(t){var e=s[t],i="non-polymer",r=te[t]||t;dg.includes(t)&&(i=r="water"),Ft.entityList.push(new hA(Ft,o,r,i,e)),o+=1})}void 0!==Kt.a?Ft.unitcell=new dA(Kt):Ft.unitcell=void 0,(ne.length||oe.length)&&ob(Ft,r),zt.finalize(),Ft.finalizeAtoms(),it||hb(Ft),lb(Ft),Ft.finalizeBonds(),ne.length||oe.length||sb(Ft),gb(Ft),de.Debug&&Bp.timeEnd("PdbParser._parse "+this.name)},Object.defineProperties(t.prototype,e),t}(uA);Vp.add("pdb",bA),Vp.add("pdb1",bA),Vp.add("ent",bA);var xA=/\s+/,_A=/'((?:(?!'\s).)*)'|"((?:(?!"\s).)*)"|(\S+)/g,wA=/"/g,SA=/^['"]+|['"]+$/g;function AA(t){return!t||t[0]!==t[t.length-1]||"'"!==t[0]&&'"'!==t[0]?t:t.substring(1,t.length-1)}function MA(e,t){Array.isArray(e[t])||Object.keys(e).forEach(function(t){e[t]=[e[t]]})}function PA(t){return"?"!==t}function EA(t,e){return PA(t)?t:e}function CA(t){switch(t.toLowerCase()){case"?":case"sing":return 1;case"doub":return 2;case"trip":return 3;case"quad":return 4}return 0}var TA=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e;var i={type:{configurable:!0}};return i.type.get=function(){return"cif"},e.prototype._parse=function(){Bp.time("CifParser._parse "+this.name);var O,D,k,B,N,F,z,U,j,G,V,H,$,W,X,q,Y,Z,K,J,Q,tt=this.structure,et=this.structureBuilder,it=this.firstModelOnly,rt=this.asTrajectory,nt=this.cAlphaOnly,ot=tt.frames,at={},st={},ct={},ut=!1,ht=null,lt=!1,pt=!1,dt=!1,ft=[],mt=null,gt=null,vt=null,yt=null,bt=[],xt=tt.atomMap,_t=tt.atomStore;_t.resize(this.streamer.data.length/100);var wt,St=0,At=0;if(this.streamer.eachChunkOfLines(function(t){!function(t,e,i){for(var r=t;r<e;++r)if(k=i[r],((B=k.trim())||ut||pt)&&"#"!==B[0])if("data_"===B.substring(0,5))at.data=B.substring(5).trim();else if(";"===B[0])ut?(pt?(mt===ft.length&&(mt=0),ft[mt].push(ht),mt+=1):!1===vt?at[gt]=ht:at[gt][vt]=ht,ut=!1,ht=null):(ut=!0,ht=B.substring(1));else if("loop_"===B)dt=pt=!0,ft.length=0,bt.length=0,mt=0;else if("_"===B[0]){var n,o,a;if(pt&&!dt&&(pt=!1),pt)o=(n=B.split("."))[0].substring(1),a=n[1],1===n.length?(a=!1,at[o]||(at[o]=[]),ft.push(at[o])):(at[o]||(at[o]={}),at[o][a]?de.Debug&&Bp.warn(o,a,"already exists"):(at[o][a]=[],ft.push(at[o][a]),bt.push(a))),gt=o,vt=a,yt=!0;else{var s=B.match(_A),c=s[0],u=s[1];o=(n=c.split("."))[0].substring(1),a=n[1],1===n.length?(a=!1,at[o]=u):(at[o]||(at[o]={}),at[o][a]?de.Debug&&Bp.warn(o,a,"already exists"):at[o][a]=u),u||(lt=!0),gt=o,vt=a}}else if(ut)ht+=k;else if(pt){if(!B)continue;if("atom_site"===gt){var h=B.split(xA);yt&&(N=bt.indexOf("auth_asym_id"),F=bt.indexOf("auth_seq_id"),z=bt.indexOf("label_atom_id"),U=bt.indexOf("label_comp_id"),j=bt.indexOf("label_asym_id"),G=bt.indexOf("label_entity_id"),V=bt.indexOf("label_alt_id"),Y=bt.indexOf("Cartn_x"),Z=bt.indexOf("Cartn_y"),K=bt.indexOf("Cartn_z"),$=bt.indexOf("id"),W=bt.indexOf("type_symbol"),H=bt.indexOf("group_PDB"),J=bt.indexOf("B_iso_or_equiv"),X=bt.indexOf("pdbx_PDB_model_num"),q=bt.indexOf("pdbx_PDB_ins_code"),Q=bt.indexOf("occupancy"),yt=!1,wt=parseInt(h[X]),rt&&(O=[],D=0));var l=parseInt(h[X]);if(wt!==l&&(rt&&(0===At&&ot.push(new Float32Array(O)),O=new Float32Array(3*_t.count),ot.push(O),D=0),At+=1),wt=l,it&&0<At)continue;var p=h[z].replace(wA,"");if(nt&&"CA"!==p)continue;var d=parseFloat(h[Y]),f=parseFloat(h[Z]),m=parseFloat(h[K]);if(rt){var g=3*D;if(O[g+0]=d,O[g+1]=f,O[g+2]=m,D+=1,0<At)continue}var v=h[U],y=parseInt(h[F]),b=h[q];b="?"===b?"":b;var x=h[N],_=h[j],w="H"===h[H][0]?1:0,S=h[W],A=parseFloat(h[J]),M=parseFloat(h[Q]),P=h[V];if(P="."===P?"":P,_t.growIfFull(),_t.atomTypeId[St]=xt.add(p,S),_t.x[St]=d,_t.y[St]=f,_t.z[St]=m,_t.serial[St]=parseInt(h[$]),_t.bfactor[St]=isNaN(A)?0:A,_t.occupancy[St]=isNaN(M)?0:M,_t.altloc[St]=P.charCodeAt(0),et.addAtom(At,x,_,v,y,w,void 0,b),de.Debug){var E=st[_];void 0!==E&&E!==x&&de.Debug&&Bp.warn(E,x)}st[_]=x;var C=h[G];ct[C]||(ct[C]=new Set),ct[C].add(tt.chainStore.count-1),St+=1}else{var T=B.match(_A),I=T.length;mt===ft.length&&(mt=0);for(var R=0;R<I;++R)ft[mt+R].push(T[R]);mt+=I}dt=!1}else if("'"===B[0]&&"'"===B[B.length-1]){var L=B.substring(1,B.length-1);!1===vt?at[gt]=L:at[gt][vt]=L}else lt?!1===vt?at[gt]=B:at[gt][vt]=B:de.Debug&&Bp.log("CifParser._parse: unknown state",B);else lt=pt=ut=!1,ft.length=0,yt=vt=gt=mt=null,bt.length=0}(0,t.length,t)}),at.chem_comp&&at.chem_comp_atom)!function(t,e,i){var r,n,o=e.atomStore,a=e.atomMap,s=t.chem_comp,c=t.chem_comp_atom,u=t.chem_comp_bond;s&&(s.name&&(e.title=s.name.trim().replace(SA,"")),s.id&&(e.id=s.id.trim().replace(SA,"")));var h={};if(c){var l,p,d,f;for(MA(c,"comp_id"),n=c.comp_id.length,r=0;r<n;++r)o.growIfFull(),l=c.atom_id[r].replace(wA,""),p=c.type_symbol[r],h[l]=r,o.atomTypeId[r]=a.add(l,p),o.x[r]=c.model_Cartn_x[r],o.y[r]=c.model_Cartn_y[r],o.z[r]=c.model_Cartn_z[r],o.serial[r]=r,d=c.pdbx_component_comp_id[r],f=c.pdbx_residue_numbering?c.pdbx_residue_numbering[r]:1,i.addAtom(0,"","",d,f,1);for(r=0;r<n;++r){var m=r+n;o.growIfFull(),l=c.atom_id[r].replace(wA,""),p=c.type_symbol[r],o.atomTypeId[m]=a.add(l,p),o.x[m]=c.pdbx_model_Cartn_x_ideal[r],o.y[m]=c.pdbx_model_Cartn_y_ideal[r],o.z[m]=c.pdbx_model_Cartn_z_ideal[r],o.serial[m]=m,d=c.pdbx_component_comp_id[r],f=c.pdbx_residue_numbering?c.pdbx_residue_numbering[r]:1,i.addAtom(1,"","",d,f,1)}}if(c&&u){var g,v,y;MA(u,"comp_id"),n=u.comp_id.length;var b=c.comp_id.length,x=e.getAtomProxy(),_=e.getAtomProxy();for(r=0;r<n;++r)g=u.atom_id_1[r].replace(wA,""),v=u.atom_id_2[r].replace(wA,""),y=CA(u.value_order[r]),x.index=h[g],_.index=h[v],e.bondStore.growIfFull(),e.bondStore.addBond(x,_,y),x.index+=b,_.index+=b,e.bondStore.growIfFull(),e.bondStore.addBond(x,_,y)}}(at,tt,et),et.finalize(),tt.finalizeAtoms(),tt.finalizeBonds(),xb(tt);else if(at.atom_site_type_symbol&&at.atom_site_label&&at.atom_site_fract_x)!function(t,e,c){var u=e.atomStore,i=e.atomMap;t.data&&(e.id=t.data,e.name=t.data),e.unitcell=new dA({a:parseFloat(t.cell_length_a),b:parseFloat(t.cell_length_b),c:parseFloat(t.cell_length_c),alpha:parseFloat(t.cell_angle_alpha),beta:parseFloat(t.cell_angle_beta),gamma:parseFloat(t.cell_angle_gamma),spacegroup:AA(t.symmetry_space_group_name_H)});for(var h=new Qe,r=new Qe,l=t.atom_site_type_symbol.length,n=0;n<l;++n){u.growIfFull();var o=t.atom_site_label[n],a=t.atom_site_type_symbol[n];u.atomTypeId[n]=i.add(o,a),h.set(t.atom_site_fract_x[n],t.atom_site_fract_y[n],t.atom_site_fract_z[n]),h.applyMatrix4(e.unitcell.fracToCart),r.add(h),u.x[n]=h.x,u.y[n]=h.y,u.z[n]=h.z,t.atom_site_occupancy&&(u.occupancy[n]=parseFloat(t.atom_site_occupancy[n])),u.serial[n]=n,c.addAtom(0,"","","HET",1,1)}r.divideScalar(l),e.center=r,gb(e);var p=new Qe,d=new Qe,f=e.biomolDict.SUPERCELL.partList[0].matrixList,m=l;function g(t){return i.get(u.atomTypeId[t]).covalent}for(var v=new Ke,s=function(a){var s=g(a);h.set(u.x[a],u.y[a],u.z[a]),f.forEach(function(t){if(!v.equals(t)){p.copy(h),p.applyMatrix4(t);for(var e=0;e<l;++e){d.set(u.x[e],u.y[e],u.z[e]);var i=p.distanceToSquared(d),r=g(e)+s,n=r+.3,o=r-.5;if(i<n*n&&o*o<i)return u.growIfFull(),u.atomTypeId[m]=u.atomTypeId[a],u.x[m]=p.x,u.y[m]=p.y,u.z[m]=p.z,u.occupancy[m]=u.occupancy[a],u.serial[m]=m,u.altloc[m]="A".charCodeAt(0),c.addAtom(0,"","","HET",1,1),void(m+=1)}}})},y=0;y<l;++y)s(y)}(at,tt,et),et.finalize(),tt.finalizeAtoms(),lb(tt),tt.finalizeBonds();else{var t=function(t,e,i){var r,n,o,a,s=[],c=[],u=t.struct_conf;if(u)for(MA(u,"id"),r=0,n=u.beg_auth_seq_id.length;r<n;++r){var h=parseInt(u.pdbx_PDB_helix_class[r]);Number.isNaN(h)||(o=u.pdbx_beg_PDB_ins_code[r],a=u.pdbx_end_PDB_ins_code[r],s.push([i[u.beg_label_asym_id[r]],parseInt(u.beg_auth_seq_id[r]),EA(o,""),i[u.end_label_asym_id[r]],parseInt(u.end_auth_seq_id[r]),EA(a,""),(fA[h]||fA[""]).charCodeAt(0)]))}var l=t.struct_sheet_range;if(l)for(MA(l,"id"),r=0,n=l.beg_auth_seq_id.length;r<n;++r)o=l.pdbx_beg_PDB_ins_code[r],a=l.pdbx_end_PDB_ins_code[r],c.push([i[l.beg_label_asym_id[r]],parseInt(l.beg_auth_seq_id[r]),EA(o,""),i[l.end_label_asym_id[r]],parseInt(l.end_auth_seq_id[r]),EA(a,"")]);return!(!u&&!l)&&{helices:s,sheets:c}}(at,0,st);if(function(t,e,p){var o={},d=e.biomolDict;if(t.pdbx_struct_oper_list){var n=t.pdbx_struct_oper_list;MA(n,"id"),n.id.forEach(function(t,e){var i=new Ke,r=i.elements;r[0]=parseFloat(n["matrix[1][1]"][e]),r[1]=parseFloat(n["matrix[1][2]"][e]),r[2]=parseFloat(n["matrix[1][3]"][e]),r[4]=parseFloat(n["matrix[2][1]"][e]),r[5]=parseFloat(n["matrix[2][2]"][e]),r[6]=parseFloat(n["matrix[2][3]"][e]),r[8]=parseFloat(n["matrix[3][1]"][e]),r[9]=parseFloat(n["matrix[3][2]"][e]),r[10]=parseFloat(n["matrix[3][3]"][e]),r[3]=parseFloat(n["vector[1]"][e]),r[7]=parseFloat(n["vector[2]"][e]),r[11]=parseFloat(n["vector[3]"][e]),i.transpose(),o[t]=i})}if(t.pdbx_struct_assembly_gen){var f=t.pdbx_struct_assembly_gen;MA(f,"assembly_id");var m=function(t){var n={};return t.replace(/[()']/g,"").split(",").forEach(function(t){if(t.includes("-"))for(var e=t.split("-"),i=parseInt(e[0]),r=parseInt(e[1]);i<=r;++i)n[i]=o[i];else n[t]=o[t]}),n};f.assembly_id.forEach(function(t,e){var r={},i=f.oper_expression[e].replace(/['"]\(|['"]/g,"");if(i.includes(")(")||0<i.indexOf("(")){i=i.split("(");var n=m(i[0]),o=m(i[1]);Object.keys(n).forEach(function(i){Object.keys(o).forEach(function(t){var e=new Ke;e.multiplyMatrices(n[i],o[t]),r[i+"x"+t]=e})})}else r=m(i);var a=[];for(var s in r)a.push(r[s]);var c=t;/^(0|[1-9][0-9]*)$/.test(c)&&(c="BU"+c);for(var u=f.asym_id_list[e].split(","),h=0,l=u.length;h<l;++h)u[h]=p[u[h]];void 0===d[c]&&(d[c]=new tb(c)),d[c].addPart(a,u)})}if(t.struct_ncs_oper){var a=t.struct_ncs_oper;MA(a,"id"),d.NCS=new tb("NCS");var s=d.NCS.addPart();a.id.forEach(function(t,e){if("given"!==a.code[e]){var i=new Ke,r=i.elements;r[0]=parseFloat(a["matrix[1][1]"][e]),r[1]=parseFloat(a["matrix[1][2]"][e]),r[2]=parseFloat(a["matrix[1][3]"][e]),r[4]=parseFloat(a["matrix[2][1]"][e]),r[5]=parseFloat(a["matrix[2][2]"][e]),r[6]=parseFloat(a["matrix[2][3]"][e]),r[8]=parseFloat(a["matrix[3][1]"][e]),r[9]=parseFloat(a["matrix[3][2]"][e]),r[10]=parseFloat(a["matrix[3][3]"][e]),r[3]=parseFloat(a["vector[1]"][e]),r[7]=parseFloat(a["vector[2]"][e]),r[11]=parseFloat(a["vector[3]"][e]),i.transpose(),s.matrixList.push(i)}}),0===s.matrixList.length&&delete d.NCS}var i={};if(t.cell){var r=t.cell,c=parseFloat(r.length_a),u=parseFloat(r.length_b),h=parseFloat(r.length_c),l=new Float32Array(9);l[0]=c,l[4]=u,l[8]=h,e.boxes.push(l),i.a=c,i.b=u,i.c=h,i.alpha=parseFloat(r.angle_alpha),i.beta=parseFloat(r.angle_beta),i.gamma=parseFloat(r.angle_gamma)}t.symmetry&&(i.spacegroup=AA(t.symmetry["space_group_name_H-M"]));var g=new Ke;if(t.database_PDB_matrix){var v=t.database_PDB_matrix,y=g.elements;y[0]=parseFloat(v["origx[1][1]"]),y[1]=parseFloat(v["origx[1][2]"]),y[2]=parseFloat(v["origx[1][3]"]),y[4]=parseFloat(v["origx[2][1]"]),y[5]=parseFloat(v["origx[2][2]"]),y[6]=parseFloat(v["origx[2][3]"]),y[8]=parseFloat(v["origx[3][1]"]),y[9]=parseFloat(v["origx[3][2]"]),y[10]=parseFloat(v["origx[3][3]"]),y[3]=parseFloat(v["origx_vector[1]"]),y[7]=parseFloat(v["origx_vector[2]"]),y[11]=parseFloat(v["origx_vector[3]"]),g.transpose(),i.origx=g}var b=new Ke;if(t.atom_sites){var x=t.atom_sites,_=b.elements;_[0]=parseFloat(x["fract_transf_matrix[1][1]"]),_[1]=parseFloat(x["fract_transf_matrix[1][2]"]),_[2]=parseFloat(x["fract_transf_matrix[1][3]"]),_[4]=parseFloat(x["fract_transf_matrix[2][1]"]),_[5]=parseFloat(x["fract_transf_matrix[2][2]"]),_[6]=parseFloat(x["fract_transf_matrix[2][3]"]),_[8]=parseFloat(x["fract_transf_matrix[3][1]"]),_[9]=parseFloat(x["fract_transf_matrix[3][2]"]),_[10]=parseFloat(x["fract_transf_matrix[3][3]"]),_[3]=parseFloat(x["fract_transf_vector[1]"]),_[7]=parseFloat(x["fract_transf_vector[2]"]),_[11]=parseFloat(x["fract_transf_vector[3]"]),b.transpose(),i.scale=b}void 0!==i.a?e.unitcell=new dA(i):e.unitcell=void 0}(at,tt,st),function(t,e,i){var r=t.struct_conn;if(r){MA(r,"id");for(var n=/"/g,o=e.getAtomProxy(),a=e.getAtomProxy(),s={},c=0,u=r.id.length;c<u;++c){var h=r.conn_type_id[c];if("hydrog"!==h&&"mismat"!==h&&"saltbr"!==h&&"1_555"===r.ptnr1_symmetry[c]&&"1_555"===r.ptnr2_symmetry[c]){var l=r.pdbx_ptnr1_PDB_ins_code[c],p=r.pdbx_ptnr1_label_alt_id[c],d=r.ptnr1_auth_seq_id[c]+(PA(l)?"^"+l:"")+":"+i[r.ptnr1_label_asym_id[c]]+"."+r.ptnr1_label_atom_id[c].replace(n,"")+(PA(p)?"%"+p:""),f=s[d];if(!f){var m=new bp(d);if(m.selection.error){de.Debug&&Bp.warn("invalid selection for connection",d);continue}f=e.getAtomIndices(m),s[d]=f}var g=r.pdbx_ptnr2_PDB_ins_code[c],v=r.pdbx_ptnr2_label_alt_id[c],y=r.ptnr2_auth_seq_id[c]+(PA(g)?"^"+g:"")+":"+i[r.ptnr2_label_asym_id[c]]+"."+r.ptnr2_label_atom_id[c].replace(n,"")+(PA(v)?"%"+v:""),b=s[y];if(!b){var x=new bp(y);if(x.selection.error){de.Debug&&Bp.warn("invalid selection for connection",y);continue}b=e.getAtomIndices(x),s[y]=b}var _=f.length,w=b.length;if(w<_){var S=_;_=w,w=S;var A=f;f=b,b=A}if(0!==_&&0!==w)for(var M=0;M<w;++M)o.index=f[M%_],a.index=b[M],o&&a?e.bondStore.addBond(o,a,CA(r.pdbx_value_order[c])):Bp.log("atoms for connection not found");else de.Debug&&Bp.warn("no atoms found for",d,y)}}}}(at,tt,st),function(t,e,i){if(t.entity){MA(t.entity,"id");for(var r=t.entity,n=r.id.length,o=0;o<n;++o){var a=r.pdbx_description[o],s=r.type[o],c=Array.from(i[r.id[o]]);e.entityList[o]=new hA(e,o,a,s,c)}}}(at,tt,ct),at.struct&&at.struct.title&&(tt.title=at.struct.title.trim().replace(SA,"")),at.entry&&at.entry.id&&(tt.id=at.entry.id.trim().replace(SA,"")),at.pdbx_audit_revision_history){if(at.pdbx_audit_revision_history.revision_date){MA(at.pdbx_audit_revision_history,"revision_date");var e=at.pdbx_audit_revision_history.revision_date.filter(PA);e.length&&(tt.header.releaseDate=e[0])}if(at.pdbx_database_status.recvd_initial_deposition_date){MA(at.pdbx_database_status,"recvd_initial_deposition_date");var i=at.pdbx_database_status.recvd_initial_deposition_date.filter(PA);i.length&&(tt.header.depositionDate=i[0])}}else if(at.database_PDB_rev){if(at.database_PDB_rev.date){MA(at.database_PDB_rev,"date");var r=at.database_PDB_rev.date.filter(PA);r.length&&(tt.header.releaseDate=r[0])}if(at.database_PDB_rev.date_original){MA(at.database_PDB_rev,"date_original");var n=at.database_PDB_rev.date_original.filter(PA);n.length&&(tt.header.depositionDate=n[0])}}at.reflns&&at.reflns.d_resolution_high?PA(at.reflns.d_resolution_high)&&(tt.header.resolution=parseFloat(at.reflns.d_resolution_high)):at.refine&&at.refine.ls_d_res_high&&PA(at.refine.ls_d_res_high)&&(tt.header.resolution=parseFloat(at.refine.ls_d_res_high)),at.refine&&at.refine.ls_R_factor_R_free&&PA(at.refine.ls_R_factor_R_free)&&(tt.header.rFree=parseFloat(at.refine.ls_R_factor_R_free)),at.refine&&at.refine.ls_R_factor_R_work&&PA(at.refine.ls_R_factor_R_work)&&(tt.header.rWork=parseFloat(at.refine.ls_R_factor_R_work)),at.exptl&&at.exptl.method&&(MA(at.exptl,"method"),tt.header.experimentalMethods=at.exptl.method.map(function(t){return t.replace(SA,"")})),et.finalize(),tt.finalizeAtoms(),lb(tt),tt.finalizeBonds(),t?ob(tt,t):sb(tt),gb(tt),tt.extraData.cif=at}de.Debug&&Bp.timeEnd("CifParser._parse "+this.name)},Object.defineProperties(e.prototype,i),e}(uA);Vp.add("cif",TA),Vp.add("mcif",TA),Vp.add("mmcif",TA);var IA=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e;var i={type:{configurable:!0}};return i.type.get=function(){return"gro"},e.prototype._parse=function(){de.Debug&&Bp.time("GroParser._parse "+this.name);var p,d,t=this.structure,f=this.structureBuilder,m=this.firstModelOnly,g=this.asTrajectory,v=this.cAlphaOnly,y=t.frames,b=t.boxes,e=this.streamer.peekLines(3);t.title=e[0].trim();var x,_,w,S,A=5+(e[2].length-e[2].lastIndexOf(".")-1),M=20,P=20+A,E=20+2*A,C=parseInt(e[1]),T=C+3,I=t.atomMap,R=t.atomStore;R.resize(C);var L=0,O=0,D=0;this.streamer.eachChunkOfLines(function(t){!function(t,e,i){for(var r=t;r<e;++r){var n=++D-1,o=i[r];if(o)if(n%T==0)g&&(p=new Float32Array(3*C),y.push(p),d=0);else if(n%T==1);else if(n%T==T-1){var a=o.trim().split(/\s+/),s=new Float32Array(9);if(s[0]=10*parseFloat(a[0]),s[4]=10*parseFloat(a[1]),s[8]=10*parseFloat(a[2]),b.push(s),m)return;O+=1}else{if(x=o.substr(10,5).trim(),v&&"CA"!==x)continue;var c=10*parseFloat(o.substr(M,A)),u=10*parseFloat(o.substr(P,A)),h=10*parseFloat(o.substr(E,A));if(g){var l=3*d;if(p[l+0]=c,p[l+1]=u,p[l+2]=h,d+=1,T<n)continue}_=o.substr(5,5).trim(),w=parseInt(o.substr(0,5)),S=parseInt(o.substr(15,5)),R.growIfFull(),R.atomTypeId[L]=I.add(x),R.x[L]=c,R.y[L]=u,R.z[L]=h,R.serial[L]=S,f.addAtom(O,"","",_,w,0,"l"),L+=1}}}(0,t.length,t)}),f.finalize(),t.finalizeAtoms(),hb(t),lb(t),t.finalizeBonds(),sb(t),de.Debug&&Bp.timeEnd("GroParser._parse "+this.name)},Object.defineProperties(e.prototype,i),e}(uA);Vp.add("gro",IA);var RA=["mmtfVersion","mmtfProducer","unitCell","spaceGroup","structureId","title","depositionDate","releaseDate","experimentalMethods","resolution","rFree","rWork","bioAssemblyList","ncsOperatorList","entityList","groupList","numBonds","numAtoms","numGroups","numChains","numModels","groupsPerChain","chainsPerModel"].concat(["xCoordList","yCoordList","zCoordList","groupIdList","groupTypeList","chainIdList","bFactorList","atomIdList","altLocList","occupancyList","secStructList","insCodeList","sequenceIndexList","chainNameList","bondAtomList","bondOrderList"]);function LA(t,e,i){return e?new t(e.buffer,e.byteOffset,e.byteLength/(i||1)):void 0}function OA(t){return LA(DataView,t)}function DA(t){return LA(Int8Array,t)}function kA(t){return LA(Int32Array,t,4)}function BA(t,e){var i=t.length/2;e||(e=new Int16Array(i));for(var r=0,n=0;r<i;++r,n+=2)e[r]=t[n]<<8^t[n+1]<<0;return e}function NA(t,e){var i=t.length/4;e||(e=new Int32Array(i));for(var r=0,n=0;r<i;++r,n+=4)e[r]=t[n]<<24^t[n+1]<<16^t[n+2]<<8^t[n+3]<<0;return e}function FA(t,e,i){var r=t.length,n=1/e;i||(i=new Float32Array(r));for(var o=0;o<r;++o)i[o]=t[o]*n;return i}function zA(t,e){var i,r;if(!e){var n=0;for(i=0,r=t.length;i<r;i+=2)n+=t[i+1];e=new t.constructor(n)}var o=0;for(i=0,r=t.length;i<r;i+=2)for(var a=t[i],s=t[i+1],c=0;c<s;++c)e[o]=a,++o;return e}function UA(t,e){var i=t.length;e||(e=new t.constructor(i)),i&&(e[0]=t[0]);for(var r=1;r<i;++r)e[r]=t[r]+e[r-1];return e}function jA(t,e){var i,r,n=t instanceof Int8Array?127:32767,o=-n-1,a=t.length;if(!e){var s=0;for(i=0;i<a;++i)t[i]<n&&t[i]>o&&++s;e=new Int32Array(s)}for(r=i=0;i<a;){for(var c=0;t[i]===n||t[i]===o;)c+=t[i],++i;c+=t[i],++i,e[r]=c,++r}return e}function GA(t,e,i){return FA(jA(t,kA(i)),e,i)}function VA(t,e,i){var r,n,o,a=jA(t,kA(i));return n=e,o=LA(Float32Array,r=a,4),FA(UA(r,kA(o)),n,o)}function HA(n){var o=0,r=new DataView(n.buffer);function a(t){for(var e={},i=0;i<t;i++){e[h()]=h()}return e}function s(t){var e=n.subarray(o,o+t);return o+=t,e}function c(t){var e=n.subarray(o,o+t);o+=t;if(65535<t){for(var i=[],r=0;r<e.length;r+=65535)i.push(String.fromCharCode.apply(null,e.subarray(r,r+65535)));return i.join("")}return String.fromCharCode.apply(null,e)}function u(t){for(var e=new Array(t),i=0;i<t;i++)e[i]=h();return e}function h(){var t,e,i=n[o];if(0==(128&i))return o++,i;if(128==(240&i))return o++,a(e=15&i);if(144==(240&i))return o++,u(e=15&i);if(160==(224&i))return o++,c(e=31&i);if(224==(224&i))return t=r.getInt8(o),o++,t;switch(i){case 192:return o++,null;case 194:return o++,!1;case 195:return o++,!0;case 196:return e=r.getUint8(o+1),o+=2,s(e);case 197:return e=r.getUint16(o+1),o+=3,s(e);case 198:return e=r.getUint32(o+1),o+=5,s(e);case 202:return t=r.getFloat32(o+1),o+=5,t;case 203:return t=r.getFloat64(o+1),o+=9,t;case 204:return t=n[o+1],o+=2,t;case 205:return t=r.getUint16(o+1),o+=3,t;case 206:return t=r.getUint32(o+1),o+=5,t;case 208:return t=r.getInt8(o+1),o+=2,t;case 209:return t=r.getInt16(o+1),o+=3,t;case 210:return t=r.getInt32(o+1),o+=5,t;case 217:return e=r.getUint8(o+1),o+=2,c(e);case 218:return e=r.getUint16(o+1),o+=3,c(e);case 219:return e=r.getUint32(o+1),o+=5,c(e);case 220:return e=r.getUint16(o+1),o+=3,u(e);case 221:return e=r.getUint32(o+1),o+=5,u(e);case 222:return e=r.getUint16(o+1),o+=3,a(e);case 223:return e=r.getUint32(o+1),o+=5,a(e)}throw new Error("Unknown type 0x"+i.toString(16))}return h()}function $A(t,e,i,r){switch(t){case 1:return function(t,e){var i=t.length;e||(e=new Float32Array(i/4));for(var r=OA(e),n=OA(t),o=0,a=0,s=i/4;o<s;++o,a+=4)r.setFloat32(a,n.getFloat32(a),!0);return e}(e);case 2:return DA(e);case 3:return BA(e);case 4:return NA(e);case 5:return LA(Uint8Array,e);case 6:return zA(NA(e),new Uint8Array(i));case 7:return zA(NA(e));case 8:return UA(zA(NA(e)),s);case 9:return n=NA(e),o=NA(r)[0],FA(zA(n,kA(a)),o,a);case 10:return VA(BA(e),NA(r)[0]);case 11:return FA(BA(e),NA(r)[0]);case 12:return GA(BA(e),NA(r)[0]);case 13:return GA(DA(e),NA(r)[0]);case 14:return jA(BA(e));case 15:return jA(DA(e))}var n,o,a,s}function WA(c,t){var u=(t=t||{}).ignoreFields,h={};return RA.forEach(function(t){var e,i,r,n,o,a=!!u&&-1!==u.indexOf(t),s=c[t];a||void 0===s||(s instanceof Uint8Array?h[t]=$A.apply(null,(i=OA(e=s),r=i.getInt32(0),n=i.getInt32(4),o=e.subarray(8,12),[r,e=e.subarray(12),n,o])):h[t]=s)}),h}var XA={0:"i".charCodeAt(0),1:"s".charCodeAt(0),2:"h".charCodeAt(0),3:"e".charCodeAt(0),4:"g".charCodeAt(0),5:"b".charCodeAt(0),6:"t".charCodeAt(0),7:"l".charCodeAt(0),"-1":"".charCodeAt(0)},qA=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e;var i={type:{configurable:!0},isBinary:{configurable:!0}};return i.type.get=function(){return"mmtf"},i.isBinary.get=function(){return!0},e.prototype._parse=function(){var t,e,i,r,n;de.Debug&&Bp.time("MmtfParser._parse "+this.name);var o,a,s,c,u,h,l=this.structure,p=WA(HA(this.streamer.data));if(["depositionDate","releaseDate","resolution","rFree","rWork","experimentalMethods"].forEach(function(t){void 0!==p[t]&&(l.header[t]=p[t])}),l.id=p.structureId,l.title=p.title,l.atomStore.addField("formalCharge",1,"int8"),this.firstModelOnly||this.asTrajectory){for(u=1,t=s=0,e=c=p.chainsPerModel[0];t<e;++t)s+=p.groupsPerChain[t];for(t=a=0,e=s;t<e;++t)a+=(n=p.groupList[p.groupTypeList[t]]).atomNameList.length;o=p.numBonds,h=[c]}else o=p.numBonds,a=p.numAtoms,s=p.numGroups,c=p.numChains,u=p.numModels,h=p.chainsPerModel;if(o+=s,this.asTrajectory)for(t=0,e=p.numModels;t<e;++t){var d=new Float32Array(3*a),f=a*t;for(i=0;i<a;++i){var m=3*i,g=i+f;d[m]=p.xCoordList[g],d[m+1]=p.yCoordList[g],d[m+2]=p.zCoordList[g]}l.frames.push(d)}var v=new Uint32Array(o),y=new Uint32Array(o),b=new Uint8Array(o),x=new Uint32Array(a),_=new Int8Array(a),w=new Uint32Array(s),S=new Uint32Array(s),A=new Uint16Array(s),M=new Uint16Array(c),P=new Uint32Array(c),E=new Uint32Array(c),C=new Uint32Array(u),T=new Uint32Array(u),I=0;for(t=0,e=u;t<e;++t){var R=h[t];for(C[t]=I,T[t]=R,i=0;i<R;++i)M[i+I]=t;I+=R}var L=p.groupsPerChain,O=0;for(t=0,e=c;t<e;++t){var D=L[t];for(P[t]=O,E[t]=D,i=0;i<D;++i)w[i+O]=t;O+=D}var k=0,B=0;for(t=0,e=s;t<e;++t){var N=(n=p.groupList[p.groupTypeList[t]]).atomNameList.length,F=n.formalChargeList,z=n.bondAtomList,U=n.bondOrderList;for(i=0,r=U.length;i<r;++i)v[B]=k+z[2*i],y[B]=k+z[2*i+1],b[B]=U[i],B+=1;for(S[t]=k,A[t]=N,i=0;i<N;++i)x[k]=t,_[k]=F[i],k+=1}var j=p.bondAtomList;if(j)for(p.bondOrderList&&b.set(p.bondOrderList,B),t=0,e=j.length;t<e;t+=2){var G=j[t],V=j[t+1];G<a&&V<a&&(v[B]=G,y[B]=V,B+=1)}l.bondStore.length=b.length,l.bondStore.count=B,l.bondStore.atomIndex1=v,l.bondStore.atomIndex2=y,l.bondStore.bondOrder=b,l.atomStore.length=a,l.atomStore.count=a,l.atomStore.residueIndex=x,l.atomStore.atomTypeId=new Uint16Array(a),l.atomStore.x=p.xCoordList.subarray(0,a),l.atomStore.y=p.yCoordList.subarray(0,a),l.atomStore.z=p.zCoordList.subarray(0,a),l.atomStore.serial=p.atomIdList.subarray(0,a),l.atomStore.bfactor=p.bFactorList.subarray(0,a),l.atomStore.altloc=p.altLocList.subarray(0,a),l.atomStore.occupancy=p.occupancyList.subarray(0,a),l.atomStore.formalCharge=_,l.residueStore.length=s,l.residueStore.count=s,l.residueStore.chainIndex=w,l.residueStore.residueTypeId=p.groupTypeList,l.residueStore.atomOffset=S,l.residueStore.atomCount=A,l.residueStore.resno=p.groupIdList.subarray(0,s),l.residueStore.sstruc=p.secStructList.subarray(0,s),l.residueStore.inscode=p.insCodeList.subarray(0,s),l.chainStore.length=c,l.chainStore.count=c,l.chainStore.entityIndex=new Uint16Array(c),l.chainStore.modelIndex=M,l.chainStore.residueOffset=P,l.chainStore.residueCount=E,l.chainStore.chainname=p.chainNameList.subarray(0,4*c),l.chainStore.chainid=p.chainIdList.subarray(0,4*c),l.modelStore.length=u,l.modelStore.count=u,l.modelStore.chainOffset=C,l.modelStore.chainCount=T;var H={};for(t=0,e=p.groupList.length;t<e;++t){var $=p.groupList[t],W=[];for(i=0,r=$.atomNameList.length;i<r;++i){var X=$.elementList[i].toUpperCase(),q=$.atomNameList[i];W.push(l.atomMap.add(q,X))}var Y=$.chemCompType.toUpperCase(),Z=Zm.includes(Y),K=$.bondOrderList.length,J=new Array(K),Q=new Array(K);for(i=0;i<K;++i)J[i]=$.bondAtomList[2*i],Q[i]=$.bondAtomList[2*i+1];var tt={atomIndices1:J,atomIndices2:Q,bondOrders:$.bondOrderList};H[t]=l.residueMap.add($.groupName,W,Z,Y,tt)}for(t=0,e=s;t<e;++t)l.residueStore.residueTypeId[t]=H[l.residueStore.residueTypeId[t]];for(t=0,e=l.atomStore.count;t<e;++t){var et=l.atomStore.residueIndex[t],it=l.residueMap.list[l.residueStore.residueTypeId[et]],rt=l.residueStore.atomOffset[et];l.atomStore.atomTypeId[t]=it.atomTypeIdList[t-rt]}if(p.secStructList){var nt=p.secStructList.length;for(t=0,e=l.residueStore.count;t<e;++t){var ot=XA[l.residueStore.sstruc[t%nt]];void 0!==ot&&(l.residueStore.sstruc[t]=ot)}}if(p.entityList&&p.entityList.forEach(function(t,e){l.entityList[e]=new hA(l,e,t.description,t.type,t.chainIndexList)}),p.bioAssemblyList&&p.bioAssemblyList.forEach(function(t,e){var i=e+1,n=new tb(i);l.biomolDict["BU"+i]=n;var o={};t.transformList.forEach(function(t){var e=(new Ke).fromArray(t.matrix).transpose(),i=t.chainIndexList.map(function(t){for(var e="",i=0;i<4;++i){var r=p.chainNameList[4*t+i];if(!r)break;e+=String.fromCharCode(r)}return e}),r=o[i];r?r.matrixList.push(e):o[i]=n.addPart([e],i)})}),p.ncsOperatorList){var at=new tb("NCS"),st=at.addPart();p.ncsOperatorList.forEach(function(t){var e=(new Ke).fromArray(t).transpose();st.matrixList.push(e)}),0<st.matrixList.length&&(l.biomolDict.NCS=at)}var ct=p.unitCell;ct&&Array.isArray(ct)&&ct[0]?l.unitcell=new dA({a:ct[0],b:ct[1],c:ct[2],alpha:ct[3],beta:ct[4],gamma:ct[5],spacegroup:p.spaceGroup}):l.unitcell=void 0,mb(l,!0),fb(l,!0),l.finalizeAtoms(),l.finalizeBonds(),gb(l),de.Debug&&Bp.timeEnd("MmtfParser._parse "+this.name)},Object.defineProperties(e.prototype,i),e}(uA);Vp.add("mmtf",qA);var YA=/\s+/,ZA={1:1,2:2,3:3,am:1,ar:1,du:1,un:1,nc:0},KA=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e;var i={type:{configurable:!0}};return i.type.get=function(){return"mol2"},e.prototype._parse=function(){de.Debug&&Bp.time("Mol2Parser._parse "+this.name);var b,x,_=this.structure,w=this.structureBuilder,S=this.firstModelOnly,A=this.asTrajectory,M=_.frames,P=!1,E=_.atomMap,C=_.atomStore;C.resize(Math.round(this.streamer.data.length/60)),C.addField("partialCharge",1,"float32");var T=0,I=0,R=0,L=-1,O=0,D=0,k=1,B=2,N=3,F=_.getAtomProxy(),z=_.getAtomProxy();this.streamer.eachChunkOfLines(function(t){!function(t,e,i){for(var r=t;r<e;++r){var n=i[r].trim();if(""!==n&&"#"!==n[0])if("@"===n[0])"@<TRIPOS>MOLECULE"===n?(D=k,I=0,++L):"@<TRIPOS>ATOM"===n?(D=B,R=C.count,A&&(x=0,b=new Float32Array(3*O),M.push(b),0<L&&(P=!0))):D="@<TRIPOS>BOND"===n?N:0;else if(D===k){if(0===I)_.title=n,_.id=n;else if(1===I){var o=n.split(YA);O=parseInt(o[0])}++I}else if(D===B){var a=n.split(YA);if(S&&0<L)continue;var s=parseFloat(a[2]),c=parseFloat(a[3]),u=parseFloat(a[4]);if(A){var h=3*x;if(b[h+0]=s,b[h+1]=c,b[h+2]=u,x+=1,P)continue}var l=a[0],p=a[1],d=a[5].split(".")[0],f=a[6]?parseInt(a[6]):1,m=a[7]?a[7]:"",g=a[8]?parseFloat(a[8]):0;C.growIfFull(),C.atomTypeId[T]=E.add(p,d),C.x[T]=s,C.y[T]=c,C.z[T]=u,C.serial[T]=l,C.partialCharge[T]=g,w.addAtom(L,"","",m,f,1),T+=1}else if(D===N){if(S&&0<L)continue;if(A&&0<L)continue;var v=n.split(YA);F.index=parseInt(v[1])-1+R,z.index=parseInt(v[2])-1+R;var y=ZA[v[3]];_.bondStore.addBond(F,z,y)}}}(0,t.length,t)}),w.finalize(),_.finalizeAtoms(),hb(_),fb(_,!0),mb(_,!0),_.finalizeBonds(),xb(_),sb(_),de.Debug&&Bp.timeEnd("Mol2Parser._parse "+this.name)},Object.defineProperties(e.prototype,i),e}(uA);Vp.add("mol2",KA);var JA=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e;var i={type:{configurable:!0}};return i.type.get=function(){return"pdbqt"},Object.defineProperties(e.prototype,i),e}(bA);Vp.add("pdbqt",JA);var QA=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e;var i={type:{configurable:!0}};return i.type.get=function(){return"pqr"},Object.defineProperties(e.prototype,i),e}(bA);Vp.add("pqr",QA);var tM=/> <(.+)>/,eM=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e;var i={type:{configurable:!0}};return i.type.get=function(){return"sdf"},e.prototype._parse=function(){de.Debug&&Bp.time("SdfParser._parse "+this.name);var v=this.structure,y=this.structureBuilder,b=this.firstModelOnly,x=this.asTrajectory,t=this.streamer.peekLines(2);v.id=t[0].trim(),v.title=t[1].trim();var _,w,S=v.frames,A=!1,M=v.atomMap,P=v.atomStore;P.resize(Math.round(this.streamer.data.length/50)),P.addField("formalCharge",1,"int8");var E,C,T,I,R,L,O,D=v.getAtomProxy(),k=v.getAtomProxy(),B=0,N=0,F=0,z=0,U=[],j=!1,G={};v.extraData.sdf=U,this.streamer.eachChunkOfLines(function(t){!function(t,e,i){for(var r=t;r<e;++r){var n=i[r];if("$$$$"===n.substr(0,4))N=-1,++F,z=P.count,U.push(G),j=!(G={});else if(3===N)C=parseInt(n.substr(0,3)),T=parseInt(n.substr(3,3)),O=(L=R=(I=4)+C)+T,x&&(w=0,_=new Float32Array(3*C),S.push(_),0<F&&(A=!0));else if(I<=N&&N<R){if(b&&0<F)continue;var o=parseFloat(n.substr(0,10)),a=parseFloat(n.substr(10,10)),s=parseFloat(n.substr(20,10));if(x){var c=3*w;if(_[c+0]=o,_[c+1]=a,_[c+2]=s,w+=1,A)continue}var u=n.substr(31,3).trim(),h=u+(B+1);P.growIfFull(),P.atomTypeId[B]=M.add(h,u),P.x[B]=o,P.y[B]=a,P.z[B]=s,P.serial[B]=B,P.formalCharge[B]=0,y.addAtom(F,"","","HET",1,1),B+=1}else if(L<=N&&N<O){if(b&&0<F)continue;if(x&&0<F)continue;D.index=parseInt(n.substr(0,3))-1+z,k.index=parseInt(n.substr(3,3))-1+z;var l=parseInt(n.substr(6,3));v.bondStore.addBond(D,k,l)}else if(n.match(/M {2}CHG/))for(var p=parseInt(n.substr(6,3)),d=0,f=10;d<p;++d,f+=8){var m=parseInt(n.substr(f,3))-1+z,g=parseInt(n.substr(f+4,3));P.formalCharge[m]=g}else(E=n.match(tM))?(j=E[1],G[j]=[]):!1!==j&&n&&G[j].push(n);++N}}(0,t.length,t)}),y.finalize(),v.finalizeAtoms(),v.finalizeBonds(),xb(v),de.Debug&&Bp.timeEnd("SdfParser._parse "+this.name)},e.prototype._postProcess=function(){xb(this.structure)},Object.defineProperties(e.prototype,i),e}(uA);Vp.add("sdf",eM),Vp.add("sd",eM),Vp.add("mol",eM);function iM(t,e,i){return parseInt(t.substr(e,i).trim())}var rM=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e;var i={type:{configurable:!0}};return i.type.get=function(){return"prmtop"},e.prototype._parse=function(){de.Debug&&Bp.time("PrmtopParser._parse "+this.name);var t=this.structure,e=this.structureBuilder,i=t.atomMap,P=t.atomStore;P.addField("partialCharge",1,"float32"),P.addField("radius",1,"float32");var E,C,T,I,R,L,O,D,k,B,N,F=[],z={},U=["NATOM","NTYPES","NBONH","MBONA","NTHETH","MTHETA","NPHIH","MPHIA","NHPARM","NPARM","NNB","NRES","NBONA","NTHETA","NPHIA","NUMBND","NUMANG","NPTRA","NATYP","NPHB","IFPERT","NBPER","NGPER","NDPER","MBPER","MGPER","MDPER","IFBOX","NMXRS","IFCAP","NUMEXTRA","NCOPY"];U.forEach(function(t){z[t]=0}),this.streamer.eachChunkOfLines(function(t){!function(t,e,i){for(var r=t;r<e;++r){var n=i[r],o=n.trim();if(o)if(n.startsWith("%FORMAT"));else if(n.startsWith("%FLAG")){var a=n.substr(5).trim();B=0,"TITLE"===a?k=1:"POINTERS"===a?k=2:"ATOM_NAME"===a?k=3:"CHARGE"===a?k=4:"MASS"===a?k=5:"RESIDUE_LABEL"===a?k=6:"RESIDUE_POINTER"===a?k=7:"BONDS_INC_HYDROGEN"===a?(N=0,k=8):"BONDS_WITHOUT_HYDROGEN"===a?(N=z.NBONH,k=9):k="RADII"===a?10:void 0}else if(1===k)F.push(o);else if(2===k){for(var s=Math.min(B+10,32),c=0;B<s;++c,++B)z[U[B]]=parseInt(n.substr(8*c,8).trim());E=new Array(z.NATOM),C=new Float32Array(z.NATOM),T=new Float32Array(z.NATOM),P.resize(z.NATOM);var u=z.NBONH+z.MBONA;I=new Uint32Array(u),R=new Uint32Array(u),L=new Uint8Array(u),O=new Array(z.NRES),D=new Uint32Array(z.NRES)}else if(3===k)for(var h=Math.min(B+20,z.NATOM),l=0;B<h;++l,++B)E[B]=n.substr(4*l,4).trim();else if(4===k)for(var p=Math.min(B+5,z.NATOM),d=0;B<p;++d,++B)C[B]=parseFloat(n.substr(16*d,16))/18.2223;else if(5===k);else if(6===k)for(var f=Math.min(B+20,z.NRES),m=0;B<f;++m,++B)O[B]=n.substr(4*m,4).trim();else if(7===k)for(var g=Math.min(B+10,z.NRES),v=0;B<g;++v,++B)D[B]=iM(n,8*v,8);else if(8===k)for(var y=Math.min(B+10,3*z.NBONH),b=0;B<y;++b,++B){var x=B%3;0===x&&(I[N]=iM(n,8*b,8)/3),1===x&&(R[N]=iM(n,8*b,8)/3,L[N]=1,++N)}else if(9===k)for(var _=Math.min(B+10,3*z.MBONA),w=0;B<_;++w,++B){var S=B%3;0===S&&(I[N]=iM(n,8*w,8)/3),1===S&&(R[N]=iM(n,8*w,8)/3,L[N]=1,++N)}else if(10===k)for(var A=Math.min(B+5,z.NATOM),M=0;B<A;++M,++B)T[B]=parseFloat(n.substr(16*M,16))}}(0,t.length,t)}),t.title=F.join(" ");for(var r=z.NATOM,n=0,o=O[0],a=1,s=0;s<r;++s)s+1===D[n+1]&&(o=O[++n],a=n+1),P.atomTypeId[s]=i.add(E[s]),P.serial[s]=s+1,e.addAtom(0,"","",o,a);P.partialCharge.set(C),P.radius.set(T),t.bondStore.length=L.length,t.bondStore.count=L.length,t.bondStore.atomIndex1=I,t.bondStore.atomIndex2=R,t.bondStore.bondOrder=L,e.finalize(),t.finalizeAtoms(),t.finalizeBonds(),fb(t,!0),mb(t,!0,!0),hb(t,!0),xb(t),de.Debug&&Bp.timeEnd("PrmtopParser._parse "+this.name)},Object.defineProperties(e.prototype,i),e}(uA);Vp.add("prmtop",rM),Vp.add("parm7",rM);var nM=/\s+/,oM=/(^\*|REMARK)*/,aM=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e;var i={type:{configurable:!0}};return i.type.get=function(){return"psf"},e.prototype._parse=function(){de.Debug&&Bp.time("PsfParser._parse "+this.name);var t=this.structure,v=this.structureBuilder,y=t.atomMap,b=t.atomStore;b.addField("partialCharge",1,"float32");var x,_,w,S,A,M,P=[],E=0,C=0,T=0;this.streamer.eachChunkOfLines(function(t){!function(t,e,i){for(var r=t;r<e;++r){var n=i[r].trim();if(n)if(2===x){var o=n.split(nM),a=parseInt(o[0]),s=o[1],c=parseInt(o[2]),u=o[3],h=o[4],l=parseFloat(o[6]);s!==w&&(_=ub(C),++C),b.growIfFull(),b.atomTypeId[E]=y.add(h),b.serial[E]=a,b.partialCharge[E]=l,v.addAtom(0,_,_,u,c),E+=1,w=s}else if(3===x)for(var p=n.split(nM),d=0,f=p.length;d<f;d+=2)S[T]=parseInt(p[d])-1,A[T]=parseInt(p[d+1])-1,M[T]=1,T+=1;else if(1===x)P.push(n.replace(oM,"").trim());else if(4===x);else if(5===x);else if(6===x);else if(n.includes("!NATOM")){x=2;var m=parseInt(n.split(nM)[0]);b.resize(m)}else if(n.includes("!NBOND")){x=3;var g=parseInt(n.split(nM)[0]);S=new Uint32Array(g),A=new Uint32Array(g),M=new Uint8Array(g)}else n.includes("!NTITLE")?x=1:n.includes("!NTHETA")?x=4:n.includes("!NPHI")?x=5:n.includes("!NIMPHI")&&(x=6);else x=void 0}}(0,t.length,t)}),t.title=P.join(" "),t.bondStore.length=M.length,t.bondStore.count=T,t.bondStore.atomIndex1=S,t.bondStore.atomIndex2=A,t.bondStore.bondOrder=M,v.finalize(),t.finalizeAtoms(),t.finalizeBonds(),fb(t,!0),mb(t,!0,!0),xb(t),de.Debug&&Bp.timeEnd("PsfParser._parse "+this.name)},Object.defineProperties(e.prototype,i),e}(uA);Vp.add("psf",aM);var sM=/\[ (.+) \]/,cM=/\s+/,uM=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e;var i={type:{configurable:!0}};return i.type.get=function(){return"top"},e.prototype._parse=function(){de.Debug&&Bp.time("TopParser._parse "+this.name);var d=this.structure,s=this.structureBuilder,c=d.atomMap,u=d.bondStore,h=d.atomStore;h.addField("partialCharge",1,"float32");var f,m,g=[],v={};this.streamer.eachChunkOfLines(function(t){!function(t,e,i){for(var r=t;r<e;++r){var n=i[r],o=n.trim();if(o&&"*"!==o[0]&&";"!==o[0]){if(o.startsWith("#include"))throw new Error("TopParser: #include statements not allowed");var a=n.match(sM);if(null===a){var s=o.indexOf(";");if(-1!==s&&(o=o.substring(0,s).trim()),3===m){var c=o.split(cM)[0];v[c]=f}else if(4===m){var u=o.split(cM);f.atoms.push([parseInt(u[2]),u[3],u[4],parseFloat(u[6])])}else if(5===m){var h=o.split(cM);f.bonds.push([parseInt(h[0]),parseInt(h[1])])}else if(1===m)d.title=o;else if(2===m){var l=o.split(cM);g.push([l[0],parseInt(l[1])])}}else{var p=a[1];"moleculetype"===p?(m=3,f={atoms:[],bonds:[]}):m="atoms"===p?4:"bonds"===p?5:"system"===p?1:"molecules"===p?2:void 0}}}}(0,t.length,t)});var n=0,o=0;g.forEach(function(t){var e=t[0],i=t[1],r=v[e];n+=i*r.atoms.length,o+=i*r.bonds.length}),h.resize(n),u.resize(o);var l,p=0,y=0,b=0,x=0,_=0,w=0;g.forEach(function(t){for(var e=t[0],i=t[1],r=v[e],a=ub(x),n=function(t){l=-1;var o=dg.includes(e)?a:ub(b);r.atoms.forEach(function(t){var e=t[0],i=t[1],r=t[2],n=t[3];e!==l&&++y,h.atomTypeId[p]=c.add(r),h.serial[p]=p+1,h.partialCharge[p]=n,s.addAtom(0,a,o,i,y+1),++p,l=e}),r.bonds.forEach(function(t){u.atomIndex1[_]=w+t[0]-1,u.atomIndex2[_]=w+t[1]-1,++_}),++b,w+=r.atoms.length},o=0;o<i;++o)n();++x}),u.count=o,s.finalize(),d.finalizeAtoms(),d.finalizeBonds(),fb(d,!0),mb(d,!0,!0),xb(d),de.Debug&&Bp.timeEnd("TopParser._parse "+this.name)},Object.defineProperties(e.prototype,i),e}(uA);Vp.add("top",uM);var hM=function(i){function t(t,e){i.call(this,t,e),this.frames=new jx(this.name,this.path)}i&&(t.__proto__=i),(t.prototype=Object.create(i&&i.prototype)).constructor=t;var e={type:{configurable:!0},__objName:{configurable:!0}};return e.type.get=function(){return"trajectory"},e.__objName.get=function(){return"frames"},Object.defineProperties(t.prototype,e),t}(sA),lM=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e;var i={type:{configurable:!0},isBinary:{configurable:!0}};return i.type.get=function(){return"dcd"},i.isBinary.get=function(){return!0},e.prototype._parse=function(){de.Debug&&Bp.time("DcdParser._parse "+this.name);var t=xl(this.streamer.data),e=new DataView(t),i=this.frames,r=i.coordinates,n=i.boxes,o={},a=0,s=new Int32Array(t,0,23),c=s[0]!==e.getInt32(0);if(84!==s[0])for(var u=t.byteLength,h=0;h<u;h+=4)e.setFloat32(h,e.getFloat32(h),!0);84!==s[0]&&Bp.error("dcd bad format, header block start"),"CORD"!==String.fromCharCode(e.getUint8(4),e.getUint8(5),e.getUint8(6),e.getUint8(7))&&Bp.error("dcd bad format, format string");var l=!1,p=!1,d=!1;0!==s[22]&&(l=!0,0!==s[12]&&(p=!0),1===s[13]&&(d=!0)),o.NSET=s[2],o.ISTART=s[3],o.NSAVC=s[4],o.NAMNF=s[10],o.DELTA=l?e.getFloat32(44,c):e.getFloat64(44,c),84!==s[22]&&Bp.error("dcd bad format, header block end"),a=a+84+8;var f=e.getInt32(a,c),m=a+1;if((f-4)%80!=0&&Bp.error("dcd bad format, title block start"),o.TITLE=vl(new Uint8Array(t,m,f)),e.getInt32(m+f+4-1,c)!==f&&Bp.error("dcd bad format, title block end"),a=a+f+8,4!==e.getInt32(a,c)&&Bp.error("dcd bad format, natom block start"),o.NATOM=e.getInt32(a+4,c),4!==e.getInt32(a+8,c)&&Bp.error("dcd bad format, natom block end"),a=a+4+8,0<o.NAMNF)Bp.error("dcd format with fixed atoms unsupported, aborting");else{for(var g=o.NATOM,v=4*g,y=0,b=o.NSET;y<b;++y){if(p){a+=4;var x=new Float32Array(9);x[0]=e.getFloat64(a,c),x[4]=e.getFloat64(a+16,c),x[8]=e.getFloat64(a+40,c),n.push(x),a+=48,a+=4}for(var _=new Float32Array(3*g),w=0;w<3;++w){e.getInt32(a,c)!==v&&Bp.error("dcd bad format, coord block start",y,w),a+=4;for(var S=new Float32Array(t,a,g),A=0;A<g;++A)_[3*A+w]=S[A];a+=v,e.getInt32(a,c)!==v&&Bp.error("dcd bad format, coord block end",y,w),a+=4}if(r.push(_),d)a+=4+e.getInt32(a,c)+4}o.DELTA&&(i.deltaTime=20.45482949774598*o.DELTA),1<=o.ISTART&&(i.timeOffset=(o.ISTART-1)*i.deltaTime),de.Debug&&Bp.timeEnd("DcdParser._parse "+this.name)}},Object.defineProperties(e.prototype,i),e}(hM);function pM(t,e){if(t)throw new TypeError("Not a valid NetCDF v3.x file: "+e)}function dM(t){t.offset%4!=0&&t.skip(4-t.offset%4)}function fM(t){var e=t.readUint32(),i=t.readChars(e);return dM(t),i}Vp.add("dcd",lM);var mM={BYTE:1,CHAR:2,SHORT:3,INT:4,FLOAT:5,DOUBLE:6};function gM(t){switch(Number(t)){case mM.BYTE:return"byte";case mM.CHAR:return"char";case mM.SHORT:return"short";case mM.INT:return"int";case mM.FLOAT:return"float";case mM.DOUBLE:return"double";default:return"undefined"}}function vM(t){switch(Number(t)){case mM.BYTE:case mM.CHAR:return 1;case mM.SHORT:return 2;case mM.INT:case mM.FLOAT:return 4;case mM.DOUBLE:return 8;default:return-1}}function yM(t){switch(String(t)){case"byte":return mM.BYTE;case"char":return mM.CHAR;case"short":return mM.SHORT;case"int":return mM.INT;case"float":return mM.FLOAT;case"double":return mM.DOUBLE;default:return-1}}function bM(t,e){if(1!==t){for(var i=new Array(t),r=0;r<t;r++)i[r]=e();return i}return e()}function xM(t,e,i){switch(e){case mM.BYTE:return t.readBytes(i);case mM.CHAR:return function(t){if(0===t.charCodeAt(t.length-1))return t.substring(0,t.length-1);return t}(t.readChars(i));case mM.SHORT:return bM(i,t.readInt16.bind(t));case mM.INT:return bM(i,t.readInt32.bind(t));case mM.FLOAT:return bM(i,t.readFloat32.bind(t));case mM.DOUBLE:return bM(i,t.readFloat64.bind(t));default:return void pM(!0,"non valid type "+e)}}var _M=0,wM=10,SM=11,AM=12;function MM(t,e){var i={recordDimension:{length:t.readUint32()}};i.version=e;var r=function(t){var e,i,r,n=t.readUint32();{if(n===_M)return pM(t.readUint32()!==_M,"wrong empty tag for list of dimensions"),[];pM(n!==wM,"wrong tag for list of dimensions");var o=t.readUint32();e=new Array(o);for(var a=0;a<o;a++){var s=fM(t),c=t.readUint32();0===c&&(i=a,r=s),e[a]={name:s,size:c}}}return{dimensions:e,recordId:i,recordName:r}}(t);i.recordDimension.id=r.recordId,i.recordDimension.name=r.recordName,i.dimensions=r.dimensions,i.globalAttributes=PM(t);var n=function(t,e,i){var r,n=t.readUint32(),o=0;{if(n===_M)return pM(t.readUint32()!==_M,"wrong empty tag for list of variables"),[];pM(n!==SM,"wrong tag for list of variables");var a=t.readUint32();r=new Array(a);for(var s=0;s<a;s++){for(var c=fM(t),u=t.readUint32(),h=new Array(u),l=0;l<u;l++)h[l]=t.readUint32();var p=PM(t),d=t.readUint32();pM(d<1&&6<d,"non valid type "+d);var f=t.readUint32(),m=t.readUint32();2===i&&(pM(0<m,"offsets larger than 4GB not supported"),m=t.readUint32()),h[0]===e&&(o+=f),r[s]={name:c,dimensions:h,attributes:p,type:gM(d),size:f,offset:m,record:h[0]===e}}}return{variables:r,recordStep:o}}(t,r.recordId,e);return i.variables=n.variables,i.recordDimension.recordStep=n.recordStep,i}function PM(t){var e,i=t.readUint32();if(i===_M)return pM(t.readUint32()!==_M,"wrong empty tag for list of attributes"),[];pM(i!==AM,"wrong tag for list of attributes");var r=t.readUint32();e=new Array(r);for(var n=0;n<r;n++){var o=fM(t),a=t.readUint32();pM(a<1||6<a,"non valid type "+a);var s=xM(t,a,t.readUint32());dM(t),e[n]={name:o,type:gM(a),value:s}}return e}var EM=function(t){var e=new hd(t);e.setBigEndian(),pM("CDF"!==e.readChars(3),"should start with CDF");var i=e.readByte();pM(2<i,"unknown version"),this.header=MM(e,i),this.buffer=e},CM={version:{configurable:!0},recordDimension:{configurable:!0},dimensions:{configurable:!0},globalAttributes:{configurable:!0},variables:{configurable:!0}};CM.version.get=function(){return 1===this.header.version?"classic format":"64-bit offset format"},CM.recordDimension.get=function(){return this.header.recordDimension},CM.dimensions.get=function(){return this.header.dimensions},CM.globalAttributes.get=function(){return this.header.globalAttributes},CM.variables.get=function(){return this.header.variables},EM.prototype.hasDataVariable=function(e){return-1!==this.header.variables.findIndex(function(t){return t.name===e})},EM.prototype.getDataVariable=function(e){var t;return pM(void 0===(t="string"==typeof e?this.header.variables.find(function(t){return t.name===e}):e),"variable not found"),this.buffer.seek(t.offset),t.record?function(t,e,i){for(var r=yM(e.type),n=e.size?e.size/vM(r):1,o=i.length,a=new Array(o),s=i.recordStep,c=0;c<o;c++){var u=t.offset;a[c]=xM(t,r,n),t.seek(u+s)}return a}(this.buffer,t,this.header.recordDimension):function(t,e){for(var i=yM(e.type),r=e.size/vM(i),n=new Array(r),o=0;o<r;o++)n[o]=xM(t,i,1);return n}(this.buffer,t)},Object.defineProperties(EM.prototype,CM);var TM=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e;var i={type:{configurable:!0},isBinary:{configurable:!0}};return i.type.get=function(){return"nctraj"},i.isBinary.get=function(){return!0},e.prototype._parse=function(){de.Debug&&Bp.time("NctrajParser._parse "+this.name);var t=new EM(this.streamer.data),e=this.frames,i=e.coordinates,r=e.boxes,n=e.times;t.getDataVariable("coordinates").forEach(function(t){i.push(new Float32Array(t))}),t.hasDataVariable("cell_lengths")&&t.getDataVariable("cell_lengths").forEach(function(t){r.push(new Float32Array(t))}),t.hasDataVariable("time")&&t.getDataVariable("time").forEach(function(t){n.push(t)}),1<=n.length&&(e.timeOffset=n[0]),2<=n.length&&(e.deltaTime=n[1]-n[0]),de.Debug&&Bp.timeEnd("NctrajParser._parse "+this.name)},Object.defineProperties(e.prototype,i),e}(hM);Vp.add("nctraj",TM),Vp.add("ncdf",TM),Vp.add("nc",TM);var IM=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e;var i={type:{configurable:!0},isBinary:{configurable:!0}};return i.type.get=function(){return"trr"},i.isBinary.get=function(){return!0},e.prototype._parse=function(){de.Debug&&Bp.time("TrrParser._parse "+this.name);for(var t=xl(this.streamer.data),e=new DataView(t),i=this.frames,r=i.coordinates,n=i.boxes,o=i.times,a=0;;){a+=8;var s=e.getInt32(a);a+=4,a+=s;var c=e.getInt32(a+8),u=e.getInt32(a+12),h=e.getInt32(a+16),l=e.getInt32(a+28),p=e.getInt32(a+32),d=e.getInt32(a+36),f=e.getInt32(a+40);a+=52;var m=c/9,g=3*f;if(8===m?o.push(e.getFloat64(a)):o.push(e.getFloat32(a)),a+=2*m,c){var v=new Float32Array(9);if(8===m)for(var y=0;y<9;++y)v[y]=10*e.getFloat64(a),a+=8;else for(var b=0;b<9;++b)v[b]=10*e.getFloat32(a),a+=4;n.push(v)}if(a+=u,a+=h,l){var x=void 0;if(8===m){x=new Float32Array(g);for(var _=0;_<g;++_)x[_]=10*e.getFloat64(a),a+=8}else{for(var w=new Uint32Array(t,a,g),S=0;S<g;++S){var A=w[S];w[S]=(255&A)<<24|(65280&A)<<8|A>>8&65280|A>>24&255}x=new Float32Array(t,a,g);for(var M=0;M<g;++M)x[M]*=10,a+=4}r.push(x)}if(a+=p,(a+=d)>=t.byteLength)break}1<=o.length&&(i.timeOffset=o[0]),2<=o.length&&(i.deltaTime=o[1]-o[0]),de.Debug&&Bp.timeEnd("TrrParser._parse "+this.name)},Object.defineProperties(e.prototype,i),e}(hM);Vp.add("trr",IM);var RM=new Uint32Array([0,0,0,0,0,0,0,0,0,8,10,12,16,20,25,32,40,50,64,80,101,128,161,203,256,322,406,512,645,812,1024,1290,1625,2048,2580,3250,4096,5060,6501,8192,10321,13003,16384,20642,26007,32768,41285,52015,65536,82570,104031,131072,165140,208063,262144,330280,416127,524287,660561,832255,1048576,1321122,1664510,2097152,2642245,3329021,4194304,5284491,6658042,8388607,10568983,13316085,16777216]);function LM(t){for(var e=1,i=0;e<=t&&i<32;)i++,e<<=1;return i}var OM=new Uint8Array(32);function DM(t,e){var i=1,r=0;OM[0]=1;for(var n=0;n<t;n++){var o=void 0,a=0;for(o=0;o<i;o++)a+=OM[o]*e[n],OM[o]=255&a,a>>=8;for(;0!==a;)OM[o++]=255&a,a>>=8;i=o}var s=1;for(i--;OM[i]>=s;)r++,s*=2;return r+8*i}function kM(t,e,i,r){for(var n=(1<<i)-1,o=r[1],a=r[2],s=t[0],c=0;8<=i;)c|=(a=a<<8|e[s++])>>o<<i-8,i-=8;return 0<i&&(o<i&&(o+=8,a=a<<8|e[s++]),c|=a>>(o-=i)&(1<<i)-1),c&=n,t[0]=s,t[1]=o,t[2]=a,c}var BM=new Int32Array(32);function NM(t,e,i,r,n,o,a){var s=0;for(BM[1]=0,BM[2]=0,BM[3]=0;8<r;)BM[s++]=kM(t,e,8,a),r-=8;0<r&&(BM[s++]=kM(t,e,r,a));for(var c=i-1;0<c;c--){for(var u=0,h=s-1;0<=h;h--){var l=(u=u<<8|BM[h])/n[c]|0;u-=(BM[h]=l)*n[c]}o[c]=u}o[0]=BM[0]|BM[1]<<8|BM[2]<<16|BM[3]<<24}var FM=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e;var i={type:{configurable:!0},isBinary:{configurable:!0}};return i.type.get=function(){return"xtc"},i.isBinary.get=function(){return!0},e.prototype._parse=function(){de.Debug&&Bp.time("XtcParser._parse "+this.name);for(var t=xl(this.streamer.data),e=new DataView(t),i=this.frames,r=i.coordinates,n=i.boxes,o=i.times,a=new Int32Array(6),s=new Int32Array(3),c=new Int32Array(3),u=new Uint32Array(3),h=new Float32Array(3),l=new Float32Array(3),p=0,d=new Int32Array(3),f=new Uint32Array(d.buffer);;){var m=void 0,g=e.getInt32(p+4);p+=12;var v=3*g;o.push(e.getFloat32(p)),p+=4;for(var y=new Float32Array(9),b=0;b<9;++b)y[b]=10*e.getFloat32(p),p+=4;if(n.push(y),g<=9)for(var x=0;x<g;++x)m[x]=e.getFloat32(p),p+=4;else{d[0]=d[1]=d[2]=0,s[0]=s[1]=s[2]=0,u[0]=u[1]=u[2]=0,c[0]=c[1]=c[2]=0,h[0]=h[1]=h[2]=0,l[0]=l[1]=l[2]=0,m=new Float32Array(v);var _=0,w=e.getInt32(p);p+=4;var S=e.getFloat32(p);p+=4,a[0]=e.getInt32(p),a[1]=e.getInt32(p+4),a[2]=e.getInt32(p+8),a[3]=e.getInt32(p+12),a[4]=e.getInt32(p+16),a[5]=e.getInt32(p+20),s[0]=a[3]-a[0]+1,s[1]=a[4]-a[1]+1,s[2]=a[5]-a[2]+1,p+=24;var A=void 0;16777215<(s[0]|s[1]|s[2])?(c[0]=LM(s[0]),c[1]=LM(s[1]),c[2]=LM(s[2]),A=0):A=DM(3,s);var M=e.getInt32(p);p+=4;var P=M-1,E=RM[P=P<9?9:P]/2|0,C=RM[M]/2|0;u[0]=u[1]=u[2]=RM[M];var T=4*Math.ceil(e.getInt32(p)/4);p+=4;var I=1/S,R=0,L=0,O=new Uint8Array(t,p);for(h[0]=h[1]=h[2]=0;L<w;){0===A?(h[0]=kM(d,O,c[0],f),h[1]=kM(d,O,c[1],f),h[2]=kM(d,O,c[2],f)):NM(d,O,3,A,s,h,f),L++,h[0]+=a[0],h[1]+=a[1],h[2]+=a[2],l[0]=h[0],l[1]=h[1],l[2]=h[2];var D=0;if(1===kM(d,O,1,f)&&(R=kM(d,O,5,f),R-=D=R%3,D--),0<R){h[0]=h[1]=h[2]=0;for(var k=0;k<R;k+=3){if(NM(d,O,3,M,u,h,f),L++,h[0]+=l[0]-C,h[1]+=l[1]-C,h[2]+=l[2]-C,0===k){var B=h[0];h[0]=l[0],l[0]=B,B=h[1],h[1]=l[1],l[1]=B,B=h[2],h[2]=l[2],l[2]=B,m[_++]=l[0]*I,m[_++]=l[1]*I,m[_++]=l[2]*I}else l[0]=h[0],l[1]=h[1],l[2]=h[2];m[_++]=h[0]*I,m[_++]=h[1]*I,m[_++]=h[2]*I}}else m[_++]=h[0]*I,m[_++]=h[1]*I,m[_++]=h[2]*I;if(M+=D,D<0?(C=E,E=9<M?RM[M-1]/2|0:0):0<D&&(E=C,C=RM[M]/2|0),u[0]=u[1]=u[2]=RM[M],0===u[0]||0===u[1]||0===u[2])return void console.error("(xdrfile error) Undefined error.")}p+=T}for(var N=0;N<v;N++)m[N]*=10;if(r.push(m),p>=t.byteLength)break}1<=o.length&&(i.timeOffset=o[0]),2<=o.length&&(i.deltaTime=o[1]-o[0]),de.Debug&&Bp.timeEnd("XtcParser._parse "+this.name)},Object.defineProperties(e.prototype,i),e}(hM);Vp.add("xtc",FM);var zM=function(r){function t(t,e){var i=e||{};r.call(this,t,i),this.volume=new Wv(this.name,this.path),this.voxelSize=al(i.voxelSize,1)}r&&(t.__proto__=r),(t.prototype=Object.create(r&&r.prototype)).constructor=t;var e={type:{configurable:!0},__objName:{configurable:!0}};return e.type.get=function(){return"volume"},e.__objName.get=function(){return"volume"},t.prototype._afterParse=function(){this.volume.setMatrix(this.getMatrix()),r.prototype._afterParse.call(this)},t.prototype.getMatrix=function(){return new Ke},Object.defineProperties(t.prototype,e),t}(sA),UM=/\s+/,jM=/-?\d+(?:\.\d*)?(?:[eE][+-]?\d+)?/g,GM=.529177210859,VM=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e;var i={type:{configurable:!0}};return i.type.get=function(){return"cube"},e.prototype._parse=function(){de.Debug&&Bp.time("CubeParser._parse "+this.name);var t=this.volume,r=this.streamer.peekLines(6),c={},e=GM*this.voxelSize;function i(t,e){var i=r[t].trim().split(UM)[e];return parseFloat(i)}c.atomCount=Math.abs(i(2,0)),c.originX=i(2,1)*GM,c.originY=i(2,2)*GM,c.originZ=i(2,3)*GM,c.NVX=i(3,0),c.NVY=i(4,0),c.NVZ=i(5,0),c.basisX=new Qe(i(3,1),i(3,2),i(3,3)).multiplyScalar(e),c.basisY=new Qe(i(4,1),i(4,2),i(4,3)).multiplyScalar(e),c.basisZ=new Qe(i(5,1),i(5,2),i(5,3)).multiplyScalar(e);var u=new Float32Array(c.NVX*c.NVY*c.NVZ),h=0,l=0,p=0<i(2,0)?0:1;this.streamer.eachChunkOfLines(function(t){!function(t,e,i){for(var r=t;r<e;++r){var n=i[r].trim();if(""!==n&&l>=c.atomCount+6+p)for(var o=n.match(jM),a=0,s=o.length;a<s;++a)u[h]=parseFloat(o[a]),++h;++l}}(0,t.length,t)}),t.header=c,t.setData(u,c.NVZ,c.NVY,c.NVX),de.Debug&&Bp.timeEnd("CubeParser._parse "+this.name)},e.prototype.getMatrix=function(){var t=this.volume.header,e=new Ke;return e.multiply((new Ke).makeTranslation(t.originX,t.originY,t.originZ)),e.multiply((new Ke).makeBasis(t.basisZ,t.basisY,t.basisX)),e},Object.defineProperties(e.prototype,i),e}(zM);Vp.add("cub",VM),Vp.add("cube",VM);var HM=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e;var i={type:{configurable:!0},isBinary:{configurable:!0}};return i.type.get=function(){return"dsn6"},i.isBinary.get=function(){return!0},e.prototype._parse=function(){de.Debug&&Bp.time("Dsn6Parser._parse "+this.name);var t,e,i=this.volume,r={},n=xl(this.streamer.data),o=new Int16Array(n),a=new Uint8Array(n),s=String.fromCharCode.apply(null,a.subarray(0,512));if(s.startsWith(":-)"))r.xStart=parseInt(s.substr(10,5)),r.yStart=parseInt(s.substr(15,5)),r.zStart=parseInt(s.substr(20,5)),r.xExtent=parseInt(s.substr(32,5)),r.yExtent=parseInt(s.substr(38,5)),r.zExtent=parseInt(s.substr(42,5)),r.xRate=parseInt(s.substr(52,5)),r.yRate=parseInt(s.substr(58,5)),r.zRate=parseInt(s.substr(62,5)),r.xlen=parseFloat(s.substr(73,10))*this.voxelSize,r.ylen=parseFloat(s.substr(83,10))*this.voxelSize,r.zlen=parseFloat(s.substr(93,10))*this.voxelSize,r.alpha=parseFloat(s.substr(103,10)),r.beta=parseFloat(s.substr(113,10)),r.gamma=parseFloat(s.substr(123,10)),t=parseFloat(s.substr(138,12))/100,e=parseInt(s.substr(155,8)),r.sigma=100*parseFloat(s.substr(170,12));else{if(100!==o[18])for(var c=0,u=o.length;c<u;++c){var h=o[c];o[c]=(255&h)<<8|h>>8&255}r.xStart=o[0],r.yStart=o[1],r.zStart=o[2],r.xExtent=o[3],r.yExtent=o[4],r.zExtent=o[5],r.xRate=o[6],r.yRate=o[7],r.zRate=o[8];var l=1/o[17],p=l*this.voxelSize;r.xlen=o[9]*p,r.ylen=o[10]*p,r.zlen=o[11]*p,r.alpha=o[12]*l,r.beta=o[13]*l,r.gamma=o[14]*l,t=o[15]/100,e=o[16],r.gamma=o[14]*l}i.header=r,de.Debug&&Bp.log(r,t,e);for(var d=new Float32Array(r.xExtent*r.yExtent*r.zExtent),f=512,m=Math.ceil(r.xExtent/8),g=Math.ceil(r.yExtent/8),v=Math.ceil(r.zExtent/8),y=0;y<v;++y)for(var b=0;b<g;++b)for(var x=0;x<m;++x)for(var _=0;_<8;++_)for(var w=8*y+_,S=0;S<8;++S)for(var A=8*b+S,M=0;M<8;++M){var P=8*x+M;if(!(P<r.xExtent&&A<r.yExtent&&w<r.zExtent)){f+=8-M;break}d[(P*r.yExtent+A)*r.zExtent+w]=(a[f]-e)/t,++f}i.setData(d,r.zExtent,r.yExtent,r.xExtent),r.sigma&&i.setStats(void 0,void 0,void 0,r.sigma),de.Debug&&Bp.timeEnd("Dsn6Parser._parse "+this.name)},e.prototype.getMatrix=function(){var t=this.volume.header,e=[t.xlen,0,0],i=[t.ylen*Math.cos(Math.PI/180*t.gamma),t.ylen*Math.sin(Math.PI/180*t.gamma),0],r=[t.zlen*Math.cos(Math.PI/180*t.beta),t.zlen*(Math.cos(Math.PI/180*t.alpha)-Math.cos(Math.PI/180*t.gamma)*Math.cos(Math.PI/180*t.beta))/Math.sin(Math.PI/180*t.gamma),0];r[2]=Math.sqrt(t.zlen*t.zlen*Math.sin(Math.PI/180*t.beta)*Math.sin(Math.PI/180*t.beta)-r[1]*r[1]);var n=[0,e,i,r],o=[0,t.xRate,t.yRate,t.zRate],a=[0,1,2,3],s=new Ke;return s.set(n[a[1]][0]/o[a[1]],n[a[2]][0]/o[a[2]],n[a[3]][0]/o[a[3]],0,n[a[1]][1]/o[a[1]],n[a[2]][1]/o[a[2]],n[a[3]][1]/o[a[3]],0,n[a[1]][2]/o[a[1]],n[a[2]][2]/o[a[2]],n[a[3]][2]/o[a[3]],0,0,0,0,1),s.multiply((new Ke).makeRotationY(Tl(90))),s.multiply((new Ke).makeTranslation(-t.zStart,t.yStart,t.xStart)),s.multiply((new Ke).makeScale(-1,1,1)),s},Object.defineProperties(e.prototype,i),e}(zM);Vp.add("dsn6",HM),Vp.add("brix",HM);var $M=/\s+/,WM=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e;var i={type:{configurable:!0}};return i.type.get=function(){return"dx"},e.prototype._parse=function(){de.Debug&&Bp.time("DxParser._parse "+this.name);var t=this.volume,e=this.streamer.peekLines(30),i=this.parseHeaderLines(e),r=this.volume.header,c=i.dataLineStart,u=r.nx*r.ny*r.nz,h=new Float32Array(u),l=0,p=0;this.streamer.eachChunkOfLines(function(t){!function(t,e,i){for(var r=t;r<e;++r){if(l<u&&c<p){var n=i[r].trim();if(""!==n)for(var o=n.split($M),a=0,s=o.length;a<s;++a)h[l]=parseFloat(o[a]),++l}++p}}(0,t.length,t)}),t.setData(h,r.nz,r.ny,r.nx),de.Debug&&Bp.timeEnd("DxParser._parse "+this.name)},e.prototype.parseHeaderLines=function(t){for(var e={},i=t.length,r=0,n=0,o=0,a=0;a<i;++a){var s=void 0,c=t[a];if(c.startsWith("object 1"))s=c.split($M),e.nx=parseInt(s[5]),e.ny=parseInt(s[6]),e.nz=parseInt(s[7]);else if(c.startsWith("origin"))s=c.split($M),e.xmin=parseFloat(s[1]),e.ymin=parseFloat(s[2]),e.zmin=parseFloat(s[3]);else if(c.startsWith("delta"))s=c.split($M),0===o?e.hx=parseFloat(s[1])*this.voxelSize:1===o?e.hy=parseFloat(s[2])*this.voxelSize:2===o&&(e.hz=parseFloat(s[3])*this.voxelSize),o+=1;else if(c.startsWith("object 3")){r=a,n+=c.length+1;break}n+=c.length+1}return this.volume.header=e,{dataLineStart:r,headerByteCount:n}},e.prototype.getMatrix=function(){var t=this.volume.header,e=new Ke;return e.multiply((new Ke).makeRotationY(Tl(90))),e.multiply((new Ke).makeTranslation(-t.zmin,t.ymin,t.xmin)),e.multiply((new Ke).makeScale(-t.hz,t.hy,t.hx)),e},Object.defineProperties(e.prototype,i),e}(zM);Vp.add("dx",WM);var XM=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e;var i={type:{configurable:!0},isBinary:{configurable:!0}};return i.type.get=function(){return"dxbin"},i.isBinary.get=function(){return!0},e.prototype._parse=function(){de.Debug&&Bp.time("DxbinParser._parse "+this.name);for(var t=xl(this.streamer.data),e=function(t,e,i){void 0===e&&(e=10485760),void 0===i&&(i="\n");for(var r="",n=[],o=0;o<t.length;o+=e){var a=vl(t.subarray(o,o+e)),s=a.lastIndexOf(i);if(-1===s)r+=a;else{var c=r+a.substr(0,s);n=n.concat(c.split(i)),r=s===a.length-i.length?"":a.substr(s+i.length)}}return""!==r&&n.push(r),n}(new Uint8Array(t,0,1e3)),i=this.parseHeaderLines(e),r=this.volume.header,n=i.headerByteCount,o=r.nx*r.ny*r.nz,a=new DataView(t),s=new Float32Array(o),c=0;c<o;++c)s[c]=a.getFloat64(8*c+n,!0);this.volume.setData(s,r.nz,r.ny,r.nx),de.Debug&&Bp.timeEnd("DxbinParser._parse "+this.name)},Object.defineProperties(e.prototype,i),e}(WM);Vp.add("dxbin",XM);var qM=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e;var i={type:{configurable:!0},isBinary:{configurable:!0}};return i.type.get=function(){return"mrc"},i.isBinary.get=function(){return!0},e.prototype._parse=function(){de.Debug&&Bp.time("MrcParser._parse "+this.name);var t,e=this.volume,i={},r=xl(this.streamer.data),n=new Int32Array(r,0,56),o=new Float32Array(r,0,56),a=new DataView(r);if(i.MAP=String.fromCharCode(a.getUint8(208),a.getUint8(209),a.getUint8(210),a.getUint8(211)),i.MACHST=[a.getUint8(212),a.getUint8(213)],17===i.MACHST[0]&&17===i.MACHST[1])for(var s=r.byteLength,c=0;c<s;c+=4)a.setFloat32(c,a.getFloat32(c),!0);if(i.NX=n[0],i.NY=n[1],i.NZ=n[2],i.MODE=n[3],i.NXSTART=n[4],i.NYSTART=n[5],i.NZSTART=n[6],i.MX=n[7],i.MY=n[8],i.MZ=n[9],i.xlen=o[10]*this.voxelSize,i.ylen=o[11]*this.voxelSize,i.zlen=o[12]*this.voxelSize,i.alpha=o[13],i.beta=o[14],i.gamma=o[15],i.MAPC=n[16],i.MAPR=n[17],i.MAPS=n[18],i.DMIN=o[19],i.DMAX=o[20],i.DMEAN=o[21],i.ISPG=n[22],i.NSYMBT=n[23],i.LSKFLG=n[24],i.originX=o[49],i.originY=o[50],i.originZ=o[51],i.ARMS=o[54],2===(e.header=i).MODE)t=new Float32Array(r,1024+i.NSYMBT,i.NX*i.NY*i.NZ);else if(0===i.MODE){if(t=new Float32Array(new Int8Array(r,1024+i.NSYMBT,i.NX*i.NY*i.NZ)),-128===n[39]&&127===n[40])for(var u=(i.DMAX-i.DMIN)/255,h=.5*(i.DMIN+i.DMAX+u),l=0,p=t.length;l<p;++l)t[l]=u*t[l]+h}else Bp.error("MrcParser unknown mode",i.MODE);e.setData(t,i.NX,i.NY,i.NZ),0!==i.ARMS&&e.setStats(i.DMIN,i.DMAX,i.DMEAN,i.ARMS),de.Debug&&Bp.timeEnd("MrcParser._parse "+this.name)},e.prototype.getMatrix=function(){var t=this.volume.header,e=[t.xlen,0,0],i=[t.ylen*Math.cos(Math.PI/180*t.gamma),t.ylen*Math.sin(Math.PI/180*t.gamma),0],r=[t.zlen*Math.cos(Math.PI/180*t.beta),t.zlen*(Math.cos(Math.PI/180*t.alpha)-Math.cos(Math.PI/180*t.gamma)*Math.cos(Math.PI/180*t.beta))/Math.sin(Math.PI/180*t.gamma),0];r[2]=Math.sqrt(t.zlen*t.zlen*Math.sin(Math.PI/180*t.beta)*Math.sin(Math.PI/180*t.beta)-r[1]*r[1]);var n=[0,e,i,r],o=[0,t.MX,t.MY,t.MZ],a=[0,t.MAPC,t.MAPR,t.MAPS],s=new Ke;return s.set(n[a[1]][0]/o[a[1]],n[a[2]][0]/o[a[2]],n[a[3]][0]/o[a[3]],0,n[a[1]][1]/o[a[1]],n[a[2]][1]/o[a[2]],n[a[3]][1]/o[a[3]],0,n[a[1]][2]/o[a[1]],n[a[2]][2]/o[a[2]],n[a[3]][2]/o[a[3]],0,0,0,0,1),s.setPosition(new Qe(t.originX,t.originY,t.originZ)),s.multiply((new Ke).makeTranslation(t.NXSTART,t.NYSTART,t.NZSTART)),s},Object.defineProperties(e.prototype,i),e}(zM);Vp.add("mrc",qM),Vp.add("ccp4",qM),Vp.add("map",qM);var YM=/\s+/;function ZM(t){return t.trim().split(YM).map(parseFloat)}var KM=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e;var i={type:{configurable:!0}};return i.type.get=function(){return"xplor"},e.prototype._parse=function(){de.Debug&&Bp.time("XplorParser._parse "+this.name);var t,e=this.volume,i=this.streamer.peekLines(8),c={},u=(t=i[2].startsWith("REMARKS")?parseInt(i[1].substring(0,8))+2:5)+3,r=ZM(i[t]);c.NA=r[0],c.AMIN=r[1],c.AMAX=r[2],c.NB=r[3],c.BMIN=r[4],c.BMAX=r[5],c.NC=r[6],c.CMIN=r[7],c.CMAX=r[8];var n=ZM(i[t+1]);c.a=n[0]*this.voxelSize,c.b=n[1]*this.voxelSize,c.c=n[2]*this.voxelSize,c.alpha=n[3],c.beta=n[4],c.gamma=n[5];var o=c.AMAX-c.AMIN+1,a=c.BMAX-c.BMIN+1,s=c.CMAX-c.CMIN+1,h=o*a*s,l=new Float32Array(h),p=1+o*a/6,d=0,f=0;this.streamer.eachChunkOfLines(function(t){!function(t,e,i){for(var r=t;r<e;++r){var n=i[r];if(u<=f&&(f-u)%p!=0&&d<h)for(var o=0;o<6;++o)l[d]=parseFloat(n.substr(12*o,12)),++d;else if(d===h){var a=n.trim();if(a&&"-9999"!==a){var s=ZM(n);c.RAVE=s[0],c.RSIGMA=s[1]}}++f}}(0,t.length,t)}),e.header=c,e.setData(l,o,a,s),0!==c.RAVE&&1!==c.RSIGMA&&e.setStats(void 0,void 0,c.RAVE,c.RSIGMA),de.Debug&&Bp.timeEnd("XplorParser._parse "+this.name)},e.prototype.getMatrix=function(){var t=this.volume.header,e=[t.a,0,0],i=[t.b*Math.cos(Math.PI/180*t.gamma),t.b*Math.sin(Math.PI/180*t.gamma),0],r=[t.c*Math.cos(Math.PI/180*t.beta),t.c*(Math.cos(Math.PI/180*t.alpha)-Math.cos(Math.PI/180*t.gamma)*Math.cos(Math.PI/180*t.beta))/Math.sin(Math.PI/180*t.gamma),0];r[2]=Math.sqrt(t.c*t.c*Math.sin(Math.PI/180*t.beta)*Math.sin(Math.PI/180*t.beta)-r[1]*r[1]);var n=[0,e,i,r],o=[0,t.NA,t.NB,t.NC],a=[0,1,2,3],s=new Ke;return s.set(n[a[1]][0]/o[a[1]],n[a[2]][0]/o[a[2]],n[a[3]][0]/o[a[3]],0,n[a[1]][1]/o[a[1]],n[a[2]][1]/o[a[2]],n[a[3]][1]/o[a[3]],0,n[a[1]][2]/o[a[1]],n[a[2]][2]/o[a[2]],n[a[3]][2]/o[a[3]],0,0,0,0,1),s.multiply((new Ke).makeTranslation(t.AMIN,t.BMIN,t.CMIN)),s},Object.defineProperties(e.prototype,i),e}(zM);function JM(t,e,i){var r,n,o;t/=360,e/=100,i/=100;var a=Math.floor(6*t),s=6*t-a,c=i*(1-e),u=i*(1-s*e),h=i*(1-(1-s)*e);switch(a%6){case 0:r=i,n=h,o=c;break;case 1:r=u,n=i,o=c;break;case 2:r=c,n=i,o=h;break;case 3:r=c,n=u,o=i;break;case 4:r=h,n=c,o=i;break;case 5:r=i,n=c,o=u}return[r,n,o]}Vp.add("xplor",KM),Vp.add("cns",KM);var QM={red:JM(0,100,100),orange:JM(20,100,100),gold:JM(40,100,100),yellow:JM(60,100,100),lime:JM(80,100,100),green:JM(120,80,100),sea:JM(150,100,100),cyan:JM(180,100,85),sky:JM(210,75,95),blue:JM(240,70,100),purple:JM(275,75,100),magenta:JM(300,95,100),hotpink:JM(335,100,100),pink:JM(350,55,100),peach:JM(25,75,100),lilac:JM(275,55,100),pinktint:JM(340,30,100),peachtint:JM(25,50,100),yellowtint:JM(60,50,100),greentint:JM(135,40,100),bluetint:JM(220,40,100),lilactint:JM(275,35,100),white:JM(0,0,100),gray:JM(0,0,50),brown:JM(20,45,75),deadwhite:[1,1,1],deadblack:[0,0,0],invisible:[0,0,0]},tP=/[\s,]+/,eP=/[^{}\s]*{[^{}]+}|[^{}\s]+/g,iP=/^{+|}+$/g,rP=/^['"]+|['"]+$/g,nP=/\s*=\s*/g;function oP(t){for(var e,i,r,n=[],o=(t=t.replace(nP,"=")).match(eP),a=1;a<o.length;++a){var s=o[a];if("{"===s[0])e=s.substring(1,s.length-1);else{var c=s.split("=");2===c.length&&("color"===c[0]?i=QM[c[1]]:"width"===c[0]?r=parseInt(c[1]):"master"===c[0]&&n.push(c[1].replace(iP,"")))}}return{listName:e,listColor:i,listMasters:n,listWidth:r}}function aP(t){for(var e,i,r,n=(t=t.trim()).indexOf("{"),o=t.indexOf("}"),a=t.substr(o+1).split(tP),s=t.substr(n+1,o-1),c=[parseFloat(a[a.length-3]),parseFloat(a[a.length-2]),parseFloat(a[a.length-1])],u=4;u<=a.length;u++){var h=a[a.length-u];h in QM&&(e=QM[a[a.length-u]]),h.startsWith("width")&&(i=parseInt(h.substring(5))),h.startsWith("r=")&&(r=parseFloat(h.split("=")[1]))}return{label:s,position:c,color:e,radius:r,width:i}}function sP(t){var e=t.indexOf("{"),i=t.indexOf("}");return t.substring(-1!==e?e+1:0,-1!==i?i:void 0).trim()}function cP(t){for(var e,i={},r=(t=t.replace(nP,"=")).match(eP),n=1;n<r.length;++n){var o=r[n];if("{"===o[0])e=o.substring(1,o.length-1);else{var a=o.split("=");2===a.length?i[a[0]]=a[1].replace(iP,""):i[a[0]]=!0}}return[e,i]}var uP=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e;var i={type:{configurable:!0},__objName:{configurable:!0}};return i.type.get=function(){return"kin"},i.__objName.get=function(){return"kinemage"},e.prototype._parse=function(){de.Debug&&Bp.time("KinParser._parse "+this.name);var ut={kinemage:void 0,onewidth:void 0,"1viewid":void 0,pdbfile:void 0,text:[],caption:[],groupDict:{},subgroupDict:{},masterDict:{},pointmasterDict:{},dotLists:[],vectorLists:[],ballLists:[],ribbonLists:[]};this.kinemage=ut;var ht,lt,pt,dt,ft,mt,gt,vt,yt,bt,xt,_t,wt,St,At,Mt,Pt,Et,Ct,Tt,It,Rt,Lt,Ot=!1,Dt="",kt=!1,Bt="",Nt=!1,Ft="",zt=!1,Ut="",jt=!1,Gt=!1;if(this.streamer.eachChunkOfLines(function(t){!function(t,e,i){for(var r=t;r<e;++r){var n=i[r];if("@"===n[0]&&(Gt=jt=zt=Nt=kt=Ot=!1),n)if(n.startsWith("@dotlist")){var o=oP(n),a=o.listColor,s=o.listName,c=o.listMasters;Ot=!0,Dt="",lt=[],pt=[],dt=[],ht=a,ut.dotLists.push({name:s,masterArray:c,labelArray:lt,positionArray:pt,colorArray:dt})}else if(n.startsWith("@vectorlist")){var u=oP(n),h=u.listMasters,l=u.listName,p=u.listWidth,d=u.listColor;h&&h.forEach(function(t){ut.masterDict[t]||(ut.masterDict[t]={indent:!1,visible:!1})}),kt=!0,Bt="",mt=ft=null,yt=[],bt=[],xt=[],_t=[],wt=[],St=[],gt=d,vt=[],p&&vt.push(p),ut.vectorLists.push({name:l,masterArray:h,label1Array:yt,label2Array:bt,position1Array:xt,position2Array:_t,color1Array:wt,color2Array:St,width:vt})}else if(n.startsWith("@balllist")){var f=oP(n),m=f.listName,g=f.listColor,v=f.listMasters;v&&v.forEach(function(t){ut.masterDict[t]||(ut.masterDict[t]={indent:!1,visible:!1})}),Nt=!0,Ft="",Pt=[],At=[],Et=[],Ct=[],Mt=g,ut.ballLists.push({name:m,masterArray:v,labelArray:Pt,radiusArray:At,positionArray:Et,colorArray:Ct})}else if(n.startsWith("@ribbonlist")){var y=oP(n),b=y.listMasters,x=y.listName,_=y.listColor;b&&b.forEach(function(t){ut.masterDict[t]||(ut.masterDict[t]={indent:!1,visible:!1})}),zt=!0,Ut="",It=[],Rt=[],Lt=[],Tt=_,ut.ribbonLists.push({name:x,masterArray:b,labelArray:It,positionArray:Rt,colorArray:Lt})}else if(n.startsWith("@text"))jt=!0,ut.text.push(n.substr(5));else if(n.startsWith("@caption"))Gt=!0,ut.caption.push(n.substr(8));else if(Ot){var w=aP(n),S=w.label,A=w.color,M=w.position;'"'===S?S=Dt:Dt=S,void 0===A&&(A=ht),lt.push(S),pt.push.apply(pt,M),dt.push.apply(dt,A)}else if(kt){var P=n.indexOf("{"),E=n.indexOf("{",P+1),C=void 0,T=void 0;-1===E?T=C=n:(C=n.substr(0,E),T=n.substr(E));var I=aP(C),R=I.label,L=I.color,O=I.width,D=I.position;if('"'===R?R=Bt:Bt=R,void 0===L&&(L=gt),O&&vt.push(O),yt.push(R),xt.push.apply(xt,D),wt.push.apply(wt,L),-1===E&&ft)bt.push(Bt),_t.push.apply(_t,ft),St.push.apply(St,mt),Bt=R,ft=D,mt=L;else{var k=aP(T),B=k.label,N=k.color,F=k.position;'"'===B?B=Bt:Bt=B,void 0===N&&(N=gt),bt.push(B),_t.push.apply(_t,F),St.push.apply(St,N),ft=F,mt=N}}else if(Nt){var z=aP(n),U=z.label,j=z.radius,G=z.color,V=z.position;'"'===U?U=Ft:Ft=U,void 0===j&&(j=1),void 0===G&&(G=Mt),Pt.push(U),At.push(j),Et.push.apply(Et,V),Ct.push.apply(Ct,G)}else if(zt){var H=aP(n),$=H.label,W=H.color,X=H.position;'"'===$?$=Ut:Ut=$,void 0===W&&(W=Tt),It.push($),Rt.push.apply(Rt,X),Lt.push.apply(Lt,W)}else if(jt)ut.text.push(n);else if(Gt)ut.caption.push(n);else if(n.startsWith("@kinemage"))ut.kinemage=parseInt(n.substr(9).trim());else if(n.startsWith("@onewidth"))ut.onewidth=!0;else if(n.startsWith("@1viewid"))ut["1viewid"]=sP(n);else if(n.startsWith("@pdbfile"))ut.pdbfile=sP(n);else if(n.startsWith("@group")){var q=cP(n),Y=q[0],Z=q[1];for(var K in ut.groupDict[Y]||(ut.groupDict[Y]={dominant:!1,animate:!1}),Z)ut.groupDict[Y][K]=Z[K]}else if(n.startsWith("@subgroup")){var J=cP(n),Q=J[0],tt=J[1];for(var et in ut.subgroupDict[Q]||(ut.subgroupDict[Q]={dominant:!1,animate:!1,master:void 0}),tt)ut.subgroupDict[Q][et]=tt[et]}else if(n.startsWith("@master")){var it=sP(n),rt=-1===(ct=(st=n).indexOf("}"))?void 0:st.substr(ct+1).trim();ut.masterDict[it]||(ut.masterDict[it]={indent:!1,visible:!1}),"on"===rt?ut.masterDict[it].visible=!0:"off"===rt?ut.masterDict[it].visible=!1:"indent"===rt&&(ut.masterDict[it].indent=!0)}else if(n.startsWith("@pointmaster")){var nt=cP(n),ot=nt[0],at=nt[1];ut.pointmasterDict[ot]={id:Object.keys(at)[0].replace(rP,"")}}else console.log(n);else zt=Nt=kt=Ot=!1}var st,ct}(0,t.length,t)}),ut.text=ut.text.join("\n").trim(),ut.caption=ut.caption.join("\n").trim(),ut.ribbonLists){var e=[];ut.ribbonLists.forEach(function(t){e.push(function(t){for(var e=t.labelArray,i=t.positionArray,r=t.colorArray,n=[],o=0;o<3*(e.length-2);++o)n[o]=e[o-2*Math.floor(o/3)];for(var a=[],s=0;s<9*(i.length/3-2);++s)a[s]=i[s-6*Math.floor(s/9)];for(var c=[],u=0;u<9*(r.length/3-2);++u)c[u]=r[u-6*Math.floor(u/9)];return{name:t.name,masterArray:t.masterArray,labelArray:n,positionArray:a,colorArray:c}}(t))}),ut.ribbonLists=e}de.Debug&&Bp.timeEnd("KinParser._parse "+this.name)},Object.defineProperties(e.prototype,i),e}(sA);Vp.add("kin",uP);var hP=function(i){function t(t,e){i.call(this,t,e),this.loader=this.getLoader(),this.surface=new Vv(this.name,this.path)}i&&(t.__proto__=i),(t.prototype=Object.create(i&&i.prototype)).constructor=t;var e={type:{configurable:!0},__objName:{configurable:!0}};return e.type.get=function(){return"surface"},e.__objName.get=function(){return"surface"},t.prototype._parse=function(){var t=this.loader.parse(this.streamer.asText());this.surface.fromGeometry(t)},Object.defineProperties(t.prototype,e),t}(sA);function lP(){this.regexp={vertex_pattern:/^v\s+([\d.+\-eE]+)\s+([\d.+\-eE]+)\s+([\d.+\-eE]+)/,normal_pattern:/^vn\s+([\d.+\-eE]+)\s+([\d.+\-eE]+)\s+([\d.+\-eE]+)/,uv_pattern:/^vt\s+([\d.+\-eE]+)\s+([\d.+\-eE]+)/,face_vertex:/^f\s+(-?\d+)\s+(-?\d+)\s+(-?\d+)(?:\s+(-?\d+))?/,face_vertex_uv:/^f\s+(-?\d+)\/(-?\d+)\s+(-?\d+)\/(-?\d+)\s+(-?\d+)\/(-?\d+)(?:\s+(-?\d+)\/(-?\d+))?/,face_vertex_uv_normal:/^f\s+(-?\d+)\/(-?\d+)\/(-?\d+)\s+(-?\d+)\/(-?\d+)\/(-?\d+)\s+(-?\d+)\/(-?\d+)\/(-?\d+)(?:\s+(-?\d+)\/(-?\d+)\/(-?\d+))?/,face_vertex_normal:/^f\s+(-?\d+)\/\/(-?\d+)\s+(-?\d+)\/\/(-?\d+)\s+(-?\d+)\/\/(-?\d+)(?:\s+(-?\d+)\/\/(-?\d+))?/,object_pattern:/^[og]\s*(.+)?/,smoothing_pattern:/^s\s+(\d+|on|off)/,material_library_pattern:/^mtllib /,material_use_pattern:/^usemtl /}}lP.prototype={constructor:lP,setPath:function(t){this.path=t},_createParserState:function(){var t={objects:[],object:{},vertices:[],normals:[],startObject:function(t,e){if(this.object&&!1===this.object.fromDeclaration)return this.object.name=t,void(this.object.fromDeclaration=!1!==e);this.object={name:t||"",geometry:{vertices:[],normals:[]},fromDeclaration:!1!==e},this.objects.push(this.object)},parseVertexIndex:function(t,e){var i=parseInt(t,10);return 3*(0<=i?i-1:i+e/3)},parseNormalIndex:function(t,e){var i=parseInt(t,10);return 3*(0<=i?i-1:i+e/3)},addVertex:function(t,e,i){var r=this.vertices,n=this.object.geometry.vertices;n.push(r[t+0]),n.push(r[t+1]),n.push(r[t+2]),n.push(r[e+0]),n.push(r[e+1]),n.push(r[e+2]),n.push(r[i+0]),n.push(r[i+1]),n.push(r[i+2])},addVertexLine:function(t){var e=this.vertices,i=this.object.geometry.vertices;i.push(e[t+0]),i.push(e[t+1]),i.push(e[t+2])},addNormal:function(t,e,i){var r=this.normals,n=this.object.geometry.normals;n.push(r[t+0]),n.push(r[t+1]),n.push(r[t+2]),n.push(r[e+0]),n.push(r[e+1]),n.push(r[e+2]),n.push(r[i+0]),n.push(r[i+1]),n.push(r[i+2])},addFace:function(t,e,i,r,n,o,a,s){var c,u=this.vertices.length,h=this.parseVertexIndex(t,u),l=this.parseVertexIndex(e,u),p=this.parseVertexIndex(i,u);if(void 0===r?this.addVertex(h,l,p):(c=this.parseVertexIndex(r,u),this.addVertex(h,l,c),this.addVertex(l,p,c)),void 0!==n){var d=this.normals.length;h=this.parseNormalIndex(n,d),l=n===o?h:this.parseNormalIndex(o,d),p=n===a?h:this.parseNormalIndex(a,d),void 0===r?this.addNormal(h,l,p):(c=this.parseNormalIndex(s,d),this.addNormal(h,l,c),this.addNormal(l,p,c))}},addLineGeometry:function(t){this.object.geometry.type="Line";for(var e=this.vertices.length,i=0,r=t.length;i<r;i++)this.addVertexLine(this.parseVertexIndex(t[i],e))}};return t.startObject("",!1),t},parse:function(t){var e,i,r=this,n=this._createParserState();-1!==t.indexOf("\r\n")&&(t=t.replace(/\r\n/g,"\n")),-1!==t.indexOf("\\\n")&&(t=t.replace(/\\\n/g,""));var o=t.split("\n"),a="",s="",c="",u=[],h="function"==typeof"".trimLeft;for(e=0,i=o.length;e<i;e++)if(a=o[e],0!==(a=h?a.trimLeft():a.trim()).length&&"#"!==(s=a.charAt(0)))if("v"===s){if(" "===(c=a.charAt(1))&&null!==(u=r.regexp.vertex_pattern.exec(a)))n.vertices.push(parseFloat(u[1]),parseFloat(u[2]),parseFloat(u[3]));else if("n"===c&&null!==(u=r.regexp.normal_pattern.exec(a)))n.normals.push(parseFloat(u[1]),parseFloat(u[2]),parseFloat(u[3]));else if("t"!==c||null===r.regexp.uv_pattern.exec(a))throw new Error("Unexpected vertex/normal/uv line: '"+a+"'")}else if("f"===s)if(null!==(u=r.regexp.face_vertex_uv_normal.exec(a)))n.addFace(u[1],u[4],u[7],u[10],u[3],u[6],u[9],u[12]);else if(null!==r.regexp.face_vertex_uv.exec(a));else if(null!==(u=r.regexp.face_vertex_normal.exec(a)))n.addFace(u[1],u[3],u[5],u[7],u[2],u[4],u[6],u[8]);else{if(null===(u=r.regexp.face_vertex.exec(a)))throw new Error("Unexpected face line: '"+a+"'");n.addFace(u[1],u[2],u[3],u[4])}else if("l"===s){var l=a.substring(1).trim().split(" "),p=[],d=[];if(-1===a.indexOf("/"))p=l;else for(var f=0,m=l.length;f<m;f++){var g=l[f].split("/");""!==g[0]&&p.push(g[0]),""!==g[1]&&d.push(g[1])}n.addLineGeometry(p,d)}else if(null!==(u=r.regexp.object_pattern.exec(a))){var v=u[0].substr(1).trim();n.startObject(v)}else if(r.regexp.material_use_pattern.test(a));else if(r.regexp.material_library_pattern.test(a));else if(null===r.regexp.smoothing_pattern.exec(a)){if("\0"===a)continue;throw new Error("Unexpected line: '"+a+"'")}var y=[];for(e=0,i=n.objects.length;e<i;e++){var b=n.objects[e].geometry;if(0!==b.vertices.length){var x=new jr;x.addAttribute("position",new yr(new Float32Array(b.vertices),3)),0<b.normals.length?x.addAttribute("normal",new yr(new Float32Array(b.normals),3)):x.computeVertexNormals(),y.push(x)}}return y}};var pP=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e;var i={type:{configurable:!0}};return i.type.get=function(){return"obj"},e.prototype.getLoader=function(){return new lP},Object.defineProperties(e.prototype,i),e}(hP);function dP(){this.propertyNameMapping={}}Vp.add("obj",pP),dP.prototype={constructor:dP,setPropertyNameMapping:function(t){this.propertyNameMapping=t},bin2str:function(t){for(var e=new Uint8Array(t),i="",r=0;r<t.byteLength;r++)i+=String.fromCharCode(e[r]);return i},isASCII:function(t){return"ascii"===this.parseHeader(this.bin2str(t)).format},parse:function(t){return t instanceof ArrayBuffer?this.isASCII(t)?this.parseASCII(this.bin2str(t)):this.parseBinary(t):this.parseASCII(t)},parseHeader:function(t){var e="",i=0,r=/ply([\s\S]*)end_header\s/.exec(t);null!==r&&(e=r[1],i=r[0].length);var n,o,a,s,c,u,h={comments:[],elements:[],headerLength:i},l=e.split("\n");for(var p=0;p<l.length;p++){var d=l[p];if(""!==(d=d.trim()))switch(o=(a=d.split(/\s+/)).shift(),d=a.join(" "),o){case"format":h.format=a[0],h.version=a[1];break;case"comment":h.comments.push(d);break;case"element":void 0!==n&&h.elements.push(n),(n={}).name=a[0],n.count=parseInt(a[1]),n.properties=[];break;case"property":n.properties.push((s=a,c=this.propertyNameMapping,u=void 0,"list"===(u={type:s[0]}).type?(u.name=s[3],u.countType=s[1],u.itemType=s[2]):u.name=s[1],u.name in c&&(u.name=c[u.name]),u));break;default:console.log("unhandled",o,a)}}return void 0!==n&&h.elements.push(n),h},parseASCIINumber:function(t,e){switch(e){case"char":case"uchar":case"short":case"ushort":case"int":case"uint":case"int8":case"uint8":case"int16":case"uint16":case"int32":case"uint32":return parseInt(t);case"float":case"double":case"float32":case"float64":return parseFloat(t)}},parseASCIIElement:function(t,e){for(var i=e.split(/\s+/),r={},n=0;n<t.length;n++)if("list"===t[n].type){for(var o=[],a=this.parseASCIINumber(i.shift(),t[n].countType),s=0;s<a;s++)o.push(this.parseASCIINumber(i.shift(),t[n].itemType));r[t[n].name]=o}else r[t[n].name]=this.parseASCIINumber(i.shift(),t[n].type);return r},parseASCII:function(t){var e,i=new vr,r=this.parseHeader(t),n="";null!==(e=/end_header\s([\s\S]*)$/.exec(t))&&(n=e[1]);var o=n.split("\n"),a=0,s=0;i.useColor=!1;for(var c=0;c<o.length;c++){var u=o[c];if(""!==(u=u.trim())){s>=r.elements[a].count&&(a++,s=0);var h=this.parseASCIIElement(r.elements[a].properties,u);this.handleElement(i,r.elements[a].name,h),s++}}return this.postProcess(i)},postProcess:function(t){if(t.useColor){for(var e=0;e<t.faces.length;e++)t.faces[e].vertexColors=[t.colors[t.faces[e].a],t.colors[t.faces[e].b],t.colors[t.faces[e].c]];t.elementsNeedUpdate=!0}return t.computeBoundingSphere(),t},handleElement:function(t,e,i){if("vertex"===e){if(t.vertices.push(new Qe(i.x,i.y,i.z)),"red"in i&&"green"in i&&"blue"in i){t.useColor=!0;var r=new Li;r.setRGB(i.red/255,i.green/255,i.blue/255),t.colors.push(r)}}else if("face"===e){var n=i.vertex_indices;3===n.length?t.faces.push(new cr(n[0],n[1],n[2])):4===n.length&&t.faces.push(new cr(n[0],n[1],n[3]),new cr(n[1],n[2],n[3]))}},binaryRead:function(t,e,i,r){switch(i){case"int8":case"char":return[t.getInt8(e),1];case"uint8":case"uchar":return[t.getUint8(e),1];case"int16":case"short":return[t.getInt16(e,r),2];case"uint16":case"ushort":return[t.getUint16(e,r),2];case"int32":case"int":return[t.getInt32(e,r),4];case"uint32":case"uint":return[t.getUint32(e,r),4];case"float32":case"float":return[t.getFloat32(e,r),4];case"float64":case"double":return[t.getFloat64(e,r),8]}},binaryReadElement:function(t,e,i,r){for(var n,o={},a=0,s=0;s<i.length;s++)if("list"===i[s].type){var c=[],u=(n=this.binaryRead(t,e+a,i[s].countType,r))[0];a+=n[1];for(var h=0;h<u;h++)n=this.binaryRead(t,e+a,i[s].itemType,r),c.push(n[0]),a+=n[1];o[i[s].name]=c}else n=this.binaryRead(t,e+a,i[s].type,r),o[i[s].name]=n[0],a+=n[1];return[o,a]},parseBinary:function(t){for(var e,i=new vr,r=this.parseHeader(this.bin2str(t)),n="binary_little_endian"===r.format,o=new DataView(t,r.headerLength),a=0,s=0;s<r.elements.length;s++)for(var c=0;c<r.elements[s].count;c++){a+=(e=this.binaryReadElement(o,a,r.elements[s].properties,n))[1];var u=e[0];this.handleElement(i,r.elements[s].name,u)}return this.postProcess(i)}};var fP=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),(e.prototype=Object.create(t&&t.prototype)).constructor=e;var i={type:{configurable:!0}};return i.type.get=function(){return"ply"},e.prototype.getLoader=function(){return new dP},Object.defineProperties(e.prototype,i),e}(hP);Vp.add("ply",fP);var mP=function(r){function t(t,e){var i=e||{};r.call(this,t,i),this.delimiter=al(i.delimiter,","),this.comment=al(i.comment,"#"),this.columnNames=al(i.columnNames,!1),this.table={name:this.name,path:this.path,columnNames:[],data:[]}}r&&(t.__proto__=r),(t.prototype=Object.create(r&&r.prototype)).constructor=t;var e={type:{configurable:!0},__objName:{configurable:!0}};return e.type.get=function(){return"csv"},e.__objName.get=function(){return"table"},t.prototype._parse=function(){var o=this,a=this.table.data,s=new RegExp("\\s*"+this.delimiter+"\\s*"),c=0;this.streamer.eachChunkOfLines(function(t){for(var e=t.length,i=0;i<e;++i){var r=t[i].trim();if(!r.startsWith(o.comment)){var n=r.split(s);0===c?o.table.columnNames=n:r&&a.push(n),++c}}})},Object.defineProperties(t.prototype,e),t}(sA);Vp.add("csv",mP);var gP=function(r){function t(t,e){var i=e||{};r.call(this,t,i),this.string=al(i.string,!1),this.json={name:this.name,path:this.path,data:{}}}r&&(t.__proto__=r),(t.prototype=Object.create(r&&r.prototype)).constructor=t;var e={type:{configurable:!0},__objName:{configurable:!0},isJson:{configurable:!0}};return e.type.get=function(){return"json"},e.__objName.get=function(){return"json"},e.isJson.get=function(){return!0},t.prototype._parse=function(){this.streamer.isBinary()||this.string?this.json.data=JSON.parse(this.streamer.asText()):this.json.data=this.streamer.data},Object.defineProperties(t.prototype,e),t}(sA);Vp.add("json",gP);var vP=function(r){function t(t,e){var i=e||{};r.call(this,t,i),this.msgpack={name:this.name,path:this.path,data:void 0}}r&&(t.__proto__=r),(t.prototype=Object.create(r&&r.prototype)).constructor=t;var e={type:{configurable:!0},__objName:{configurable:!0},isBinary:{configurable:!0}};return e.type.get=function(){return"msgpack"},e.__objName.get=function(){return"msgpack"},e.isBinary.get=function(){return!0},t.prototype._parse=function(){de.Debug&&Bp.time("MsgpackParser._parse "+this.name),this.msgpack.data=HA(this.streamer.data),de.Debug&&Bp.timeEnd("MsgpackParser._parse "+this.name)},Object.defineProperties(t.prototype,e),t}(sA);Vp.add("msgpack",vP);var yP=function(r){function t(t,e){var i=e||{};r.call(this,t,i),this.netcdf={name:this.name,path:this.path,data:void 0}}r&&(t.__proto__=r),(t.prototype=Object.create(r&&r.prototype)).constructor=t;var e={type:{configurable:!0},__objName:{configurable:!0},isBinary:{configurable:!0}};return e.type.get=function(){return"netcdf"},e.__objName.get=function(){return"netcdf"},e.isBinary.get=function(){return!0},t.prototype._parse=function(){de.Debug&&Bp.time("NetcdfParser._parse "+this.name),this.netcdf.data=new EM(this.streamer.data),de.Debug&&Bp.timeEnd("NetcdfParser._parse "+this.name)},Object.defineProperties(t.prototype,e),t}(sA);Vp.add("netcdf",yP);var bP=function(i){function t(t,e){i.call(this,t,e),this.text={name:this.name,path:this.path,data:""}}i&&(t.__proto__=i),(t.prototype=Object.create(i&&i.prototype)).constructor=t;var e={type:{configurable:!0},__objName:{configurable:!0}};return e.type.get=function(){return"text"},e.__objName.get=function(){return"text"},t.prototype._parse=function(){this.text.data=this.streamer.asText()},Object.defineProperties(t.prototype,e),t}(sA);Vp.add("txt",bP),Vp.add("text",bP);var xP=/^['"]|['"]$/g,_P=/^<([\w-:.]+)\s*/,wP=/^([^<]*)/,SP=/([\w:-]+)\s*=\s*("[^"]*"|'[^']*'|\w+)\s*/;function AP(i){return i=i.trim().replace(/<!--[\s\S]*?-->/g,""),{declaration:function(){if(s(/^<\?xml\s*/)){for(var t={attributes:{}};!c()&&!u("?>");){var e=a();if(!e)return t;t.attributes[e.name]=e.value}return s(/\?>\s*/),t}}(),root:function t(){var e=s(_P);if(e){for(var i,r,n={name:e[1],attributes:{},children:[]};!(c()||u(">")||u("?>")||u("/>"));){var o=a();if(!o)return n;n.attributes[o.name]=o.value}if(s(/^\s*\/>\s*/))return n;for(s(/\??>\s*/),n.content=(i=s(wP))?i[1]:"";r=t();)n.children.push(r);return s(/^<\/[\w-:.]+>\s*/),n}}()};function a(){var t,e=s(SP);if(e)return{name:e[1],value:(t=e[2],t.replace(xP,""))}}function s(t){var e=i.match(t);if(e)return i=i.slice(e[0].length),e}function c(){return 0===i.length}function u(t){return 0===i.indexOf(t)}}var MP=function(r){function t(t,e){var i=e||{};r.call(this,t,i),this.useDomParser=al(i.useDomParser,!1),this.xml={name:this.name,path:this.path,data:{}}}r&&(t.__proto__=r),(t.prototype=Object.create(r&&r.prototype)).constructor=t;var e={type:{configurable:!0},__objName:{configurable:!0},isXml:{configurable:!0}};return e.type.get=function(){return"xml"},e.__objName.get=function(){return"xml"},e.isXml.get=function(){return!0},t.prototype.__xmlParser=function(t){return AP(t)},t.prototype.__domParser=function(t){return(new window.DOMParser).parseFromString(t,"text/xml")},t.prototype._parse=function(){de.Debug&&Bp.time("XmlParser._parse "+this.name),this.useDomParser?this.streamer.data instanceof window.Document?this.xml.data=this.streamer.data:this.xml.data=this.__domParser(this.streamer.asText()):this.xml.data=this.__xmlParser(this.streamer.asText()),de.Debug&&Bp.timeEnd("XmlParser._parse "+this.name)},Object.defineProperties(t.prototype,e),t}(sA);function PP(t,e){var i=t.getNamedItem(e);return null!==i?i.value:""}function EP(t,e,i){void 0===i&&(i=!1);var r=PP(t,"icode"),n=PP(t,"chain"),o=PP(t,"altcode"),a=PP(t,"resnum");return r.trim()&&(a+="^"+r),n.trim()&&(a+=":"+n),e&&(a+="."+e),i&&o.trim()&&(a+="%"+o),a+="/"+(parseInt(PP(t,"model"))-1)}function CP(t,e,i){void 0===t[e]?t[e]=i:t[e]|=i}function TP(t,e){return null!==t&&t.value===e}function IP(t,e,i){for(var r=0,n=e.getElementsByTagName("clash"),o=0,a=n.length;o<a;++o)if(t[PP(n[o].attributes,"cid")]){r+=1;break}return 0<e.getElementsByTagName("angle-outlier").length&&(r+=1),0<e.getElementsByTagName("bond-outlier").length&&(r+=1),0<e.getElementsByTagName("plane-outlier").length&&(r+=1),TP(i.getNamedItem("rota"),"OUTLIER")&&(r+=1),TP(i.getNamedItem("rama"),"OUTLIER")&&(r+=1),TP(i.getNamedItem("RNApucker"),"outlier")&&(r+=1),r}Vp.add("xml",MP);var RP=function(t,e){this.name=t,this.rsrzDict={},this.rsccDict={},this.clashDict={},this.clashArray=[],this.geoDict={},this.geoAtomDict={},this.atomDict={},this.clashSele="NONE"},LP={type:{configurable:!0}};LP.type.get=function(){return"validation"},RP.prototype.fromXml=function(t){de.Debug&&Bp.time("Validation.fromXml");var e=this.rsrzDict,i=this.rsccDict,r=this.clashDict,n=this.clashArray,o=this.geoDict,a=this.geoAtomDict,s=this.atomDict,c=t.getElementsByTagName("ModelledSubgroup"),u={},h=[];de.Debug&&Bp.time("Validation.fromXml#clashDict");for(var l=0,p=c.length;l<p;++l){var d=c[l],f=d.attributes,m=EP(f);null!==f.getNamedItem("rsrz")&&(e[m]=parseFloat(PP(f,"rsrz"))),null!==f.getNamedItem("rscc")&&(i[m]=parseFloat(PP(f,"rscc")));var g=t.createAttribute("sele");g.value=m,f.setNamedItem(g);for(var v=d.getElementsByTagName("clash"),y=0,b=v.length;y<b;++y){var x=v[y].attributes,_=PP(x,"atom");if("H"!==bb(_)){var w=PP(x,"cid"),S=EP(f,_,!0);if(s[S]=!0,void 0===u[w])u[w]={sele1:S,res1:m};else{var A=u[w];A.res1!==m&&(A.sele2=S,A.res2=m,h.push(A.res1,m),r[w]=A,n.push(A))}}}}de.Debug&&Bp.timeEnd("Validation.fromXml#clashDict");for(var M=0,P=c.length;M<P;++M){var E=c[M],C=E.attributes,T=PP(C,"sele");if("."!==PP(C,"seq")){var I=IP(r,E,C);0<I&&(o[T]=I)}else{var R=E.getElementsByTagName("clash"),L=E.getElementsByTagName("mog-bond-outlier"),O=E.getElementsByTagName("mog-angle-outlier");if(0<L.length||0<O.length||0<R.length){var D={};a[T]=D;for(var k=0,B=R.length;k<B;++k){var N=R[k].attributes;r[PP(N,"cid")]&&CP(D,PP(N,"atom"),1)}for(var F=0,z=L.length;F<z;++F){PP(L[F].attributes,"atoms").split(",").forEach(function(t){CP(D,t,2)})}for(var U=0,j=O.length;U<j;++U){PP(O[U].attributes,"atoms").split(",").forEach(function(t){CP(D,t,4)})}}}}this.clashSele=h.length?h.join(" OR "):"NONE",de.Debug&&Bp.timeEnd("Validation.fromXml")},RP.prototype.getClashData=function(t){de.Debug&&Bp.time("Validation.getClashData");var e=t||{},i=e.structure,o=i.atomSet,r=new Li(al(e.color,"#f0027f")),a=i.getAtomProxy(),s=i.getAtomProxy(),c=new Qe,u=new Qe,h=new Qe,n=this.clashArray,l=n.length,p=new Float32Array(3*l),d=new Float32Array(3*l),f=Id(l,r.r,r.g,r.b),m=new Float32Array(l),g=new Float32Array(l);de.Debug&&Bp.time("Validation.getClashData#atomDict");var v=this.atomDict;i.eachAtom(function(t){var e,i,r,n,o,a,s=(i=(e=t).inscode,r=e.chainname,n=e.atomname,o=e.altloc,a=e.resno+"",i&&(a+="^"+i),r&&(a+=":"+r),n&&(a+="."+n),o&&(a+="%"+o),a+="/"+e.modelIndex);!0===v[s]&&(v[s]=t.index)}),de.Debug&&Bp.timeEnd("Validation.getClashData#atomDict");var y=0;return n.forEach(function(t,e){if(a.index=v[t.sele1],s.index=v[t.sele2],void 0!==a.index&&void 0!==s.index&&o.isSet(a.index,s.index)){c.subVectors(s,a).setLength(a.vdw),u.copy(a).add(c),c.subVectors(a,s).setLength(s.vdw),h.copy(s).add(c);var i=a.distanceTo(s)/2,r=Math.sqrt(a.vdw*a.vdw-i*i),n=Math.sqrt(s.vdw*s.vdw-i*i);u.toArray(p,3*y),h.toArray(d,3*y),m[y]=(r+n)/2,g[y]=e,++y}}),de.Debug&&Bp.timeEnd("Validation.getClashData"),{position1:p.subarray(0,3*y),position2:d.subarray(0,3*y),color:f.subarray(0,3*y),color2:f.subarray(0,3*y),radius:m.subarray(0,y),picking:new ev(g.subarray(0,y),this,i)}},Object.defineProperties(RP.prototype,LP);var OP=function(r){function t(t,e){var i=e||{};r.call(this,t,i),this.useDomParser=!0,this.validation=new RP(this.name,this.path)}r&&(t.__proto__=r),(t.prototype=Object.create(r&&r.prototype)).constructor=t;var e={__objName:{configurable:!0},isXml:{configurable:!0}};return e.__objName.get=function(){return"validation"},e.isXml.get=function(){return!0},t.prototype._parse=function(){r.prototype._parse.call(this),de.Debug&&Bp.time("ValidationParser._parse "+this.name),this.validation.fromXml(this.xml.data),de.Debug&&Bp.timeEnd("ValidationParser._parse "+this.name)},Object.defineProperties(t.prototype,e),t}(MP);function DP(t,e){return t.length===e?t:t.subarray?t.subarray(0,e):(t.length=e,t)}function kP(t,e,i,r,n){if(e.subarray&&t.subarray)t.set(e.subarray(i,i+r),n);else for(var o=0;o<r;o++)t[n+o]=e[i+o]}function BP(t,e,i,r){for(var n=65535&t|0,o=t>>>16&65535|0,a=0;0!==i;){for(i-=a=2e3<i?2e3:i;o=o+(n=n+e[r++]|0)|0,--a;);n%=65521,o%=65521}return n|o<<16|0}Vp.add("validation",OP);var NP=function(){for(var t,e=[],i=0;i<256;i++){t=i;for(var r=0;r<8;r++)t=1&t?3988292384^t>>>1:t>>>1;e[i]=t}return e}();function FP(t,e,i,r){var n=NP,o=r+i;t^=-1;for(var a=r;a<o;a++)t=t>>>8^n[255&(t^e[a])];return-1^t}var zP=30,UP=12;function jP(t,e){var i,r,n,o,a,s,c,u,h,l,p,d,f,m,g,v,y,b,x,_,w,S,A,M,P;i=t.state,r=t.next_in,M=t.input,n=r+(t.avail_in-5),o=t.next_out,P=t.output,a=o-(e-t.avail_out),s=o+(t.avail_out-257),c=i.dmax,u=i.wsize,h=i.whave,l=i.wnext,p=i.window,d=i.hold,f=i.bits,m=i.lencode,g=i.distcode,v=(1<<i.lenbits)-1,y=(1<<i.distbits)-1;t:do{f<15&&(d+=M[r++]<<f,f+=8,d+=M[r++]<<f,f+=8),b=m[d&v];e:for(;;){if(d>>>=x=b>>>24,f-=x,0===(x=b>>>16&255))P[o++]=65535&b;else{if(!(16&x)){if(0==(64&x)){b=m[(65535&b)+(d&(1<<x)-1)];continue e}if(32&x){i.mode=UP;break t}t.msg="invalid literal/length code",i.mode=zP;break t}_=65535&b,(x&=15)&&(f<x&&(d+=M[r++]<<f,f+=8),_+=d&(1<<x)-1,d>>>=x,f-=x),f<15&&(d+=M[r++]<<f,f+=8,d+=M[r++]<<f,f+=8),b=g[d&y];i:for(;;){if(d>>>=x=b>>>24,f-=x,!(16&(x=b>>>16&255))){if(0==(64&x)){b=g[(65535&b)+(d&(1<<x)-1)];continue i}t.msg="invalid distance code",i.mode=zP;break t}if(w=65535&b,f<(x&=15)&&(d+=M[r++]<<f,(f+=8)<x&&(d+=M[r++]<<f,f+=8)),c<(w+=d&(1<<x)-1)){t.msg="invalid distance too far back",i.mode=zP;break t}if(d>>>=x,f-=x,(x=o-a)<w){if(h<(x=w-x)&&i.sane){t.msg="invalid distance too far back",i.mode=zP;break t}if(A=p,(S=0)===l){if(S+=u-x,x<_){for(_-=x;P[o++]=p[S++],--x;);S=o-w,A=P}}else if(l<x){if(S+=u+l-x,(x-=l)<_){for(_-=x;P[o++]=p[S++],--x;);if(S=0,l<_){for(_-=x=l;P[o++]=p[S++],--x;);S=o-w,A=P}}}else if(S+=l-x,x<_){for(_-=x;P[o++]=p[S++],--x;);S=o-w,A=P}for(;2<_;)P[o++]=A[S++],P[o++]=A[S++],P[o++]=A[S++],_-=3;_&&(P[o++]=A[S++],1<_&&(P[o++]=A[S++]))}else{for(S=o-w;P[o++]=P[S++],P[o++]=P[S++],P[o++]=P[S++],2<(_-=3););_&&(P[o++]=P[S++],1<_&&(P[o++]=P[S++]))}break}}break}}while(r<n&&o<s);r-=_=f>>3,d&=(1<<(f-=_<<3))-1,t.next_in=r,t.next_out=o,t.avail_in=r<n?n-r+5:5-(r-n),t.avail_out=o<s?s-o+257:257-(o-s),i.hold=d,i.bits=f}var GP=15,VP=852,HP=592,$P=0,WP=1,XP=2,qP=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],YP=[16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78],ZP=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0],KP=[16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64];function JP(t,e,i,r,n,o,a,s){var c,u,h,l,p,d,f,m,g,v=s.bits,y=0,b=0,x=0,_=0,w=0,S=0,A=0,M=0,P=0,E=0,C=null,T=0,I=new Uint16Array(GP+1),R=new Uint16Array(GP+1),L=null,O=0;for(y=0;y<=GP;y++)I[y]=0;for(b=0;b<r;b++)I[e[i+b]]++;for(w=v,_=GP;1<=_&&0===I[_];_--);if(_<w&&(w=_),0===_)return n[o++]=20971520,n[o++]=20971520,s.bits=1,0;for(x=1;x<_&&0===I[x];x++);for(w<x&&(w=x),y=M=1;y<=GP;y++)if(M<<=1,(M-=I[y])<0)return-1;if(0<M&&(t===$P||1!==_))return-1;for(R[1]=0,y=1;y<GP;y++)R[y+1]=R[y]+I[y];for(b=0;b<r;b++)0!==e[i+b]&&(a[R[e[i+b]]++]=b);if(t===$P?(C=L=a,d=19):t===WP?(C=qP,T-=257,L=YP,O-=257,d=256):(C=ZP,L=KP,d=-1),y=x,p=o,A=b=E=0,h=-1,l=(P=1<<(S=w))-1,t===WP&&VP<P||t===XP&&HP<P)return 1;for(;;){for(f=y-A,a[b]<d?(m=0,g=a[b]):a[b]>d?(m=L[O+a[b]],g=C[T+a[b]]):(m=96,g=0),c=1<<y-A,x=u=1<<S;n[p+(E>>A)+(u-=c)]=f<<24|m<<16|g|0,0!==u;);for(c=1<<y-1;E&c;)c>>=1;if(0!==c?(E&=c-1,E+=c):E=0,b++,0==--I[y]){if(y===_)break;y=e[i+a[b]]}if(w<y&&(E&l)!==h){for(0===A&&(A=w),p+=x,M=1<<(S=y-A);S+A<_&&!((M-=I[S+A])<=0);)S++,M<<=1;if(P+=1<<S,t===WP&&VP<P||t===XP&&HP<P)return 1;n[h=E&l]=w<<24|S<<16|p-o|0}}return 0!==E&&(n[p+E]=y-A<<24|64<<16|0),s.bits=w,0}var QP=0,tE=1,eE=2,iE=4,rE=5,nE=6,oE=0,aE=1,sE=2,cE=-2,uE=-3,hE=-4,lE=-5,pE=8,dE=1,fE=2,mE=3,gE=4,vE=5,yE=6,bE=7,xE=8,_E=9,wE=10,SE=11,AE=12,ME=13,PE=14,EE=15,CE=16,TE=17,IE=18,RE=19,LE=20,OE=21,DE=22,kE=23,BE=24,NE=25,FE=26,zE=27,UE=28,jE=29,GE=30,VE=31,HE=32,$E=852,WE=592;function XE(t){return(t>>>24&255)+(t>>>8&65280)+((65280&t)<<8)+((255&t)<<24)}function qE(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new Uint16Array(320),this.work=new Uint16Array(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function YE(t){var e,i,r;return t&&t.state?((e=t.state).wsize=0,e.whave=0,e.wnext=0,(i=t)&&i.state?(r=i.state,i.total_in=i.total_out=r.total=0,i.msg="",r.wrap&&(i.adler=1&r.wrap),r.mode=dE,r.last=0,r.havedict=0,r.dmax=32768,r.head=null,r.hold=0,r.bits=0,r.lencode=r.lendyn=new Int32Array($E),r.distcode=r.distdyn=new Int32Array(WE),r.sane=1,r.back=-1,oE):cE):cE}function ZE(t,e){var i,r,n,o,a,s;return t?(r=new qE,(t.state=r).window=null,o=e,(i=(n=t)&&n.state?(s=n.state,o<0?(a=0,o=-o):(a=1+(o>>4),o<48&&(o&=15)),o&&(o<8||15<o)?cE:(null!==s.window&&s.wbits!==o&&(s.window=null),s.wrap=a,s.wbits=o,YE(n))):cE)!==oE&&(t.state=null),i):cE}var KE,JE,QE=!0;function tC(t){if(QE){var e;for(KE=new Int32Array(512),JE=new Int32Array(32),e=0;e<144;)t.lens[e++]=8;for(;e<256;)t.lens[e++]=9;for(;e<280;)t.lens[e++]=7;for(;e<288;)t.lens[e++]=8;for(JP(tE,t.lens,0,288,KE,0,t.work,{bits:9}),e=0;e<32;)t.lens[e++]=5;JP(eE,t.lens,0,32,JE,0,t.work,{bits:5}),QE=!1}t.lencode=KE,t.lenbits=9,t.distcode=JE,t.distbits=5}function eC(t,e,i,r){var n,o=t.state;return null===o.window&&(o.wsize=1<<o.wbits,o.wnext=0,o.whave=0,o.window=new Uint8Array(o.wsize)),r>=o.wsize?(kP(o.window,e,i-o.wsize,o.wsize,0),o.wnext=0,o.whave=o.wsize):(r<(n=o.wsize-o.wnext)&&(n=r),kP(o.window,e,i-r,n,o.wnext),(r-=n)?(kP(o.window,e,i-r,r,0),o.wnext=r,o.whave=o.wsize):(o.wnext+=n,o.wnext===o.wsize&&(o.wnext=0),o.whave<o.wsize&&(o.whave+=n))),0}function iC(t,e){var i,r,n,o,a,s,c,u,h,l,p,d,f,m,g,v,y,b,x,_,w,S,A,M,P=0,E=new Uint8Array(4),C=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!t||!t.state||!t.output||!t.input&&0!==t.avail_in)return cE;(i=t.state).mode===AE&&(i.mode=ME),a=t.next_out,n=t.output,c=t.avail_out,o=t.next_in,r=t.input,s=t.avail_in,u=i.hold,h=i.bits,l=s,p=c,S=oE;t:for(;;)switch(i.mode){case dE:if(0===i.wrap){i.mode=ME;break}for(;h<16;){if(0===s)break t;s--,u+=r[o++]<<h,h+=8}if(2&i.wrap&&35615===u){E[i.check=0]=255&u,E[1]=u>>>8&255,i.check=FP(i.check,E,2,0),h=u=0,i.mode=fE;break}if(i.flags=0,i.head&&(i.head.done=!1),!(1&i.wrap)||(((255&u)<<8)+(u>>8))%31){t.msg="incorrect header check",i.mode=GE;break}if((15&u)!==pE){t.msg="unknown compression method",i.mode=GE;break}if(h-=4,w=8+(15&(u>>>=4)),0===i.wbits)i.wbits=w;else if(w>i.wbits){t.msg="invalid window size",i.mode=GE;break}i.dmax=1<<w,t.adler=i.check=1,i.mode=512&u?wE:AE,h=u=0;break;case fE:for(;h<16;){if(0===s)break t;s--,u+=r[o++]<<h,h+=8}if(i.flags=u,(255&i.flags)!==pE){t.msg="unknown compression method",i.mode=GE;break}if(57344&i.flags){t.msg="unknown header flags set",i.mode=GE;break}i.head&&(i.head.text=u>>8&1),512&i.flags&&(E[0]=255&u,E[1]=u>>>8&255,i.check=FP(i.check,E,2,0)),h=u=0,i.mode=mE;case mE:for(;h<32;){if(0===s)break t;s--,u+=r[o++]<<h,h+=8}i.head&&(i.head.time=u),512&i.flags&&(E[0]=255&u,E[1]=u>>>8&255,E[2]=u>>>16&255,E[3]=u>>>24&255,i.check=FP(i.check,E,4,0)),h=u=0,i.mode=gE;case gE:for(;h<16;){if(0===s)break t;s--,u+=r[o++]<<h,h+=8}i.head&&(i.head.xflags=255&u,i.head.os=u>>8),512&i.flags&&(E[0]=255&u,E[1]=u>>>8&255,i.check=FP(i.check,E,2,0)),h=u=0,i.mode=vE;case vE:if(1024&i.flags){for(;h<16;){if(0===s)break t;s--,u+=r[o++]<<h,h+=8}i.length=u,i.head&&(i.head.extra_len=u),512&i.flags&&(E[0]=255&u,E[1]=u>>>8&255,i.check=FP(i.check,E,2,0)),h=u=0}else i.head&&(i.head.extra=null);i.mode=yE;case yE:if(1024&i.flags&&(s<(d=i.length)&&(d=s),d&&(i.head&&(w=i.head.extra_len-i.length,i.head.extra||(i.head.extra=new Array(i.head.extra_len)),kP(i.head.extra,r,o,d,w)),512&i.flags&&(i.check=FP(i.check,r,d,o)),s-=d,o+=d,i.length-=d),i.length))break t;i.length=0,i.mode=bE;case bE:if(2048&i.flags){if(0===s)break t;for(d=0;w=r[o+d++],i.head&&w&&i.length<65536&&(i.head.name+=String.fromCharCode(w)),w&&d<s;);if(512&i.flags&&(i.check=FP(i.check,r,d,o)),s-=d,o+=d,w)break t}else i.head&&(i.head.name=null);i.length=0,i.mode=xE;case xE:if(4096&i.flags){if(0===s)break t;for(d=0;w=r[o+d++],i.head&&w&&i.length<65536&&(i.head.comment+=String.fromCharCode(w)),w&&d<s;);if(512&i.flags&&(i.check=FP(i.check,r,d,o)),s-=d,o+=d,w)break t}else i.head&&(i.head.comment=null);i.mode=_E;case _E:if(512&i.flags){for(;h<16;){if(0===s)break t;s--,u+=r[o++]<<h,h+=8}if(u!==(65535&i.check)){t.msg="header crc mismatch",i.mode=GE;break}h=u=0}i.head&&(i.head.hcrc=i.flags>>9&1,i.head.done=!0),t.adler=i.check=0,i.mode=AE;break;case wE:for(;h<32;){if(0===s)break t;s--,u+=r[o++]<<h,h+=8}t.adler=i.check=XE(u),h=u=0,i.mode=SE;case SE:if(0===i.havedict)return t.next_out=a,t.avail_out=c,t.next_in=o,t.avail_in=s,i.hold=u,i.bits=h,sE;t.adler=i.check=1,i.mode=AE;case AE:if(e===rE||e===nE)break t;case ME:if(i.last){u>>>=7&h,h-=7&h,i.mode=zE;break}for(;h<3;){if(0===s)break t;s--,u+=r[o++]<<h,h+=8}switch(i.last=1&u,h-=1,3&(u>>>=1)){case 0:i.mode=PE;break;case 1:if(tC(i),i.mode=LE,e===nE){u>>>=2,h-=2;break t}break;case 2:i.mode=TE;break;case 3:t.msg="invalid block type",i.mode=GE}u>>>=2,h-=2;break;case PE:for(u>>>=7&h,h-=7&h;h<32;){if(0===s)break t;s--,u+=r[o++]<<h,h+=8}if((65535&u)!=(u>>>16^65535)){t.msg="invalid stored block lengths",i.mode=GE;break}if(i.length=65535&u,h=u=0,i.mode=EE,e===nE)break t;case EE:i.mode=CE;case CE:if(d=i.length){if(s<d&&(d=s),c<d&&(d=c),0===d)break t;kP(n,r,o,d,a),s-=d,o+=d,c-=d,a+=d,i.length-=d;break}i.mode=AE;break;case TE:for(;h<14;){if(0===s)break t;s--,u+=r[o++]<<h,h+=8}if(i.nlen=257+(31&u),u>>>=5,h-=5,i.ndist=1+(31&u),u>>>=5,h-=5,i.ncode=4+(15&u),u>>>=4,h-=4,286<i.nlen||30<i.ndist){t.msg="too many length or distance symbols",i.mode=GE;break}i.have=0,i.mode=IE;case IE:for(;i.have<i.ncode;){for(;h<3;){if(0===s)break t;s--,u+=r[o++]<<h,h+=8}i.lens[C[i.have++]]=7&u,u>>>=3,h-=3}for(;i.have<19;)i.lens[C[i.have++]]=0;if(i.lencode=i.lendyn,i.lenbits=7,A={bits:i.lenbits},S=JP(QP,i.lens,0,19,i.lencode,0,i.work,A),i.lenbits=A.bits,S){t.msg="invalid code lengths set",i.mode=GE;break}i.have=0,i.mode=RE;case RE:for(;i.have<i.nlen+i.ndist;){for(;v=(P=i.lencode[u&(1<<i.lenbits)-1])>>>16&255,y=65535&P,!((g=P>>>24)<=h);){if(0===s)break t;s--,u+=r[o++]<<h,h+=8}if(y<16)u>>>=g,h-=g,i.lens[i.have++]=y;else{if(16===y){for(M=g+2;h<M;){if(0===s)break t;s--,u+=r[o++]<<h,h+=8}if(u>>>=g,h-=g,0===i.have){t.msg="invalid bit length repeat",i.mode=GE;break}w=i.lens[i.have-1],d=3+(3&u),u>>>=2,h-=2}else if(17===y){for(M=g+3;h<M;){if(0===s)break t;s--,u+=r[o++]<<h,h+=8}h-=g,w=0,d=3+(7&(u>>>=g)),u>>>=3,h-=3}else{for(M=g+7;h<M;){if(0===s)break t;s--,u+=r[o++]<<h,h+=8}h-=g,w=0,d=11+(127&(u>>>=g)),u>>>=7,h-=7}if(i.have+d>i.nlen+i.ndist){t.msg="invalid bit length repeat",i.mode=GE;break}for(;d--;)i.lens[i.have++]=w}}if(i.mode===GE)break;if(0===i.lens[256]){t.msg="invalid code -- missing end-of-block",i.mode=GE;break}if(i.lenbits=9,A={bits:i.lenbits},S=JP(tE,i.lens,0,i.nlen,i.lencode,0,i.work,A),i.lenbits=A.bits,S){t.msg="invalid literal/lengths set",i.mode=GE;break}if(i.distbits=6,i.distcode=i.distdyn,A={bits:i.distbits},S=JP(eE,i.lens,i.nlen,i.ndist,i.distcode,0,i.work,A),i.distbits=A.bits,S){t.msg="invalid distances set",i.mode=GE;break}if(i.mode=LE,e===nE)break t;case LE:i.mode=OE;case OE:if(6<=s&&258<=c){t.next_out=a,t.avail_out=c,t.next_in=o,t.avail_in=s,i.hold=u,i.bits=h,jP(t,p),a=t.next_out,n=t.output,c=t.avail_out,o=t.next_in,r=t.input,s=t.avail_in,u=i.hold,h=i.bits,i.mode===AE&&(i.back=-1);break}for(i.back=0;v=(P=i.lencode[u&(1<<i.lenbits)-1])>>>16&255,y=65535&P,!((g=P>>>24)<=h);){if(0===s)break t;s--,u+=r[o++]<<h,h+=8}if(v&&0==(240&v)){for(b=g,x=v,_=y;v=(P=i.lencode[_+((u&(1<<b+x)-1)>>b)])>>>16&255,y=65535&P,!(b+(g=P>>>24)<=h);){if(0===s)break t;s--,u+=r[o++]<<h,h+=8}u>>>=b,h-=b,i.back+=b}if(u>>>=g,h-=g,i.back+=g,i.length=y,0===v){i.mode=FE;break}if(32&v){i.back=-1,i.mode=AE;break}if(64&v){t.msg="invalid literal/length code",i.mode=GE;break}i.extra=15&v,i.mode=DE;case DE:if(i.extra){for(M=i.extra;h<M;){if(0===s)break t;s--,u+=r[o++]<<h,h+=8}i.length+=u&(1<<i.extra)-1,u>>>=i.extra,h-=i.extra,i.back+=i.extra}i.was=i.length,i.mode=kE;case kE:for(;v=(P=i.distcode[u&(1<<i.distbits)-1])>>>16&255,y=65535&P,!((g=P>>>24)<=h);){if(0===s)break t;s--,u+=r[o++]<<h,h+=8}if(0==(240&v)){for(b=g,x=v,_=y;v=(P=i.distcode[_+((u&(1<<b+x)-1)>>b)])>>>16&255,y=65535&P,!(b+(g=P>>>24)<=h);){if(0===s)break t;s--,u+=r[o++]<<h,h+=8}u>>>=b,h-=b,i.back+=b}if(u>>>=g,h-=g,i.back+=g,64&v){t.msg="invalid distance code",i.mode=GE;break}i.offset=y,i.extra=15&v,i.mode=BE;case BE:if(i.extra){for(M=i.extra;h<M;){if(0===s)break t;s--,u+=r[o++]<<h,h+=8}i.offset+=u&(1<<i.extra)-1,u>>>=i.extra,h-=i.extra,i.back+=i.extra}if(i.offset>i.dmax){t.msg="invalid distance too far back",i.mode=GE;break}i.mode=NE;case NE:if(0===c)break t;if(d=p-c,i.offset>d){if((d=i.offset-d)>i.whave&&i.sane){t.msg="invalid distance too far back",i.mode=GE;break}d>i.wnext?(d-=i.wnext,f=i.wsize-d):f=i.wnext-d,d>i.length&&(d=i.length),m=i.window}else m=n,f=a-i.offset,d=i.length;for(c<d&&(d=c),c-=d,i.length-=d;n[a++]=m[f++],--d;);0===i.length&&(i.mode=OE);break;case FE:if(0===c)break t;n[a++]=i.length,c--,i.mode=OE;break;case zE:if(i.wrap){for(;h<32;){if(0===s)break t;s--,u|=r[o++]<<h,h+=8}if(p-=c,t.total_out+=p,i.total+=p,p&&(t.adler=i.check=i.flags?FP(i.check,n,p,a-p):BP(i.check,n,p,a-p)),p=c,(i.flags?u:XE(u))!==i.check){t.msg="incorrect data check",i.mode=GE;break}h=u=0}i.mode=UE;case UE:if(i.wrap&&i.flags){for(;h<32;){if(0===s)break t;s--,u+=r[o++]<<h,h+=8}if(u!==(4294967295&i.total)){t.msg="incorrect length check",i.mode=GE;break}h=u=0}i.mode=jE;case jE:S=aE;break t;case GE:S=uE;break t;case VE:return hE;case HE:default:return cE}return t.next_out=a,t.avail_out=c,t.next_in=o,t.avail_in=s,i.hold=u,i.bits=h,(i.wsize||p!==t.avail_out&&i.mode<GE&&(i.mode<zE||e!==iE))&&eC(t,t.output,t.next_out,p-t.avail_out),l-=t.avail_in,p-=t.avail_out,t.total_in+=l,t.total_out+=p,i.total+=p,i.wrap&&p&&(t.adler=i.check=i.flags?FP(i.check,n,p,t.next_out-p):BP(i.check,n,p,t.next_out-p)),t.data_type=i.bits+(i.last?64:0)+(i.mode===AE?128:0)+(i.mode===LE||i.mode===EE?256:0),(0===l&&0===p||e===iE)&&S===oE&&(S=lE),S}var rC=!0,nC=!0;try{String.fromCharCode.apply(null,[0])}catch(t){rC=!1}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(t){nC=!1}for(var oC=new Uint8Array(256),aC=0;aC<256;aC++)oC[aC]=252<=aC?6:248<=aC?5:240<=aC?4:224<=aC?3:192<=aC?2:1;function sC(t){var e,i,r,n,o,a=t.length,s=0;for(n=0;n<a;n++)55296==(64512&(i=t.charCodeAt(n)))&&n+1<a&&56320==(64512&(r=t.charCodeAt(n+1)))&&(i=65536+(i-55296<<10)+(r-56320),n++),s+=i<128?1:i<2048?2:i<65536?3:4;for(e=new Uint8Array(s),n=o=0;o<s;n++)55296==(64512&(i=t.charCodeAt(n)))&&n+1<a&&56320==(64512&(r=t.charCodeAt(n+1)))&&(i=65536+(i-55296<<10)+(r-56320),n++),i<128?e[o++]=i:(i<2048?e[o++]=192|i>>>6:(i<65536?e[o++]=224|i>>>12:(e[o++]=240|i>>>18,e[o++]=128|i>>>12&63),e[o++]=128|i>>>6&63),e[o++]=128|63&i);return e}function cC(t,e){var i,r,n,o,a=e||t.length,s=new Array(2*a);for(i=r=0;i<a;)if((n=t[i++])<128)s[r++]=n;else if(4<(o=oC[n]))s[r++]=65533,i+=o-1;else{for(n&=2===o?31:3===o?15:7;1<o&&i<a;)n=n<<6|63&t[i++],o--;1<o?s[r++]=65533:n<65536?s[r++]=n:(n-=65536,s[r++]=55296|n>>10&1023,s[r++]=56320|1023&n)}return function(t,e){if(e<65537&&(t.subarray&&nC||!t.subarray&&rC))return String.fromCharCode.apply(null,DP(t,e));for(var i="",r=0;r<e;r++)i+=String.fromCharCode(t[r]);return i}(s,r)}function uC(t,e){var i;for((e=e||t.length)>t.length&&(e=t.length),i=e-1;0<=i&&128==(192&t[i]);)i--;return i<0?e:0===i?e:i+oC[t[i]]>e?i:e}oC[254]=oC[254]=1;var hC=0,lC={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"};function pC(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}function dC(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1}var fC=Object.prototype.toString;function mC(t){if(!(this instanceof mC))return new mC(t);this.options=function(t){for(var e=Array.prototype.slice.call(arguments,1);e.length;){var i=e.shift();if(i){if("object"!=typeof i)throw new TypeError(i+"must be non-object");for(var r in i)i.hasOwnProperty(r)&&(t[r]=i[r])}}return t}({chunkSize:16384,windowBits:0,to:""},t||{});var e=this.options;e.raw&&0<=e.windowBits&&e.windowBits<16&&(e.windowBits=-e.windowBits,0===e.windowBits&&(e.windowBits=-15)),!(0<=e.windowBits&&e.windowBits<16)||t&&t.windowBits||(e.windowBits+=32),15<e.windowBits&&e.windowBits<48&&0==(15&e.windowBits)&&(e.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new pC,this.strm.avail_out=0;var i,r,n,o=ZE(this.strm,e.windowBits);if(o!==hC)throw new Error(lC[o]);this.header=new dC,i=this.strm,r=this.header,i&&i.state&&(0==(2&(n=i.state).wrap)||((n.head=r).done=!1))}mC.prototype.push=function(t,e){var i,r,n,o,a,s,c,u,h,l,p=this.strm,d=this.options.chunkSize,f=this.options.dictionary,m=!1;if(this.ended)return!1;r=e===~~e?e:!0===e?4:0,"string"==typeof t?p.input=function(t){for(var e=new Uint8Array(t.length),i=0,r=e.length;i<r;i++)e[i]=t.charCodeAt(i);return e}(t):"[object ArrayBuffer]"===fC.call(t)?p.input=new Uint8Array(t):p.input=t,p.next_in=0,p.avail_in=p.input.length;do{if(0===p.avail_out&&(p.output=new Uint8Array(d),p.next_out=0,p.avail_out=d),2===(i=iC(p,0))&&f&&(s="string"==typeof f?sC(f):"[object ArrayBuffer]"===fC.call(f)?new Uint8Array(f):f,c=this.strm,h=void 0,l=(u=s).length,i=c&&c.state?0!==(h=c.state).wrap&&h.mode!==SE?cE:h.mode===SE&&BP(1,u,l,0)!==h.check?uE:eC(c,u,l,l)?(h.mode=VE,hE):(h.havedict=1,oE):cE),-5===i&&!0===m&&(i=hC,m=!1),1!==i&&i!==hC)return this.onEnd(i),!(this.ended=!0);p.next_out&&(0!==p.avail_out&&1!==i&&(0!==p.avail_in||4!==r&&2!==r)||("string"===this.options.to?(n=uC(p.output,p.next_out),o=p.next_out-n,a=cC(p.output,n),p.next_out=o,p.avail_out=d-o,o&&kP(p.output,p.output,n,o,0),this.onData(a)):this.onData(DP(p.output,p.next_out)))),0===p.avail_in&&0===p.avail_out&&(m=!0)}while((0<p.avail_in||0===p.avail_out)&&1!==i);return 1===i&&(r=4),4===r?(i=function(t){if(!t||!t.state)return cE;var e=t.state;return e.window&&(e.window=null),t.state=null,oE}(this.strm),this.onEnd(i),this.ended=!0,i===hC):2!==r||(this.onEnd(hC),!(p.avail_out=0))},mC.prototype.onData=function(t){this.chunks.push(t)},mC.prototype.onEnd=function(t){t===hC&&("string"===this.options.to?this.result=this.chunks.join(""):this.result=function(t){var e,i,r,n,o,a;for(e=r=0,i=t.length;e<i;e++)r+=t[e].length;for(a=new Uint8Array(r),e=n=0,i=t.length;e<i;e++)o=t[e],a.set(o,n),n+=o.length;return a}(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg},$p.add("gz",function(e){var i;e instanceof ArrayBuffer&&(e=new Uint8Array(e));try{i=function(t,e){var i=new mC(e);if(i.push(t,!0),i.err)throw i.msg;return i.result}(e)}catch(t){i=e}return i});var gC=function(){},vC="//mmtf.rcsb.org/v1.0/",yC=vC+"full/",bC=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),((e.prototype=Object.create(t&&t.prototype)).constructor=e).prototype.getUrl=function(t){var e,i=id(t),r=i.name.substr(0,4);return!["pdb","cif"].includes(i.ext)||!1!==i.compressed&&"gz"!==i.compressed?"mmtf"===i.ext?e=i.base.endsWith(".bb")?"//mmtf.rcsb.org/v1.0/reduced/"+r:yC+r:(i.ext&&Bp.warn("unsupported ext",i.ext),e=yC+r):e="//files.rcsb.org/download/"+i.path,ul()+e},e.prototype.getExt=function(t){var e=id(t).ext;return e||"mmtf"},e}(gC);jp.add("rcsb",new bC);var xC="//pubchem.ncbi.nlm.nih.gov/rest/pug/compound/cid/",_C="/SDF?record_type=3d",wC=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),((e.prototype=Object.create(t&&t.prototype)).constructor=e).prototype.getUrl=function(t){var e,i=id(t),r=i.name;return i.ext&&"sdf"!==i.ext&&Bp.warn("unsupported ext",i.ext),e=xC+r+_C,ul()+e},e.prototype.getExt=function(t){var e=id(t).ext;return e||"sdf"},e}(gC);jp.add("pubchem",new wC);var SC=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),((e.prototype=Object.create(t&&t.prototype)).constructor=e).prototype.getUrl=function(t){return t},e.prototype.getExt=function(t){return id(t).ext},e}(gC);jp.add("ftp",new SC),jp.add("http",new SC),jp.add("https",new SC);var AC=/^((http|https|ftp):)*\/\//,MC=function(e){function t(t){void 0===t&&(t=""),e.call(this),this.baseUrl=t}return e&&(t.__proto__=e),((t.prototype=Object.create(e&&e.prototype)).constructor=t).prototype.getUrl=function(t){var e,i,r,n,o=id(t),a=this.baseUrl+o.path;return AC.test(this.baseUrl)||(e=a,i=window.location,r=i.pathname,n=r.substring(0,r.lastIndexOf("/")+1),a=i.origin+n+e),a},t.prototype.getExt=function(t){return id(t).ext},t}(gC),PC=function(e){function t(t){void 0===t&&(t=""),e.call(this),this.baseUrl=t}return e&&(t.__proto__=e),((t.prototype=Object.create(e&&e.prototype)).constructor=t).prototype.getListing=function(e){void 0===e&&(e="");var t=this.baseUrl+"dir/"+e;return"/"!==t[t.length-1]&&(t+="/"),nd(t,{ext:"json"}).then(function(t){return{path:e,data:t.data}})},t.prototype.getUrl=function(t){var e=id(t);return this.baseUrl+"file/"+e.path+e.query},t.prototype.getCountUrl=function(t){var e=id(t);return this.baseUrl+"traj/numframes/"+e.path+e.query},t.prototype.getFrameUrl=function(t,e){var i=id(t);return this.baseUrl+"traj/frame/"+e+"/"+i.path+i.query},t.prototype.getFrameParams=function(t,e){return"atomIndices="+e.join(";")},t.prototype.getPathUrl=function(t,e){var i=id(t);return this.baseUrl+"traj/path/"+e+"/"+i.path+i.query},t.prototype.getExt=function(t){return id(t).ext},t}(gC);function EC(t,e){return{type:"integer",max:t,min:e}}function CC(t,e,i){return{type:"number",precision:t,max:e,min:i}}function TC(t,e,i){return{type:"range",step:t,max:e,min:i}}function IC(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];return{type:"select",options:t.reduce(function(t,e){var i;return Object.assign({},t,((i={})[e]=e,i))},{})}}var RC={backgroundColor:{type:"color"},quality:IC("auto","low","medium","high"),sampleLevel:TC(1,5,-1),impostor:{type:"boolean"},workerDefault:{type:"boolean"},rotateSpeed:CC(1,10,0),zoomSpeed:CC(1,10,0),panSpeed:CC(1,10,0),clipNear:TC(1,100,0),clipFar:TC(1,100,0),clipDist:EC(200,0),fogNear:TC(1,100,0),fogFar:TC(1,100,0),cameraType:IC("perspective","orthographic","stereo"),cameraEyeSep:CC(3,1,.01),cameraFov:TC(1,120,15),lightColor:{type:"color"},lightIntensity:CC(2,10,0),ambientColor:{type:"color"},ambientIntensity:CC(2,10,0),hoverTimeout:EC(1e4,-1),tooltip:{type:"boolean"},mousePreset:IC.apply(void 0,Object.keys(hy))};window.Promise||(window.Promise=s),de.Version="2.0.0-dev.33",de.StaticDatasource=MC,de.MdsrvDatasource=PC,de.Colormaker=Vl,de.Selection=bp,de.PdbWriter=sd,de.SdfWriter=cd,de.StlWriter=ld,de.Stage=p_,de.Collection=Bx,de.ComponentCollection=c_,de.RepresentationCollection=Fx,de.Assembly=tb,de.TrajectoryPlayer=$x,de.Superposition=Vx,de.Frames=jx,de.Queue=Wf,de.Counter=pd,de.BufferRepresentation=ex,de.ArrowBuffer=LS,de.BoxBuffer=FS,de.ConeBuffer=TS,de.CylinderBuffer=Ew,de.EllipsoidBuffer=HS,de.MeshBuffer=ey,de.OctahedronBuffer=YS,de.PointBuffer=gx,de.SphereBuffer=dx,de.TetrahedronBuffer=tA,de.TextBuffer=uw,de.TorusBuffer=aA,de.WidelineBuffer=pw,de.Shape=Qb,de.Structure=qb,de.Kdtree=Yy,de.SpatialHash=Bm,de.MolecularSurface=cS,de.Volume=Wv,de.MouseActions=uy,de.KeyActions=dy,de.setDebug=function(t){de.Debug=t},de.MeasurementDefaultParams=Np,de.setMeasurementDefaultParams=function(t){void 0===t&&(t={}),Object.assign(Np,t)},de.ScriptExtensions=Fp,de.ColormakerRegistry=Up,de.DatasourceRegistry=jp,de.DecompressorRegistry=$p,de.ParserRegistry=Vp,de.RepresentationRegistry=Gp,de.setListingDatasource=function(t){de.ListingDatasource=t},de.setTrajectoryDatasource=function(t){de.TrajectoryDatasource=t},de.autoLoad=nd,de.getDataInfo=rd,de.getFileInfo=id,de.superpose=r_,de.guessElement=bb,de.concatStructures=function(t){for(var e=[],i=arguments.length-1;0<i--;)e[i]=arguments[i+1];de.Debug&&Bp.time("concatStructures");var r=new qb(t,""),n=new nb(r),o=r.atomStore,a=r.atomMap;o.addField("formalCharge",1,"int8"),o.addField("partialCharge",1,"float32");var s={},c=0,u=0,h=0;e.forEach(function(t){t.eachAtom(function(t){o.growIfFull(),o.atomTypeId[c]=a.add(t.atomname,t.element),o.x[c]=t.x,o.y[c]=t.y,o.z[c]=t.z,o.serial[c]=t.serial,o.formalCharge[c]=t.formalCharge,o.partialCharge[c]=t.partialCharge,o.altloc[c]=t.altloc,o.occupancy[c]=t.occupancy,o.bfactor[c]=t.bfactor,n.addAtom(t.modelIndex+h,t.chainname,t.chainid,t.resname,t.resno,1===t.hetero,t.sstruc,t.inscode),s[t.index+u]=c,c+=1}),u+=t.atomStore.count,h+=t.modelStore.count});var l=r.bondStore,p=r.getAtomProxy(),d=r.getAtomProxy();return u=0,e.forEach(function(t){t.eachBond(function(t){p.index=s[t.atomIndex1+u],d.index=s[t.atomIndex2+u],l.addBond(p,d,t.bondOrder)}),u+=t.atomStore.count}),n.finalize(),mb(r,!0),fb(r,!0),r.finalizeAtoms(),r.finalizeBonds(),xb(r),de.Debug&&Bp.timeEnd("concatStructures"),r},de.flatten=function t(e,i){i=al(i,[]);for(var r=0;r<e.length;r++)Array.isArray(e[r])?t(e[r],i):i.push(e[r]);return i},de.throttle=function(i,r,n){var o,a,s,c=null,u=0;function h(){u=!1===n.leading?0:Date.now(),c=null,s=i.apply(o,a),c||(o=a=null)}return n||(n={}),function(){var t=Date.now();u||!1!==n.leading||(u=t);var e=r-(t-u);return o=this,a=arguments,e<=0||r<e?(c&&(clearTimeout(c),c=null),u=t,s=i.apply(o,a),c||(o=a=null)):c||!1===n.trailing||(c=setTimeout(h,e)),s}},de.download=pl,de.getQuery=ol,de.uniqueArray=gl,de.LeftMouseButton=1,de.MiddleMouseButton=2,de.RightMouseButton=3,de.Signal=Wl,de.Matrix3=ti,de.Matrix4=Ke,de.Vector2=Ze,de.Vector3=Qe,de.Box3=Ai,de.Quaternion=Je,de.Euler=Fi,de.Plane=Pi,de.Color=Li,de.UIStageParameters=RC,Object.defineProperty(de,"__esModule",{value:!0})});
	
	/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4).setImmediate, (function() { return this; }())))

/***/ }),
/* 4 */
/***/ (function(module, exports, __webpack_require__) {

	/* WEBPACK VAR INJECTION */(function(global) {var scope = (typeof global !== "undefined" && global) ||
	            (typeof self !== "undefined" && self) ||
	            window;
	var apply = Function.prototype.apply;
	
	// DOM APIs, for completeness
	
	exports.setTimeout = function() {
	  return new Timeout(apply.call(setTimeout, scope, arguments), clearTimeout);
	};
	exports.setInterval = function() {
	  return new Timeout(apply.call(setInterval, scope, arguments), clearInterval);
	};
	exports.clearTimeout =
	exports.clearInterval = function(timeout) {
	  if (timeout) {
	    timeout.close();
	  }
	};
	
	function Timeout(id, clearFn) {
	  this._id = id;
	  this._clearFn = clearFn;
	}
	Timeout.prototype.unref = Timeout.prototype.ref = function() {};
	Timeout.prototype.close = function() {
	  this._clearFn.call(scope, this._id);
	};
	
	// Does not start the time, just sets up the members needed.
	exports.enroll = function(item, msecs) {
	  clearTimeout(item._idleTimeoutId);
	  item._idleTimeout = msecs;
	};
	
	exports.unenroll = function(item) {
	  clearTimeout(item._idleTimeoutId);
	  item._idleTimeout = -1;
	};
	
	exports._unrefActive = exports.active = function(item) {
	  clearTimeout(item._idleTimeoutId);
	
	  var msecs = item._idleTimeout;
	  if (msecs >= 0) {
	    item._idleTimeoutId = setTimeout(function onTimeout() {
	      if (item._onTimeout)
	        item._onTimeout();
	    }, msecs);
	  }
	};
	
	// setimmediate attaches itself to the global object
	__webpack_require__(5);
	// On some exotic environments, it's not clear which object `setimmediate` was
	// able to install onto.  Search each possibility in the same order as the
	// `setimmediate` library.
	exports.setImmediate = (typeof self !== "undefined" && self.setImmediate) ||
	                       (typeof global !== "undefined" && global.setImmediate) ||
	                       (this && this.setImmediate);
	exports.clearImmediate = (typeof self !== "undefined" && self.clearImmediate) ||
	                         (typeof global !== "undefined" && global.clearImmediate) ||
	                         (this && this.clearImmediate);
	
	/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))

/***/ }),
/* 5 */
/***/ (function(module, exports, __webpack_require__) {

	/* WEBPACK VAR INJECTION */(function(global, process) {(function (global, undefined) {
	    "use strict";
	
	    if (global.setImmediate) {
	        return;
	    }
	
	    var nextHandle = 1; // Spec says greater than zero
	    var tasksByHandle = {};
	    var currentlyRunningATask = false;
	    var doc = global.document;
	    var registerImmediate;
	
	    function setImmediate(callback) {
	      // Callback can either be a function or a string
	      if (typeof callback !== "function") {
	        callback = new Function("" + callback);
	      }
	      // Copy function arguments
	      var args = new Array(arguments.length - 1);
	      for (var i = 0; i < args.length; i++) {
	          args[i] = arguments[i + 1];
	      }
	      // Store and register the task
	      var task = { callback: callback, args: args };
	      tasksByHandle[nextHandle] = task;
	      registerImmediate(nextHandle);
	      return nextHandle++;
	    }
	
	    function clearImmediate(handle) {
	        delete tasksByHandle[handle];
	    }
	
	    function run(task) {
	        var callback = task.callback;
	        var args = task.args;
	        switch (args.length) {
	        case 0:
	            callback();
	            break;
	        case 1:
	            callback(args[0]);
	            break;
	        case 2:
	            callback(args[0], args[1]);
	            break;
	        case 3:
	            callback(args[0], args[1], args[2]);
	            break;
	        default:
	            callback.apply(undefined, args);
	            break;
	        }
	    }
	
	    function runIfPresent(handle) {
	        // From the spec: "Wait until any invocations of this algorithm started before this one have completed."
	        // So if we're currently running a task, we'll need to delay this invocation.
	        if (currentlyRunningATask) {
	            // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a
	            // "too much recursion" error.
	            setTimeout(runIfPresent, 0, handle);
	        } else {
	            var task = tasksByHandle[handle];
	            if (task) {
	                currentlyRunningATask = true;
	                try {
	                    run(task);
	                } finally {
	                    clearImmediate(handle);
	                    currentlyRunningATask = false;
	                }
	            }
	        }
	    }
	
	    function installNextTickImplementation() {
	        registerImmediate = function(handle) {
	            process.nextTick(function () { runIfPresent(handle); });
	        };
	    }
	
	    function canUsePostMessage() {
	        // The test against `importScripts` prevents this implementation from being installed inside a web worker,
	        // where `global.postMessage` means something completely different and can't be used for this purpose.
	        if (global.postMessage && !global.importScripts) {
	            var postMessageIsAsynchronous = true;
	            var oldOnMessage = global.onmessage;
	            global.onmessage = function() {
	                postMessageIsAsynchronous = false;
	            };
	            global.postMessage("", "*");
	            global.onmessage = oldOnMessage;
	            return postMessageIsAsynchronous;
	        }
	    }
	
	    function installPostMessageImplementation() {
	        // Installs an event handler on `global` for the `message` event: see
	        // * https://developer.mozilla.org/en/DOM/window.postMessage
	        // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages
	
	        var messagePrefix = "setImmediate$" + Math.random() + "$";
	        var onGlobalMessage = function(event) {
	            if (event.source === global &&
	                typeof event.data === "string" &&
	                event.data.indexOf(messagePrefix) === 0) {
	                runIfPresent(+event.data.slice(messagePrefix.length));
	            }
	        };
	
	        if (global.addEventListener) {
	            global.addEventListener("message", onGlobalMessage, false);
	        } else {
	            global.attachEvent("onmessage", onGlobalMessage);
	        }
	
	        registerImmediate = function(handle) {
	            global.postMessage(messagePrefix + handle, "*");
	        };
	    }
	
	    function installMessageChannelImplementation() {
	        var channel = new MessageChannel();
	        channel.port1.onmessage = function(event) {
	            var handle = event.data;
	            runIfPresent(handle);
	        };
	
	        registerImmediate = function(handle) {
	            channel.port2.postMessage(handle);
	        };
	    }
	
	    function installReadyStateChangeImplementation() {
	        var html = doc.documentElement;
	        registerImmediate = function(handle) {
	            // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted
	            // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.
	            var script = doc.createElement("script");
	            script.onreadystatechange = function () {
	                runIfPresent(handle);
	                script.onreadystatechange = null;
	                html.removeChild(script);
	                script = null;
	            };
	            html.appendChild(script);
	        };
	    }
	
	    function installSetTimeoutImplementation() {
	        registerImmediate = function(handle) {
	            setTimeout(runIfPresent, 0, handle);
	        };
	    }
	
	    // If supported, we should attach to the prototype of global, since that is where setTimeout et al. live.
	    var attachTo = Object.getPrototypeOf && Object.getPrototypeOf(global);
	    attachTo = attachTo && attachTo.setTimeout ? attachTo : global;
	
	    // Don't get fooled by e.g. browserify environments.
	    if ({}.toString.call(global.process) === "[object process]") {
	        // For Node.js before 0.9
	        installNextTickImplementation();
	
	    } else if (canUsePostMessage()) {
	        // For non-IE10 modern browsers
	        installPostMessageImplementation();
	
	    } else if (global.MessageChannel) {
	        // For web workers, where supported
	        installMessageChannelImplementation();
	
	    } else if (doc && "onreadystatechange" in doc.createElement("script")) {
	        // For IE 6–8
	        installReadyStateChangeImplementation();
	
	    } else {
	        // For older browsers
	        installSetTimeoutImplementation();
	    }
	
	    attachTo.setImmediate = setImmediate;
	    attachTo.clearImmediate = clearImmediate;
	}(typeof self === "undefined" ? typeof global === "undefined" ? this : global : self));
	
	/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()), __webpack_require__(6)))

/***/ }),
/* 6 */
/***/ (function(module, exports) {

	// shim for using process in browser
	var process = module.exports = {};
	
	// cached from whatever global is present so that test runners that stub it
	// don't break things.  But we need to wrap it in a try catch in case it is
	// wrapped in strict mode code which doesn't define any globals.  It's inside a
	// function because try/catches deoptimize in certain engines.
	
	var cachedSetTimeout;
	var cachedClearTimeout;
	
	function defaultSetTimout() {
	    throw new Error('setTimeout has not been defined');
	}
	function defaultClearTimeout () {
	    throw new Error('clearTimeout has not been defined');
	}
	(function () {
	    try {
	        if (typeof setTimeout === 'function') {
	            cachedSetTimeout = setTimeout;
	        } else {
	            cachedSetTimeout = defaultSetTimout;
	        }
	    } catch (e) {
	        cachedSetTimeout = defaultSetTimout;
	    }
	    try {
	        if (typeof clearTimeout === 'function') {
	            cachedClearTimeout = clearTimeout;
	        } else {
	            cachedClearTimeout = defaultClearTimeout;
	        }
	    } catch (e) {
	        cachedClearTimeout = defaultClearTimeout;
	    }
	} ())
	function runTimeout(fun) {
	    if (cachedSetTimeout === setTimeout) {
	        //normal enviroments in sane situations
	        return setTimeout(fun, 0);
	    }
	    // if setTimeout wasn't available but was latter defined
	    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
	        cachedSetTimeout = setTimeout;
	        return setTimeout(fun, 0);
	    }
	    try {
	        // when when somebody has screwed with setTimeout but no I.E. maddness
	        return cachedSetTimeout(fun, 0);
	    } catch(e){
	        try {
	            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
	            return cachedSetTimeout.call(null, fun, 0);
	        } catch(e){
	            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error
	            return cachedSetTimeout.call(this, fun, 0);
	        }
	    }
	
	
	}
	function runClearTimeout(marker) {
	    if (cachedClearTimeout === clearTimeout) {
	        //normal enviroments in sane situations
	        return clearTimeout(marker);
	    }
	    // if clearTimeout wasn't available but was latter defined
	    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
	        cachedClearTimeout = clearTimeout;
	        return clearTimeout(marker);
	    }
	    try {
	        // when when somebody has screwed with setTimeout but no I.E. maddness
	        return cachedClearTimeout(marker);
	    } catch (e){
	        try {
	            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally
	            return cachedClearTimeout.call(null, marker);
	        } catch (e){
	            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.
	            // Some versions of I.E. have different rules for clearTimeout vs setTimeout
	            return cachedClearTimeout.call(this, marker);
	        }
	    }
	
	
	
	}
	var queue = [];
	var draining = false;
	var currentQueue;
	var queueIndex = -1;
	
	function cleanUpNextTick() {
	    if (!draining || !currentQueue) {
	        return;
	    }
	    draining = false;
	    if (currentQueue.length) {
	        queue = currentQueue.concat(queue);
	    } else {
	        queueIndex = -1;
	    }
	    if (queue.length) {
	        drainQueue();
	    }
	}
	
	function drainQueue() {
	    if (draining) {
	        return;
	    }
	    var timeout = runTimeout(cleanUpNextTick);
	    draining = true;
	
	    var len = queue.length;
	    while(len) {
	        currentQueue = queue;
	        queue = [];
	        while (++queueIndex < len) {
	            if (currentQueue) {
	                currentQueue[queueIndex].run();
	            }
	        }
	        queueIndex = -1;
	        len = queue.length;
	    }
	    currentQueue = null;
	    draining = false;
	    runClearTimeout(timeout);
	}
	
	process.nextTick = function (fun) {
	    var args = new Array(arguments.length - 1);
	    if (arguments.length > 1) {
	        for (var i = 1; i < arguments.length; i++) {
	            args[i - 1] = arguments[i];
	        }
	    }
	    queue.push(new Item(fun, args));
	    if (queue.length === 1 && !draining) {
	        runTimeout(drainQueue);
	    }
	};
	
	// v8 likes predictible objects
	function Item(fun, array) {
	    this.fun = fun;
	    this.array = array;
	}
	Item.prototype.run = function () {
	    this.fun.apply(null, this.array);
	};
	process.title = 'browser';
	process.browser = true;
	process.env = {};
	process.argv = [];
	process.version = ''; // empty string to avoid regexp issues
	process.versions = {};
	
	function noop() {}
	
	process.on = noop;
	process.addListener = noop;
	process.once = noop;
	process.off = noop;
	process.removeListener = noop;
	process.removeAllListeners = noop;
	process.emit = noop;
	process.prependListener = noop;
	process.prependOnceListener = noop;
	
	process.listeners = function (name) { return [] }
	
	process.binding = function (name) {
	    throw new Error('process.binding is not supported');
	};
	
	process.cwd = function () { return '/' };
	process.chdir = function (dir) {
	    throw new Error('process.chdir is not supported');
	};
	process.umask = function() { return 0; };


/***/ }),
/* 7 */
/***/ (function(module, exports, __webpack_require__) {

	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
	 * jQuery JavaScript Library v3.3.1
	 * https://jquery.com/
	 *
	 * Includes Sizzle.js
	 * https://sizzlejs.com/
	 *
	 * Copyright JS Foundation and other contributors
	 * Released under the MIT license
	 * https://jquery.org/license
	 *
	 * Date: 2018-01-20T17:24Z
	 */
	( function( global, factory ) {
	
		"use strict";
	
		if ( typeof module === "object" && typeof module.exports === "object" ) {
	
			// For CommonJS and CommonJS-like environments where a proper `window`
			// is present, execute the factory and get jQuery.
			// For environments that do not have a `window` with a `document`
			// (such as Node.js), expose a factory as module.exports.
			// This accentuates the need for the creation of a real `window`.
			// e.g. var jQuery = require("jquery")(window);
			// See ticket #14549 for more info.
			module.exports = global.document ?
				factory( global, true ) :
				function( w ) {
					if ( !w.document ) {
						throw new Error( "jQuery requires a window with a document" );
					}
					return factory( w );
				};
		} else {
			factory( global );
		}
	
	// Pass this if window is not defined yet
	} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
	
	// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1
	// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode
	// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common
	// enough that all such attempts are guarded in a try block.
	"use strict";
	
	var arr = [];
	
	var document = window.document;
	
	var getProto = Object.getPrototypeOf;
	
	var slice = arr.slice;
	
	var concat = arr.concat;
	
	var push = arr.push;
	
	var indexOf = arr.indexOf;
	
	var class2type = {};
	
	var toString = class2type.toString;
	
	var hasOwn = class2type.hasOwnProperty;
	
	var fnToString = hasOwn.toString;
	
	var ObjectFunctionString = fnToString.call( Object );
	
	var support = {};
	
	var isFunction = function isFunction( obj ) {
	
	      // Support: Chrome <=57, Firefox <=52
	      // In some browsers, typeof returns "function" for HTML <object> elements
	      // (i.e., `typeof document.createElement( "object" ) === "function"`).
	      // We don't want to classify *any* DOM node as a function.
	      return typeof obj === "function" && typeof obj.nodeType !== "number";
	  };
	
	
	var isWindow = function isWindow( obj ) {
			return obj != null && obj === obj.window;
		};
	
	
	
	
		var preservedScriptAttributes = {
			type: true,
			src: true,
			noModule: true
		};
	
		function DOMEval( code, doc, node ) {
			doc = doc || document;
	
			var i,
				script = doc.createElement( "script" );
	
			script.text = code;
			if ( node ) {
				for ( i in preservedScriptAttributes ) {
					if ( node[ i ] ) {
						script[ i ] = node[ i ];
					}
				}
			}
			doc.head.appendChild( script ).parentNode.removeChild( script );
		}
	
	
	function toType( obj ) {
		if ( obj == null ) {
			return obj + "";
		}
	
		// Support: Android <=2.3 only (functionish RegExp)
		return typeof obj === "object" || typeof obj === "function" ?
			class2type[ toString.call( obj ) ] || "object" :
			typeof obj;
	}
	/* global Symbol */
	// Defining this global in .eslintrc.json would create a danger of using the global
	// unguarded in another place, it seems safer to define global only for this module
	
	
	
	var
		version = "3.3.1",
	
		// Define a local copy of jQuery
		jQuery = function( selector, context ) {
	
			// The jQuery object is actually just the init constructor 'enhanced'
			// Need init if jQuery is called (just allow error to be thrown if not included)
			return new jQuery.fn.init( selector, context );
		},
	
		// Support: Android <=4.0 only
		// Make sure we trim BOM and NBSP
		rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;
	
	jQuery.fn = jQuery.prototype = {
	
		// The current version of jQuery being used
		jquery: version,
	
		constructor: jQuery,
	
		// The default length of a jQuery object is 0
		length: 0,
	
		toArray: function() {
			return slice.call( this );
		},
	
		// Get the Nth element in the matched element set OR
		// Get the whole matched element set as a clean array
		get: function( num ) {
	
			// Return all the elements in a clean array
			if ( num == null ) {
				return slice.call( this );
			}
	
			// Return just the one element from the set
			return num < 0 ? this[ num + this.length ] : this[ num ];
		},
	
		// Take an array of elements and push it onto the stack
		// (returning the new matched element set)
		pushStack: function( elems ) {
	
			// Build a new jQuery matched element set
			var ret = jQuery.merge( this.constructor(), elems );
	
			// Add the old object onto the stack (as a reference)
			ret.prevObject = this;
	
			// Return the newly-formed element set
			return ret;
		},
	
		// Execute a callback for every element in the matched set.
		each: function( callback ) {
			return jQuery.each( this, callback );
		},
	
		map: function( callback ) {
			return this.pushStack( jQuery.map( this, function( elem, i ) {
				return callback.call( elem, i, elem );
			} ) );
		},
	
		slice: function() {
			return this.pushStack( slice.apply( this, arguments ) );
		},
	
		first: function() {
			return this.eq( 0 );
		},
	
		last: function() {
			return this.eq( -1 );
		},
	
		eq: function( i ) {
			var len = this.length,
				j = +i + ( i < 0 ? len : 0 );
			return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );
		},
	
		end: function() {
			return this.prevObject || this.constructor();
		},
	
		// For internal use only.
		// Behaves like an Array's method, not like a jQuery method.
		push: push,
		sort: arr.sort,
		splice: arr.splice
	};
	
	jQuery.extend = jQuery.fn.extend = function() {
		var options, name, src, copy, copyIsArray, clone,
			target = arguments[ 0 ] || {},
			i = 1,
			length = arguments.length,
			deep = false;
	
		// Handle a deep copy situation
		if ( typeof target === "boolean" ) {
			deep = target;
	
			// Skip the boolean and the target
			target = arguments[ i ] || {};
			i++;
		}
	
		// Handle case when target is a string or something (possible in deep copy)
		if ( typeof target !== "object" && !isFunction( target ) ) {
			target = {};
		}
	
		// Extend jQuery itself if only one argument is passed
		if ( i === length ) {
			target = this;
			i--;
		}
	
		for ( ; i < length; i++ ) {
	
			// Only deal with non-null/undefined values
			if ( ( options = arguments[ i ] ) != null ) {
	
				// Extend the base object
				for ( name in options ) {
					src = target[ name ];
					copy = options[ name ];
	
					// Prevent never-ending loop
					if ( target === copy ) {
						continue;
					}
	
					// Recurse if we're merging plain objects or arrays
					if ( deep && copy && ( jQuery.isPlainObject( copy ) ||
						( copyIsArray = Array.isArray( copy ) ) ) ) {
	
						if ( copyIsArray ) {
							copyIsArray = false;
							clone = src && Array.isArray( src ) ? src : [];
	
						} else {
							clone = src && jQuery.isPlainObject( src ) ? src : {};
						}
	
						// Never move original objects, clone them
						target[ name ] = jQuery.extend( deep, clone, copy );
	
					// Don't bring in undefined values
					} else if ( copy !== undefined ) {
						target[ name ] = copy;
					}
				}
			}
		}
	
		// Return the modified object
		return target;
	};
	
	jQuery.extend( {
	
		// Unique for each copy of jQuery on the page
		expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
	
		// Assume jQuery is ready without the ready module
		isReady: true,
	
		error: function( msg ) {
			throw new Error( msg );
		},
	
		noop: function() {},
	
		isPlainObject: function( obj ) {
			var proto, Ctor;
	
			// Detect obvious negatives
			// Use toString instead of jQuery.type to catch host objects
			if ( !obj || toString.call( obj ) !== "[object Object]" ) {
				return false;
			}
	
			proto = getProto( obj );
	
			// Objects with no prototype (e.g., `Object.create( null )`) are plain
			if ( !proto ) {
				return true;
			}
	
			// Objects with prototype are plain iff they were constructed by a global Object function
			Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor;
			return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString;
		},
	
		isEmptyObject: function( obj ) {
	
			/* eslint-disable no-unused-vars */
			// See https://github.com/eslint/eslint/issues/6125
			var name;
	
			for ( name in obj ) {
				return false;
			}
			return true;
		},
	
		// Evaluates a script in a global context
		globalEval: function( code ) {
			DOMEval( code );
		},
	
		each: function( obj, callback ) {
			var length, i = 0;
	
			if ( isArrayLike( obj ) ) {
				length = obj.length;
				for ( ; i < length; i++ ) {
					if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
						break;
					}
				}
			} else {
				for ( i in obj ) {
					if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
						break;
					}
				}
			}
	
			return obj;
		},
	
		// Support: Android <=4.0 only
		trim: function( text ) {
			return text == null ?
				"" :
				( text + "" ).replace( rtrim, "" );
		},
	
		// results is for internal usage only
		makeArray: function( arr, results ) {
			var ret = results || [];
	
			if ( arr != null ) {
				if ( isArrayLike( Object( arr ) ) ) {
					jQuery.merge( ret,
						typeof arr === "string" ?
						[ arr ] : arr
					);
				} else {
					push.call( ret, arr );
				}
			}
	
			return ret;
		},
	
		inArray: function( elem, arr, i ) {
			return arr == null ? -1 : indexOf.call( arr, elem, i );
		},
	
		// Support: Android <=4.0 only, PhantomJS 1 only
		// push.apply(_, arraylike) throws on ancient WebKit
		merge: function( first, second ) {
			var len = +second.length,
				j = 0,
				i = first.length;
	
			for ( ; j < len; j++ ) {
				first[ i++ ] = second[ j ];
			}
	
			first.length = i;
	
			return first;
		},
	
		grep: function( elems, callback, invert ) {
			var callbackInverse,
				matches = [],
				i = 0,
				length = elems.length,
				callbackExpect = !invert;
	
			// Go through the array, only saving the items
			// that pass the validator function
			for ( ; i < length; i++ ) {
				callbackInverse = !callback( elems[ i ], i );
				if ( callbackInverse !== callbackExpect ) {
					matches.push( elems[ i ] );
				}
			}
	
			return matches;
		},
	
		// arg is for internal usage only
		map: function( elems, callback, arg ) {
			var length, value,
				i = 0,
				ret = [];
	
			// Go through the array, translating each of the items to their new values
			if ( isArrayLike( elems ) ) {
				length = elems.length;
				for ( ; i < length; i++ ) {
					value = callback( elems[ i ], i, arg );
	
					if ( value != null ) {
						ret.push( value );
					}
				}
	
			// Go through every key on the object,
			} else {
				for ( i in elems ) {
					value = callback( elems[ i ], i, arg );
	
					if ( value != null ) {
						ret.push( value );
					}
				}
			}
	
			// Flatten any nested arrays
			return concat.apply( [], ret );
		},
	
		// A global GUID counter for objects
		guid: 1,
	
		// jQuery.support is not used in Core but other projects attach their
		// properties to it so it needs to exist.
		support: support
	} );
	
	if ( typeof Symbol === "function" ) {
		jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];
	}
	
	// Populate the class2type map
	jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
	function( i, name ) {
		class2type[ "[object " + name + "]" ] = name.toLowerCase();
	} );
	
	function isArrayLike( obj ) {
	
		// Support: real iOS 8.2 only (not reproducible in simulator)
		// `in` check used to prevent JIT error (gh-2145)
		// hasOwn isn't used here due to false negatives
		// regarding Nodelist length in IE
		var length = !!obj && "length" in obj && obj.length,
			type = toType( obj );
	
		if ( isFunction( obj ) || isWindow( obj ) ) {
			return false;
		}
	
		return type === "array" || length === 0 ||
			typeof length === "number" && length > 0 && ( length - 1 ) in obj;
	}
	var Sizzle =
	/*!
	 * Sizzle CSS Selector Engine v2.3.3
	 * https://sizzlejs.com/
	 *
	 * Copyright jQuery Foundation and other contributors
	 * Released under the MIT license
	 * http://jquery.org/license
	 *
	 * Date: 2016-08-08
	 */
	(function( window ) {
	
	var i,
		support,
		Expr,
		getText,
		isXML,
		tokenize,
		compile,
		select,
		outermostContext,
		sortInput,
		hasDuplicate,
	
		// Local document vars
		setDocument,
		document,
		docElem,
		documentIsHTML,
		rbuggyQSA,
		rbuggyMatches,
		matches,
		contains,
	
		// Instance-specific data
		expando = "sizzle" + 1 * new Date(),
		preferredDoc = window.document,
		dirruns = 0,
		done = 0,
		classCache = createCache(),
		tokenCache = createCache(),
		compilerCache = createCache(),
		sortOrder = function( a, b ) {
			if ( a === b ) {
				hasDuplicate = true;
			}
			return 0;
		},
	
		// Instance methods
		hasOwn = ({}).hasOwnProperty,
		arr = [],
		pop = arr.pop,
		push_native = arr.push,
		push = arr.push,
		slice = arr.slice,
		// Use a stripped-down indexOf as it's faster than native
		// https://jsperf.com/thor-indexof-vs-for/5
		indexOf = function( list, elem ) {
			var i = 0,
				len = list.length;
			for ( ; i < len; i++ ) {
				if ( list[i] === elem ) {
					return i;
				}
			}
			return -1;
		},
	
		booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
	
		// Regular expressions
	
		// http://www.w3.org/TR/css3-selectors/#whitespace
		whitespace = "[\\x20\\t\\r\\n\\f]",
	
		// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
		identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+",
	
		// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
		attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +
			// Operator (capture 2)
			"*([*^$|!~]?=)" + whitespace +
			// "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
			"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace +
			"*\\]",
	
		pseudos = ":(" + identifier + ")(?:\\((" +
			// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
			// 1. quoted (capture 3; capture 4 or capture 5)
			"('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
			// 2. simple (capture 6)
			"((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
			// 3. anything else (capture 2)
			".*" +
			")\\)|)",
	
		// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
		rwhitespace = new RegExp( whitespace + "+", "g" ),
		rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
	
		rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
		rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),
	
		rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ),
	
		rpseudo = new RegExp( pseudos ),
		ridentifier = new RegExp( "^" + identifier + "$" ),
	
		matchExpr = {
			"ID": new RegExp( "^#(" + identifier + ")" ),
			"CLASS": new RegExp( "^\\.(" + identifier + ")" ),
			"TAG": new RegExp( "^(" + identifier + "|[*])" ),
			"ATTR": new RegExp( "^" + attributes ),
			"PSEUDO": new RegExp( "^" + pseudos ),
			"CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
				"*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
				"*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
			"bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
			// For use in libraries implementing .is()
			// We use this for POS matching in `select`
			"needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
				whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
		},
	
		rinputs = /^(?:input|select|textarea|button)$/i,
		rheader = /^h\d$/i,
	
		rnative = /^[^{]+\{\s*\[native \w/,
	
		// Easily-parseable/retrievable ID or TAG or CLASS selectors
		rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
	
		rsibling = /[+~]/,
	
		// CSS escapes
		// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
		runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),
		funescape = function( _, escaped, escapedWhitespace ) {
			var high = "0x" + escaped - 0x10000;
			// NaN means non-codepoint
			// Support: Firefox<24
			// Workaround erroneous numeric interpretation of +"0x"
			return high !== high || escapedWhitespace ?
				escaped :
				high < 0 ?
					// BMP codepoint
					String.fromCharCode( high + 0x10000 ) :
					// Supplemental Plane codepoint (surrogate pair)
					String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
		},
	
		// CSS string/identifier serialization
		// https://drafts.csswg.org/cssom/#common-serializing-idioms
		rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,
		fcssescape = function( ch, asCodePoint ) {
			if ( asCodePoint ) {
	
				// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER
				if ( ch === "\0" ) {
					return "\uFFFD";
				}
	
				// Control characters and (dependent upon position) numbers get escaped as code points
				return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " ";
			}
	
			// Other potentially-special ASCII characters get backslash-escaped
			return "\\" + ch;
		},
	
		// Used for iframes
		// See setDocument()
		// Removing the function wrapper causes a "Permission Denied"
		// error in IE
		unloadHandler = function() {
			setDocument();
		},
	
		disabledAncestor = addCombinator(
			function( elem ) {
				return elem.disabled === true && ("form" in elem || "label" in elem);
			},
			{ dir: "parentNode", next: "legend" }
		);
	
	// Optimize for push.apply( _, NodeList )
	try {
		push.apply(
			(arr = slice.call( preferredDoc.childNodes )),
			preferredDoc.childNodes
		);
		// Support: Android<4.0
		// Detect silently failing push.apply
		arr[ preferredDoc.childNodes.length ].nodeType;
	} catch ( e ) {
		push = { apply: arr.length ?
	
			// Leverage slice if possible
			function( target, els ) {
				push_native.apply( target, slice.call(els) );
			} :
	
			// Support: IE<9
			// Otherwise append directly
			function( target, els ) {
				var j = target.length,
					i = 0;
				// Can't trust NodeList.length
				while ( (target[j++] = els[i++]) ) {}
				target.length = j - 1;
			}
		};
	}
	
	function Sizzle( selector, context, results, seed ) {
		var m, i, elem, nid, match, groups, newSelector,
			newContext = context && context.ownerDocument,
	
			// nodeType defaults to 9, since context defaults to document
			nodeType = context ? context.nodeType : 9;
	
		results = results || [];
	
		// Return early from calls with invalid selector or context
		if ( typeof selector !== "string" || !selector ||
			nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {
	
			return results;
		}
	
		// Try to shortcut find operations (as opposed to filters) in HTML documents
		if ( !seed ) {
	
			if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
				setDocument( context );
			}
			context = context || document;
	
			if ( documentIsHTML ) {
	
				// If the selector is sufficiently simple, try using a "get*By*" DOM method
				// (excepting DocumentFragment context, where the methods don't exist)
				if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {
	
					// ID selector
					if ( (m = match[1]) ) {
	
						// Document context
						if ( nodeType === 9 ) {
							if ( (elem = context.getElementById( m )) ) {
	
								// Support: IE, Opera, Webkit
								// TODO: identify versions
								// getElementById can match elements by name instead of ID
								if ( elem.id === m ) {
									results.push( elem );
									return results;
								}
							} else {
								return results;
							}
	
						// Element context
						} else {
	
							// Support: IE, Opera, Webkit
							// TODO: identify versions
							// getElementById can match elements by name instead of ID
							if ( newContext && (elem = newContext.getElementById( m )) &&
								contains( context, elem ) &&
								elem.id === m ) {
	
								results.push( elem );
								return results;
							}
						}
	
					// Type selector
					} else if ( match[2] ) {
						push.apply( results, context.getElementsByTagName( selector ) );
						return results;
	
					// Class selector
					} else if ( (m = match[3]) && support.getElementsByClassName &&
						context.getElementsByClassName ) {
	
						push.apply( results, context.getElementsByClassName( m ) );
						return results;
					}
				}
	
				// Take advantage of querySelectorAll
				if ( support.qsa &&
					!compilerCache[ selector + " " ] &&
					(!rbuggyQSA || !rbuggyQSA.test( selector )) ) {
	
					if ( nodeType !== 1 ) {
						newContext = context;
						newSelector = selector;
	
					// qSA looks outside Element context, which is not what we want
					// Thanks to Andrew Dupont for this workaround technique
					// Support: IE <=8
					// Exclude object elements
					} else if ( context.nodeName.toLowerCase() !== "object" ) {
	
						// Capture the context ID, setting it first if necessary
						if ( (nid = context.getAttribute( "id" )) ) {
							nid = nid.replace( rcssescape, fcssescape );
						} else {
							context.setAttribute( "id", (nid = expando) );
						}
	
						// Prefix every selector in the list
						groups = tokenize( selector );
						i = groups.length;
						while ( i-- ) {
							groups[i] = "#" + nid + " " + toSelector( groups[i] );
						}
						newSelector = groups.join( "," );
	
						// Expand context for sibling selectors
						newContext = rsibling.test( selector ) && testContext( context.parentNode ) ||
							context;
					}
	
					if ( newSelector ) {
						try {
							push.apply( results,
								newContext.querySelectorAll( newSelector )
							);
							return results;
						} catch ( qsaError ) {
						} finally {
							if ( nid === expando ) {
								context.removeAttribute( "id" );
							}
						}
					}
				}
			}
		}
	
		// All others
		return select( selector.replace( rtrim, "$1" ), context, results, seed );
	}
	
	/**
	 * Create key-value caches of limited size
	 * @returns {function(string, object)} Returns the Object data after storing it on itself with
	 *	property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
	 *	deleting the oldest entry
	 */
	function createCache() {
		var keys = [];
	
		function cache( key, value ) {
			// Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
			if ( keys.push( key + " " ) > Expr.cacheLength ) {
				// Only keep the most recent entries
				delete cache[ keys.shift() ];
			}
			return (cache[ key + " " ] = value);
		}
		return cache;
	}
	
	/**
	 * Mark a function for special use by Sizzle
	 * @param {Function} fn The function to mark
	 */
	function markFunction( fn ) {
		fn[ expando ] = true;
		return fn;
	}
	
	/**
	 * Support testing using an element
	 * @param {Function} fn Passed the created element and returns a boolean result
	 */
	function assert( fn ) {
		var el = document.createElement("fieldset");
	
		try {
			return !!fn( el );
		} catch (e) {
			return false;
		} finally {
			// Remove from its parent by default
			if ( el.parentNode ) {
				el.parentNode.removeChild( el );
			}
			// release memory in IE
			el = null;
		}
	}
	
	/**
	 * Adds the same handler for all of the specified attrs
	 * @param {String} attrs Pipe-separated list of attributes
	 * @param {Function} handler The method that will be applied
	 */
	function addHandle( attrs, handler ) {
		var arr = attrs.split("|"),
			i = arr.length;
	
		while ( i-- ) {
			Expr.attrHandle[ arr[i] ] = handler;
		}
	}
	
	/**
	 * Checks document order of two siblings
	 * @param {Element} a
	 * @param {Element} b
	 * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
	 */
	function siblingCheck( a, b ) {
		var cur = b && a,
			diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
				a.sourceIndex - b.sourceIndex;
	
		// Use IE sourceIndex if available on both nodes
		if ( diff ) {
			return diff;
		}
	
		// Check if b follows a
		if ( cur ) {
			while ( (cur = cur.nextSibling) ) {
				if ( cur === b ) {
					return -1;
				}
			}
		}
	
		return a ? 1 : -1;
	}
	
	/**
	 * Returns a function to use in pseudos for input types
	 * @param {String} type
	 */
	function createInputPseudo( type ) {
		return function( elem ) {
			var name = elem.nodeName.toLowerCase();
			return name === "input" && elem.type === type;
		};
	}
	
	/**
	 * Returns a function to use in pseudos for buttons
	 * @param {String} type
	 */
	function createButtonPseudo( type ) {
		return function( elem ) {
			var name = elem.nodeName.toLowerCase();
			return (name === "input" || name === "button") && elem.type === type;
		};
	}
	
	/**
	 * Returns a function to use in pseudos for :enabled/:disabled
	 * @param {Boolean} disabled true for :disabled; false for :enabled
	 */
	function createDisabledPseudo( disabled ) {
	
		// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable
		return function( elem ) {
	
			// Only certain elements can match :enabled or :disabled
			// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled
			// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled
			if ( "form" in elem ) {
	
				// Check for inherited disabledness on relevant non-disabled elements:
				// * listed form-associated elements in a disabled fieldset
				//   https://html.spec.whatwg.org/multipage/forms.html#category-listed
				//   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled
				// * option elements in a disabled optgroup
				//   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled
				// All such elements have a "form" property.
				if ( elem.parentNode && elem.disabled === false ) {
	
					// Option elements defer to a parent optgroup if present
					if ( "label" in elem ) {
						if ( "label" in elem.parentNode ) {
							return elem.parentNode.disabled === disabled;
						} else {
							return elem.disabled === disabled;
						}
					}
	
					// Support: IE 6 - 11
					// Use the isDisabled shortcut property to check for disabled fieldset ancestors
					return elem.isDisabled === disabled ||
	
						// Where there is no isDisabled, check manually
						/* jshint -W018 */
						elem.isDisabled !== !disabled &&
							disabledAncestor( elem ) === disabled;
				}
	
				return elem.disabled === disabled;
	
			// Try to winnow out elements that can't be disabled before trusting the disabled property.
			// Some victims get caught in our net (label, legend, menu, track), but it shouldn't
			// even exist on them, let alone have a boolean value.
			} else if ( "label" in elem ) {
				return elem.disabled === disabled;
			}
	
			// Remaining elements are neither :enabled nor :disabled
			return false;
		};
	}
	
	/**
	 * Returns a function to use in pseudos for positionals
	 * @param {Function} fn
	 */
	function createPositionalPseudo( fn ) {
		return markFunction(function( argument ) {
			argument = +argument;
			return markFunction(function( seed, matches ) {
				var j,
					matchIndexes = fn( [], seed.length, argument ),
					i = matchIndexes.length;
	
				// Match elements found at the specified indexes
				while ( i-- ) {
					if ( seed[ (j = matchIndexes[i]) ] ) {
						seed[j] = !(matches[j] = seed[j]);
					}
				}
			});
		});
	}
	
	/**
	 * Checks a node for validity as a Sizzle context
	 * @param {Element|Object=} context
	 * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
	 */
	function testContext( context ) {
		return context && typeof context.getElementsByTagName !== "undefined" && context;
	}
	
	// Expose support vars for convenience
	support = Sizzle.support = {};
	
	/**
	 * Detects XML nodes
	 * @param {Element|Object} elem An element or a document
	 * @returns {Boolean} True iff elem is a non-HTML XML node
	 */
	isXML = Sizzle.isXML = function( elem ) {
		// documentElement is verified for cases where it doesn't yet exist
		// (such as loading iframes in IE - #4833)
		var documentElement = elem && (elem.ownerDocument || elem).documentElement;
		return documentElement ? documentElement.nodeName !== "HTML" : false;
	};
	
	/**
	 * Sets document-related variables once based on the current document
	 * @param {Element|Object} [doc] An element or document object to use to set the document
	 * @returns {Object} Returns the current document
	 */
	setDocument = Sizzle.setDocument = function( node ) {
		var hasCompare, subWindow,
			doc = node ? node.ownerDocument || node : preferredDoc;
	
		// Return early if doc is invalid or already selected
		if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
			return document;
		}
	
		// Update global variables
		document = doc;
		docElem = document.documentElement;
		documentIsHTML = !isXML( document );
	
		// Support: IE 9-11, Edge
		// Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936)
		if ( preferredDoc !== document &&
			(subWindow = document.defaultView) && subWindow.top !== subWindow ) {
	
			// Support: IE 11, Edge
			if ( subWindow.addEventListener ) {
				subWindow.addEventListener( "unload", unloadHandler, false );
	
			// Support: IE 9 - 10 only
			} else if ( subWindow.attachEvent ) {
				subWindow.attachEvent( "onunload", unloadHandler );
			}
		}
	
		/* Attributes
		---------------------------------------------------------------------- */
	
		// Support: IE<8
		// Verify that getAttribute really returns attributes and not properties
		// (excepting IE8 booleans)
		support.attributes = assert(function( el ) {
			el.className = "i";
			return !el.getAttribute("className");
		});
	
		/* getElement(s)By*
		---------------------------------------------------------------------- */
	
		// Check if getElementsByTagName("*") returns only elements
		support.getElementsByTagName = assert(function( el ) {
			el.appendChild( document.createComment("") );
			return !el.getElementsByTagName("*").length;
		});
	
		// Support: IE<9
		support.getElementsByClassName = rnative.test( document.getElementsByClassName );
	
		// Support: IE<10
		// Check if getElementById returns elements by name
		// The broken getElementById methods don't pick up programmatically-set names,
		// so use a roundabout getElementsByName test
		support.getById = assert(function( el ) {
			docElem.appendChild( el ).id = expando;
			return !document.getElementsByName || !document.getElementsByName( expando ).length;
		});
	
		// ID filter and find
		if ( support.getById ) {
			Expr.filter["ID"] = function( id ) {
				var attrId = id.replace( runescape, funescape );
				return function( elem ) {
					return elem.getAttribute("id") === attrId;
				};
			};
			Expr.find["ID"] = function( id, context ) {
				if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
					var elem = context.getElementById( id );
					return elem ? [ elem ] : [];
				}
			};
		} else {
			Expr.filter["ID"] =  function( id ) {
				var attrId = id.replace( runescape, funescape );
				return function( elem ) {
					var node = typeof elem.getAttributeNode !== "undefined" &&
						elem.getAttributeNode("id");
					return node && node.value === attrId;
				};
			};
	
			// Support: IE 6 - 7 only
			// getElementById is not reliable as a find shortcut
			Expr.find["ID"] = function( id, context ) {
				if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
					var node, i, elems,
						elem = context.getElementById( id );
	
					if ( elem ) {
	
						// Verify the id attribute
						node = elem.getAttributeNode("id");
						if ( node && node.value === id ) {
							return [ elem ];
						}
	
						// Fall back on getElementsByName
						elems = context.getElementsByName( id );
						i = 0;
						while ( (elem = elems[i++]) ) {
							node = elem.getAttributeNode("id");
							if ( node && node.value === id ) {
								return [ elem ];
							}
						}
					}
	
					return [];
				}
			};
		}
	
		// Tag
		Expr.find["TAG"] = support.getElementsByTagName ?
			function( tag, context ) {
				if ( typeof context.getElementsByTagName !== "undefined" ) {
					return context.getElementsByTagName( tag );
	
				// DocumentFragment nodes don't have gEBTN
				} else if ( support.qsa ) {
					return context.querySelectorAll( tag );
				}
			} :
	
			function( tag, context ) {
				var elem,
					tmp = [],
					i = 0,
					// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too
					results = context.getElementsByTagName( tag );
	
				// Filter out possible comments
				if ( tag === "*" ) {
					while ( (elem = results[i++]) ) {
						if ( elem.nodeType === 1 ) {
							tmp.push( elem );
						}
					}
	
					return tmp;
				}
				return results;
			};
	
		// Class
		Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {
			if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) {
				return context.getElementsByClassName( className );
			}
		};
	
		/* QSA/matchesSelector
		---------------------------------------------------------------------- */
	
		// QSA and matchesSelector support
	
		// matchesSelector(:active) reports false when true (IE9/Opera 11.5)
		rbuggyMatches = [];
	
		// qSa(:focus) reports false when true (Chrome 21)
		// We allow this because of a bug in IE8/9 that throws an error
		// whenever `document.activeElement` is accessed on an iframe
		// So, we allow :focus to pass through QSA all the time to avoid the IE error
		// See https://bugs.jquery.com/ticket/13378
		rbuggyQSA = [];
	
		if ( (support.qsa = rnative.test( document.querySelectorAll )) ) {
			// Build QSA regex
			// Regex strategy adopted from Diego Perini
			assert(function( el ) {
				// Select is set to empty string on purpose
				// This is to test IE's treatment of not explicitly
				// setting a boolean content attribute,
				// since its presence should be enough
				// https://bugs.jquery.com/ticket/12359
				docElem.appendChild( el ).innerHTML = "<a id='" + expando + "'></a>" +
					"<select id='" + expando + "-\r\\' msallowcapture=''>" +
					"<option selected=''></option></select>";
	
				// Support: IE8, Opera 11-12.16
				// Nothing should be selected when empty strings follow ^= or $= or *=
				// The test attribute must be unknown in Opera but "safe" for WinRT
				// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
				if ( el.querySelectorAll("[msallowcapture^='']").length ) {
					rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
				}
	
				// Support: IE8
				// Boolean attributes and "value" are not treated correctly
				if ( !el.querySelectorAll("[selected]").length ) {
					rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
				}
	
				// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+
				if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
					rbuggyQSA.push("~=");
				}
	
				// Webkit/Opera - :checked should return selected option elements
				// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
				// IE8 throws error here and will not see later tests
				if ( !el.querySelectorAll(":checked").length ) {
					rbuggyQSA.push(":checked");
				}
	
				// Support: Safari 8+, iOS 8+
				// https://bugs.webkit.org/show_bug.cgi?id=136851
				// In-page `selector#id sibling-combinator selector` fails
				if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) {
					rbuggyQSA.push(".#.+[+~]");
				}
			});
	
			assert(function( el ) {
				el.innerHTML = "<a href='' disabled='disabled'></a>" +
					"<select disabled='disabled'><option/></select>";
	
				// Support: Windows 8 Native Apps
				// The type and name attributes are restricted during .innerHTML assignment
				var input = document.createElement("input");
				input.setAttribute( "type", "hidden" );
				el.appendChild( input ).setAttribute( "name", "D" );
	
				// Support: IE8
				// Enforce case-sensitivity of name attribute
				if ( el.querySelectorAll("[name=d]").length ) {
					rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
				}
	
				// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
				// IE8 throws error here and will not see later tests
				if ( el.querySelectorAll(":enabled").length !== 2 ) {
					rbuggyQSA.push( ":enabled", ":disabled" );
				}
	
				// Support: IE9-11+
				// IE's :disabled selector does not pick up the children of disabled fieldsets
				docElem.appendChild( el ).disabled = true;
				if ( el.querySelectorAll(":disabled").length !== 2 ) {
					rbuggyQSA.push( ":enabled", ":disabled" );
				}
	
				// Opera 10-11 does not throw on post-comma invalid pseudos
				el.querySelectorAll("*,:x");
				rbuggyQSA.push(",.*:");
			});
		}
	
		if ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||
			docElem.webkitMatchesSelector ||
			docElem.mozMatchesSelector ||
			docElem.oMatchesSelector ||
			docElem.msMatchesSelector) )) ) {
	
			assert(function( el ) {
				// Check to see if it's possible to do matchesSelector
				// on a disconnected node (IE 9)
				support.disconnectedMatch = matches.call( el, "*" );
	
				// This should fail with an exception
				// Gecko does not error, returns false instead
				matches.call( el, "[s!='']:x" );
				rbuggyMatches.push( "!=", pseudos );
			});
		}
	
		rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );
		rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") );
	
		/* Contains
		---------------------------------------------------------------------- */
		hasCompare = rnative.test( docElem.compareDocumentPosition );
	
		// Element contains another
		// Purposefully self-exclusive
		// As in, an element does not contain itself
		contains = hasCompare || rnative.test( docElem.contains ) ?
			function( a, b ) {
				var adown = a.nodeType === 9 ? a.documentElement : a,
					bup = b && b.parentNode;
				return a === bup || !!( bup && bup.nodeType === 1 && (
					adown.contains ?
						adown.contains( bup ) :
						a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
				));
			} :
			function( a, b ) {
				if ( b ) {
					while ( (b = b.parentNode) ) {
						if ( b === a ) {
							return true;
						}
					}
				}
				return false;
			};
	
		/* Sorting
		---------------------------------------------------------------------- */
	
		// Document order sorting
		sortOrder = hasCompare ?
		function( a, b ) {
	
			// Flag for duplicate removal
			if ( a === b ) {
				hasDuplicate = true;
				return 0;
			}
	
			// Sort on method existence if only one input has compareDocumentPosition
			var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
			if ( compare ) {
				return compare;
			}
	
			// Calculate position if both inputs belong to the same document
			compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?
				a.compareDocumentPosition( b ) :
	
				// Otherwise we know they are disconnected
				1;
	
			// Disconnected nodes
			if ( compare & 1 ||
				(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {
	
				// Choose the first element that is related to our preferred document
				if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {
					return -1;
				}
				if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {
					return 1;
				}
	
				// Maintain original order
				return sortInput ?
					( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
					0;
			}
	
			return compare & 4 ? -1 : 1;
		} :
		function( a, b ) {
			// Exit early if the nodes are identical
			if ( a === b ) {
				hasDuplicate = true;
				return 0;
			}
	
			var cur,
				i = 0,
				aup = a.parentNode,
				bup = b.parentNode,
				ap = [ a ],
				bp = [ b ];
	
			// Parentless nodes are either documents or disconnected
			if ( !aup || !bup ) {
				return a === document ? -1 :
					b === document ? 1 :
					aup ? -1 :
					bup ? 1 :
					sortInput ?
					( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
					0;
	
			// If the nodes are siblings, we can do a quick check
			} else if ( aup === bup ) {
				return siblingCheck( a, b );
			}
	
			// Otherwise we need full lists of their ancestors for comparison
			cur = a;
			while ( (cur = cur.parentNode) ) {
				ap.unshift( cur );
			}
			cur = b;
			while ( (cur = cur.parentNode) ) {
				bp.unshift( cur );
			}
	
			// Walk down the tree looking for a discrepancy
			while ( ap[i] === bp[i] ) {
				i++;
			}
	
			return i ?
				// Do a sibling check if the nodes have a common ancestor
				siblingCheck( ap[i], bp[i] ) :
	
				// Otherwise nodes in our document sort first
				ap[i] === preferredDoc ? -1 :
				bp[i] === preferredDoc ? 1 :
				0;
		};
	
		return document;
	};
	
	Sizzle.matches = function( expr, elements ) {
		return Sizzle( expr, null, null, elements );
	};
	
	Sizzle.matchesSelector = function( elem, expr ) {
		// Set document vars if needed
		if ( ( elem.ownerDocument || elem ) !== document ) {
			setDocument( elem );
		}
	
		// Make sure that attribute selectors are quoted
		expr = expr.replace( rattributeQuotes, "='$1']" );
	
		if ( support.matchesSelector && documentIsHTML &&
			!compilerCache[ expr + " " ] &&
			( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
			( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {
	
			try {
				var ret = matches.call( elem, expr );
	
				// IE 9's matchesSelector returns false on disconnected nodes
				if ( ret || support.disconnectedMatch ||
						// As well, disconnected nodes are said to be in a document
						// fragment in IE 9
						elem.document && elem.document.nodeType !== 11 ) {
					return ret;
				}
			} catch (e) {}
		}
	
		return Sizzle( expr, document, null, [ elem ] ).length > 0;
	};
	
	Sizzle.contains = function( context, elem ) {
		// Set document vars if needed
		if ( ( context.ownerDocument || context ) !== document ) {
			setDocument( context );
		}
		return contains( context, elem );
	};
	
	Sizzle.attr = function( elem, name ) {
		// Set document vars if needed
		if ( ( elem.ownerDocument || elem ) !== document ) {
			setDocument( elem );
		}
	
		var fn = Expr.attrHandle[ name.toLowerCase() ],
			// Don't get fooled by Object.prototype properties (jQuery #13807)
			val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
				fn( elem, name, !documentIsHTML ) :
				undefined;
	
		return val !== undefined ?
			val :
			support.attributes || !documentIsHTML ?
				elem.getAttribute( name ) :
				(val = elem.getAttributeNode(name)) && val.specified ?
					val.value :
					null;
	};
	
	Sizzle.escape = function( sel ) {
		return (sel + "").replace( rcssescape, fcssescape );
	};
	
	Sizzle.error = function( msg ) {
		throw new Error( "Syntax error, unrecognized expression: " + msg );
	};
	
	/**
	 * Document sorting and removing duplicates
	 * @param {ArrayLike} results
	 */
	Sizzle.uniqueSort = function( results ) {
		var elem,
			duplicates = [],
			j = 0,
			i = 0;
	
		// Unless we *know* we can detect duplicates, assume their presence
		hasDuplicate = !support.detectDuplicates;
		sortInput = !support.sortStable && results.slice( 0 );
		results.sort( sortOrder );
	
		if ( hasDuplicate ) {
			while ( (elem = results[i++]) ) {
				if ( elem === results[ i ] ) {
					j = duplicates.push( i );
				}
			}
			while ( j-- ) {
				results.splice( duplicates[ j ], 1 );
			}
		}
	
		// Clear input after sorting to release objects
		// See https://github.com/jquery/sizzle/pull/225
		sortInput = null;
	
		return results;
	};
	
	/**
	 * Utility function for retrieving the text value of an array of DOM nodes
	 * @param {Array|Element} elem
	 */
	getText = Sizzle.getText = function( elem ) {
		var node,
			ret = "",
			i = 0,
			nodeType = elem.nodeType;
	
		if ( !nodeType ) {
			// If no nodeType, this is expected to be an array
			while ( (node = elem[i++]) ) {
				// Do not traverse comment nodes
				ret += getText( node );
			}
		} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
			// Use textContent for elements
			// innerText usage removed for consistency of new lines (jQuery #11153)
			if ( typeof elem.textContent === "string" ) {
				return elem.textContent;
			} else {
				// Traverse its children
				for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
					ret += getText( elem );
				}
			}
		} else if ( nodeType === 3 || nodeType === 4 ) {
			return elem.nodeValue;
		}
		// Do not include comment or processing instruction nodes
	
		return ret;
	};
	
	Expr = Sizzle.selectors = {
	
		// Can be adjusted by the user
		cacheLength: 50,
	
		createPseudo: markFunction,
	
		match: matchExpr,
	
		attrHandle: {},
	
		find: {},
	
		relative: {
			">": { dir: "parentNode", first: true },
			" ": { dir: "parentNode" },
			"+": { dir: "previousSibling", first: true },
			"~": { dir: "previousSibling" }
		},
	
		preFilter: {
			"ATTR": function( match ) {
				match[1] = match[1].replace( runescape, funescape );
	
				// Move the given value to match[3] whether quoted or unquoted
				match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape );
	
				if ( match[2] === "~=" ) {
					match[3] = " " + match[3] + " ";
				}
	
				return match.slice( 0, 4 );
			},
	
			"CHILD": function( match ) {
				/* matches from matchExpr["CHILD"]
					1 type (only|nth|...)
					2 what (child|of-type)
					3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
					4 xn-component of xn+y argument ([+-]?\d*n|)
					5 sign of xn-component
					6 x of xn-component
					7 sign of y-component
					8 y of y-component
				*/
				match[1] = match[1].toLowerCase();
	
				if ( match[1].slice( 0, 3 ) === "nth" ) {
					// nth-* requires argument
					if ( !match[3] ) {
						Sizzle.error( match[0] );
					}
	
					// numeric x and y parameters for Expr.filter.CHILD
					// remember that false/true cast respectively to 0/1
					match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
					match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
	
				// other types prohibit arguments
				} else if ( match[3] ) {
					Sizzle.error( match[0] );
				}
	
				return match;
			},
	
			"PSEUDO": function( match ) {
				var excess,
					unquoted = !match[6] && match[2];
	
				if ( matchExpr["CHILD"].test( match[0] ) ) {
					return null;
				}
	
				// Accept quoted arguments as-is
				if ( match[3] ) {
					match[2] = match[4] || match[5] || "";
	
				// Strip excess characters from unquoted arguments
				} else if ( unquoted && rpseudo.test( unquoted ) &&
					// Get excess from tokenize (recursively)
					(excess = tokenize( unquoted, true )) &&
					// advance to the next closing parenthesis
					(excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
	
					// excess is a negative index
					match[0] = match[0].slice( 0, excess );
					match[2] = unquoted.slice( 0, excess );
				}
	
				// Return only captures needed by the pseudo filter method (type and argument)
				return match.slice( 0, 3 );
			}
		},
	
		filter: {
	
			"TAG": function( nodeNameSelector ) {
				var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
				return nodeNameSelector === "*" ?
					function() { return true; } :
					function( elem ) {
						return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
					};
			},
	
			"CLASS": function( className ) {
				var pattern = classCache[ className + " " ];
	
				return pattern ||
					(pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
					classCache( className, function( elem ) {
						return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" );
					});
			},
	
			"ATTR": function( name, operator, check ) {
				return function( elem ) {
					var result = Sizzle.attr( elem, name );
	
					if ( result == null ) {
						return operator === "!=";
					}
					if ( !operator ) {
						return true;
					}
	
					result += "";
	
					return operator === "=" ? result === check :
						operator === "!=" ? result !== check :
						operator === "^=" ? check && result.indexOf( check ) === 0 :
						operator === "*=" ? check && result.indexOf( check ) > -1 :
						operator === "$=" ? check && result.slice( -check.length ) === check :
						operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 :
						operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
						false;
				};
			},
	
			"CHILD": function( type, what, argument, first, last ) {
				var simple = type.slice( 0, 3 ) !== "nth",
					forward = type.slice( -4 ) !== "last",
					ofType = what === "of-type";
	
				return first === 1 && last === 0 ?
	
					// Shortcut for :nth-*(n)
					function( elem ) {
						return !!elem.parentNode;
					} :
	
					function( elem, context, xml ) {
						var cache, uniqueCache, outerCache, node, nodeIndex, start,
							dir = simple !== forward ? "nextSibling" : "previousSibling",
							parent = elem.parentNode,
							name = ofType && elem.nodeName.toLowerCase(),
							useCache = !xml && !ofType,
							diff = false;
	
						if ( parent ) {
	
							// :(first|last|only)-(child|of-type)
							if ( simple ) {
								while ( dir ) {
									node = elem;
									while ( (node = node[ dir ]) ) {
										if ( ofType ?
											node.nodeName.toLowerCase() === name :
											node.nodeType === 1 ) {
	
											return false;
										}
									}
									// Reverse direction for :only-* (if we haven't yet done so)
									start = dir = type === "only" && !start && "nextSibling";
								}
								return true;
							}
	
							start = [ forward ? parent.firstChild : parent.lastChild ];
	
							// non-xml :nth-child(...) stores cache data on `parent`
							if ( forward && useCache ) {
	
								// Seek `elem` from a previously-cached index
	
								// ...in a gzip-friendly way
								node = parent;
								outerCache = node[ expando ] || (node[ expando ] = {});
	
								// Support: IE <9 only
								// Defend against cloned attroperties (jQuery gh-1709)
								uniqueCache = outerCache[ node.uniqueID ] ||
									(outerCache[ node.uniqueID ] = {});
	
								cache = uniqueCache[ type ] || [];
								nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
								diff = nodeIndex && cache[ 2 ];
								node = nodeIndex && parent.childNodes[ nodeIndex ];
	
								while ( (node = ++nodeIndex && node && node[ dir ] ||
	
									// Fallback to seeking `elem` from the start
									(diff = nodeIndex = 0) || start.pop()) ) {
	
									// When found, cache indexes on `parent` and break
									if ( node.nodeType === 1 && ++diff && node === elem ) {
										uniqueCache[ type ] = [ dirruns, nodeIndex, diff ];
										break;
									}
								}
	
							} else {
								// Use previously-cached element index if available
								if ( useCache ) {
									// ...in a gzip-friendly way
									node = elem;
									outerCache = node[ expando ] || (node[ expando ] = {});
	
									// Support: IE <9 only
									// Defend against cloned attroperties (jQuery gh-1709)
									uniqueCache = outerCache[ node.uniqueID ] ||
										(outerCache[ node.uniqueID ] = {});
	
									cache = uniqueCache[ type ] || [];
									nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
									diff = nodeIndex;
								}
	
								// xml :nth-child(...)
								// or :nth-last-child(...) or :nth(-last)?-of-type(...)
								if ( diff === false ) {
									// Use the same loop as above to seek `elem` from the start
									while ( (node = ++nodeIndex && node && node[ dir ] ||
										(diff = nodeIndex = 0) || start.pop()) ) {
	
										if ( ( ofType ?
											node.nodeName.toLowerCase() === name :
											node.nodeType === 1 ) &&
											++diff ) {
	
											// Cache the index of each encountered element
											if ( useCache ) {
												outerCache = node[ expando ] || (node[ expando ] = {});
	
												// Support: IE <9 only
												// Defend against cloned attroperties (jQuery gh-1709)
												uniqueCache = outerCache[ node.uniqueID ] ||
													(outerCache[ node.uniqueID ] = {});
	
												uniqueCache[ type ] = [ dirruns, diff ];
											}
	
											if ( node === elem ) {
												break;
											}
										}
									}
								}
							}
	
							// Incorporate the offset, then check against cycle size
							diff -= last;
							return diff === first || ( diff % first === 0 && diff / first >= 0 );
						}
					};
			},
	
			"PSEUDO": function( pseudo, argument ) {
				// pseudo-class names are case-insensitive
				// http://www.w3.org/TR/selectors/#pseudo-classes
				// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
				// Remember that setFilters inherits from pseudos
				var args,
					fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
						Sizzle.error( "unsupported pseudo: " + pseudo );
	
				// The user may use createPseudo to indicate that
				// arguments are needed to create the filter function
				// just as Sizzle does
				if ( fn[ expando ] ) {
					return fn( argument );
				}
	
				// But maintain support for old signatures
				if ( fn.length > 1 ) {
					args = [ pseudo, pseudo, "", argument ];
					return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
						markFunction(function( seed, matches ) {
							var idx,
								matched = fn( seed, argument ),
								i = matched.length;
							while ( i-- ) {
								idx = indexOf( seed, matched[i] );
								seed[ idx ] = !( matches[ idx ] = matched[i] );
							}
						}) :
						function( elem ) {
							return fn( elem, 0, args );
						};
				}
	
				return fn;
			}
		},
	
		pseudos: {
			// Potentially complex pseudos
			"not": markFunction(function( selector ) {
				// Trim the selector passed to compile
				// to avoid treating leading and trailing
				// spaces as combinators
				var input = [],
					results = [],
					matcher = compile( selector.replace( rtrim, "$1" ) );
	
				return matcher[ expando ] ?
					markFunction(function( seed, matches, context, xml ) {
						var elem,
							unmatched = matcher( seed, null, xml, [] ),
							i = seed.length;
	
						// Match elements unmatched by `matcher`
						while ( i-- ) {
							if ( (elem = unmatched[i]) ) {
								seed[i] = !(matches[i] = elem);
							}
						}
					}) :
					function( elem, context, xml ) {
						input[0] = elem;
						matcher( input, null, xml, results );
						// Don't keep the element (issue #299)
						input[0] = null;
						return !results.pop();
					};
			}),
	
			"has": markFunction(function( selector ) {
				return function( elem ) {
					return Sizzle( selector, elem ).length > 0;
				};
			}),
	
			"contains": markFunction(function( text ) {
				text = text.replace( runescape, funescape );
				return function( elem ) {
					return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
				};
			}),
	
			// "Whether an element is represented by a :lang() selector
			// is based solely on the element's language value
			// being equal to the identifier C,
			// or beginning with the identifier C immediately followed by "-".
			// The matching of C against the element's language value is performed case-insensitively.
			// The identifier C does not have to be a valid language name."
			// http://www.w3.org/TR/selectors/#lang-pseudo
			"lang": markFunction( function( lang ) {
				// lang value must be a valid identifier
				if ( !ridentifier.test(lang || "") ) {
					Sizzle.error( "unsupported lang: " + lang );
				}
				lang = lang.replace( runescape, funescape ).toLowerCase();
				return function( elem ) {
					var elemLang;
					do {
						if ( (elemLang = documentIsHTML ?
							elem.lang :
							elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) {
	
							elemLang = elemLang.toLowerCase();
							return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
						}
					} while ( (elem = elem.parentNode) && elem.nodeType === 1 );
					return false;
				};
			}),
	
			// Miscellaneous
			"target": function( elem ) {
				var hash = window.location && window.location.hash;
				return hash && hash.slice( 1 ) === elem.id;
			},
	
			"root": function( elem ) {
				return elem === docElem;
			},
	
			"focus": function( elem ) {
				return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
			},
	
			// Boolean properties
			"enabled": createDisabledPseudo( false ),
			"disabled": createDisabledPseudo( true ),
	
			"checked": function( elem ) {
				// In CSS3, :checked should return both checked and selected elements
				// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
				var nodeName = elem.nodeName.toLowerCase();
				return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
			},
	
			"selected": function( elem ) {
				// Accessing this property makes selected-by-default
				// options in Safari work properly
				if ( elem.parentNode ) {
					elem.parentNode.selectedIndex;
				}
	
				return elem.selected === true;
			},
	
			// Contents
			"empty": function( elem ) {
				// http://www.w3.org/TR/selectors/#empty-pseudo
				// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
				//   but not by others (comment: 8; processing instruction: 7; etc.)
				// nodeType < 6 works because attributes (2) do not appear as children
				for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
					if ( elem.nodeType < 6 ) {
						return false;
					}
				}
				return true;
			},
	
			"parent": function( elem ) {
				return !Expr.pseudos["empty"]( elem );
			},
	
			// Element/input types
			"header": function( elem ) {
				return rheader.test( elem.nodeName );
			},
	
			"input": function( elem ) {
				return rinputs.test( elem.nodeName );
			},
	
			"button": function( elem ) {
				var name = elem.nodeName.toLowerCase();
				return name === "input" && elem.type === "button" || name === "button";
			},
	
			"text": function( elem ) {
				var attr;
				return elem.nodeName.toLowerCase() === "input" &&
					elem.type === "text" &&
	
					// Support: IE<8
					// New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
					( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" );
			},
	
			// Position-in-collection
			"first": createPositionalPseudo(function() {
				return [ 0 ];
			}),
	
			"last": createPositionalPseudo(function( matchIndexes, length ) {
				return [ length - 1 ];
			}),
	
			"eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
				return [ argument < 0 ? argument + length : argument ];
			}),
	
			"even": createPositionalPseudo(function( matchIndexes, length ) {
				var i = 0;
				for ( ; i < length; i += 2 ) {
					matchIndexes.push( i );
				}
				return matchIndexes;
			}),
	
			"odd": createPositionalPseudo(function( matchIndexes, length ) {
				var i = 1;
				for ( ; i < length; i += 2 ) {
					matchIndexes.push( i );
				}
				return matchIndexes;
			}),
	
			"lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
				var i = argument < 0 ? argument + length : argument;
				for ( ; --i >= 0; ) {
					matchIndexes.push( i );
				}
				return matchIndexes;
			}),
	
			"gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
				var i = argument < 0 ? argument + length : argument;
				for ( ; ++i < length; ) {
					matchIndexes.push( i );
				}
				return matchIndexes;
			})
		}
	};
	
	Expr.pseudos["nth"] = Expr.pseudos["eq"];
	
	// Add button/input type pseudos
	for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
		Expr.pseudos[ i ] = createInputPseudo( i );
	}
	for ( i in { submit: true, reset: true } ) {
		Expr.pseudos[ i ] = createButtonPseudo( i );
	}
	
	// Easy API for creating new setFilters
	function setFilters() {}
	setFilters.prototype = Expr.filters = Expr.pseudos;
	Expr.setFilters = new setFilters();
	
	tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
		var matched, match, tokens, type,
			soFar, groups, preFilters,
			cached = tokenCache[ selector + " " ];
	
		if ( cached ) {
			return parseOnly ? 0 : cached.slice( 0 );
		}
	
		soFar = selector;
		groups = [];
		preFilters = Expr.preFilter;
	
		while ( soFar ) {
	
			// Comma and first run
			if ( !matched || (match = rcomma.exec( soFar )) ) {
				if ( match ) {
					// Don't consume trailing commas as valid
					soFar = soFar.slice( match[0].length ) || soFar;
				}
				groups.push( (tokens = []) );
			}
	
			matched = false;
	
			// Combinators
			if ( (match = rcombinators.exec( soFar )) ) {
				matched = match.shift();
				tokens.push({
					value: matched,
					// Cast descendant combinators to space
					type: match[0].replace( rtrim, " " )
				});
				soFar = soFar.slice( matched.length );
			}
	
			// Filters
			for ( type in Expr.filter ) {
				if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
					(match = preFilters[ type ]( match ))) ) {
					matched = match.shift();
					tokens.push({
						value: matched,
						type: type,
						matches: match
					});
					soFar = soFar.slice( matched.length );
				}
			}
	
			if ( !matched ) {
				break;
			}
		}
	
		// Return the length of the invalid excess
		// if we're just parsing
		// Otherwise, throw an error or return tokens
		return parseOnly ?
			soFar.length :
			soFar ?
				Sizzle.error( selector ) :
				// Cache the tokens
				tokenCache( selector, groups ).slice( 0 );
	};
	
	function toSelector( tokens ) {
		var i = 0,
			len = tokens.length,
			selector = "";
		for ( ; i < len; i++ ) {
			selector += tokens[i].value;
		}
		return selector;
	}
	
	function addCombinator( matcher, combinator, base ) {
		var dir = combinator.dir,
			skip = combinator.next,
			key = skip || dir,
			checkNonElements = base && key === "parentNode",
			doneName = done++;
	
		return combinator.first ?
			// Check against closest ancestor/preceding element
			function( elem, context, xml ) {
				while ( (elem = elem[ dir ]) ) {
					if ( elem.nodeType === 1 || checkNonElements ) {
						return matcher( elem, context, xml );
					}
				}
				return false;
			} :
	
			// Check against all ancestor/preceding elements
			function( elem, context, xml ) {
				var oldCache, uniqueCache, outerCache,
					newCache = [ dirruns, doneName ];
	
				// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching
				if ( xml ) {
					while ( (elem = elem[ dir ]) ) {
						if ( elem.nodeType === 1 || checkNonElements ) {
							if ( matcher( elem, context, xml ) ) {
								return true;
							}
						}
					}
				} else {
					while ( (elem = elem[ dir ]) ) {
						if ( elem.nodeType === 1 || checkNonElements ) {
							outerCache = elem[ expando ] || (elem[ expando ] = {});
	
							// Support: IE <9 only
							// Defend against cloned attroperties (jQuery gh-1709)
							uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});
	
							if ( skip && skip === elem.nodeName.toLowerCase() ) {
								elem = elem[ dir ] || elem;
							} else if ( (oldCache = uniqueCache[ key ]) &&
								oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
	
								// Assign to newCache so results back-propagate to previous elements
								return (newCache[ 2 ] = oldCache[ 2 ]);
							} else {
								// Reuse newcache so results back-propagate to previous elements
								uniqueCache[ key ] = newCache;
	
								// A match means we're done; a fail means we have to keep checking
								if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {
									return true;
								}
							}
						}
					}
				}
				return false;
			};
	}
	
	function elementMatcher( matchers ) {
		return matchers.length > 1 ?
			function( elem, context, xml ) {
				var i = matchers.length;
				while ( i-- ) {
					if ( !matchers[i]( elem, context, xml ) ) {
						return false;
					}
				}
				return true;
			} :
			matchers[0];
	}
	
	function multipleContexts( selector, contexts, results ) {
		var i = 0,
			len = contexts.length;
		for ( ; i < len; i++ ) {
			Sizzle( selector, contexts[i], results );
		}
		return results;
	}
	
	function condense( unmatched, map, filter, context, xml ) {
		var elem,
			newUnmatched = [],
			i = 0,
			len = unmatched.length,
			mapped = map != null;
	
		for ( ; i < len; i++ ) {
			if ( (elem = unmatched[i]) ) {
				if ( !filter || filter( elem, context, xml ) ) {
					newUnmatched.push( elem );
					if ( mapped ) {
						map.push( i );
					}
				}
			}
		}
	
		return newUnmatched;
	}
	
	function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
		if ( postFilter && !postFilter[ expando ] ) {
			postFilter = setMatcher( postFilter );
		}
		if ( postFinder && !postFinder[ expando ] ) {
			postFinder = setMatcher( postFinder, postSelector );
		}
		return markFunction(function( seed, results, context, xml ) {
			var temp, i, elem,
				preMap = [],
				postMap = [],
				preexisting = results.length,
	
				// Get initial elements from seed or context
				elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
	
				// Prefilter to get matcher input, preserving a map for seed-results synchronization
				matcherIn = preFilter && ( seed || !selector ) ?
					condense( elems, preMap, preFilter, context, xml ) :
					elems,
	
				matcherOut = matcher ?
					// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
					postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
	
						// ...intermediate processing is necessary
						[] :
	
						// ...otherwise use results directly
						results :
					matcherIn;
	
			// Find primary matches
			if ( matcher ) {
				matcher( matcherIn, matcherOut, context, xml );
			}
	
			// Apply postFilter
			if ( postFilter ) {
				temp = condense( matcherOut, postMap );
				postFilter( temp, [], context, xml );
	
				// Un-match failing elements by moving them back to matcherIn
				i = temp.length;
				while ( i-- ) {
					if ( (elem = temp[i]) ) {
						matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
					}
				}
			}
	
			if ( seed ) {
				if ( postFinder || preFilter ) {
					if ( postFinder ) {
						// Get the final matcherOut by condensing this intermediate into postFinder contexts
						temp = [];
						i = matcherOut.length;
						while ( i-- ) {
							if ( (elem = matcherOut[i]) ) {
								// Restore matcherIn since elem is not yet a final match
								temp.push( (matcherIn[i] = elem) );
							}
						}
						postFinder( null, (matcherOut = []), temp, xml );
					}
	
					// Move matched elements from seed to results to keep them synchronized
					i = matcherOut.length;
					while ( i-- ) {
						if ( (elem = matcherOut[i]) &&
							(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {
	
							seed[temp] = !(results[temp] = elem);
						}
					}
				}
	
			// Add elements to results, through postFinder if defined
			} else {
				matcherOut = condense(
					matcherOut === results ?
						matcherOut.splice( preexisting, matcherOut.length ) :
						matcherOut
				);
				if ( postFinder ) {
					postFinder( null, results, matcherOut, xml );
				} else {
					push.apply( results, matcherOut );
				}
			}
		});
	}
	
	function matcherFromTokens( tokens ) {
		var checkContext, matcher, j,
			len = tokens.length,
			leadingRelative = Expr.relative[ tokens[0].type ],
			implicitRelative = leadingRelative || Expr.relative[" "],
			i = leadingRelative ? 1 : 0,
	
			// The foundational matcher ensures that elements are reachable from top-level context(s)
			matchContext = addCombinator( function( elem ) {
				return elem === checkContext;
			}, implicitRelative, true ),
			matchAnyContext = addCombinator( function( elem ) {
				return indexOf( checkContext, elem ) > -1;
			}, implicitRelative, true ),
			matchers = [ function( elem, context, xml ) {
				var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
					(checkContext = context).nodeType ?
						matchContext( elem, context, xml ) :
						matchAnyContext( elem, context, xml ) );
				// Avoid hanging onto element (issue #299)
				checkContext = null;
				return ret;
			} ];
	
		for ( ; i < len; i++ ) {
			if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
				matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
			} else {
				matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
	
				// Return special upon seeing a positional matcher
				if ( matcher[ expando ] ) {
					// Find the next relative operator (if any) for proper handling
					j = ++i;
					for ( ; j < len; j++ ) {
						if ( Expr.relative[ tokens[j].type ] ) {
							break;
						}
					}
					return setMatcher(
						i > 1 && elementMatcher( matchers ),
						i > 1 && toSelector(
							// If the preceding token was a descendant combinator, insert an implicit any-element `*`
							tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })
						).replace( rtrim, "$1" ),
						matcher,
						i < j && matcherFromTokens( tokens.slice( i, j ) ),
						j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
						j < len && toSelector( tokens )
					);
				}
				matchers.push( matcher );
			}
		}
	
		return elementMatcher( matchers );
	}
	
	function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
		var bySet = setMatchers.length > 0,
			byElement = elementMatchers.length > 0,
			superMatcher = function( seed, context, xml, results, outermost ) {
				var elem, j, matcher,
					matchedCount = 0,
					i = "0",
					unmatched = seed && [],
					setMatched = [],
					contextBackup = outermostContext,
					// We must always have either seed elements or outermost context
					elems = seed || byElement && Expr.find["TAG"]( "*", outermost ),
					// Use integer dirruns iff this is the outermost matcher
					dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),
					len = elems.length;
	
				if ( outermost ) {
					outermostContext = context === document || context || outermost;
				}
	
				// Add elements passing elementMatchers directly to results
				// Support: IE<9, Safari
				// Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
				for ( ; i !== len && (elem = elems[i]) != null; i++ ) {
					if ( byElement && elem ) {
						j = 0;
						if ( !context && elem.ownerDocument !== document ) {
							setDocument( elem );
							xml = !documentIsHTML;
						}
						while ( (matcher = elementMatchers[j++]) ) {
							if ( matcher( elem, context || document, xml) ) {
								results.push( elem );
								break;
							}
						}
						if ( outermost ) {
							dirruns = dirrunsUnique;
						}
					}
	
					// Track unmatched elements for set filters
					if ( bySet ) {
						// They will have gone through all possible matchers
						if ( (elem = !matcher && elem) ) {
							matchedCount--;
						}
	
						// Lengthen the array for every element, matched or not
						if ( seed ) {
							unmatched.push( elem );
						}
					}
				}
	
				// `i` is now the count of elements visited above, and adding it to `matchedCount`
				// makes the latter nonnegative.
				matchedCount += i;
	
				// Apply set filters to unmatched elements
				// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`
				// equals `i`), unless we didn't visit _any_ elements in the above loop because we have
				// no element matchers and no seed.
				// Incrementing an initially-string "0" `i` allows `i` to remain a string only in that
				// case, which will result in a "00" `matchedCount` that differs from `i` but is also
				// numerically zero.
				if ( bySet && i !== matchedCount ) {
					j = 0;
					while ( (matcher = setMatchers[j++]) ) {
						matcher( unmatched, setMatched, context, xml );
					}
	
					if ( seed ) {
						// Reintegrate element matches to eliminate the need for sorting
						if ( matchedCount > 0 ) {
							while ( i-- ) {
								if ( !(unmatched[i] || setMatched[i]) ) {
									setMatched[i] = pop.call( results );
								}
							}
						}
	
						// Discard index placeholder values to get only actual matches
						setMatched = condense( setMatched );
					}
	
					// Add matches to results
					push.apply( results, setMatched );
	
					// Seedless set matches succeeding multiple successful matchers stipulate sorting
					if ( outermost && !seed && setMatched.length > 0 &&
						( matchedCount + setMatchers.length ) > 1 ) {
	
						Sizzle.uniqueSort( results );
					}
				}
	
				// Override manipulation of globals by nested matchers
				if ( outermost ) {
					dirruns = dirrunsUnique;
					outermostContext = contextBackup;
				}
	
				return unmatched;
			};
	
		return bySet ?
			markFunction( superMatcher ) :
			superMatcher;
	}
	
	compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
		var i,
			setMatchers = [],
			elementMatchers = [],
			cached = compilerCache[ selector + " " ];
	
		if ( !cached ) {
			// Generate a function of recursive functions that can be used to check each element
			if ( !match ) {
				match = tokenize( selector );
			}
			i = match.length;
			while ( i-- ) {
				cached = matcherFromTokens( match[i] );
				if ( cached[ expando ] ) {
					setMatchers.push( cached );
				} else {
					elementMatchers.push( cached );
				}
			}
	
			// Cache the compiled function
			cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
	
			// Save selector and tokenization
			cached.selector = selector;
		}
		return cached;
	};
	
	/**
	 * A low-level selection function that works with Sizzle's compiled
	 *  selector functions
	 * @param {String|Function} selector A selector or a pre-compiled
	 *  selector function built with Sizzle.compile
	 * @param {Element} context
	 * @param {Array} [results]
	 * @param {Array} [seed] A set of elements to match against
	 */
	select = Sizzle.select = function( selector, context, results, seed ) {
		var i, tokens, token, type, find,
			compiled = typeof selector === "function" && selector,
			match = !seed && tokenize( (selector = compiled.selector || selector) );
	
		results = results || [];
	
		// Try to minimize operations if there is only one selector in the list and no seed
		// (the latter of which guarantees us context)
		if ( match.length === 1 ) {
	
			// Reduce context if the leading compound selector is an ID
			tokens = match[0] = match[0].slice( 0 );
			if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
					context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) {
	
				context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];
				if ( !context ) {
					return results;
	
				// Precompiled matchers will still verify ancestry, so step up a level
				} else if ( compiled ) {
					context = context.parentNode;
				}
	
				selector = selector.slice( tokens.shift().value.length );
			}
	
			// Fetch a seed set for right-to-left matching
			i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
			while ( i-- ) {
				token = tokens[i];
	
				// Abort if we hit a combinator
				if ( Expr.relative[ (type = token.type) ] ) {
					break;
				}
				if ( (find = Expr.find[ type ]) ) {
					// Search, expanding context for leading sibling combinators
					if ( (seed = find(
						token.matches[0].replace( runescape, funescape ),
						rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context
					)) ) {
	
						// If seed is empty or no tokens remain, we can return early
						tokens.splice( i, 1 );
						selector = seed.length && toSelector( tokens );
						if ( !selector ) {
							push.apply( results, seed );
							return results;
						}
	
						break;
					}
				}
			}
		}
	
		// Compile and execute a filtering function if one is not provided
		// Provide `match` to avoid retokenization if we modified the selector above
		( compiled || compile( selector, match ) )(
			seed,
			context,
			!documentIsHTML,
			results,
			!context || rsibling.test( selector ) && testContext( context.parentNode ) || context
		);
		return results;
	};
	
	// One-time assignments
	
	// Sort stability
	support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;
	
	// Support: Chrome 14-35+
	// Always assume duplicates if they aren't passed to the comparison function
	support.detectDuplicates = !!hasDuplicate;
	
	// Initialize against the default document
	setDocument();
	
	// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
	// Detached nodes confoundingly follow *each other*
	support.sortDetached = assert(function( el ) {
		// Should return 1, but returns 4 (following)
		return el.compareDocumentPosition( document.createElement("fieldset") ) & 1;
	});
	
	// Support: IE<8
	// Prevent attribute/property "interpolation"
	// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
	if ( !assert(function( el ) {
		el.innerHTML = "<a href='#'></a>";
		return el.firstChild.getAttribute("href") === "#" ;
	}) ) {
		addHandle( "type|href|height|width", function( elem, name, isXML ) {
			if ( !isXML ) {
				return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
			}
		});
	}
	
	// Support: IE<9
	// Use defaultValue in place of getAttribute("value")
	if ( !support.attributes || !assert(function( el ) {
		el.innerHTML = "<input/>";
		el.firstChild.setAttribute( "value", "" );
		return el.firstChild.getAttribute( "value" ) === "";
	}) ) {
		addHandle( "value", function( elem, name, isXML ) {
			if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
				return elem.defaultValue;
			}
		});
	}
	
	// Support: IE<9
	// Use getAttributeNode to fetch booleans when getAttribute lies
	if ( !assert(function( el ) {
		return el.getAttribute("disabled") == null;
	}) ) {
		addHandle( booleans, function( elem, name, isXML ) {
			var val;
			if ( !isXML ) {
				return elem[ name ] === true ? name.toLowerCase() :
						(val = elem.getAttributeNode( name )) && val.specified ?
						val.value :
					null;
			}
		});
	}
	
	return Sizzle;
	
	})( window );
	
	
	
	jQuery.find = Sizzle;
	jQuery.expr = Sizzle.selectors;
	
	// Deprecated
	jQuery.expr[ ":" ] = jQuery.expr.pseudos;
	jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;
	jQuery.text = Sizzle.getText;
	jQuery.isXMLDoc = Sizzle.isXML;
	jQuery.contains = Sizzle.contains;
	jQuery.escapeSelector = Sizzle.escape;
	
	
	
	
	var dir = function( elem, dir, until ) {
		var matched = [],
			truncate = until !== undefined;
	
		while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {
			if ( elem.nodeType === 1 ) {
				if ( truncate && jQuery( elem ).is( until ) ) {
					break;
				}
				matched.push( elem );
			}
		}
		return matched;
	};
	
	
	var siblings = function( n, elem ) {
		var matched = [];
	
		for ( ; n; n = n.nextSibling ) {
			if ( n.nodeType === 1 && n !== elem ) {
				matched.push( n );
			}
		}
	
		return matched;
	};
	
	
	var rneedsContext = jQuery.expr.match.needsContext;
	
	
	
	function nodeName( elem, name ) {
	
	  return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
	
	};
	var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i );
	
	
	
	// Implement the identical functionality for filter and not
	function winnow( elements, qualifier, not ) {
		if ( isFunction( qualifier ) ) {
			return jQuery.grep( elements, function( elem, i ) {
				return !!qualifier.call( elem, i, elem ) !== not;
			} );
		}
	
		// Single element
		if ( qualifier.nodeType ) {
			return jQuery.grep( elements, function( elem ) {
				return ( elem === qualifier ) !== not;
			} );
		}
	
		// Arraylike of elements (jQuery, arguments, Array)
		if ( typeof qualifier !== "string" ) {
			return jQuery.grep( elements, function( elem ) {
				return ( indexOf.call( qualifier, elem ) > -1 ) !== not;
			} );
		}
	
		// Filtered directly for both simple and complex selectors
		return jQuery.filter( qualifier, elements, not );
	}
	
	jQuery.filter = function( expr, elems, not ) {
		var elem = elems[ 0 ];
	
		if ( not ) {
			expr = ":not(" + expr + ")";
		}
	
		if ( elems.length === 1 && elem.nodeType === 1 ) {
			return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];
		}
	
		return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
			return elem.nodeType === 1;
		} ) );
	};
	
	jQuery.fn.extend( {
		find: function( selector ) {
			var i, ret,
				len = this.length,
				self = this;
	
			if ( typeof selector !== "string" ) {
				return this.pushStack( jQuery( selector ).filter( function() {
					for ( i = 0; i < len; i++ ) {
						if ( jQuery.contains( self[ i ], this ) ) {
							return true;
						}
					}
				} ) );
			}
	
			ret = this.pushStack( [] );
	
			for ( i = 0; i < len; i++ ) {
				jQuery.find( selector, self[ i ], ret );
			}
	
			return len > 1 ? jQuery.uniqueSort( ret ) : ret;
		},
		filter: function( selector ) {
			return this.pushStack( winnow( this, selector || [], false ) );
		},
		not: function( selector ) {
			return this.pushStack( winnow( this, selector || [], true ) );
		},
		is: function( selector ) {
			return !!winnow(
				this,
	
				// If this is a positional/relative selector, check membership in the returned set
				// so $("p:first").is("p:last") won't return true for a doc with two "p".
				typeof selector === "string" && rneedsContext.test( selector ) ?
					jQuery( selector ) :
					selector || [],
				false
			).length;
		}
	} );
	
	
	// Initialize a jQuery object
	
	
	// A central reference to the root jQuery(document)
	var rootjQuery,
	
		// A simple way to check for HTML strings
		// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
		// Strict HTML recognition (#11290: must start with <)
		// Shortcut simple #id case for speed
		rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,
	
		init = jQuery.fn.init = function( selector, context, root ) {
			var match, elem;
	
			// HANDLE: $(""), $(null), $(undefined), $(false)
			if ( !selector ) {
				return this;
			}
	
			// Method init() accepts an alternate rootjQuery
			// so migrate can support jQuery.sub (gh-2101)
			root = root || rootjQuery;
	
			// Handle HTML strings
			if ( typeof selector === "string" ) {
				if ( selector[ 0 ] === "<" &&
					selector[ selector.length - 1 ] === ">" &&
					selector.length >= 3 ) {
	
					// Assume that strings that start and end with <> are HTML and skip the regex check
					match = [ null, selector, null ];
	
				} else {
					match = rquickExpr.exec( selector );
				}
	
				// Match html or make sure no context is specified for #id
				if ( match && ( match[ 1 ] || !context ) ) {
	
					// HANDLE: $(html) -> $(array)
					if ( match[ 1 ] ) {
						context = context instanceof jQuery ? context[ 0 ] : context;
	
						// Option to run scripts is true for back-compat
						// Intentionally let the error be thrown if parseHTML is not present
						jQuery.merge( this, jQuery.parseHTML(
							match[ 1 ],
							context && context.nodeType ? context.ownerDocument || context : document,
							true
						) );
	
						// HANDLE: $(html, props)
						if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {
							for ( match in context ) {
	
								// Properties of context are called as methods if possible
								if ( isFunction( this[ match ] ) ) {
									this[ match ]( context[ match ] );
	
								// ...and otherwise set as attributes
								} else {
									this.attr( match, context[ match ] );
								}
							}
						}
	
						return this;
	
					// HANDLE: $(#id)
					} else {
						elem = document.getElementById( match[ 2 ] );
	
						if ( elem ) {
	
							// Inject the element directly into the jQuery object
							this[ 0 ] = elem;
							this.length = 1;
						}
						return this;
					}
	
				// HANDLE: $(expr, $(...))
				} else if ( !context || context.jquery ) {
					return ( context || root ).find( selector );
	
				// HANDLE: $(expr, context)
				// (which is just equivalent to: $(context).find(expr)
				} else {
					return this.constructor( context ).find( selector );
				}
	
			// HANDLE: $(DOMElement)
			} else if ( selector.nodeType ) {
				this[ 0 ] = selector;
				this.length = 1;
				return this;
	
			// HANDLE: $(function)
			// Shortcut for document ready
			} else if ( isFunction( selector ) ) {
				return root.ready !== undefined ?
					root.ready( selector ) :
	
					// Execute immediately if ready is not present
					selector( jQuery );
			}
	
			return jQuery.makeArray( selector, this );
		};
	
	// Give the init function the jQuery prototype for later instantiation
	init.prototype = jQuery.fn;
	
	// Initialize central reference
	rootjQuery = jQuery( document );
	
	
	var rparentsprev = /^(?:parents|prev(?:Until|All))/,
	
		// Methods guaranteed to produce a unique set when starting from a unique set
		guaranteedUnique = {
			children: true,
			contents: true,
			next: true,
			prev: true
		};
	
	jQuery.fn.extend( {
		has: function( target ) {
			var targets = jQuery( target, this ),
				l = targets.length;
	
			return this.filter( function() {
				var i = 0;
				for ( ; i < l; i++ ) {
					if ( jQuery.contains( this, targets[ i ] ) ) {
						return true;
					}
				}
			} );
		},
	
		closest: function( selectors, context ) {
			var cur,
				i = 0,
				l = this.length,
				matched = [],
				targets = typeof selectors !== "string" && jQuery( selectors );
	
			// Positional selectors never match, since there's no _selection_ context
			if ( !rneedsContext.test( selectors ) ) {
				for ( ; i < l; i++ ) {
					for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {
	
						// Always skip document fragments
						if ( cur.nodeType < 11 && ( targets ?
							targets.index( cur ) > -1 :
	
							// Don't pass non-elements to Sizzle
							cur.nodeType === 1 &&
								jQuery.find.matchesSelector( cur, selectors ) ) ) {
	
							matched.push( cur );
							break;
						}
					}
				}
			}
	
			return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );
		},
	
		// Determine the position of an element within the set
		index: function( elem ) {
	
			// No argument, return index in parent
			if ( !elem ) {
				return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;
			}
	
			// Index in selector
			if ( typeof elem === "string" ) {
				return indexOf.call( jQuery( elem ), this[ 0 ] );
			}
	
			// Locate the position of the desired element
			return indexOf.call( this,
	
				// If it receives a jQuery object, the first element is used
				elem.jquery ? elem[ 0 ] : elem
			);
		},
	
		add: function( selector, context ) {
			return this.pushStack(
				jQuery.uniqueSort(
					jQuery.merge( this.get(), jQuery( selector, context ) )
				)
			);
		},
	
		addBack: function( selector ) {
			return this.add( selector == null ?
				this.prevObject : this.prevObject.filter( selector )
			);
		}
	} );
	
	function sibling( cur, dir ) {
		while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}
		return cur;
	}
	
	jQuery.each( {
		parent: function( elem ) {
			var parent = elem.parentNode;
			return parent && parent.nodeType !== 11 ? parent : null;
		},
		parents: function( elem ) {
			return dir( elem, "parentNode" );
		},
		parentsUntil: function( elem, i, until ) {
			return dir( elem, "parentNode", until );
		},
		next: function( elem ) {
			return sibling( elem, "nextSibling" );
		},
		prev: function( elem ) {
			return sibling( elem, "previousSibling" );
		},
		nextAll: function( elem ) {
			return dir( elem, "nextSibling" );
		},
		prevAll: function( elem ) {
			return dir( elem, "previousSibling" );
		},
		nextUntil: function( elem, i, until ) {
			return dir( elem, "nextSibling", until );
		},
		prevUntil: function( elem, i, until ) {
			return dir( elem, "previousSibling", until );
		},
		siblings: function( elem ) {
			return siblings( ( elem.parentNode || {} ).firstChild, elem );
		},
		children: function( elem ) {
			return siblings( elem.firstChild );
		},
		contents: function( elem ) {
	        if ( nodeName( elem, "iframe" ) ) {
	            return elem.contentDocument;
	        }
	
	        // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only
	        // Treat the template element as a regular one in browsers that
	        // don't support it.
	        if ( nodeName( elem, "template" ) ) {
	            elem = elem.content || elem;
	        }
	
	        return jQuery.merge( [], elem.childNodes );
		}
	}, function( name, fn ) {
		jQuery.fn[ name ] = function( until, selector ) {
			var matched = jQuery.map( this, fn, until );
	
			if ( name.slice( -5 ) !== "Until" ) {
				selector = until;
			}
	
			if ( selector && typeof selector === "string" ) {
				matched = jQuery.filter( selector, matched );
			}
	
			if ( this.length > 1 ) {
	
				// Remove duplicates
				if ( !guaranteedUnique[ name ] ) {
					jQuery.uniqueSort( matched );
				}
	
				// Reverse order for parents* and prev-derivatives
				if ( rparentsprev.test( name ) ) {
					matched.reverse();
				}
			}
	
			return this.pushStack( matched );
		};
	} );
	var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g );
	
	
	
	// Convert String-formatted options into Object-formatted ones
	function createOptions( options ) {
		var object = {};
		jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {
			object[ flag ] = true;
		} );
		return object;
	}
	
	/*
	 * Create a callback list using the following parameters:
	 *
	 *	options: an optional list of space-separated options that will change how
	 *			the callback list behaves or a more traditional option object
	 *
	 * By default a callback list will act like an event callback list and can be
	 * "fired" multiple times.
	 *
	 * Possible options:
	 *
	 *	once:			will ensure the callback list can only be fired once (like a Deferred)
	 *
	 *	memory:			will keep track of previous values and will call any callback added
	 *					after the list has been fired right away with the latest "memorized"
	 *					values (like a Deferred)
	 *
	 *	unique:			will ensure a callback can only be added once (no duplicate in the list)
	 *
	 *	stopOnFalse:	interrupt callings when a callback returns false
	 *
	 */
	jQuery.Callbacks = function( options ) {
	
		// Convert options from String-formatted to Object-formatted if needed
		// (we check in cache first)
		options = typeof options === "string" ?
			createOptions( options ) :
			jQuery.extend( {}, options );
	
		var // Flag to know if list is currently firing
			firing,
	
			// Last fire value for non-forgettable lists
			memory,
	
			// Flag to know if list was already fired
			fired,
	
			// Flag to prevent firing
			locked,
	
			// Actual callback list
			list = [],
	
			// Queue of execution data for repeatable lists
			queue = [],
	
			// Index of currently firing callback (modified by add/remove as needed)
			firingIndex = -1,
	
			// Fire callbacks
			fire = function() {
	
				// Enforce single-firing
				locked = locked || options.once;
	
				// Execute callbacks for all pending executions,
				// respecting firingIndex overrides and runtime changes
				fired = firing = true;
				for ( ; queue.length; firingIndex = -1 ) {
					memory = queue.shift();
					while ( ++firingIndex < list.length ) {
	
						// Run callback and check for early termination
						if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&
							options.stopOnFalse ) {
	
							// Jump to end and forget the data so .add doesn't re-fire
							firingIndex = list.length;
							memory = false;
						}
					}
				}
	
				// Forget the data if we're done with it
				if ( !options.memory ) {
					memory = false;
				}
	
				firing = false;
	
				// Clean up if we're done firing for good
				if ( locked ) {
	
					// Keep an empty list if we have data for future add calls
					if ( memory ) {
						list = [];
	
					// Otherwise, this object is spent
					} else {
						list = "";
					}
				}
			},
	
			// Actual Callbacks object
			self = {
	
				// Add a callback or a collection of callbacks to the list
				add: function() {
					if ( list ) {
	
						// If we have memory from a past run, we should fire after adding
						if ( memory && !firing ) {
							firingIndex = list.length - 1;
							queue.push( memory );
						}
	
						( function add( args ) {
							jQuery.each( args, function( _, arg ) {
								if ( isFunction( arg ) ) {
									if ( !options.unique || !self.has( arg ) ) {
										list.push( arg );
									}
								} else if ( arg && arg.length && toType( arg ) !== "string" ) {
	
									// Inspect recursively
									add( arg );
								}
							} );
						} )( arguments );
	
						if ( memory && !firing ) {
							fire();
						}
					}
					return this;
				},
	
				// Remove a callback from the list
				remove: function() {
					jQuery.each( arguments, function( _, arg ) {
						var index;
						while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
							list.splice( index, 1 );
	
							// Handle firing indexes
							if ( index <= firingIndex ) {
								firingIndex--;
							}
						}
					} );
					return this;
				},
	
				// Check if a given callback is in the list.
				// If no argument is given, return whether or not list has callbacks attached.
				has: function( fn ) {
					return fn ?
						jQuery.inArray( fn, list ) > -1 :
						list.length > 0;
				},
	
				// Remove all callbacks from the list
				empty: function() {
					if ( list ) {
						list = [];
					}
					return this;
				},
	
				// Disable .fire and .add
				// Abort any current/pending executions
				// Clear all callbacks and values
				disable: function() {
					locked = queue = [];
					list = memory = "";
					return this;
				},
				disabled: function() {
					return !list;
				},
	
				// Disable .fire
				// Also disable .add unless we have memory (since it would have no effect)
				// Abort any pending executions
				lock: function() {
					locked = queue = [];
					if ( !memory && !firing ) {
						list = memory = "";
					}
					return this;
				},
				locked: function() {
					return !!locked;
				},
	
				// Call all callbacks with the given context and arguments
				fireWith: function( context, args ) {
					if ( !locked ) {
						args = args || [];
						args = [ context, args.slice ? args.slice() : args ];
						queue.push( args );
						if ( !firing ) {
							fire();
						}
					}
					return this;
				},
	
				// Call all the callbacks with the given arguments
				fire: function() {
					self.fireWith( this, arguments );
					return this;
				},
	
				// To know if the callbacks have already been called at least once
				fired: function() {
					return !!fired;
				}
			};
	
		return self;
	};
	
	
	function Identity( v ) {
		return v;
	}
	function Thrower( ex ) {
		throw ex;
	}
	
	function adoptValue( value, resolve, reject, noValue ) {
		var method;
	
		try {
	
			// Check for promise aspect first to privilege synchronous behavior
			if ( value && isFunction( ( method = value.promise ) ) ) {
				method.call( value ).done( resolve ).fail( reject );
	
			// Other thenables
			} else if ( value && isFunction( ( method = value.then ) ) ) {
				method.call( value, resolve, reject );
	
			// Other non-thenables
			} else {
	
				// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:
				// * false: [ value ].slice( 0 ) => resolve( value )
				// * true: [ value ].slice( 1 ) => resolve()
				resolve.apply( undefined, [ value ].slice( noValue ) );
			}
	
		// For Promises/A+, convert exceptions into rejections
		// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in
		// Deferred#then to conditionally suppress rejection.
		} catch ( value ) {
	
			// Support: Android 4.0 only
			// Strict mode functions invoked without .call/.apply get global-object context
			reject.apply( undefined, [ value ] );
		}
	}
	
	jQuery.extend( {
	
		Deferred: function( func ) {
			var tuples = [
	
					// action, add listener, callbacks,
					// ... .then handlers, argument index, [final state]
					[ "notify", "progress", jQuery.Callbacks( "memory" ),
						jQuery.Callbacks( "memory" ), 2 ],
					[ "resolve", "done", jQuery.Callbacks( "once memory" ),
						jQuery.Callbacks( "once memory" ), 0, "resolved" ],
					[ "reject", "fail", jQuery.Callbacks( "once memory" ),
						jQuery.Callbacks( "once memory" ), 1, "rejected" ]
				],
				state = "pending",
				promise = {
					state: function() {
						return state;
					},
					always: function() {
						deferred.done( arguments ).fail( arguments );
						return this;
					},
					"catch": function( fn ) {
						return promise.then( null, fn );
					},
	
					// Keep pipe for back-compat
					pipe: function( /* fnDone, fnFail, fnProgress */ ) {
						var fns = arguments;
	
						return jQuery.Deferred( function( newDefer ) {
							jQuery.each( tuples, function( i, tuple ) {
	
								// Map tuples (progress, done, fail) to arguments (done, fail, progress)
								var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];
	
								// deferred.progress(function() { bind to newDefer or newDefer.notify })
								// deferred.done(function() { bind to newDefer or newDefer.resolve })
								// deferred.fail(function() { bind to newDefer or newDefer.reject })
								deferred[ tuple[ 1 ] ]( function() {
									var returned = fn && fn.apply( this, arguments );
									if ( returned && isFunction( returned.promise ) ) {
										returned.promise()
											.progress( newDefer.notify )
											.done( newDefer.resolve )
											.fail( newDefer.reject );
									} else {
										newDefer[ tuple[ 0 ] + "With" ](
											this,
											fn ? [ returned ] : arguments
										);
									}
								} );
							} );
							fns = null;
						} ).promise();
					},
					then: function( onFulfilled, onRejected, onProgress ) {
						var maxDepth = 0;
						function resolve( depth, deferred, handler, special ) {
							return function() {
								var that = this,
									args = arguments,
									mightThrow = function() {
										var returned, then;
	
										// Support: Promises/A+ section 2.3.3.3.3
										// https://promisesaplus.com/#point-59
										// Ignore double-resolution attempts
										if ( depth < maxDepth ) {
											return;
										}
	
										returned = handler.apply( that, args );
	
										// Support: Promises/A+ section 2.3.1
										// https://promisesaplus.com/#point-48
										if ( returned === deferred.promise() ) {
											throw new TypeError( "Thenable self-resolution" );
										}
	
										// Support: Promises/A+ sections 2.3.3.1, 3.5
										// https://promisesaplus.com/#point-54
										// https://promisesaplus.com/#point-75
										// Retrieve `then` only once
										then = returned &&
	
											// Support: Promises/A+ section 2.3.4
											// https://promisesaplus.com/#point-64
											// Only check objects and functions for thenability
											( typeof returned === "object" ||
												typeof returned === "function" ) &&
											returned.then;
	
										// Handle a returned thenable
										if ( isFunction( then ) ) {
	
											// Special processors (notify) just wait for resolution
											if ( special ) {
												then.call(
													returned,
													resolve( maxDepth, deferred, Identity, special ),
													resolve( maxDepth, deferred, Thrower, special )
												);
	
											// Normal processors (resolve) also hook into progress
											} else {
	
												// ...and disregard older resolution values
												maxDepth++;
	
												then.call(
													returned,
													resolve( maxDepth, deferred, Identity, special ),
													resolve( maxDepth, deferred, Thrower, special ),
													resolve( maxDepth, deferred, Identity,
														deferred.notifyWith )
												);
											}
	
										// Handle all other returned values
										} else {
	
											// Only substitute handlers pass on context
											// and multiple values (non-spec behavior)
											if ( handler !== Identity ) {
												that = undefined;
												args = [ returned ];
											}
	
											// Process the value(s)
											// Default process is resolve
											( special || deferred.resolveWith )( that, args );
										}
									},
	
									// Only normal processors (resolve) catch and reject exceptions
									process = special ?
										mightThrow :
										function() {
											try {
												mightThrow();
											} catch ( e ) {
	
												if ( jQuery.Deferred.exceptionHook ) {
													jQuery.Deferred.exceptionHook( e,
														process.stackTrace );
												}
	
												// Support: Promises/A+ section 2.3.3.3.4.1
												// https://promisesaplus.com/#point-61
												// Ignore post-resolution exceptions
												if ( depth + 1 >= maxDepth ) {
	
													// Only substitute handlers pass on context
													// and multiple values (non-spec behavior)
													if ( handler !== Thrower ) {
														that = undefined;
														args = [ e ];
													}
	
													deferred.rejectWith( that, args );
												}
											}
										};
	
								// Support: Promises/A+ section 2.3.3.3.1
								// https://promisesaplus.com/#point-57
								// Re-resolve promises immediately to dodge false rejection from
								// subsequent errors
								if ( depth ) {
									process();
								} else {
	
									// Call an optional hook to record the stack, in case of exception
									// since it's otherwise lost when execution goes async
									if ( jQuery.Deferred.getStackHook ) {
										process.stackTrace = jQuery.Deferred.getStackHook();
									}
									window.setTimeout( process );
								}
							};
						}
	
						return jQuery.Deferred( function( newDefer ) {
	
							// progress_handlers.add( ... )
							tuples[ 0 ][ 3 ].add(
								resolve(
									0,
									newDefer,
									isFunction( onProgress ) ?
										onProgress :
										Identity,
									newDefer.notifyWith
								)
							);
	
							// fulfilled_handlers.add( ... )
							tuples[ 1 ][ 3 ].add(
								resolve(
									0,
									newDefer,
									isFunction( onFulfilled ) ?
										onFulfilled :
										Identity
								)
							);
	
							// rejected_handlers.add( ... )
							tuples[ 2 ][ 3 ].add(
								resolve(
									0,
									newDefer,
									isFunction( onRejected ) ?
										onRejected :
										Thrower
								)
							);
						} ).promise();
					},
	
					// Get a promise for this deferred
					// If obj is provided, the promise aspect is added to the object
					promise: function( obj ) {
						return obj != null ? jQuery.extend( obj, promise ) : promise;
					}
				},
				deferred = {};
	
			// Add list-specific methods
			jQuery.each( tuples, function( i, tuple ) {
				var list = tuple[ 2 ],
					stateString = tuple[ 5 ];
	
				// promise.progress = list.add
				// promise.done = list.add
				// promise.fail = list.add
				promise[ tuple[ 1 ] ] = list.add;
	
				// Handle state
				if ( stateString ) {
					list.add(
						function() {
	
							// state = "resolved" (i.e., fulfilled)
							// state = "rejected"
							state = stateString;
						},
	
						// rejected_callbacks.disable
						// fulfilled_callbacks.disable
						tuples[ 3 - i ][ 2 ].disable,
	
						// rejected_handlers.disable
						// fulfilled_handlers.disable
						tuples[ 3 - i ][ 3 ].disable,
	
						// progress_callbacks.lock
						tuples[ 0 ][ 2 ].lock,
	
						// progress_handlers.lock
						tuples[ 0 ][ 3 ].lock
					);
				}
	
				// progress_handlers.fire
				// fulfilled_handlers.fire
				// rejected_handlers.fire
				list.add( tuple[ 3 ].fire );
	
				// deferred.notify = function() { deferred.notifyWith(...) }
				// deferred.resolve = function() { deferred.resolveWith(...) }
				// deferred.reject = function() { deferred.rejectWith(...) }
				deferred[ tuple[ 0 ] ] = function() {
					deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments );
					return this;
				};
	
				// deferred.notifyWith = list.fireWith
				// deferred.resolveWith = list.fireWith
				// deferred.rejectWith = list.fireWith
				deferred[ tuple[ 0 ] + "With" ] = list.fireWith;
			} );
	
			// Make the deferred a promise
			promise.promise( deferred );
	
			// Call given func if any
			if ( func ) {
				func.call( deferred, deferred );
			}
	
			// All done!
			return deferred;
		},
	
		// Deferred helper
		when: function( singleValue ) {
			var
	
				// count of uncompleted subordinates
				remaining = arguments.length,
	
				// count of unprocessed arguments
				i = remaining,
	
				// subordinate fulfillment data
				resolveContexts = Array( i ),
				resolveValues = slice.call( arguments ),
	
				// the master Deferred
				master = jQuery.Deferred(),
	
				// subordinate callback factory
				updateFunc = function( i ) {
					return function( value ) {
						resolveContexts[ i ] = this;
						resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
						if ( !( --remaining ) ) {
							master.resolveWith( resolveContexts, resolveValues );
						}
					};
				};
	
			// Single- and empty arguments are adopted like Promise.resolve
			if ( remaining <= 1 ) {
				adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject,
					!remaining );
	
				// Use .then() to unwrap secondary thenables (cf. gh-3000)
				if ( master.state() === "pending" ||
					isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {
	
					return master.then();
				}
			}
	
			// Multiple arguments are aggregated like Promise.all array elements
			while ( i-- ) {
				adoptValue( resolveValues[ i ], updateFunc( i ), master.reject );
			}
	
			return master.promise();
		}
	} );
	
	
	// These usually indicate a programmer mistake during development,
	// warn about them ASAP rather than swallowing them by default.
	var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;
	
	jQuery.Deferred.exceptionHook = function( error, stack ) {
	
		// Support: IE 8 - 9 only
		// Console exists when dev tools are open, which can happen at any time
		if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {
			window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack );
		}
	};
	
	
	
	
	jQuery.readyException = function( error ) {
		window.setTimeout( function() {
			throw error;
		} );
	};
	
	
	
	
	// The deferred used on DOM ready
	var readyList = jQuery.Deferred();
	
	jQuery.fn.ready = function( fn ) {
	
		readyList
			.then( fn )
	
			// Wrap jQuery.readyException in a function so that the lookup
			// happens at the time of error handling instead of callback
			// registration.
			.catch( function( error ) {
				jQuery.readyException( error );
			} );
	
		return this;
	};
	
	jQuery.extend( {
	
		// Is the DOM ready to be used? Set to true once it occurs.
		isReady: false,
	
		// A counter to track how many items to wait for before
		// the ready event fires. See #6781
		readyWait: 1,
	
		// Handle when the DOM is ready
		ready: function( wait ) {
	
			// Abort if there are pending holds or we're already ready
			if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
				return;
			}
	
			// Remember that the DOM is ready
			jQuery.isReady = true;
	
			// If a normal DOM Ready event fired, decrement, and wait if need be
			if ( wait !== true && --jQuery.readyWait > 0 ) {
				return;
			}
	
			// If there are functions bound, to execute
			readyList.resolveWith( document, [ jQuery ] );
		}
	} );
	
	jQuery.ready.then = readyList.then;
	
	// The ready event handler and self cleanup method
	function completed() {
		document.removeEventListener( "DOMContentLoaded", completed );
		window.removeEventListener( "load", completed );
		jQuery.ready();
	}
	
	// Catch cases where $(document).ready() is called
	// after the browser event has already occurred.
	// Support: IE <=9 - 10 only
	// Older IE sometimes signals "interactive" too soon
	if ( document.readyState === "complete" ||
		( document.readyState !== "loading" && !document.documentElement.doScroll ) ) {
	
		// Handle it asynchronously to allow scripts the opportunity to delay ready
		window.setTimeout( jQuery.ready );
	
	} else {
	
		// Use the handy event callback
		document.addEventListener( "DOMContentLoaded", completed );
	
		// A fallback to window.onload, that will always work
		window.addEventListener( "load", completed );
	}
	
	
	
	
	// Multifunctional method to get and set values of a collection
	// The value/s can optionally be executed if it's a function
	var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
		var i = 0,
			len = elems.length,
			bulk = key == null;
	
		// Sets many values
		if ( toType( key ) === "object" ) {
			chainable = true;
			for ( i in key ) {
				access( elems, fn, i, key[ i ], true, emptyGet, raw );
			}
	
		// Sets one value
		} else if ( value !== undefined ) {
			chainable = true;
	
			if ( !isFunction( value ) ) {
				raw = true;
			}
	
			if ( bulk ) {
	
				// Bulk operations run against the entire set
				if ( raw ) {
					fn.call( elems, value );
					fn = null;
	
				// ...except when executing function values
				} else {
					bulk = fn;
					fn = function( elem, key, value ) {
						return bulk.call( jQuery( elem ), value );
					};
				}
			}
	
			if ( fn ) {
				for ( ; i < len; i++ ) {
					fn(
						elems[ i ], key, raw ?
						value :
						value.call( elems[ i ], i, fn( elems[ i ], key ) )
					);
				}
			}
		}
	
		if ( chainable ) {
			return elems;
		}
	
		// Gets
		if ( bulk ) {
			return fn.call( elems );
		}
	
		return len ? fn( elems[ 0 ], key ) : emptyGet;
	};
	
	
	// Matches dashed string for camelizing
	var rmsPrefix = /^-ms-/,
		rdashAlpha = /-([a-z])/g;
	
	// Used by camelCase as callback to replace()
	function fcamelCase( all, letter ) {
		return letter.toUpperCase();
	}
	
	// Convert dashed to camelCase; used by the css and data modules
	// Support: IE <=9 - 11, Edge 12 - 15
	// Microsoft forgot to hump their vendor prefix (#9572)
	function camelCase( string ) {
		return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
	}
	var acceptData = function( owner ) {
	
		// Accepts only:
		//  - Node
		//    - Node.ELEMENT_NODE
		//    - Node.DOCUMENT_NODE
		//  - Object
		//    - Any
		return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );
	};
	
	
	
	
	function Data() {
		this.expando = jQuery.expando + Data.uid++;
	}
	
	Data.uid = 1;
	
	Data.prototype = {
	
		cache: function( owner ) {
	
			// Check if the owner object already has a cache
			var value = owner[ this.expando ];
	
			// If not, create one
			if ( !value ) {
				value = {};
	
				// We can accept data for non-element nodes in modern browsers,
				// but we should not, see #8335.
				// Always return an empty object.
				if ( acceptData( owner ) ) {
	
					// If it is a node unlikely to be stringify-ed or looped over
					// use plain assignment
					if ( owner.nodeType ) {
						owner[ this.expando ] = value;
	
					// Otherwise secure it in a non-enumerable property
					// configurable must be true to allow the property to be
					// deleted when data is removed
					} else {
						Object.defineProperty( owner, this.expando, {
							value: value,
							configurable: true
						} );
					}
				}
			}
	
			return value;
		},
		set: function( owner, data, value ) {
			var prop,
				cache = this.cache( owner );
	
			// Handle: [ owner, key, value ] args
			// Always use camelCase key (gh-2257)
			if ( typeof data === "string" ) {
				cache[ camelCase( data ) ] = value;
	
			// Handle: [ owner, { properties } ] args
			} else {
	
				// Copy the properties one-by-one to the cache object
				for ( prop in data ) {
					cache[ camelCase( prop ) ] = data[ prop ];
				}
			}
			return cache;
		},
		get: function( owner, key ) {
			return key === undefined ?
				this.cache( owner ) :
	
				// Always use camelCase key (gh-2257)
				owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];
		},
		access: function( owner, key, value ) {
	
			// In cases where either:
			//
			//   1. No key was specified
			//   2. A string key was specified, but no value provided
			//
			// Take the "read" path and allow the get method to determine
			// which value to return, respectively either:
			//
			//   1. The entire cache object
			//   2. The data stored at the key
			//
			if ( key === undefined ||
					( ( key && typeof key === "string" ) && value === undefined ) ) {
	
				return this.get( owner, key );
			}
	
			// When the key is not a string, or both a key and value
			// are specified, set or extend (existing objects) with either:
			//
			//   1. An object of properties
			//   2. A key and value
			//
			this.set( owner, key, value );
	
			// Since the "set" path can have two possible entry points
			// return the expected data based on which path was taken[*]
			return value !== undefined ? value : key;
		},
		remove: function( owner, key ) {
			var i,
				cache = owner[ this.expando ];
	
			if ( cache === undefined ) {
				return;
			}
	
			if ( key !== undefined ) {
	
				// Support array or space separated string of keys
				if ( Array.isArray( key ) ) {
	
					// If key is an array of keys...
					// We always set camelCase keys, so remove that.
					key = key.map( camelCase );
				} else {
					key = camelCase( key );
	
					// If a key with the spaces exists, use it.
					// Otherwise, create an array by matching non-whitespace
					key = key in cache ?
						[ key ] :
						( key.match( rnothtmlwhite ) || [] );
				}
	
				i = key.length;
	
				while ( i-- ) {
					delete cache[ key[ i ] ];
				}
			}
	
			// Remove the expando if there's no more data
			if ( key === undefined || jQuery.isEmptyObject( cache ) ) {
	
				// Support: Chrome <=35 - 45
				// Webkit & Blink performance suffers when deleting properties
				// from DOM nodes, so set to undefined instead
				// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)
				if ( owner.nodeType ) {
					owner[ this.expando ] = undefined;
				} else {
					delete owner[ this.expando ];
				}
			}
		},
		hasData: function( owner ) {
			var cache = owner[ this.expando ];
			return cache !== undefined && !jQuery.isEmptyObject( cache );
		}
	};
	var dataPriv = new Data();
	
	var dataUser = new Data();
	
	
	
	//	Implementation Summary
	//
	//	1. Enforce API surface and semantic compatibility with 1.9.x branch
	//	2. Improve the module's maintainability by reducing the storage
	//		paths to a single mechanism.
	//	3. Use the same single mechanism to support "private" and "user" data.
	//	4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData)
	//	5. Avoid exposing implementation details on user objects (eg. expando properties)
	//	6. Provide a clear path for implementation upgrade to WeakMap in 2014
	
	var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
		rmultiDash = /[A-Z]/g;
	
	function getData( data ) {
		if ( data === "true" ) {
			return true;
		}
	
		if ( data === "false" ) {
			return false;
		}
	
		if ( data === "null" ) {
			return null;
		}
	
		// Only convert to a number if it doesn't change the string
		if ( data === +data + "" ) {
			return +data;
		}
	
		if ( rbrace.test( data ) ) {
			return JSON.parse( data );
		}
	
		return data;
	}
	
	function dataAttr( elem, key, data ) {
		var name;
	
		// If nothing was found internally, try to fetch any
		// data from the HTML5 data-* attribute
		if ( data === undefined && elem.nodeType === 1 ) {
			name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase();
			data = elem.getAttribute( name );
	
			if ( typeof data === "string" ) {
				try {
					data = getData( data );
				} catch ( e ) {}
	
				// Make sure we set the data so it isn't changed later
				dataUser.set( elem, key, data );
			} else {
				data = undefined;
			}
		}
		return data;
	}
	
	jQuery.extend( {
		hasData: function( elem ) {
			return dataUser.hasData( elem ) || dataPriv.hasData( elem );
		},
	
		data: function( elem, name, data ) {
			return dataUser.access( elem, name, data );
		},
	
		removeData: function( elem, name ) {
			dataUser.remove( elem, name );
		},
	
		// TODO: Now that all calls to _data and _removeData have been replaced
		// with direct calls to dataPriv methods, these can be deprecated.
		_data: function( elem, name, data ) {
			return dataPriv.access( elem, name, data );
		},
	
		_removeData: function( elem, name ) {
			dataPriv.remove( elem, name );
		}
	} );
	
	jQuery.fn.extend( {
		data: function( key, value ) {
			var i, name, data,
				elem = this[ 0 ],
				attrs = elem && elem.attributes;
	
			// Gets all values
			if ( key === undefined ) {
				if ( this.length ) {
					data = dataUser.get( elem );
	
					if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) {
						i = attrs.length;
						while ( i-- ) {
	
							// Support: IE 11 only
							// The attrs elements can be null (#14894)
							if ( attrs[ i ] ) {
								name = attrs[ i ].name;
								if ( name.indexOf( "data-" ) === 0 ) {
									name = camelCase( name.slice( 5 ) );
									dataAttr( elem, name, data[ name ] );
								}
							}
						}
						dataPriv.set( elem, "hasDataAttrs", true );
					}
				}
	
				return data;
			}
	
			// Sets multiple values
			if ( typeof key === "object" ) {
				return this.each( function() {
					dataUser.set( this, key );
				} );
			}
	
			return access( this, function( value ) {
				var data;
	
				// The calling jQuery object (element matches) is not empty
				// (and therefore has an element appears at this[ 0 ]) and the
				// `value` parameter was not undefined. An empty jQuery object
				// will result in `undefined` for elem = this[ 0 ] which will
				// throw an exception if an attempt to read a data cache is made.
				if ( elem && value === undefined ) {
	
					// Attempt to get data from the cache
					// The key will always be camelCased in Data
					data = dataUser.get( elem, key );
					if ( data !== undefined ) {
						return data;
					}
	
					// Attempt to "discover" the data in
					// HTML5 custom data-* attrs
					data = dataAttr( elem, key );
					if ( data !== undefined ) {
						return data;
					}
	
					// We tried really hard, but the data doesn't exist.
					return;
				}
	
				// Set the data...
				this.each( function() {
	
					// We always store the camelCased key
					dataUser.set( this, key, value );
				} );
			}, null, value, arguments.length > 1, null, true );
		},
	
		removeData: function( key ) {
			return this.each( function() {
				dataUser.remove( this, key );
			} );
		}
	} );
	
	
	jQuery.extend( {
		queue: function( elem, type, data ) {
			var queue;
	
			if ( elem ) {
				type = ( type || "fx" ) + "queue";
				queue = dataPriv.get( elem, type );
	
				// Speed up dequeue by getting out quickly if this is just a lookup
				if ( data ) {
					if ( !queue || Array.isArray( data ) ) {
						queue = dataPriv.access( elem, type, jQuery.makeArray( data ) );
					} else {
						queue.push( data );
					}
				}
				return queue || [];
			}
		},
	
		dequeue: function( elem, type ) {
			type = type || "fx";
	
			var queue = jQuery.queue( elem, type ),
				startLength = queue.length,
				fn = queue.shift(),
				hooks = jQuery._queueHooks( elem, type ),
				next = function() {
					jQuery.dequeue( elem, type );
				};
	
			// If the fx queue is dequeued, always remove the progress sentinel
			if ( fn === "inprogress" ) {
				fn = queue.shift();
				startLength--;
			}
	
			if ( fn ) {
	
				// Add a progress sentinel to prevent the fx queue from being
				// automatically dequeued
				if ( type === "fx" ) {
					queue.unshift( "inprogress" );
				}
	
				// Clear up the last queue stop function
				delete hooks.stop;
				fn.call( elem, next, hooks );
			}
	
			if ( !startLength && hooks ) {
				hooks.empty.fire();
			}
		},
	
		// Not public - generate a queueHooks object, or return the current one
		_queueHooks: function( elem, type ) {
			var key = type + "queueHooks";
			return dataPriv.get( elem, key ) || dataPriv.access( elem, key, {
				empty: jQuery.Callbacks( "once memory" ).add( function() {
					dataPriv.remove( elem, [ type + "queue", key ] );
				} )
			} );
		}
	} );
	
	jQuery.fn.extend( {
		queue: function( type, data ) {
			var setter = 2;
	
			if ( typeof type !== "string" ) {
				data = type;
				type = "fx";
				setter--;
			}
	
			if ( arguments.length < setter ) {
				return jQuery.queue( this[ 0 ], type );
			}
	
			return data === undefined ?
				this :
				this.each( function() {
					var queue = jQuery.queue( this, type, data );
	
					// Ensure a hooks for this queue
					jQuery._queueHooks( this, type );
	
					if ( type === "fx" && queue[ 0 ] !== "inprogress" ) {
						jQuery.dequeue( this, type );
					}
				} );
		},
		dequeue: function( type ) {
			return this.each( function() {
				jQuery.dequeue( this, type );
			} );
		},
		clearQueue: function( type ) {
			return this.queue( type || "fx", [] );
		},
	
		// Get a promise resolved when queues of a certain type
		// are emptied (fx is the type by default)
		promise: function( type, obj ) {
			var tmp,
				count = 1,
				defer = jQuery.Deferred(),
				elements = this,
				i = this.length,
				resolve = function() {
					if ( !( --count ) ) {
						defer.resolveWith( elements, [ elements ] );
					}
				};
	
			if ( typeof type !== "string" ) {
				obj = type;
				type = undefined;
			}
			type = type || "fx";
	
			while ( i-- ) {
				tmp = dataPriv.get( elements[ i ], type + "queueHooks" );
				if ( tmp && tmp.empty ) {
					count++;
					tmp.empty.add( resolve );
				}
			}
			resolve();
			return defer.promise( obj );
		}
	} );
	var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source;
	
	var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" );
	
	
	var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
	
	var isHiddenWithinTree = function( elem, el ) {
	
			// isHiddenWithinTree might be called from jQuery#filter function;
			// in that case, element will be second argument
			elem = el || elem;
	
			// Inline style trumps all
			return elem.style.display === "none" ||
				elem.style.display === "" &&
	
				// Otherwise, check computed style
				// Support: Firefox <=43 - 45
				// Disconnected elements can have computed display: none, so first confirm that elem is
				// in the document.
				jQuery.contains( elem.ownerDocument, elem ) &&
	
				jQuery.css( elem, "display" ) === "none";
		};
	
	var swap = function( elem, options, callback, args ) {
		var ret, name,
			old = {};
	
		// Remember the old values, and insert the new ones
		for ( name in options ) {
			old[ name ] = elem.style[ name ];
			elem.style[ name ] = options[ name ];
		}
	
		ret = callback.apply( elem, args || [] );
	
		// Revert the old values
		for ( name in options ) {
			elem.style[ name ] = old[ name ];
		}
	
		return ret;
	};
	
	
	
	
	function adjustCSS( elem, prop, valueParts, tween ) {
		var adjusted, scale,
			maxIterations = 20,
			currentValue = tween ?
				function() {
					return tween.cur();
				} :
				function() {
					return jQuery.css( elem, prop, "" );
				},
			initial = currentValue(),
			unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
	
			// Starting value computation is required for potential unit mismatches
			initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) &&
				rcssNum.exec( jQuery.css( elem, prop ) );
	
		if ( initialInUnit && initialInUnit[ 3 ] !== unit ) {
	
			// Support: Firefox <=54
			// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)
			initial = initial / 2;
	
			// Trust units reported by jQuery.css
			unit = unit || initialInUnit[ 3 ];
	
			// Iteratively approximate from a nonzero starting point
			initialInUnit = +initial || 1;
	
			while ( maxIterations-- ) {
	
				// Evaluate and update our best guess (doubling guesses that zero out).
				// Finish if the scale equals or crosses 1 (making the old*new product non-positive).
				jQuery.style( elem, prop, initialInUnit + unit );
				if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {
					maxIterations = 0;
				}
				initialInUnit = initialInUnit / scale;
	
			}
	
			initialInUnit = initialInUnit * 2;
			jQuery.style( elem, prop, initialInUnit + unit );
	
			// Make sure we update the tween properties later on
			valueParts = valueParts || [];
		}
	
		if ( valueParts ) {
			initialInUnit = +initialInUnit || +initial || 0;
	
			// Apply relative offset (+=/-=) if specified
			adjusted = valueParts[ 1 ] ?
				initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :
				+valueParts[ 2 ];
			if ( tween ) {
				tween.unit = unit;
				tween.start = initialInUnit;
				tween.end = adjusted;
			}
		}
		return adjusted;
	}
	
	
	var defaultDisplayMap = {};
	
	function getDefaultDisplay( elem ) {
		var temp,
			doc = elem.ownerDocument,
			nodeName = elem.nodeName,
			display = defaultDisplayMap[ nodeName ];
	
		if ( display ) {
			return display;
		}
	
		temp = doc.body.appendChild( doc.createElement( nodeName ) );
		display = jQuery.css( temp, "display" );
	
		temp.parentNode.removeChild( temp );
	
		if ( display === "none" ) {
			display = "block";
		}
		defaultDisplayMap[ nodeName ] = display;
	
		return display;
	}
	
	function showHide( elements, show ) {
		var display, elem,
			values = [],
			index = 0,
			length = elements.length;
	
		// Determine new display value for elements that need to change
		for ( ; index < length; index++ ) {
			elem = elements[ index ];
			if ( !elem.style ) {
				continue;
			}
	
			display = elem.style.display;
			if ( show ) {
	
				// Since we force visibility upon cascade-hidden elements, an immediate (and slow)
				// check is required in this first loop unless we have a nonempty display value (either
				// inline or about-to-be-restored)
				if ( display === "none" ) {
					values[ index ] = dataPriv.get( elem, "display" ) || null;
					if ( !values[ index ] ) {
						elem.style.display = "";
					}
				}
				if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) {
					values[ index ] = getDefaultDisplay( elem );
				}
			} else {
				if ( display !== "none" ) {
					values[ index ] = "none";
	
					// Remember what we're overwriting
					dataPriv.set( elem, "display", display );
				}
			}
		}
	
		// Set the display of the elements in a second loop to avoid constant reflow
		for ( index = 0; index < length; index++ ) {
			if ( values[ index ] != null ) {
				elements[ index ].style.display = values[ index ];
			}
		}
	
		return elements;
	}
	
	jQuery.fn.extend( {
		show: function() {
			return showHide( this, true );
		},
		hide: function() {
			return showHide( this );
		},
		toggle: function( state ) {
			if ( typeof state === "boolean" ) {
				return state ? this.show() : this.hide();
			}
	
			return this.each( function() {
				if ( isHiddenWithinTree( this ) ) {
					jQuery( this ).show();
				} else {
					jQuery( this ).hide();
				}
			} );
		}
	} );
	var rcheckableType = ( /^(?:checkbox|radio)$/i );
	
	var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]+)/i );
	
	var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i );
	
	
	
	// We have to close these tags to support XHTML (#13200)
	var wrapMap = {
	
		// Support: IE <=9 only
		option: [ 1, "<select multiple='multiple'>", "</select>" ],
	
		// XHTML parsers do not magically insert elements in the
		// same way that tag soup parsers do. So we cannot shorten
		// this by omitting <tbody> or other required elements.
		thead: [ 1, "<table>", "</table>" ],
		col: [ 2, "<table><colgroup>", "</colgroup></table>" ],
		tr: [ 2, "<table><tbody>", "</tbody></table>" ],
		td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
	
		_default: [ 0, "", "" ]
	};
	
	// Support: IE <=9 only
	wrapMap.optgroup = wrapMap.option;
	
	wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
	wrapMap.th = wrapMap.td;
	
	
	function getAll( context, tag ) {
	
		// Support: IE <=9 - 11 only
		// Use typeof to avoid zero-argument method invocation on host objects (#15151)
		var ret;
	
		if ( typeof context.getElementsByTagName !== "undefined" ) {
			ret = context.getElementsByTagName( tag || "*" );
	
		} else if ( typeof context.querySelectorAll !== "undefined" ) {
			ret = context.querySelectorAll( tag || "*" );
	
		} else {
			ret = [];
		}
	
		if ( tag === undefined || tag && nodeName( context, tag ) ) {
			return jQuery.merge( [ context ], ret );
		}
	
		return ret;
	}
	
	
	// Mark scripts as having already been evaluated
	function setGlobalEval( elems, refElements ) {
		var i = 0,
			l = elems.length;
	
		for ( ; i < l; i++ ) {
			dataPriv.set(
				elems[ i ],
				"globalEval",
				!refElements || dataPriv.get( refElements[ i ], "globalEval" )
			);
		}
	}
	
	
	var rhtml = /<|&#?\w+;/;
	
	function buildFragment( elems, context, scripts, selection, ignored ) {
		var elem, tmp, tag, wrap, contains, j,
			fragment = context.createDocumentFragment(),
			nodes = [],
			i = 0,
			l = elems.length;
	
		for ( ; i < l; i++ ) {
			elem = elems[ i ];
	
			if ( elem || elem === 0 ) {
	
				// Add nodes directly
				if ( toType( elem ) === "object" ) {
	
					// Support: Android <=4.0 only, PhantomJS 1 only
					// push.apply(_, arraylike) throws on ancient WebKit
					jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
	
				// Convert non-html into a text node
				} else if ( !rhtml.test( elem ) ) {
					nodes.push( context.createTextNode( elem ) );
	
				// Convert html into DOM nodes
				} else {
					tmp = tmp || fragment.appendChild( context.createElement( "div" ) );
	
					// Deserialize a standard representation
					tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase();
					wrap = wrapMap[ tag ] || wrapMap._default;
					tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];
	
					// Descend through wrappers to the right content
					j = wrap[ 0 ];
					while ( j-- ) {
						tmp = tmp.lastChild;
					}
	
					// Support: Android <=4.0 only, PhantomJS 1 only
					// push.apply(_, arraylike) throws on ancient WebKit
					jQuery.merge( nodes, tmp.childNodes );
	
					// Remember the top-level container
					tmp = fragment.firstChild;
	
					// Ensure the created nodes are orphaned (#12392)
					tmp.textContent = "";
				}
			}
		}
	
		// Remove wrapper from fragment
		fragment.textContent = "";
	
		i = 0;
		while ( ( elem = nodes[ i++ ] ) ) {
	
			// Skip elements already in the context collection (trac-4087)
			if ( selection && jQuery.inArray( elem, selection ) > -1 ) {
				if ( ignored ) {
					ignored.push( elem );
				}
				continue;
			}
	
			contains = jQuery.contains( elem.ownerDocument, elem );
	
			// Append to fragment
			tmp = getAll( fragment.appendChild( elem ), "script" );
	
			// Preserve script evaluation history
			if ( contains ) {
				setGlobalEval( tmp );
			}
	
			// Capture executables
			if ( scripts ) {
				j = 0;
				while ( ( elem = tmp[ j++ ] ) ) {
					if ( rscriptType.test( elem.type || "" ) ) {
						scripts.push( elem );
					}
				}
			}
		}
	
		return fragment;
	}
	
	
	( function() {
		var fragment = document.createDocumentFragment(),
			div = fragment.appendChild( document.createElement( "div" ) ),
			input = document.createElement( "input" );
	
		// Support: Android 4.0 - 4.3 only
		// Check state lost if the name is set (#11217)
		// Support: Windows Web Apps (WWA)
		// `name` and `type` must use .setAttribute for WWA (#14901)
		input.setAttribute( "type", "radio" );
		input.setAttribute( "checked", "checked" );
		input.setAttribute( "name", "t" );
	
		div.appendChild( input );
	
		// Support: Android <=4.1 only
		// Older WebKit doesn't clone checked state correctly in fragments
		support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
	
		// Support: IE <=11 only
		// Make sure textarea (and checkbox) defaultValue is properly cloned
		div.innerHTML = "<textarea>x</textarea>";
		support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
	} )();
	var documentElement = document.documentElement;
	
	
	
	var
		rkeyEvent = /^key/,
		rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,
		rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
	
	function returnTrue() {
		return true;
	}
	
	function returnFalse() {
		return false;
	}
	
	// Support: IE <=9 only
	// See #13393 for more info
	function safeActiveElement() {
		try {
			return document.activeElement;
		} catch ( err ) { }
	}
	
	function on( elem, types, selector, data, fn, one ) {
		var origFn, type;
	
		// Types can be a map of types/handlers
		if ( typeof types === "object" ) {
	
			// ( types-Object, selector, data )
			if ( typeof selector !== "string" ) {
	
				// ( types-Object, data )
				data = data || selector;
				selector = undefined;
			}
			for ( type in types ) {
				on( elem, type, selector, data, types[ type ], one );
			}
			return elem;
		}
	
		if ( data == null && fn == null ) {
	
			// ( types, fn )
			fn = selector;
			data = selector = undefined;
		} else if ( fn == null ) {
			if ( typeof selector === "string" ) {
	
				// ( types, selector, fn )
				fn = data;
				data = undefined;
			} else {
	
				// ( types, data, fn )
				fn = data;
				data = selector;
				selector = undefined;
			}
		}
		if ( fn === false ) {
			fn = returnFalse;
		} else if ( !fn ) {
			return elem;
		}
	
		if ( one === 1 ) {
			origFn = fn;
			fn = function( event ) {
	
				// Can use an empty set, since event contains the info
				jQuery().off( event );
				return origFn.apply( this, arguments );
			};
	
			// Use same guid so caller can remove using origFn
			fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
		}
		return elem.each( function() {
			jQuery.event.add( this, types, fn, data, selector );
		} );
	}
	
	/*
	 * Helper functions for managing events -- not part of the public interface.
	 * Props to Dean Edwards' addEvent library for many of the ideas.
	 */
	jQuery.event = {
	
		global: {},
	
		add: function( elem, types, handler, data, selector ) {
	
			var handleObjIn, eventHandle, tmp,
				events, t, handleObj,
				special, handlers, type, namespaces, origType,
				elemData = dataPriv.get( elem );
	
			// Don't attach events to noData or text/comment nodes (but allow plain objects)
			if ( !elemData ) {
				return;
			}
	
			// Caller can pass in an object of custom data in lieu of the handler
			if ( handler.handler ) {
				handleObjIn = handler;
				handler = handleObjIn.handler;
				selector = handleObjIn.selector;
			}
	
			// Ensure that invalid selectors throw exceptions at attach time
			// Evaluate against documentElement in case elem is a non-element node (e.g., document)
			if ( selector ) {
				jQuery.find.matchesSelector( documentElement, selector );
			}
	
			// Make sure that the handler has a unique ID, used to find/remove it later
			if ( !handler.guid ) {
				handler.guid = jQuery.guid++;
			}
	
			// Init the element's event structure and main handler, if this is the first
			if ( !( events = elemData.events ) ) {
				events = elemData.events = {};
			}
			if ( !( eventHandle = elemData.handle ) ) {
				eventHandle = elemData.handle = function( e ) {
	
					// Discard the second event of a jQuery.event.trigger() and
					// when an event is called after a page has unloaded
					return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ?
						jQuery.event.dispatch.apply( elem, arguments ) : undefined;
				};
			}
	
			// Handle multiple events separated by a space
			types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
			t = types.length;
			while ( t-- ) {
				tmp = rtypenamespace.exec( types[ t ] ) || [];
				type = origType = tmp[ 1 ];
				namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
	
				// There *must* be a type, no attaching namespace-only handlers
				if ( !type ) {
					continue;
				}
	
				// If event changes its type, use the special event handlers for the changed type
				special = jQuery.event.special[ type ] || {};
	
				// If selector defined, determine special event api type, otherwise given type
				type = ( selector ? special.delegateType : special.bindType ) || type;
	
				// Update special based on newly reset type
				special = jQuery.event.special[ type ] || {};
	
				// handleObj is passed to all event handlers
				handleObj = jQuery.extend( {
					type: type,
					origType: origType,
					data: data,
					handler: handler,
					guid: handler.guid,
					selector: selector,
					needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
					namespace: namespaces.join( "." )
				}, handleObjIn );
	
				// Init the event handler queue if we're the first
				if ( !( handlers = events[ type ] ) ) {
					handlers = events[ type ] = [];
					handlers.delegateCount = 0;
	
					// Only use addEventListener if the special events handler returns false
					if ( !special.setup ||
						special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
	
						if ( elem.addEventListener ) {
							elem.addEventListener( type, eventHandle );
						}
					}
				}
	
				if ( special.add ) {
					special.add.call( elem, handleObj );
	
					if ( !handleObj.handler.guid ) {
						handleObj.handler.guid = handler.guid;
					}
				}
	
				// Add to the element's handler list, delegates in front
				if ( selector ) {
					handlers.splice( handlers.delegateCount++, 0, handleObj );
				} else {
					handlers.push( handleObj );
				}
	
				// Keep track of which events have ever been used, for event optimization
				jQuery.event.global[ type ] = true;
			}
	
		},
	
		// Detach an event or set of events from an element
		remove: function( elem, types, handler, selector, mappedTypes ) {
	
			var j, origCount, tmp,
				events, t, handleObj,
				special, handlers, type, namespaces, origType,
				elemData = dataPriv.hasData( elem ) && dataPriv.get( elem );
	
			if ( !elemData || !( events = elemData.events ) ) {
				return;
			}
	
			// Once for each type.namespace in types; type may be omitted
			types = ( types || "" ).match( rnothtmlwhite ) || [ "" ];
			t = types.length;
			while ( t-- ) {
				tmp = rtypenamespace.exec( types[ t ] ) || [];
				type = origType = tmp[ 1 ];
				namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
	
				// Unbind all events (on this namespace, if provided) for the element
				if ( !type ) {
					for ( type in events ) {
						jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
					}
					continue;
				}
	
				special = jQuery.event.special[ type ] || {};
				type = ( selector ? special.delegateType : special.bindType ) || type;
				handlers = events[ type ] || [];
				tmp = tmp[ 2 ] &&
					new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" );
	
				// Remove matching events
				origCount = j = handlers.length;
				while ( j-- ) {
					handleObj = handlers[ j ];
	
					if ( ( mappedTypes || origType === handleObj.origType ) &&
						( !handler || handler.guid === handleObj.guid ) &&
						( !tmp || tmp.test( handleObj.namespace ) ) &&
						( !selector || selector === handleObj.selector ||
							selector === "**" && handleObj.selector ) ) {
						handlers.splice( j, 1 );
	
						if ( handleObj.selector ) {
							handlers.delegateCount--;
						}
						if ( special.remove ) {
							special.remove.call( elem, handleObj );
						}
					}
				}
	
				// Remove generic event handler if we removed something and no more handlers exist
				// (avoids potential for endless recursion during removal of special event handlers)
				if ( origCount && !handlers.length ) {
					if ( !special.teardown ||
						special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
	
						jQuery.removeEvent( elem, type, elemData.handle );
					}
	
					delete events[ type ];
				}
			}
	
			// Remove data and the expando if it's no longer used
			if ( jQuery.isEmptyObject( events ) ) {
				dataPriv.remove( elem, "handle events" );
			}
		},
	
		dispatch: function( nativeEvent ) {
	
			// Make a writable jQuery.Event from the native event object
			var event = jQuery.event.fix( nativeEvent );
	
			var i, j, ret, matched, handleObj, handlerQueue,
				args = new Array( arguments.length ),
				handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [],
				special = jQuery.event.special[ event.type ] || {};
	
			// Use the fix-ed jQuery.Event rather than the (read-only) native event
			args[ 0 ] = event;
	
			for ( i = 1; i < arguments.length; i++ ) {
				args[ i ] = arguments[ i ];
			}
	
			event.delegateTarget = this;
	
			// Call the preDispatch hook for the mapped type, and let it bail if desired
			if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
				return;
			}
	
			// Determine handlers
			handlerQueue = jQuery.event.handlers.call( this, event, handlers );
	
			// Run delegates first; they may want to stop propagation beneath us
			i = 0;
			while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {
				event.currentTarget = matched.elem;
	
				j = 0;
				while ( ( handleObj = matched.handlers[ j++ ] ) &&
					!event.isImmediatePropagationStopped() ) {
	
					// Triggered event must either 1) have no namespace, or 2) have namespace(s)
					// a subset or equal to those in the bound event (both can have no namespace).
					if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {
	
						event.handleObj = handleObj;
						event.data = handleObj.data;
	
						ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||
							handleObj.handler ).apply( matched.elem, args );
	
						if ( ret !== undefined ) {
							if ( ( event.result = ret ) === false ) {
								event.preventDefault();
								event.stopPropagation();
							}
						}
					}
				}
			}
	
			// Call the postDispatch hook for the mapped type
			if ( special.postDispatch ) {
				special.postDispatch.call( this, event );
			}
	
			return event.result;
		},
	
		handlers: function( event, handlers ) {
			var i, handleObj, sel, matchedHandlers, matchedSelectors,
				handlerQueue = [],
				delegateCount = handlers.delegateCount,
				cur = event.target;
	
			// Find delegate handlers
			if ( delegateCount &&
	
				// Support: IE <=9
				// Black-hole SVG <use> instance trees (trac-13180)
				cur.nodeType &&
	
				// Support: Firefox <=42
				// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)
				// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click
				// Support: IE 11 only
				// ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343)
				!( event.type === "click" && event.button >= 1 ) ) {
	
				for ( ; cur !== this; cur = cur.parentNode || this ) {
	
					// Don't check non-elements (#13208)
					// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
					if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) {
						matchedHandlers = [];
						matchedSelectors = {};
						for ( i = 0; i < delegateCount; i++ ) {
							handleObj = handlers[ i ];
	
							// Don't conflict with Object.prototype properties (#13203)
							sel = handleObj.selector + " ";
	
							if ( matchedSelectors[ sel ] === undefined ) {
								matchedSelectors[ sel ] = handleObj.needsContext ?
									jQuery( sel, this ).index( cur ) > -1 :
									jQuery.find( sel, this, null, [ cur ] ).length;
							}
							if ( matchedSelectors[ sel ] ) {
								matchedHandlers.push( handleObj );
							}
						}
						if ( matchedHandlers.length ) {
							handlerQueue.push( { elem: cur, handlers: matchedHandlers } );
						}
					}
				}
			}
	
			// Add the remaining (directly-bound) handlers
			cur = this;
			if ( delegateCount < handlers.length ) {
				handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );
			}
	
			return handlerQueue;
		},
	
		addProp: function( name, hook ) {
			Object.defineProperty( jQuery.Event.prototype, name, {
				enumerable: true,
				configurable: true,
	
				get: isFunction( hook ) ?
					function() {
						if ( this.originalEvent ) {
								return hook( this.originalEvent );
						}
					} :
					function() {
						if ( this.originalEvent ) {
								return this.originalEvent[ name ];
						}
					},
	
				set: function( value ) {
					Object.defineProperty( this, name, {
						enumerable: true,
						configurable: true,
						writable: true,
						value: value
					} );
				}
			} );
		},
	
		fix: function( originalEvent ) {
			return originalEvent[ jQuery.expando ] ?
				originalEvent :
				new jQuery.Event( originalEvent );
		},
	
		special: {
			load: {
	
				// Prevent triggered image.load events from bubbling to window.load
				noBubble: true
			},
			focus: {
	
				// Fire native event if possible so blur/focus sequence is correct
				trigger: function() {
					if ( this !== safeActiveElement() && this.focus ) {
						this.focus();
						return false;
					}
				},
				delegateType: "focusin"
			},
			blur: {
				trigger: function() {
					if ( this === safeActiveElement() && this.blur ) {
						this.blur();
						return false;
					}
				},
				delegateType: "focusout"
			},
			click: {
	
				// For checkbox, fire native event so checked state will be right
				trigger: function() {
					if ( this.type === "checkbox" && this.click && nodeName( this, "input" ) ) {
						this.click();
						return false;
					}
				},
	
				// For cross-browser consistency, don't fire native .click() on links
				_default: function( event ) {
					return nodeName( event.target, "a" );
				}
			},
	
			beforeunload: {
				postDispatch: function( event ) {
	
					// Support: Firefox 20+
					// Firefox doesn't alert if the returnValue field is not set.
					if ( event.result !== undefined && event.originalEvent ) {
						event.originalEvent.returnValue = event.result;
					}
				}
			}
		}
	};
	
	jQuery.removeEvent = function( elem, type, handle ) {
	
		// This "if" is needed for plain objects
		if ( elem.removeEventListener ) {
			elem.removeEventListener( type, handle );
		}
	};
	
	jQuery.Event = function( src, props ) {
	
		// Allow instantiation without the 'new' keyword
		if ( !( this instanceof jQuery.Event ) ) {
			return new jQuery.Event( src, props );
		}
	
		// Event object
		if ( src && src.type ) {
			this.originalEvent = src;
			this.type = src.type;
	
			// Events bubbling up the document may have been marked as prevented
			// by a handler lower down the tree; reflect the correct value.
			this.isDefaultPrevented = src.defaultPrevented ||
					src.defaultPrevented === undefined &&
	
					// Support: Android <=2.3 only
					src.returnValue === false ?
				returnTrue :
				returnFalse;
	
			// Create target properties
			// Support: Safari <=6 - 7 only
			// Target should not be a text node (#504, #13143)
			this.target = ( src.target && src.target.nodeType === 3 ) ?
				src.target.parentNode :
				src.target;
	
			this.currentTarget = src.currentTarget;
			this.relatedTarget = src.relatedTarget;
	
		// Event type
		} else {
			this.type = src;
		}
	
		// Put explicitly provided properties onto the event object
		if ( props ) {
			jQuery.extend( this, props );
		}
	
		// Create a timestamp if incoming event doesn't have one
		this.timeStamp = src && src.timeStamp || Date.now();
	
		// Mark it as fixed
		this[ jQuery.expando ] = true;
	};
	
	// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
	// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
	jQuery.Event.prototype = {
		constructor: jQuery.Event,
		isDefaultPrevented: returnFalse,
		isPropagationStopped: returnFalse,
		isImmediatePropagationStopped: returnFalse,
		isSimulated: false,
	
		preventDefault: function() {
			var e = this.originalEvent;
	
			this.isDefaultPrevented = returnTrue;
	
			if ( e && !this.isSimulated ) {
				e.preventDefault();
			}
		},
		stopPropagation: function() {
			var e = this.originalEvent;
	
			this.isPropagationStopped = returnTrue;
	
			if ( e && !this.isSimulated ) {
				e.stopPropagation();
			}
		},
		stopImmediatePropagation: function() {
			var e = this.originalEvent;
	
			this.isImmediatePropagationStopped = returnTrue;
	
			if ( e && !this.isSimulated ) {
				e.stopImmediatePropagation();
			}
	
			this.stopPropagation();
		}
	};
	
	// Includes all common event props including KeyEvent and MouseEvent specific props
	jQuery.each( {
		altKey: true,
		bubbles: true,
		cancelable: true,
		changedTouches: true,
		ctrlKey: true,
		detail: true,
		eventPhase: true,
		metaKey: true,
		pageX: true,
		pageY: true,
		shiftKey: true,
		view: true,
		"char": true,
		charCode: true,
		key: true,
		keyCode: true,
		button: true,
		buttons: true,
		clientX: true,
		clientY: true,
		offsetX: true,
		offsetY: true,
		pointerId: true,
		pointerType: true,
		screenX: true,
		screenY: true,
		targetTouches: true,
		toElement: true,
		touches: true,
	
		which: function( event ) {
			var button = event.button;
	
			// Add which for key events
			if ( event.which == null && rkeyEvent.test( event.type ) ) {
				return event.charCode != null ? event.charCode : event.keyCode;
			}
	
			// Add which for click: 1 === left; 2 === middle; 3 === right
			if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {
				if ( button & 1 ) {
					return 1;
				}
	
				if ( button & 2 ) {
					return 3;
				}
	
				if ( button & 4 ) {
					return 2;
				}
	
				return 0;
			}
	
			return event.which;
		}
	}, jQuery.event.addProp );
	
	// Create mouseenter/leave events using mouseover/out and event-time checks
	// so that event delegation works in jQuery.
	// Do the same for pointerenter/pointerleave and pointerover/pointerout
	//
	// Support: Safari 7 only
	// Safari sends mouseenter too often; see:
	// https://bugs.chromium.org/p/chromium/issues/detail?id=470258
	// for the description of the bug (it existed in older Chrome versions as well).
	jQuery.each( {
		mouseenter: "mouseover",
		mouseleave: "mouseout",
		pointerenter: "pointerover",
		pointerleave: "pointerout"
	}, function( orig, fix ) {
		jQuery.event.special[ orig ] = {
			delegateType: fix,
			bindType: fix,
	
			handle: function( event ) {
				var ret,
					target = this,
					related = event.relatedTarget,
					handleObj = event.handleObj;
	
				// For mouseenter/leave call the handler if related is outside the target.
				// NB: No relatedTarget if the mouse left/entered the browser window
				if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {
					event.type = handleObj.origType;
					ret = handleObj.handler.apply( this, arguments );
					event.type = fix;
				}
				return ret;
			}
		};
	} );
	
	jQuery.fn.extend( {
	
		on: function( types, selector, data, fn ) {
			return on( this, types, selector, data, fn );
		},
		one: function( types, selector, data, fn ) {
			return on( this, types, selector, data, fn, 1 );
		},
		off: function( types, selector, fn ) {
			var handleObj, type;
			if ( types && types.preventDefault && types.handleObj ) {
	
				// ( event )  dispatched jQuery.Event
				handleObj = types.handleObj;
				jQuery( types.delegateTarget ).off(
					handleObj.namespace ?
						handleObj.origType + "." + handleObj.namespace :
						handleObj.origType,
					handleObj.selector,
					handleObj.handler
				);
				return this;
			}
			if ( typeof types === "object" ) {
	
				// ( types-object [, selector] )
				for ( type in types ) {
					this.off( type, selector, types[ type ] );
				}
				return this;
			}
			if ( selector === false || typeof selector === "function" ) {
	
				// ( types [, fn] )
				fn = selector;
				selector = undefined;
			}
			if ( fn === false ) {
				fn = returnFalse;
			}
			return this.each( function() {
				jQuery.event.remove( this, types, fn, selector );
			} );
		}
	} );
	
	
	var
	
		/* eslint-disable max-len */
	
		// See https://github.com/eslint/eslint/issues/3229
		rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,
	
		/* eslint-enable */
	
		// Support: IE <=10 - 11, Edge 12 - 13 only
		// In IE/Edge using regex groups here causes severe slowdowns.
		// See https://connect.microsoft.com/IE/feedback/details/1736512/
		rnoInnerhtml = /<script|<style|<link/i,
	
		// checked="checked" or checked
		rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
		rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;
	
	// Prefer a tbody over its parent table for containing new rows
	function manipulationTarget( elem, content ) {
		if ( nodeName( elem, "table" ) &&
			nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) {
	
			return jQuery( elem ).children( "tbody" )[ 0 ] || elem;
		}
	
		return elem;
	}
	
	// Replace/restore the type attribute of script elements for safe DOM manipulation
	function disableScript( elem ) {
		elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type;
		return elem;
	}
	function restoreScript( elem ) {
		if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) {
			elem.type = elem.type.slice( 5 );
		} else {
			elem.removeAttribute( "type" );
		}
	
		return elem;
	}
	
	function cloneCopyEvent( src, dest ) {
		var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;
	
		if ( dest.nodeType !== 1 ) {
			return;
		}
	
		// 1. Copy private data: events, handlers, etc.
		if ( dataPriv.hasData( src ) ) {
			pdataOld = dataPriv.access( src );
			pdataCur = dataPriv.set( dest, pdataOld );
			events = pdataOld.events;
	
			if ( events ) {
				delete pdataCur.handle;
				pdataCur.events = {};
	
				for ( type in events ) {
					for ( i = 0, l = events[ type ].length; i < l; i++ ) {
						jQuery.event.add( dest, type, events[ type ][ i ] );
					}
				}
			}
		}
	
		// 2. Copy user data
		if ( dataUser.hasData( src ) ) {
			udataOld = dataUser.access( src );
			udataCur = jQuery.extend( {}, udataOld );
	
			dataUser.set( dest, udataCur );
		}
	}
	
	// Fix IE bugs, see support tests
	function fixInput( src, dest ) {
		var nodeName = dest.nodeName.toLowerCase();
	
		// Fails to persist the checked state of a cloned checkbox or radio button.
		if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
			dest.checked = src.checked;
	
		// Fails to return the selected option to the default selected state when cloning options
		} else if ( nodeName === "input" || nodeName === "textarea" ) {
			dest.defaultValue = src.defaultValue;
		}
	}
	
	function domManip( collection, args, callback, ignored ) {
	
		// Flatten any nested arrays
		args = concat.apply( [], args );
	
		var fragment, first, scripts, hasScripts, node, doc,
			i = 0,
			l = collection.length,
			iNoClone = l - 1,
			value = args[ 0 ],
			valueIsFunction = isFunction( value );
	
		// We can't cloneNode fragments that contain checked, in WebKit
		if ( valueIsFunction ||
				( l > 1 && typeof value === "string" &&
					!support.checkClone && rchecked.test( value ) ) ) {
			return collection.each( function( index ) {
				var self = collection.eq( index );
				if ( valueIsFunction ) {
					args[ 0 ] = value.call( this, index, self.html() );
				}
				domManip( self, args, callback, ignored );
			} );
		}
	
		if ( l ) {
			fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );
			first = fragment.firstChild;
	
			if ( fragment.childNodes.length === 1 ) {
				fragment = first;
			}
	
			// Require either new content or an interest in ignored elements to invoke the callback
			if ( first || ignored ) {
				scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
				hasScripts = scripts.length;
	
				// Use the original fragment for the last item
				// instead of the first because it can end up
				// being emptied incorrectly in certain situations (#8070).
				for ( ; i < l; i++ ) {
					node = fragment;
	
					if ( i !== iNoClone ) {
						node = jQuery.clone( node, true, true );
	
						// Keep references to cloned scripts for later restoration
						if ( hasScripts ) {
	
							// Support: Android <=4.0 only, PhantomJS 1 only
							// push.apply(_, arraylike) throws on ancient WebKit
							jQuery.merge( scripts, getAll( node, "script" ) );
						}
					}
	
					callback.call( collection[ i ], node, i );
				}
	
				if ( hasScripts ) {
					doc = scripts[ scripts.length - 1 ].ownerDocument;
	
					// Reenable scripts
					jQuery.map( scripts, restoreScript );
	
					// Evaluate executable scripts on first document insertion
					for ( i = 0; i < hasScripts; i++ ) {
						node = scripts[ i ];
						if ( rscriptType.test( node.type || "" ) &&
							!dataPriv.access( node, "globalEval" ) &&
							jQuery.contains( doc, node ) ) {
	
							if ( node.src && ( node.type || "" ).toLowerCase()  !== "module" ) {
	
								// Optional AJAX dependency, but won't run scripts if not present
								if ( jQuery._evalUrl ) {
									jQuery._evalUrl( node.src );
								}
							} else {
								DOMEval( node.textContent.replace( rcleanScript, "" ), doc, node );
							}
						}
					}
				}
			}
		}
	
		return collection;
	}
	
	function remove( elem, selector, keepData ) {
		var node,
			nodes = selector ? jQuery.filter( selector, elem ) : elem,
			i = 0;
	
		for ( ; ( node = nodes[ i ] ) != null; i++ ) {
			if ( !keepData && node.nodeType === 1 ) {
				jQuery.cleanData( getAll( node ) );
			}
	
			if ( node.parentNode ) {
				if ( keepData && jQuery.contains( node.ownerDocument, node ) ) {
					setGlobalEval( getAll( node, "script" ) );
				}
				node.parentNode.removeChild( node );
			}
		}
	
		return elem;
	}
	
	jQuery.extend( {
		htmlPrefilter: function( html ) {
			return html.replace( rxhtmlTag, "<$1></$2>" );
		},
	
		clone: function( elem, dataAndEvents, deepDataAndEvents ) {
			var i, l, srcElements, destElements,
				clone = elem.cloneNode( true ),
				inPage = jQuery.contains( elem.ownerDocument, elem );
	
			// Fix IE cloning issues
			if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&
					!jQuery.isXMLDoc( elem ) ) {
	
				// We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2
				destElements = getAll( clone );
				srcElements = getAll( elem );
	
				for ( i = 0, l = srcElements.length; i < l; i++ ) {
					fixInput( srcElements[ i ], destElements[ i ] );
				}
			}
	
			// Copy the events from the original to the clone
			if ( dataAndEvents ) {
				if ( deepDataAndEvents ) {
					srcElements = srcElements || getAll( elem );
					destElements = destElements || getAll( clone );
	
					for ( i = 0, l = srcElements.length; i < l; i++ ) {
						cloneCopyEvent( srcElements[ i ], destElements[ i ] );
					}
				} else {
					cloneCopyEvent( elem, clone );
				}
			}
	
			// Preserve script evaluation history
			destElements = getAll( clone, "script" );
			if ( destElements.length > 0 ) {
				setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
			}
	
			// Return the cloned set
			return clone;
		},
	
		cleanData: function( elems ) {
			var data, elem, type,
				special = jQuery.event.special,
				i = 0;
	
			for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {
				if ( acceptData( elem ) ) {
					if ( ( data = elem[ dataPriv.expando ] ) ) {
						if ( data.events ) {
							for ( type in data.events ) {
								if ( special[ type ] ) {
									jQuery.event.remove( elem, type );
	
								// This is a shortcut to avoid jQuery.event.remove's overhead
								} else {
									jQuery.removeEvent( elem, type, data.handle );
								}
							}
						}
	
						// Support: Chrome <=35 - 45+
						// Assign undefined instead of using delete, see Data#remove
						elem[ dataPriv.expando ] = undefined;
					}
					if ( elem[ dataUser.expando ] ) {
	
						// Support: Chrome <=35 - 45+
						// Assign undefined instead of using delete, see Data#remove
						elem[ dataUser.expando ] = undefined;
					}
				}
			}
		}
	} );
	
	jQuery.fn.extend( {
		detach: function( selector ) {
			return remove( this, selector, true );
		},
	
		remove: function( selector ) {
			return remove( this, selector );
		},
	
		text: function( value ) {
			return access( this, function( value ) {
				return value === undefined ?
					jQuery.text( this ) :
					this.empty().each( function() {
						if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
							this.textContent = value;
						}
					} );
			}, null, value, arguments.length );
		},
	
		append: function() {
			return domManip( this, arguments, function( elem ) {
				if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
					var target = manipulationTarget( this, elem );
					target.appendChild( elem );
				}
			} );
		},
	
		prepend: function() {
			return domManip( this, arguments, function( elem ) {
				if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
					var target = manipulationTarget( this, elem );
					target.insertBefore( elem, target.firstChild );
				}
			} );
		},
	
		before: function() {
			return domManip( this, arguments, function( elem ) {
				if ( this.parentNode ) {
					this.parentNode.insertBefore( elem, this );
				}
			} );
		},
	
		after: function() {
			return domManip( this, arguments, function( elem ) {
				if ( this.parentNode ) {
					this.parentNode.insertBefore( elem, this.nextSibling );
				}
			} );
		},
	
		empty: function() {
			var elem,
				i = 0;
	
			for ( ; ( elem = this[ i ] ) != null; i++ ) {
				if ( elem.nodeType === 1 ) {
	
					// Prevent memory leaks
					jQuery.cleanData( getAll( elem, false ) );
	
					// Remove any remaining nodes
					elem.textContent = "";
				}
			}
	
			return this;
		},
	
		clone: function( dataAndEvents, deepDataAndEvents ) {
			dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
			deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
	
			return this.map( function() {
				return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
			} );
		},
	
		html: function( value ) {
			return access( this, function( value ) {
				var elem = this[ 0 ] || {},
					i = 0,
					l = this.length;
	
				if ( value === undefined && elem.nodeType === 1 ) {
					return elem.innerHTML;
				}
	
				// See if we can take a shortcut and just use innerHTML
				if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
					!wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) {
	
					value = jQuery.htmlPrefilter( value );
	
					try {
						for ( ; i < l; i++ ) {
							elem = this[ i ] || {};
	
							// Remove element nodes and prevent memory leaks
							if ( elem.nodeType === 1 ) {
								jQuery.cleanData( getAll( elem, false ) );
								elem.innerHTML = value;
							}
						}
	
						elem = 0;
	
					// If using innerHTML throws an exception, use the fallback method
					} catch ( e ) {}
				}
	
				if ( elem ) {
					this.empty().append( value );
				}
			}, null, value, arguments.length );
		},
	
		replaceWith: function() {
			var ignored = [];
	
			// Make the changes, replacing each non-ignored context element with the new content
			return domManip( this, arguments, function( elem ) {
				var parent = this.parentNode;
	
				if ( jQuery.inArray( this, ignored ) < 0 ) {
					jQuery.cleanData( getAll( this ) );
					if ( parent ) {
						parent.replaceChild( elem, this );
					}
				}
	
			// Force callback invocation
			}, ignored );
		}
	} );
	
	jQuery.each( {
		appendTo: "append",
		prependTo: "prepend",
		insertBefore: "before",
		insertAfter: "after",
		replaceAll: "replaceWith"
	}, function( name, original ) {
		jQuery.fn[ name ] = function( selector ) {
			var elems,
				ret = [],
				insert = jQuery( selector ),
				last = insert.length - 1,
				i = 0;
	
			for ( ; i <= last; i++ ) {
				elems = i === last ? this : this.clone( true );
				jQuery( insert[ i ] )[ original ]( elems );
	
				// Support: Android <=4.0 only, PhantomJS 1 only
				// .get() because push.apply(_, arraylike) throws on ancient WebKit
				push.apply( ret, elems.get() );
			}
	
			return this.pushStack( ret );
		};
	} );
	var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
	
	var getStyles = function( elem ) {
	
			// Support: IE <=11 only, Firefox <=30 (#15098, #14150)
			// IE throws on elements created in popups
			// FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
			var view = elem.ownerDocument.defaultView;
	
			if ( !view || !view.opener ) {
				view = window;
			}
	
			return view.getComputedStyle( elem );
		};
	
	var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" );
	
	
	
	( function() {
	
		// Executing both pixelPosition & boxSizingReliable tests require only one layout
		// so they're executed at the same time to save the second computation.
		function computeStyleTests() {
	
			// This is a singleton, we need to execute it only once
			if ( !div ) {
				return;
			}
	
			container.style.cssText = "position:absolute;left:-11111px;width:60px;" +
				"margin-top:1px;padding:0;border:0";
			div.style.cssText =
				"position:relative;display:block;box-sizing:border-box;overflow:scroll;" +
				"margin:auto;border:1px;padding:1px;" +
				"width:60%;top:1%";
			documentElement.appendChild( container ).appendChild( div );
	
			var divStyle = window.getComputedStyle( div );
			pixelPositionVal = divStyle.top !== "1%";
	
			// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44
			reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;
	
			// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3
			// Some styles come back with percentage values, even though they shouldn't
			div.style.right = "60%";
			pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;
	
			// Support: IE 9 - 11 only
			// Detect misreporting of content dimensions for box-sizing:border-box elements
			boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;
	
			// Support: IE 9 only
			// Detect overflow:scroll screwiness (gh-3699)
			div.style.position = "absolute";
			scrollboxSizeVal = div.offsetWidth === 36 || "absolute";
	
			documentElement.removeChild( container );
	
			// Nullify the div so it wouldn't be stored in the memory and
			// it will also be a sign that checks already performed
			div = null;
		}
	
		function roundPixelMeasures( measure ) {
			return Math.round( parseFloat( measure ) );
		}
	
		var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,
			reliableMarginLeftVal,
			container = document.createElement( "div" ),
			div = document.createElement( "div" );
	
		// Finish early in limited (non-browser) environments
		if ( !div.style ) {
			return;
		}
	
		// Support: IE <=9 - 11 only
		// Style of cloned element affects source element cloned (#8908)
		div.style.backgroundClip = "content-box";
		div.cloneNode( true ).style.backgroundClip = "";
		support.clearCloneStyle = div.style.backgroundClip === "content-box";
	
		jQuery.extend( support, {
			boxSizingReliable: function() {
				computeStyleTests();
				return boxSizingReliableVal;
			},
			pixelBoxStyles: function() {
				computeStyleTests();
				return pixelBoxStylesVal;
			},
			pixelPosition: function() {
				computeStyleTests();
				return pixelPositionVal;
			},
			reliableMarginLeft: function() {
				computeStyleTests();
				return reliableMarginLeftVal;
			},
			scrollboxSize: function() {
				computeStyleTests();
				return scrollboxSizeVal;
			}
		} );
	} )();
	
	
	function curCSS( elem, name, computed ) {
		var width, minWidth, maxWidth, ret,
	
			// Support: Firefox 51+
			// Retrieving style before computed somehow
			// fixes an issue with getting wrong values
			// on detached elements
			style = elem.style;
	
		computed = computed || getStyles( elem );
	
		// getPropertyValue is needed for:
		//   .css('filter') (IE 9 only, #12537)
		//   .css('--customProperty) (#3144)
		if ( computed ) {
			ret = computed.getPropertyValue( name ) || computed[ name ];
	
			if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
				ret = jQuery.style( elem, name );
			}
	
			// A tribute to the "awesome hack by Dean Edwards"
			// Android Browser returns percentage for some values,
			// but width seems to be reliably pixels.
			// This is against the CSSOM draft spec:
			// https://drafts.csswg.org/cssom/#resolved-values
			if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {
	
				// Remember the original values
				width = style.width;
				minWidth = style.minWidth;
				maxWidth = style.maxWidth;
	
				// Put in the new values to get a computed value out
				style.minWidth = style.maxWidth = style.width = ret;
				ret = computed.width;
	
				// Revert the changed values
				style.width = width;
				style.minWidth = minWidth;
				style.maxWidth = maxWidth;
			}
		}
	
		return ret !== undefined ?
	
			// Support: IE <=9 - 11 only
			// IE returns zIndex value as an integer.
			ret + "" :
			ret;
	}
	
	
	function addGetHookIf( conditionFn, hookFn ) {
	
		// Define the hook, we'll check on the first run if it's really needed.
		return {
			get: function() {
				if ( conditionFn() ) {
	
					// Hook not needed (or it's not possible to use it due
					// to missing dependency), remove it.
					delete this.get;
					return;
				}
	
				// Hook needed; redefine it so that the support test is not executed again.
				return ( this.get = hookFn ).apply( this, arguments );
			}
		};
	}
	
	
	var
	
		// Swappable if display is none or starts with table
		// except "table", "table-cell", or "table-caption"
		// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
		rdisplayswap = /^(none|table(?!-c[ea]).+)/,
		rcustomProp = /^--/,
		cssShow = { position: "absolute", visibility: "hidden", display: "block" },
		cssNormalTransform = {
			letterSpacing: "0",
			fontWeight: "400"
		},
	
		cssPrefixes = [ "Webkit", "Moz", "ms" ],
		emptyStyle = document.createElement( "div" ).style;
	
	// Return a css property mapped to a potentially vendor prefixed property
	function vendorPropName( name ) {
	
		// Shortcut for names that are not vendor prefixed
		if ( name in emptyStyle ) {
			return name;
		}
	
		// Check for vendor prefixed names
		var capName = name[ 0 ].toUpperCase() + name.slice( 1 ),
			i = cssPrefixes.length;
	
		while ( i-- ) {
			name = cssPrefixes[ i ] + capName;
			if ( name in emptyStyle ) {
				return name;
			}
		}
	}
	
	// Return a property mapped along what jQuery.cssProps suggests or to
	// a vendor prefixed property.
	function finalPropName( name ) {
		var ret = jQuery.cssProps[ name ];
		if ( !ret ) {
			ret = jQuery.cssProps[ name ] = vendorPropName( name ) || name;
		}
		return ret;
	}
	
	function setPositiveNumber( elem, value, subtract ) {
	
		// Any relative (+/-) values have already been
		// normalized at this point
		var matches = rcssNum.exec( value );
		return matches ?
	
			// Guard against undefined "subtract", e.g., when used as in cssHooks
			Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) :
			value;
	}
	
	function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {
		var i = dimension === "width" ? 1 : 0,
			extra = 0,
			delta = 0;
	
		// Adjustment may not be necessary
		if ( box === ( isBorderBox ? "border" : "content" ) ) {
			return 0;
		}
	
		for ( ; i < 4; i += 2 ) {
	
			// Both box models exclude margin
			if ( box === "margin" ) {
				delta += jQuery.css( elem, box + cssExpand[ i ], true, styles );
			}
	
			// If we get here with a content-box, we're seeking "padding" or "border" or "margin"
			if ( !isBorderBox ) {
	
				// Add padding
				delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
	
				// For "border" or "margin", add border
				if ( box !== "padding" ) {
					delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
	
				// But still keep track of it otherwise
				} else {
					extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
				}
	
			// If we get here with a border-box (content + padding + border), we're seeking "content" or
			// "padding" or "margin"
			} else {
	
				// For "content", subtract padding
				if ( box === "content" ) {
					delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
				}
	
				// For "content" or "padding", subtract border
				if ( box !== "margin" ) {
					delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
				}
			}
		}
	
		// Account for positive content-box scroll gutter when requested by providing computedVal
		if ( !isBorderBox && computedVal >= 0 ) {
	
			// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border
			// Assuming integer scroll gutter, subtract the rest and round down
			delta += Math.max( 0, Math.ceil(
				elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -
				computedVal -
				delta -
				extra -
				0.5
			) );
		}
	
		return delta;
	}
	
	function getWidthOrHeight( elem, dimension, extra ) {
	
		// Start with computed style
		var styles = getStyles( elem ),
			val = curCSS( elem, dimension, styles ),
			isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
			valueIsBorderBox = isBorderBox;
	
		// Support: Firefox <=54
		// Return a confounding non-pixel value or feign ignorance, as appropriate.
		if ( rnumnonpx.test( val ) ) {
			if ( !extra ) {
				return val;
			}
			val = "auto";
		}
	
		// Check for style in case a browser which returns unreliable values
		// for getComputedStyle silently falls back to the reliable elem.style
		valueIsBorderBox = valueIsBorderBox &&
			( support.boxSizingReliable() || val === elem.style[ dimension ] );
	
		// Fall back to offsetWidth/offsetHeight when value is "auto"
		// This happens for inline elements with no explicit setting (gh-3571)
		// Support: Android <=4.1 - 4.3 only
		// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)
		if ( val === "auto" ||
			!parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) {
	
			val = elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ];
	
			// offsetWidth/offsetHeight provide border-box values
			valueIsBorderBox = true;
		}
	
		// Normalize "" and auto
		val = parseFloat( val ) || 0;
	
		// Adjust for the element's box model
		return ( val +
			boxModelAdjustment(
				elem,
				dimension,
				extra || ( isBorderBox ? "border" : "content" ),
				valueIsBorderBox,
				styles,
	
				// Provide the current computed size to request scroll gutter calculation (gh-3589)
				val
			)
		) + "px";
	}
	
	jQuery.extend( {
	
		// Add in style property hooks for overriding the default
		// behavior of getting and setting a style property
		cssHooks: {
			opacity: {
				get: function( elem, computed ) {
					if ( computed ) {
	
						// We should always get a number back from opacity
						var ret = curCSS( elem, "opacity" );
						return ret === "" ? "1" : ret;
					}
				}
			}
		},
	
		// Don't automatically add "px" to these possibly-unitless properties
		cssNumber: {
			"animationIterationCount": true,
			"columnCount": true,
			"fillOpacity": true,
			"flexGrow": true,
			"flexShrink": true,
			"fontWeight": true,
			"lineHeight": true,
			"opacity": true,
			"order": true,
			"orphans": true,
			"widows": true,
			"zIndex": true,
			"zoom": true
		},
	
		// Add in properties whose names you wish to fix before
		// setting or getting the value
		cssProps: {},
	
		// Get and set the style property on a DOM Node
		style: function( elem, name, value, extra ) {
	
			// Don't set styles on text and comment nodes
			if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
				return;
			}
	
			// Make sure that we're working with the right name
			var ret, type, hooks,
				origName = camelCase( name ),
				isCustomProp = rcustomProp.test( name ),
				style = elem.style;
	
			// Make sure that we're working with the right name. We don't
			// want to query the value if it is a CSS custom property
			// since they are user-defined.
			if ( !isCustomProp ) {
				name = finalPropName( origName );
			}
	
			// Gets hook for the prefixed version, then unprefixed version
			hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
	
			// Check if we're setting a value
			if ( value !== undefined ) {
				type = typeof value;
	
				// Convert "+=" or "-=" to relative numbers (#7345)
				if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {
					value = adjustCSS( elem, name, ret );
	
					// Fixes bug #9237
					type = "number";
				}
	
				// Make sure that null and NaN values aren't set (#7116)
				if ( value == null || value !== value ) {
					return;
				}
	
				// If a number was passed in, add the unit (except for certain CSS properties)
				if ( type === "number" ) {
					value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" );
				}
	
				// background-* props affect original clone's values
				if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) {
					style[ name ] = "inherit";
				}
	
				// If a hook was provided, use that value, otherwise just set the specified value
				if ( !hooks || !( "set" in hooks ) ||
					( value = hooks.set( elem, value, extra ) ) !== undefined ) {
	
					if ( isCustomProp ) {
						style.setProperty( name, value );
					} else {
						style[ name ] = value;
					}
				}
	
			} else {
	
				// If a hook was provided get the non-computed value from there
				if ( hooks && "get" in hooks &&
					( ret = hooks.get( elem, false, extra ) ) !== undefined ) {
	
					return ret;
				}
	
				// Otherwise just get the value from the style object
				return style[ name ];
			}
		},
	
		css: function( elem, name, extra, styles ) {
			var val, num, hooks,
				origName = camelCase( name ),
				isCustomProp = rcustomProp.test( name );
	
			// Make sure that we're working with the right name. We don't
			// want to modify the value if it is a CSS custom property
			// since they are user-defined.
			if ( !isCustomProp ) {
				name = finalPropName( origName );
			}
	
			// Try prefixed name followed by the unprefixed name
			hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
	
			// If a hook was provided get the computed value from there
			if ( hooks && "get" in hooks ) {
				val = hooks.get( elem, true, extra );
			}
	
			// Otherwise, if a way to get the computed value exists, use that
			if ( val === undefined ) {
				val = curCSS( elem, name, styles );
			}
	
			// Convert "normal" to computed value
			if ( val === "normal" && name in cssNormalTransform ) {
				val = cssNormalTransform[ name ];
			}
	
			// Make numeric if forced or a qualifier was provided and val looks numeric
			if ( extra === "" || extra ) {
				num = parseFloat( val );
				return extra === true || isFinite( num ) ? num || 0 : val;
			}
	
			return val;
		}
	} );
	
	jQuery.each( [ "height", "width" ], function( i, dimension ) {
		jQuery.cssHooks[ dimension ] = {
			get: function( elem, computed, extra ) {
				if ( computed ) {
	
					// Certain elements can have dimension info if we invisibly show them
					// but it must have a current display style that would benefit
					return rdisplayswap.test( jQuery.css( elem, "display" ) ) &&
	
						// Support: Safari 8+
						// Table columns in Safari have non-zero offsetWidth & zero
						// getBoundingClientRect().width unless display is changed.
						// Support: IE <=11 only
						// Running getBoundingClientRect on a disconnected node
						// in IE throws an error.
						( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?
							swap( elem, cssShow, function() {
								return getWidthOrHeight( elem, dimension, extra );
							} ) :
							getWidthOrHeight( elem, dimension, extra );
				}
			},
	
			set: function( elem, value, extra ) {
				var matches,
					styles = getStyles( elem ),
					isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
					subtract = extra && boxModelAdjustment(
						elem,
						dimension,
						extra,
						isBorderBox,
						styles
					);
	
				// Account for unreliable border-box dimensions by comparing offset* to computed and
				// faking a content-box to get border and padding (gh-3699)
				if ( isBorderBox && support.scrollboxSize() === styles.position ) {
					subtract -= Math.ceil(
						elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -
						parseFloat( styles[ dimension ] ) -
						boxModelAdjustment( elem, dimension, "border", false, styles ) -
						0.5
					);
				}
	
				// Convert to pixels if value adjustment is needed
				if ( subtract && ( matches = rcssNum.exec( value ) ) &&
					( matches[ 3 ] || "px" ) !== "px" ) {
	
					elem.style[ dimension ] = value;
					value = jQuery.css( elem, dimension );
				}
	
				return setPositiveNumber( elem, value, subtract );
			}
		};
	} );
	
	jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,
		function( elem, computed ) {
			if ( computed ) {
				return ( parseFloat( curCSS( elem, "marginLeft" ) ) ||
					elem.getBoundingClientRect().left -
						swap( elem, { marginLeft: 0 }, function() {
							return elem.getBoundingClientRect().left;
						} )
					) + "px";
			}
		}
	);
	
	// These hooks are used by animate to expand properties
	jQuery.each( {
		margin: "",
		padding: "",
		border: "Width"
	}, function( prefix, suffix ) {
		jQuery.cssHooks[ prefix + suffix ] = {
			expand: function( value ) {
				var i = 0,
					expanded = {},
	
					// Assumes a single number if not a string
					parts = typeof value === "string" ? value.split( " " ) : [ value ];
	
				for ( ; i < 4; i++ ) {
					expanded[ prefix + cssExpand[ i ] + suffix ] =
						parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
				}
	
				return expanded;
			}
		};
	
		if ( prefix !== "margin" ) {
			jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
		}
	} );
	
	jQuery.fn.extend( {
		css: function( name, value ) {
			return access( this, function( elem, name, value ) {
				var styles, len,
					map = {},
					i = 0;
	
				if ( Array.isArray( name ) ) {
					styles = getStyles( elem );
					len = name.length;
	
					for ( ; i < len; i++ ) {
						map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
					}
	
					return map;
				}
	
				return value !== undefined ?
					jQuery.style( elem, name, value ) :
					jQuery.css( elem, name );
			}, name, value, arguments.length > 1 );
		}
	} );
	
	
	function Tween( elem, options, prop, end, easing ) {
		return new Tween.prototype.init( elem, options, prop, end, easing );
	}
	jQuery.Tween = Tween;
	
	Tween.prototype = {
		constructor: Tween,
		init: function( elem, options, prop, end, easing, unit ) {
			this.elem = elem;
			this.prop = prop;
			this.easing = easing || jQuery.easing._default;
			this.options = options;
			this.start = this.now = this.cur();
			this.end = end;
			this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
		},
		cur: function() {
			var hooks = Tween.propHooks[ this.prop ];
	
			return hooks && hooks.get ?
				hooks.get( this ) :
				Tween.propHooks._default.get( this );
		},
		run: function( percent ) {
			var eased,
				hooks = Tween.propHooks[ this.prop ];
	
			if ( this.options.duration ) {
				this.pos = eased = jQuery.easing[ this.easing ](
					percent, this.options.duration * percent, 0, 1, this.options.duration
				);
			} else {
				this.pos = eased = percent;
			}
			this.now = ( this.end - this.start ) * eased + this.start;
	
			if ( this.options.step ) {
				this.options.step.call( this.elem, this.now, this );
			}
	
			if ( hooks && hooks.set ) {
				hooks.set( this );
			} else {
				Tween.propHooks._default.set( this );
			}
			return this;
		}
	};
	
	Tween.prototype.init.prototype = Tween.prototype;
	
	Tween.propHooks = {
		_default: {
			get: function( tween ) {
				var result;
	
				// Use a property on the element directly when it is not a DOM element,
				// or when there is no matching style property that exists.
				if ( tween.elem.nodeType !== 1 ||
					tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {
					return tween.elem[ tween.prop ];
				}
	
				// Passing an empty string as a 3rd parameter to .css will automatically
				// attempt a parseFloat and fallback to a string if the parse fails.
				// Simple values such as "10px" are parsed to Float;
				// complex values such as "rotate(1rad)" are returned as-is.
				result = jQuery.css( tween.elem, tween.prop, "" );
	
				// Empty strings, null, undefined and "auto" are converted to 0.
				return !result || result === "auto" ? 0 : result;
			},
			set: function( tween ) {
	
				// Use step hook for back compat.
				// Use cssHook if its there.
				// Use .style if available and use plain properties where available.
				if ( jQuery.fx.step[ tween.prop ] ) {
					jQuery.fx.step[ tween.prop ]( tween );
				} else if ( tween.elem.nodeType === 1 &&
					( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null ||
						jQuery.cssHooks[ tween.prop ] ) ) {
					jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
				} else {
					tween.elem[ tween.prop ] = tween.now;
				}
			}
		}
	};
	
	// Support: IE <=9 only
	// Panic based approach to setting things on disconnected nodes
	Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
		set: function( tween ) {
			if ( tween.elem.nodeType && tween.elem.parentNode ) {
				tween.elem[ tween.prop ] = tween.now;
			}
		}
	};
	
	jQuery.easing = {
		linear: function( p ) {
			return p;
		},
		swing: function( p ) {
			return 0.5 - Math.cos( p * Math.PI ) / 2;
		},
		_default: "swing"
	};
	
	jQuery.fx = Tween.prototype.init;
	
	// Back compat <1.8 extension point
	jQuery.fx.step = {};
	
	
	
	
	var
		fxNow, inProgress,
		rfxtypes = /^(?:toggle|show|hide)$/,
		rrun = /queueHooks$/;
	
	function schedule() {
		if ( inProgress ) {
			if ( document.hidden === false && window.requestAnimationFrame ) {
				window.requestAnimationFrame( schedule );
			} else {
				window.setTimeout( schedule, jQuery.fx.interval );
			}
	
			jQuery.fx.tick();
		}
	}
	
	// Animations created synchronously will run synchronously
	function createFxNow() {
		window.setTimeout( function() {
			fxNow = undefined;
		} );
		return ( fxNow = Date.now() );
	}
	
	// Generate parameters to create a standard animation
	function genFx( type, includeWidth ) {
		var which,
			i = 0,
			attrs = { height: type };
	
		// If we include width, step value is 1 to do all cssExpand values,
		// otherwise step value is 2 to skip over Left and Right
		includeWidth = includeWidth ? 1 : 0;
		for ( ; i < 4; i += 2 - includeWidth ) {
			which = cssExpand[ i ];
			attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
		}
	
		if ( includeWidth ) {
			attrs.opacity = attrs.width = type;
		}
	
		return attrs;
	}
	
	function createTween( value, prop, animation ) {
		var tween,
			collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ),
			index = 0,
			length = collection.length;
		for ( ; index < length; index++ ) {
			if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {
	
				// We're done with this property
				return tween;
			}
		}
	}
	
	function defaultPrefilter( elem, props, opts ) {
		var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,
			isBox = "width" in props || "height" in props,
			anim = this,
			orig = {},
			style = elem.style,
			hidden = elem.nodeType && isHiddenWithinTree( elem ),
			dataShow = dataPriv.get( elem, "fxshow" );
	
		// Queue-skipping animations hijack the fx hooks
		if ( !opts.queue ) {
			hooks = jQuery._queueHooks( elem, "fx" );
			if ( hooks.unqueued == null ) {
				hooks.unqueued = 0;
				oldfire = hooks.empty.fire;
				hooks.empty.fire = function() {
					if ( !hooks.unqueued ) {
						oldfire();
					}
				};
			}
			hooks.unqueued++;
	
			anim.always( function() {
	
				// Ensure the complete handler is called before this completes
				anim.always( function() {
					hooks.unqueued--;
					if ( !jQuery.queue( elem, "fx" ).length ) {
						hooks.empty.fire();
					}
				} );
			} );
		}
	
		// Detect show/hide animations
		for ( prop in props ) {
			value = props[ prop ];
			if ( rfxtypes.test( value ) ) {
				delete props[ prop ];
				toggle = toggle || value === "toggle";
				if ( value === ( hidden ? "hide" : "show" ) ) {
	
					// Pretend to be hidden if this is a "show" and
					// there is still data from a stopped show/hide
					if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
						hidden = true;
	
					// Ignore all other no-op show/hide data
					} else {
						continue;
					}
				}
				orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
			}
		}
	
		// Bail out if this is a no-op like .hide().hide()
		propTween = !jQuery.isEmptyObject( props );
		if ( !propTween && jQuery.isEmptyObject( orig ) ) {
			return;
		}
	
		// Restrict "overflow" and "display" styles during box animations
		if ( isBox && elem.nodeType === 1 ) {
	
			// Support: IE <=9 - 11, Edge 12 - 15
			// Record all 3 overflow attributes because IE does not infer the shorthand
			// from identically-valued overflowX and overflowY and Edge just mirrors
			// the overflowX value there.
			opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
	
			// Identify a display type, preferring old show/hide data over the CSS cascade
			restoreDisplay = dataShow && dataShow.display;
			if ( restoreDisplay == null ) {
				restoreDisplay = dataPriv.get( elem, "display" );
			}
			display = jQuery.css( elem, "display" );
			if ( display === "none" ) {
				if ( restoreDisplay ) {
					display = restoreDisplay;
				} else {
	
					// Get nonempty value(s) by temporarily forcing visibility
					showHide( [ elem ], true );
					restoreDisplay = elem.style.display || restoreDisplay;
					display = jQuery.css( elem, "display" );
					showHide( [ elem ] );
				}
			}
	
			// Animate inline elements as inline-block
			if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) {
				if ( jQuery.css( elem, "float" ) === "none" ) {
	
					// Restore the original display value at the end of pure show/hide animations
					if ( !propTween ) {
						anim.done( function() {
							style.display = restoreDisplay;
						} );
						if ( restoreDisplay == null ) {
							display = style.display;
							restoreDisplay = display === "none" ? "" : display;
						}
					}
					style.display = "inline-block";
				}
			}
		}
	
		if ( opts.overflow ) {
			style.overflow = "hidden";
			anim.always( function() {
				style.overflow = opts.overflow[ 0 ];
				style.overflowX = opts.overflow[ 1 ];
				style.overflowY = opts.overflow[ 2 ];
			} );
		}
	
		// Implement show/hide animations
		propTween = false;
		for ( prop in orig ) {
	
			// General show/hide setup for this element animation
			if ( !propTween ) {
				if ( dataShow ) {
					if ( "hidden" in dataShow ) {
						hidden = dataShow.hidden;
					}
				} else {
					dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } );
				}
	
				// Store hidden/visible for toggle so `.stop().toggle()` "reverses"
				if ( toggle ) {
					dataShow.hidden = !hidden;
				}
	
				// Show elements before animating them
				if ( hidden ) {
					showHide( [ elem ], true );
				}
	
				/* eslint-disable no-loop-func */
	
				anim.done( function() {
	
				/* eslint-enable no-loop-func */
	
					// The final step of a "hide" animation is actually hiding the element
					if ( !hidden ) {
						showHide( [ elem ] );
					}
					dataPriv.remove( elem, "fxshow" );
					for ( prop in orig ) {
						jQuery.style( elem, prop, orig[ prop ] );
					}
				} );
			}
	
			// Per-property setup
			propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
			if ( !( prop in dataShow ) ) {
				dataShow[ prop ] = propTween.start;
				if ( hidden ) {
					propTween.end = propTween.start;
					propTween.start = 0;
				}
			}
		}
	}
	
	function propFilter( props, specialEasing ) {
		var index, name, easing, value, hooks;
	
		// camelCase, specialEasing and expand cssHook pass
		for ( index in props ) {
			name = camelCase( index );
			easing = specialEasing[ name ];
			value = props[ index ];
			if ( Array.isArray( value ) ) {
				easing = value[ 1 ];
				value = props[ index ] = value[ 0 ];
			}
	
			if ( index !== name ) {
				props[ name ] = value;
				delete props[ index ];
			}
	
			hooks = jQuery.cssHooks[ name ];
			if ( hooks && "expand" in hooks ) {
				value = hooks.expand( value );
				delete props[ name ];
	
				// Not quite $.extend, this won't overwrite existing keys.
				// Reusing 'index' because we have the correct "name"
				for ( index in value ) {
					if ( !( index in props ) ) {
						props[ index ] = value[ index ];
						specialEasing[ index ] = easing;
					}
				}
			} else {
				specialEasing[ name ] = easing;
			}
		}
	}
	
	function Animation( elem, properties, options ) {
		var result,
			stopped,
			index = 0,
			length = Animation.prefilters.length,
			deferred = jQuery.Deferred().always( function() {
	
				// Don't match elem in the :animated selector
				delete tick.elem;
			} ),
			tick = function() {
				if ( stopped ) {
					return false;
				}
				var currentTime = fxNow || createFxNow(),
					remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
	
					// Support: Android 2.3 only
					// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)
					temp = remaining / animation.duration || 0,
					percent = 1 - temp,
					index = 0,
					length = animation.tweens.length;
	
				for ( ; index < length; index++ ) {
					animation.tweens[ index ].run( percent );
				}
	
				deferred.notifyWith( elem, [ animation, percent, remaining ] );
	
				// If there's more to do, yield
				if ( percent < 1 && length ) {
					return remaining;
				}
	
				// If this was an empty animation, synthesize a final progress notification
				if ( !length ) {
					deferred.notifyWith( elem, [ animation, 1, 0 ] );
				}
	
				// Resolve the animation and report its conclusion
				deferred.resolveWith( elem, [ animation ] );
				return false;
			},
			animation = deferred.promise( {
				elem: elem,
				props: jQuery.extend( {}, properties ),
				opts: jQuery.extend( true, {
					specialEasing: {},
					easing: jQuery.easing._default
				}, options ),
				originalProperties: properties,
				originalOptions: options,
				startTime: fxNow || createFxNow(),
				duration: options.duration,
				tweens: [],
				createTween: function( prop, end ) {
					var tween = jQuery.Tween( elem, animation.opts, prop, end,
							animation.opts.specialEasing[ prop ] || animation.opts.easing );
					animation.tweens.push( tween );
					return tween;
				},
				stop: function( gotoEnd ) {
					var index = 0,
	
						// If we are going to the end, we want to run all the tweens
						// otherwise we skip this part
						length = gotoEnd ? animation.tweens.length : 0;
					if ( stopped ) {
						return this;
					}
					stopped = true;
					for ( ; index < length; index++ ) {
						animation.tweens[ index ].run( 1 );
					}
	
					// Resolve when we played the last frame; otherwise, reject
					if ( gotoEnd ) {
						deferred.notifyWith( elem, [ animation, 1, 0 ] );
						deferred.resolveWith( elem, [ animation, gotoEnd ] );
					} else {
						deferred.rejectWith( elem, [ animation, gotoEnd ] );
					}
					return this;
				}
			} ),
			props = animation.props;
	
		propFilter( props, animation.opts.specialEasing );
	
		for ( ; index < length; index++ ) {
			result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );
			if ( result ) {
				if ( isFunction( result.stop ) ) {
					jQuery._queueHooks( animation.elem, animation.opts.queue ).stop =
						result.stop.bind( result );
				}
				return result;
			}
		}
	
		jQuery.map( props, createTween, animation );
	
		if ( isFunction( animation.opts.start ) ) {
			animation.opts.start.call( elem, animation );
		}
	
		// Attach callbacks from options
		animation
			.progress( animation.opts.progress )
			.done( animation.opts.done, animation.opts.complete )
			.fail( animation.opts.fail )
			.always( animation.opts.always );
	
		jQuery.fx.timer(
			jQuery.extend( tick, {
				elem: elem,
				anim: animation,
				queue: animation.opts.queue
			} )
		);
	
		return animation;
	}
	
	jQuery.Animation = jQuery.extend( Animation, {
	
		tweeners: {
			"*": [ function( prop, value ) {
				var tween = this.createTween( prop, value );
				adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );
				return tween;
			} ]
		},
	
		tweener: function( props, callback ) {
			if ( isFunction( props ) ) {
				callback = props;
				props = [ "*" ];
			} else {
				props = props.match( rnothtmlwhite );
			}
	
			var prop,
				index = 0,
				length = props.length;
	
			for ( ; index < length; index++ ) {
				prop = props[ index ];
				Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];
				Animation.tweeners[ prop ].unshift( callback );
			}
		},
	
		prefilters: [ defaultPrefilter ],
	
		prefilter: function( callback, prepend ) {
			if ( prepend ) {
				Animation.prefilters.unshift( callback );
			} else {
				Animation.prefilters.push( callback );
			}
		}
	} );
	
	jQuery.speed = function( speed, easing, fn ) {
		var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
			complete: fn || !fn && easing ||
				isFunction( speed ) && speed,
			duration: speed,
			easing: fn && easing || easing && !isFunction( easing ) && easing
		};
	
		// Go to the end state if fx are off
		if ( jQuery.fx.off ) {
			opt.duration = 0;
	
		} else {
			if ( typeof opt.duration !== "number" ) {
				if ( opt.duration in jQuery.fx.speeds ) {
					opt.duration = jQuery.fx.speeds[ opt.duration ];
	
				} else {
					opt.duration = jQuery.fx.speeds._default;
				}
			}
		}
	
		// Normalize opt.queue - true/undefined/null -> "fx"
		if ( opt.queue == null || opt.queue === true ) {
			opt.queue = "fx";
		}
	
		// Queueing
		opt.old = opt.complete;
	
		opt.complete = function() {
			if ( isFunction( opt.old ) ) {
				opt.old.call( this );
			}
	
			if ( opt.queue ) {
				jQuery.dequeue( this, opt.queue );
			}
		};
	
		return opt;
	};
	
	jQuery.fn.extend( {
		fadeTo: function( speed, to, easing, callback ) {
	
			// Show any hidden elements after setting opacity to 0
			return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show()
	
				// Animate to the value specified
				.end().animate( { opacity: to }, speed, easing, callback );
		},
		animate: function( prop, speed, easing, callback ) {
			var empty = jQuery.isEmptyObject( prop ),
				optall = jQuery.speed( speed, easing, callback ),
				doAnimation = function() {
	
					// Operate on a copy of prop so per-property easing won't be lost
					var anim = Animation( this, jQuery.extend( {}, prop ), optall );
	
					// Empty animations, or finishing resolves immediately
					if ( empty || dataPriv.get( this, "finish" ) ) {
						anim.stop( true );
					}
				};
				doAnimation.finish = doAnimation;
	
			return empty || optall.queue === false ?
				this.each( doAnimation ) :
				this.queue( optall.queue, doAnimation );
		},
		stop: function( type, clearQueue, gotoEnd ) {
			var stopQueue = function( hooks ) {
				var stop = hooks.stop;
				delete hooks.stop;
				stop( gotoEnd );
			};
	
			if ( typeof type !== "string" ) {
				gotoEnd = clearQueue;
				clearQueue = type;
				type = undefined;
			}
			if ( clearQueue && type !== false ) {
				this.queue( type || "fx", [] );
			}
	
			return this.each( function() {
				var dequeue = true,
					index = type != null && type + "queueHooks",
					timers = jQuery.timers,
					data = dataPriv.get( this );
	
				if ( index ) {
					if ( data[ index ] && data[ index ].stop ) {
						stopQueue( data[ index ] );
					}
				} else {
					for ( index in data ) {
						if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
							stopQueue( data[ index ] );
						}
					}
				}
	
				for ( index = timers.length; index--; ) {
					if ( timers[ index ].elem === this &&
						( type == null || timers[ index ].queue === type ) ) {
	
						timers[ index ].anim.stop( gotoEnd );
						dequeue = false;
						timers.splice( index, 1 );
					}
				}
	
				// Start the next in the queue if the last step wasn't forced.
				// Timers currently will call their complete callbacks, which
				// will dequeue but only if they were gotoEnd.
				if ( dequeue || !gotoEnd ) {
					jQuery.dequeue( this, type );
				}
			} );
		},
		finish: function( type ) {
			if ( type !== false ) {
				type = type || "fx";
			}
			return this.each( function() {
				var index,
					data = dataPriv.get( this ),
					queue = data[ type + "queue" ],
					hooks = data[ type + "queueHooks" ],
					timers = jQuery.timers,
					length = queue ? queue.length : 0;
	
				// Enable finishing flag on private data
				data.finish = true;
	
				// Empty the queue first
				jQuery.queue( this, type, [] );
	
				if ( hooks && hooks.stop ) {
					hooks.stop.call( this, true );
				}
	
				// Look for any active animations, and finish them
				for ( index = timers.length; index--; ) {
					if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
						timers[ index ].anim.stop( true );
						timers.splice( index, 1 );
					}
				}
	
				// Look for any animations in the old queue and finish them
				for ( index = 0; index < length; index++ ) {
					if ( queue[ index ] && queue[ index ].finish ) {
						queue[ index ].finish.call( this );
					}
				}
	
				// Turn off finishing flag
				delete data.finish;
			} );
		}
	} );
	
	jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) {
		var cssFn = jQuery.fn[ name ];
		jQuery.fn[ name ] = function( speed, easing, callback ) {
			return speed == null || typeof speed === "boolean" ?
				cssFn.apply( this, arguments ) :
				this.animate( genFx( name, true ), speed, easing, callback );
		};
	} );
	
	// Generate shortcuts for custom animations
	jQuery.each( {
		slideDown: genFx( "show" ),
		slideUp: genFx( "hide" ),
		slideToggle: genFx( "toggle" ),
		fadeIn: { opacity: "show" },
		fadeOut: { opacity: "hide" },
		fadeToggle: { opacity: "toggle" }
	}, function( name, props ) {
		jQuery.fn[ name ] = function( speed, easing, callback ) {
			return this.animate( props, speed, easing, callback );
		};
	} );
	
	jQuery.timers = [];
	jQuery.fx.tick = function() {
		var timer,
			i = 0,
			timers = jQuery.timers;
	
		fxNow = Date.now();
	
		for ( ; i < timers.length; i++ ) {
			timer = timers[ i ];
	
			// Run the timer and safely remove it when done (allowing for external removal)
			if ( !timer() && timers[ i ] === timer ) {
				timers.splice( i--, 1 );
			}
		}
	
		if ( !timers.length ) {
			jQuery.fx.stop();
		}
		fxNow = undefined;
	};
	
	jQuery.fx.timer = function( timer ) {
		jQuery.timers.push( timer );
		jQuery.fx.start();
	};
	
	jQuery.fx.interval = 13;
	jQuery.fx.start = function() {
		if ( inProgress ) {
			return;
		}
	
		inProgress = true;
		schedule();
	};
	
	jQuery.fx.stop = function() {
		inProgress = null;
	};
	
	jQuery.fx.speeds = {
		slow: 600,
		fast: 200,
	
		// Default speed
		_default: 400
	};
	
	
	// Based off of the plugin by Clint Helfers, with permission.
	// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/
	jQuery.fn.delay = function( time, type ) {
		time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
		type = type || "fx";
	
		return this.queue( type, function( next, hooks ) {
			var timeout = window.setTimeout( next, time );
			hooks.stop = function() {
				window.clearTimeout( timeout );
			};
		} );
	};
	
	
	( function() {
		var input = document.createElement( "input" ),
			select = document.createElement( "select" ),
			opt = select.appendChild( document.createElement( "option" ) );
	
		input.type = "checkbox";
	
		// Support: Android <=4.3 only
		// Default value for a checkbox should be "on"
		support.checkOn = input.value !== "";
	
		// Support: IE <=11 only
		// Must access selectedIndex to make default options select
		support.optSelected = opt.selected;
	
		// Support: IE <=11 only
		// An input loses its value after becoming a radio
		input = document.createElement( "input" );
		input.value = "t";
		input.type = "radio";
		support.radioValue = input.value === "t";
	} )();
	
	
	var boolHook,
		attrHandle = jQuery.expr.attrHandle;
	
	jQuery.fn.extend( {
		attr: function( name, value ) {
			return access( this, jQuery.attr, name, value, arguments.length > 1 );
		},
	
		removeAttr: function( name ) {
			return this.each( function() {
				jQuery.removeAttr( this, name );
			} );
		}
	} );
	
	jQuery.extend( {
		attr: function( elem, name, value ) {
			var ret, hooks,
				nType = elem.nodeType;
	
			// Don't get/set attributes on text, comment and attribute nodes
			if ( nType === 3 || nType === 8 || nType === 2 ) {
				return;
			}
	
			// Fallback to prop when attributes are not supported
			if ( typeof elem.getAttribute === "undefined" ) {
				return jQuery.prop( elem, name, value );
			}
	
			// Attribute hooks are determined by the lowercase version
			// Grab necessary hook if one is defined
			if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
				hooks = jQuery.attrHooks[ name.toLowerCase() ] ||
					( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );
			}
	
			if ( value !== undefined ) {
				if ( value === null ) {
					jQuery.removeAttr( elem, name );
					return;
				}
	
				if ( hooks && "set" in hooks &&
					( ret = hooks.set( elem, value, name ) ) !== undefined ) {
					return ret;
				}
	
				elem.setAttribute( name, value + "" );
				return value;
			}
	
			if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
				return ret;
			}
	
			ret = jQuery.find.attr( elem, name );
	
			// Non-existent attributes return null, we normalize to undefined
			return ret == null ? undefined : ret;
		},
	
		attrHooks: {
			type: {
				set: function( elem, value ) {
					if ( !support.radioValue && value === "radio" &&
						nodeName( elem, "input" ) ) {
						var val = elem.value;
						elem.setAttribute( "type", value );
						if ( val ) {
							elem.value = val;
						}
						return value;
					}
				}
			}
		},
	
		removeAttr: function( elem, value ) {
			var name,
				i = 0,
	
				// Attribute names can contain non-HTML whitespace characters
				// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2
				attrNames = value && value.match( rnothtmlwhite );
	
			if ( attrNames && elem.nodeType === 1 ) {
				while ( ( name = attrNames[ i++ ] ) ) {
					elem.removeAttribute( name );
				}
			}
		}
	} );
	
	// Hooks for boolean attributes
	boolHook = {
		set: function( elem, value, name ) {
			if ( value === false ) {
	
				// Remove boolean attributes when set to false
				jQuery.removeAttr( elem, name );
			} else {
				elem.setAttribute( name, name );
			}
			return name;
		}
	};
	
	jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {
		var getter = attrHandle[ name ] || jQuery.find.attr;
	
		attrHandle[ name ] = function( elem, name, isXML ) {
			var ret, handle,
				lowercaseName = name.toLowerCase();
	
			if ( !isXML ) {
	
				// Avoid an infinite loop by temporarily removing this function from the getter
				handle = attrHandle[ lowercaseName ];
				attrHandle[ lowercaseName ] = ret;
				ret = getter( elem, name, isXML ) != null ?
					lowercaseName :
					null;
				attrHandle[ lowercaseName ] = handle;
			}
			return ret;
		};
	} );
	
	
	
	
	var rfocusable = /^(?:input|select|textarea|button)$/i,
		rclickable = /^(?:a|area)$/i;
	
	jQuery.fn.extend( {
		prop: function( name, value ) {
			return access( this, jQuery.prop, name, value, arguments.length > 1 );
		},
	
		removeProp: function( name ) {
			return this.each( function() {
				delete this[ jQuery.propFix[ name ] || name ];
			} );
		}
	} );
	
	jQuery.extend( {
		prop: function( elem, name, value ) {
			var ret, hooks,
				nType = elem.nodeType;
	
			// Don't get/set properties on text, comment and attribute nodes
			if ( nType === 3 || nType === 8 || nType === 2 ) {
				return;
			}
	
			if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
	
				// Fix name and attach hooks
				name = jQuery.propFix[ name ] || name;
				hooks = jQuery.propHooks[ name ];
			}
	
			if ( value !== undefined ) {
				if ( hooks && "set" in hooks &&
					( ret = hooks.set( elem, value, name ) ) !== undefined ) {
					return ret;
				}
	
				return ( elem[ name ] = value );
			}
	
			if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
				return ret;
			}
	
			return elem[ name ];
		},
	
		propHooks: {
			tabIndex: {
				get: function( elem ) {
	
					// Support: IE <=9 - 11 only
					// elem.tabIndex doesn't always return the
					// correct value when it hasn't been explicitly set
					// https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
					// Use proper attribute retrieval(#12072)
					var tabindex = jQuery.find.attr( elem, "tabindex" );
	
					if ( tabindex ) {
						return parseInt( tabindex, 10 );
					}
	
					if (
						rfocusable.test( elem.nodeName ) ||
						rclickable.test( elem.nodeName ) &&
						elem.href
					) {
						return 0;
					}
	
					return -1;
				}
			}
		},
	
		propFix: {
			"for": "htmlFor",
			"class": "className"
		}
	} );
	
	// Support: IE <=11 only
	// Accessing the selectedIndex property
	// forces the browser to respect setting selected
	// on the option
	// The getter ensures a default option is selected
	// when in an optgroup
	// eslint rule "no-unused-expressions" is disabled for this code
	// since it considers such accessions noop
	if ( !support.optSelected ) {
		jQuery.propHooks.selected = {
			get: function( elem ) {
	
				/* eslint no-unused-expressions: "off" */
	
				var parent = elem.parentNode;
				if ( parent && parent.parentNode ) {
					parent.parentNode.selectedIndex;
				}
				return null;
			},
			set: function( elem ) {
	
				/* eslint no-unused-expressions: "off" */
	
				var parent = elem.parentNode;
				if ( parent ) {
					parent.selectedIndex;
	
					if ( parent.parentNode ) {
						parent.parentNode.selectedIndex;
					}
				}
			}
		};
	}
	
	jQuery.each( [
		"tabIndex",
		"readOnly",
		"maxLength",
		"cellSpacing",
		"cellPadding",
		"rowSpan",
		"colSpan",
		"useMap",
		"frameBorder",
		"contentEditable"
	], function() {
		jQuery.propFix[ this.toLowerCase() ] = this;
	} );
	
	
	
	
		// Strip and collapse whitespace according to HTML spec
		// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace
		function stripAndCollapse( value ) {
			var tokens = value.match( rnothtmlwhite ) || [];
			return tokens.join( " " );
		}
	
	
	function getClass( elem ) {
		return elem.getAttribute && elem.getAttribute( "class" ) || "";
	}
	
	function classesToArray( value ) {
		if ( Array.isArray( value ) ) {
			return value;
		}
		if ( typeof value === "string" ) {
			return value.match( rnothtmlwhite ) || [];
		}
		return [];
	}
	
	jQuery.fn.extend( {
		addClass: function( value ) {
			var classes, elem, cur, curValue, clazz, j, finalValue,
				i = 0;
	
			if ( isFunction( value ) ) {
				return this.each( function( j ) {
					jQuery( this ).addClass( value.call( this, j, getClass( this ) ) );
				} );
			}
	
			classes = classesToArray( value );
	
			if ( classes.length ) {
				while ( ( elem = this[ i++ ] ) ) {
					curValue = getClass( elem );
					cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
	
					if ( cur ) {
						j = 0;
						while ( ( clazz = classes[ j++ ] ) ) {
							if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
								cur += clazz + " ";
							}
						}
	
						// Only assign if different to avoid unneeded rendering.
						finalValue = stripAndCollapse( cur );
						if ( curValue !== finalValue ) {
							elem.setAttribute( "class", finalValue );
						}
					}
				}
			}
	
			return this;
		},
	
		removeClass: function( value ) {
			var classes, elem, cur, curValue, clazz, j, finalValue,
				i = 0;
	
			if ( isFunction( value ) ) {
				return this.each( function( j ) {
					jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );
				} );
			}
	
			if ( !arguments.length ) {
				return this.attr( "class", "" );
			}
	
			classes = classesToArray( value );
	
			if ( classes.length ) {
				while ( ( elem = this[ i++ ] ) ) {
					curValue = getClass( elem );
	
					// This expression is here for better compressibility (see addClass)
					cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " );
	
					if ( cur ) {
						j = 0;
						while ( ( clazz = classes[ j++ ] ) ) {
	
							// Remove *all* instances
							while ( cur.indexOf( " " + clazz + " " ) > -1 ) {
								cur = cur.replace( " " + clazz + " ", " " );
							}
						}
	
						// Only assign if different to avoid unneeded rendering.
						finalValue = stripAndCollapse( cur );
						if ( curValue !== finalValue ) {
							elem.setAttribute( "class", finalValue );
						}
					}
				}
			}
	
			return this;
		},
	
		toggleClass: function( value, stateVal ) {
			var type = typeof value,
				isValidValue = type === "string" || Array.isArray( value );
	
			if ( typeof stateVal === "boolean" && isValidValue ) {
				return stateVal ? this.addClass( value ) : this.removeClass( value );
			}
	
			if ( isFunction( value ) ) {
				return this.each( function( i ) {
					jQuery( this ).toggleClass(
						value.call( this, i, getClass( this ), stateVal ),
						stateVal
					);
				} );
			}
	
			return this.each( function() {
				var className, i, self, classNames;
	
				if ( isValidValue ) {
	
					// Toggle individual class names
					i = 0;
					self = jQuery( this );
					classNames = classesToArray( value );
	
					while ( ( className = classNames[ i++ ] ) ) {
	
						// Check each className given, space separated list
						if ( self.hasClass( className ) ) {
							self.removeClass( className );
						} else {
							self.addClass( className );
						}
					}
	
				// Toggle whole class name
				} else if ( value === undefined || type === "boolean" ) {
					className = getClass( this );
					if ( className ) {
	
						// Store className if set
						dataPriv.set( this, "__className__", className );
					}
	
					// If the element has a class name or if we're passed `false`,
					// then remove the whole classname (if there was one, the above saved it).
					// Otherwise bring back whatever was previously saved (if anything),
					// falling back to the empty string if nothing was stored.
					if ( this.setAttribute ) {
						this.setAttribute( "class",
							className || value === false ?
							"" :
							dataPriv.get( this, "__className__" ) || ""
						);
					}
				}
			} );
		},
	
		hasClass: function( selector ) {
			var className, elem,
				i = 0;
	
			className = " " + selector + " ";
			while ( ( elem = this[ i++ ] ) ) {
				if ( elem.nodeType === 1 &&
					( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) {
						return true;
				}
			}
	
			return false;
		}
	} );
	
	
	
	
	var rreturn = /\r/g;
	
	jQuery.fn.extend( {
		val: function( value ) {
			var hooks, ret, valueIsFunction,
				elem = this[ 0 ];
	
			if ( !arguments.length ) {
				if ( elem ) {
					hooks = jQuery.valHooks[ elem.type ] ||
						jQuery.valHooks[ elem.nodeName.toLowerCase() ];
	
					if ( hooks &&
						"get" in hooks &&
						( ret = hooks.get( elem, "value" ) ) !== undefined
					) {
						return ret;
					}
	
					ret = elem.value;
	
					// Handle most common string cases
					if ( typeof ret === "string" ) {
						return ret.replace( rreturn, "" );
					}
	
					// Handle cases where value is null/undef or number
					return ret == null ? "" : ret;
				}
	
				return;
			}
	
			valueIsFunction = isFunction( value );
	
			return this.each( function( i ) {
				var val;
	
				if ( this.nodeType !== 1 ) {
					return;
				}
	
				if ( valueIsFunction ) {
					val = value.call( this, i, jQuery( this ).val() );
				} else {
					val = value;
				}
	
				// Treat null/undefined as ""; convert numbers to string
				if ( val == null ) {
					val = "";
	
				} else if ( typeof val === "number" ) {
					val += "";
	
				} else if ( Array.isArray( val ) ) {
					val = jQuery.map( val, function( value ) {
						return value == null ? "" : value + "";
					} );
				}
	
				hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
	
				// If set returns undefined, fall back to normal setting
				if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) {
					this.value = val;
				}
			} );
		}
	} );
	
	jQuery.extend( {
		valHooks: {
			option: {
				get: function( elem ) {
	
					var val = jQuery.find.attr( elem, "value" );
					return val != null ?
						val :
	
						// Support: IE <=10 - 11 only
						// option.text throws exceptions (#14686, #14858)
						// Strip and collapse whitespace
						// https://html.spec.whatwg.org/#strip-and-collapse-whitespace
						stripAndCollapse( jQuery.text( elem ) );
				}
			},
			select: {
				get: function( elem ) {
					var value, option, i,
						options = elem.options,
						index = elem.selectedIndex,
						one = elem.type === "select-one",
						values = one ? null : [],
						max = one ? index + 1 : options.length;
	
					if ( index < 0 ) {
						i = max;
	
					} else {
						i = one ? index : 0;
					}
	
					// Loop through all the selected options
					for ( ; i < max; i++ ) {
						option = options[ i ];
	
						// Support: IE <=9 only
						// IE8-9 doesn't update selected after form reset (#2551)
						if ( ( option.selected || i === index ) &&
	
								// Don't return options that are disabled or in a disabled optgroup
								!option.disabled &&
								( !option.parentNode.disabled ||
									!nodeName( option.parentNode, "optgroup" ) ) ) {
	
							// Get the specific value for the option
							value = jQuery( option ).val();
	
							// We don't need an array for one selects
							if ( one ) {
								return value;
							}
	
							// Multi-Selects return an array
							values.push( value );
						}
					}
	
					return values;
				},
	
				set: function( elem, value ) {
					var optionSet, option,
						options = elem.options,
						values = jQuery.makeArray( value ),
						i = options.length;
	
					while ( i-- ) {
						option = options[ i ];
	
						/* eslint-disable no-cond-assign */
	
						if ( option.selected =
							jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1
						) {
							optionSet = true;
						}
	
						/* eslint-enable no-cond-assign */
					}
	
					// Force browsers to behave consistently when non-matching value is set
					if ( !optionSet ) {
						elem.selectedIndex = -1;
					}
					return values;
				}
			}
		}
	} );
	
	// Radios and checkboxes getter/setter
	jQuery.each( [ "radio", "checkbox" ], function() {
		jQuery.valHooks[ this ] = {
			set: function( elem, value ) {
				if ( Array.isArray( value ) ) {
					return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );
				}
			}
		};
		if ( !support.checkOn ) {
			jQuery.valHooks[ this ].get = function( elem ) {
				return elem.getAttribute( "value" ) === null ? "on" : elem.value;
			};
		}
	} );
	
	
	
	
	// Return jQuery for attributes-only inclusion
	
	
	support.focusin = "onfocusin" in window;
	
	
	var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
		stopPropagationCallback = function( e ) {
			e.stopPropagation();
		};
	
	jQuery.extend( jQuery.event, {
	
		trigger: function( event, data, elem, onlyHandlers ) {
	
			var i, cur, tmp, bubbleType, ontype, handle, special, lastElement,
				eventPath = [ elem || document ],
				type = hasOwn.call( event, "type" ) ? event.type : event,
				namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : [];
	
			cur = lastElement = tmp = elem = elem || document;
	
			// Don't do events on text and comment nodes
			if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
				return;
			}
	
			// focus/blur morphs to focusin/out; ensure we're not firing them right now
			if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
				return;
			}
	
			if ( type.indexOf( "." ) > -1 ) {
	
				// Namespaced trigger; create a regexp to match event type in handle()
				namespaces = type.split( "." );
				type = namespaces.shift();
				namespaces.sort();
			}
			ontype = type.indexOf( ":" ) < 0 && "on" + type;
	
			// Caller can pass in a jQuery.Event object, Object, or just an event type string
			event = event[ jQuery.expando ] ?
				event :
				new jQuery.Event( type, typeof event === "object" && event );
	
			// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
			event.isTrigger = onlyHandlers ? 2 : 3;
			event.namespace = namespaces.join( "." );
			event.rnamespace = event.namespace ?
				new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) :
				null;
	
			// Clean up the event in case it is being reused
			event.result = undefined;
			if ( !event.target ) {
				event.target = elem;
			}
	
			// Clone any incoming data and prepend the event, creating the handler arg list
			data = data == null ?
				[ event ] :
				jQuery.makeArray( data, [ event ] );
	
			// Allow special events to draw outside the lines
			special = jQuery.event.special[ type ] || {};
			if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
				return;
			}
	
			// Determine event propagation path in advance, per W3C events spec (#9951)
			// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
			if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {
	
				bubbleType = special.delegateType || type;
				if ( !rfocusMorph.test( bubbleType + type ) ) {
					cur = cur.parentNode;
				}
				for ( ; cur; cur = cur.parentNode ) {
					eventPath.push( cur );
					tmp = cur;
				}
	
				// Only add window if we got to document (e.g., not plain obj or detached DOM)
				if ( tmp === ( elem.ownerDocument || document ) ) {
					eventPath.push( tmp.defaultView || tmp.parentWindow || window );
				}
			}
	
			// Fire handlers on the event path
			i = 0;
			while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {
				lastElement = cur;
				event.type = i > 1 ?
					bubbleType :
					special.bindType || type;
	
				// jQuery handler
				handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] &&
					dataPriv.get( cur, "handle" );
				if ( handle ) {
					handle.apply( cur, data );
				}
	
				// Native handler
				handle = ontype && cur[ ontype ];
				if ( handle && handle.apply && acceptData( cur ) ) {
					event.result = handle.apply( cur, data );
					if ( event.result === false ) {
						event.preventDefault();
					}
				}
			}
			event.type = type;
	
			// If nobody prevented the default action, do it now
			if ( !onlyHandlers && !event.isDefaultPrevented() ) {
	
				if ( ( !special._default ||
					special._default.apply( eventPath.pop(), data ) === false ) &&
					acceptData( elem ) ) {
	
					// Call a native DOM method on the target with the same name as the event.
					// Don't do default actions on window, that's where global variables be (#6170)
					if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {
	
						// Don't re-trigger an onFOO event when we call its FOO() method
						tmp = elem[ ontype ];
	
						if ( tmp ) {
							elem[ ontype ] = null;
						}
	
						// Prevent re-triggering of the same event, since we already bubbled it above
						jQuery.event.triggered = type;
	
						if ( event.isPropagationStopped() ) {
							lastElement.addEventListener( type, stopPropagationCallback );
						}
	
						elem[ type ]();
	
						if ( event.isPropagationStopped() ) {
							lastElement.removeEventListener( type, stopPropagationCallback );
						}
	
						jQuery.event.triggered = undefined;
	
						if ( tmp ) {
							elem[ ontype ] = tmp;
						}
					}
				}
			}
	
			return event.result;
		},
	
		// Piggyback on a donor event to simulate a different one
		// Used only for `focus(in | out)` events
		simulate: function( type, elem, event ) {
			var e = jQuery.extend(
				new jQuery.Event(),
				event,
				{
					type: type,
					isSimulated: true
				}
			);
	
			jQuery.event.trigger( e, null, elem );
		}
	
	} );
	
	jQuery.fn.extend( {
	
		trigger: function( type, data ) {
			return this.each( function() {
				jQuery.event.trigger( type, data, this );
			} );
		},
		triggerHandler: function( type, data ) {
			var elem = this[ 0 ];
			if ( elem ) {
				return jQuery.event.trigger( type, data, elem, true );
			}
		}
	} );
	
	
	// Support: Firefox <=44
	// Firefox doesn't have focus(in | out) events
	// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787
	//
	// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1
	// focus(in | out) events fire after focus & blur events,
	// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order
	// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857
	if ( !support.focusin ) {
		jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) {
	
			// Attach a single capturing handler on the document while someone wants focusin/focusout
			var handler = function( event ) {
				jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );
			};
	
			jQuery.event.special[ fix ] = {
				setup: function() {
					var doc = this.ownerDocument || this,
						attaches = dataPriv.access( doc, fix );
	
					if ( !attaches ) {
						doc.addEventListener( orig, handler, true );
					}
					dataPriv.access( doc, fix, ( attaches || 0 ) + 1 );
				},
				teardown: function() {
					var doc = this.ownerDocument || this,
						attaches = dataPriv.access( doc, fix ) - 1;
	
					if ( !attaches ) {
						doc.removeEventListener( orig, handler, true );
						dataPriv.remove( doc, fix );
	
					} else {
						dataPriv.access( doc, fix, attaches );
					}
				}
			};
		} );
	}
	var location = window.location;
	
	var nonce = Date.now();
	
	var rquery = ( /\?/ );
	
	
	
	// Cross-browser xml parsing
	jQuery.parseXML = function( data ) {
		var xml;
		if ( !data || typeof data !== "string" ) {
			return null;
		}
	
		// Support: IE 9 - 11 only
		// IE throws on parseFromString with invalid input.
		try {
			xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" );
		} catch ( e ) {
			xml = undefined;
		}
	
		if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) {
			jQuery.error( "Invalid XML: " + data );
		}
		return xml;
	};
	
	
	var
		rbracket = /\[\]$/,
		rCRLF = /\r?\n/g,
		rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
		rsubmittable = /^(?:input|select|textarea|keygen)/i;
	
	function buildParams( prefix, obj, traditional, add ) {
		var name;
	
		if ( Array.isArray( obj ) ) {
	
			// Serialize array item.
			jQuery.each( obj, function( i, v ) {
				if ( traditional || rbracket.test( prefix ) ) {
	
					// Treat each array item as a scalar.
					add( prefix, v );
	
				} else {
	
					// Item is non-scalar (array or object), encode its numeric index.
					buildParams(
						prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]",
						v,
						traditional,
						add
					);
				}
			} );
	
		} else if ( !traditional && toType( obj ) === "object" ) {
	
			// Serialize object item.
			for ( name in obj ) {
				buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
			}
	
		} else {
	
			// Serialize scalar item.
			add( prefix, obj );
		}
	}
	
	// Serialize an array of form elements or a set of
	// key/values into a query string
	jQuery.param = function( a, traditional ) {
		var prefix,
			s = [],
			add = function( key, valueOrFunction ) {
	
				// If value is a function, invoke it and use its return value
				var value = isFunction( valueOrFunction ) ?
					valueOrFunction() :
					valueOrFunction;
	
				s[ s.length ] = encodeURIComponent( key ) + "=" +
					encodeURIComponent( value == null ? "" : value );
			};
	
		// If an array was passed in, assume that it is an array of form elements.
		if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
	
			// Serialize the form elements
			jQuery.each( a, function() {
				add( this.name, this.value );
			} );
	
		} else {
	
			// If traditional, encode the "old" way (the way 1.3.2 or older
			// did it), otherwise encode params recursively.
			for ( prefix in a ) {
				buildParams( prefix, a[ prefix ], traditional, add );
			}
		}
	
		// Return the resulting serialization
		return s.join( "&" );
	};
	
	jQuery.fn.extend( {
		serialize: function() {
			return jQuery.param( this.serializeArray() );
		},
		serializeArray: function() {
			return this.map( function() {
	
				// Can add propHook for "elements" to filter or add form elements
				var elements = jQuery.prop( this, "elements" );
				return elements ? jQuery.makeArray( elements ) : this;
			} )
			.filter( function() {
				var type = this.type;
	
				// Use .is( ":disabled" ) so that fieldset[disabled] works
				return this.name && !jQuery( this ).is( ":disabled" ) &&
					rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
					( this.checked || !rcheckableType.test( type ) );
			} )
			.map( function( i, elem ) {
				var val = jQuery( this ).val();
	
				if ( val == null ) {
					return null;
				}
	
				if ( Array.isArray( val ) ) {
					return jQuery.map( val, function( val ) {
						return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
					} );
				}
	
				return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
			} ).get();
		}
	} );
	
	
	var
		r20 = /%20/g,
		rhash = /#.*$/,
		rantiCache = /([?&])_=[^&]*/,
		rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
	
		// #7653, #8125, #8152: local protocol detection
		rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
		rnoContent = /^(?:GET|HEAD)$/,
		rprotocol = /^\/\//,
	
		/* Prefilters
		 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
		 * 2) These are called:
		 *    - BEFORE asking for a transport
		 *    - AFTER param serialization (s.data is a string if s.processData is true)
		 * 3) key is the dataType
		 * 4) the catchall symbol "*" can be used
		 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
		 */
		prefilters = {},
	
		/* Transports bindings
		 * 1) key is the dataType
		 * 2) the catchall symbol "*" can be used
		 * 3) selection will start with transport dataType and THEN go to "*" if needed
		 */
		transports = {},
	
		// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
		allTypes = "*/".concat( "*" ),
	
		// Anchor tag for parsing the document origin
		originAnchor = document.createElement( "a" );
		originAnchor.href = location.href;
	
	// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
	function addToPrefiltersOrTransports( structure ) {
	
		// dataTypeExpression is optional and defaults to "*"
		return function( dataTypeExpression, func ) {
	
			if ( typeof dataTypeExpression !== "string" ) {
				func = dataTypeExpression;
				dataTypeExpression = "*";
			}
	
			var dataType,
				i = 0,
				dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];
	
			if ( isFunction( func ) ) {
	
				// For each dataType in the dataTypeExpression
				while ( ( dataType = dataTypes[ i++ ] ) ) {
	
					// Prepend if requested
					if ( dataType[ 0 ] === "+" ) {
						dataType = dataType.slice( 1 ) || "*";
						( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );
	
					// Otherwise append
					} else {
						( structure[ dataType ] = structure[ dataType ] || [] ).push( func );
					}
				}
			}
		};
	}
	
	// Base inspection function for prefilters and transports
	function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
	
		var inspected = {},
			seekingTransport = ( structure === transports );
	
		function inspect( dataType ) {
			var selected;
			inspected[ dataType ] = true;
			jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
				var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
				if ( typeof dataTypeOrTransport === "string" &&
					!seekingTransport && !inspected[ dataTypeOrTransport ] ) {
	
					options.dataTypes.unshift( dataTypeOrTransport );
					inspect( dataTypeOrTransport );
					return false;
				} else if ( seekingTransport ) {
					return !( selected = dataTypeOrTransport );
				}
			} );
			return selected;
		}
	
		return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
	}
	
	// A special extend for ajax options
	// that takes "flat" options (not to be deep extended)
	// Fixes #9887
	function ajaxExtend( target, src ) {
		var key, deep,
			flatOptions = jQuery.ajaxSettings.flatOptions || {};
	
		for ( key in src ) {
			if ( src[ key ] !== undefined ) {
				( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
			}
		}
		if ( deep ) {
			jQuery.extend( true, target, deep );
		}
	
		return target;
	}
	
	/* Handles responses to an ajax request:
	 * - finds the right dataType (mediates between content-type and expected dataType)
	 * - returns the corresponding response
	 */
	function ajaxHandleResponses( s, jqXHR, responses ) {
	
		var ct, type, finalDataType, firstDataType,
			contents = s.contents,
			dataTypes = s.dataTypes;
	
		// Remove auto dataType and get content-type in the process
		while ( dataTypes[ 0 ] === "*" ) {
			dataTypes.shift();
			if ( ct === undefined ) {
				ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" );
			}
		}
	
		// Check if we're dealing with a known content-type
		if ( ct ) {
			for ( type in contents ) {
				if ( contents[ type ] && contents[ type ].test( ct ) ) {
					dataTypes.unshift( type );
					break;
				}
			}
		}
	
		// Check to see if we have a response for the expected dataType
		if ( dataTypes[ 0 ] in responses ) {
			finalDataType = dataTypes[ 0 ];
		} else {
	
			// Try convertible dataTypes
			for ( type in responses ) {
				if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) {
					finalDataType = type;
					break;
				}
				if ( !firstDataType ) {
					firstDataType = type;
				}
			}
	
			// Or just use first one
			finalDataType = finalDataType || firstDataType;
		}
	
		// If we found a dataType
		// We add the dataType to the list if needed
		// and return the corresponding response
		if ( finalDataType ) {
			if ( finalDataType !== dataTypes[ 0 ] ) {
				dataTypes.unshift( finalDataType );
			}
			return responses[ finalDataType ];
		}
	}
	
	/* Chain conversions given the request and the original response
	 * Also sets the responseXXX fields on the jqXHR instance
	 */
	function ajaxConvert( s, response, jqXHR, isSuccess ) {
		var conv2, current, conv, tmp, prev,
			converters = {},
	
			// Work with a copy of dataTypes in case we need to modify it for conversion
			dataTypes = s.dataTypes.slice();
	
		// Create converters map with lowercased keys
		if ( dataTypes[ 1 ] ) {
			for ( conv in s.converters ) {
				converters[ conv.toLowerCase() ] = s.converters[ conv ];
			}
		}
	
		current = dataTypes.shift();
	
		// Convert to each sequential dataType
		while ( current ) {
	
			if ( s.responseFields[ current ] ) {
				jqXHR[ s.responseFields[ current ] ] = response;
			}
	
			// Apply the dataFilter if provided
			if ( !prev && isSuccess && s.dataFilter ) {
				response = s.dataFilter( response, s.dataType );
			}
	
			prev = current;
			current = dataTypes.shift();
	
			if ( current ) {
	
				// There's only work to do if current dataType is non-auto
				if ( current === "*" ) {
	
					current = prev;
	
				// Convert response if prev dataType is non-auto and differs from current
				} else if ( prev !== "*" && prev !== current ) {
	
					// Seek a direct converter
					conv = converters[ prev + " " + current ] || converters[ "* " + current ];
	
					// If none found, seek a pair
					if ( !conv ) {
						for ( conv2 in converters ) {
	
							// If conv2 outputs current
							tmp = conv2.split( " " );
							if ( tmp[ 1 ] === current ) {
	
								// If prev can be converted to accepted input
								conv = converters[ prev + " " + tmp[ 0 ] ] ||
									converters[ "* " + tmp[ 0 ] ];
								if ( conv ) {
	
									// Condense equivalence converters
									if ( conv === true ) {
										conv = converters[ conv2 ];
	
									// Otherwise, insert the intermediate dataType
									} else if ( converters[ conv2 ] !== true ) {
										current = tmp[ 0 ];
										dataTypes.unshift( tmp[ 1 ] );
									}
									break;
								}
							}
						}
					}
	
					// Apply converter (if not an equivalence)
					if ( conv !== true ) {
	
						// Unless errors are allowed to bubble, catch and return them
						if ( conv && s.throws ) {
							response = conv( response );
						} else {
							try {
								response = conv( response );
							} catch ( e ) {
								return {
									state: "parsererror",
									error: conv ? e : "No conversion from " + prev + " to " + current
								};
							}
						}
					}
				}
			}
		}
	
		return { state: "success", data: response };
	}
	
	jQuery.extend( {
	
		// Counter for holding the number of active queries
		active: 0,
	
		// Last-Modified header cache for next request
		lastModified: {},
		etag: {},
	
		ajaxSettings: {
			url: location.href,
			type: "GET",
			isLocal: rlocalProtocol.test( location.protocol ),
			global: true,
			processData: true,
			async: true,
			contentType: "application/x-www-form-urlencoded; charset=UTF-8",
	
			/*
			timeout: 0,
			data: null,
			dataType: null,
			username: null,
			password: null,
			cache: null,
			throws: false,
			traditional: false,
			headers: {},
			*/
	
			accepts: {
				"*": allTypes,
				text: "text/plain",
				html: "text/html",
				xml: "application/xml, text/xml",
				json: "application/json, text/javascript"
			},
	
			contents: {
				xml: /\bxml\b/,
				html: /\bhtml/,
				json: /\bjson\b/
			},
	
			responseFields: {
				xml: "responseXML",
				text: "responseText",
				json: "responseJSON"
			},
	
			// Data converters
			// Keys separate source (or catchall "*") and destination types with a single space
			converters: {
	
				// Convert anything to text
				"* text": String,
	
				// Text to html (true = no transformation)
				"text html": true,
	
				// Evaluate text as a json expression
				"text json": JSON.parse,
	
				// Parse text as xml
				"text xml": jQuery.parseXML
			},
	
			// For options that shouldn't be deep extended:
			// you can add your own custom options here if
			// and when you create one that shouldn't be
			// deep extended (see ajaxExtend)
			flatOptions: {
				url: true,
				context: true
			}
		},
	
		// Creates a full fledged settings object into target
		// with both ajaxSettings and settings fields.
		// If target is omitted, writes into ajaxSettings.
		ajaxSetup: function( target, settings ) {
			return settings ?
	
				// Building a settings object
				ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
	
				// Extending ajaxSettings
				ajaxExtend( jQuery.ajaxSettings, target );
		},
	
		ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
		ajaxTransport: addToPrefiltersOrTransports( transports ),
	
		// Main method
		ajax: function( url, options ) {
	
			// If url is an object, simulate pre-1.5 signature
			if ( typeof url === "object" ) {
				options = url;
				url = undefined;
			}
	
			// Force options to be an object
			options = options || {};
	
			var transport,
	
				// URL without anti-cache param
				cacheURL,
	
				// Response headers
				responseHeadersString,
				responseHeaders,
	
				// timeout handle
				timeoutTimer,
	
				// Url cleanup var
				urlAnchor,
	
				// Request state (becomes false upon send and true upon completion)
				completed,
	
				// To know if global events are to be dispatched
				fireGlobals,
	
				// Loop variable
				i,
	
				// uncached part of the url
				uncached,
	
				// Create the final options object
				s = jQuery.ajaxSetup( {}, options ),
	
				// Callbacks context
				callbackContext = s.context || s,
	
				// Context for global events is callbackContext if it is a DOM node or jQuery collection
				globalEventContext = s.context &&
					( callbackContext.nodeType || callbackContext.jquery ) ?
						jQuery( callbackContext ) :
						jQuery.event,
	
				// Deferreds
				deferred = jQuery.Deferred(),
				completeDeferred = jQuery.Callbacks( "once memory" ),
	
				// Status-dependent callbacks
				statusCode = s.statusCode || {},
	
				// Headers (they are sent all at once)
				requestHeaders = {},
				requestHeadersNames = {},
	
				// Default abort message
				strAbort = "canceled",
	
				// Fake xhr
				jqXHR = {
					readyState: 0,
	
					// Builds headers hashtable if needed
					getResponseHeader: function( key ) {
						var match;
						if ( completed ) {
							if ( !responseHeaders ) {
								responseHeaders = {};
								while ( ( match = rheaders.exec( responseHeadersString ) ) ) {
									responseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ];
								}
							}
							match = responseHeaders[ key.toLowerCase() ];
						}
						return match == null ? null : match;
					},
	
					// Raw string
					getAllResponseHeaders: function() {
						return completed ? responseHeadersString : null;
					},
	
					// Caches the header
					setRequestHeader: function( name, value ) {
						if ( completed == null ) {
							name = requestHeadersNames[ name.toLowerCase() ] =
								requestHeadersNames[ name.toLowerCase() ] || name;
							requestHeaders[ name ] = value;
						}
						return this;
					},
	
					// Overrides response content-type header
					overrideMimeType: function( type ) {
						if ( completed == null ) {
							s.mimeType = type;
						}
						return this;
					},
	
					// Status-dependent callbacks
					statusCode: function( map ) {
						var code;
						if ( map ) {
							if ( completed ) {
	
								// Execute the appropriate callbacks
								jqXHR.always( map[ jqXHR.status ] );
							} else {
	
								// Lazy-add the new callbacks in a way that preserves old ones
								for ( code in map ) {
									statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
								}
							}
						}
						return this;
					},
	
					// Cancel the request
					abort: function( statusText ) {
						var finalText = statusText || strAbort;
						if ( transport ) {
							transport.abort( finalText );
						}
						done( 0, finalText );
						return this;
					}
				};
	
			// Attach deferreds
			deferred.promise( jqXHR );
	
			// Add protocol if not provided (prefilters might expect it)
			// Handle falsy url in the settings object (#10093: consistency with old signature)
			// We also use the url parameter if available
			s.url = ( ( url || s.url || location.href ) + "" )
				.replace( rprotocol, location.protocol + "//" );
	
			// Alias method option to type as per ticket #12004
			s.type = options.method || options.type || s.method || s.type;
	
			// Extract dataTypes list
			s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ];
	
			// A cross-domain request is in order when the origin doesn't match the current origin.
			if ( s.crossDomain == null ) {
				urlAnchor = document.createElement( "a" );
	
				// Support: IE <=8 - 11, Edge 12 - 15
				// IE throws exception on accessing the href property if url is malformed,
				// e.g. http://example.com:80x/
				try {
					urlAnchor.href = s.url;
	
					// Support: IE <=8 - 11 only
					// Anchor's host property isn't correctly set when s.url is relative
					urlAnchor.href = urlAnchor.href;
					s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !==
						urlAnchor.protocol + "//" + urlAnchor.host;
				} catch ( e ) {
	
					// If there is an error parsing the URL, assume it is crossDomain,
					// it can be rejected by the transport if it is invalid
					s.crossDomain = true;
				}
			}
	
			// Convert data if not already a string
			if ( s.data && s.processData && typeof s.data !== "string" ) {
				s.data = jQuery.param( s.data, s.traditional );
			}
	
			// Apply prefilters
			inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
	
			// If request was aborted inside a prefilter, stop there
			if ( completed ) {
				return jqXHR;
			}
	
			// We can fire global events as of now if asked to
			// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)
			fireGlobals = jQuery.event && s.global;
	
			// Watch for a new set of requests
			if ( fireGlobals && jQuery.active++ === 0 ) {
				jQuery.event.trigger( "ajaxStart" );
			}
	
			// Uppercase the type
			s.type = s.type.toUpperCase();
	
			// Determine if request has content
			s.hasContent = !rnoContent.test( s.type );
	
			// Save the URL in case we're toying with the If-Modified-Since
			// and/or If-None-Match header later on
			// Remove hash to simplify url manipulation
			cacheURL = s.url.replace( rhash, "" );
	
			// More options handling for requests with no content
			if ( !s.hasContent ) {
	
				// Remember the hash so we can put it back
				uncached = s.url.slice( cacheURL.length );
	
				// If data is available and should be processed, append data to url
				if ( s.data && ( s.processData || typeof s.data === "string" ) ) {
					cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data;
	
					// #9682: remove data so that it's not used in an eventual retry
					delete s.data;
				}
	
				// Add or update anti-cache param if needed
				if ( s.cache === false ) {
					cacheURL = cacheURL.replace( rantiCache, "$1" );
					uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce++ ) + uncached;
				}
	
				// Put hash and anti-cache on the URL that will be requested (gh-1732)
				s.url = cacheURL + uncached;
	
			// Change '%20' to '+' if this is encoded form body content (gh-2658)
			} else if ( s.data && s.processData &&
				( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) {
				s.data = s.data.replace( r20, "+" );
			}
	
			// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
			if ( s.ifModified ) {
				if ( jQuery.lastModified[ cacheURL ] ) {
					jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
				}
				if ( jQuery.etag[ cacheURL ] ) {
					jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
				}
			}
	
			// Set the correct header, if data is being sent
			if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
				jqXHR.setRequestHeader( "Content-Type", s.contentType );
			}
	
			// Set the Accepts header for the server, depending on the dataType
			jqXHR.setRequestHeader(
				"Accept",
				s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?
					s.accepts[ s.dataTypes[ 0 ] ] +
						( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
					s.accepts[ "*" ]
			);
	
			// Check for headers option
			for ( i in s.headers ) {
				jqXHR.setRequestHeader( i, s.headers[ i ] );
			}
	
			// Allow custom headers/mimetypes and early abort
			if ( s.beforeSend &&
				( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {
	
				// Abort if not done already and return
				return jqXHR.abort();
			}
	
			// Aborting is no longer a cancellation
			strAbort = "abort";
	
			// Install callbacks on deferreds
			completeDeferred.add( s.complete );
			jqXHR.done( s.success );
			jqXHR.fail( s.error );
	
			// Get transport
			transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
	
			// If no transport, we auto-abort
			if ( !transport ) {
				done( -1, "No Transport" );
			} else {
				jqXHR.readyState = 1;
	
				// Send global event
				if ( fireGlobals ) {
					globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
				}
	
				// If request was aborted inside ajaxSend, stop there
				if ( completed ) {
					return jqXHR;
				}
	
				// Timeout
				if ( s.async && s.timeout > 0 ) {
					timeoutTimer = window.setTimeout( function() {
						jqXHR.abort( "timeout" );
					}, s.timeout );
				}
	
				try {
					completed = false;
					transport.send( requestHeaders, done );
				} catch ( e ) {
	
					// Rethrow post-completion exceptions
					if ( completed ) {
						throw e;
					}
	
					// Propagate others as results
					done( -1, e );
				}
			}
	
			// Callback for when everything is done
			function done( status, nativeStatusText, responses, headers ) {
				var isSuccess, success, error, response, modified,
					statusText = nativeStatusText;
	
				// Ignore repeat invocations
				if ( completed ) {
					return;
				}
	
				completed = true;
	
				// Clear timeout if it exists
				if ( timeoutTimer ) {
					window.clearTimeout( timeoutTimer );
				}
	
				// Dereference transport for early garbage collection
				// (no matter how long the jqXHR object will be used)
				transport = undefined;
	
				// Cache response headers
				responseHeadersString = headers || "";
	
				// Set readyState
				jqXHR.readyState = status > 0 ? 4 : 0;
	
				// Determine if successful
				isSuccess = status >= 200 && status < 300 || status === 304;
	
				// Get response data
				if ( responses ) {
					response = ajaxHandleResponses( s, jqXHR, responses );
				}
	
				// Convert no matter what (that way responseXXX fields are always set)
				response = ajaxConvert( s, response, jqXHR, isSuccess );
	
				// If successful, handle type chaining
				if ( isSuccess ) {
	
					// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
					if ( s.ifModified ) {
						modified = jqXHR.getResponseHeader( "Last-Modified" );
						if ( modified ) {
							jQuery.lastModified[ cacheURL ] = modified;
						}
						modified = jqXHR.getResponseHeader( "etag" );
						if ( modified ) {
							jQuery.etag[ cacheURL ] = modified;
						}
					}
	
					// if no content
					if ( status === 204 || s.type === "HEAD" ) {
						statusText = "nocontent";
	
					// if not modified
					} else if ( status === 304 ) {
						statusText = "notmodified";
	
					// If we have data, let's convert it
					} else {
						statusText = response.state;
						success = response.data;
						error = response.error;
						isSuccess = !error;
					}
				} else {
	
					// Extract error from statusText and normalize for non-aborts
					error = statusText;
					if ( status || !statusText ) {
						statusText = "error";
						if ( status < 0 ) {
							status = 0;
						}
					}
				}
	
				// Set data for the fake xhr object
				jqXHR.status = status;
				jqXHR.statusText = ( nativeStatusText || statusText ) + "";
	
				// Success/Error
				if ( isSuccess ) {
					deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
				} else {
					deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
				}
	
				// Status-dependent callbacks
				jqXHR.statusCode( statusCode );
				statusCode = undefined;
	
				if ( fireGlobals ) {
					globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
						[ jqXHR, s, isSuccess ? success : error ] );
				}
	
				// Complete
				completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
	
				if ( fireGlobals ) {
					globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
	
					// Handle the global AJAX counter
					if ( !( --jQuery.active ) ) {
						jQuery.event.trigger( "ajaxStop" );
					}
				}
			}
	
			return jqXHR;
		},
	
		getJSON: function( url, data, callback ) {
			return jQuery.get( url, data, callback, "json" );
		},
	
		getScript: function( url, callback ) {
			return jQuery.get( url, undefined, callback, "script" );
		}
	} );
	
	jQuery.each( [ "get", "post" ], function( i, method ) {
		jQuery[ method ] = function( url, data, callback, type ) {
	
			// Shift arguments if data argument was omitted
			if ( isFunction( data ) ) {
				type = type || callback;
				callback = data;
				data = undefined;
			}
	
			// The url can be an options object (which then must have .url)
			return jQuery.ajax( jQuery.extend( {
				url: url,
				type: method,
				dataType: type,
				data: data,
				success: callback
			}, jQuery.isPlainObject( url ) && url ) );
		};
	} );
	
	
	jQuery._evalUrl = function( url ) {
		return jQuery.ajax( {
			url: url,
	
			// Make this explicit, since user can override this through ajaxSetup (#11264)
			type: "GET",
			dataType: "script",
			cache: true,
			async: false,
			global: false,
			"throws": true
		} );
	};
	
	
	jQuery.fn.extend( {
		wrapAll: function( html ) {
			var wrap;
	
			if ( this[ 0 ] ) {
				if ( isFunction( html ) ) {
					html = html.call( this[ 0 ] );
				}
	
				// The elements to wrap the target around
				wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );
	
				if ( this[ 0 ].parentNode ) {
					wrap.insertBefore( this[ 0 ] );
				}
	
				wrap.map( function() {
					var elem = this;
	
					while ( elem.firstElementChild ) {
						elem = elem.firstElementChild;
					}
	
					return elem;
				} ).append( this );
			}
	
			return this;
		},
	
		wrapInner: function( html ) {
			if ( isFunction( html ) ) {
				return this.each( function( i ) {
					jQuery( this ).wrapInner( html.call( this, i ) );
				} );
			}
	
			return this.each( function() {
				var self = jQuery( this ),
					contents = self.contents();
	
				if ( contents.length ) {
					contents.wrapAll( html );
	
				} else {
					self.append( html );
				}
			} );
		},
	
		wrap: function( html ) {
			var htmlIsFunction = isFunction( html );
	
			return this.each( function( i ) {
				jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );
			} );
		},
	
		unwrap: function( selector ) {
			this.parent( selector ).not( "body" ).each( function() {
				jQuery( this ).replaceWith( this.childNodes );
			} );
			return this;
		}
	} );
	
	
	jQuery.expr.pseudos.hidden = function( elem ) {
		return !jQuery.expr.pseudos.visible( elem );
	};
	jQuery.expr.pseudos.visible = function( elem ) {
		return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );
	};
	
	
	
	
	jQuery.ajaxSettings.xhr = function() {
		try {
			return new window.XMLHttpRequest();
		} catch ( e ) {}
	};
	
	var xhrSuccessStatus = {
	
			// File protocol always yields status code 0, assume 200
			0: 200,
	
			// Support: IE <=9 only
			// #1450: sometimes IE returns 1223 when it should be 204
			1223: 204
		},
		xhrSupported = jQuery.ajaxSettings.xhr();
	
	support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
	support.ajax = xhrSupported = !!xhrSupported;
	
	jQuery.ajaxTransport( function( options ) {
		var callback, errorCallback;
	
		// Cross domain only allowed if supported through XMLHttpRequest
		if ( support.cors || xhrSupported && !options.crossDomain ) {
			return {
				send: function( headers, complete ) {
					var i,
						xhr = options.xhr();
	
					xhr.open(
						options.type,
						options.url,
						options.async,
						options.username,
						options.password
					);
	
					// Apply custom fields if provided
					if ( options.xhrFields ) {
						for ( i in options.xhrFields ) {
							xhr[ i ] = options.xhrFields[ i ];
						}
					}
	
					// Override mime type if needed
					if ( options.mimeType && xhr.overrideMimeType ) {
						xhr.overrideMimeType( options.mimeType );
					}
	
					// X-Requested-With header
					// For cross-domain requests, seeing as conditions for a preflight are
					// akin to a jigsaw puzzle, we simply never set it to be sure.
					// (it can always be set on a per-request basis or even using ajaxSetup)
					// For same-domain requests, won't change header if already provided.
					if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) {
						headers[ "X-Requested-With" ] = "XMLHttpRequest";
					}
	
					// Set headers
					for ( i in headers ) {
						xhr.setRequestHeader( i, headers[ i ] );
					}
	
					// Callback
					callback = function( type ) {
						return function() {
							if ( callback ) {
								callback = errorCallback = xhr.onload =
									xhr.onerror = xhr.onabort = xhr.ontimeout =
										xhr.onreadystatechange = null;
	
								if ( type === "abort" ) {
									xhr.abort();
								} else if ( type === "error" ) {
	
									// Support: IE <=9 only
									// On a manual native abort, IE9 throws
									// errors on any property access that is not readyState
									if ( typeof xhr.status !== "number" ) {
										complete( 0, "error" );
									} else {
										complete(
	
											// File: protocol always yields status 0; see #8605, #14207
											xhr.status,
											xhr.statusText
										);
									}
								} else {
									complete(
										xhrSuccessStatus[ xhr.status ] || xhr.status,
										xhr.statusText,
	
										// Support: IE <=9 only
										// IE9 has no XHR2 but throws on binary (trac-11426)
										// For XHR2 non-text, let the caller handle it (gh-2498)
										( xhr.responseType || "text" ) !== "text"  ||
										typeof xhr.responseText !== "string" ?
											{ binary: xhr.response } :
											{ text: xhr.responseText },
										xhr.getAllResponseHeaders()
									);
								}
							}
						};
					};
	
					// Listen to events
					xhr.onload = callback();
					errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" );
	
					// Support: IE 9 only
					// Use onreadystatechange to replace onabort
					// to handle uncaught aborts
					if ( xhr.onabort !== undefined ) {
						xhr.onabort = errorCallback;
					} else {
						xhr.onreadystatechange = function() {
	
							// Check readyState before timeout as it changes
							if ( xhr.readyState === 4 ) {
	
								// Allow onerror to be called first,
								// but that will not handle a native abort
								// Also, save errorCallback to a variable
								// as xhr.onerror cannot be accessed
								window.setTimeout( function() {
									if ( callback ) {
										errorCallback();
									}
								} );
							}
						};
					}
	
					// Create the abort callback
					callback = callback( "abort" );
	
					try {
	
						// Do send the request (this may raise an exception)
						xhr.send( options.hasContent && options.data || null );
					} catch ( e ) {
	
						// #14683: Only rethrow if this hasn't been notified as an error yet
						if ( callback ) {
							throw e;
						}
					}
				},
	
				abort: function() {
					if ( callback ) {
						callback();
					}
				}
			};
		}
	} );
	
	
	
	
	// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)
	jQuery.ajaxPrefilter( function( s ) {
		if ( s.crossDomain ) {
			s.contents.script = false;
		}
	} );
	
	// Install script dataType
	jQuery.ajaxSetup( {
		accepts: {
			script: "text/javascript, application/javascript, " +
				"application/ecmascript, application/x-ecmascript"
		},
		contents: {
			script: /\b(?:java|ecma)script\b/
		},
		converters: {
			"text script": function( text ) {
				jQuery.globalEval( text );
				return text;
			}
		}
	} );
	
	// Handle cache's special case and crossDomain
	jQuery.ajaxPrefilter( "script", function( s ) {
		if ( s.cache === undefined ) {
			s.cache = false;
		}
		if ( s.crossDomain ) {
			s.type = "GET";
		}
	} );
	
	// Bind script tag hack transport
	jQuery.ajaxTransport( "script", function( s ) {
	
		// This transport only deals with cross domain requests
		if ( s.crossDomain ) {
			var script, callback;
			return {
				send: function( _, complete ) {
					script = jQuery( "<script>" ).prop( {
						charset: s.scriptCharset,
						src: s.url
					} ).on(
						"load error",
						callback = function( evt ) {
							script.remove();
							callback = null;
							if ( evt ) {
								complete( evt.type === "error" ? 404 : 200, evt.type );
							}
						}
					);
	
					// Use native DOM manipulation to avoid our domManip AJAX trickery
					document.head.appendChild( script[ 0 ] );
				},
				abort: function() {
					if ( callback ) {
						callback();
					}
				}
			};
		}
	} );
	
	
	
	
	var oldCallbacks = [],
		rjsonp = /(=)\?(?=&|$)|\?\?/;
	
	// Default jsonp settings
	jQuery.ajaxSetup( {
		jsonp: "callback",
		jsonpCallback: function() {
			var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) );
			this[ callback ] = true;
			return callback;
		}
	} );
	
	// Detect, normalize options and install callbacks for jsonp requests
	jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
	
		var callbackName, overwritten, responseContainer,
			jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
				"url" :
				typeof s.data === "string" &&
					( s.contentType || "" )
						.indexOf( "application/x-www-form-urlencoded" ) === 0 &&
					rjsonp.test( s.data ) && "data"
			);
	
		// Handle iff the expected data type is "jsonp" or we have a parameter to set
		if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
	
			// Get callback name, remembering preexisting value associated with it
			callbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ?
				s.jsonpCallback() :
				s.jsonpCallback;
	
			// Insert callback into url or form data
			if ( jsonProp ) {
				s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
			} else if ( s.jsonp !== false ) {
				s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
			}
	
			// Use data converter to retrieve json after script execution
			s.converters[ "script json" ] = function() {
				if ( !responseContainer ) {
					jQuery.error( callbackName + " was not called" );
				}
				return responseContainer[ 0 ];
			};
	
			// Force json dataType
			s.dataTypes[ 0 ] = "json";
	
			// Install callback
			overwritten = window[ callbackName ];
			window[ callbackName ] = function() {
				responseContainer = arguments;
			};
	
			// Clean-up function (fires after converters)
			jqXHR.always( function() {
	
				// If previous value didn't exist - remove it
				if ( overwritten === undefined ) {
					jQuery( window ).removeProp( callbackName );
	
				// Otherwise restore preexisting value
				} else {
					window[ callbackName ] = overwritten;
				}
	
				// Save back as free
				if ( s[ callbackName ] ) {
	
					// Make sure that re-using the options doesn't screw things around
					s.jsonpCallback = originalSettings.jsonpCallback;
	
					// Save the callback name for future use
					oldCallbacks.push( callbackName );
				}
	
				// Call if it was a function and we have a response
				if ( responseContainer && isFunction( overwritten ) ) {
					overwritten( responseContainer[ 0 ] );
				}
	
				responseContainer = overwritten = undefined;
			} );
	
			// Delegate to script
			return "script";
		}
	} );
	
	
	
	
	// Support: Safari 8 only
	// In Safari 8 documents created via document.implementation.createHTMLDocument
	// collapse sibling forms: the second one becomes a child of the first one.
	// Because of that, this security measure has to be disabled in Safari 8.
	// https://bugs.webkit.org/show_bug.cgi?id=137337
	support.createHTMLDocument = ( function() {
		var body = document.implementation.createHTMLDocument( "" ).body;
		body.innerHTML = "<form></form><form></form>";
		return body.childNodes.length === 2;
	} )();
	
	
	// Argument "data" should be string of html
	// context (optional): If specified, the fragment will be created in this context,
	// defaults to document
	// keepScripts (optional): If true, will include scripts passed in the html string
	jQuery.parseHTML = function( data, context, keepScripts ) {
		if ( typeof data !== "string" ) {
			return [];
		}
		if ( typeof context === "boolean" ) {
			keepScripts = context;
			context = false;
		}
	
		var base, parsed, scripts;
	
		if ( !context ) {
	
			// Stop scripts or inline event handlers from being executed immediately
			// by using document.implementation
			if ( support.createHTMLDocument ) {
				context = document.implementation.createHTMLDocument( "" );
	
				// Set the base href for the created document
				// so any parsed elements with URLs
				// are based on the document's URL (gh-2965)
				base = context.createElement( "base" );
				base.href = document.location.href;
				context.head.appendChild( base );
			} else {
				context = document;
			}
		}
	
		parsed = rsingleTag.exec( data );
		scripts = !keepScripts && [];
	
		// Single tag
		if ( parsed ) {
			return [ context.createElement( parsed[ 1 ] ) ];
		}
	
		parsed = buildFragment( [ data ], context, scripts );
	
		if ( scripts && scripts.length ) {
			jQuery( scripts ).remove();
		}
	
		return jQuery.merge( [], parsed.childNodes );
	};
	
	
	/**
	 * Load a url into a page
	 */
	jQuery.fn.load = function( url, params, callback ) {
		var selector, type, response,
			self = this,
			off = url.indexOf( " " );
	
		if ( off > -1 ) {
			selector = stripAndCollapse( url.slice( off ) );
			url = url.slice( 0, off );
		}
	
		// If it's a function
		if ( isFunction( params ) ) {
	
			// We assume that it's the callback
			callback = params;
			params = undefined;
	
		// Otherwise, build a param string
		} else if ( params && typeof params === "object" ) {
			type = "POST";
		}
	
		// If we have elements to modify, make the request
		if ( self.length > 0 ) {
			jQuery.ajax( {
				url: url,
	
				// If "type" variable is undefined, then "GET" method will be used.
				// Make value of this field explicit since
				// user can override it through ajaxSetup method
				type: type || "GET",
				dataType: "html",
				data: params
			} ).done( function( responseText ) {
	
				// Save response for use in complete callback
				response = arguments;
	
				self.html( selector ?
	
					// If a selector was specified, locate the right elements in a dummy div
					// Exclude scripts to avoid IE 'Permission Denied' errors
					jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :
	
					// Otherwise use the full result
					responseText );
	
			// If the request succeeds, this function gets "data", "status", "jqXHR"
			// but they are ignored because response was set above.
			// If it fails, this function gets "jqXHR", "status", "error"
			} ).always( callback && function( jqXHR, status ) {
				self.each( function() {
					callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );
				} );
			} );
		}
	
		return this;
	};
	
	
	
	
	// Attach a bunch of functions for handling common AJAX events
	jQuery.each( [
		"ajaxStart",
		"ajaxStop",
		"ajaxComplete",
		"ajaxError",
		"ajaxSuccess",
		"ajaxSend"
	], function( i, type ) {
		jQuery.fn[ type ] = function( fn ) {
			return this.on( type, fn );
		};
	} );
	
	
	
	
	jQuery.expr.pseudos.animated = function( elem ) {
		return jQuery.grep( jQuery.timers, function( fn ) {
			return elem === fn.elem;
		} ).length;
	};
	
	
	
	
	jQuery.offset = {
		setOffset: function( elem, options, i ) {
			var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
				position = jQuery.css( elem, "position" ),
				curElem = jQuery( elem ),
				props = {};
	
			// Set position first, in-case top/left are set even on static elem
			if ( position === "static" ) {
				elem.style.position = "relative";
			}
	
			curOffset = curElem.offset();
			curCSSTop = jQuery.css( elem, "top" );
			curCSSLeft = jQuery.css( elem, "left" );
			calculatePosition = ( position === "absolute" || position === "fixed" ) &&
				( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1;
	
			// Need to be able to calculate position if either
			// top or left is auto and position is either absolute or fixed
			if ( calculatePosition ) {
				curPosition = curElem.position();
				curTop = curPosition.top;
				curLeft = curPosition.left;
	
			} else {
				curTop = parseFloat( curCSSTop ) || 0;
				curLeft = parseFloat( curCSSLeft ) || 0;
			}
	
			if ( isFunction( options ) ) {
	
				// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)
				options = options.call( elem, i, jQuery.extend( {}, curOffset ) );
			}
	
			if ( options.top != null ) {
				props.top = ( options.top - curOffset.top ) + curTop;
			}
			if ( options.left != null ) {
				props.left = ( options.left - curOffset.left ) + curLeft;
			}
	
			if ( "using" in options ) {
				options.using.call( elem, props );
	
			} else {
				curElem.css( props );
			}
		}
	};
	
	jQuery.fn.extend( {
	
		// offset() relates an element's border box to the document origin
		offset: function( options ) {
	
			// Preserve chaining for setter
			if ( arguments.length ) {
				return options === undefined ?
					this :
					this.each( function( i ) {
						jQuery.offset.setOffset( this, options, i );
					} );
			}
	
			var rect, win,
				elem = this[ 0 ];
	
			if ( !elem ) {
				return;
			}
	
			// Return zeros for disconnected and hidden (display: none) elements (gh-2310)
			// Support: IE <=11 only
			// Running getBoundingClientRect on a
			// disconnected node in IE throws an error
			if ( !elem.getClientRects().length ) {
				return { top: 0, left: 0 };
			}
	
			// Get document-relative position by adding viewport scroll to viewport-relative gBCR
			rect = elem.getBoundingClientRect();
			win = elem.ownerDocument.defaultView;
			return {
				top: rect.top + win.pageYOffset,
				left: rect.left + win.pageXOffset
			};
		},
	
		// position() relates an element's margin box to its offset parent's padding box
		// This corresponds to the behavior of CSS absolute positioning
		position: function() {
			if ( !this[ 0 ] ) {
				return;
			}
	
			var offsetParent, offset, doc,
				elem = this[ 0 ],
				parentOffset = { top: 0, left: 0 };
	
			// position:fixed elements are offset from the viewport, which itself always has zero offset
			if ( jQuery.css( elem, "position" ) === "fixed" ) {
	
				// Assume position:fixed implies availability of getBoundingClientRect
				offset = elem.getBoundingClientRect();
	
			} else {
				offset = this.offset();
	
				// Account for the *real* offset parent, which can be the document or its root element
				// when a statically positioned element is identified
				doc = elem.ownerDocument;
				offsetParent = elem.offsetParent || doc.documentElement;
				while ( offsetParent &&
					( offsetParent === doc.body || offsetParent === doc.documentElement ) &&
					jQuery.css( offsetParent, "position" ) === "static" ) {
	
					offsetParent = offsetParent.parentNode;
				}
				if ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {
	
					// Incorporate borders into its offset, since they are outside its content origin
					parentOffset = jQuery( offsetParent ).offset();
					parentOffset.top += jQuery.css( offsetParent, "borderTopWidth", true );
					parentOffset.left += jQuery.css( offsetParent, "borderLeftWidth", true );
				}
			}
	
			// Subtract parent offsets and element margins
			return {
				top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),
				left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true )
			};
		},
	
		// This method will return documentElement in the following cases:
		// 1) For the element inside the iframe without offsetParent, this method will return
		//    documentElement of the parent window
		// 2) For the hidden or detached element
		// 3) For body or html element, i.e. in case of the html node - it will return itself
		//
		// but those exceptions were never presented as a real life use-cases
		// and might be considered as more preferable results.
		//
		// This logic, however, is not guaranteed and can change at any point in the future
		offsetParent: function() {
			return this.map( function() {
				var offsetParent = this.offsetParent;
	
				while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) {
					offsetParent = offsetParent.offsetParent;
				}
	
				return offsetParent || documentElement;
			} );
		}
	} );
	
	// Create scrollLeft and scrollTop methods
	jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
		var top = "pageYOffset" === prop;
	
		jQuery.fn[ method ] = function( val ) {
			return access( this, function( elem, method, val ) {
	
				// Coalesce documents and windows
				var win;
				if ( isWindow( elem ) ) {
					win = elem;
				} else if ( elem.nodeType === 9 ) {
					win = elem.defaultView;
				}
	
				if ( val === undefined ) {
					return win ? win[ prop ] : elem[ method ];
				}
	
				if ( win ) {
					win.scrollTo(
						!top ? val : win.pageXOffset,
						top ? val : win.pageYOffset
					);
	
				} else {
					elem[ method ] = val;
				}
			}, method, val, arguments.length );
		};
	} );
	
	// Support: Safari <=7 - 9.1, Chrome <=37 - 49
	// Add the top/left cssHooks using jQuery.fn.position
	// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
	// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347
	// getComputedStyle returns percent when specified for top/left/bottom/right;
	// rather than make the css module depend on the offset module, just check for it here
	jQuery.each( [ "top", "left" ], function( i, prop ) {
		jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
			function( elem, computed ) {
				if ( computed ) {
					computed = curCSS( elem, prop );
	
					// If curCSS returns percentage, fallback to offset
					return rnumnonpx.test( computed ) ?
						jQuery( elem ).position()[ prop ] + "px" :
						computed;
				}
			}
		);
	} );
	
	
	// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
	jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
		jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name },
			function( defaultExtra, funcName ) {
	
			// Margin is only for outerHeight, outerWidth
			jQuery.fn[ funcName ] = function( margin, value ) {
				var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
					extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
	
				return access( this, function( elem, type, value ) {
					var doc;
	
					if ( isWindow( elem ) ) {
	
						// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)
						return funcName.indexOf( "outer" ) === 0 ?
							elem[ "inner" + name ] :
							elem.document.documentElement[ "client" + name ];
					}
	
					// Get document width or height
					if ( elem.nodeType === 9 ) {
						doc = elem.documentElement;
	
						// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],
						// whichever is greatest
						return Math.max(
							elem.body[ "scroll" + name ], doc[ "scroll" + name ],
							elem.body[ "offset" + name ], doc[ "offset" + name ],
							doc[ "client" + name ]
						);
					}
	
					return value === undefined ?
	
						// Get width or height on the element, requesting but not forcing parseFloat
						jQuery.css( elem, type, extra ) :
	
						// Set width or height on the element
						jQuery.style( elem, type, value, extra );
				}, type, chainable ? margin : undefined, chainable );
			};
		} );
	} );
	
	
	jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " +
		"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
		"change select submit keydown keypress keyup contextmenu" ).split( " " ),
		function( i, name ) {
	
		// Handle event binding
		jQuery.fn[ name ] = function( data, fn ) {
			return arguments.length > 0 ?
				this.on( name, null, data, fn ) :
				this.trigger( name );
		};
	} );
	
	jQuery.fn.extend( {
		hover: function( fnOver, fnOut ) {
			return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
		}
	} );
	
	
	
	
	jQuery.fn.extend( {
	
		bind: function( types, data, fn ) {
			return this.on( types, null, data, fn );
		},
		unbind: function( types, fn ) {
			return this.off( types, null, fn );
		},
	
		delegate: function( selector, types, data, fn ) {
			return this.on( types, selector, data, fn );
		},
		undelegate: function( selector, types, fn ) {
	
			// ( namespace ) or ( selector, types [, fn] )
			return arguments.length === 1 ?
				this.off( selector, "**" ) :
				this.off( types, selector || "**", fn );
		}
	} );
	
	// Bind a function to a context, optionally partially applying any
	// arguments.
	// jQuery.proxy is deprecated to promote standards (specifically Function#bind)
	// However, it is not slated for removal any time soon
	jQuery.proxy = function( fn, context ) {
		var tmp, args, proxy;
	
		if ( typeof context === "string" ) {
			tmp = fn[ context ];
			context = fn;
			fn = tmp;
		}
	
		// Quick check to determine if target is callable, in the spec
		// this throws a TypeError, but we will just return undefined.
		if ( !isFunction( fn ) ) {
			return undefined;
		}
	
		// Simulated bind
		args = slice.call( arguments, 2 );
		proxy = function() {
			return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
		};
	
		// Set the guid of unique handler to the same of original handler, so it can be removed
		proxy.guid = fn.guid = fn.guid || jQuery.guid++;
	
		return proxy;
	};
	
	jQuery.holdReady = function( hold ) {
		if ( hold ) {
			jQuery.readyWait++;
		} else {
			jQuery.ready( true );
		}
	};
	jQuery.isArray = Array.isArray;
	jQuery.parseJSON = JSON.parse;
	jQuery.nodeName = nodeName;
	jQuery.isFunction = isFunction;
	jQuery.isWindow = isWindow;
	jQuery.camelCase = camelCase;
	jQuery.type = toType;
	
	jQuery.now = Date.now;
	
	jQuery.isNumeric = function( obj ) {
	
		// As of jQuery 3.0, isNumeric is limited to
		// strings and numbers (primitives or objects)
		// that can be coerced to finite numbers (gh-2662)
		var type = jQuery.type( obj );
		return ( type === "number" || type === "string" ) &&
	
			// parseFloat NaNs numeric-cast false positives ("")
			// ...but misinterprets leading-number strings, particularly hex literals ("0x...")
			// subtraction forces infinities to NaN
			!isNaN( obj - parseFloat( obj ) );
	};
	
	
	
	
	// Register as a named AMD module, since jQuery can be concatenated with other
	// files that may use define, but not via a proper concatenation script that
	// understands anonymous AMD modules. A named AMD is safest and most robust
	// way to register. Lowercase jquery is used because AMD module names are
	// derived from file names, and jQuery is normally delivered in a lowercase
	// file name. Do this after creating the global so that if an AMD module wants
	// to call noConflict to hide this version of jQuery, it will work.
	
	// Note that for maximum portability, libraries that are not jQuery should
	// declare themselves as anonymous modules, and avoid setting a global if an
	// AMD loader is present. jQuery is a special case. For more information, see
	// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
	
	if ( true ) {
		!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function() {
			return jQuery;
		}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
	}
	
	
	
	
	var
	
		// Map over jQuery in case of overwrite
		_jQuery = window.jQuery,
	
		// Map over the $ in case of overwrite
		_$ = window.$;
	
	jQuery.noConflict = function( deep ) {
		if ( window.$ === jQuery ) {
			window.$ = _$;
		}
	
		if ( deep && window.jQuery === jQuery ) {
			window.jQuery = _jQuery;
		}
	
		return jQuery;
	};
	
	// Expose jQuery and $ identifiers, even in AMD
	// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
	// and CommonJS for browser emulators (#13566)
	if ( !noGlobal ) {
		window.jQuery = window.$ = jQuery;
	}
	
	
	
	
	return jQuery;
	} );


/***/ }),
/* 8 */
/***/ (function(module, exports, __webpack_require__) {

	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/* WEBPACK VAR INJECTION */(function(global, module) {//     Underscore.js 1.9.1
	//     http://underscorejs.org
	//     (c) 2009-2018 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
	//     Underscore may be freely distributed under the MIT license.
	
	(function() {
	
	  // Baseline setup
	  // --------------
	
	  // Establish the root object, `window` (`self`) in the browser, `global`
	  // on the server, or `this` in some virtual machines. We use `self`
	  // instead of `window` for `WebWorker` support.
	  var root = typeof self == 'object' && self.self === self && self ||
	            typeof global == 'object' && global.global === global && global ||
	            this ||
	            {};
	
	  // Save the previous value of the `_` variable.
	  var previousUnderscore = root._;
	
	  // Save bytes in the minified (but not gzipped) version:
	  var ArrayProto = Array.prototype, ObjProto = Object.prototype;
	  var SymbolProto = typeof Symbol !== 'undefined' ? Symbol.prototype : null;
	
	  // Create quick reference variables for speed access to core prototypes.
	  var push = ArrayProto.push,
	      slice = ArrayProto.slice,
	      toString = ObjProto.toString,
	      hasOwnProperty = ObjProto.hasOwnProperty;
	
	  // All **ECMAScript 5** native function implementations that we hope to use
	  // are declared here.
	  var nativeIsArray = Array.isArray,
	      nativeKeys = Object.keys,
	      nativeCreate = Object.create;
	
	  // Naked function reference for surrogate-prototype-swapping.
	  var Ctor = function(){};
	
	  // Create a safe reference to the Underscore object for use below.
	  var _ = function(obj) {
	    if (obj instanceof _) return obj;
	    if (!(this instanceof _)) return new _(obj);
	    this._wrapped = obj;
	  };
	
	  // Export the Underscore object for **Node.js**, with
	  // backwards-compatibility for their old module API. If we're in
	  // the browser, add `_` as a global object.
	  // (`nodeType` is checked to ensure that `module`
	  // and `exports` are not HTML elements.)
	  if (typeof exports != 'undefined' && !exports.nodeType) {
	    if (typeof module != 'undefined' && !module.nodeType && module.exports) {
	      exports = module.exports = _;
	    }
	    exports._ = _;
	  } else {
	    root._ = _;
	  }
	
	  // Current version.
	  _.VERSION = '1.9.1';
	
	  // Internal function that returns an efficient (for current engines) version
	  // of the passed-in callback, to be repeatedly applied in other Underscore
	  // functions.
	  var optimizeCb = function(func, context, argCount) {
	    if (context === void 0) return func;
	    switch (argCount == null ? 3 : argCount) {
	      case 1: return function(value) {
	        return func.call(context, value);
	      };
	      // The 2-argument case is omitted because we’re not using it.
	      case 3: return function(value, index, collection) {
	        return func.call(context, value, index, collection);
	      };
	      case 4: return function(accumulator, value, index, collection) {
	        return func.call(context, accumulator, value, index, collection);
	      };
	    }
	    return function() {
	      return func.apply(context, arguments);
	    };
	  };
	
	  var builtinIteratee;
	
	  // An internal function to generate callbacks that can be applied to each
	  // element in a collection, returning the desired result — either `identity`,
	  // an arbitrary callback, a property matcher, or a property accessor.
	  var cb = function(value, context, argCount) {
	    if (_.iteratee !== builtinIteratee) return _.iteratee(value, context);
	    if (value == null) return _.identity;
	    if (_.isFunction(value)) return optimizeCb(value, context, argCount);
	    if (_.isObject(value) && !_.isArray(value)) return _.matcher(value);
	    return _.property(value);
	  };
	
	  // External wrapper for our callback generator. Users may customize
	  // `_.iteratee` if they want additional predicate/iteratee shorthand styles.
	  // This abstraction hides the internal-only argCount argument.
	  _.iteratee = builtinIteratee = function(value, context) {
	    return cb(value, context, Infinity);
	  };
	
	  // Some functions take a variable number of arguments, or a few expected
	  // arguments at the beginning and then a variable number of values to operate
	  // on. This helper accumulates all remaining arguments past the function’s
	  // argument length (or an explicit `startIndex`), into an array that becomes
	  // the last argument. Similar to ES6’s "rest parameter".
	  var restArguments = function(func, startIndex) {
	    startIndex = startIndex == null ? func.length - 1 : +startIndex;
	    return function() {
	      var length = Math.max(arguments.length - startIndex, 0),
	          rest = Array(length),
	          index = 0;
	      for (; index < length; index++) {
	        rest[index] = arguments[index + startIndex];
	      }
	      switch (startIndex) {
	        case 0: return func.call(this, rest);
	        case 1: return func.call(this, arguments[0], rest);
	        case 2: return func.call(this, arguments[0], arguments[1], rest);
	      }
	      var args = Array(startIndex + 1);
	      for (index = 0; index < startIndex; index++) {
	        args[index] = arguments[index];
	      }
	      args[startIndex] = rest;
	      return func.apply(this, args);
	    };
	  };
	
	  // An internal function for creating a new object that inherits from another.
	  var baseCreate = function(prototype) {
	    if (!_.isObject(prototype)) return {};
	    if (nativeCreate) return nativeCreate(prototype);
	    Ctor.prototype = prototype;
	    var result = new Ctor;
	    Ctor.prototype = null;
	    return result;
	  };
	
	  var shallowProperty = function(key) {
	    return function(obj) {
	      return obj == null ? void 0 : obj[key];
	    };
	  };
	
	  var has = function(obj, path) {
	    return obj != null && hasOwnProperty.call(obj, path);
	  }
	
	  var deepGet = function(obj, path) {
	    var length = path.length;
	    for (var i = 0; i < length; i++) {
	      if (obj == null) return void 0;
	      obj = obj[path[i]];
	    }
	    return length ? obj : void 0;
	  };
	
	  // Helper for collection methods to determine whether a collection
	  // should be iterated as an array or as an object.
	  // Related: http://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength
	  // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094
	  var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;
	  var getLength = shallowProperty('length');
	  var isArrayLike = function(collection) {
	    var length = getLength(collection);
	    return typeof length == 'number' && length >= 0 && length <= MAX_ARRAY_INDEX;
	  };
	
	  // Collection Functions
	  // --------------------
	
	  // The cornerstone, an `each` implementation, aka `forEach`.
	  // Handles raw objects in addition to array-likes. Treats all
	  // sparse array-likes as if they were dense.
	  _.each = _.forEach = function(obj, iteratee, context) {
	    iteratee = optimizeCb(iteratee, context);
	    var i, length;
	    if (isArrayLike(obj)) {
	      for (i = 0, length = obj.length; i < length; i++) {
	        iteratee(obj[i], i, obj);
	      }
	    } else {
	      var keys = _.keys(obj);
	      for (i = 0, length = keys.length; i < length; i++) {
	        iteratee(obj[keys[i]], keys[i], obj);
	      }
	    }
	    return obj;
	  };
	
	  // Return the results of applying the iteratee to each element.
	  _.map = _.collect = function(obj, iteratee, context) {
	    iteratee = cb(iteratee, context);
	    var keys = !isArrayLike(obj) && _.keys(obj),
	        length = (keys || obj).length,
	        results = Array(length);
	    for (var index = 0; index < length; index++) {
	      var currentKey = keys ? keys[index] : index;
	      results[index] = iteratee(obj[currentKey], currentKey, obj);
	    }
	    return results;
	  };
	
	  // Create a reducing function iterating left or right.
	  var createReduce = function(dir) {
	    // Wrap code that reassigns argument variables in a separate function than
	    // the one that accesses `arguments.length` to avoid a perf hit. (#1991)
	    var reducer = function(obj, iteratee, memo, initial) {
	      var keys = !isArrayLike(obj) && _.keys(obj),
	          length = (keys || obj).length,
	          index = dir > 0 ? 0 : length - 1;
	      if (!initial) {
	        memo = obj[keys ? keys[index] : index];
	        index += dir;
	      }
	      for (; index >= 0 && index < length; index += dir) {
	        var currentKey = keys ? keys[index] : index;
	        memo = iteratee(memo, obj[currentKey], currentKey, obj);
	      }
	      return memo;
	    };
	
	    return function(obj, iteratee, memo, context) {
	      var initial = arguments.length >= 3;
	      return reducer(obj, optimizeCb(iteratee, context, 4), memo, initial);
	    };
	  };
	
	  // **Reduce** builds up a single result from a list of values, aka `inject`,
	  // or `foldl`.
	  _.reduce = _.foldl = _.inject = createReduce(1);
	
	  // The right-associative version of reduce, also known as `foldr`.
	  _.reduceRight = _.foldr = createReduce(-1);
	
	  // Return the first value which passes a truth test. Aliased as `detect`.
	  _.find = _.detect = function(obj, predicate, context) {
	    var keyFinder = isArrayLike(obj) ? _.findIndex : _.findKey;
	    var key = keyFinder(obj, predicate, context);
	    if (key !== void 0 && key !== -1) return obj[key];
	  };
	
	  // Return all the elements that pass a truth test.
	  // Aliased as `select`.
	  _.filter = _.select = function(obj, predicate, context) {
	    var results = [];
	    predicate = cb(predicate, context);
	    _.each(obj, function(value, index, list) {
	      if (predicate(value, index, list)) results.push(value);
	    });
	    return results;
	  };
	
	  // Return all the elements for which a truth test fails.
	  _.reject = function(obj, predicate, context) {
	    return _.filter(obj, _.negate(cb(predicate)), context);
	  };
	
	  // Determine whether all of the elements match a truth test.
	  // Aliased as `all`.
	  _.every = _.all = function(obj, predicate, context) {
	    predicate = cb(predicate, context);
	    var keys = !isArrayLike(obj) && _.keys(obj),
	        length = (keys || obj).length;
	    for (var index = 0; index < length; index++) {
	      var currentKey = keys ? keys[index] : index;
	      if (!predicate(obj[currentKey], currentKey, obj)) return false;
	    }
	    return true;
	  };
	
	  // Determine if at least one element in the object matches a truth test.
	  // Aliased as `any`.
	  _.some = _.any = function(obj, predicate, context) {
	    predicate = cb(predicate, context);
	    var keys = !isArrayLike(obj) && _.keys(obj),
	        length = (keys || obj).length;
	    for (var index = 0; index < length; index++) {
	      var currentKey = keys ? keys[index] : index;
	      if (predicate(obj[currentKey], currentKey, obj)) return true;
	    }
	    return false;
	  };
	
	  // Determine if the array or object contains a given item (using `===`).
	  // Aliased as `includes` and `include`.
	  _.contains = _.includes = _.include = function(obj, item, fromIndex, guard) {
	    if (!isArrayLike(obj)) obj = _.values(obj);
	    if (typeof fromIndex != 'number' || guard) fromIndex = 0;
	    return _.indexOf(obj, item, fromIndex) >= 0;
	  };
	
	  // Invoke a method (with arguments) on every item in a collection.
	  _.invoke = restArguments(function(obj, path, args) {
	    var contextPath, func;
	    if (_.isFunction(path)) {
	      func = path;
	    } else if (_.isArray(path)) {
	      contextPath = path.slice(0, -1);
	      path = path[path.length - 1];
	    }
	    return _.map(obj, function(context) {
	      var method = func;
	      if (!method) {
	        if (contextPath && contextPath.length) {
	          context = deepGet(context, contextPath);
	        }
	        if (context == null) return void 0;
	        method = context[path];
	      }
	      return method == null ? method : method.apply(context, args);
	    });
	  });
	
	  // Convenience version of a common use case of `map`: fetching a property.
	  _.pluck = function(obj, key) {
	    return _.map(obj, _.property(key));
	  };
	
	  // Convenience version of a common use case of `filter`: selecting only objects
	  // containing specific `key:value` pairs.
	  _.where = function(obj, attrs) {
	    return _.filter(obj, _.matcher(attrs));
	  };
	
	  // Convenience version of a common use case of `find`: getting the first object
	  // containing specific `key:value` pairs.
	  _.findWhere = function(obj, attrs) {
	    return _.find(obj, _.matcher(attrs));
	  };
	
	  // Return the maximum element (or element-based computation).
	  _.max = function(obj, iteratee, context) {
	    var result = -Infinity, lastComputed = -Infinity,
	        value, computed;
	    if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) {
	      obj = isArrayLike(obj) ? obj : _.values(obj);
	      for (var i = 0, length = obj.length; i < length; i++) {
	        value = obj[i];
	        if (value != null && value > result) {
	          result = value;
	        }
	      }
	    } else {
	      iteratee = cb(iteratee, context);
	      _.each(obj, function(v, index, list) {
	        computed = iteratee(v, index, list);
	        if (computed > lastComputed || computed === -Infinity && result === -Infinity) {
	          result = v;
	          lastComputed = computed;
	        }
	      });
	    }
	    return result;
	  };
	
	  // Return the minimum element (or element-based computation).
	  _.min = function(obj, iteratee, context) {
	    var result = Infinity, lastComputed = Infinity,
	        value, computed;
	    if (iteratee == null || typeof iteratee == 'number' && typeof obj[0] != 'object' && obj != null) {
	      obj = isArrayLike(obj) ? obj : _.values(obj);
	      for (var i = 0, length = obj.length; i < length; i++) {
	        value = obj[i];
	        if (value != null && value < result) {
	          result = value;
	        }
	      }
	    } else {
	      iteratee = cb(iteratee, context);
	      _.each(obj, function(v, index, list) {
	        computed = iteratee(v, index, list);
	        if (computed < lastComputed || computed === Infinity && result === Infinity) {
	          result = v;
	          lastComputed = computed;
	        }
	      });
	    }
	    return result;
	  };
	
	  // Shuffle a collection.
	  _.shuffle = function(obj) {
	    return _.sample(obj, Infinity);
	  };
	
	  // Sample **n** random values from a collection using the modern version of the
	  // [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher–Yates_shuffle).
	  // If **n** is not specified, returns a single random element.
	  // The internal `guard` argument allows it to work with `map`.
	  _.sample = function(obj, n, guard) {
	    if (n == null || guard) {
	      if (!isArrayLike(obj)) obj = _.values(obj);
	      return obj[_.random(obj.length - 1)];
	    }
	    var sample = isArrayLike(obj) ? _.clone(obj) : _.values(obj);
	    var length = getLength(sample);
	    n = Math.max(Math.min(n, length), 0);
	    var last = length - 1;
	    for (var index = 0; index < n; index++) {
	      var rand = _.random(index, last);
	      var temp = sample[index];
	      sample[index] = sample[rand];
	      sample[rand] = temp;
	    }
	    return sample.slice(0, n);
	  };
	
	  // Sort the object's values by a criterion produced by an iteratee.
	  _.sortBy = function(obj, iteratee, context) {
	    var index = 0;
	    iteratee = cb(iteratee, context);
	    return _.pluck(_.map(obj, function(value, key, list) {
	      return {
	        value: value,
	        index: index++,
	        criteria: iteratee(value, key, list)
	      };
	    }).sort(function(left, right) {
	      var a = left.criteria;
	      var b = right.criteria;
	      if (a !== b) {
	        if (a > b || a === void 0) return 1;
	        if (a < b || b === void 0) return -1;
	      }
	      return left.index - right.index;
	    }), 'value');
	  };
	
	  // An internal function used for aggregate "group by" operations.
	  var group = function(behavior, partition) {
	    return function(obj, iteratee, context) {
	      var result = partition ? [[], []] : {};
	      iteratee = cb(iteratee, context);
	      _.each(obj, function(value, index) {
	        var key = iteratee(value, index, obj);
	        behavior(result, value, key);
	      });
	      return result;
	    };
	  };
	
	  // Groups the object's values by a criterion. Pass either a string attribute
	  // to group by, or a function that returns the criterion.
	  _.groupBy = group(function(result, value, key) {
	    if (has(result, key)) result[key].push(value); else result[key] = [value];
	  });
	
	  // Indexes the object's values by a criterion, similar to `groupBy`, but for
	  // when you know that your index values will be unique.
	  _.indexBy = group(function(result, value, key) {
	    result[key] = value;
	  });
	
	  // Counts instances of an object that group by a certain criterion. Pass
	  // either a string attribute to count by, or a function that returns the
	  // criterion.
	  _.countBy = group(function(result, value, key) {
	    if (has(result, key)) result[key]++; else result[key] = 1;
	  });
	
	  var reStrSymbol = /[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g;
	  // Safely create a real, live array from anything iterable.
	  _.toArray = function(obj) {
	    if (!obj) return [];
	    if (_.isArray(obj)) return slice.call(obj);
	    if (_.isString(obj)) {
	      // Keep surrogate pair characters together
	      return obj.match(reStrSymbol);
	    }
	    if (isArrayLike(obj)) return _.map(obj, _.identity);
	    return _.values(obj);
	  };
	
	  // Return the number of elements in an object.
	  _.size = function(obj) {
	    if (obj == null) return 0;
	    return isArrayLike(obj) ? obj.length : _.keys(obj).length;
	  };
	
	  // Split a collection into two arrays: one whose elements all satisfy the given
	  // predicate, and one whose elements all do not satisfy the predicate.
	  _.partition = group(function(result, value, pass) {
	    result[pass ? 0 : 1].push(value);
	  }, true);
	
	  // Array Functions
	  // ---------------
	
	  // Get the first element of an array. Passing **n** will return the first N
	  // values in the array. Aliased as `head` and `take`. The **guard** check
	  // allows it to work with `_.map`.
	  _.first = _.head = _.take = function(array, n, guard) {
	    if (array == null || array.length < 1) return n == null ? void 0 : [];
	    if (n == null || guard) return array[0];
	    return _.initial(array, array.length - n);
	  };
	
	  // Returns everything but the last entry of the array. Especially useful on
	  // the arguments object. Passing **n** will return all the values in
	  // the array, excluding the last N.
	  _.initial = function(array, n, guard) {
	    return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));
	  };
	
	  // Get the last element of an array. Passing **n** will return the last N
	  // values in the array.
	  _.last = function(array, n, guard) {
	    if (array == null || array.length < 1) return n == null ? void 0 : [];
	    if (n == null || guard) return array[array.length - 1];
	    return _.rest(array, Math.max(0, array.length - n));
	  };
	
	  // Returns everything but the first entry of the array. Aliased as `tail` and `drop`.
	  // Especially useful on the arguments object. Passing an **n** will return
	  // the rest N values in the array.
	  _.rest = _.tail = _.drop = function(array, n, guard) {
	    return slice.call(array, n == null || guard ? 1 : n);
	  };
	
	  // Trim out all falsy values from an array.
	  _.compact = function(array) {
	    return _.filter(array, Boolean);
	  };
	
	  // Internal implementation of a recursive `flatten` function.
	  var flatten = function(input, shallow, strict, output) {
	    output = output || [];
	    var idx = output.length;
	    for (var i = 0, length = getLength(input); i < length; i++) {
	      var value = input[i];
	      if (isArrayLike(value) && (_.isArray(value) || _.isArguments(value))) {
	        // Flatten current level of array or arguments object.
	        if (shallow) {
	          var j = 0, len = value.length;
	          while (j < len) output[idx++] = value[j++];
	        } else {
	          flatten(value, shallow, strict, output);
	          idx = output.length;
	        }
	      } else if (!strict) {
	        output[idx++] = value;
	      }
	    }
	    return output;
	  };
	
	  // Flatten out an array, either recursively (by default), or just one level.
	  _.flatten = function(array, shallow) {
	    return flatten(array, shallow, false);
	  };
	
	  // Return a version of the array that does not contain the specified value(s).
	  _.without = restArguments(function(array, otherArrays) {
	    return _.difference(array, otherArrays);
	  });
	
	  // Produce a duplicate-free version of the array. If the array has already
	  // been sorted, you have the option of using a faster algorithm.
	  // The faster algorithm will not work with an iteratee if the iteratee
	  // is not a one-to-one function, so providing an iteratee will disable
	  // the faster algorithm.
	  // Aliased as `unique`.
	  _.uniq = _.unique = function(array, isSorted, iteratee, context) {
	    if (!_.isBoolean(isSorted)) {
	      context = iteratee;
	      iteratee = isSorted;
	      isSorted = false;
	    }
	    if (iteratee != null) iteratee = cb(iteratee, context);
	    var result = [];
	    var seen = [];
	    for (var i = 0, length = getLength(array); i < length; i++) {
	      var value = array[i],
	          computed = iteratee ? iteratee(value, i, array) : value;
	      if (isSorted && !iteratee) {
	        if (!i || seen !== computed) result.push(value);
	        seen = computed;
	      } else if (iteratee) {
	        if (!_.contains(seen, computed)) {
	          seen.push(computed);
	          result.push(value);
	        }
	      } else if (!_.contains(result, value)) {
	        result.push(value);
	      }
	    }
	    return result;
	  };
	
	  // Produce an array that contains the union: each distinct element from all of
	  // the passed-in arrays.
	  _.union = restArguments(function(arrays) {
	    return _.uniq(flatten(arrays, true, true));
	  });
	
	  // Produce an array that contains every item shared between all the
	  // passed-in arrays.
	  _.intersection = function(array) {
	    var result = [];
	    var argsLength = arguments.length;
	    for (var i = 0, length = getLength(array); i < length; i++) {
	      var item = array[i];
	      if (_.contains(result, item)) continue;
	      var j;
	      for (j = 1; j < argsLength; j++) {
	        if (!_.contains(arguments[j], item)) break;
	      }
	      if (j === argsLength) result.push(item);
	    }
	    return result;
	  };
	
	  // Take the difference between one array and a number of other arrays.
	  // Only the elements present in just the first array will remain.
	  _.difference = restArguments(function(array, rest) {
	    rest = flatten(rest, true, true);
	    return _.filter(array, function(value){
	      return !_.contains(rest, value);
	    });
	  });
	
	  // Complement of _.zip. Unzip accepts an array of arrays and groups
	  // each array's elements on shared indices.
	  _.unzip = function(array) {
	    var length = array && _.max(array, getLength).length || 0;
	    var result = Array(length);
	
	    for (var index = 0; index < length; index++) {
	      result[index] = _.pluck(array, index);
	    }
	    return result;
	  };
	
	  // Zip together multiple lists into a single array -- elements that share
	  // an index go together.
	  _.zip = restArguments(_.unzip);
	
	  // Converts lists into objects. Pass either a single array of `[key, value]`
	  // pairs, or two parallel arrays of the same length -- one of keys, and one of
	  // the corresponding values. Passing by pairs is the reverse of _.pairs.
	  _.object = function(list, values) {
	    var result = {};
	    for (var i = 0, length = getLength(list); i < length; i++) {
	      if (values) {
	        result[list[i]] = values[i];
	      } else {
	        result[list[i][0]] = list[i][1];
	      }
	    }
	    return result;
	  };
	
	  // Generator function to create the findIndex and findLastIndex functions.
	  var createPredicateIndexFinder = function(dir) {
	    return function(array, predicate, context) {
	      predicate = cb(predicate, context);
	      var length = getLength(array);
	      var index = dir > 0 ? 0 : length - 1;
	      for (; index >= 0 && index < length; index += dir) {
	        if (predicate(array[index], index, array)) return index;
	      }
	      return -1;
	    };
	  };
	
	  // Returns the first index on an array-like that passes a predicate test.
	  _.findIndex = createPredicateIndexFinder(1);
	  _.findLastIndex = createPredicateIndexFinder(-1);
	
	  // Use a comparator function to figure out the smallest index at which
	  // an object should be inserted so as to maintain order. Uses binary search.
	  _.sortedIndex = function(array, obj, iteratee, context) {
	    iteratee = cb(iteratee, context, 1);
	    var value = iteratee(obj);
	    var low = 0, high = getLength(array);
	    while (low < high) {
	      var mid = Math.floor((low + high) / 2);
	      if (iteratee(array[mid]) < value) low = mid + 1; else high = mid;
	    }
	    return low;
	  };
	
	  // Generator function to create the indexOf and lastIndexOf functions.
	  var createIndexFinder = function(dir, predicateFind, sortedIndex) {
	    return function(array, item, idx) {
	      var i = 0, length = getLength(array);
	      if (typeof idx == 'number') {
	        if (dir > 0) {
	          i = idx >= 0 ? idx : Math.max(idx + length, i);
	        } else {
	          length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1;
	        }
	      } else if (sortedIndex && idx && length) {
	        idx = sortedIndex(array, item);
	        return array[idx] === item ? idx : -1;
	      }
	      if (item !== item) {
	        idx = predicateFind(slice.call(array, i, length), _.isNaN);
	        return idx >= 0 ? idx + i : -1;
	      }
	      for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) {
	        if (array[idx] === item) return idx;
	      }
	      return -1;
	    };
	  };
	
	  // Return the position of the first occurrence of an item in an array,
	  // or -1 if the item is not included in the array.
	  // If the array is large and already in sort order, pass `true`
	  // for **isSorted** to use binary search.
	  _.indexOf = createIndexFinder(1, _.findIndex, _.sortedIndex);
	  _.lastIndexOf = createIndexFinder(-1, _.findLastIndex);
	
	  // Generate an integer Array containing an arithmetic progression. A port of
	  // the native Python `range()` function. See
	  // [the Python documentation](http://docs.python.org/library/functions.html#range).
	  _.range = function(start, stop, step) {
	    if (stop == null) {
	      stop = start || 0;
	      start = 0;
	    }
	    if (!step) {
	      step = stop < start ? -1 : 1;
	    }
	
	    var length = Math.max(Math.ceil((stop - start) / step), 0);
	    var range = Array(length);
	
	    for (var idx = 0; idx < length; idx++, start += step) {
	      range[idx] = start;
	    }
	
	    return range;
	  };
	
	  // Chunk a single array into multiple arrays, each containing `count` or fewer
	  // items.
	  _.chunk = function(array, count) {
	    if (count == null || count < 1) return [];
	    var result = [];
	    var i = 0, length = array.length;
	    while (i < length) {
	      result.push(slice.call(array, i, i += count));
	    }
	    return result;
	  };
	
	  // Function (ahem) Functions
	  // ------------------
	
	  // Determines whether to execute a function as a constructor
	  // or a normal function with the provided arguments.
	  var executeBound = function(sourceFunc, boundFunc, context, callingContext, args) {
	    if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);
	    var self = baseCreate(sourceFunc.prototype);
	    var result = sourceFunc.apply(self, args);
	    if (_.isObject(result)) return result;
	    return self;
	  };
	
	  // Create a function bound to a given object (assigning `this`, and arguments,
	  // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if
	  // available.
	  _.bind = restArguments(function(func, context, args) {
	    if (!_.isFunction(func)) throw new TypeError('Bind must be called on a function');
	    var bound = restArguments(function(callArgs) {
	      return executeBound(func, bound, context, this, args.concat(callArgs));
	    });
	    return bound;
	  });
	
	  // Partially apply a function by creating a version that has had some of its
	  // arguments pre-filled, without changing its dynamic `this` context. _ acts
	  // as a placeholder by default, allowing any combination of arguments to be
	  // pre-filled. Set `_.partial.placeholder` for a custom placeholder argument.
	  _.partial = restArguments(function(func, boundArgs) {
	    var placeholder = _.partial.placeholder;
	    var bound = function() {
	      var position = 0, length = boundArgs.length;
	      var args = Array(length);
	      for (var i = 0; i < length; i++) {
	        args[i] = boundArgs[i] === placeholder ? arguments[position++] : boundArgs[i];
	      }
	      while (position < arguments.length) args.push(arguments[position++]);
	      return executeBound(func, bound, this, this, args);
	    };
	    return bound;
	  });
	
	  _.partial.placeholder = _;
	
	  // Bind a number of an object's methods to that object. Remaining arguments
	  // are the method names to be bound. Useful for ensuring that all callbacks
	  // defined on an object belong to it.
	  _.bindAll = restArguments(function(obj, keys) {
	    keys = flatten(keys, false, false);
	    var index = keys.length;
	    if (index < 1) throw new Error('bindAll must be passed function names');
	    while (index--) {
	      var key = keys[index];
	      obj[key] = _.bind(obj[key], obj);
	    }
	  });
	
	  // Memoize an expensive function by storing its results.
	  _.memoize = function(func, hasher) {
	    var memoize = function(key) {
	      var cache = memoize.cache;
	      var address = '' + (hasher ? hasher.apply(this, arguments) : key);
	      if (!has(cache, address)) cache[address] = func.apply(this, arguments);
	      return cache[address];
	    };
	    memoize.cache = {};
	    return memoize;
	  };
	
	  // Delays a function for the given number of milliseconds, and then calls
	  // it with the arguments supplied.
	  _.delay = restArguments(function(func, wait, args) {
	    return setTimeout(function() {
	      return func.apply(null, args);
	    }, wait);
	  });
	
	  // Defers a function, scheduling it to run after the current call stack has
	  // cleared.
	  _.defer = _.partial(_.delay, _, 1);
	
	  // Returns a function, that, when invoked, will only be triggered at most once
	  // during a given window of time. Normally, the throttled function will run
	  // as much as it can, without ever going more than once per `wait` duration;
	  // but if you'd like to disable the execution on the leading edge, pass
	  // `{leading: false}`. To disable execution on the trailing edge, ditto.
	  _.throttle = function(func, wait, options) {
	    var timeout, context, args, result;
	    var previous = 0;
	    if (!options) options = {};
	
	    var later = function() {
	      previous = options.leading === false ? 0 : _.now();
	      timeout = null;
	      result = func.apply(context, args);
	      if (!timeout) context = args = null;
	    };
	
	    var throttled = function() {
	      var now = _.now();
	      if (!previous && options.leading === false) previous = now;
	      var remaining = wait - (now - previous);
	      context = this;
	      args = arguments;
	      if (remaining <= 0 || remaining > wait) {
	        if (timeout) {
	          clearTimeout(timeout);
	          timeout = null;
	        }
	        previous = now;
	        result = func.apply(context, args);
	        if (!timeout) context = args = null;
	      } else if (!timeout && options.trailing !== false) {
	        timeout = setTimeout(later, remaining);
	      }
	      return result;
	    };
	
	    throttled.cancel = function() {
	      clearTimeout(timeout);
	      previous = 0;
	      timeout = context = args = null;
	    };
	
	    return throttled;
	  };
	
	  // Returns a function, that, as long as it continues to be invoked, will not
	  // be triggered. The function will be called after it stops being called for
	  // N milliseconds. If `immediate` is passed, trigger the function on the
	  // leading edge, instead of the trailing.
	  _.debounce = function(func, wait, immediate) {
	    var timeout, result;
	
	    var later = function(context, args) {
	      timeout = null;
	      if (args) result = func.apply(context, args);
	    };
	
	    var debounced = restArguments(function(args) {
	      if (timeout) clearTimeout(timeout);
	      if (immediate) {
	        var callNow = !timeout;
	        timeout = setTimeout(later, wait);
	        if (callNow) result = func.apply(this, args);
	      } else {
	        timeout = _.delay(later, wait, this, args);
	      }
	
	      return result;
	    });
	
	    debounced.cancel = function() {
	      clearTimeout(timeout);
	      timeout = null;
	    };
	
	    return debounced;
	  };
	
	  // Returns the first function passed as an argument to the second,
	  // allowing you to adjust arguments, run code before and after, and
	  // conditionally execute the original function.
	  _.wrap = function(func, wrapper) {
	    return _.partial(wrapper, func);
	  };
	
	  // Returns a negated version of the passed-in predicate.
	  _.negate = function(predicate) {
	    return function() {
	      return !predicate.apply(this, arguments);
	    };
	  };
	
	  // Returns a function that is the composition of a list of functions, each
	  // consuming the return value of the function that follows.
	  _.compose = function() {
	    var args = arguments;
	    var start = args.length - 1;
	    return function() {
	      var i = start;
	      var result = args[start].apply(this, arguments);
	      while (i--) result = args[i].call(this, result);
	      return result;
	    };
	  };
	
	  // Returns a function that will only be executed on and after the Nth call.
	  _.after = function(times, func) {
	    return function() {
	      if (--times < 1) {
	        return func.apply(this, arguments);
	      }
	    };
	  };
	
	  // Returns a function that will only be executed up to (but not including) the Nth call.
	  _.before = function(times, func) {
	    var memo;
	    return function() {
	      if (--times > 0) {
	        memo = func.apply(this, arguments);
	      }
	      if (times <= 1) func = null;
	      return memo;
	    };
	  };
	
	  // Returns a function that will be executed at most one time, no matter how
	  // often you call it. Useful for lazy initialization.
	  _.once = _.partial(_.before, 2);
	
	  _.restArguments = restArguments;
	
	  // Object Functions
	  // ----------------
	
	  // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed.
	  var hasEnumBug = !{toString: null}.propertyIsEnumerable('toString');
	  var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString',
	    'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'];
	
	  var collectNonEnumProps = function(obj, keys) {
	    var nonEnumIdx = nonEnumerableProps.length;
	    var constructor = obj.constructor;
	    var proto = _.isFunction(constructor) && constructor.prototype || ObjProto;
	
	    // Constructor is a special case.
	    var prop = 'constructor';
	    if (has(obj, prop) && !_.contains(keys, prop)) keys.push(prop);
	
	    while (nonEnumIdx--) {
	      prop = nonEnumerableProps[nonEnumIdx];
	      if (prop in obj && obj[prop] !== proto[prop] && !_.contains(keys, prop)) {
	        keys.push(prop);
	      }
	    }
	  };
	
	  // Retrieve the names of an object's own properties.
	  // Delegates to **ECMAScript 5**'s native `Object.keys`.
	  _.keys = function(obj) {
	    if (!_.isObject(obj)) return [];
	    if (nativeKeys) return nativeKeys(obj);
	    var keys = [];
	    for (var key in obj) if (has(obj, key)) keys.push(key);
	    // Ahem, IE < 9.
	    if (hasEnumBug) collectNonEnumProps(obj, keys);
	    return keys;
	  };
	
	  // Retrieve all the property names of an object.
	  _.allKeys = function(obj) {
	    if (!_.isObject(obj)) return [];
	    var keys = [];
	    for (var key in obj) keys.push(key);
	    // Ahem, IE < 9.
	    if (hasEnumBug) collectNonEnumProps(obj, keys);
	    return keys;
	  };
	
	  // Retrieve the values of an object's properties.
	  _.values = function(obj) {
	    var keys = _.keys(obj);
	    var length = keys.length;
	    var values = Array(length);
	    for (var i = 0; i < length; i++) {
	      values[i] = obj[keys[i]];
	    }
	    return values;
	  };
	
	  // Returns the results of applying the iteratee to each element of the object.
	  // In contrast to _.map it returns an object.
	  _.mapObject = function(obj, iteratee, context) {
	    iteratee = cb(iteratee, context);
	    var keys = _.keys(obj),
	        length = keys.length,
	        results = {};
	    for (var index = 0; index < length; index++) {
	      var currentKey = keys[index];
	      results[currentKey] = iteratee(obj[currentKey], currentKey, obj);
	    }
	    return results;
	  };
	
	  // Convert an object into a list of `[key, value]` pairs.
	  // The opposite of _.object.
	  _.pairs = function(obj) {
	    var keys = _.keys(obj);
	    var length = keys.length;
	    var pairs = Array(length);
	    for (var i = 0; i < length; i++) {
	      pairs[i] = [keys[i], obj[keys[i]]];
	    }
	    return pairs;
	  };
	
	  // Invert the keys and values of an object. The values must be serializable.
	  _.invert = function(obj) {
	    var result = {};
	    var keys = _.keys(obj);
	    for (var i = 0, length = keys.length; i < length; i++) {
	      result[obj[keys[i]]] = keys[i];
	    }
	    return result;
	  };
	
	  // Return a sorted list of the function names available on the object.
	  // Aliased as `methods`.
	  _.functions = _.methods = function(obj) {
	    var names = [];
	    for (var key in obj) {
	      if (_.isFunction(obj[key])) names.push(key);
	    }
	    return names.sort();
	  };
	
	  // An internal function for creating assigner functions.
	  var createAssigner = function(keysFunc, defaults) {
	    return function(obj) {
	      var length = arguments.length;
	      if (defaults) obj = Object(obj);
	      if (length < 2 || obj == null) return obj;
	      for (var index = 1; index < length; index++) {
	        var source = arguments[index],
	            keys = keysFunc(source),
	            l = keys.length;
	        for (var i = 0; i < l; i++) {
	          var key = keys[i];
	          if (!defaults || obj[key] === void 0) obj[key] = source[key];
	        }
	      }
	      return obj;
	    };
	  };
	
	  // Extend a given object with all the properties in passed-in object(s).
	  _.extend = createAssigner(_.allKeys);
	
	  // Assigns a given object with all the own properties in the passed-in object(s).
	  // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)
	  _.extendOwn = _.assign = createAssigner(_.keys);
	
	  // Returns the first key on an object that passes a predicate test.
	  _.findKey = function(obj, predicate, context) {
	    predicate = cb(predicate, context);
	    var keys = _.keys(obj), key;
	    for (var i = 0, length = keys.length; i < length; i++) {
	      key = keys[i];
	      if (predicate(obj[key], key, obj)) return key;
	    }
	  };
	
	  // Internal pick helper function to determine if `obj` has key `key`.
	  var keyInObj = function(value, key, obj) {
	    return key in obj;
	  };
	
	  // Return a copy of the object only containing the whitelisted properties.
	  _.pick = restArguments(function(obj, keys) {
	    var result = {}, iteratee = keys[0];
	    if (obj == null) return result;
	    if (_.isFunction(iteratee)) {
	      if (keys.length > 1) iteratee = optimizeCb(iteratee, keys[1]);
	      keys = _.allKeys(obj);
	    } else {
	      iteratee = keyInObj;
	      keys = flatten(keys, false, false);
	      obj = Object(obj);
	    }
	    for (var i = 0, length = keys.length; i < length; i++) {
	      var key = keys[i];
	      var value = obj[key];
	      if (iteratee(value, key, obj)) result[key] = value;
	    }
	    return result;
	  });
	
	  // Return a copy of the object without the blacklisted properties.
	  _.omit = restArguments(function(obj, keys) {
	    var iteratee = keys[0], context;
	    if (_.isFunction(iteratee)) {
	      iteratee = _.negate(iteratee);
	      if (keys.length > 1) context = keys[1];
	    } else {
	      keys = _.map(flatten(keys, false, false), String);
	      iteratee = function(value, key) {
	        return !_.contains(keys, key);
	      };
	    }
	    return _.pick(obj, iteratee, context);
	  });
	
	  // Fill in a given object with default properties.
	  _.defaults = createAssigner(_.allKeys, true);
	
	  // Creates an object that inherits from the given prototype object.
	  // If additional properties are provided then they will be added to the
	  // created object.
	  _.create = function(prototype, props) {
	    var result = baseCreate(prototype);
	    if (props) _.extendOwn(result, props);
	    return result;
	  };
	
	  // Create a (shallow-cloned) duplicate of an object.
	  _.clone = function(obj) {
	    if (!_.isObject(obj)) return obj;
	    return _.isArray(obj) ? obj.slice() : _.extend({}, obj);
	  };
	
	  // Invokes interceptor with the obj, and then returns obj.
	  // The primary purpose of this method is to "tap into" a method chain, in
	  // order to perform operations on intermediate results within the chain.
	  _.tap = function(obj, interceptor) {
	    interceptor(obj);
	    return obj;
	  };
	
	  // Returns whether an object has a given set of `key:value` pairs.
	  _.isMatch = function(object, attrs) {
	    var keys = _.keys(attrs), length = keys.length;
	    if (object == null) return !length;
	    var obj = Object(object);
	    for (var i = 0; i < length; i++) {
	      var key = keys[i];
	      if (attrs[key] !== obj[key] || !(key in obj)) return false;
	    }
	    return true;
	  };
	
	
	  // Internal recursive comparison function for `isEqual`.
	  var eq, deepEq;
	  eq = function(a, b, aStack, bStack) {
	    // Identical objects are equal. `0 === -0`, but they aren't identical.
	    // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal).
	    if (a === b) return a !== 0 || 1 / a === 1 / b;
	    // `null` or `undefined` only equal to itself (strict comparison).
	    if (a == null || b == null) return false;
	    // `NaN`s are equivalent, but non-reflexive.
	    if (a !== a) return b !== b;
	    // Exhaust primitive checks
	    var type = typeof a;
	    if (type !== 'function' && type !== 'object' && typeof b != 'object') return false;
	    return deepEq(a, b, aStack, bStack);
	  };
	
	  // Internal recursive comparison function for `isEqual`.
	  deepEq = function(a, b, aStack, bStack) {
	    // Unwrap any wrapped objects.
	    if (a instanceof _) a = a._wrapped;
	    if (b instanceof _) b = b._wrapped;
	    // Compare `[[Class]]` names.
	    var className = toString.call(a);
	    if (className !== toString.call(b)) return false;
	    switch (className) {
	      // Strings, numbers, regular expressions, dates, and booleans are compared by value.
	      case '[object RegExp]':
	      // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')
	      case '[object String]':
	        // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is
	        // equivalent to `new String("5")`.
	        return '' + a === '' + b;
	      case '[object Number]':
	        // `NaN`s are equivalent, but non-reflexive.
	        // Object(NaN) is equivalent to NaN.
	        if (+a !== +a) return +b !== +b;
	        // An `egal` comparison is performed for other numeric values.
	        return +a === 0 ? 1 / +a === 1 / b : +a === +b;
	      case '[object Date]':
	      case '[object Boolean]':
	        // Coerce dates and booleans to numeric primitive values. Dates are compared by their
	        // millisecond representations. Note that invalid dates with millisecond representations
	        // of `NaN` are not equivalent.
	        return +a === +b;
	      case '[object Symbol]':
	        return SymbolProto.valueOf.call(a) === SymbolProto.valueOf.call(b);
	    }
	
	    var areArrays = className === '[object Array]';
	    if (!areArrays) {
	      if (typeof a != 'object' || typeof b != 'object') return false;
	
	      // Objects with different constructors are not equivalent, but `Object`s or `Array`s
	      // from different frames are.
	      var aCtor = a.constructor, bCtor = b.constructor;
	      if (aCtor !== bCtor && !(_.isFunction(aCtor) && aCtor instanceof aCtor &&
	                               _.isFunction(bCtor) && bCtor instanceof bCtor)
	                          && ('constructor' in a && 'constructor' in b)) {
	        return false;
	      }
	    }
	    // Assume equality for cyclic structures. The algorithm for detecting cyclic
	    // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.
	
	    // Initializing stack of traversed objects.
	    // It's done here since we only need them for objects and arrays comparison.
	    aStack = aStack || [];
	    bStack = bStack || [];
	    var length = aStack.length;
	    while (length--) {
	      // Linear search. Performance is inversely proportional to the number of
	      // unique nested structures.
	      if (aStack[length] === a) return bStack[length] === b;
	    }
	
	    // Add the first object to the stack of traversed objects.
	    aStack.push(a);
	    bStack.push(b);
	
	    // Recursively compare objects and arrays.
	    if (areArrays) {
	      // Compare array lengths to determine if a deep comparison is necessary.
	      length = a.length;
	      if (length !== b.length) return false;
	      // Deep compare the contents, ignoring non-numeric properties.
	      while (length--) {
	        if (!eq(a[length], b[length], aStack, bStack)) return false;
	      }
	    } else {
	      // Deep compare objects.
	      var keys = _.keys(a), key;
	      length = keys.length;
	      // Ensure that both objects contain the same number of properties before comparing deep equality.
	      if (_.keys(b).length !== length) return false;
	      while (length--) {
	        // Deep compare each member
	        key = keys[length];
	        if (!(has(b, key) && eq(a[key], b[key], aStack, bStack))) return false;
	      }
	    }
	    // Remove the first object from the stack of traversed objects.
	    aStack.pop();
	    bStack.pop();
	    return true;
	  };
	
	  // Perform a deep comparison to check if two objects are equal.
	  _.isEqual = function(a, b) {
	    return eq(a, b);
	  };
	
	  // Is a given array, string, or object empty?
	  // An "empty" object has no enumerable own-properties.
	  _.isEmpty = function(obj) {
	    if (obj == null) return true;
	    if (isArrayLike(obj) && (_.isArray(obj) || _.isString(obj) || _.isArguments(obj))) return obj.length === 0;
	    return _.keys(obj).length === 0;
	  };
	
	  // Is a given value a DOM element?
	  _.isElement = function(obj) {
	    return !!(obj && obj.nodeType === 1);
	  };
	
	  // Is a given value an array?
	  // Delegates to ECMA5's native Array.isArray
	  _.isArray = nativeIsArray || function(obj) {
	    return toString.call(obj) === '[object Array]';
	  };
	
	  // Is a given variable an object?
	  _.isObject = function(obj) {
	    var type = typeof obj;
	    return type === 'function' || type === 'object' && !!obj;
	  };
	
	  // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp, isError, isMap, isWeakMap, isSet, isWeakSet.
	  _.each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp', 'Error', 'Symbol', 'Map', 'WeakMap', 'Set', 'WeakSet'], function(name) {
	    _['is' + name] = function(obj) {
	      return toString.call(obj) === '[object ' + name + ']';
	    };
	  });
	
	  // Define a fallback version of the method in browsers (ahem, IE < 9), where
	  // there isn't any inspectable "Arguments" type.
	  if (!_.isArguments(arguments)) {
	    _.isArguments = function(obj) {
	      return has(obj, 'callee');
	    };
	  }
	
	  // Optimize `isFunction` if appropriate. Work around some typeof bugs in old v8,
	  // IE 11 (#1621), Safari 8 (#1929), and PhantomJS (#2236).
	  var nodelist = root.document && root.document.childNodes;
	  if (typeof /./ != 'function' && typeof Int8Array != 'object' && typeof nodelist != 'function') {
	    _.isFunction = function(obj) {
	      return typeof obj == 'function' || false;
	    };
	  }
	
	  // Is a given object a finite number?
	  _.isFinite = function(obj) {
	    return !_.isSymbol(obj) && isFinite(obj) && !isNaN(parseFloat(obj));
	  };
	
	  // Is the given value `NaN`?
	  _.isNaN = function(obj) {
	    return _.isNumber(obj) && isNaN(obj);
	  };
	
	  // Is a given value a boolean?
	  _.isBoolean = function(obj) {
	    return obj === true || obj === false || toString.call(obj) === '[object Boolean]';
	  };
	
	  // Is a given value equal to null?
	  _.isNull = function(obj) {
	    return obj === null;
	  };
	
	  // Is a given variable undefined?
	  _.isUndefined = function(obj) {
	    return obj === void 0;
	  };
	
	  // Shortcut function for checking if an object has a given property directly
	  // on itself (in other words, not on a prototype).
	  _.has = function(obj, path) {
	    if (!_.isArray(path)) {
	      return has(obj, path);
	    }
	    var length = path.length;
	    for (var i = 0; i < length; i++) {
	      var key = path[i];
	      if (obj == null || !hasOwnProperty.call(obj, key)) {
	        return false;
	      }
	      obj = obj[key];
	    }
	    return !!length;
	  };
	
	  // Utility Functions
	  // -----------------
	
	  // Run Underscore.js in *noConflict* mode, returning the `_` variable to its
	  // previous owner. Returns a reference to the Underscore object.
	  _.noConflict = function() {
	    root._ = previousUnderscore;
	    return this;
	  };
	
	  // Keep the identity function around for default iteratees.
	  _.identity = function(value) {
	    return value;
	  };
	
	  // Predicate-generating functions. Often useful outside of Underscore.
	  _.constant = function(value) {
	    return function() {
	      return value;
	    };
	  };
	
	  _.noop = function(){};
	
	  // Creates a function that, when passed an object, will traverse that object’s
	  // properties down the given `path`, specified as an array of keys or indexes.
	  _.property = function(path) {
	    if (!_.isArray(path)) {
	      return shallowProperty(path);
	    }
	    return function(obj) {
	      return deepGet(obj, path);
	    };
	  };
	
	  // Generates a function for a given object that returns a given property.
	  _.propertyOf = function(obj) {
	    if (obj == null) {
	      return function(){};
	    }
	    return function(path) {
	      return !_.isArray(path) ? obj[path] : deepGet(obj, path);
	    };
	  };
	
	  // Returns a predicate for checking whether an object has a given set of
	  // `key:value` pairs.
	  _.matcher = _.matches = function(attrs) {
	    attrs = _.extendOwn({}, attrs);
	    return function(obj) {
	      return _.isMatch(obj, attrs);
	    };
	  };
	
	  // Run a function **n** times.
	  _.times = function(n, iteratee, context) {
	    var accum = Array(Math.max(0, n));
	    iteratee = optimizeCb(iteratee, context, 1);
	    for (var i = 0; i < n; i++) accum[i] = iteratee(i);
	    return accum;
	  };
	
	  // Return a random integer between min and max (inclusive).
	  _.random = function(min, max) {
	    if (max == null) {
	      max = min;
	      min = 0;
	    }
	    return min + Math.floor(Math.random() * (max - min + 1));
	  };
	
	  // A (possibly faster) way to get the current timestamp as an integer.
	  _.now = Date.now || function() {
	    return new Date().getTime();
	  };
	
	  // List of HTML entities for escaping.
	  var escapeMap = {
	    '&': '&amp;',
	    '<': '&lt;',
	    '>': '&gt;',
	    '"': '&quot;',
	    "'": '&#x27;',
	    '`': '&#x60;'
	  };
	  var unescapeMap = _.invert(escapeMap);
	
	  // Functions for escaping and unescaping strings to/from HTML interpolation.
	  var createEscaper = function(map) {
	    var escaper = function(match) {
	      return map[match];
	    };
	    // Regexes for identifying a key that needs to be escaped.
	    var source = '(?:' + _.keys(map).join('|') + ')';
	    var testRegexp = RegExp(source);
	    var replaceRegexp = RegExp(source, 'g');
	    return function(string) {
	      string = string == null ? '' : '' + string;
	      return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;
	    };
	  };
	  _.escape = createEscaper(escapeMap);
	  _.unescape = createEscaper(unescapeMap);
	
	  // Traverses the children of `obj` along `path`. If a child is a function, it
	  // is invoked with its parent as context. Returns the value of the final
	  // child, or `fallback` if any child is undefined.
	  _.result = function(obj, path, fallback) {
	    if (!_.isArray(path)) path = [path];
	    var length = path.length;
	    if (!length) {
	      return _.isFunction(fallback) ? fallback.call(obj) : fallback;
	    }
	    for (var i = 0; i < length; i++) {
	      var prop = obj == null ? void 0 : obj[path[i]];
	      if (prop === void 0) {
	        prop = fallback;
	        i = length; // Ensure we don't continue iterating.
	      }
	      obj = _.isFunction(prop) ? prop.call(obj) : prop;
	    }
	    return obj;
	  };
	
	  // Generate a unique integer id (unique within the entire client session).
	  // Useful for temporary DOM ids.
	  var idCounter = 0;
	  _.uniqueId = function(prefix) {
	    var id = ++idCounter + '';
	    return prefix ? prefix + id : id;
	  };
	
	  // By default, Underscore uses ERB-style template delimiters, change the
	  // following template settings to use alternative delimiters.
	  _.templateSettings = {
	    evaluate: /<%([\s\S]+?)%>/g,
	    interpolate: /<%=([\s\S]+?)%>/g,
	    escape: /<%-([\s\S]+?)%>/g
	  };
	
	  // When customizing `templateSettings`, if you don't want to define an
	  // interpolation, evaluation or escaping regex, we need one that is
	  // guaranteed not to match.
	  var noMatch = /(.)^/;
	
	  // Certain characters need to be escaped so that they can be put into a
	  // string literal.
	  var escapes = {
	    "'": "'",
	    '\\': '\\',
	    '\r': 'r',
	    '\n': 'n',
	    '\u2028': 'u2028',
	    '\u2029': 'u2029'
	  };
	
	  var escapeRegExp = /\\|'|\r|\n|\u2028|\u2029/g;
	
	  var escapeChar = function(match) {
	    return '\\' + escapes[match];
	  };
	
	  // JavaScript micro-templating, similar to John Resig's implementation.
	  // Underscore templating handles arbitrary delimiters, preserves whitespace,
	  // and correctly escapes quotes within interpolated code.
	  // NB: `oldSettings` only exists for backwards compatibility.
	  _.template = function(text, settings, oldSettings) {
	    if (!settings && oldSettings) settings = oldSettings;
	    settings = _.defaults({}, settings, _.templateSettings);
	
	    // Combine delimiters into one regular expression via alternation.
	    var matcher = RegExp([
	      (settings.escape || noMatch).source,
	      (settings.interpolate || noMatch).source,
	      (settings.evaluate || noMatch).source
	    ].join('|') + '|$', 'g');
	
	    // Compile the template source, escaping string literals appropriately.
	    var index = 0;
	    var source = "__p+='";
	    text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {
	      source += text.slice(index, offset).replace(escapeRegExp, escapeChar);
	      index = offset + match.length;
	
	      if (escape) {
	        source += "'+\n((__t=(" + escape + "))==null?'':_.escape(__t))+\n'";
	      } else if (interpolate) {
	        source += "'+\n((__t=(" + interpolate + "))==null?'':__t)+\n'";
	      } else if (evaluate) {
	        source += "';\n" + evaluate + "\n__p+='";
	      }
	
	      // Adobe VMs need the match returned to produce the correct offset.
	      return match;
	    });
	    source += "';\n";
	
	    // If a variable is not specified, place data values in local scope.
	    if (!settings.variable) source = 'with(obj||{}){\n' + source + '}\n';
	
	    source = "var __t,__p='',__j=Array.prototype.join," +
	      "print=function(){__p+=__j.call(arguments,'');};\n" +
	      source + 'return __p;\n';
	
	    var render;
	    try {
	      render = new Function(settings.variable || 'obj', '_', source);
	    } catch (e) {
	      e.source = source;
	      throw e;
	    }
	
	    var template = function(data) {
	      return render.call(this, data, _);
	    };
	
	    // Provide the compiled source as a convenience for precompilation.
	    var argument = settings.variable || 'obj';
	    template.source = 'function(' + argument + '){\n' + source + '}';
	
	    return template;
	  };
	
	  // Add a "chain" function. Start chaining a wrapped Underscore object.
	  _.chain = function(obj) {
	    var instance = _(obj);
	    instance._chain = true;
	    return instance;
	  };
	
	  // OOP
	  // ---------------
	  // If Underscore is called as a function, it returns a wrapped object that
	  // can be used OO-style. This wrapper holds altered versions of all the
	  // underscore functions. Wrapped objects may be chained.
	
	  // Helper function to continue chaining intermediate results.
	  var chainResult = function(instance, obj) {
	    return instance._chain ? _(obj).chain() : obj;
	  };
	
	  // Add your own custom functions to the Underscore object.
	  _.mixin = function(obj) {
	    _.each(_.functions(obj), function(name) {
	      var func = _[name] = obj[name];
	      _.prototype[name] = function() {
	        var args = [this._wrapped];
	        push.apply(args, arguments);
	        return chainResult(this, func.apply(_, args));
	      };
	    });
	    return _;
	  };
	
	  // Add all of the Underscore functions to the wrapper object.
	  _.mixin(_);
	
	  // Add all mutator Array functions to the wrapper.
	  _.each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {
	    var method = ArrayProto[name];
	    _.prototype[name] = function() {
	      var obj = this._wrapped;
	      method.apply(obj, arguments);
	      if ((name === 'shift' || name === 'splice') && obj.length === 0) delete obj[0];
	      return chainResult(this, obj);
	    };
	  });
	
	  // Add all accessor Array functions to the wrapper.
	  _.each(['concat', 'join', 'slice'], function(name) {
	    var method = ArrayProto[name];
	    _.prototype[name] = function() {
	      return chainResult(this, method.apply(this._wrapped, arguments));
	    };
	  });
	
	  // Extracts the result from a wrapped and chained object.
	  _.prototype.value = function() {
	    return this._wrapped;
	  };
	
	  // Provide unwrapping proxy for some methods used in engine operations
	  // such as arithmetic and JSON stringification.
	  _.prototype.valueOf = _.prototype.toJSON = _.prototype.value;
	
	  _.prototype.toString = function() {
	    return String(this._wrapped);
	  };
	
	  // AMD registration happens at the end for compatibility with AMD loaders
	  // that may not enforce next-turn semantics on modules. Even though general
	  // practice for AMD registration is to be anonymous, underscore registers
	  // as a named module because, like jQuery, it is a base library that is
	  // popular enough to be bundled in a third party lib, but not be part of
	  // an AMD load request. Those cases could generate an error when an
	  // anonymous define() is called outside of a loader request.
	  if (true) {
	    !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function() {
	      return _;
	    }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
	  }
	}());
	
	/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()), __webpack_require__(9)(module)))

/***/ }),
/* 9 */
/***/ (function(module, exports) {

	module.exports = function(module) {
		if(!module.webpackPolyfill) {
			module.deprecate = function() {};
			module.paths = [];
			// module.parent = undefined by default
			module.children = [];
			module.webpackPolyfill = 1;
		}
		return module;
	}


/***/ }),
/* 10 */
/***/ (function(module, exports, __webpack_require__) {

	var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
	 * jQuery UI Draggable 1.12.1
	 * http://jqueryui.com
	 *
	 * Copyright jQuery Foundation and other contributors
	 * Released under the MIT license.
	 * http://jquery.org/license
	 */
	
	//>>label: Draggable
	//>>group: Interactions
	//>>description: Enables dragging functionality for any element.
	//>>docs: http://api.jqueryui.com/draggable/
	//>>demos: http://jqueryui.com/draggable/
	//>>css.structure: ../../themes/base/draggable.css
	
	( function( factory ) {
		if ( true ) {
	
			// AMD. Register as an anonymous module.
			!(__WEBPACK_AMD_DEFINE_ARRAY__ = [
				__webpack_require__(7),
				__webpack_require__(11),
				__webpack_require__(15),
				__webpack_require__(16),
				__webpack_require__(19),
				__webpack_require__(17),
				__webpack_require__(18),
				__webpack_require__(13),
				__webpack_require__(14)
			], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
		} else {
	
			// Browser globals
			factory( jQuery );
		}
	}( function( $ ) {
	
	$.widget( "ui.draggable", $.ui.mouse, {
		version: "1.12.1",
		widgetEventPrefix: "drag",
		options: {
			addClasses: true,
			appendTo: "parent",
			axis: false,
			connectToSortable: false,
			containment: false,
			cursor: "auto",
			cursorAt: false,
			grid: false,
			handle: false,
			helper: "original",
			iframeFix: false,
			opacity: false,
			refreshPositions: false,
			revert: false,
			revertDuration: 500,
			scope: "default",
			scroll: true,
			scrollSensitivity: 20,
			scrollSpeed: 20,
			snap: false,
			snapMode: "both",
			snapTolerance: 20,
			stack: false,
			zIndex: false,
	
			// Callbacks
			drag: null,
			start: null,
			stop: null
		},
		_create: function() {
	
			if ( this.options.helper === "original" ) {
				this._setPositionRelative();
			}
			if ( this.options.addClasses ) {
				this._addClass( "ui-draggable" );
			}
			this._setHandleClassName();
	
			this._mouseInit();
		},
	
		_setOption: function( key, value ) {
			this._super( key, value );
			if ( key === "handle" ) {
				this._removeHandleClassName();
				this._setHandleClassName();
			}
		},
	
		_destroy: function() {
			if ( ( this.helper || this.element ).is( ".ui-draggable-dragging" ) ) {
				this.destroyOnClear = true;
				return;
			}
			this._removeHandleClassName();
			this._mouseDestroy();
		},
	
		_mouseCapture: function( event ) {
			var o = this.options;
	
			// Among others, prevent a drag on a resizable-handle
			if ( this.helper || o.disabled ||
					$( event.target ).closest( ".ui-resizable-handle" ).length > 0 ) {
				return false;
			}
	
			//Quit if we're not on a valid handle
			this.handle = this._getHandle( event );
			if ( !this.handle ) {
				return false;
			}
	
			this._blurActiveElement( event );
	
			this._blockFrames( o.iframeFix === true ? "iframe" : o.iframeFix );
	
			return true;
	
		},
	
		_blockFrames: function( selector ) {
			this.iframeBlocks = this.document.find( selector ).map( function() {
				var iframe = $( this );
	
				return $( "<div>" )
					.css( "position", "absolute" )
					.appendTo( iframe.parent() )
					.outerWidth( iframe.outerWidth() )
					.outerHeight( iframe.outerHeight() )
					.offset( iframe.offset() )[ 0 ];
			} );
		},
	
		_unblockFrames: function() {
			if ( this.iframeBlocks ) {
				this.iframeBlocks.remove();
				delete this.iframeBlocks;
			}
		},
	
		_blurActiveElement: function( event ) {
			var activeElement = $.ui.safeActiveElement( this.document[ 0 ] ),
				target = $( event.target );
	
			// Don't blur if the event occurred on an element that is within
			// the currently focused element
			// See #10527, #12472
			if ( target.closest( activeElement ).length ) {
				return;
			}
	
			// Blur any element that currently has focus, see #4261
			$.ui.safeBlur( activeElement );
		},
	
		_mouseStart: function( event ) {
	
			var o = this.options;
	
			//Create and append the visible helper
			this.helper = this._createHelper( event );
	
			this._addClass( this.helper, "ui-draggable-dragging" );
	
			//Cache the helper size
			this._cacheHelperProportions();
	
			//If ddmanager is used for droppables, set the global draggable
			if ( $.ui.ddmanager ) {
				$.ui.ddmanager.current = this;
			}
	
			/*
			 * - Position generation -
			 * This block generates everything position related - it's the core of draggables.
			 */
	
			//Cache the margins of the original element
			this._cacheMargins();
	
			//Store the helper's css position
			this.cssPosition = this.helper.css( "position" );
			this.scrollParent = this.helper.scrollParent( true );
			this.offsetParent = this.helper.offsetParent();
			this.hasFixedAncestor = this.helper.parents().filter( function() {
					return $( this ).css( "position" ) === "fixed";
				} ).length > 0;
	
			//The element's absolute position on the page minus margins
			this.positionAbs = this.element.offset();
			this._refreshOffsets( event );
	
			//Generate the original position
			this.originalPosition = this.position = this._generatePosition( event, false );
			this.originalPageX = event.pageX;
			this.originalPageY = event.pageY;
	
			//Adjust the mouse offset relative to the helper if "cursorAt" is supplied
			( o.cursorAt && this._adjustOffsetFromHelper( o.cursorAt ) );
	
			//Set a containment if given in the options
			this._setContainment();
	
			//Trigger event + callbacks
			if ( this._trigger( "start", event ) === false ) {
				this._clear();
				return false;
			}
	
			//Recache the helper size
			this._cacheHelperProportions();
	
			//Prepare the droppable offsets
			if ( $.ui.ddmanager && !o.dropBehaviour ) {
				$.ui.ddmanager.prepareOffsets( this, event );
			}
	
			// Execute the drag once - this causes the helper not to be visible before getting its
			// correct position
			this._mouseDrag( event, true );
	
			// If the ddmanager is used for droppables, inform the manager that dragging has started
			// (see #5003)
			if ( $.ui.ddmanager ) {
				$.ui.ddmanager.dragStart( this, event );
			}
	
			return true;
		},
	
		_refreshOffsets: function( event ) {
			this.offset = {
				top: this.positionAbs.top - this.margins.top,
				left: this.positionAbs.left - this.margins.left,
				scroll: false,
				parent: this._getParentOffset(),
				relative: this._getRelativeOffset()
			};
	
			this.offset.click = {
				left: event.pageX - this.offset.left,
				top: event.pageY - this.offset.top
			};
		},
	
		_mouseDrag: function( event, noPropagation ) {
	
			// reset any necessary cached properties (see #5009)
			if ( this.hasFixedAncestor ) {
				this.offset.parent = this._getParentOffset();
			}
	
			//Compute the helpers position
			this.position = this._generatePosition( event, true );
			this.positionAbs = this._convertPositionTo( "absolute" );
	
			//Call plugins and callbacks and use the resulting position if something is returned
			if ( !noPropagation ) {
				var ui = this._uiHash();
				if ( this._trigger( "drag", event, ui ) === false ) {
					this._mouseUp( new $.Event( "mouseup", event ) );
					return false;
				}
				this.position = ui.position;
			}
	
			this.helper[ 0 ].style.left = this.position.left + "px";
			this.helper[ 0 ].style.top = this.position.top + "px";
	
			if ( $.ui.ddmanager ) {
				$.ui.ddmanager.drag( this, event );
			}
	
			return false;
		},
	
		_mouseStop: function( event ) {
	
			//If we are using droppables, inform the manager about the drop
			var that = this,
				dropped = false;
			if ( $.ui.ddmanager && !this.options.dropBehaviour ) {
				dropped = $.ui.ddmanager.drop( this, event );
			}
	
			//if a drop comes from outside (a sortable)
			if ( this.dropped ) {
				dropped = this.dropped;
				this.dropped = false;
			}
	
			if ( ( this.options.revert === "invalid" && !dropped ) ||
					( this.options.revert === "valid" && dropped ) ||
					this.options.revert === true || ( $.isFunction( this.options.revert ) &&
					this.options.revert.call( this.element, dropped ) )
			) {
				$( this.helper ).animate(
					this.originalPosition,
					parseInt( this.options.revertDuration, 10 ),
					function() {
						if ( that._trigger( "stop", event ) !== false ) {
							that._clear();
						}
					}
				);
			} else {
				if ( this._trigger( "stop", event ) !== false ) {
					this._clear();
				}
			}
	
			return false;
		},
	
		_mouseUp: function( event ) {
			this._unblockFrames();
	
			// If the ddmanager is used for droppables, inform the manager that dragging has stopped
			// (see #5003)
			if ( $.ui.ddmanager ) {
				$.ui.ddmanager.dragStop( this, event );
			}
	
			// Only need to focus if the event occurred on the draggable itself, see #10527
			if ( this.handleElement.is( event.target ) ) {
	
				// The interaction is over; whether or not the click resulted in a drag,
				// focus the element
				this.element.trigger( "focus" );
			}
	
			return $.ui.mouse.prototype._mouseUp.call( this, event );
		},
	
		cancel: function() {
	
			if ( this.helper.is( ".ui-draggable-dragging" ) ) {
				this._mouseUp( new $.Event( "mouseup", { target: this.element[ 0 ] } ) );
			} else {
				this._clear();
			}
	
			return this;
	
		},
	
		_getHandle: function( event ) {
			return this.options.handle ?
				!!$( event.target ).closest( this.element.find( this.options.handle ) ).length :
				true;
		},
	
		_setHandleClassName: function() {
			this.handleElement = this.options.handle ?
				this.element.find( this.options.handle ) : this.element;
			this._addClass( this.handleElement, "ui-draggable-handle" );
		},
	
		_removeHandleClassName: function() {
			this._removeClass( this.handleElement, "ui-draggable-handle" );
		},
	
		_createHelper: function( event ) {
	
			var o = this.options,
				helperIsFunction = $.isFunction( o.helper ),
				helper = helperIsFunction ?
					$( o.helper.apply( this.element[ 0 ], [ event ] ) ) :
					( o.helper === "clone" ?
						this.element.clone().removeAttr( "id" ) :
						this.element );
	
			if ( !helper.parents( "body" ).length ) {
				helper.appendTo( ( o.appendTo === "parent" ?
					this.element[ 0 ].parentNode :
					o.appendTo ) );
			}
	
			// Http://bugs.jqueryui.com/ticket/9446
			// a helper function can return the original element
			// which wouldn't have been set to relative in _create
			if ( helperIsFunction && helper[ 0 ] === this.element[ 0 ] ) {
				this._setPositionRelative();
			}
	
			if ( helper[ 0 ] !== this.element[ 0 ] &&
					!( /(fixed|absolute)/ ).test( helper.css( "position" ) ) ) {
				helper.css( "position", "absolute" );
			}
	
			return helper;
	
		},
	
		_setPositionRelative: function() {
			if ( !( /^(?:r|a|f)/ ).test( this.element.css( "position" ) ) ) {
				this.element[ 0 ].style.position = "relative";
			}
		},
	
		_adjustOffsetFromHelper: function( obj ) {
			if ( typeof obj === "string" ) {
				obj = obj.split( " " );
			}
			if ( $.isArray( obj ) ) {
				obj = { left: +obj[ 0 ], top: +obj[ 1 ] || 0 };
			}
			if ( "left" in obj ) {
				this.offset.click.left = obj.left + this.margins.left;
			}
			if ( "right" in obj ) {
				this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
			}
			if ( "top" in obj ) {
				this.offset.click.top = obj.top + this.margins.top;
			}
			if ( "bottom" in obj ) {
				this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
			}
		},
	
		_isRootNode: function( element ) {
			return ( /(html|body)/i ).test( element.tagName ) || element === this.document[ 0 ];
		},
	
		_getParentOffset: function() {
	
			//Get the offsetParent and cache its position
			var po = this.offsetParent.offset(),
				document = this.document[ 0 ];
	
			// This is a special case where we need to modify a offset calculated on start, since the
			// following happened:
			// 1. The position of the helper is absolute, so it's position is calculated based on the
			// next positioned parent
			// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't
			// the document, which means that the scroll is included in the initial calculation of the
			// offset of the parent, and never recalculated upon drag
			if ( this.cssPosition === "absolute" && this.scrollParent[ 0 ] !== document &&
					$.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) {
				po.left += this.scrollParent.scrollLeft();
				po.top += this.scrollParent.scrollTop();
			}
	
			if ( this._isRootNode( this.offsetParent[ 0 ] ) ) {
				po = { top: 0, left: 0 };
			}
	
			return {
				top: po.top + ( parseInt( this.offsetParent.css( "borderTopWidth" ), 10 ) || 0 ),
				left: po.left + ( parseInt( this.offsetParent.css( "borderLeftWidth" ), 10 ) || 0 )
			};
	
		},
	
		_getRelativeOffset: function() {
			if ( this.cssPosition !== "relative" ) {
				return { top: 0, left: 0 };
			}
	
			var p = this.element.position(),
				scrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] );
	
			return {
				top: p.top - ( parseInt( this.helper.css( "top" ), 10 ) || 0 ) +
					( !scrollIsRootNode ? this.scrollParent.scrollTop() : 0 ),
				left: p.left - ( parseInt( this.helper.css( "left" ), 10 ) || 0 ) +
					( !scrollIsRootNode ? this.scrollParent.scrollLeft() : 0 )
			};
	
		},
	
		_cacheMargins: function() {
			this.margins = {
				left: ( parseInt( this.element.css( "marginLeft" ), 10 ) || 0 ),
				top: ( parseInt( this.element.css( "marginTop" ), 10 ) || 0 ),
				right: ( parseInt( this.element.css( "marginRight" ), 10 ) || 0 ),
				bottom: ( parseInt( this.element.css( "marginBottom" ), 10 ) || 0 )
			};
		},
	
		_cacheHelperProportions: function() {
			this.helperProportions = {
				width: this.helper.outerWidth(),
				height: this.helper.outerHeight()
			};
		},
	
		_setContainment: function() {
	
			var isUserScrollable, c, ce,
				o = this.options,
				document = this.document[ 0 ];
	
			this.relativeContainer = null;
	
			if ( !o.containment ) {
				this.containment = null;
				return;
			}
	
			if ( o.containment === "window" ) {
				this.containment = [
					$( window ).scrollLeft() - this.offset.relative.left - this.offset.parent.left,
					$( window ).scrollTop() - this.offset.relative.top - this.offset.parent.top,
					$( window ).scrollLeft() + $( window ).width() -
						this.helperProportions.width - this.margins.left,
					$( window ).scrollTop() +
						( $( window ).height() || document.body.parentNode.scrollHeight ) -
						this.helperProportions.height - this.margins.top
				];
				return;
			}
	
			if ( o.containment === "document" ) {
				this.containment = [
					0,
					0,
					$( document ).width() - this.helperProportions.width - this.margins.left,
					( $( document ).height() || document.body.parentNode.scrollHeight ) -
						this.helperProportions.height - this.margins.top
				];
				return;
			}
	
			if ( o.containment.constructor === Array ) {
				this.containment = o.containment;
				return;
			}
	
			if ( o.containment === "parent" ) {
				o.containment = this.helper[ 0 ].parentNode;
			}
	
			c = $( o.containment );
			ce = c[ 0 ];
	
			if ( !ce ) {
				return;
			}
	
			isUserScrollable = /(scroll|auto)/.test( c.css( "overflow" ) );
	
			this.containment = [
				( parseInt( c.css( "borderLeftWidth" ), 10 ) || 0 ) +
					( parseInt( c.css( "paddingLeft" ), 10 ) || 0 ),
				( parseInt( c.css( "borderTopWidth" ), 10 ) || 0 ) +
					( parseInt( c.css( "paddingTop" ), 10 ) || 0 ),
				( isUserScrollable ? Math.max( ce.scrollWidth, ce.offsetWidth ) : ce.offsetWidth ) -
					( parseInt( c.css( "borderRightWidth" ), 10 ) || 0 ) -
					( parseInt( c.css( "paddingRight" ), 10 ) || 0 ) -
					this.helperProportions.width -
					this.margins.left -
					this.margins.right,
				( isUserScrollable ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) -
					( parseInt( c.css( "borderBottomWidth" ), 10 ) || 0 ) -
					( parseInt( c.css( "paddingBottom" ), 10 ) || 0 ) -
					this.helperProportions.height -
					this.margins.top -
					this.margins.bottom
			];
			this.relativeContainer = c;
		},
	
		_convertPositionTo: function( d, pos ) {
	
			if ( !pos ) {
				pos = this.position;
			}
	
			var mod = d === "absolute" ? 1 : -1,
				scrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] );
	
			return {
				top: (
	
					// The absolute mouse position
					pos.top	+
	
					// Only for relative positioned nodes: Relative offset from element to offset parent
					this.offset.relative.top * mod +
	
					// The offsetParent's offset without borders (offset + border)
					this.offset.parent.top * mod -
					( ( this.cssPosition === "fixed" ?
						-this.offset.scroll.top :
						( scrollIsRootNode ? 0 : this.offset.scroll.top ) ) * mod )
				),
				left: (
	
					// The absolute mouse position
					pos.left +
	
					// Only for relative positioned nodes: Relative offset from element to offset parent
					this.offset.relative.left * mod +
	
					// The offsetParent's offset without borders (offset + border)
					this.offset.parent.left * mod	-
					( ( this.cssPosition === "fixed" ?
						-this.offset.scroll.left :
						( scrollIsRootNode ? 0 : this.offset.scroll.left ) ) * mod )
				)
			};
	
		},
	
		_generatePosition: function( event, constrainPosition ) {
	
			var containment, co, top, left,
				o = this.options,
				scrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] ),
				pageX = event.pageX,
				pageY = event.pageY;
	
			// Cache the scroll
			if ( !scrollIsRootNode || !this.offset.scroll ) {
				this.offset.scroll = {
					top: this.scrollParent.scrollTop(),
					left: this.scrollParent.scrollLeft()
				};
			}
	
			/*
			 * - Position constraining -
			 * Constrain the position to a mix of grid, containment.
			 */
	
			// If we are not dragging yet, we won't check for options
			if ( constrainPosition ) {
				if ( this.containment ) {
					if ( this.relativeContainer ) {
						co = this.relativeContainer.offset();
						containment = [
							this.containment[ 0 ] + co.left,
							this.containment[ 1 ] + co.top,
							this.containment[ 2 ] + co.left,
							this.containment[ 3 ] + co.top
						];
					} else {
						containment = this.containment;
					}
	
					if ( event.pageX - this.offset.click.left < containment[ 0 ] ) {
						pageX = containment[ 0 ] + this.offset.click.left;
					}
					if ( event.pageY - this.offset.click.top < containment[ 1 ] ) {
						pageY = containment[ 1 ] + this.offset.click.top;
					}
					if ( event.pageX - this.offset.click.left > containment[ 2 ] ) {
						pageX = containment[ 2 ] + this.offset.click.left;
					}
					if ( event.pageY - this.offset.click.top > containment[ 3 ] ) {
						pageY = containment[ 3 ] + this.offset.click.top;
					}
				}
	
				if ( o.grid ) {
	
					//Check for grid elements set to 0 to prevent divide by 0 error causing invalid
					// argument errors in IE (see ticket #6950)
					top = o.grid[ 1 ] ? this.originalPageY + Math.round( ( pageY -
						this.originalPageY ) / o.grid[ 1 ] ) * o.grid[ 1 ] : this.originalPageY;
					pageY = containment ? ( ( top - this.offset.click.top >= containment[ 1 ] ||
						top - this.offset.click.top > containment[ 3 ] ) ?
							top :
							( ( top - this.offset.click.top >= containment[ 1 ] ) ?
								top - o.grid[ 1 ] : top + o.grid[ 1 ] ) ) : top;
	
					left = o.grid[ 0 ] ? this.originalPageX +
						Math.round( ( pageX - this.originalPageX ) / o.grid[ 0 ] ) * o.grid[ 0 ] :
						this.originalPageX;
					pageX = containment ? ( ( left - this.offset.click.left >= containment[ 0 ] ||
						left - this.offset.click.left > containment[ 2 ] ) ?
							left :
							( ( left - this.offset.click.left >= containment[ 0 ] ) ?
								left - o.grid[ 0 ] : left + o.grid[ 0 ] ) ) : left;
				}
	
				if ( o.axis === "y" ) {
					pageX = this.originalPageX;
				}
	
				if ( o.axis === "x" ) {
					pageY = this.originalPageY;
				}
			}
	
			return {
				top: (
	
					// The absolute mouse position
					pageY -
	
					// Click offset (relative to the element)
					this.offset.click.top -
	
					// Only for relative positioned nodes: Relative offset from element to offset parent
					this.offset.relative.top -
	
					// The offsetParent's offset without borders (offset + border)
					this.offset.parent.top +
					( this.cssPosition === "fixed" ?
						-this.offset.scroll.top :
						( scrollIsRootNode ? 0 : this.offset.scroll.top ) )
				),
				left: (
	
					// The absolute mouse position
					pageX -
	
					// Click offset (relative to the element)
					this.offset.click.left -
	
					// Only for relative positioned nodes: Relative offset from element to offset parent
					this.offset.relative.left -
	
					// The offsetParent's offset without borders (offset + border)
					this.offset.parent.left +
					( this.cssPosition === "fixed" ?
						-this.offset.scroll.left :
						( scrollIsRootNode ? 0 : this.offset.scroll.left ) )
				)
			};
	
		},
	
		_clear: function() {
			this._removeClass( this.helper, "ui-draggable-dragging" );
			if ( this.helper[ 0 ] !== this.element[ 0 ] && !this.cancelHelperRemoval ) {
				this.helper.remove();
			}
			this.helper = null;
			this.cancelHelperRemoval = false;
			if ( this.destroyOnClear ) {
				this.destroy();
			}
		},
	
		// From now on bulk stuff - mainly helpers
	
		_trigger: function( type, event, ui ) {
			ui = ui || this._uiHash();
			$.ui.plugin.call( this, type, [ event, ui, this ], true );
	
			// Absolute position and offset (see #6884 ) have to be recalculated after plugins
			if ( /^(drag|start|stop)/.test( type ) ) {
				this.positionAbs = this._convertPositionTo( "absolute" );
				ui.offset = this.positionAbs;
			}
			return $.Widget.prototype._trigger.call( this, type, event, ui );
		},
	
		plugins: {},
	
		_uiHash: function() {
			return {
				helper: this.helper,
				position: this.position,
				originalPosition: this.originalPosition,
				offset: this.positionAbs
			};
		}
	
	} );
	
	$.ui.plugin.add( "draggable", "connectToSortable", {
		start: function( event, ui, draggable ) {
			var uiSortable = $.extend( {}, ui, {
				item: draggable.element
			} );
	
			draggable.sortables = [];
			$( draggable.options.connectToSortable ).each( function() {
				var sortable = $( this ).sortable( "instance" );
	
				if ( sortable && !sortable.options.disabled ) {
					draggable.sortables.push( sortable );
	
					// RefreshPositions is called at drag start to refresh the containerCache
					// which is used in drag. This ensures it's initialized and synchronized
					// with any changes that might have happened on the page since initialization.
					sortable.refreshPositions();
					sortable._trigger( "activate", event, uiSortable );
				}
			} );
		},
		stop: function( event, ui, draggable ) {
			var uiSortable = $.extend( {}, ui, {
				item: draggable.element
			} );
	
			draggable.cancelHelperRemoval = false;
	
			$.each( draggable.sortables, function() {
				var sortable = this;
	
				if ( sortable.isOver ) {
					sortable.isOver = 0;
	
					// Allow this sortable to handle removing the helper
					draggable.cancelHelperRemoval = true;
					sortable.cancelHelperRemoval = false;
	
					// Use _storedCSS To restore properties in the sortable,
					// as this also handles revert (#9675) since the draggable
					// may have modified them in unexpected ways (#8809)
					sortable._storedCSS = {
						position: sortable.placeholder.css( "position" ),
						top: sortable.placeholder.css( "top" ),
						left: sortable.placeholder.css( "left" )
					};
	
					sortable._mouseStop( event );
	
					// Once drag has ended, the sortable should return to using
					// its original helper, not the shared helper from draggable
					sortable.options.helper = sortable.options._helper;
				} else {
	
					// Prevent this Sortable from removing the helper.
					// However, don't set the draggable to remove the helper
					// either as another connected Sortable may yet handle the removal.
					sortable.cancelHelperRemoval = true;
	
					sortable._trigger( "deactivate", event, uiSortable );
				}
			} );
		},
		drag: function( event, ui, draggable ) {
			$.each( draggable.sortables, function() {
				var innermostIntersecting = false,
					sortable = this;
	
				// Copy over variables that sortable's _intersectsWith uses
				sortable.positionAbs = draggable.positionAbs;
				sortable.helperProportions = draggable.helperProportions;
				sortable.offset.click = draggable.offset.click;
	
				if ( sortable._intersectsWith( sortable.containerCache ) ) {
					innermostIntersecting = true;
	
					$.each( draggable.sortables, function() {
	
						// Copy over variables that sortable's _intersectsWith uses
						this.positionAbs = draggable.positionAbs;
						this.helperProportions = draggable.helperProportions;
						this.offset.click = draggable.offset.click;
	
						if ( this !== sortable &&
								this._intersectsWith( this.containerCache ) &&
								$.contains( sortable.element[ 0 ], this.element[ 0 ] ) ) {
							innermostIntersecting = false;
						}
	
						return innermostIntersecting;
					} );
				}
	
				if ( innermostIntersecting ) {
	
					// If it intersects, we use a little isOver variable and set it once,
					// so that the move-in stuff gets fired only once.
					if ( !sortable.isOver ) {
						sortable.isOver = 1;
	
						// Store draggable's parent in case we need to reappend to it later.
						draggable._parent = ui.helper.parent();
	
						sortable.currentItem = ui.helper
							.appendTo( sortable.element )
							.data( "ui-sortable-item", true );
	
						// Store helper option to later restore it
						sortable.options._helper = sortable.options.helper;
	
						sortable.options.helper = function() {
							return ui.helper[ 0 ];
						};
	
						// Fire the start events of the sortable with our passed browser event,
						// and our own helper (so it doesn't create a new one)
						event.target = sortable.currentItem[ 0 ];
						sortable._mouseCapture( event, true );
						sortable._mouseStart( event, true, true );
	
						// Because the browser event is way off the new appended portlet,
						// modify necessary variables to reflect the changes
						sortable.offset.click.top = draggable.offset.click.top;
						sortable.offset.click.left = draggable.offset.click.left;
						sortable.offset.parent.left -= draggable.offset.parent.left -
							sortable.offset.parent.left;
						sortable.offset.parent.top -= draggable.offset.parent.top -
							sortable.offset.parent.top;
	
						draggable._trigger( "toSortable", event );
	
						// Inform draggable that the helper is in a valid drop zone,
						// used solely in the revert option to handle "valid/invalid".
						draggable.dropped = sortable.element;
	
						// Need to refreshPositions of all sortables in the case that
						// adding to one sortable changes the location of the other sortables (#9675)
						$.each( draggable.sortables, function() {
							this.refreshPositions();
						} );
	
						// Hack so receive/update callbacks work (mostly)
						draggable.currentItem = draggable.element;
						sortable.fromOutside = draggable;
					}
	
					if ( sortable.currentItem ) {
						sortable._mouseDrag( event );
	
						// Copy the sortable's position because the draggable's can potentially reflect
						// a relative position, while sortable is always absolute, which the dragged
						// element has now become. (#8809)
						ui.position = sortable.position;
					}
				} else {
	
					// If it doesn't intersect with the sortable, and it intersected before,
					// we fake the drag stop of the sortable, but make sure it doesn't remove
					// the helper by using cancelHelperRemoval.
					if ( sortable.isOver ) {
	
						sortable.isOver = 0;
						sortable.cancelHelperRemoval = true;
	
						// Calling sortable's mouseStop would trigger a revert,
						// so revert must be temporarily false until after mouseStop is called.
						sortable.options._revert = sortable.options.revert;
						sortable.options.revert = false;
	
						sortable._trigger( "out", event, sortable._uiHash( sortable ) );
						sortable._mouseStop( event, true );
	
						// Restore sortable behaviors that were modfied
						// when the draggable entered the sortable area (#9481)
						sortable.options.revert = sortable.options._revert;
						sortable.options.helper = sortable.options._helper;
	
						if ( sortable.placeholder ) {
							sortable.placeholder.remove();
						}
	
						// Restore and recalculate the draggable's offset considering the sortable
						// may have modified them in unexpected ways. (#8809, #10669)
						ui.helper.appendTo( draggable._parent );
						draggable._refreshOffsets( event );
						ui.position = draggable._generatePosition( event, true );
	
						draggable._trigger( "fromSortable", event );
	
						// Inform draggable that the helper is no longer in a valid drop zone
						draggable.dropped = false;
	
						// Need to refreshPositions of all sortables just in case removing
						// from one sortable changes the location of other sortables (#9675)
						$.each( draggable.sortables, function() {
							this.refreshPositions();
						} );
					}
				}
			} );
		}
	} );
	
	$.ui.plugin.add( "draggable", "cursor", {
		start: function( event, ui, instance ) {
			var t = $( "body" ),
				o = instance.options;
	
			if ( t.css( "cursor" ) ) {
				o._cursor = t.css( "cursor" );
			}
			t.css( "cursor", o.cursor );
		},
		stop: function( event, ui, instance ) {
			var o = instance.options;
			if ( o._cursor ) {
				$( "body" ).css( "cursor", o._cursor );
			}
		}
	} );
	
	$.ui.plugin.add( "draggable", "opacity", {
		start: function( event, ui, instance ) {
			var t = $( ui.helper ),
				o = instance.options;
			if ( t.css( "opacity" ) ) {
				o._opacity = t.css( "opacity" );
			}
			t.css( "opacity", o.opacity );
		},
		stop: function( event, ui, instance ) {
			var o = instance.options;
			if ( o._opacity ) {
				$( ui.helper ).css( "opacity", o._opacity );
			}
		}
	} );
	
	$.ui.plugin.add( "draggable", "scroll", {
		start: function( event, ui, i ) {
			if ( !i.scrollParentNotHidden ) {
				i.scrollParentNotHidden = i.helper.scrollParent( false );
			}
	
			if ( i.scrollParentNotHidden[ 0 ] !== i.document[ 0 ] &&
					i.scrollParentNotHidden[ 0 ].tagName !== "HTML" ) {
				i.overflowOffset = i.scrollParentNotHidden.offset();
			}
		},
		drag: function( event, ui, i  ) {
	
			var o = i.options,
				scrolled = false,
				scrollParent = i.scrollParentNotHidden[ 0 ],
				document = i.document[ 0 ];
	
			if ( scrollParent !== document && scrollParent.tagName !== "HTML" ) {
				if ( !o.axis || o.axis !== "x" ) {
					if ( ( i.overflowOffset.top + scrollParent.offsetHeight ) - event.pageY <
							o.scrollSensitivity ) {
						scrollParent.scrollTop = scrolled = scrollParent.scrollTop + o.scrollSpeed;
					} else if ( event.pageY - i.overflowOffset.top < o.scrollSensitivity ) {
						scrollParent.scrollTop = scrolled = scrollParent.scrollTop - o.scrollSpeed;
					}
				}
	
				if ( !o.axis || o.axis !== "y" ) {
					if ( ( i.overflowOffset.left + scrollParent.offsetWidth ) - event.pageX <
							o.scrollSensitivity ) {
						scrollParent.scrollLeft = scrolled = scrollParent.scrollLeft + o.scrollSpeed;
					} else if ( event.pageX - i.overflowOffset.left < o.scrollSensitivity ) {
						scrollParent.scrollLeft = scrolled = scrollParent.scrollLeft - o.scrollSpeed;
					}
				}
	
			} else {
	
				if ( !o.axis || o.axis !== "x" ) {
					if ( event.pageY - $( document ).scrollTop() < o.scrollSensitivity ) {
						scrolled = $( document ).scrollTop( $( document ).scrollTop() - o.scrollSpeed );
					} else if ( $( window ).height() - ( event.pageY - $( document ).scrollTop() ) <
							o.scrollSensitivity ) {
						scrolled = $( document ).scrollTop( $( document ).scrollTop() + o.scrollSpeed );
					}
				}
	
				if ( !o.axis || o.axis !== "y" ) {
					if ( event.pageX - $( document ).scrollLeft() < o.scrollSensitivity ) {
						scrolled = $( document ).scrollLeft(
							$( document ).scrollLeft() - o.scrollSpeed
						);
					} else if ( $( window ).width() - ( event.pageX - $( document ).scrollLeft() ) <
							o.scrollSensitivity ) {
						scrolled = $( document ).scrollLeft(
							$( document ).scrollLeft() + o.scrollSpeed
						);
					}
				}
	
			}
	
			if ( scrolled !== false && $.ui.ddmanager && !o.dropBehaviour ) {
				$.ui.ddmanager.prepareOffsets( i, event );
			}
	
		}
	} );
	
	$.ui.plugin.add( "draggable", "snap", {
		start: function( event, ui, i ) {
	
			var o = i.options;
	
			i.snapElements = [];
	
			$( o.snap.constructor !== String ? ( o.snap.items || ":data(ui-draggable)" ) : o.snap )
				.each( function() {
					var $t = $( this ),
						$o = $t.offset();
					if ( this !== i.element[ 0 ] ) {
						i.snapElements.push( {
							item: this,
							width: $t.outerWidth(), height: $t.outerHeight(),
							top: $o.top, left: $o.left
						} );
					}
				} );
	
		},
		drag: function( event, ui, inst ) {
	
			var ts, bs, ls, rs, l, r, t, b, i, first,
				o = inst.options,
				d = o.snapTolerance,
				x1 = ui.offset.left, x2 = x1 + inst.helperProportions.width,
				y1 = ui.offset.top, y2 = y1 + inst.helperProportions.height;
	
			for ( i = inst.snapElements.length - 1; i >= 0; i-- ) {
	
				l = inst.snapElements[ i ].left - inst.margins.left;
				r = l + inst.snapElements[ i ].width;
				t = inst.snapElements[ i ].top - inst.margins.top;
				b = t + inst.snapElements[ i ].height;
	
				if ( x2 < l - d || x1 > r + d || y2 < t - d || y1 > b + d ||
						!$.contains( inst.snapElements[ i ].item.ownerDocument,
						inst.snapElements[ i ].item ) ) {
					if ( inst.snapElements[ i ].snapping ) {
						( inst.options.snap.release &&
							inst.options.snap.release.call(
								inst.element,
								event,
								$.extend( inst._uiHash(), { snapItem: inst.snapElements[ i ].item } )
							) );
					}
					inst.snapElements[ i ].snapping = false;
					continue;
				}
	
				if ( o.snapMode !== "inner" ) {
					ts = Math.abs( t - y2 ) <= d;
					bs = Math.abs( b - y1 ) <= d;
					ls = Math.abs( l - x2 ) <= d;
					rs = Math.abs( r - x1 ) <= d;
					if ( ts ) {
						ui.position.top = inst._convertPositionTo( "relative", {
							top: t - inst.helperProportions.height,
							left: 0
						} ).top;
					}
					if ( bs ) {
						ui.position.top = inst._convertPositionTo( "relative", {
							top: b,
							left: 0
						} ).top;
					}
					if ( ls ) {
						ui.position.left = inst._convertPositionTo( "relative", {
							top: 0,
							left: l - inst.helperProportions.width
						} ).left;
					}
					if ( rs ) {
						ui.position.left = inst._convertPositionTo( "relative", {
							top: 0,
							left: r
						} ).left;
					}
				}
	
				first = ( ts || bs || ls || rs );
	
				if ( o.snapMode !== "outer" ) {
					ts = Math.abs( t - y1 ) <= d;
					bs = Math.abs( b - y2 ) <= d;
					ls = Math.abs( l - x1 ) <= d;
					rs = Math.abs( r - x2 ) <= d;
					if ( ts ) {
						ui.position.top = inst._convertPositionTo( "relative", {
							top: t,
							left: 0
						} ).top;
					}
					if ( bs ) {
						ui.position.top = inst._convertPositionTo( "relative", {
							top: b - inst.helperProportions.height,
							left: 0
						} ).top;
					}
					if ( ls ) {
						ui.position.left = inst._convertPositionTo( "relative", {
							top: 0,
							left: l
						} ).left;
					}
					if ( rs ) {
						ui.position.left = inst._convertPositionTo( "relative", {
							top: 0,
							left: r - inst.helperProportions.width
						} ).left;
					}
				}
	
				if ( !inst.snapElements[ i ].snapping && ( ts || bs || ls || rs || first ) ) {
					( inst.options.snap.snap &&
						inst.options.snap.snap.call(
							inst.element,
							event,
							$.extend( inst._uiHash(), {
								snapItem: inst.snapElements[ i ].item
							} ) ) );
				}
				inst.snapElements[ i ].snapping = ( ts || bs || ls || rs || first );
	
			}
	
		}
	} );
	
	$.ui.plugin.add( "draggable", "stack", {
		start: function( event, ui, instance ) {
			var min,
				o = instance.options,
				group = $.makeArray( $( o.stack ) ).sort( function( a, b ) {
					return ( parseInt( $( a ).css( "zIndex" ), 10 ) || 0 ) -
						( parseInt( $( b ).css( "zIndex" ), 10 ) || 0 );
				} );
	
			if ( !group.length ) { return; }
	
			min = parseInt( $( group[ 0 ] ).css( "zIndex" ), 10 ) || 0;
			$( group ).each( function( i ) {
				$( this ).css( "zIndex", min + i );
			} );
			this.css( "zIndex", ( min + group.length ) );
		}
	} );
	
	$.ui.plugin.add( "draggable", "zIndex", {
		start: function( event, ui, instance ) {
			var t = $( ui.helper ),
				o = instance.options;
	
			if ( t.css( "zIndex" ) ) {
				o._zIndex = t.css( "zIndex" );
			}
			t.css( "zIndex", o.zIndex );
		},
		stop: function( event, ui, instance ) {
			var o = instance.options;
	
			if ( o._zIndex ) {
				$( ui.helper ).css( "zIndex", o._zIndex );
			}
		}
	} );
	
	return $.ui.draggable;
	
	} ) );


/***/ }),
/* 11 */
/***/ (function(module, exports, __webpack_require__) {

	var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
	 * jQuery UI Mouse 1.12.1
	 * http://jqueryui.com
	 *
	 * Copyright jQuery Foundation and other contributors
	 * Released under the MIT license.
	 * http://jquery.org/license
	 */
	
	//>>label: Mouse
	//>>group: Widgets
	//>>description: Abstracts mouse-based interactions to assist in creating certain widgets.
	//>>docs: http://api.jqueryui.com/mouse/
	
	( function( factory ) {
		if ( true ) {
	
			// AMD. Register as an anonymous module.
			!(__WEBPACK_AMD_DEFINE_ARRAY__ = [
				__webpack_require__(7),
				__webpack_require__(12),
				__webpack_require__(13),
				__webpack_require__(14)
			], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
		} else {
	
			// Browser globals
			factory( jQuery );
		}
	}( function( $ ) {
	
	var mouseHandled = false;
	$( document ).on( "mouseup", function() {
		mouseHandled = false;
	} );
	
	return $.widget( "ui.mouse", {
		version: "1.12.1",
		options: {
			cancel: "input, textarea, button, select, option",
			distance: 1,
			delay: 0
		},
		_mouseInit: function() {
			var that = this;
	
			this.element
				.on( "mousedown." + this.widgetName, function( event ) {
					return that._mouseDown( event );
				} )
				.on( "click." + this.widgetName, function( event ) {
					if ( true === $.data( event.target, that.widgetName + ".preventClickEvent" ) ) {
						$.removeData( event.target, that.widgetName + ".preventClickEvent" );
						event.stopImmediatePropagation();
						return false;
					}
				} );
	
			this.started = false;
		},
	
		// TODO: make sure destroying one instance of mouse doesn't mess with
		// other instances of mouse
		_mouseDestroy: function() {
			this.element.off( "." + this.widgetName );
			if ( this._mouseMoveDelegate ) {
				this.document
					.off( "mousemove." + this.widgetName, this._mouseMoveDelegate )
					.off( "mouseup." + this.widgetName, this._mouseUpDelegate );
			}
		},
	
		_mouseDown: function( event ) {
	
			// don't let more than one widget handle mouseStart
			if ( mouseHandled ) {
				return;
			}
	
			this._mouseMoved = false;
	
			// We may have missed mouseup (out of window)
			( this._mouseStarted && this._mouseUp( event ) );
	
			this._mouseDownEvent = event;
	
			var that = this,
				btnIsLeft = ( event.which === 1 ),
	
				// event.target.nodeName works around a bug in IE 8 with
				// disabled inputs (#7620)
				elIsCancel = ( typeof this.options.cancel === "string" && event.target.nodeName ?
					$( event.target ).closest( this.options.cancel ).length : false );
			if ( !btnIsLeft || elIsCancel || !this._mouseCapture( event ) ) {
				return true;
			}
	
			this.mouseDelayMet = !this.options.delay;
			if ( !this.mouseDelayMet ) {
				this._mouseDelayTimer = setTimeout( function() {
					that.mouseDelayMet = true;
				}, this.options.delay );
			}
	
			if ( this._mouseDistanceMet( event ) && this._mouseDelayMet( event ) ) {
				this._mouseStarted = ( this._mouseStart( event ) !== false );
				if ( !this._mouseStarted ) {
					event.preventDefault();
					return true;
				}
			}
	
			// Click event may never have fired (Gecko & Opera)
			if ( true === $.data( event.target, this.widgetName + ".preventClickEvent" ) ) {
				$.removeData( event.target, this.widgetName + ".preventClickEvent" );
			}
	
			// These delegates are required to keep context
			this._mouseMoveDelegate = function( event ) {
				return that._mouseMove( event );
			};
			this._mouseUpDelegate = function( event ) {
				return that._mouseUp( event );
			};
	
			this.document
				.on( "mousemove." + this.widgetName, this._mouseMoveDelegate )
				.on( "mouseup." + this.widgetName, this._mouseUpDelegate );
	
			event.preventDefault();
	
			mouseHandled = true;
			return true;
		},
	
		_mouseMove: function( event ) {
	
			// Only check for mouseups outside the document if you've moved inside the document
			// at least once. This prevents the firing of mouseup in the case of IE<9, which will
			// fire a mousemove event if content is placed under the cursor. See #7778
			// Support: IE <9
			if ( this._mouseMoved ) {
	
				// IE mouseup check - mouseup happened when mouse was out of window
				if ( $.ui.ie && ( !document.documentMode || document.documentMode < 9 ) &&
						!event.button ) {
					return this._mouseUp( event );
	
				// Iframe mouseup check - mouseup occurred in another document
				} else if ( !event.which ) {
	
					// Support: Safari <=8 - 9
					// Safari sets which to 0 if you press any of the following keys
					// during a drag (#14461)
					if ( event.originalEvent.altKey || event.originalEvent.ctrlKey ||
							event.originalEvent.metaKey || event.originalEvent.shiftKey ) {
						this.ignoreMissingWhich = true;
					} else if ( !this.ignoreMissingWhich ) {
						return this._mouseUp( event );
					}
				}
			}
	
			if ( event.which || event.button ) {
				this._mouseMoved = true;
			}
	
			if ( this._mouseStarted ) {
				this._mouseDrag( event );
				return event.preventDefault();
			}
	
			if ( this._mouseDistanceMet( event ) && this._mouseDelayMet( event ) ) {
				this._mouseStarted =
					( this._mouseStart( this._mouseDownEvent, event ) !== false );
				( this._mouseStarted ? this._mouseDrag( event ) : this._mouseUp( event ) );
			}
	
			return !this._mouseStarted;
		},
	
		_mouseUp: function( event ) {
			this.document
				.off( "mousemove." + this.widgetName, this._mouseMoveDelegate )
				.off( "mouseup." + this.widgetName, this._mouseUpDelegate );
	
			if ( this._mouseStarted ) {
				this._mouseStarted = false;
	
				if ( event.target === this._mouseDownEvent.target ) {
					$.data( event.target, this.widgetName + ".preventClickEvent", true );
				}
	
				this._mouseStop( event );
			}
	
			if ( this._mouseDelayTimer ) {
				clearTimeout( this._mouseDelayTimer );
				delete this._mouseDelayTimer;
			}
	
			this.ignoreMissingWhich = false;
			mouseHandled = false;
			event.preventDefault();
		},
	
		_mouseDistanceMet: function( event ) {
			return ( Math.max(
					Math.abs( this._mouseDownEvent.pageX - event.pageX ),
					Math.abs( this._mouseDownEvent.pageY - event.pageY )
				) >= this.options.distance
			);
		},
	
		_mouseDelayMet: function( /* event */ ) {
			return this.mouseDelayMet;
		},
	
		// These are placeholder methods, to be overriden by extending plugin
		_mouseStart: function( /* event */ ) {},
		_mouseDrag: function( /* event */ ) {},
		_mouseStop: function( /* event */ ) {},
		_mouseCapture: function( /* event */ ) { return true; }
	} );
	
	} ) );


/***/ }),
/* 12 */
/***/ (function(module, exports, __webpack_require__) {

	var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;( function( factory ) {
		if ( true ) {
	
			// AMD. Register as an anonymous module.
			!(__WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(7), __webpack_require__(13) ], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
		} else {
	
			// Browser globals
			factory( jQuery );
		}
	} ( function( $ ) {
	
	// This file is deprecated
	return $.ui.ie = !!/msie [\w.]+/.exec( navigator.userAgent.toLowerCase() );
	} ) );


/***/ }),
/* 13 */
/***/ (function(module, exports, __webpack_require__) {

	var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;( function( factory ) {
		if ( true ) {
	
			// AMD. Register as an anonymous module.
			!(__WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(7) ], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
		} else {
	
			// Browser globals
			factory( jQuery );
		}
	} ( function( $ ) {
	
	$.ui = $.ui || {};
	
	return $.ui.version = "1.12.1";
	
	} ) );


/***/ }),
/* 14 */
/***/ (function(module, exports, __webpack_require__) {

	var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
	 * jQuery UI Widget 1.12.1
	 * http://jqueryui.com
	 *
	 * Copyright jQuery Foundation and other contributors
	 * Released under the MIT license.
	 * http://jquery.org/license
	 */
	
	//>>label: Widget
	//>>group: Core
	//>>description: Provides a factory for creating stateful widgets with a common API.
	//>>docs: http://api.jqueryui.com/jQuery.widget/
	//>>demos: http://jqueryui.com/widget/
	
	( function( factory ) {
		if ( true ) {
	
			// AMD. Register as an anonymous module.
			!(__WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(7), __webpack_require__(13) ], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
		} else {
	
			// Browser globals
			factory( jQuery );
		}
	}( function( $ ) {
	
	var widgetUuid = 0;
	var widgetSlice = Array.prototype.slice;
	
	$.cleanData = ( function( orig ) {
		return function( elems ) {
			var events, elem, i;
			for ( i = 0; ( elem = elems[ i ] ) != null; i++ ) {
				try {
	
					// Only trigger remove when necessary to save time
					events = $._data( elem, "events" );
					if ( events && events.remove ) {
						$( elem ).triggerHandler( "remove" );
					}
	
				// Http://bugs.jquery.com/ticket/8235
				} catch ( e ) {}
			}
			orig( elems );
		};
	} )( $.cleanData );
	
	$.widget = function( name, base, prototype ) {
		var existingConstructor, constructor, basePrototype;
	
		// ProxiedPrototype allows the provided prototype to remain unmodified
		// so that it can be used as a mixin for multiple widgets (#8876)
		var proxiedPrototype = {};
	
		var namespace = name.split( "." )[ 0 ];
		name = name.split( "." )[ 1 ];
		var fullName = namespace + "-" + name;
	
		if ( !prototype ) {
			prototype = base;
			base = $.Widget;
		}
	
		if ( $.isArray( prototype ) ) {
			prototype = $.extend.apply( null, [ {} ].concat( prototype ) );
		}
	
		// Create selector for plugin
		$.expr[ ":" ][ fullName.toLowerCase() ] = function( elem ) {
			return !!$.data( elem, fullName );
		};
	
		$[ namespace ] = $[ namespace ] || {};
		existingConstructor = $[ namespace ][ name ];
		constructor = $[ namespace ][ name ] = function( options, element ) {
	
			// Allow instantiation without "new" keyword
			if ( !this._createWidget ) {
				return new constructor( options, element );
			}
	
			// Allow instantiation without initializing for simple inheritance
			// must use "new" keyword (the code above always passes args)
			if ( arguments.length ) {
				this._createWidget( options, element );
			}
		};
	
		// Extend with the existing constructor to carry over any static properties
		$.extend( constructor, existingConstructor, {
			version: prototype.version,
	
			// Copy the object used to create the prototype in case we need to
			// redefine the widget later
			_proto: $.extend( {}, prototype ),
	
			// Track widgets that inherit from this widget in case this widget is
			// redefined after a widget inherits from it
			_childConstructors: []
		} );
	
		basePrototype = new base();
	
		// We need to make the options hash a property directly on the new instance
		// otherwise we'll modify the options hash on the prototype that we're
		// inheriting from
		basePrototype.options = $.widget.extend( {}, basePrototype.options );
		$.each( prototype, function( prop, value ) {
			if ( !$.isFunction( value ) ) {
				proxiedPrototype[ prop ] = value;
				return;
			}
			proxiedPrototype[ prop ] = ( function() {
				function _super() {
					return base.prototype[ prop ].apply( this, arguments );
				}
	
				function _superApply( args ) {
					return base.prototype[ prop ].apply( this, args );
				}
	
				return function() {
					var __super = this._super;
					var __superApply = this._superApply;
					var returnValue;
	
					this._super = _super;
					this._superApply = _superApply;
	
					returnValue = value.apply( this, arguments );
	
					this._super = __super;
					this._superApply = __superApply;
	
					return returnValue;
				};
			} )();
		} );
		constructor.prototype = $.widget.extend( basePrototype, {
	
			// TODO: remove support for widgetEventPrefix
			// always use the name + a colon as the prefix, e.g., draggable:start
			// don't prefix for widgets that aren't DOM-based
			widgetEventPrefix: existingConstructor ? ( basePrototype.widgetEventPrefix || name ) : name
		}, proxiedPrototype, {
			constructor: constructor,
			namespace: namespace,
			widgetName: name,
			widgetFullName: fullName
		} );
	
		// If this widget is being redefined then we need to find all widgets that
		// are inheriting from it and redefine all of them so that they inherit from
		// the new version of this widget. We're essentially trying to replace one
		// level in the prototype chain.
		if ( existingConstructor ) {
			$.each( existingConstructor._childConstructors, function( i, child ) {
				var childPrototype = child.prototype;
	
				// Redefine the child widget using the same prototype that was
				// originally used, but inherit from the new version of the base
				$.widget( childPrototype.namespace + "." + childPrototype.widgetName, constructor,
					child._proto );
			} );
	
			// Remove the list of existing child constructors from the old constructor
			// so the old child constructors can be garbage collected
			delete existingConstructor._childConstructors;
		} else {
			base._childConstructors.push( constructor );
		}
	
		$.widget.bridge( name, constructor );
	
		return constructor;
	};
	
	$.widget.extend = function( target ) {
		var input = widgetSlice.call( arguments, 1 );
		var inputIndex = 0;
		var inputLength = input.length;
		var key;
		var value;
	
		for ( ; inputIndex < inputLength; inputIndex++ ) {
			for ( key in input[ inputIndex ] ) {
				value = input[ inputIndex ][ key ];
				if ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) {
	
					// Clone objects
					if ( $.isPlainObject( value ) ) {
						target[ key ] = $.isPlainObject( target[ key ] ) ?
							$.widget.extend( {}, target[ key ], value ) :
	
							// Don't extend strings, arrays, etc. with objects
							$.widget.extend( {}, value );
	
					// Copy everything else by reference
					} else {
						target[ key ] = value;
					}
				}
			}
		}
		return target;
	};
	
	$.widget.bridge = function( name, object ) {
		var fullName = object.prototype.widgetFullName || name;
		$.fn[ name ] = function( options ) {
			var isMethodCall = typeof options === "string";
			var args = widgetSlice.call( arguments, 1 );
			var returnValue = this;
	
			if ( isMethodCall ) {
	
				// If this is an empty collection, we need to have the instance method
				// return undefined instead of the jQuery instance
				if ( !this.length && options === "instance" ) {
					returnValue = undefined;
				} else {
					this.each( function() {
						var methodValue;
						var instance = $.data( this, fullName );
	
						if ( options === "instance" ) {
							returnValue = instance;
							return false;
						}
	
						if ( !instance ) {
							return $.error( "cannot call methods on " + name +
								" prior to initialization; " +
								"attempted to call method '" + options + "'" );
						}
	
						if ( !$.isFunction( instance[ options ] ) || options.charAt( 0 ) === "_" ) {
							return $.error( "no such method '" + options + "' for " + name +
								" widget instance" );
						}
	
						methodValue = instance[ options ].apply( instance, args );
	
						if ( methodValue !== instance && methodValue !== undefined ) {
							returnValue = methodValue && methodValue.jquery ?
								returnValue.pushStack( methodValue.get() ) :
								methodValue;
							return false;
						}
					} );
				}
			} else {
	
				// Allow multiple hashes to be passed on init
				if ( args.length ) {
					options = $.widget.extend.apply( null, [ options ].concat( args ) );
				}
	
				this.each( function() {
					var instance = $.data( this, fullName );
					if ( instance ) {
						instance.option( options || {} );
						if ( instance._init ) {
							instance._init();
						}
					} else {
						$.data( this, fullName, new object( options, this ) );
					}
				} );
			}
	
			return returnValue;
		};
	};
	
	$.Widget = function( /* options, element */ ) {};
	$.Widget._childConstructors = [];
	
	$.Widget.prototype = {
		widgetName: "widget",
		widgetEventPrefix: "",
		defaultElement: "<div>",
	
		options: {
			classes: {},
			disabled: false,
	
			// Callbacks
			create: null
		},
	
		_createWidget: function( options, element ) {
			element = $( element || this.defaultElement || this )[ 0 ];
			this.element = $( element );
			this.uuid = widgetUuid++;
			this.eventNamespace = "." + this.widgetName + this.uuid;
	
			this.bindings = $();
			this.hoverable = $();
			this.focusable = $();
			this.classesElementLookup = {};
	
			if ( element !== this ) {
				$.data( element, this.widgetFullName, this );
				this._on( true, this.element, {
					remove: function( event ) {
						if ( event.target === element ) {
							this.destroy();
						}
					}
				} );
				this.document = $( element.style ?
	
					// Element within the document
					element.ownerDocument :
	
					// Element is window or document
					element.document || element );
				this.window = $( this.document[ 0 ].defaultView || this.document[ 0 ].parentWindow );
			}
	
			this.options = $.widget.extend( {},
				this.options,
				this._getCreateOptions(),
				options );
	
			this._create();
	
			if ( this.options.disabled ) {
				this._setOptionDisabled( this.options.disabled );
			}
	
			this._trigger( "create", null, this._getCreateEventData() );
			this._init();
		},
	
		_getCreateOptions: function() {
			return {};
		},
	
		_getCreateEventData: $.noop,
	
		_create: $.noop,
	
		_init: $.noop,
	
		destroy: function() {
			var that = this;
	
			this._destroy();
			$.each( this.classesElementLookup, function( key, value ) {
				that._removeClass( value, key );
			} );
	
			// We can probably remove the unbind calls in 2.0
			// all event bindings should go through this._on()
			this.element
				.off( this.eventNamespace )
				.removeData( this.widgetFullName );
			this.widget()
				.off( this.eventNamespace )
				.removeAttr( "aria-disabled" );
	
			// Clean up events and states
			this.bindings.off( this.eventNamespace );
		},
	
		_destroy: $.noop,
	
		widget: function() {
			return this.element;
		},
	
		option: function( key, value ) {
			var options = key;
			var parts;
			var curOption;
			var i;
	
			if ( arguments.length === 0 ) {
	
				// Don't return a reference to the internal hash
				return $.widget.extend( {}, this.options );
			}
	
			if ( typeof key === "string" ) {
	
				// Handle nested keys, e.g., "foo.bar" => { foo: { bar: ___ } }
				options = {};
				parts = key.split( "." );
				key = parts.shift();
				if ( parts.length ) {
					curOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );
					for ( i = 0; i < parts.length - 1; i++ ) {
						curOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};
						curOption = curOption[ parts[ i ] ];
					}
					key = parts.pop();
					if ( arguments.length === 1 ) {
						return curOption[ key ] === undefined ? null : curOption[ key ];
					}
					curOption[ key ] = value;
				} else {
					if ( arguments.length === 1 ) {
						return this.options[ key ] === undefined ? null : this.options[ key ];
					}
					options[ key ] = value;
				}
			}
	
			this._setOptions( options );
	
			return this;
		},
	
		_setOptions: function( options ) {
			var key;
	
			for ( key in options ) {
				this._setOption( key, options[ key ] );
			}
	
			return this;
		},
	
		_setOption: function( key, value ) {
			if ( key === "classes" ) {
				this._setOptionClasses( value );
			}
	
			this.options[ key ] = value;
	
			if ( key === "disabled" ) {
				this._setOptionDisabled( value );
			}
	
			return this;
		},
	
		_setOptionClasses: function( value ) {
			var classKey, elements, currentElements;
	
			for ( classKey in value ) {
				currentElements = this.classesElementLookup[ classKey ];
				if ( value[ classKey ] === this.options.classes[ classKey ] ||
						!currentElements ||
						!currentElements.length ) {
					continue;
				}
	
				// We are doing this to create a new jQuery object because the _removeClass() call
				// on the next line is going to destroy the reference to the current elements being
				// tracked. We need to save a copy of this collection so that we can add the new classes
				// below.
				elements = $( currentElements.get() );
				this._removeClass( currentElements, classKey );
	
				// We don't use _addClass() here, because that uses this.options.classes
				// for generating the string of classes. We want to use the value passed in from
				// _setOption(), this is the new value of the classes option which was passed to
				// _setOption(). We pass this value directly to _classes().
				elements.addClass( this._classes( {
					element: elements,
					keys: classKey,
					classes: value,
					add: true
				} ) );
			}
		},
	
		_setOptionDisabled: function( value ) {
			this._toggleClass( this.widget(), this.widgetFullName + "-disabled", null, !!value );
	
			// If the widget is becoming disabled, then nothing is interactive
			if ( value ) {
				this._removeClass( this.hoverable, null, "ui-state-hover" );
				this._removeClass( this.focusable, null, "ui-state-focus" );
			}
		},
	
		enable: function() {
			return this._setOptions( { disabled: false } );
		},
	
		disable: function() {
			return this._setOptions( { disabled: true } );
		},
	
		_classes: function( options ) {
			var full = [];
			var that = this;
	
			options = $.extend( {
				element: this.element,
				classes: this.options.classes || {}
			}, options );
	
			function processClassString( classes, checkOption ) {
				var current, i;
				for ( i = 0; i < classes.length; i++ ) {
					current = that.classesElementLookup[ classes[ i ] ] || $();
					if ( options.add ) {
						current = $( $.unique( current.get().concat( options.element.get() ) ) );
					} else {
						current = $( current.not( options.element ).get() );
					}
					that.classesElementLookup[ classes[ i ] ] = current;
					full.push( classes[ i ] );
					if ( checkOption && options.classes[ classes[ i ] ] ) {
						full.push( options.classes[ classes[ i ] ] );
					}
				}
			}
	
			this._on( options.element, {
				"remove": "_untrackClassesElement"
			} );
	
			if ( options.keys ) {
				processClassString( options.keys.match( /\S+/g ) || [], true );
			}
			if ( options.extra ) {
				processClassString( options.extra.match( /\S+/g ) || [] );
			}
	
			return full.join( " " );
		},
	
		_untrackClassesElement: function( event ) {
			var that = this;
			$.each( that.classesElementLookup, function( key, value ) {
				if ( $.inArray( event.target, value ) !== -1 ) {
					that.classesElementLookup[ key ] = $( value.not( event.target ).get() );
				}
			} );
		},
	
		_removeClass: function( element, keys, extra ) {
			return this._toggleClass( element, keys, extra, false );
		},
	
		_addClass: function( element, keys, extra ) {
			return this._toggleClass( element, keys, extra, true );
		},
	
		_toggleClass: function( element, keys, extra, add ) {
			add = ( typeof add === "boolean" ) ? add : extra;
			var shift = ( typeof element === "string" || element === null ),
				options = {
					extra: shift ? keys : extra,
					keys: shift ? element : keys,
					element: shift ? this.element : element,
					add: add
				};
			options.element.toggleClass( this._classes( options ), add );
			return this;
		},
	
		_on: function( suppressDisabledCheck, element, handlers ) {
			var delegateElement;
			var instance = this;
	
			// No suppressDisabledCheck flag, shuffle arguments
			if ( typeof suppressDisabledCheck !== "boolean" ) {
				handlers = element;
				element = suppressDisabledCheck;
				suppressDisabledCheck = false;
			}
	
			// No element argument, shuffle and use this.element
			if ( !handlers ) {
				handlers = element;
				element = this.element;
				delegateElement = this.widget();
			} else {
				element = delegateElement = $( element );
				this.bindings = this.bindings.add( element );
			}
	
			$.each( handlers, function( event, handler ) {
				function handlerProxy() {
	
					// Allow widgets to customize the disabled handling
					// - disabled as an array instead of boolean
					// - disabled class as method for disabling individual parts
					if ( !suppressDisabledCheck &&
							( instance.options.disabled === true ||
							$( this ).hasClass( "ui-state-disabled" ) ) ) {
						return;
					}
					return ( typeof handler === "string" ? instance[ handler ] : handler )
						.apply( instance, arguments );
				}
	
				// Copy the guid so direct unbinding works
				if ( typeof handler !== "string" ) {
					handlerProxy.guid = handler.guid =
						handler.guid || handlerProxy.guid || $.guid++;
				}
	
				var match = event.match( /^([\w:-]*)\s*(.*)$/ );
				var eventName = match[ 1 ] + instance.eventNamespace;
				var selector = match[ 2 ];
	
				if ( selector ) {
					delegateElement.on( eventName, selector, handlerProxy );
				} else {
					element.on( eventName, handlerProxy );
				}
			} );
		},
	
		_off: function( element, eventName ) {
			eventName = ( eventName || "" ).split( " " ).join( this.eventNamespace + " " ) +
				this.eventNamespace;
			element.off( eventName ).off( eventName );
	
			// Clear the stack to avoid memory leaks (#10056)
			this.bindings = $( this.bindings.not( element ).get() );
			this.focusable = $( this.focusable.not( element ).get() );
			this.hoverable = $( this.hoverable.not( element ).get() );
		},
	
		_delay: function( handler, delay ) {
			function handlerProxy() {
				return ( typeof handler === "string" ? instance[ handler ] : handler )
					.apply( instance, arguments );
			}
			var instance = this;
			return setTimeout( handlerProxy, delay || 0 );
		},
	
		_hoverable: function( element ) {
			this.hoverable = this.hoverable.add( element );
			this._on( element, {
				mouseenter: function( event ) {
					this._addClass( $( event.currentTarget ), null, "ui-state-hover" );
				},
				mouseleave: function( event ) {
					this._removeClass( $( event.currentTarget ), null, "ui-state-hover" );
				}
			} );
		},
	
		_focusable: function( element ) {
			this.focusable = this.focusable.add( element );
			this._on( element, {
				focusin: function( event ) {
					this._addClass( $( event.currentTarget ), null, "ui-state-focus" );
				},
				focusout: function( event ) {
					this._removeClass( $( event.currentTarget ), null, "ui-state-focus" );
				}
			} );
		},
	
		_trigger: function( type, event, data ) {
			var prop, orig;
			var callback = this.options[ type ];
	
			data = data || {};
			event = $.Event( event );
			event.type = ( type === this.widgetEventPrefix ?
				type :
				this.widgetEventPrefix + type ).toLowerCase();
	
			// The original event may come from any element
			// so we need to reset the target on the new event
			event.target = this.element[ 0 ];
	
			// Copy original event properties over to the new event
			orig = event.originalEvent;
			if ( orig ) {
				for ( prop in orig ) {
					if ( !( prop in event ) ) {
						event[ prop ] = orig[ prop ];
					}
				}
			}
	
			this.element.trigger( event, data );
			return !( $.isFunction( callback ) &&
				callback.apply( this.element[ 0 ], [ event ].concat( data ) ) === false ||
				event.isDefaultPrevented() );
		}
	};
	
	$.each( { show: "fadeIn", hide: "fadeOut" }, function( method, defaultEffect ) {
		$.Widget.prototype[ "_" + method ] = function( element, options, callback ) {
			if ( typeof options === "string" ) {
				options = { effect: options };
			}
	
			var hasOptions;
			var effectName = !options ?
				method :
				options === true || typeof options === "number" ?
					defaultEffect :
					options.effect || defaultEffect;
	
			options = options || {};
			if ( typeof options === "number" ) {
				options = { duration: options };
			}
	
			hasOptions = !$.isEmptyObject( options );
			options.complete = callback;
	
			if ( options.delay ) {
				element.delay( options.delay );
			}
	
			if ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {
				element[ method ]( options );
			} else if ( effectName !== method && element[ effectName ] ) {
				element[ effectName ]( options.duration, options.easing, callback );
			} else {
				element.queue( function( next ) {
					$( this )[ method ]();
					if ( callback ) {
						callback.call( element[ 0 ] );
					}
					next();
				} );
			}
		};
	} );
	
	return $.widget;
	
	} ) );


/***/ }),
/* 15 */
/***/ (function(module, exports, __webpack_require__) {

	var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
	 * jQuery UI :data 1.12.1
	 * http://jqueryui.com
	 *
	 * Copyright jQuery Foundation and other contributors
	 * Released under the MIT license.
	 * http://jquery.org/license
	 */
	
	//>>label: :data Selector
	//>>group: Core
	//>>description: Selects elements which have data stored under the specified key.
	//>>docs: http://api.jqueryui.com/data-selector/
	
	( function( factory ) {
		if ( true ) {
	
			// AMD. Register as an anonymous module.
			!(__WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(7), __webpack_require__(13) ], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
		} else {
	
			// Browser globals
			factory( jQuery );
		}
	} ( function( $ ) {
	return $.extend( $.expr[ ":" ], {
		data: $.expr.createPseudo ?
			$.expr.createPseudo( function( dataName ) {
				return function( elem ) {
					return !!$.data( elem, dataName );
				};
			} ) :
	
			// Support: jQuery <1.8
			function( elem, i, match ) {
				return !!$.data( elem, match[ 3 ] );
			}
	} );
	} ) );


/***/ }),
/* 16 */
/***/ (function(module, exports, __webpack_require__) {

	var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;( function( factory ) {
		if ( true ) {
	
			// AMD. Register as an anonymous module.
			!(__WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(7), __webpack_require__(13) ], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
		} else {
	
			// Browser globals
			factory( jQuery );
		}
	} ( function( $ ) {
	
	// $.ui.plugin is deprecated. Use $.widget() extensions instead.
	return $.ui.plugin = {
		add: function( module, option, set ) {
			var i,
				proto = $.ui[ module ].prototype;
			for ( i in set ) {
				proto.plugins[ i ] = proto.plugins[ i ] || [];
				proto.plugins[ i ].push( [ option, set[ i ] ] );
			}
		},
		call: function( instance, name, args, allowDisconnected ) {
			var i,
				set = instance.plugins[ name ];
	
			if ( !set ) {
				return;
			}
	
			if ( !allowDisconnected && ( !instance.element[ 0 ].parentNode ||
					instance.element[ 0 ].parentNode.nodeType === 11 ) ) {
				return;
			}
	
			for ( i = 0; i < set.length; i++ ) {
				if ( instance.options[ set[ i ][ 0 ] ] ) {
					set[ i ][ 1 ].apply( instance.element, args );
				}
			}
		}
	};
	
	} ) );


/***/ }),
/* 17 */
/***/ (function(module, exports, __webpack_require__) {

	var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;( function( factory ) {
		if ( true ) {
	
			// AMD. Register as an anonymous module.
			!(__WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(7), __webpack_require__(13) ], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
		} else {
	
			// Browser globals
			factory( jQuery );
		}
	} ( function( $ ) {
	return $.ui.safeBlur = function( element ) {
	
		// Support: IE9 - 10 only
		// If the <body> is blurred, IE will switch windows, see #9420
		if ( element && element.nodeName.toLowerCase() !== "body" ) {
			$( element ).trigger( "blur" );
		}
	};
	
	} ) );


/***/ }),
/* 18 */
/***/ (function(module, exports, __webpack_require__) {

	var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
	 * jQuery UI Scroll Parent 1.12.1
	 * http://jqueryui.com
	 *
	 * Copyright jQuery Foundation and other contributors
	 * Released under the MIT license.
	 * http://jquery.org/license
	 */
	
	//>>label: scrollParent
	//>>group: Core
	//>>description: Get the closest ancestor element that is scrollable.
	//>>docs: http://api.jqueryui.com/scrollParent/
	
	( function( factory ) {
		if ( true ) {
	
			// AMD. Register as an anonymous module.
			!(__WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(7), __webpack_require__(13) ], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
		} else {
	
			// Browser globals
			factory( jQuery );
		}
	} ( function( $ ) {
	
	return $.fn.scrollParent = function( includeHidden ) {
		var position = this.css( "position" ),
			excludeStaticParent = position === "absolute",
			overflowRegex = includeHidden ? /(auto|scroll|hidden)/ : /(auto|scroll)/,
			scrollParent = this.parents().filter( function() {
				var parent = $( this );
				if ( excludeStaticParent && parent.css( "position" ) === "static" ) {
					return false;
				}
				return overflowRegex.test( parent.css( "overflow" ) + parent.css( "overflow-y" ) +
					parent.css( "overflow-x" ) );
			} ).eq( 0 );
	
		return position === "fixed" || !scrollParent.length ?
			$( this[ 0 ].ownerDocument || document ) :
			scrollParent;
	};
	
	} ) );


/***/ }),
/* 19 */
/***/ (function(module, exports, __webpack_require__) {

	var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;( function( factory ) {
		if ( true ) {
	
			// AMD. Register as an anonymous module.
			!(__WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(7), __webpack_require__(13) ], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
		} else {
	
			// Browser globals
			factory( jQuery );
		}
	} ( function( $ ) {
	return $.ui.safeActiveElement = function( document ) {
		var activeElement;
	
		// Support: IE 9 only
		// IE9 throws an "Unspecified error" accessing document.activeElement from an <iframe>
		try {
			activeElement = document.activeElement;
		} catch ( error ) {
			activeElement = document.body;
		}
	
		// Support: IE 9 - 11 only
		// IE may return null instead of an element
		// Interestingly, this only seems to occur when NOT in an iframe
		if ( !activeElement ) {
			activeElement = document.body;
		}
	
		// Support: IE 11 only
		// IE11 returns a seemingly empty object in some cases when accessing
		// document.activeElement from an <iframe>
		if ( !activeElement.nodeName ) {
			activeElement = document.body;
		}
	
		return activeElement;
	};
	
	} ) );


/***/ }),
/* 20 */
/***/ (function(module, exports, __webpack_require__) {

	var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
	 * jQuery UI Slider 1.12.1
	 * http://jqueryui.com
	 *
	 * Copyright jQuery Foundation and other contributors
	 * Released under the MIT license.
	 * http://jquery.org/license
	 */
	
	//>>label: Slider
	//>>group: Widgets
	//>>description: Displays a flexible slider with ranges and accessibility via keyboard.
	//>>docs: http://api.jqueryui.com/slider/
	//>>demos: http://jqueryui.com/slider/
	//>>css.structure: ../../themes/base/core.css
	//>>css.structure: ../../themes/base/slider.css
	//>>css.theme: ../../themes/base/theme.css
	
	( function( factory ) {
		if ( true ) {
	
			// AMD. Register as an anonymous module.
			!(__WEBPACK_AMD_DEFINE_ARRAY__ = [
				__webpack_require__(7),
				__webpack_require__(11),
				__webpack_require__(21),
				__webpack_require__(13),
				__webpack_require__(14)
			], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
		} else {
	
			// Browser globals
			factory( jQuery );
		}
	}( function( $ ) {
	
	return $.widget( "ui.slider", $.ui.mouse, {
		version: "1.12.1",
		widgetEventPrefix: "slide",
	
		options: {
			animate: false,
			classes: {
				"ui-slider": "ui-corner-all",
				"ui-slider-handle": "ui-corner-all",
	
				// Note: ui-widget-header isn't the most fittingly semantic framework class for this
				// element, but worked best visually with a variety of themes
				"ui-slider-range": "ui-corner-all ui-widget-header"
			},
			distance: 0,
			max: 100,
			min: 0,
			orientation: "horizontal",
			range: false,
			step: 1,
			value: 0,
			values: null,
	
			// Callbacks
			change: null,
			slide: null,
			start: null,
			stop: null
		},
	
		// Number of pages in a slider
		// (how many times can you page up/down to go through the whole range)
		numPages: 5,
	
		_create: function() {
			this._keySliding = false;
			this._mouseSliding = false;
			this._animateOff = true;
			this._handleIndex = null;
			this._detectOrientation();
			this._mouseInit();
			this._calculateNewMax();
	
			this._addClass( "ui-slider ui-slider-" + this.orientation,
				"ui-widget ui-widget-content" );
	
			this._refresh();
	
			this._animateOff = false;
		},
	
		_refresh: function() {
			this._createRange();
			this._createHandles();
			this._setupEvents();
			this._refreshValue();
		},
	
		_createHandles: function() {
			var i, handleCount,
				options = this.options,
				existingHandles = this.element.find( ".ui-slider-handle" ),
				handle = "<span tabindex='0'></span>",
				handles = [];
	
			handleCount = ( options.values && options.values.length ) || 1;
	
			if ( existingHandles.length > handleCount ) {
				existingHandles.slice( handleCount ).remove();
				existingHandles = existingHandles.slice( 0, handleCount );
			}
	
			for ( i = existingHandles.length; i < handleCount; i++ ) {
				handles.push( handle );
			}
	
			this.handles = existingHandles.add( $( handles.join( "" ) ).appendTo( this.element ) );
	
			this._addClass( this.handles, "ui-slider-handle", "ui-state-default" );
	
			this.handle = this.handles.eq( 0 );
	
			this.handles.each( function( i ) {
				$( this )
					.data( "ui-slider-handle-index", i )
					.attr( "tabIndex", 0 );
			} );
		},
	
		_createRange: function() {
			var options = this.options;
	
			if ( options.range ) {
				if ( options.range === true ) {
					if ( !options.values ) {
						options.values = [ this._valueMin(), this._valueMin() ];
					} else if ( options.values.length && options.values.length !== 2 ) {
						options.values = [ options.values[ 0 ], options.values[ 0 ] ];
					} else if ( $.isArray( options.values ) ) {
						options.values = options.values.slice( 0 );
					}
				}
	
				if ( !this.range || !this.range.length ) {
					this.range = $( "<div>" )
						.appendTo( this.element );
	
					this._addClass( this.range, "ui-slider-range" );
				} else {
					this._removeClass( this.range, "ui-slider-range-min ui-slider-range-max" );
	
					// Handle range switching from true to min/max
					this.range.css( {
						"left": "",
						"bottom": ""
					} );
				}
				if ( options.range === "min" || options.range === "max" ) {
					this._addClass( this.range, "ui-slider-range-" + options.range );
				}
			} else {
				if ( this.range ) {
					this.range.remove();
				}
				this.range = null;
			}
		},
	
		_setupEvents: function() {
			this._off( this.handles );
			this._on( this.handles, this._handleEvents );
			this._hoverable( this.handles );
			this._focusable( this.handles );
		},
	
		_destroy: function() {
			this.handles.remove();
			if ( this.range ) {
				this.range.remove();
			}
	
			this._mouseDestroy();
		},
	
		_mouseCapture: function( event ) {
			var position, normValue, distance, closestHandle, index, allowed, offset, mouseOverHandle,
				that = this,
				o = this.options;
	
			if ( o.disabled ) {
				return false;
			}
	
			this.elementSize = {
				width: this.element.outerWidth(),
				height: this.element.outerHeight()
			};
			this.elementOffset = this.element.offset();
	
			position = { x: event.pageX, y: event.pageY };
			normValue = this._normValueFromMouse( position );
			distance = this._valueMax() - this._valueMin() + 1;
			this.handles.each( function( i ) {
				var thisDistance = Math.abs( normValue - that.values( i ) );
				if ( ( distance > thisDistance ) ||
					( distance === thisDistance &&
						( i === that._lastChangedValue || that.values( i ) === o.min ) ) ) {
					distance = thisDistance;
					closestHandle = $( this );
					index = i;
				}
			} );
	
			allowed = this._start( event, index );
			if ( allowed === false ) {
				return false;
			}
			this._mouseSliding = true;
	
			this._handleIndex = index;
	
			this._addClass( closestHandle, null, "ui-state-active" );
			closestHandle.trigger( "focus" );
	
			offset = closestHandle.offset();
			mouseOverHandle = !$( event.target ).parents().addBack().is( ".ui-slider-handle" );
			this._clickOffset = mouseOverHandle ? { left: 0, top: 0 } : {
				left: event.pageX - offset.left - ( closestHandle.width() / 2 ),
				top: event.pageY - offset.top -
					( closestHandle.height() / 2 ) -
					( parseInt( closestHandle.css( "borderTopWidth" ), 10 ) || 0 ) -
					( parseInt( closestHandle.css( "borderBottomWidth" ), 10 ) || 0 ) +
					( parseInt( closestHandle.css( "marginTop" ), 10 ) || 0 )
			};
	
			if ( !this.handles.hasClass( "ui-state-hover" ) ) {
				this._slide( event, index, normValue );
			}
			this._animateOff = true;
			return true;
		},
	
		_mouseStart: function() {
			return true;
		},
	
		_mouseDrag: function( event ) {
			var position = { x: event.pageX, y: event.pageY },
				normValue = this._normValueFromMouse( position );
	
			this._slide( event, this._handleIndex, normValue );
	
			return false;
		},
	
		_mouseStop: function( event ) {
			this._removeClass( this.handles, null, "ui-state-active" );
			this._mouseSliding = false;
	
			this._stop( event, this._handleIndex );
			this._change( event, this._handleIndex );
	
			this._handleIndex = null;
			this._clickOffset = null;
			this._animateOff = false;
	
			return false;
		},
	
		_detectOrientation: function() {
			this.orientation = ( this.options.orientation === "vertical" ) ? "vertical" : "horizontal";
		},
	
		_normValueFromMouse: function( position ) {
			var pixelTotal,
				pixelMouse,
				percentMouse,
				valueTotal,
				valueMouse;
	
			if ( this.orientation === "horizontal" ) {
				pixelTotal = this.elementSize.width;
				pixelMouse = position.x - this.elementOffset.left -
					( this._clickOffset ? this._clickOffset.left : 0 );
			} else {
				pixelTotal = this.elementSize.height;
				pixelMouse = position.y - this.elementOffset.top -
					( this._clickOffset ? this._clickOffset.top : 0 );
			}
	
			percentMouse = ( pixelMouse / pixelTotal );
			if ( percentMouse > 1 ) {
				percentMouse = 1;
			}
			if ( percentMouse < 0 ) {
				percentMouse = 0;
			}
			if ( this.orientation === "vertical" ) {
				percentMouse = 1 - percentMouse;
			}
	
			valueTotal = this._valueMax() - this._valueMin();
			valueMouse = this._valueMin() + percentMouse * valueTotal;
	
			return this._trimAlignValue( valueMouse );
		},
	
		_uiHash: function( index, value, values ) {
			var uiHash = {
				handle: this.handles[ index ],
				handleIndex: index,
				value: value !== undefined ? value : this.value()
			};
	
			if ( this._hasMultipleValues() ) {
				uiHash.value = value !== undefined ? value : this.values( index );
				uiHash.values = values || this.values();
			}
	
			return uiHash;
		},
	
		_hasMultipleValues: function() {
			return this.options.values && this.options.values.length;
		},
	
		_start: function( event, index ) {
			return this._trigger( "start", event, this._uiHash( index ) );
		},
	
		_slide: function( event, index, newVal ) {
			var allowed, otherVal,
				currentValue = this.value(),
				newValues = this.values();
	
			if ( this._hasMultipleValues() ) {
				otherVal = this.values( index ? 0 : 1 );
				currentValue = this.values( index );
	
				if ( this.options.values.length === 2 && this.options.range === true ) {
					newVal =  index === 0 ? Math.min( otherVal, newVal ) : Math.max( otherVal, newVal );
				}
	
				newValues[ index ] = newVal;
			}
	
			if ( newVal === currentValue ) {
				return;
			}
	
			allowed = this._trigger( "slide", event, this._uiHash( index, newVal, newValues ) );
	
			// A slide can be canceled by returning false from the slide callback
			if ( allowed === false ) {
				return;
			}
	
			if ( this._hasMultipleValues() ) {
				this.values( index, newVal );
			} else {
				this.value( newVal );
			}
		},
	
		_stop: function( event, index ) {
			this._trigger( "stop", event, this._uiHash( index ) );
		},
	
		_change: function( event, index ) {
			if ( !this._keySliding && !this._mouseSliding ) {
	
				//store the last changed value index for reference when handles overlap
				this._lastChangedValue = index;
				this._trigger( "change", event, this._uiHash( index ) );
			}
		},
	
		value: function( newValue ) {
			if ( arguments.length ) {
				this.options.value = this._trimAlignValue( newValue );
				this._refreshValue();
				this._change( null, 0 );
				return;
			}
	
			return this._value();
		},
	
		values: function( index, newValue ) {
			var vals,
				newValues,
				i;
	
			if ( arguments.length > 1 ) {
				this.options.values[ index ] = this._trimAlignValue( newValue );
				this._refreshValue();
				this._change( null, index );
				return;
			}
	
			if ( arguments.length ) {
				if ( $.isArray( arguments[ 0 ] ) ) {
					vals = this.options.values;
					newValues = arguments[ 0 ];
					for ( i = 0; i < vals.length; i += 1 ) {
						vals[ i ] = this._trimAlignValue( newValues[ i ] );
						this._change( null, i );
					}
					this._refreshValue();
				} else {
					if ( this._hasMultipleValues() ) {
						return this._values( index );
					} else {
						return this.value();
					}
				}
			} else {
				return this._values();
			}
		},
	
		_setOption: function( key, value ) {
			var i,
				valsLength = 0;
	
			if ( key === "range" && this.options.range === true ) {
				if ( value === "min" ) {
					this.options.value = this._values( 0 );
					this.options.values = null;
				} else if ( value === "max" ) {
					this.options.value = this._values( this.options.values.length - 1 );
					this.options.values = null;
				}
			}
	
			if ( $.isArray( this.options.values ) ) {
				valsLength = this.options.values.length;
			}
	
			this._super( key, value );
	
			switch ( key ) {
				case "orientation":
					this._detectOrientation();
					this._removeClass( "ui-slider-horizontal ui-slider-vertical" )
						._addClass( "ui-slider-" + this.orientation );
					this._refreshValue();
					if ( this.options.range ) {
						this._refreshRange( value );
					}
	
					// Reset positioning from previous orientation
					this.handles.css( value === "horizontal" ? "bottom" : "left", "" );
					break;
				case "value":
					this._animateOff = true;
					this._refreshValue();
					this._change( null, 0 );
					this._animateOff = false;
					break;
				case "values":
					this._animateOff = true;
					this._refreshValue();
	
					// Start from the last handle to prevent unreachable handles (#9046)
					for ( i = valsLength - 1; i >= 0; i-- ) {
						this._change( null, i );
					}
					this._animateOff = false;
					break;
				case "step":
				case "min":
				case "max":
					this._animateOff = true;
					this._calculateNewMax();
					this._refreshValue();
					this._animateOff = false;
					break;
				case "range":
					this._animateOff = true;
					this._refresh();
					this._animateOff = false;
					break;
			}
		},
	
		_setOptionDisabled: function( value ) {
			this._super( value );
	
			this._toggleClass( null, "ui-state-disabled", !!value );
		},
	
		//internal value getter
		// _value() returns value trimmed by min and max, aligned by step
		_value: function() {
			var val = this.options.value;
			val = this._trimAlignValue( val );
	
			return val;
		},
	
		//internal values getter
		// _values() returns array of values trimmed by min and max, aligned by step
		// _values( index ) returns single value trimmed by min and max, aligned by step
		_values: function( index ) {
			var val,
				vals,
				i;
	
			if ( arguments.length ) {
				val = this.options.values[ index ];
				val = this._trimAlignValue( val );
	
				return val;
			} else if ( this._hasMultipleValues() ) {
	
				// .slice() creates a copy of the array
				// this copy gets trimmed by min and max and then returned
				vals = this.options.values.slice();
				for ( i = 0; i < vals.length; i += 1 ) {
					vals[ i ] = this._trimAlignValue( vals[ i ] );
				}
	
				return vals;
			} else {
				return [];
			}
		},
	
		// Returns the step-aligned value that val is closest to, between (inclusive) min and max
		_trimAlignValue: function( val ) {
			if ( val <= this._valueMin() ) {
				return this._valueMin();
			}
			if ( val >= this._valueMax() ) {
				return this._valueMax();
			}
			var step = ( this.options.step > 0 ) ? this.options.step : 1,
				valModStep = ( val - this._valueMin() ) % step,
				alignValue = val - valModStep;
	
			if ( Math.abs( valModStep ) * 2 >= step ) {
				alignValue += ( valModStep > 0 ) ? step : ( -step );
			}
	
			// Since JavaScript has problems with large floats, round
			// the final value to 5 digits after the decimal point (see #4124)
			return parseFloat( alignValue.toFixed( 5 ) );
		},
	
		_calculateNewMax: function() {
			var max = this.options.max,
				min = this._valueMin(),
				step = this.options.step,
				aboveMin = Math.round( ( max - min ) / step ) * step;
			max = aboveMin + min;
			if ( max > this.options.max ) {
	
				//If max is not divisible by step, rounding off may increase its value
				max -= step;
			}
			this.max = parseFloat( max.toFixed( this._precision() ) );
		},
	
		_precision: function() {
			var precision = this._precisionOf( this.options.step );
			if ( this.options.min !== null ) {
				precision = Math.max( precision, this._precisionOf( this.options.min ) );
			}
			return precision;
		},
	
		_precisionOf: function( num ) {
			var str = num.toString(),
				decimal = str.indexOf( "." );
			return decimal === -1 ? 0 : str.length - decimal - 1;
		},
	
		_valueMin: function() {
			return this.options.min;
		},
	
		_valueMax: function() {
			return this.max;
		},
	
		_refreshRange: function( orientation ) {
			if ( orientation === "vertical" ) {
				this.range.css( { "width": "", "left": "" } );
			}
			if ( orientation === "horizontal" ) {
				this.range.css( { "height": "", "bottom": "" } );
			}
		},
	
		_refreshValue: function() {
			var lastValPercent, valPercent, value, valueMin, valueMax,
				oRange = this.options.range,
				o = this.options,
				that = this,
				animate = ( !this._animateOff ) ? o.animate : false,
				_set = {};
	
			if ( this._hasMultipleValues() ) {
				this.handles.each( function( i ) {
					valPercent = ( that.values( i ) - that._valueMin() ) / ( that._valueMax() -
						that._valueMin() ) * 100;
					_set[ that.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%";
					$( this ).stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate );
					if ( that.options.range === true ) {
						if ( that.orientation === "horizontal" ) {
							if ( i === 0 ) {
								that.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( {
									left: valPercent + "%"
								}, o.animate );
							}
							if ( i === 1 ) {
								that.range[ animate ? "animate" : "css" ]( {
									width: ( valPercent - lastValPercent ) + "%"
								}, {
									queue: false,
									duration: o.animate
								} );
							}
						} else {
							if ( i === 0 ) {
								that.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( {
									bottom: ( valPercent ) + "%"
								}, o.animate );
							}
							if ( i === 1 ) {
								that.range[ animate ? "animate" : "css" ]( {
									height: ( valPercent - lastValPercent ) + "%"
								}, {
									queue: false,
									duration: o.animate
								} );
							}
						}
					}
					lastValPercent = valPercent;
				} );
			} else {
				value = this.value();
				valueMin = this._valueMin();
				valueMax = this._valueMax();
				valPercent = ( valueMax !== valueMin ) ?
						( value - valueMin ) / ( valueMax - valueMin ) * 100 :
						0;
				_set[ this.orientation === "horizontal" ? "left" : "bottom" ] = valPercent + "%";
				this.handle.stop( 1, 1 )[ animate ? "animate" : "css" ]( _set, o.animate );
	
				if ( oRange === "min" && this.orientation === "horizontal" ) {
					this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( {
						width: valPercent + "%"
					}, o.animate );
				}
				if ( oRange === "max" && this.orientation === "horizontal" ) {
					this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( {
						width: ( 100 - valPercent ) + "%"
					}, o.animate );
				}
				if ( oRange === "min" && this.orientation === "vertical" ) {
					this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( {
						height: valPercent + "%"
					}, o.animate );
				}
				if ( oRange === "max" && this.orientation === "vertical" ) {
					this.range.stop( 1, 1 )[ animate ? "animate" : "css" ]( {
						height: ( 100 - valPercent ) + "%"
					}, o.animate );
				}
			}
		},
	
		_handleEvents: {
			keydown: function( event ) {
				var allowed, curVal, newVal, step,
					index = $( event.target ).data( "ui-slider-handle-index" );
	
				switch ( event.keyCode ) {
					case $.ui.keyCode.HOME:
					case $.ui.keyCode.END:
					case $.ui.keyCode.PAGE_UP:
					case $.ui.keyCode.PAGE_DOWN:
					case $.ui.keyCode.UP:
					case $.ui.keyCode.RIGHT:
					case $.ui.keyCode.DOWN:
					case $.ui.keyCode.LEFT:
						event.preventDefault();
						if ( !this._keySliding ) {
							this._keySliding = true;
							this._addClass( $( event.target ), null, "ui-state-active" );
							allowed = this._start( event, index );
							if ( allowed === false ) {
								return;
							}
						}
						break;
				}
	
				step = this.options.step;
				if ( this._hasMultipleValues() ) {
					curVal = newVal = this.values( index );
				} else {
					curVal = newVal = this.value();
				}
	
				switch ( event.keyCode ) {
					case $.ui.keyCode.HOME:
						newVal = this._valueMin();
						break;
					case $.ui.keyCode.END:
						newVal = this._valueMax();
						break;
					case $.ui.keyCode.PAGE_UP:
						newVal = this._trimAlignValue(
							curVal + ( ( this._valueMax() - this._valueMin() ) / this.numPages )
						);
						break;
					case $.ui.keyCode.PAGE_DOWN:
						newVal = this._trimAlignValue(
							curVal - ( ( this._valueMax() - this._valueMin() ) / this.numPages ) );
						break;
					case $.ui.keyCode.UP:
					case $.ui.keyCode.RIGHT:
						if ( curVal === this._valueMax() ) {
							return;
						}
						newVal = this._trimAlignValue( curVal + step );
						break;
					case $.ui.keyCode.DOWN:
					case $.ui.keyCode.LEFT:
						if ( curVal === this._valueMin() ) {
							return;
						}
						newVal = this._trimAlignValue( curVal - step );
						break;
				}
	
				this._slide( event, index, newVal );
			},
			keyup: function( event ) {
				var index = $( event.target ).data( "ui-slider-handle-index" );
	
				if ( this._keySliding ) {
					this._keySliding = false;
					this._stop( event, index );
					this._change( event, index );
					this._removeClass( $( event.target ), null, "ui-state-active" );
				}
			}
		}
	} );
	
	} ) );


/***/ }),
/* 21 */
/***/ (function(module, exports, __webpack_require__) {

	var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
	 * jQuery UI Keycode 1.12.1
	 * http://jqueryui.com
	 *
	 * Copyright jQuery Foundation and other contributors
	 * Released under the MIT license.
	 * http://jquery.org/license
	 */
	
	//>>label: Keycode
	//>>group: Core
	//>>description: Provide keycodes as keynames
	//>>docs: http://api.jqueryui.com/jQuery.ui.keyCode/
	
	( function( factory ) {
		if ( true ) {
	
			// AMD. Register as an anonymous module.
			!(__WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(7), __webpack_require__(13) ], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
		} else {
	
			// Browser globals
			factory( jQuery );
		}
	} ( function( $ ) {
	return $.ui.keyCode = {
		BACKSPACE: 8,
		COMMA: 188,
		DELETE: 46,
		DOWN: 40,
		END: 35,
		ENTER: 13,
		ESCAPE: 27,
		HOME: 36,
		LEFT: 37,
		PAGE_DOWN: 34,
		PAGE_UP: 33,
		PERIOD: 190,
		RIGHT: 39,
		SPACE: 32,
		TAB: 9,
		UP: 38
	};
	
	} ) );


/***/ }),
/* 22 */
/***/ (function(module, exports, __webpack_require__) {

	var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
	 * jQuery UI Dialog 1.12.1
	 * http://jqueryui.com
	 *
	 * Copyright jQuery Foundation and other contributors
	 * Released under the MIT license.
	 * http://jquery.org/license
	 */
	
	//>>label: Dialog
	//>>group: Widgets
	//>>description: Displays customizable dialog windows.
	//>>docs: http://api.jqueryui.com/dialog/
	//>>demos: http://jqueryui.com/dialog/
	//>>css.structure: ../../themes/base/core.css
	//>>css.structure: ../../themes/base/dialog.css
	//>>css.theme: ../../themes/base/theme.css
	
	( function( factory ) {
		if ( true ) {
	
			// AMD. Register as an anonymous module.
			!(__WEBPACK_AMD_DEFINE_ARRAY__ = [
				__webpack_require__(7),
				__webpack_require__(23),
				__webpack_require__(10),
				__webpack_require__(11),
				__webpack_require__(30),
				__webpack_require__(32),
				__webpack_require__(21),
				__webpack_require__(35),
				__webpack_require__(19),
				__webpack_require__(17),
				__webpack_require__(33),
				__webpack_require__(34),
				__webpack_require__(13),
				__webpack_require__(14)
			], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
		} else {
	
			// Browser globals
			factory( jQuery );
		}
	}( function( $ ) {
	
	$.widget( "ui.dialog", {
		version: "1.12.1",
		options: {
			appendTo: "body",
			autoOpen: true,
			buttons: [],
			classes: {
				"ui-dialog": "ui-corner-all",
				"ui-dialog-titlebar": "ui-corner-all"
			},
			closeOnEscape: true,
			closeText: "Close",
			draggable: true,
			hide: null,
			height: "auto",
			maxHeight: null,
			maxWidth: null,
			minHeight: 150,
			minWidth: 150,
			modal: false,
			position: {
				my: "center",
				at: "center",
				of: window,
				collision: "fit",
	
				// Ensure the titlebar is always visible
				using: function( pos ) {
					var topOffset = $( this ).css( pos ).offset().top;
					if ( topOffset < 0 ) {
						$( this ).css( "top", pos.top - topOffset );
					}
				}
			},
			resizable: true,
			show: null,
			title: null,
			width: 300,
	
			// Callbacks
			beforeClose: null,
			close: null,
			drag: null,
			dragStart: null,
			dragStop: null,
			focus: null,
			open: null,
			resize: null,
			resizeStart: null,
			resizeStop: null
		},
	
		sizeRelatedOptions: {
			buttons: true,
			height: true,
			maxHeight: true,
			maxWidth: true,
			minHeight: true,
			minWidth: true,
			width: true
		},
	
		resizableRelatedOptions: {
			maxHeight: true,
			maxWidth: true,
			minHeight: true,
			minWidth: true
		},
	
		_create: function() {
			this.originalCss = {
				display: this.element[ 0 ].style.display,
				width: this.element[ 0 ].style.width,
				minHeight: this.element[ 0 ].style.minHeight,
				maxHeight: this.element[ 0 ].style.maxHeight,
				height: this.element[ 0 ].style.height
			};
			this.originalPosition = {
				parent: this.element.parent(),
				index: this.element.parent().children().index( this.element )
			};
			this.originalTitle = this.element.attr( "title" );
			if ( this.options.title == null && this.originalTitle != null ) {
				this.options.title = this.originalTitle;
			}
	
			// Dialogs can't be disabled
			if ( this.options.disabled ) {
				this.options.disabled = false;
			}
	
			this._createWrapper();
	
			this.element
				.show()
				.removeAttr( "title" )
				.appendTo( this.uiDialog );
	
			this._addClass( "ui-dialog-content", "ui-widget-content" );
	
			this._createTitlebar();
			this._createButtonPane();
	
			if ( this.options.draggable && $.fn.draggable ) {
				this._makeDraggable();
			}
			if ( this.options.resizable && $.fn.resizable ) {
				this._makeResizable();
			}
	
			this._isOpen = false;
	
			this._trackFocus();
		},
	
		_init: function() {
			if ( this.options.autoOpen ) {
				this.open();
			}
		},
	
		_appendTo: function() {
			var element = this.options.appendTo;
			if ( element && ( element.jquery || element.nodeType ) ) {
				return $( element );
			}
			return this.document.find( element || "body" ).eq( 0 );
		},
	
		_destroy: function() {
			var next,
				originalPosition = this.originalPosition;
	
			this._untrackInstance();
			this._destroyOverlay();
	
			this.element
				.removeUniqueId()
				.css( this.originalCss )
	
				// Without detaching first, the following becomes really slow
				.detach();
	
			this.uiDialog.remove();
	
			if ( this.originalTitle ) {
				this.element.attr( "title", this.originalTitle );
			}
	
			next = originalPosition.parent.children().eq( originalPosition.index );
	
			// Don't try to place the dialog next to itself (#8613)
			if ( next.length && next[ 0 ] !== this.element[ 0 ] ) {
				next.before( this.element );
			} else {
				originalPosition.parent.append( this.element );
			}
		},
	
		widget: function() {
			return this.uiDialog;
		},
	
		disable: $.noop,
		enable: $.noop,
	
		close: function( event ) {
			var that = this;
	
			if ( !this._isOpen || this._trigger( "beforeClose", event ) === false ) {
				return;
			}
	
			this._isOpen = false;
			this._focusedElement = null;
			this._destroyOverlay();
			this._untrackInstance();
	
			if ( !this.opener.filter( ":focusable" ).trigger( "focus" ).length ) {
	
				// Hiding a focused element doesn't trigger blur in WebKit
				// so in case we have nothing to focus on, explicitly blur the active element
				// https://bugs.webkit.org/show_bug.cgi?id=47182
				$.ui.safeBlur( $.ui.safeActiveElement( this.document[ 0 ] ) );
			}
	
			this._hide( this.uiDialog, this.options.hide, function() {
				that._trigger( "close", event );
			} );
		},
	
		isOpen: function() {
			return this._isOpen;
		},
	
		moveToTop: function() {
			this._moveToTop();
		},
	
		_moveToTop: function( event, silent ) {
			var moved = false,
				zIndices = this.uiDialog.siblings( ".ui-front:visible" ).map( function() {
					return +$( this ).css( "z-index" );
				} ).get(),
				zIndexMax = Math.max.apply( null, zIndices );
	
			if ( zIndexMax >= +this.uiDialog.css( "z-index" ) ) {
				this.uiDialog.css( "z-index", zIndexMax + 1 );
				moved = true;
			}
	
			if ( moved && !silent ) {
				this._trigger( "focus", event );
			}
			return moved;
		},
	
		open: function() {
			var that = this;
			if ( this._isOpen ) {
				if ( this._moveToTop() ) {
					this._focusTabbable();
				}
				return;
			}
	
			this._isOpen = true;
			this.opener = $( $.ui.safeActiveElement( this.document[ 0 ] ) );
	
			this._size();
			this._position();
			this._createOverlay();
			this._moveToTop( null, true );
	
			// Ensure the overlay is moved to the top with the dialog, but only when
			// opening. The overlay shouldn't move after the dialog is open so that
			// modeless dialogs opened after the modal dialog stack properly.
			if ( this.overlay ) {
				this.overlay.css( "z-index", this.uiDialog.css( "z-index" ) - 1 );
			}
	
			this._show( this.uiDialog, this.options.show, function() {
				that._focusTabbable();
				that._trigger( "focus" );
			} );
	
			// Track the dialog immediately upon openening in case a focus event
			// somehow occurs outside of the dialog before an element inside the
			// dialog is focused (#10152)
			this._makeFocusTarget();
	
			this._trigger( "open" );
		},
	
		_focusTabbable: function() {
	
			// Set focus to the first match:
			// 1. An element that was focused previously
			// 2. First element inside the dialog matching [autofocus]
			// 3. Tabbable element inside the content element
			// 4. Tabbable element inside the buttonpane
			// 5. The close button
			// 6. The dialog itself
			var hasFocus = this._focusedElement;
			if ( !hasFocus ) {
				hasFocus = this.element.find( "[autofocus]" );
			}
			if ( !hasFocus.length ) {
				hasFocus = this.element.find( ":tabbable" );
			}
			if ( !hasFocus.length ) {
				hasFocus = this.uiDialogButtonPane.find( ":tabbable" );
			}
			if ( !hasFocus.length ) {
				hasFocus = this.uiDialogTitlebarClose.filter( ":tabbable" );
			}
			if ( !hasFocus.length ) {
				hasFocus = this.uiDialog;
			}
			hasFocus.eq( 0 ).trigger( "focus" );
		},
	
		_keepFocus: function( event ) {
			function checkFocus() {
				var activeElement = $.ui.safeActiveElement( this.document[ 0 ] ),
					isActive = this.uiDialog[ 0 ] === activeElement ||
						$.contains( this.uiDialog[ 0 ], activeElement );
				if ( !isActive ) {
					this._focusTabbable();
				}
			}
			event.preventDefault();
			checkFocus.call( this );
	
			// support: IE
			// IE <= 8 doesn't prevent moving focus even with event.preventDefault()
			// so we check again later
			this._delay( checkFocus );
		},
	
		_createWrapper: function() {
			this.uiDialog = $( "<div>" )
				.hide()
				.attr( {
	
					// Setting tabIndex makes the div focusable
					tabIndex: -1,
					role: "dialog"
				} )
				.appendTo( this._appendTo() );
	
			this._addClass( this.uiDialog, "ui-dialog", "ui-widget ui-widget-content ui-front" );
			this._on( this.uiDialog, {
				keydown: function( event ) {
					if ( this.options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode &&
							event.keyCode === $.ui.keyCode.ESCAPE ) {
						event.preventDefault();
						this.close( event );
						return;
					}
	
					// Prevent tabbing out of dialogs
					if ( event.keyCode !== $.ui.keyCode.TAB || event.isDefaultPrevented() ) {
						return;
					}
					var tabbables = this.uiDialog.find( ":tabbable" ),
						first = tabbables.filter( ":first" ),
						last = tabbables.filter( ":last" );
	
					if ( ( event.target === last[ 0 ] || event.target === this.uiDialog[ 0 ] ) &&
							!event.shiftKey ) {
						this._delay( function() {
							first.trigger( "focus" );
						} );
						event.preventDefault();
					} else if ( ( event.target === first[ 0 ] ||
							event.target === this.uiDialog[ 0 ] ) && event.shiftKey ) {
						this._delay( function() {
							last.trigger( "focus" );
						} );
						event.preventDefault();
					}
				},
				mousedown: function( event ) {
					if ( this._moveToTop( event ) ) {
						this._focusTabbable();
					}
				}
			} );
	
			// We assume that any existing aria-describedby attribute means
			// that the dialog content is marked up properly
			// otherwise we brute force the content as the description
			if ( !this.element.find( "[aria-describedby]" ).length ) {
				this.uiDialog.attr( {
					"aria-describedby": this.element.uniqueId().attr( "id" )
				} );
			}
		},
	
		_createTitlebar: function() {
			var uiDialogTitle;
	
			this.uiDialogTitlebar = $( "<div>" );
			this._addClass( this.uiDialogTitlebar,
				"ui-dialog-titlebar", "ui-widget-header ui-helper-clearfix" );
			this._on( this.uiDialogTitlebar, {
				mousedown: function( event ) {
	
					// Don't prevent click on close button (#8838)
					// Focusing a dialog that is partially scrolled out of view
					// causes the browser to scroll it into view, preventing the click event
					if ( !$( event.target ).closest( ".ui-dialog-titlebar-close" ) ) {
	
						// Dialog isn't getting focus when dragging (#8063)
						this.uiDialog.trigger( "focus" );
					}
				}
			} );
	
			// Support: IE
			// Use type="button" to prevent enter keypresses in textboxes from closing the
			// dialog in IE (#9312)
			this.uiDialogTitlebarClose = $( "<button type='button'></button>" )
				.button( {
					label: $( "<a>" ).text( this.options.closeText ).html(),
					icon: "ui-icon-closethick",
					showLabel: false
				} )
				.appendTo( this.uiDialogTitlebar );
	
			this._addClass( this.uiDialogTitlebarClose, "ui-dialog-titlebar-close" );
			this._on( this.uiDialogTitlebarClose, {
				click: function( event ) {
					event.preventDefault();
					this.close( event );
				}
			} );
	
			uiDialogTitle = $( "<span>" ).uniqueId().prependTo( this.uiDialogTitlebar );
			this._addClass( uiDialogTitle, "ui-dialog-title" );
			this._title( uiDialogTitle );
	
			this.uiDialogTitlebar.prependTo( this.uiDialog );
	
			this.uiDialog.attr( {
				"aria-labelledby": uiDialogTitle.attr( "id" )
			} );
		},
	
		_title: function( title ) {
			if ( this.options.title ) {
				title.text( this.options.title );
			} else {
				title.html( "&#160;" );
			}
		},
	
		_createButtonPane: function() {
			this.uiDialogButtonPane = $( "<div>" );
			this._addClass( this.uiDialogButtonPane, "ui-dialog-buttonpane",
				"ui-widget-content ui-helper-clearfix" );
	
			this.uiButtonSet = $( "<div>" )
				.appendTo( this.uiDialogButtonPane );
			this._addClass( this.uiButtonSet, "ui-dialog-buttonset" );
	
			this._createButtons();
		},
	
		_createButtons: function() {
			var that = this,
				buttons = this.options.buttons;
	
			// If we already have a button pane, remove it
			this.uiDialogButtonPane.remove();
			this.uiButtonSet.empty();
	
			if ( $.isEmptyObject( buttons ) || ( $.isArray( buttons ) && !buttons.length ) ) {
				this._removeClass( this.uiDialog, "ui-dialog-buttons" );
				return;
			}
	
			$.each( buttons, function( name, props ) {
				var click, buttonOptions;
				props = $.isFunction( props ) ?
					{ click: props, text: name } :
					props;
	
				// Default to a non-submitting button
				props = $.extend( { type: "button" }, props );
	
				// Change the context for the click callback to be the main element
				click = props.click;
				buttonOptions = {
					icon: props.icon,
					iconPosition: props.iconPosition,
					showLabel: props.showLabel,
	
					// Deprecated options
					icons: props.icons,
					text: props.text
				};
	
				delete props.click;
				delete props.icon;
				delete props.iconPosition;
				delete props.showLabel;
	
				// Deprecated options
				delete props.icons;
				if ( typeof props.text === "boolean" ) {
					delete props.text;
				}
	
				$( "<button></button>", props )
					.button( buttonOptions )
					.appendTo( that.uiButtonSet )
					.on( "click", function() {
						click.apply( that.element[ 0 ], arguments );
					} );
			} );
			this._addClass( this.uiDialog, "ui-dialog-buttons" );
			this.uiDialogButtonPane.appendTo( this.uiDialog );
		},
	
		_makeDraggable: function() {
			var that = this,
				options = this.options;
	
			function filteredUi( ui ) {
				return {
					position: ui.position,
					offset: ui.offset
				};
			}
	
			this.uiDialog.draggable( {
				cancel: ".ui-dialog-content, .ui-dialog-titlebar-close",
				handle: ".ui-dialog-titlebar",
				containment: "document",
				start: function( event, ui ) {
					that._addClass( $( this ), "ui-dialog-dragging" );
					that._blockFrames();
					that._trigger( "dragStart", event, filteredUi( ui ) );
				},
				drag: function( event, ui ) {
					that._trigger( "drag", event, filteredUi( ui ) );
				},
				stop: function( event, ui ) {
					var left = ui.offset.left - that.document.scrollLeft(),
						top = ui.offset.top - that.document.scrollTop();
	
					options.position = {
						my: "left top",
						at: "left" + ( left >= 0 ? "+" : "" ) + left + " " +
							"top" + ( top >= 0 ? "+" : "" ) + top,
						of: that.window
					};
					that._removeClass( $( this ), "ui-dialog-dragging" );
					that._unblockFrames();
					that._trigger( "dragStop", event, filteredUi( ui ) );
				}
			} );
		},
	
		_makeResizable: function() {
			var that = this,
				options = this.options,
				handles = options.resizable,
	
				// .ui-resizable has position: relative defined in the stylesheet
				// but dialogs have to use absolute or fixed positioning
				position = this.uiDialog.css( "position" ),
				resizeHandles = typeof handles === "string" ?
					handles :
					"n,e,s,w,se,sw,ne,nw";
	
			function filteredUi( ui ) {
				return {
					originalPosition: ui.originalPosition,
					originalSize: ui.originalSize,
					position: ui.position,
					size: ui.size
				};
			}
	
			this.uiDialog.resizable( {
				cancel: ".ui-dialog-content",
				containment: "document",
				alsoResize: this.element,
				maxWidth: options.maxWidth,
				maxHeight: options.maxHeight,
				minWidth: options.minWidth,
				minHeight: this._minHeight(),
				handles: resizeHandles,
				start: function( event, ui ) {
					that._addClass( $( this ), "ui-dialog-resizing" );
					that._blockFrames();
					that._trigger( "resizeStart", event, filteredUi( ui ) );
				},
				resize: function( event, ui ) {
					that._trigger( "resize", event, filteredUi( ui ) );
				},
				stop: function( event, ui ) {
					var offset = that.uiDialog.offset(),
						left = offset.left - that.document.scrollLeft(),
						top = offset.top - that.document.scrollTop();
	
					options.height = that.uiDialog.height();
					options.width = that.uiDialog.width();
					options.position = {
						my: "left top",
						at: "left" + ( left >= 0 ? "+" : "" ) + left + " " +
							"top" + ( top >= 0 ? "+" : "" ) + top,
						of: that.window
					};
					that._removeClass( $( this ), "ui-dialog-resizing" );
					that._unblockFrames();
					that._trigger( "resizeStop", event, filteredUi( ui ) );
				}
			} )
				.css( "position", position );
		},
	
		_trackFocus: function() {
			this._on( this.widget(), {
				focusin: function( event ) {
					this._makeFocusTarget();
					this._focusedElement = $( event.target );
				}
			} );
		},
	
		_makeFocusTarget: function() {
			this._untrackInstance();
			this._trackingInstances().unshift( this );
		},
	
		_untrackInstance: function() {
			var instances = this._trackingInstances(),
				exists = $.inArray( this, instances );
			if ( exists !== -1 ) {
				instances.splice( exists, 1 );
			}
		},
	
		_trackingInstances: function() {
			var instances = this.document.data( "ui-dialog-instances" );
			if ( !instances ) {
				instances = [];
				this.document.data( "ui-dialog-instances", instances );
			}
			return instances;
		},
	
		_minHeight: function() {
			var options = this.options;
	
			return options.height === "auto" ?
				options.minHeight :
				Math.min( options.minHeight, options.height );
		},
	
		_position: function() {
	
			// Need to show the dialog to get the actual offset in the position plugin
			var isVisible = this.uiDialog.is( ":visible" );
			if ( !isVisible ) {
				this.uiDialog.show();
			}
			this.uiDialog.position( this.options.position );
			if ( !isVisible ) {
				this.uiDialog.hide();
			}
		},
	
		_setOptions: function( options ) {
			var that = this,
				resize = false,
				resizableOptions = {};
	
			$.each( options, function( key, value ) {
				that._setOption( key, value );
	
				if ( key in that.sizeRelatedOptions ) {
					resize = true;
				}
				if ( key in that.resizableRelatedOptions ) {
					resizableOptions[ key ] = value;
				}
			} );
	
			if ( resize ) {
				this._size();
				this._position();
			}
			if ( this.uiDialog.is( ":data(ui-resizable)" ) ) {
				this.uiDialog.resizable( "option", resizableOptions );
			}
		},
	
		_setOption: function( key, value ) {
			var isDraggable, isResizable,
				uiDialog = this.uiDialog;
	
			if ( key === "disabled" ) {
				return;
			}
	
			this._super( key, value );
	
			if ( key === "appendTo" ) {
				this.uiDialog.appendTo( this._appendTo() );
			}
	
			if ( key === "buttons" ) {
				this._createButtons();
			}
	
			if ( key === "closeText" ) {
				this.uiDialogTitlebarClose.button( {
	
					// Ensure that we always pass a string
					label: $( "<a>" ).text( "" + this.options.closeText ).html()
				} );
			}
	
			if ( key === "draggable" ) {
				isDraggable = uiDialog.is( ":data(ui-draggable)" );
				if ( isDraggable && !value ) {
					uiDialog.draggable( "destroy" );
				}
	
				if ( !isDraggable && value ) {
					this._makeDraggable();
				}
			}
	
			if ( key === "position" ) {
				this._position();
			}
	
			if ( key === "resizable" ) {
	
				// currently resizable, becoming non-resizable
				isResizable = uiDialog.is( ":data(ui-resizable)" );
				if ( isResizable && !value ) {
					uiDialog.resizable( "destroy" );
				}
	
				// Currently resizable, changing handles
				if ( isResizable && typeof value === "string" ) {
					uiDialog.resizable( "option", "handles", value );
				}
	
				// Currently non-resizable, becoming resizable
				if ( !isResizable && value !== false ) {
					this._makeResizable();
				}
			}
	
			if ( key === "title" ) {
				this._title( this.uiDialogTitlebar.find( ".ui-dialog-title" ) );
			}
		},
	
		_size: function() {
	
			// If the user has resized the dialog, the .ui-dialog and .ui-dialog-content
			// divs will both have width and height set, so we need to reset them
			var nonContentHeight, minContentHeight, maxContentHeight,
				options = this.options;
	
			// Reset content sizing
			this.element.show().css( {
				width: "auto",
				minHeight: 0,
				maxHeight: "none",
				height: 0
			} );
	
			if ( options.minWidth > options.width ) {
				options.width = options.minWidth;
			}
	
			// Reset wrapper sizing
			// determine the height of all the non-content elements
			nonContentHeight = this.uiDialog.css( {
				height: "auto",
				width: options.width
			} )
				.outerHeight();
			minContentHeight = Math.max( 0, options.minHeight - nonContentHeight );
			maxContentHeight = typeof options.maxHeight === "number" ?
				Math.max( 0, options.maxHeight - nonContentHeight ) :
				"none";
	
			if ( options.height === "auto" ) {
				this.element.css( {
					minHeight: minContentHeight,
					maxHeight: maxContentHeight,
					height: "auto"
				} );
			} else {
				this.element.height( Math.max( 0, options.height - nonContentHeight ) );
			}
	
			if ( this.uiDialog.is( ":data(ui-resizable)" ) ) {
				this.uiDialog.resizable( "option", "minHeight", this._minHeight() );
			}
		},
	
		_blockFrames: function() {
			this.iframeBlocks = this.document.find( "iframe" ).map( function() {
				var iframe = $( this );
	
				return $( "<div>" )
					.css( {
						position: "absolute",
						width: iframe.outerWidth(),
						height: iframe.outerHeight()
					} )
					.appendTo( iframe.parent() )
					.offset( iframe.offset() )[ 0 ];
			} );
		},
	
		_unblockFrames: function() {
			if ( this.iframeBlocks ) {
				this.iframeBlocks.remove();
				delete this.iframeBlocks;
			}
		},
	
		_allowInteraction: function( event ) {
			if ( $( event.target ).closest( ".ui-dialog" ).length ) {
				return true;
			}
	
			// TODO: Remove hack when datepicker implements
			// the .ui-front logic (#8989)
			return !!$( event.target ).closest( ".ui-datepicker" ).length;
		},
	
		_createOverlay: function() {
			if ( !this.options.modal ) {
				return;
			}
	
			// We use a delay in case the overlay is created from an
			// event that we're going to be cancelling (#2804)
			var isOpening = true;
			this._delay( function() {
				isOpening = false;
			} );
	
			if ( !this.document.data( "ui-dialog-overlays" ) ) {
	
				// Prevent use of anchors and inputs
				// Using _on() for an event handler shared across many instances is
				// safe because the dialogs stack and must be closed in reverse order
				this._on( this.document, {
					focusin: function( event ) {
						if ( isOpening ) {
							return;
						}
	
						if ( !this._allowInteraction( event ) ) {
							event.preventDefault();
							this._trackingInstances()[ 0 ]._focusTabbable();
						}
					}
				} );
			}
	
			this.overlay = $( "<div>" )
				.appendTo( this._appendTo() );
	
			this._addClass( this.overlay, null, "ui-widget-overlay ui-front" );
			this._on( this.overlay, {
				mousedown: "_keepFocus"
			} );
			this.document.data( "ui-dialog-overlays",
				( this.document.data( "ui-dialog-overlays" ) || 0 ) + 1 );
		},
	
		_destroyOverlay: function() {
			if ( !this.options.modal ) {
				return;
			}
	
			if ( this.overlay ) {
				var overlays = this.document.data( "ui-dialog-overlays" ) - 1;
	
				if ( !overlays ) {
					this._off( this.document, "focusin" );
					this.document.removeData( "ui-dialog-overlays" );
				} else {
					this.document.data( "ui-dialog-overlays", overlays );
				}
	
				this.overlay.remove();
				this.overlay = null;
			}
		}
	} );
	
	// DEPRECATED
	// TODO: switch return back to widget declaration at top of file when this is removed
	if ( $.uiBackCompat !== false ) {
	
		// Backcompat for dialogClass option
		$.widget( "ui.dialog", $.ui.dialog, {
			options: {
				dialogClass: ""
			},
			_createWrapper: function() {
				this._super();
				this.uiDialog.addClass( this.options.dialogClass );
			},
			_setOption: function( key, value ) {
				if ( key === "dialogClass" ) {
					this.uiDialog
						.removeClass( this.options.dialogClass )
						.addClass( value );
				}
				this._superApply( arguments );
			}
		} );
	}
	
	return $.ui.dialog;
	
	} ) );


/***/ }),
/* 23 */
/***/ (function(module, exports, __webpack_require__) {

	var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
	 * jQuery UI Button 1.12.1
	 * http://jqueryui.com
	 *
	 * Copyright jQuery Foundation and other contributors
	 * Released under the MIT license.
	 * http://jquery.org/license
	 */
	
	//>>label: Button
	//>>group: Widgets
	//>>description: Enhances a form with themeable buttons.
	//>>docs: http://api.jqueryui.com/button/
	//>>demos: http://jqueryui.com/button/
	//>>css.structure: ../../themes/base/core.css
	//>>css.structure: ../../themes/base/button.css
	//>>css.theme: ../../themes/base/theme.css
	
	( function( factory ) {
		if ( true ) {
	
			// AMD. Register as an anonymous module.
			!(__WEBPACK_AMD_DEFINE_ARRAY__ = [
				__webpack_require__(7),
	
				// These are only for backcompat
				// TODO: Remove after 1.12
				__webpack_require__(24),
				__webpack_require__(25),
	
				__webpack_require__(21),
				__webpack_require__(14)
			], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
		} else {
	
			// Browser globals
			factory( jQuery );
		}
	}( function( $ ) {
	
	$.widget( "ui.button", {
		version: "1.12.1",
		defaultElement: "<button>",
		options: {
			classes: {
				"ui-button": "ui-corner-all"
			},
			disabled: null,
			icon: null,
			iconPosition: "beginning",
			label: null,
			showLabel: true
		},
	
		_getCreateOptions: function() {
			var disabled,
	
				// This is to support cases like in jQuery Mobile where the base widget does have
				// an implementation of _getCreateOptions
				options = this._super() || {};
	
			this.isInput = this.element.is( "input" );
	
			disabled = this.element[ 0 ].disabled;
			if ( disabled != null ) {
				options.disabled = disabled;
			}
	
			this.originalLabel = this.isInput ? this.element.val() : this.element.html();
			if ( this.originalLabel ) {
				options.label = this.originalLabel;
			}
	
			return options;
		},
	
		_create: function() {
			if ( !this.option.showLabel & !this.options.icon ) {
				this.options.showLabel = true;
			}
	
			// We have to check the option again here even though we did in _getCreateOptions,
			// because null may have been passed on init which would override what was set in
			// _getCreateOptions
			if ( this.options.disabled == null ) {
				this.options.disabled = this.element[ 0 ].disabled || false;
			}
	
			this.hasTitle = !!this.element.attr( "title" );
	
			// Check to see if the label needs to be set or if its already correct
			if ( this.options.label && this.options.label !== this.originalLabel ) {
				if ( this.isInput ) {
					this.element.val( this.options.label );
				} else {
					this.element.html( this.options.label );
				}
			}
			this._addClass( "ui-button", "ui-widget" );
			this._setOption( "disabled", this.options.disabled );
			this._enhance();
	
			if ( this.element.is( "a" ) ) {
				this._on( {
					"keyup": function( event ) {
						if ( event.keyCode === $.ui.keyCode.SPACE ) {
							event.preventDefault();
	
							// Support: PhantomJS <= 1.9, IE 8 Only
							// If a native click is available use it so we actually cause navigation
							// otherwise just trigger a click event
							if ( this.element[ 0 ].click ) {
								this.element[ 0 ].click();
							} else {
								this.element.trigger( "click" );
							}
						}
					}
				} );
			}
		},
	
		_enhance: function() {
			if ( !this.element.is( "button" ) ) {
				this.element.attr( "role", "button" );
			}
	
			if ( this.options.icon ) {
				this._updateIcon( "icon", this.options.icon );
				this._updateTooltip();
			}
		},
	
		_updateTooltip: function() {
			this.title = this.element.attr( "title" );
	
			if ( !this.options.showLabel && !this.title ) {
				this.element.attr( "title", this.options.label );
			}
		},
	
		_updateIcon: function( option, value ) {
			var icon = option !== "iconPosition",
				position = icon ? this.options.iconPosition : value,
				displayBlock = position === "top" || position === "bottom";
	
			// Create icon
			if ( !this.icon ) {
				this.icon = $( "<span>" );
	
				this._addClass( this.icon, "ui-button-icon", "ui-icon" );
	
				if ( !this.options.showLabel ) {
					this._addClass( "ui-button-icon-only" );
				}
			} else if ( icon ) {
	
				// If we are updating the icon remove the old icon class
				this._removeClass( this.icon, null, this.options.icon );
			}
	
			// If we are updating the icon add the new icon class
			if ( icon ) {
				this._addClass( this.icon, null, value );
			}
	
			this._attachIcon( position );
	
			// If the icon is on top or bottom we need to add the ui-widget-icon-block class and remove
			// the iconSpace if there is one.
			if ( displayBlock ) {
				this._addClass( this.icon, null, "ui-widget-icon-block" );
				if ( this.iconSpace ) {
					this.iconSpace.remove();
				}
			} else {
	
				// Position is beginning or end so remove the ui-widget-icon-block class and add the
				// space if it does not exist
				if ( !this.iconSpace ) {
					this.iconSpace = $( "<span> </span>" );
					this._addClass( this.iconSpace, "ui-button-icon-space" );
				}
				this._removeClass( this.icon, null, "ui-wiget-icon-block" );
				this._attachIconSpace( position );
			}
		},
	
		_destroy: function() {
			this.element.removeAttr( "role" );
	
			if ( this.icon ) {
				this.icon.remove();
			}
			if ( this.iconSpace ) {
				this.iconSpace.remove();
			}
			if ( !this.hasTitle ) {
				this.element.removeAttr( "title" );
			}
		},
	
		_attachIconSpace: function( iconPosition ) {
			this.icon[ /^(?:end|bottom)/.test( iconPosition ) ? "before" : "after" ]( this.iconSpace );
		},
	
		_attachIcon: function( iconPosition ) {
			this.element[ /^(?:end|bottom)/.test( iconPosition ) ? "append" : "prepend" ]( this.icon );
		},
	
		_setOptions: function( options ) {
			var newShowLabel = options.showLabel === undefined ?
					this.options.showLabel :
					options.showLabel,
				newIcon = options.icon === undefined ? this.options.icon : options.icon;
	
			if ( !newShowLabel && !newIcon ) {
				options.showLabel = true;
			}
			this._super( options );
		},
	
		_setOption: function( key, value ) {
			if ( key === "icon" ) {
				if ( value ) {
					this._updateIcon( key, value );
				} else if ( this.icon ) {
					this.icon.remove();
					if ( this.iconSpace ) {
						this.iconSpace.remove();
					}
				}
			}
	
			if ( key === "iconPosition" ) {
				this._updateIcon( key, value );
			}
	
			// Make sure we can't end up with a button that has neither text nor icon
			if ( key === "showLabel" ) {
					this._toggleClass( "ui-button-icon-only", null, !value );
					this._updateTooltip();
			}
	
			if ( key === "label" ) {
				if ( this.isInput ) {
					this.element.val( value );
				} else {
	
					// If there is an icon, append it, else nothing then append the value
					// this avoids removal of the icon when setting label text
					this.element.html( value );
					if ( this.icon ) {
						this._attachIcon( this.options.iconPosition );
						this._attachIconSpace( this.options.iconPosition );
					}
				}
			}
	
			this._super( key, value );
	
			if ( key === "disabled" ) {
				this._toggleClass( null, "ui-state-disabled", value );
				this.element[ 0 ].disabled = value;
				if ( value ) {
					this.element.blur();
				}
			}
		},
	
		refresh: function() {
	
			// Make sure to only check disabled if its an element that supports this otherwise
			// check for the disabled class to determine state
			var isDisabled = this.element.is( "input, button" ) ?
				this.element[ 0 ].disabled : this.element.hasClass( "ui-button-disabled" );
	
			if ( isDisabled !== this.options.disabled ) {
				this._setOptions( { disabled: isDisabled } );
			}
	
			this._updateTooltip();
		}
	} );
	
	// DEPRECATED
	if ( $.uiBackCompat !== false ) {
	
		// Text and Icons options
		$.widget( "ui.button", $.ui.button, {
			options: {
				text: true,
				icons: {
					primary: null,
					secondary: null
				}
			},
	
			_create: function() {
				if ( this.options.showLabel && !this.options.text ) {
					this.options.showLabel = this.options.text;
				}
				if ( !this.options.showLabel && this.options.text ) {
					this.options.text = this.options.showLabel;
				}
				if ( !this.options.icon && ( this.options.icons.primary ||
						this.options.icons.secondary ) ) {
					if ( this.options.icons.primary ) {
						this.options.icon = this.options.icons.primary;
					} else {
						this.options.icon = this.options.icons.secondary;
						this.options.iconPosition = "end";
					}
				} else if ( this.options.icon ) {
					this.options.icons.primary = this.options.icon;
				}
				this._super();
			},
	
			_setOption: function( key, value ) {
				if ( key === "text" ) {
					this._super( "showLabel", value );
					return;
				}
				if ( key === "showLabel" ) {
					this.options.text = value;
				}
				if ( key === "icon" ) {
					this.options.icons.primary = value;
				}
				if ( key === "icons" ) {
					if ( value.primary ) {
						this._super( "icon", value.primary );
						this._super( "iconPosition", "beginning" );
					} else if ( value.secondary ) {
						this._super( "icon", value.secondary );
						this._super( "iconPosition", "end" );
					}
				}
				this._superApply( arguments );
			}
		} );
	
		$.fn.button = ( function( orig ) {
			return function() {
				if ( !this.length || ( this.length && this[ 0 ].tagName !== "INPUT" ) ||
						( this.length && this[ 0 ].tagName === "INPUT" && (
							this.attr( "type" ) !== "checkbox" && this.attr( "type" ) !== "radio"
						) ) ) {
					return orig.apply( this, arguments );
				}
				if ( !$.ui.checkboxradio ) {
					$.error( "Checkboxradio widget missing" );
				}
				if ( arguments.length === 0 ) {
					return this.checkboxradio( {
						"icon": false
					} );
				}
				return this.checkboxradio.apply( this, arguments );
			};
		} )( $.fn.button );
	
		$.fn.buttonset = function() {
			if ( !$.ui.controlgroup ) {
				$.error( "Controlgroup widget missing" );
			}
			if ( arguments[ 0 ] === "option" && arguments[ 1 ] === "items" && arguments[ 2 ] ) {
				return this.controlgroup.apply( this,
					[ arguments[ 0 ], "items.button", arguments[ 2 ] ] );
			}
			if ( arguments[ 0 ] === "option" && arguments[ 1 ] === "items" ) {
				return this.controlgroup.apply( this, [ arguments[ 0 ], "items.button" ] );
			}
			if ( typeof arguments[ 0 ] === "object" && arguments[ 0 ].items ) {
				arguments[ 0 ].items = {
					button: arguments[ 0 ].items
				};
			}
			return this.controlgroup.apply( this, arguments );
		};
	}
	
	return $.ui.button;
	
	} ) );


/***/ }),
/* 24 */
/***/ (function(module, exports, __webpack_require__) {

	var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
	 * jQuery UI Controlgroup 1.12.1
	 * http://jqueryui.com
	 *
	 * Copyright jQuery Foundation and other contributors
	 * Released under the MIT license.
	 * http://jquery.org/license
	 */
	
	//>>label: Controlgroup
	//>>group: Widgets
	//>>description: Visually groups form control widgets
	//>>docs: http://api.jqueryui.com/controlgroup/
	//>>demos: http://jqueryui.com/controlgroup/
	//>>css.structure: ../../themes/base/core.css
	//>>css.structure: ../../themes/base/controlgroup.css
	//>>css.theme: ../../themes/base/theme.css
	
	( function( factory ) {
		if ( true ) {
	
			// AMD. Register as an anonymous module.
			!(__WEBPACK_AMD_DEFINE_ARRAY__ = [
				__webpack_require__(7),
				__webpack_require__(14)
			], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
		} else {
	
			// Browser globals
			factory( jQuery );
		}
	}( function( $ ) {
	var controlgroupCornerRegex = /ui-corner-([a-z]){2,6}/g;
	
	return $.widget( "ui.controlgroup", {
		version: "1.12.1",
		defaultElement: "<div>",
		options: {
			direction: "horizontal",
			disabled: null,
			onlyVisible: true,
			items: {
				"button": "input[type=button], input[type=submit], input[type=reset], button, a",
				"controlgroupLabel": ".ui-controlgroup-label",
				"checkboxradio": "input[type='checkbox'], input[type='radio']",
				"selectmenu": "select",
				"spinner": ".ui-spinner-input"
			}
		},
	
		_create: function() {
			this._enhance();
		},
	
		// To support the enhanced option in jQuery Mobile, we isolate DOM manipulation
		_enhance: function() {
			this.element.attr( "role", "toolbar" );
			this.refresh();
		},
	
		_destroy: function() {
			this._callChildMethod( "destroy" );
			this.childWidgets.removeData( "ui-controlgroup-data" );
			this.element.removeAttr( "role" );
			if ( this.options.items.controlgroupLabel ) {
				this.element
					.find( this.options.items.controlgroupLabel )
					.find( ".ui-controlgroup-label-contents" )
					.contents().unwrap();
			}
		},
	
		_initWidgets: function() {
			var that = this,
				childWidgets = [];
	
			// First we iterate over each of the items options
			$.each( this.options.items, function( widget, selector ) {
				var labels;
				var options = {};
	
				// Make sure the widget has a selector set
				if ( !selector ) {
					return;
				}
	
				if ( widget === "controlgroupLabel" ) {
					labels = that.element.find( selector );
					labels.each( function() {
						var element = $( this );
	
						if ( element.children( ".ui-controlgroup-label-contents" ).length ) {
							return;
						}
						element.contents()
							.wrapAll( "<span class='ui-controlgroup-label-contents'></span>" );
					} );
					that._addClass( labels, null, "ui-widget ui-widget-content ui-state-default" );
					childWidgets = childWidgets.concat( labels.get() );
					return;
				}
	
				// Make sure the widget actually exists
				if ( !$.fn[ widget ] ) {
					return;
				}
	
				// We assume everything is in the middle to start because we can't determine
				// first / last elements until all enhancments are done.
				if ( that[ "_" + widget + "Options" ] ) {
					options = that[ "_" + widget + "Options" ]( "middle" );
				} else {
					options = { classes: {} };
				}
	
				// Find instances of this widget inside controlgroup and init them
				that.element
					.find( selector )
					.each( function() {
						var element = $( this );
						var instance = element[ widget ]( "instance" );
	
						// We need to clone the default options for this type of widget to avoid
						// polluting the variable options which has a wider scope than a single widget.
						var instanceOptions = $.widget.extend( {}, options );
	
						// If the button is the child of a spinner ignore it
						// TODO: Find a more generic solution
						if ( widget === "button" && element.parent( ".ui-spinner" ).length ) {
							return;
						}
	
						// Create the widget if it doesn't exist
						if ( !instance ) {
							instance = element[ widget ]()[ widget ]( "instance" );
						}
						if ( instance ) {
							instanceOptions.classes =
								that._resolveClassesValues( instanceOptions.classes, instance );
						}
						element[ widget ]( instanceOptions );
	
						// Store an instance of the controlgroup to be able to reference
						// from the outermost element for changing options and refresh
						var widgetElement = element[ widget ]( "widget" );
						$.data( widgetElement[ 0 ], "ui-controlgroup-data",
							instance ? instance : element[ widget ]( "instance" ) );
	
						childWidgets.push( widgetElement[ 0 ] );
					} );
			} );
	
			this.childWidgets = $( $.unique( childWidgets ) );
			this._addClass( this.childWidgets, "ui-controlgroup-item" );
		},
	
		_callChildMethod: function( method ) {
			this.childWidgets.each( function() {
				var element = $( this ),
					data = element.data( "ui-controlgroup-data" );
				if ( data && data[ method ] ) {
					data[ method ]();
				}
			} );
		},
	
		_updateCornerClass: function( element, position ) {
			var remove = "ui-corner-top ui-corner-bottom ui-corner-left ui-corner-right ui-corner-all";
			var add = this._buildSimpleOptions( position, "label" ).classes.label;
	
			this._removeClass( element, null, remove );
			this._addClass( element, null, add );
		},
	
		_buildSimpleOptions: function( position, key ) {
			var direction = this.options.direction === "vertical";
			var result = {
				classes: {}
			};
			result.classes[ key ] = {
				"middle": "",
				"first": "ui-corner-" + ( direction ? "top" : "left" ),
				"last": "ui-corner-" + ( direction ? "bottom" : "right" ),
				"only": "ui-corner-all"
			}[ position ];
	
			return result;
		},
	
		_spinnerOptions: function( position ) {
			var options = this._buildSimpleOptions( position, "ui-spinner" );
	
			options.classes[ "ui-spinner-up" ] = "";
			options.classes[ "ui-spinner-down" ] = "";
	
			return options;
		},
	
		_buttonOptions: function( position ) {
			return this._buildSimpleOptions( position, "ui-button" );
		},
	
		_checkboxradioOptions: function( position ) {
			return this._buildSimpleOptions( position, "ui-checkboxradio-label" );
		},
	
		_selectmenuOptions: function( position ) {
			var direction = this.options.direction === "vertical";
			return {
				width: direction ? "auto" : false,
				classes: {
					middle: {
						"ui-selectmenu-button-open": "",
						"ui-selectmenu-button-closed": ""
					},
					first: {
						"ui-selectmenu-button-open": "ui-corner-" + ( direction ? "top" : "tl" ),
						"ui-selectmenu-button-closed": "ui-corner-" + ( direction ? "top" : "left" )
					},
					last: {
						"ui-selectmenu-button-open": direction ? "" : "ui-corner-tr",
						"ui-selectmenu-button-closed": "ui-corner-" + ( direction ? "bottom" : "right" )
					},
					only: {
						"ui-selectmenu-button-open": "ui-corner-top",
						"ui-selectmenu-button-closed": "ui-corner-all"
					}
	
				}[ position ]
			};
		},
	
		_resolveClassesValues: function( classes, instance ) {
			var result = {};
			$.each( classes, function( key ) {
				var current = instance.options.classes[ key ] || "";
				current = $.trim( current.replace( controlgroupCornerRegex, "" ) );
				result[ key ] = ( current + " " + classes[ key ] ).replace( /\s+/g, " " );
			} );
			return result;
		},
	
		_setOption: function( key, value ) {
			if ( key === "direction" ) {
				this._removeClass( "ui-controlgroup-" + this.options.direction );
			}
	
			this._super( key, value );
			if ( key === "disabled" ) {
				this._callChildMethod( value ? "disable" : "enable" );
				return;
			}
	
			this.refresh();
		},
	
		refresh: function() {
			var children,
				that = this;
	
			this._addClass( "ui-controlgroup ui-controlgroup-" + this.options.direction );
	
			if ( this.options.direction === "horizontal" ) {
				this._addClass( null, "ui-helper-clearfix" );
			}
			this._initWidgets();
	
			children = this.childWidgets;
	
			// We filter here because we need to track all childWidgets not just the visible ones
			if ( this.options.onlyVisible ) {
				children = children.filter( ":visible" );
			}
	
			if ( children.length ) {
	
				// We do this last because we need to make sure all enhancment is done
				// before determining first and last
				$.each( [ "first", "last" ], function( index, value ) {
					var instance = children[ value ]().data( "ui-controlgroup-data" );
	
					if ( instance && that[ "_" + instance.widgetName + "Options" ] ) {
						var options = that[ "_" + instance.widgetName + "Options" ](
							children.length === 1 ? "only" : value
						);
						options.classes = that._resolveClassesValues( options.classes, instance );
						instance.element[ instance.widgetName ]( options );
					} else {
						that._updateCornerClass( children[ value ](), value );
					}
				} );
	
				// Finally call the refresh method on each of the child widgets.
				this._callChildMethod( "refresh" );
			}
		}
	} );
	} ) );


/***/ }),
/* 25 */
/***/ (function(module, exports, __webpack_require__) {

	var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
	 * jQuery UI Checkboxradio 1.12.1
	 * http://jqueryui.com
	 *
	 * Copyright jQuery Foundation and other contributors
	 * Released under the MIT license.
	 * http://jquery.org/license
	 */
	
	//>>label: Checkboxradio
	//>>group: Widgets
	//>>description: Enhances a form with multiple themeable checkboxes or radio buttons.
	//>>docs: http://api.jqueryui.com/checkboxradio/
	//>>demos: http://jqueryui.com/checkboxradio/
	//>>css.structure: ../../themes/base/core.css
	//>>css.structure: ../../themes/base/button.css
	//>>css.structure: ../../themes/base/checkboxradio.css
	//>>css.theme: ../../themes/base/theme.css
	
	( function( factory ) {
		if ( true ) {
	
			// AMD. Register as an anonymous module.
			!(__WEBPACK_AMD_DEFINE_ARRAY__ = [
				__webpack_require__(7),
				__webpack_require__(26),
				__webpack_require__(27),
				__webpack_require__(29),
				__webpack_require__(14)
			], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
		} else {
	
			// Browser globals
			factory( jQuery );
		}
	}( function( $ ) {
	
	$.widget( "ui.checkboxradio", [ $.ui.formResetMixin, {
		version: "1.12.1",
		options: {
			disabled: null,
			label: null,
			icon: true,
			classes: {
				"ui-checkboxradio-label": "ui-corner-all",
				"ui-checkboxradio-icon": "ui-corner-all"
			}
		},
	
		_getCreateOptions: function() {
			var disabled, labels;
			var that = this;
			var options = this._super() || {};
	
			// We read the type here, because it makes more sense to throw a element type error first,
			// rather then the error for lack of a label. Often if its the wrong type, it
			// won't have a label (e.g. calling on a div, btn, etc)
			this._readType();
	
			labels = this.element.labels();
	
			// If there are multiple labels, use the last one
			this.label = $( labels[ labels.length - 1 ] );
			if ( !this.label.length ) {
				$.error( "No label found for checkboxradio widget" );
			}
	
			this.originalLabel = "";
	
			// We need to get the label text but this may also need to make sure it does not contain the
			// input itself.
			this.label.contents().not( this.element[ 0 ] ).each( function() {
	
				// The label contents could be text, html, or a mix. We concat each element to get a
				// string representation of the label, without the input as part of it.
				that.originalLabel += this.nodeType === 3 ? $( this ).text() : this.outerHTML;
			} );
	
			// Set the label option if we found label text
			if ( this.originalLabel ) {
				options.label = this.originalLabel;
			}
	
			disabled = this.element[ 0 ].disabled;
			if ( disabled != null ) {
				options.disabled = disabled;
			}
			return options;
		},
	
		_create: function() {
			var checked = this.element[ 0 ].checked;
	
			this._bindFormResetHandler();
	
			if ( this.options.disabled == null ) {
				this.options.disabled = this.element[ 0 ].disabled;
			}
	
			this._setOption( "disabled", this.options.disabled );
			this._addClass( "ui-checkboxradio", "ui-helper-hidden-accessible" );
			this._addClass( this.label, "ui-checkboxradio-label", "ui-button ui-widget" );
	
			if ( this.type === "radio" ) {
				this._addClass( this.label, "ui-checkboxradio-radio-label" );
			}
	
			if ( this.options.label && this.options.label !== this.originalLabel ) {
				this._updateLabel();
			} else if ( this.originalLabel ) {
				this.options.label = this.originalLabel;
			}
	
			this._enhance();
	
			if ( checked ) {
				this._addClass( this.label, "ui-checkboxradio-checked", "ui-state-active" );
				if ( this.icon ) {
					this._addClass( this.icon, null, "ui-state-hover" );
				}
			}
	
			this._on( {
				change: "_toggleClasses",
				focus: function() {
					this._addClass( this.label, null, "ui-state-focus ui-visual-focus" );
				},
				blur: function() {
					this._removeClass( this.label, null, "ui-state-focus ui-visual-focus" );
				}
			} );
		},
	
		_readType: function() {
			var nodeName = this.element[ 0 ].nodeName.toLowerCase();
			this.type = this.element[ 0 ].type;
			if ( nodeName !== "input" || !/radio|checkbox/.test( this.type ) ) {
				$.error( "Can't create checkboxradio on element.nodeName=" + nodeName +
					" and element.type=" + this.type );
			}
		},
	
		// Support jQuery Mobile enhanced option
		_enhance: function() {
			this._updateIcon( this.element[ 0 ].checked );
		},
	
		widget: function() {
			return this.label;
		},
	
		_getRadioGroup: function() {
			var group;
			var name = this.element[ 0 ].name;
			var nameSelector = "input[name='" + $.ui.escapeSelector( name ) + "']";
	
			if ( !name ) {
				return $( [] );
			}
	
			if ( this.form.length ) {
				group = $( this.form[ 0 ].elements ).filter( nameSelector );
			} else {
	
				// Not inside a form, check all inputs that also are not inside a form
				group = $( nameSelector ).filter( function() {
					return $( this ).form().length === 0;
				} );
			}
	
			return group.not( this.element );
		},
	
		_toggleClasses: function() {
			var checked = this.element[ 0 ].checked;
			this._toggleClass( this.label, "ui-checkboxradio-checked", "ui-state-active", checked );
	
			if ( this.options.icon && this.type === "checkbox" ) {
				this._toggleClass( this.icon, null, "ui-icon-check ui-state-checked", checked )
					._toggleClass( this.icon, null, "ui-icon-blank", !checked );
			}
	
			if ( this.type === "radio" ) {
				this._getRadioGroup()
					.each( function() {
						var instance = $( this ).checkboxradio( "instance" );
	
						if ( instance ) {
							instance._removeClass( instance.label,
								"ui-checkboxradio-checked", "ui-state-active" );
						}
					} );
			}
		},
	
		_destroy: function() {
			this._unbindFormResetHandler();
	
			if ( this.icon ) {
				this.icon.remove();
				this.iconSpace.remove();
			}
		},
	
		_setOption: function( key, value ) {
	
			// We don't allow the value to be set to nothing
			if ( key === "label" && !value ) {
				return;
			}
	
			this._super( key, value );
	
			if ( key === "disabled" ) {
				this._toggleClass( this.label, null, "ui-state-disabled", value );
				this.element[ 0 ].disabled = value;
	
				// Don't refresh when setting disabled
				return;
			}
			this.refresh();
		},
	
		_updateIcon: function( checked ) {
			var toAdd = "ui-icon ui-icon-background ";
	
			if ( this.options.icon ) {
				if ( !this.icon ) {
					this.icon = $( "<span>" );
					this.iconSpace = $( "<span> </span>" );
					this._addClass( this.iconSpace, "ui-checkboxradio-icon-space" );
				}
	
				if ( this.type === "checkbox" ) {
					toAdd += checked ? "ui-icon-check ui-state-checked" : "ui-icon-blank";
					this._removeClass( this.icon, null, checked ? "ui-icon-blank" : "ui-icon-check" );
				} else {
					toAdd += "ui-icon-blank";
				}
				this._addClass( this.icon, "ui-checkboxradio-icon", toAdd );
				if ( !checked ) {
					this._removeClass( this.icon, null, "ui-icon-check ui-state-checked" );
				}
				this.icon.prependTo( this.label ).after( this.iconSpace );
			} else if ( this.icon !== undefined ) {
				this.icon.remove();
				this.iconSpace.remove();
				delete this.icon;
			}
		},
	
		_updateLabel: function() {
	
			// Remove the contents of the label ( minus the icon, icon space, and input )
			var contents = this.label.contents().not( this.element[ 0 ] );
			if ( this.icon ) {
				contents = contents.not( this.icon[ 0 ] );
			}
			if ( this.iconSpace ) {
				contents = contents.not( this.iconSpace[ 0 ] );
			}
			contents.remove();
	
			this.label.append( this.options.label );
		},
	
		refresh: function() {
			var checked = this.element[ 0 ].checked,
				isDisabled = this.element[ 0 ].disabled;
	
			this._updateIcon( checked );
			this._toggleClass( this.label, "ui-checkboxradio-checked", "ui-state-active", checked );
			if ( this.options.label !== null ) {
				this._updateLabel();
			}
	
			if ( isDisabled !== this.options.disabled ) {
				this._setOptions( { "disabled": isDisabled } );
			}
		}
	
	} ] );
	
	return $.ui.checkboxradio;
	
	} ) );


/***/ }),
/* 26 */
/***/ (function(module, exports, __webpack_require__) {

	var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;( function( factory ) {
		if ( true ) {
	
			// AMD. Register as an anonymous module.
			!(__WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(7), __webpack_require__(13) ], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
		} else {
	
			// Browser globals
			factory( jQuery );
		}
	} ( function( $ ) {
	
	// Internal use only
	return $.ui.escapeSelector = ( function() {
		var selectorEscape = /([!"#$%&'()*+,./:;<=>?@[\]^`{|}~])/g;
		return function( selector ) {
			return selector.replace( selectorEscape, "\\$1" );
		};
	} )();
	
	} ) );


/***/ }),
/* 27 */
/***/ (function(module, exports, __webpack_require__) {

	var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
	 * jQuery UI Form Reset Mixin 1.12.1
	 * http://jqueryui.com
	 *
	 * Copyright jQuery Foundation and other contributors
	 * Released under the MIT license.
	 * http://jquery.org/license
	 */
	
	//>>label: Form Reset Mixin
	//>>group: Core
	//>>description: Refresh input widgets when their form is reset
	//>>docs: http://api.jqueryui.com/form-reset-mixin/
	
	( function( factory ) {
		if ( true ) {
	
			// AMD. Register as an anonymous module.
			!(__WEBPACK_AMD_DEFINE_ARRAY__ = [
				__webpack_require__(7),
				__webpack_require__(28),
				__webpack_require__(13)
			], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
		} else {
	
			// Browser globals
			factory( jQuery );
		}
	}( function( $ ) {
	
	return $.ui.formResetMixin = {
		_formResetHandler: function() {
			var form = $( this );
	
			// Wait for the form reset to actually happen before refreshing
			setTimeout( function() {
				var instances = form.data( "ui-form-reset-instances" );
				$.each( instances, function() {
					this.refresh();
				} );
			} );
		},
	
		_bindFormResetHandler: function() {
			this.form = this.element.form();
			if ( !this.form.length ) {
				return;
			}
	
			var instances = this.form.data( "ui-form-reset-instances" ) || [];
			if ( !instances.length ) {
	
				// We don't use _on() here because we use a single event handler per form
				this.form.on( "reset.ui-form-reset", this._formResetHandler );
			}
			instances.push( this );
			this.form.data( "ui-form-reset-instances", instances );
		},
	
		_unbindFormResetHandler: function() {
			if ( !this.form.length ) {
				return;
			}
	
			var instances = this.form.data( "ui-form-reset-instances" );
			instances.splice( $.inArray( this, instances ), 1 );
			if ( instances.length ) {
				this.form.data( "ui-form-reset-instances", instances );
			} else {
				this.form
					.removeData( "ui-form-reset-instances" )
					.off( "reset.ui-form-reset" );
			}
		}
	};
	
	} ) );


/***/ }),
/* 28 */
/***/ (function(module, exports, __webpack_require__) {

	var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;( function( factory ) {
		if ( true ) {
	
			// AMD. Register as an anonymous module.
			!(__WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(7), __webpack_require__(13) ], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
		} else {
	
			// Browser globals
			factory( jQuery );
		}
	} ( function( $ ) {
	
	// Support: IE8 Only
	// IE8 does not support the form attribute and when it is supplied. It overwrites the form prop
	// with a string, so we need to find the proper form.
	return $.fn.form = function() {
		return typeof this[ 0 ].form === "string" ? this.closest( "form" ) : $( this[ 0 ].form );
	};
	
	} ) );


/***/ }),
/* 29 */
/***/ (function(module, exports, __webpack_require__) {

	var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
	 * jQuery UI Labels 1.12.1
	 * http://jqueryui.com
	 *
	 * Copyright jQuery Foundation and other contributors
	 * Released under the MIT license.
	 * http://jquery.org/license
	 */
	
	//>>label: labels
	//>>group: Core
	//>>description: Find all the labels associated with a given input
	//>>docs: http://api.jqueryui.com/labels/
	
	( function( factory ) {
		if ( true ) {
	
			// AMD. Register as an anonymous module.
			!(__WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(7), __webpack_require__(13), __webpack_require__(26) ], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
		} else {
	
			// Browser globals
			factory( jQuery );
		}
	} ( function( $ ) {
	
	return $.fn.labels = function() {
		var ancestor, selector, id, labels, ancestors;
	
		// Check control.labels first
		if ( this[ 0 ].labels && this[ 0 ].labels.length ) {
			return this.pushStack( this[ 0 ].labels );
		}
	
		// Support: IE <= 11, FF <= 37, Android <= 2.3 only
		// Above browsers do not support control.labels. Everything below is to support them
		// as well as document fragments. control.labels does not work on document fragments
		labels = this.eq( 0 ).parents( "label" );
	
		// Look for the label based on the id
		id = this.attr( "id" );
		if ( id ) {
	
			// We don't search against the document in case the element
			// is disconnected from the DOM
			ancestor = this.eq( 0 ).parents().last();
	
			// Get a full set of top level ancestors
			ancestors = ancestor.add( ancestor.length ? ancestor.siblings() : this.siblings() );
	
			// Create a selector for the label based on the id
			selector = "label[for='" + $.ui.escapeSelector( id ) + "']";
	
			labels = labels.add( ancestors.find( selector ).addBack( selector ) );
	
		}
	
		// Return whatever we have found for labels
		return this.pushStack( labels );
	};
	
	} ) );


/***/ }),
/* 30 */
/***/ (function(module, exports, __webpack_require__) {

	var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
	 * jQuery UI Resizable 1.12.1
	 * http://jqueryui.com
	 *
	 * Copyright jQuery Foundation and other contributors
	 * Released under the MIT license.
	 * http://jquery.org/license
	 */
	
	//>>label: Resizable
	//>>group: Interactions
	//>>description: Enables resize functionality for any element.
	//>>docs: http://api.jqueryui.com/resizable/
	//>>demos: http://jqueryui.com/resizable/
	//>>css.structure: ../../themes/base/core.css
	//>>css.structure: ../../themes/base/resizable.css
	//>>css.theme: ../../themes/base/theme.css
	
	( function( factory ) {
		if ( true ) {
	
			// AMD. Register as an anonymous module.
			!(__WEBPACK_AMD_DEFINE_ARRAY__ = [
				__webpack_require__(7),
				__webpack_require__(11),
				__webpack_require__(31),
				__webpack_require__(16),
				__webpack_require__(13),
				__webpack_require__(14)
			], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
		} else {
	
			// Browser globals
			factory( jQuery );
		}
	}( function( $ ) {
	
	$.widget( "ui.resizable", $.ui.mouse, {
		version: "1.12.1",
		widgetEventPrefix: "resize",
		options: {
			alsoResize: false,
			animate: false,
			animateDuration: "slow",
			animateEasing: "swing",
			aspectRatio: false,
			autoHide: false,
			classes: {
				"ui-resizable-se": "ui-icon ui-icon-gripsmall-diagonal-se"
			},
			containment: false,
			ghost: false,
			grid: false,
			handles: "e,s,se",
			helper: false,
			maxHeight: null,
			maxWidth: null,
			minHeight: 10,
			minWidth: 10,
	
			// See #7960
			zIndex: 90,
	
			// Callbacks
			resize: null,
			start: null,
			stop: null
		},
	
		_num: function( value ) {
			return parseFloat( value ) || 0;
		},
	
		_isNumber: function( value ) {
			return !isNaN( parseFloat( value ) );
		},
	
		_hasScroll: function( el, a ) {
	
			if ( $( el ).css( "overflow" ) === "hidden" ) {
				return false;
			}
	
			var scroll = ( a && a === "left" ) ? "scrollLeft" : "scrollTop",
				has = false;
	
			if ( el[ scroll ] > 0 ) {
				return true;
			}
	
			// TODO: determine which cases actually cause this to happen
			// if the element doesn't have the scroll set, see if it's possible to
			// set the scroll
			el[ scroll ] = 1;
			has = ( el[ scroll ] > 0 );
			el[ scroll ] = 0;
			return has;
		},
	
		_create: function() {
	
			var margins,
				o = this.options,
				that = this;
			this._addClass( "ui-resizable" );
	
			$.extend( this, {
				_aspectRatio: !!( o.aspectRatio ),
				aspectRatio: o.aspectRatio,
				originalElement: this.element,
				_proportionallyResizeElements: [],
				_helper: o.helper || o.ghost || o.animate ? o.helper || "ui-resizable-helper" : null
			} );
	
			// Wrap the element if it cannot hold child nodes
			if ( this.element[ 0 ].nodeName.match( /^(canvas|textarea|input|select|button|img)$/i ) ) {
	
				this.element.wrap(
					$( "<div class='ui-wrapper' style='overflow: hidden;'></div>" ).css( {
						position: this.element.css( "position" ),
						width: this.element.outerWidth(),
						height: this.element.outerHeight(),
						top: this.element.css( "top" ),
						left: this.element.css( "left" )
					} )
				);
	
				this.element = this.element.parent().data(
					"ui-resizable", this.element.resizable( "instance" )
				);
	
				this.elementIsWrapper = true;
	
				margins = {
					marginTop: this.originalElement.css( "marginTop" ),
					marginRight: this.originalElement.css( "marginRight" ),
					marginBottom: this.originalElement.css( "marginBottom" ),
					marginLeft: this.originalElement.css( "marginLeft" )
				};
	
				this.element.css( margins );
				this.originalElement.css( "margin", 0 );
	
				// support: Safari
				// Prevent Safari textarea resize
				this.originalResizeStyle = this.originalElement.css( "resize" );
				this.originalElement.css( "resize", "none" );
	
				this._proportionallyResizeElements.push( this.originalElement.css( {
					position: "static",
					zoom: 1,
					display: "block"
				} ) );
	
				// Support: IE9
				// avoid IE jump (hard set the margin)
				this.originalElement.css( margins );
	
				this._proportionallyResize();
			}
	
			this._setupHandles();
	
			if ( o.autoHide ) {
				$( this.element )
					.on( "mouseenter", function() {
						if ( o.disabled ) {
							return;
						}
						that._removeClass( "ui-resizable-autohide" );
						that._handles.show();
					} )
					.on( "mouseleave", function() {
						if ( o.disabled ) {
							return;
						}
						if ( !that.resizing ) {
							that._addClass( "ui-resizable-autohide" );
							that._handles.hide();
						}
					} );
			}
	
			this._mouseInit();
		},
	
		_destroy: function() {
	
			this._mouseDestroy();
	
			var wrapper,
				_destroy = function( exp ) {
					$( exp )
						.removeData( "resizable" )
						.removeData( "ui-resizable" )
						.off( ".resizable" )
						.find( ".ui-resizable-handle" )
							.remove();
				};
	
			// TODO: Unwrap at same DOM position
			if ( this.elementIsWrapper ) {
				_destroy( this.element );
				wrapper = this.element;
				this.originalElement.css( {
					position: wrapper.css( "position" ),
					width: wrapper.outerWidth(),
					height: wrapper.outerHeight(),
					top: wrapper.css( "top" ),
					left: wrapper.css( "left" )
				} ).insertAfter( wrapper );
				wrapper.remove();
			}
	
			this.originalElement.css( "resize", this.originalResizeStyle );
			_destroy( this.originalElement );
	
			return this;
		},
	
		_setOption: function( key, value ) {
			this._super( key, value );
	
			switch ( key ) {
			case "handles":
				this._removeHandles();
				this._setupHandles();
				break;
			default:
				break;
			}
		},
	
		_setupHandles: function() {
			var o = this.options, handle, i, n, hname, axis, that = this;
			this.handles = o.handles ||
				( !$( ".ui-resizable-handle", this.element ).length ?
					"e,s,se" : {
						n: ".ui-resizable-n",
						e: ".ui-resizable-e",
						s: ".ui-resizable-s",
						w: ".ui-resizable-w",
						se: ".ui-resizable-se",
						sw: ".ui-resizable-sw",
						ne: ".ui-resizable-ne",
						nw: ".ui-resizable-nw"
					} );
	
			this._handles = $();
			if ( this.handles.constructor === String ) {
	
				if ( this.handles === "all" ) {
					this.handles = "n,e,s,w,se,sw,ne,nw";
				}
	
				n = this.handles.split( "," );
				this.handles = {};
	
				for ( i = 0; i < n.length; i++ ) {
	
					handle = $.trim( n[ i ] );
					hname = "ui-resizable-" + handle;
					axis = $( "<div>" );
					this._addClass( axis, "ui-resizable-handle " + hname );
	
					axis.css( { zIndex: o.zIndex } );
	
					this.handles[ handle ] = ".ui-resizable-" + handle;
					this.element.append( axis );
				}
	
			}
	
			this._renderAxis = function( target ) {
	
				var i, axis, padPos, padWrapper;
	
				target = target || this.element;
	
				for ( i in this.handles ) {
	
					if ( this.handles[ i ].constructor === String ) {
						this.handles[ i ] = this.element.children( this.handles[ i ] ).first().show();
					} else if ( this.handles[ i ].jquery || this.handles[ i ].nodeType ) {
						this.handles[ i ] = $( this.handles[ i ] );
						this._on( this.handles[ i ], { "mousedown": that._mouseDown } );
					}
	
					if ( this.elementIsWrapper &&
							this.originalElement[ 0 ]
								.nodeName
								.match( /^(textarea|input|select|button)$/i ) ) {
						axis = $( this.handles[ i ], this.element );
	
						padWrapper = /sw|ne|nw|se|n|s/.test( i ) ?
							axis.outerHeight() :
							axis.outerWidth();
	
						padPos = [ "padding",
							/ne|nw|n/.test( i ) ? "Top" :
							/se|sw|s/.test( i ) ? "Bottom" :
							/^e$/.test( i ) ? "Right" : "Left" ].join( "" );
	
						target.css( padPos, padWrapper );
	
						this._proportionallyResize();
					}
	
					this._handles = this._handles.add( this.handles[ i ] );
				}
			};
	
			// TODO: make renderAxis a prototype function
			this._renderAxis( this.element );
	
			this._handles = this._handles.add( this.element.find( ".ui-resizable-handle" ) );
			this._handles.disableSelection();
	
			this._handles.on( "mouseover", function() {
				if ( !that.resizing ) {
					if ( this.className ) {
						axis = this.className.match( /ui-resizable-(se|sw|ne|nw|n|e|s|w)/i );
					}
					that.axis = axis && axis[ 1 ] ? axis[ 1 ] : "se";
				}
			} );
	
			if ( o.autoHide ) {
				this._handles.hide();
				this._addClass( "ui-resizable-autohide" );
			}
		},
	
		_removeHandles: function() {
			this._handles.remove();
		},
	
		_mouseCapture: function( event ) {
			var i, handle,
				capture = false;
	
			for ( i in this.handles ) {
				handle = $( this.handles[ i ] )[ 0 ];
				if ( handle === event.target || $.contains( handle, event.target ) ) {
					capture = true;
				}
			}
	
			return !this.options.disabled && capture;
		},
	
		_mouseStart: function( event ) {
	
			var curleft, curtop, cursor,
				o = this.options,
				el = this.element;
	
			this.resizing = true;
	
			this._renderProxy();
	
			curleft = this._num( this.helper.css( "left" ) );
			curtop = this._num( this.helper.css( "top" ) );
	
			if ( o.containment ) {
				curleft += $( o.containment ).scrollLeft() || 0;
				curtop += $( o.containment ).scrollTop() || 0;
			}
	
			this.offset = this.helper.offset();
			this.position = { left: curleft, top: curtop };
	
			this.size = this._helper ? {
					width: this.helper.width(),
					height: this.helper.height()
				} : {
					width: el.width(),
					height: el.height()
				};
	
			this.originalSize = this._helper ? {
					width: el.outerWidth(),
					height: el.outerHeight()
				} : {
					width: el.width(),
					height: el.height()
				};
	
			this.sizeDiff = {
				width: el.outerWidth() - el.width(),
				height: el.outerHeight() - el.height()
			};
	
			this.originalPosition = { left: curleft, top: curtop };
			this.originalMousePosition = { left: event.pageX, top: event.pageY };
	
			this.aspectRatio = ( typeof o.aspectRatio === "number" ) ?
				o.aspectRatio :
				( ( this.originalSize.width / this.originalSize.height ) || 1 );
	
			cursor = $( ".ui-resizable-" + this.axis ).css( "cursor" );
			$( "body" ).css( "cursor", cursor === "auto" ? this.axis + "-resize" : cursor );
	
			this._addClass( "ui-resizable-resizing" );
			this._propagate( "start", event );
			return true;
		},
	
		_mouseDrag: function( event ) {
	
			var data, props,
				smp = this.originalMousePosition,
				a = this.axis,
				dx = ( event.pageX - smp.left ) || 0,
				dy = ( event.pageY - smp.top ) || 0,
				trigger = this._change[ a ];
	
			this._updatePrevProperties();
	
			if ( !trigger ) {
				return false;
			}
	
			data = trigger.apply( this, [ event, dx, dy ] );
	
			this._updateVirtualBoundaries( event.shiftKey );
			if ( this._aspectRatio || event.shiftKey ) {
				data = this._updateRatio( data, event );
			}
	
			data = this._respectSize( data, event );
	
			this._updateCache( data );
	
			this._propagate( "resize", event );
	
			props = this._applyChanges();
	
			if ( !this._helper && this._proportionallyResizeElements.length ) {
				this._proportionallyResize();
			}
	
			if ( !$.isEmptyObject( props ) ) {
				this._updatePrevProperties();
				this._trigger( "resize", event, this.ui() );
				this._applyChanges();
			}
	
			return false;
		},
	
		_mouseStop: function( event ) {
	
			this.resizing = false;
			var pr, ista, soffseth, soffsetw, s, left, top,
				o = this.options, that = this;
	
			if ( this._helper ) {
	
				pr = this._proportionallyResizeElements;
				ista = pr.length && ( /textarea/i ).test( pr[ 0 ].nodeName );
				soffseth = ista && this._hasScroll( pr[ 0 ], "left" ) ? 0 : that.sizeDiff.height;
				soffsetw = ista ? 0 : that.sizeDiff.width;
	
				s = {
					width: ( that.helper.width()  - soffsetw ),
					height: ( that.helper.height() - soffseth )
				};
				left = ( parseFloat( that.element.css( "left" ) ) +
					( that.position.left - that.originalPosition.left ) ) || null;
				top = ( parseFloat( that.element.css( "top" ) ) +
					( that.position.top - that.originalPosition.top ) ) || null;
	
				if ( !o.animate ) {
					this.element.css( $.extend( s, { top: top, left: left } ) );
				}
	
				that.helper.height( that.size.height );
				that.helper.width( that.size.width );
	
				if ( this._helper && !o.animate ) {
					this._proportionallyResize();
				}
			}
	
			$( "body" ).css( "cursor", "auto" );
	
			this._removeClass( "ui-resizable-resizing" );
	
			this._propagate( "stop", event );
	
			if ( this._helper ) {
				this.helper.remove();
			}
	
			return false;
	
		},
	
		_updatePrevProperties: function() {
			this.prevPosition = {
				top: this.position.top,
				left: this.position.left
			};
			this.prevSize = {
				width: this.size.width,
				height: this.size.height
			};
		},
	
		_applyChanges: function() {
			var props = {};
	
			if ( this.position.top !== this.prevPosition.top ) {
				props.top = this.position.top + "px";
			}
			if ( this.position.left !== this.prevPosition.left ) {
				props.left = this.position.left + "px";
			}
			if ( this.size.width !== this.prevSize.width ) {
				props.width = this.size.width + "px";
			}
			if ( this.size.height !== this.prevSize.height ) {
				props.height = this.size.height + "px";
			}
	
			this.helper.css( props );
	
			return props;
		},
	
		_updateVirtualBoundaries: function( forceAspectRatio ) {
			var pMinWidth, pMaxWidth, pMinHeight, pMaxHeight, b,
				o = this.options;
	
			b = {
				minWidth: this._isNumber( o.minWidth ) ? o.minWidth : 0,
				maxWidth: this._isNumber( o.maxWidth ) ? o.maxWidth : Infinity,
				minHeight: this._isNumber( o.minHeight ) ? o.minHeight : 0,
				maxHeight: this._isNumber( o.maxHeight ) ? o.maxHeight : Infinity
			};
	
			if ( this._aspectRatio || forceAspectRatio ) {
				pMinWidth = b.minHeight * this.aspectRatio;
				pMinHeight = b.minWidth / this.aspectRatio;
				pMaxWidth = b.maxHeight * this.aspectRatio;
				pMaxHeight = b.maxWidth / this.aspectRatio;
	
				if ( pMinWidth > b.minWidth ) {
					b.minWidth = pMinWidth;
				}
				if ( pMinHeight > b.minHeight ) {
					b.minHeight = pMinHeight;
				}
				if ( pMaxWidth < b.maxWidth ) {
					b.maxWidth = pMaxWidth;
				}
				if ( pMaxHeight < b.maxHeight ) {
					b.maxHeight = pMaxHeight;
				}
			}
			this._vBoundaries = b;
		},
	
		_updateCache: function( data ) {
			this.offset = this.helper.offset();
			if ( this._isNumber( data.left ) ) {
				this.position.left = data.left;
			}
			if ( this._isNumber( data.top ) ) {
				this.position.top = data.top;
			}
			if ( this._isNumber( data.height ) ) {
				this.size.height = data.height;
			}
			if ( this._isNumber( data.width ) ) {
				this.size.width = data.width;
			}
		},
	
		_updateRatio: function( data ) {
	
			var cpos = this.position,
				csize = this.size,
				a = this.axis;
	
			if ( this._isNumber( data.height ) ) {
				data.width = ( data.height * this.aspectRatio );
			} else if ( this._isNumber( data.width ) ) {
				data.height = ( data.width / this.aspectRatio );
			}
	
			if ( a === "sw" ) {
				data.left = cpos.left + ( csize.width - data.width );
				data.top = null;
			}
			if ( a === "nw" ) {
				data.top = cpos.top + ( csize.height - data.height );
				data.left = cpos.left + ( csize.width - data.width );
			}
	
			return data;
		},
	
		_respectSize: function( data ) {
	
			var o = this._vBoundaries,
				a = this.axis,
				ismaxw = this._isNumber( data.width ) && o.maxWidth && ( o.maxWidth < data.width ),
				ismaxh = this._isNumber( data.height ) && o.maxHeight && ( o.maxHeight < data.height ),
				isminw = this._isNumber( data.width ) && o.minWidth && ( o.minWidth > data.width ),
				isminh = this._isNumber( data.height ) && o.minHeight && ( o.minHeight > data.height ),
				dw = this.originalPosition.left + this.originalSize.width,
				dh = this.originalPosition.top + this.originalSize.height,
				cw = /sw|nw|w/.test( a ), ch = /nw|ne|n/.test( a );
			if ( isminw ) {
				data.width = o.minWidth;
			}
			if ( isminh ) {
				data.height = o.minHeight;
			}
			if ( ismaxw ) {
				data.width = o.maxWidth;
			}
			if ( ismaxh ) {
				data.height = o.maxHeight;
			}
	
			if ( isminw && cw ) {
				data.left = dw - o.minWidth;
			}
			if ( ismaxw && cw ) {
				data.left = dw - o.maxWidth;
			}
			if ( isminh && ch ) {
				data.top = dh - o.minHeight;
			}
			if ( ismaxh && ch ) {
				data.top = dh - o.maxHeight;
			}
	
			// Fixing jump error on top/left - bug #2330
			if ( !data.width && !data.height && !data.left && data.top ) {
				data.top = null;
			} else if ( !data.width && !data.height && !data.top && data.left ) {
				data.left = null;
			}
	
			return data;
		},
	
		_getPaddingPlusBorderDimensions: function( element ) {
			var i = 0,
				widths = [],
				borders = [
					element.css( "borderTopWidth" ),
					element.css( "borderRightWidth" ),
					element.css( "borderBottomWidth" ),
					element.css( "borderLeftWidth" )
				],
				paddings = [
					element.css( "paddingTop" ),
					element.css( "paddingRight" ),
					element.css( "paddingBottom" ),
					element.css( "paddingLeft" )
				];
	
			for ( ; i < 4; i++ ) {
				widths[ i ] = ( parseFloat( borders[ i ] ) || 0 );
				widths[ i ] += ( parseFloat( paddings[ i ] ) || 0 );
			}
	
			return {
				height: widths[ 0 ] + widths[ 2 ],
				width: widths[ 1 ] + widths[ 3 ]
			};
		},
	
		_proportionallyResize: function() {
	
			if ( !this._proportionallyResizeElements.length ) {
				return;
			}
	
			var prel,
				i = 0,
				element = this.helper || this.element;
	
			for ( ; i < this._proportionallyResizeElements.length; i++ ) {
	
				prel = this._proportionallyResizeElements[ i ];
	
				// TODO: Seems like a bug to cache this.outerDimensions
				// considering that we are in a loop.
				if ( !this.outerDimensions ) {
					this.outerDimensions = this._getPaddingPlusBorderDimensions( prel );
				}
	
				prel.css( {
					height: ( element.height() - this.outerDimensions.height ) || 0,
					width: ( element.width() - this.outerDimensions.width ) || 0
				} );
	
			}
	
		},
	
		_renderProxy: function() {
	
			var el = this.element, o = this.options;
			this.elementOffset = el.offset();
	
			if ( this._helper ) {
	
				this.helper = this.helper || $( "<div style='overflow:hidden;'></div>" );
	
				this._addClass( this.helper, this._helper );
				this.helper.css( {
					width: this.element.outerWidth(),
					height: this.element.outerHeight(),
					position: "absolute",
					left: this.elementOffset.left + "px",
					top: this.elementOffset.top + "px",
					zIndex: ++o.zIndex //TODO: Don't modify option
				} );
	
				this.helper
					.appendTo( "body" )
					.disableSelection();
	
			} else {
				this.helper = this.element;
			}
	
		},
	
		_change: {
			e: function( event, dx ) {
				return { width: this.originalSize.width + dx };
			},
			w: function( event, dx ) {
				var cs = this.originalSize, sp = this.originalPosition;
				return { left: sp.left + dx, width: cs.width - dx };
			},
			n: function( event, dx, dy ) {
				var cs = this.originalSize, sp = this.originalPosition;
				return { top: sp.top + dy, height: cs.height - dy };
			},
			s: function( event, dx, dy ) {
				return { height: this.originalSize.height + dy };
			},
			se: function( event, dx, dy ) {
				return $.extend( this._change.s.apply( this, arguments ),
					this._change.e.apply( this, [ event, dx, dy ] ) );
			},
			sw: function( event, dx, dy ) {
				return $.extend( this._change.s.apply( this, arguments ),
					this._change.w.apply( this, [ event, dx, dy ] ) );
			},
			ne: function( event, dx, dy ) {
				return $.extend( this._change.n.apply( this, arguments ),
					this._change.e.apply( this, [ event, dx, dy ] ) );
			},
			nw: function( event, dx, dy ) {
				return $.extend( this._change.n.apply( this, arguments ),
					this._change.w.apply( this, [ event, dx, dy ] ) );
			}
		},
	
		_propagate: function( n, event ) {
			$.ui.plugin.call( this, n, [ event, this.ui() ] );
			( n !== "resize" && this._trigger( n, event, this.ui() ) );
		},
	
		plugins: {},
	
		ui: function() {
			return {
				originalElement: this.originalElement,
				element: this.element,
				helper: this.helper,
				position: this.position,
				size: this.size,
				originalSize: this.originalSize,
				originalPosition: this.originalPosition
			};
		}
	
	} );
	
	/*
	 * Resizable Extensions
	 */
	
	$.ui.plugin.add( "resizable", "animate", {
	
		stop: function( event ) {
			var that = $( this ).resizable( "instance" ),
				o = that.options,
				pr = that._proportionallyResizeElements,
				ista = pr.length && ( /textarea/i ).test( pr[ 0 ].nodeName ),
				soffseth = ista && that._hasScroll( pr[ 0 ], "left" ) ? 0 : that.sizeDiff.height,
				soffsetw = ista ? 0 : that.sizeDiff.width,
				style = {
					width: ( that.size.width - soffsetw ),
					height: ( that.size.height - soffseth )
				},
				left = ( parseFloat( that.element.css( "left" ) ) +
					( that.position.left - that.originalPosition.left ) ) || null,
				top = ( parseFloat( that.element.css( "top" ) ) +
					( that.position.top - that.originalPosition.top ) ) || null;
	
			that.element.animate(
				$.extend( style, top && left ? { top: top, left: left } : {} ), {
					duration: o.animateDuration,
					easing: o.animateEasing,
					step: function() {
	
						var data = {
							width: parseFloat( that.element.css( "width" ) ),
							height: parseFloat( that.element.css( "height" ) ),
							top: parseFloat( that.element.css( "top" ) ),
							left: parseFloat( that.element.css( "left" ) )
						};
	
						if ( pr && pr.length ) {
							$( pr[ 0 ] ).css( { width: data.width, height: data.height } );
						}
	
						// Propagating resize, and updating values for each animation step
						that._updateCache( data );
						that._propagate( "resize", event );
	
					}
				}
			);
		}
	
	} );
	
	$.ui.plugin.add( "resizable", "containment", {
	
		start: function() {
			var element, p, co, ch, cw, width, height,
				that = $( this ).resizable( "instance" ),
				o = that.options,
				el = that.element,
				oc = o.containment,
				ce = ( oc instanceof $ ) ?
					oc.get( 0 ) :
					( /parent/.test( oc ) ) ? el.parent().get( 0 ) : oc;
	
			if ( !ce ) {
				return;
			}
	
			that.containerElement = $( ce );
	
			if ( /document/.test( oc ) || oc === document ) {
				that.containerOffset = {
					left: 0,
					top: 0
				};
				that.containerPosition = {
					left: 0,
					top: 0
				};
	
				that.parentData = {
					element: $( document ),
					left: 0,
					top: 0,
					width: $( document ).width(),
					height: $( document ).height() || document.body.parentNode.scrollHeight
				};
			} else {
				element = $( ce );
				p = [];
				$( [ "Top", "Right", "Left", "Bottom" ] ).each( function( i, name ) {
					p[ i ] = that._num( element.css( "padding" + name ) );
				} );
	
				that.containerOffset = element.offset();
				that.containerPosition = element.position();
				that.containerSize = {
					height: ( element.innerHeight() - p[ 3 ] ),
					width: ( element.innerWidth() - p[ 1 ] )
				};
	
				co = that.containerOffset;
				ch = that.containerSize.height;
				cw = that.containerSize.width;
				width = ( that._hasScroll ( ce, "left" ) ? ce.scrollWidth : cw );
				height = ( that._hasScroll ( ce ) ? ce.scrollHeight : ch ) ;
	
				that.parentData = {
					element: ce,
					left: co.left,
					top: co.top,
					width: width,
					height: height
				};
			}
		},
	
		resize: function( event ) {
			var woset, hoset, isParent, isOffsetRelative,
				that = $( this ).resizable( "instance" ),
				o = that.options,
				co = that.containerOffset,
				cp = that.position,
				pRatio = that._aspectRatio || event.shiftKey,
				cop = {
					top: 0,
					left: 0
				},
				ce = that.containerElement,
				continueResize = true;
	
			if ( ce[ 0 ] !== document && ( /static/ ).test( ce.css( "position" ) ) ) {
				cop = co;
			}
	
			if ( cp.left < ( that._helper ? co.left : 0 ) ) {
				that.size.width = that.size.width +
					( that._helper ?
						( that.position.left - co.left ) :
						( that.position.left - cop.left ) );
	
				if ( pRatio ) {
					that.size.height = that.size.width / that.aspectRatio;
					continueResize = false;
				}
				that.position.left = o.helper ? co.left : 0;
			}
	
			if ( cp.top < ( that._helper ? co.top : 0 ) ) {
				that.size.height = that.size.height +
					( that._helper ?
						( that.position.top - co.top ) :
						that.position.top );
	
				if ( pRatio ) {
					that.size.width = that.size.height * that.aspectRatio;
					continueResize = false;
				}
				that.position.top = that._helper ? co.top : 0;
			}
	
			isParent = that.containerElement.get( 0 ) === that.element.parent().get( 0 );
			isOffsetRelative = /relative|absolute/.test( that.containerElement.css( "position" ) );
	
			if ( isParent && isOffsetRelative ) {
				that.offset.left = that.parentData.left + that.position.left;
				that.offset.top = that.parentData.top + that.position.top;
			} else {
				that.offset.left = that.element.offset().left;
				that.offset.top = that.element.offset().top;
			}
	
			woset = Math.abs( that.sizeDiff.width +
				( that._helper ?
					that.offset.left - cop.left :
					( that.offset.left - co.left ) ) );
	
			hoset = Math.abs( that.sizeDiff.height +
				( that._helper ?
					that.offset.top - cop.top :
					( that.offset.top - co.top ) ) );
	
			if ( woset + that.size.width >= that.parentData.width ) {
				that.size.width = that.parentData.width - woset;
				if ( pRatio ) {
					that.size.height = that.size.width / that.aspectRatio;
					continueResize = false;
				}
			}
	
			if ( hoset + that.size.height >= that.parentData.height ) {
				that.size.height = that.parentData.height - hoset;
				if ( pRatio ) {
					that.size.width = that.size.height * that.aspectRatio;
					continueResize = false;
				}
			}
	
			if ( !continueResize ) {
				that.position.left = that.prevPosition.left;
				that.position.top = that.prevPosition.top;
				that.size.width = that.prevSize.width;
				that.size.height = that.prevSize.height;
			}
		},
	
		stop: function() {
			var that = $( this ).resizable( "instance" ),
				o = that.options,
				co = that.containerOffset,
				cop = that.containerPosition,
				ce = that.containerElement,
				helper = $( that.helper ),
				ho = helper.offset(),
				w = helper.outerWidth() - that.sizeDiff.width,
				h = helper.outerHeight() - that.sizeDiff.height;
	
			if ( that._helper && !o.animate && ( /relative/ ).test( ce.css( "position" ) ) ) {
				$( this ).css( {
					left: ho.left - cop.left - co.left,
					width: w,
					height: h
				} );
			}
	
			if ( that._helper && !o.animate && ( /static/ ).test( ce.css( "position" ) ) ) {
				$( this ).css( {
					left: ho.left - cop.left - co.left,
					width: w,
					height: h
				} );
			}
		}
	} );
	
	$.ui.plugin.add( "resizable", "alsoResize", {
	
		start: function() {
			var that = $( this ).resizable( "instance" ),
				o = that.options;
	
			$( o.alsoResize ).each( function() {
				var el = $( this );
				el.data( "ui-resizable-alsoresize", {
					width: parseFloat( el.width() ), height: parseFloat( el.height() ),
					left: parseFloat( el.css( "left" ) ), top: parseFloat( el.css( "top" ) )
				} );
			} );
		},
	
		resize: function( event, ui ) {
			var that = $( this ).resizable( "instance" ),
				o = that.options,
				os = that.originalSize,
				op = that.originalPosition,
				delta = {
					height: ( that.size.height - os.height ) || 0,
					width: ( that.size.width - os.width ) || 0,
					top: ( that.position.top - op.top ) || 0,
					left: ( that.position.left - op.left ) || 0
				};
	
				$( o.alsoResize ).each( function() {
					var el = $( this ), start = $( this ).data( "ui-resizable-alsoresize" ), style = {},
						css = el.parents( ui.originalElement[ 0 ] ).length ?
								[ "width", "height" ] :
								[ "width", "height", "top", "left" ];
	
					$.each( css, function( i, prop ) {
						var sum = ( start[ prop ] || 0 ) + ( delta[ prop ] || 0 );
						if ( sum && sum >= 0 ) {
							style[ prop ] = sum || null;
						}
					} );
	
					el.css( style );
				} );
		},
	
		stop: function() {
			$( this ).removeData( "ui-resizable-alsoresize" );
		}
	} );
	
	$.ui.plugin.add( "resizable", "ghost", {
	
		start: function() {
	
			var that = $( this ).resizable( "instance" ), cs = that.size;
	
			that.ghost = that.originalElement.clone();
			that.ghost.css( {
				opacity: 0.25,
				display: "block",
				position: "relative",
				height: cs.height,
				width: cs.width,
				margin: 0,
				left: 0,
				top: 0
			} );
	
			that._addClass( that.ghost, "ui-resizable-ghost" );
	
			// DEPRECATED
			// TODO: remove after 1.12
			if ( $.uiBackCompat !== false && typeof that.options.ghost === "string" ) {
	
				// Ghost option
				that.ghost.addClass( this.options.ghost );
			}
	
			that.ghost.appendTo( that.helper );
	
		},
	
		resize: function() {
			var that = $( this ).resizable( "instance" );
			if ( that.ghost ) {
				that.ghost.css( {
					position: "relative",
					height: that.size.height,
					width: that.size.width
				} );
			}
		},
	
		stop: function() {
			var that = $( this ).resizable( "instance" );
			if ( that.ghost && that.helper ) {
				that.helper.get( 0 ).removeChild( that.ghost.get( 0 ) );
			}
		}
	
	} );
	
	$.ui.plugin.add( "resizable", "grid", {
	
		resize: function() {
			var outerDimensions,
				that = $( this ).resizable( "instance" ),
				o = that.options,
				cs = that.size,
				os = that.originalSize,
				op = that.originalPosition,
				a = that.axis,
				grid = typeof o.grid === "number" ? [ o.grid, o.grid ] : o.grid,
				gridX = ( grid[ 0 ] || 1 ),
				gridY = ( grid[ 1 ] || 1 ),
				ox = Math.round( ( cs.width - os.width ) / gridX ) * gridX,
				oy = Math.round( ( cs.height - os.height ) / gridY ) * gridY,
				newWidth = os.width + ox,
				newHeight = os.height + oy,
				isMaxWidth = o.maxWidth && ( o.maxWidth < newWidth ),
				isMaxHeight = o.maxHeight && ( o.maxHeight < newHeight ),
				isMinWidth = o.minWidth && ( o.minWidth > newWidth ),
				isMinHeight = o.minHeight && ( o.minHeight > newHeight );
	
			o.grid = grid;
	
			if ( isMinWidth ) {
				newWidth += gridX;
			}
			if ( isMinHeight ) {
				newHeight += gridY;
			}
			if ( isMaxWidth ) {
				newWidth -= gridX;
			}
			if ( isMaxHeight ) {
				newHeight -= gridY;
			}
	
			if ( /^(se|s|e)$/.test( a ) ) {
				that.size.width = newWidth;
				that.size.height = newHeight;
			} else if ( /^(ne)$/.test( a ) ) {
				that.size.width = newWidth;
				that.size.height = newHeight;
				that.position.top = op.top - oy;
			} else if ( /^(sw)$/.test( a ) ) {
				that.size.width = newWidth;
				that.size.height = newHeight;
				that.position.left = op.left - ox;
			} else {
				if ( newHeight - gridY <= 0 || newWidth - gridX <= 0 ) {
					outerDimensions = that._getPaddingPlusBorderDimensions( this );
				}
	
				if ( newHeight - gridY > 0 ) {
					that.size.height = newHeight;
					that.position.top = op.top - oy;
				} else {
					newHeight = gridY - outerDimensions.height;
					that.size.height = newHeight;
					that.position.top = op.top + os.height - newHeight;
				}
				if ( newWidth - gridX > 0 ) {
					that.size.width = newWidth;
					that.position.left = op.left - ox;
				} else {
					newWidth = gridX - outerDimensions.width;
					that.size.width = newWidth;
					that.position.left = op.left + os.width - newWidth;
				}
			}
		}
	
	} );
	
	return $.ui.resizable;
	
	} ) );


/***/ }),
/* 31 */
/***/ (function(module, exports, __webpack_require__) {

	var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
	 * jQuery UI Disable Selection 1.12.1
	 * http://jqueryui.com
	 *
	 * Copyright jQuery Foundation and other contributors
	 * Released under the MIT license.
	 * http://jquery.org/license
	 */
	
	//>>label: disableSelection
	//>>group: Core
	//>>description: Disable selection of text content within the set of matched elements.
	//>>docs: http://api.jqueryui.com/disableSelection/
	
	// This file is deprecated
	( function( factory ) {
		if ( true ) {
	
			// AMD. Register as an anonymous module.
			!(__WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(7), __webpack_require__(13) ], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
		} else {
	
			// Browser globals
			factory( jQuery );
		}
	} ( function( $ ) {
	
	return $.fn.extend( {
		disableSelection: ( function() {
			var eventType = "onselectstart" in document.createElement( "div" ) ?
				"selectstart" :
				"mousedown";
	
			return function() {
				return this.on( eventType + ".ui-disableSelection", function( event ) {
					event.preventDefault();
				} );
			};
		} )(),
	
		enableSelection: function() {
			return this.off( ".ui-disableSelection" );
		}
	} );
	
	} ) );


/***/ }),
/* 32 */
/***/ (function(module, exports, __webpack_require__) {

	var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
	 * jQuery UI Focusable 1.12.1
	 * http://jqueryui.com
	 *
	 * Copyright jQuery Foundation and other contributors
	 * Released under the MIT license.
	 * http://jquery.org/license
	 */
	
	//>>label: :focusable Selector
	//>>group: Core
	//>>description: Selects elements which can be focused.
	//>>docs: http://api.jqueryui.com/focusable-selector/
	
	( function( factory ) {
		if ( true ) {
	
			// AMD. Register as an anonymous module.
			!(__WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(7), __webpack_require__(13) ], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
		} else {
	
			// Browser globals
			factory( jQuery );
		}
	} ( function( $ ) {
	
	// Selectors
	$.ui.focusable = function( element, hasTabindex ) {
		var map, mapName, img, focusableIfVisible, fieldset,
			nodeName = element.nodeName.toLowerCase();
	
		if ( "area" === nodeName ) {
			map = element.parentNode;
			mapName = map.name;
			if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) {
				return false;
			}
			img = $( "img[usemap='#" + mapName + "']" );
			return img.length > 0 && img.is( ":visible" );
		}
	
		if ( /^(input|select|textarea|button|object)$/.test( nodeName ) ) {
			focusableIfVisible = !element.disabled;
	
			if ( focusableIfVisible ) {
	
				// Form controls within a disabled fieldset are disabled.
				// However, controls within the fieldset's legend do not get disabled.
				// Since controls generally aren't placed inside legends, we skip
				// this portion of the check.
				fieldset = $( element ).closest( "fieldset" )[ 0 ];
				if ( fieldset ) {
					focusableIfVisible = !fieldset.disabled;
				}
			}
		} else if ( "a" === nodeName ) {
			focusableIfVisible = element.href || hasTabindex;
		} else {
			focusableIfVisible = hasTabindex;
		}
	
		return focusableIfVisible && $( element ).is( ":visible" ) && visible( $( element ) );
	};
	
	// Support: IE 8 only
	// IE 8 doesn't resolve inherit to visible/hidden for computed values
	function visible( element ) {
		var visibility = element.css( "visibility" );
		while ( visibility === "inherit" ) {
			element = element.parent();
			visibility = element.css( "visibility" );
		}
		return visibility !== "hidden";
	}
	
	$.extend( $.expr[ ":" ], {
		focusable: function( element ) {
			return $.ui.focusable( element, $.attr( element, "tabindex" ) != null );
		}
	} );
	
	return $.ui.focusable;
	
	} ) );


/***/ }),
/* 33 */
/***/ (function(module, exports, __webpack_require__) {

	var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
	 * jQuery UI Tabbable 1.12.1
	 * http://jqueryui.com
	 *
	 * Copyright jQuery Foundation and other contributors
	 * Released under the MIT license.
	 * http://jquery.org/license
	 */
	
	//>>label: :tabbable Selector
	//>>group: Core
	//>>description: Selects elements which can be tabbed to.
	//>>docs: http://api.jqueryui.com/tabbable-selector/
	
	( function( factory ) {
		if ( true ) {
	
			// AMD. Register as an anonymous module.
			!(__WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(7), __webpack_require__(13), __webpack_require__(32) ], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
		} else {
	
			// Browser globals
			factory( jQuery );
		}
	} ( function( $ ) {
	
	return $.extend( $.expr[ ":" ], {
		tabbable: function( element ) {
			var tabIndex = $.attr( element, "tabindex" ),
				hasTabindex = tabIndex != null;
			return ( !hasTabindex || tabIndex >= 0 ) && $.ui.focusable( element, hasTabindex );
		}
	} );
	
	} ) );


/***/ }),
/* 34 */
/***/ (function(module, exports, __webpack_require__) {

	var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
	 * jQuery UI Unique ID 1.12.1
	 * http://jqueryui.com
	 *
	 * Copyright jQuery Foundation and other contributors
	 * Released under the MIT license.
	 * http://jquery.org/license
	 */
	
	//>>label: uniqueId
	//>>group: Core
	//>>description: Functions to generate and remove uniqueId's
	//>>docs: http://api.jqueryui.com/uniqueId/
	
	( function( factory ) {
		if ( true ) {
	
			// AMD. Register as an anonymous module.
			!(__WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(7), __webpack_require__(13) ], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
		} else {
	
			// Browser globals
			factory( jQuery );
		}
	} ( function( $ ) {
	
	return $.fn.extend( {
		uniqueId: ( function() {
			var uuid = 0;
	
			return function() {
				return this.each( function() {
					if ( !this.id ) {
						this.id = "ui-id-" + ( ++uuid );
					}
				} );
			};
		} )(),
	
		removeUniqueId: function() {
			return this.each( function() {
				if ( /^ui-id-\d+$/.test( this.id ) ) {
					$( this ).removeAttr( "id" );
				}
			} );
		}
	} );
	
	} ) );


/***/ }),
/* 35 */
/***/ (function(module, exports, __webpack_require__) {

	var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
	 * jQuery UI Position 1.12.1
	 * http://jqueryui.com
	 *
	 * Copyright jQuery Foundation and other contributors
	 * Released under the MIT license.
	 * http://jquery.org/license
	 *
	 * http://api.jqueryui.com/position/
	 */
	
	//>>label: Position
	//>>group: Core
	//>>description: Positions elements relative to other elements.
	//>>docs: http://api.jqueryui.com/position/
	//>>demos: http://jqueryui.com/position/
	
	( function( factory ) {
		if ( true ) {
	
			// AMD. Register as an anonymous module.
			!(__WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(7), __webpack_require__(13) ], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
		} else {
	
			// Browser globals
			factory( jQuery );
		}
	}( function( $ ) {
	( function() {
	var cachedScrollbarWidth,
		max = Math.max,
		abs = Math.abs,
		rhorizontal = /left|center|right/,
		rvertical = /top|center|bottom/,
		roffset = /[\+\-]\d+(\.[\d]+)?%?/,
		rposition = /^\w+/,
		rpercent = /%$/,
		_position = $.fn.position;
	
	function getOffsets( offsets, width, height ) {
		return [
			parseFloat( offsets[ 0 ] ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ),
			parseFloat( offsets[ 1 ] ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 )
		];
	}
	
	function parseCss( element, property ) {
		return parseInt( $.css( element, property ), 10 ) || 0;
	}
	
	function getDimensions( elem ) {
		var raw = elem[ 0 ];
		if ( raw.nodeType === 9 ) {
			return {
				width: elem.width(),
				height: elem.height(),
				offset: { top: 0, left: 0 }
			};
		}
		if ( $.isWindow( raw ) ) {
			return {
				width: elem.width(),
				height: elem.height(),
				offset: { top: elem.scrollTop(), left: elem.scrollLeft() }
			};
		}
		if ( raw.preventDefault ) {
			return {
				width: 0,
				height: 0,
				offset: { top: raw.pageY, left: raw.pageX }
			};
		}
		return {
			width: elem.outerWidth(),
			height: elem.outerHeight(),
			offset: elem.offset()
		};
	}
	
	$.position = {
		scrollbarWidth: function() {
			if ( cachedScrollbarWidth !== undefined ) {
				return cachedScrollbarWidth;
			}
			var w1, w2,
				div = $( "<div " +
					"style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'>" +
					"<div style='height:100px;width:auto;'></div></div>" ),
				innerDiv = div.children()[ 0 ];
	
			$( "body" ).append( div );
			w1 = innerDiv.offsetWidth;
			div.css( "overflow", "scroll" );
	
			w2 = innerDiv.offsetWidth;
	
			if ( w1 === w2 ) {
				w2 = div[ 0 ].clientWidth;
			}
	
			div.remove();
	
			return ( cachedScrollbarWidth = w1 - w2 );
		},
		getScrollInfo: function( within ) {
			var overflowX = within.isWindow || within.isDocument ? "" :
					within.element.css( "overflow-x" ),
				overflowY = within.isWindow || within.isDocument ? "" :
					within.element.css( "overflow-y" ),
				hasOverflowX = overflowX === "scroll" ||
					( overflowX === "auto" && within.width < within.element[ 0 ].scrollWidth ),
				hasOverflowY = overflowY === "scroll" ||
					( overflowY === "auto" && within.height < within.element[ 0 ].scrollHeight );
			return {
				width: hasOverflowY ? $.position.scrollbarWidth() : 0,
				height: hasOverflowX ? $.position.scrollbarWidth() : 0
			};
		},
		getWithinInfo: function( element ) {
			var withinElement = $( element || window ),
				isWindow = $.isWindow( withinElement[ 0 ] ),
				isDocument = !!withinElement[ 0 ] && withinElement[ 0 ].nodeType === 9,
				hasOffset = !isWindow && !isDocument;
			return {
				element: withinElement,
				isWindow: isWindow,
				isDocument: isDocument,
				offset: hasOffset ? $( element ).offset() : { left: 0, top: 0 },
				scrollLeft: withinElement.scrollLeft(),
				scrollTop: withinElement.scrollTop(),
				width: withinElement.outerWidth(),
				height: withinElement.outerHeight()
			};
		}
	};
	
	$.fn.position = function( options ) {
		if ( !options || !options.of ) {
			return _position.apply( this, arguments );
		}
	
		// Make a copy, we don't want to modify arguments
		options = $.extend( {}, options );
	
		var atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions,
			target = $( options.of ),
			within = $.position.getWithinInfo( options.within ),
			scrollInfo = $.position.getScrollInfo( within ),
			collision = ( options.collision || "flip" ).split( " " ),
			offsets = {};
	
		dimensions = getDimensions( target );
		if ( target[ 0 ].preventDefault ) {
	
			// Force left top to allow flipping
			options.at = "left top";
		}
		targetWidth = dimensions.width;
		targetHeight = dimensions.height;
		targetOffset = dimensions.offset;
	
		// Clone to reuse original targetOffset later
		basePosition = $.extend( {}, targetOffset );
	
		// Force my and at to have valid horizontal and vertical positions
		// if a value is missing or invalid, it will be converted to center
		$.each( [ "my", "at" ], function() {
			var pos = ( options[ this ] || "" ).split( " " ),
				horizontalOffset,
				verticalOffset;
	
			if ( pos.length === 1 ) {
				pos = rhorizontal.test( pos[ 0 ] ) ?
					pos.concat( [ "center" ] ) :
					rvertical.test( pos[ 0 ] ) ?
						[ "center" ].concat( pos ) :
						[ "center", "center" ];
			}
			pos[ 0 ] = rhorizontal.test( pos[ 0 ] ) ? pos[ 0 ] : "center";
			pos[ 1 ] = rvertical.test( pos[ 1 ] ) ? pos[ 1 ] : "center";
	
			// Calculate offsets
			horizontalOffset = roffset.exec( pos[ 0 ] );
			verticalOffset = roffset.exec( pos[ 1 ] );
			offsets[ this ] = [
				horizontalOffset ? horizontalOffset[ 0 ] : 0,
				verticalOffset ? verticalOffset[ 0 ] : 0
			];
	
			// Reduce to just the positions without the offsets
			options[ this ] = [
				rposition.exec( pos[ 0 ] )[ 0 ],
				rposition.exec( pos[ 1 ] )[ 0 ]
			];
		} );
	
		// Normalize collision option
		if ( collision.length === 1 ) {
			collision[ 1 ] = collision[ 0 ];
		}
	
		if ( options.at[ 0 ] === "right" ) {
			basePosition.left += targetWidth;
		} else if ( options.at[ 0 ] === "center" ) {
			basePosition.left += targetWidth / 2;
		}
	
		if ( options.at[ 1 ] === "bottom" ) {
			basePosition.top += targetHeight;
		} else if ( options.at[ 1 ] === "center" ) {
			basePosition.top += targetHeight / 2;
		}
	
		atOffset = getOffsets( offsets.at, targetWidth, targetHeight );
		basePosition.left += atOffset[ 0 ];
		basePosition.top += atOffset[ 1 ];
	
		return this.each( function() {
			var collisionPosition, using,
				elem = $( this ),
				elemWidth = elem.outerWidth(),
				elemHeight = elem.outerHeight(),
				marginLeft = parseCss( this, "marginLeft" ),
				marginTop = parseCss( this, "marginTop" ),
				collisionWidth = elemWidth + marginLeft + parseCss( this, "marginRight" ) +
					scrollInfo.width,
				collisionHeight = elemHeight + marginTop + parseCss( this, "marginBottom" ) +
					scrollInfo.height,
				position = $.extend( {}, basePosition ),
				myOffset = getOffsets( offsets.my, elem.outerWidth(), elem.outerHeight() );
	
			if ( options.my[ 0 ] === "right" ) {
				position.left -= elemWidth;
			} else if ( options.my[ 0 ] === "center" ) {
				position.left -= elemWidth / 2;
			}
	
			if ( options.my[ 1 ] === "bottom" ) {
				position.top -= elemHeight;
			} else if ( options.my[ 1 ] === "center" ) {
				position.top -= elemHeight / 2;
			}
	
			position.left += myOffset[ 0 ];
			position.top += myOffset[ 1 ];
	
			collisionPosition = {
				marginLeft: marginLeft,
				marginTop: marginTop
			};
	
			$.each( [ "left", "top" ], function( i, dir ) {
				if ( $.ui.position[ collision[ i ] ] ) {
					$.ui.position[ collision[ i ] ][ dir ]( position, {
						targetWidth: targetWidth,
						targetHeight: targetHeight,
						elemWidth: elemWidth,
						elemHeight: elemHeight,
						collisionPosition: collisionPosition,
						collisionWidth: collisionWidth,
						collisionHeight: collisionHeight,
						offset: [ atOffset[ 0 ] + myOffset[ 0 ], atOffset [ 1 ] + myOffset[ 1 ] ],
						my: options.my,
						at: options.at,
						within: within,
						elem: elem
					} );
				}
			} );
	
			if ( options.using ) {
	
				// Adds feedback as second argument to using callback, if present
				using = function( props ) {
					var left = targetOffset.left - position.left,
						right = left + targetWidth - elemWidth,
						top = targetOffset.top - position.top,
						bottom = top + targetHeight - elemHeight,
						feedback = {
							target: {
								element: target,
								left: targetOffset.left,
								top: targetOffset.top,
								width: targetWidth,
								height: targetHeight
							},
							element: {
								element: elem,
								left: position.left,
								top: position.top,
								width: elemWidth,
								height: elemHeight
							},
							horizontal: right < 0 ? "left" : left > 0 ? "right" : "center",
							vertical: bottom < 0 ? "top" : top > 0 ? "bottom" : "middle"
						};
					if ( targetWidth < elemWidth && abs( left + right ) < targetWidth ) {
						feedback.horizontal = "center";
					}
					if ( targetHeight < elemHeight && abs( top + bottom ) < targetHeight ) {
						feedback.vertical = "middle";
					}
					if ( max( abs( left ), abs( right ) ) > max( abs( top ), abs( bottom ) ) ) {
						feedback.important = "horizontal";
					} else {
						feedback.important = "vertical";
					}
					options.using.call( this, props, feedback );
				};
			}
	
			elem.offset( $.extend( position, { using: using } ) );
		} );
	};
	
	$.ui.position = {
		fit: {
			left: function( position, data ) {
				var within = data.within,
					withinOffset = within.isWindow ? within.scrollLeft : within.offset.left,
					outerWidth = within.width,
					collisionPosLeft = position.left - data.collisionPosition.marginLeft,
					overLeft = withinOffset - collisionPosLeft,
					overRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset,
					newOverRight;
	
				// Element is wider than within
				if ( data.collisionWidth > outerWidth ) {
	
					// Element is initially over the left side of within
					if ( overLeft > 0 && overRight <= 0 ) {
						newOverRight = position.left + overLeft + data.collisionWidth - outerWidth -
							withinOffset;
						position.left += overLeft - newOverRight;
	
					// Element is initially over right side of within
					} else if ( overRight > 0 && overLeft <= 0 ) {
						position.left = withinOffset;
	
					// Element is initially over both left and right sides of within
					} else {
						if ( overLeft > overRight ) {
							position.left = withinOffset + outerWidth - data.collisionWidth;
						} else {
							position.left = withinOffset;
						}
					}
	
				// Too far left -> align with left edge
				} else if ( overLeft > 0 ) {
					position.left += overLeft;
	
				// Too far right -> align with right edge
				} else if ( overRight > 0 ) {
					position.left -= overRight;
	
				// Adjust based on position and margin
				} else {
					position.left = max( position.left - collisionPosLeft, position.left );
				}
			},
			top: function( position, data ) {
				var within = data.within,
					withinOffset = within.isWindow ? within.scrollTop : within.offset.top,
					outerHeight = data.within.height,
					collisionPosTop = position.top - data.collisionPosition.marginTop,
					overTop = withinOffset - collisionPosTop,
					overBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset,
					newOverBottom;
	
				// Element is taller than within
				if ( data.collisionHeight > outerHeight ) {
	
					// Element is initially over the top of within
					if ( overTop > 0 && overBottom <= 0 ) {
						newOverBottom = position.top + overTop + data.collisionHeight - outerHeight -
							withinOffset;
						position.top += overTop - newOverBottom;
	
					// Element is initially over bottom of within
					} else if ( overBottom > 0 && overTop <= 0 ) {
						position.top = withinOffset;
	
					// Element is initially over both top and bottom of within
					} else {
						if ( overTop > overBottom ) {
							position.top = withinOffset + outerHeight - data.collisionHeight;
						} else {
							position.top = withinOffset;
						}
					}
	
				// Too far up -> align with top
				} else if ( overTop > 0 ) {
					position.top += overTop;
	
				// Too far down -> align with bottom edge
				} else if ( overBottom > 0 ) {
					position.top -= overBottom;
	
				// Adjust based on position and margin
				} else {
					position.top = max( position.top - collisionPosTop, position.top );
				}
			}
		},
		flip: {
			left: function( position, data ) {
				var within = data.within,
					withinOffset = within.offset.left + within.scrollLeft,
					outerWidth = within.width,
					offsetLeft = within.isWindow ? within.scrollLeft : within.offset.left,
					collisionPosLeft = position.left - data.collisionPosition.marginLeft,
					overLeft = collisionPosLeft - offsetLeft,
					overRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft,
					myOffset = data.my[ 0 ] === "left" ?
						-data.elemWidth :
						data.my[ 0 ] === "right" ?
							data.elemWidth :
							0,
					atOffset = data.at[ 0 ] === "left" ?
						data.targetWidth :
						data.at[ 0 ] === "right" ?
							-data.targetWidth :
							0,
					offset = -2 * data.offset[ 0 ],
					newOverRight,
					newOverLeft;
	
				if ( overLeft < 0 ) {
					newOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth -
						outerWidth - withinOffset;
					if ( newOverRight < 0 || newOverRight < abs( overLeft ) ) {
						position.left += myOffset + atOffset + offset;
					}
				} else if ( overRight > 0 ) {
					newOverLeft = position.left - data.collisionPosition.marginLeft + myOffset +
						atOffset + offset - offsetLeft;
					if ( newOverLeft > 0 || abs( newOverLeft ) < overRight ) {
						position.left += myOffset + atOffset + offset;
					}
				}
			},
			top: function( position, data ) {
				var within = data.within,
					withinOffset = within.offset.top + within.scrollTop,
					outerHeight = within.height,
					offsetTop = within.isWindow ? within.scrollTop : within.offset.top,
					collisionPosTop = position.top - data.collisionPosition.marginTop,
					overTop = collisionPosTop - offsetTop,
					overBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop,
					top = data.my[ 1 ] === "top",
					myOffset = top ?
						-data.elemHeight :
						data.my[ 1 ] === "bottom" ?
							data.elemHeight :
							0,
					atOffset = data.at[ 1 ] === "top" ?
						data.targetHeight :
						data.at[ 1 ] === "bottom" ?
							-data.targetHeight :
							0,
					offset = -2 * data.offset[ 1 ],
					newOverTop,
					newOverBottom;
				if ( overTop < 0 ) {
					newOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight -
						outerHeight - withinOffset;
					if ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) {
						position.top += myOffset + atOffset + offset;
					}
				} else if ( overBottom > 0 ) {
					newOverTop = position.top - data.collisionPosition.marginTop + myOffset + atOffset +
						offset - offsetTop;
					if ( newOverTop > 0 || abs( newOverTop ) < overBottom ) {
						position.top += myOffset + atOffset + offset;
					}
				}
			}
		},
		flipfit: {
			left: function() {
				$.ui.position.flip.left.apply( this, arguments );
				$.ui.position.fit.left.apply( this, arguments );
			},
			top: function() {
				$.ui.position.flip.top.apply( this, arguments );
				$.ui.position.fit.top.apply( this, arguments );
			}
		}
	};
	
	} )();
	
	return $.ui.position;
	
	} ) );


/***/ }),
/* 36 */
/***/ (function(module, exports, __webpack_require__) {

	// style-loader: Adds some css to the DOM by adding a <style> tag
	
	// load the styles
	var content = __webpack_require__(37);
	if(typeof content === 'string') content = [[module.id, content, '']];
	// add the styles to the DOM
	var update = __webpack_require__(66)(content, {});
	if(content.locals) module.exports = content.locals;
	// Hot Module Replacement
	if(false) {
		// When the styles change, update the <style> tags
		if(!content.locals) {
			module.hot.accept("!!../../../css-loader/index.js!./all.css", function() {
				var newContent = require("!!../../../css-loader/index.js!./all.css");
				if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
				update(newContent);
			});
		}
		// When the module is disposed, remove the <style> tags
		module.hot.dispose(function() { update(); });
	}

/***/ }),
/* 37 */
/***/ (function(module, exports, __webpack_require__) {

	exports = module.exports = __webpack_require__(38)();
	// imports
	exports.i(__webpack_require__(39), "");
	exports.i(__webpack_require__(59), "");
	
	// module
	exports.push([module.id, "/*!\n * jQuery UI CSS Framework 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/category/theming/\n */\n", ""]);
	
	// exports


/***/ }),
/* 38 */
/***/ (function(module, exports) {

	/*
		MIT License http://www.opensource.org/licenses/mit-license.php
		Author Tobias Koppers @sokra
	*/
	// css base code, injected by the css-loader
	module.exports = function() {
		var list = [];
	
		// return the list of modules as css string
		list.toString = function toString() {
			var result = [];
			for(var i = 0; i < this.length; i++) {
				var item = this[i];
				if(item[2]) {
					result.push("@media " + item[2] + "{" + item[1] + "}");
				} else {
					result.push(item[1]);
				}
			}
			return result.join("");
		};
	
		// import a list of modules into the list
		list.i = function(modules, mediaQuery) {
			if(typeof modules === "string")
				modules = [[null, modules, ""]];
			var alreadyImportedModules = {};
			for(var i = 0; i < this.length; i++) {
				var id = this[i][0];
				if(typeof id === "number")
					alreadyImportedModules[id] = true;
			}
			for(i = 0; i < modules.length; i++) {
				var item = modules[i];
				// skip already imported module
				// this implementation is not 100% perfect for weird media query combinations
				//  when a module is imported multiple times with different media queries.
				//  I hope this will never occur (Hey this way we have smaller bundles)
				if(typeof item[0] !== "number" || !alreadyImportedModules[item[0]]) {
					if(mediaQuery && !item[2]) {
						item[2] = mediaQuery;
					} else if(mediaQuery) {
						item[2] = "(" + item[2] + ") and (" + mediaQuery + ")";
					}
					list.push(item);
				}
			}
		};
		return list;
	};


/***/ }),
/* 39 */
/***/ (function(module, exports, __webpack_require__) {

	exports = module.exports = __webpack_require__(38)();
	// imports
	exports.i(__webpack_require__(40), "");
	exports.i(__webpack_require__(41), "");
	exports.i(__webpack_require__(42), "");
	exports.i(__webpack_require__(43), "");
	exports.i(__webpack_require__(44), "");
	exports.i(__webpack_require__(45), "");
	exports.i(__webpack_require__(46), "");
	exports.i(__webpack_require__(47), "");
	exports.i(__webpack_require__(48), "");
	exports.i(__webpack_require__(49), "");
	exports.i(__webpack_require__(50), "");
	exports.i(__webpack_require__(51), "");
	exports.i(__webpack_require__(52), "");
	exports.i(__webpack_require__(53), "");
	exports.i(__webpack_require__(54), "");
	exports.i(__webpack_require__(55), "");
	exports.i(__webpack_require__(56), "");
	exports.i(__webpack_require__(57), "");
	exports.i(__webpack_require__(58), "");
	
	// module
	exports.push([module.id, "/*!\n * jQuery UI CSS Framework 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/category/theming/\n */\n", ""]);
	
	// exports


/***/ }),
/* 40 */
/***/ (function(module, exports, __webpack_require__) {

	exports = module.exports = __webpack_require__(38)();
	// imports
	
	
	// module
	exports.push([module.id, "/*!\n * jQuery UI CSS Framework 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/category/theming/\n */\n\n/* Layout helpers\n----------------------------------*/\n.ui-helper-hidden {\n\tdisplay: none;\n}\n.ui-helper-hidden-accessible {\n\tborder: 0;\n\tclip: rect(0 0 0 0);\n\theight: 1px;\n\tmargin: -1px;\n\toverflow: hidden;\n\tpadding: 0;\n\tposition: absolute;\n\twidth: 1px;\n}\n.ui-helper-reset {\n\tmargin: 0;\n\tpadding: 0;\n\tborder: 0;\n\toutline: 0;\n\tline-height: 1.3;\n\ttext-decoration: none;\n\tfont-size: 100%;\n\tlist-style: none;\n}\n.ui-helper-clearfix:before,\n.ui-helper-clearfix:after {\n\tcontent: \"\";\n\tdisplay: table;\n\tborder-collapse: collapse;\n}\n.ui-helper-clearfix:after {\n\tclear: both;\n}\n.ui-helper-zfix {\n\twidth: 100%;\n\theight: 100%;\n\ttop: 0;\n\tleft: 0;\n\tposition: absolute;\n\topacity: 0;\n\tfilter:Alpha(Opacity=0); /* support: IE8 */\n}\n\n.ui-front {\n\tz-index: 100;\n}\n\n\n/* Interaction Cues\n----------------------------------*/\n.ui-state-disabled {\n\tcursor: default !important;\n\tpointer-events: none;\n}\n\n\n/* Icons\n----------------------------------*/\n.ui-icon {\n\tdisplay: inline-block;\n\tvertical-align: middle;\n\tmargin-top: -.25em;\n\tposition: relative;\n\ttext-indent: -99999px;\n\toverflow: hidden;\n\tbackground-repeat: no-repeat;\n}\n\n.ui-widget-icon-block {\n\tleft: 50%;\n\tmargin-left: -8px;\n\tdisplay: block;\n}\n\n/* Misc visuals\n----------------------------------*/\n\n/* Overlays */\n.ui-widget-overlay {\n\tposition: fixed;\n\ttop: 0;\n\tleft: 0;\n\twidth: 100%;\n\theight: 100%;\n}\n", ""]);
	
	// exports


/***/ }),
/* 41 */
/***/ (function(module, exports, __webpack_require__) {

	exports = module.exports = __webpack_require__(38)();
	// imports
	
	
	// module
	exports.push([module.id, "/*!\n * jQuery UI Accordion 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/accordion/#theming\n */\n.ui-accordion .ui-accordion-header {\n\tdisplay: block;\n\tcursor: pointer;\n\tposition: relative;\n\tmargin: 2px 0 0 0;\n\tpadding: .5em .5em .5em .7em;\n\tfont-size: 100%;\n}\n.ui-accordion .ui-accordion-content {\n\tpadding: 1em 2.2em;\n\tborder-top: 0;\n\toverflow: auto;\n}\n", ""]);
	
	// exports


/***/ }),
/* 42 */
/***/ (function(module, exports, __webpack_require__) {

	exports = module.exports = __webpack_require__(38)();
	// imports
	
	
	// module
	exports.push([module.id, "/*!\n * jQuery UI Autocomplete 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/autocomplete/#theming\n */\n.ui-autocomplete {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tcursor: default;\n}\n", ""]);
	
	// exports


/***/ }),
/* 43 */
/***/ (function(module, exports, __webpack_require__) {

	exports = module.exports = __webpack_require__(38)();
	// imports
	
	
	// module
	exports.push([module.id, "/*!\n * jQuery UI Button 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/button/#theming\n */\n.ui-button {\n\tpadding: .4em 1em;\n\tdisplay: inline-block;\n\tposition: relative;\n\tline-height: normal;\n\tmargin-right: .1em;\n\tcursor: pointer;\n\tvertical-align: middle;\n\ttext-align: center;\n\t-webkit-user-select: none;\n\t-moz-user-select: none;\n\t-ms-user-select: none;\n\tuser-select: none;\n\n\t/* Support: IE <= 11 */\n\toverflow: visible;\n}\n\n.ui-button,\n.ui-button:link,\n.ui-button:visited,\n.ui-button:hover,\n.ui-button:active {\n\ttext-decoration: none;\n}\n\n/* to make room for the icon, a width needs to be set here */\n.ui-button-icon-only {\n\twidth: 2em;\n\tbox-sizing: border-box;\n\ttext-indent: -9999px;\n\twhite-space: nowrap;\n}\n\n/* no icon support for input elements */\ninput.ui-button.ui-button-icon-only {\n\ttext-indent: 0;\n}\n\n/* button icon element(s) */\n.ui-button-icon-only .ui-icon {\n\tposition: absolute;\n\ttop: 50%;\n\tleft: 50%;\n\tmargin-top: -8px;\n\tmargin-left: -8px;\n}\n\n.ui-button.ui-icon-notext .ui-icon {\n\tpadding: 0;\n\twidth: 2.1em;\n\theight: 2.1em;\n\ttext-indent: -9999px;\n\twhite-space: nowrap;\n\n}\n\ninput.ui-button.ui-icon-notext .ui-icon {\n\twidth: auto;\n\theight: auto;\n\ttext-indent: 0;\n\twhite-space: normal;\n\tpadding: .4em 1em;\n}\n\n/* workarounds */\n/* Support: Firefox 5 - 40 */\ninput.ui-button::-moz-focus-inner,\nbutton.ui-button::-moz-focus-inner {\n\tborder: 0;\n\tpadding: 0;\n}\n", ""]);
	
	// exports


/***/ }),
/* 44 */
/***/ (function(module, exports, __webpack_require__) {

	exports = module.exports = __webpack_require__(38)();
	// imports
	
	
	// module
	exports.push([module.id, "/*!\n * jQuery UI Checkboxradio 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/checkboxradio/#theming\n */\n\n.ui-checkboxradio-label .ui-icon-background {\n\tbox-shadow: inset 1px 1px 1px #ccc;\n\tborder-radius: .12em;\n\tborder: none;\n}\n.ui-checkboxradio-radio-label .ui-icon-background {\n\twidth: 16px;\n\theight: 16px;\n\tborder-radius: 1em;\n\toverflow: visible;\n\tborder: none;\n}\n.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon,\n.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon {\n\tbackground-image: none;\n\twidth: 8px;\n\theight: 8px;\n\tborder-width: 4px;\n\tborder-style: solid;\n}\n.ui-checkboxradio-disabled {\n\tpointer-events: none;\n}\n", ""]);
	
	// exports


/***/ }),
/* 45 */
/***/ (function(module, exports, __webpack_require__) {

	exports = module.exports = __webpack_require__(38)();
	// imports
	
	
	// module
	exports.push([module.id, "/*!\n * jQuery UI Controlgroup 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/controlgroup/#theming\n */\n\n.ui-controlgroup {\n\tvertical-align: middle;\n\tdisplay: inline-block;\n}\n.ui-controlgroup > .ui-controlgroup-item {\n\tfloat: left;\n\tmargin-left: 0;\n\tmargin-right: 0;\n}\n.ui-controlgroup > .ui-controlgroup-item:focus,\n.ui-controlgroup > .ui-controlgroup-item.ui-visual-focus {\n\tz-index: 9999;\n}\n.ui-controlgroup-vertical > .ui-controlgroup-item {\n\tdisplay: block;\n\tfloat: none;\n\twidth: 100%;\n\tmargin-top: 0;\n\tmargin-bottom: 0;\n\ttext-align: left;\n}\n.ui-controlgroup-vertical .ui-controlgroup-item {\n\tbox-sizing: border-box;\n}\n.ui-controlgroup .ui-controlgroup-label {\n\tpadding: .4em 1em;\n}\n.ui-controlgroup .ui-controlgroup-label span {\n\tfont-size: 80%;\n}\n.ui-controlgroup-horizontal .ui-controlgroup-label + .ui-controlgroup-item {\n\tborder-left: none;\n}\n.ui-controlgroup-vertical .ui-controlgroup-label + .ui-controlgroup-item {\n\tborder-top: none;\n}\n.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content {\n\tborder-right: none;\n}\n.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content {\n\tborder-bottom: none;\n}\n\n/* Spinner specific style fixes */\n.ui-controlgroup-vertical .ui-spinner-input {\n\n\t/* Support: IE8 only, Android < 4.4 only */\n\twidth: 75%;\n\twidth: calc( 100% - 2.4em );\n}\n.ui-controlgroup-vertical .ui-spinner .ui-spinner-up {\n\tborder-top-style: solid;\n}\n\n", ""]);
	
	// exports


/***/ }),
/* 46 */
/***/ (function(module, exports, __webpack_require__) {

	exports = module.exports = __webpack_require__(38)();
	// imports
	
	
	// module
	exports.push([module.id, "/*!\n * jQuery UI Datepicker 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/datepicker/#theming\n */\n.ui-datepicker {\n\twidth: 17em;\n\tpadding: .2em .2em 0;\n\tdisplay: none;\n}\n.ui-datepicker .ui-datepicker-header {\n\tposition: relative;\n\tpadding: .2em 0;\n}\n.ui-datepicker .ui-datepicker-prev,\n.ui-datepicker .ui-datepicker-next {\n\tposition: absolute;\n\ttop: 2px;\n\twidth: 1.8em;\n\theight: 1.8em;\n}\n.ui-datepicker .ui-datepicker-prev-hover,\n.ui-datepicker .ui-datepicker-next-hover {\n\ttop: 1px;\n}\n.ui-datepicker .ui-datepicker-prev {\n\tleft: 2px;\n}\n.ui-datepicker .ui-datepicker-next {\n\tright: 2px;\n}\n.ui-datepicker .ui-datepicker-prev-hover {\n\tleft: 1px;\n}\n.ui-datepicker .ui-datepicker-next-hover {\n\tright: 1px;\n}\n.ui-datepicker .ui-datepicker-prev span,\n.ui-datepicker .ui-datepicker-next span {\n\tdisplay: block;\n\tposition: absolute;\n\tleft: 50%;\n\tmargin-left: -8px;\n\ttop: 50%;\n\tmargin-top: -8px;\n}\n.ui-datepicker .ui-datepicker-title {\n\tmargin: 0 2.3em;\n\tline-height: 1.8em;\n\ttext-align: center;\n}\n.ui-datepicker .ui-datepicker-title select {\n\tfont-size: 1em;\n\tmargin: 1px 0;\n}\n.ui-datepicker select.ui-datepicker-month,\n.ui-datepicker select.ui-datepicker-year {\n\twidth: 45%;\n}\n.ui-datepicker table {\n\twidth: 100%;\n\tfont-size: .9em;\n\tborder-collapse: collapse;\n\tmargin: 0 0 .4em;\n}\n.ui-datepicker th {\n\tpadding: .7em .3em;\n\ttext-align: center;\n\tfont-weight: bold;\n\tborder: 0;\n}\n.ui-datepicker td {\n\tborder: 0;\n\tpadding: 1px;\n}\n.ui-datepicker td span,\n.ui-datepicker td a {\n\tdisplay: block;\n\tpadding: .2em;\n\ttext-align: right;\n\ttext-decoration: none;\n}\n.ui-datepicker .ui-datepicker-buttonpane {\n\tbackground-image: none;\n\tmargin: .7em 0 0 0;\n\tpadding: 0 .2em;\n\tborder-left: 0;\n\tborder-right: 0;\n\tborder-bottom: 0;\n}\n.ui-datepicker .ui-datepicker-buttonpane button {\n\tfloat: right;\n\tmargin: .5em .2em .4em;\n\tcursor: pointer;\n\tpadding: .2em .6em .3em .6em;\n\twidth: auto;\n\toverflow: visible;\n}\n.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {\n\tfloat: left;\n}\n\n/* with multiple calendars */\n.ui-datepicker.ui-datepicker-multi {\n\twidth: auto;\n}\n.ui-datepicker-multi .ui-datepicker-group {\n\tfloat: left;\n}\n.ui-datepicker-multi .ui-datepicker-group table {\n\twidth: 95%;\n\tmargin: 0 auto .4em;\n}\n.ui-datepicker-multi-2 .ui-datepicker-group {\n\twidth: 50%;\n}\n.ui-datepicker-multi-3 .ui-datepicker-group {\n\twidth: 33.3%;\n}\n.ui-datepicker-multi-4 .ui-datepicker-group {\n\twidth: 25%;\n}\n.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,\n.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {\n\tborder-left-width: 0;\n}\n.ui-datepicker-multi .ui-datepicker-buttonpane {\n\tclear: left;\n}\n.ui-datepicker-row-break {\n\tclear: both;\n\twidth: 100%;\n\tfont-size: 0;\n}\n\n/* RTL support */\n.ui-datepicker-rtl {\n\tdirection: rtl;\n}\n.ui-datepicker-rtl .ui-datepicker-prev {\n\tright: 2px;\n\tleft: auto;\n}\n.ui-datepicker-rtl .ui-datepicker-next {\n\tleft: 2px;\n\tright: auto;\n}\n.ui-datepicker-rtl .ui-datepicker-prev:hover {\n\tright: 1px;\n\tleft: auto;\n}\n.ui-datepicker-rtl .ui-datepicker-next:hover {\n\tleft: 1px;\n\tright: auto;\n}\n.ui-datepicker-rtl .ui-datepicker-buttonpane {\n\tclear: right;\n}\n.ui-datepicker-rtl .ui-datepicker-buttonpane button {\n\tfloat: left;\n}\n.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,\n.ui-datepicker-rtl .ui-datepicker-group {\n\tfloat: right;\n}\n.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,\n.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {\n\tborder-right-width: 0;\n\tborder-left-width: 1px;\n}\n\n/* Icons */\n.ui-datepicker .ui-icon {\n\tdisplay: block;\n\ttext-indent: -99999px;\n\toverflow: hidden;\n\tbackground-repeat: no-repeat;\n\tleft: .5em;\n\ttop: .3em;\n}\n", ""]);
	
	// exports


/***/ }),
/* 47 */
/***/ (function(module, exports, __webpack_require__) {

	exports = module.exports = __webpack_require__(38)();
	// imports
	
	
	// module
	exports.push([module.id, "/*!\n * jQuery UI Dialog 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/dialog/#theming\n */\n.ui-dialog {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tpadding: .2em;\n\toutline: 0;\n}\n.ui-dialog .ui-dialog-titlebar {\n\tpadding: .4em 1em;\n\tposition: relative;\n}\n.ui-dialog .ui-dialog-title {\n\tfloat: left;\n\tmargin: .1em 0;\n\twhite-space: nowrap;\n\twidth: 90%;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n}\n.ui-dialog .ui-dialog-titlebar-close {\n\tposition: absolute;\n\tright: .3em;\n\ttop: 50%;\n\twidth: 20px;\n\tmargin: -10px 0 0 0;\n\tpadding: 1px;\n\theight: 20px;\n}\n.ui-dialog .ui-dialog-content {\n\tposition: relative;\n\tborder: 0;\n\tpadding: .5em 1em;\n\tbackground: none;\n\toverflow: auto;\n}\n.ui-dialog .ui-dialog-buttonpane {\n\ttext-align: left;\n\tborder-width: 1px 0 0 0;\n\tbackground-image: none;\n\tmargin-top: .5em;\n\tpadding: .3em 1em .5em .4em;\n}\n.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {\n\tfloat: right;\n}\n.ui-dialog .ui-dialog-buttonpane button {\n\tmargin: .5em .4em .5em 0;\n\tcursor: pointer;\n}\n.ui-dialog .ui-resizable-n {\n\theight: 2px;\n\ttop: 0;\n}\n.ui-dialog .ui-resizable-e {\n\twidth: 2px;\n\tright: 0;\n}\n.ui-dialog .ui-resizable-s {\n\theight: 2px;\n\tbottom: 0;\n}\n.ui-dialog .ui-resizable-w {\n\twidth: 2px;\n\tleft: 0;\n}\n.ui-dialog .ui-resizable-se,\n.ui-dialog .ui-resizable-sw,\n.ui-dialog .ui-resizable-ne,\n.ui-dialog .ui-resizable-nw {\n\twidth: 7px;\n\theight: 7px;\n}\n.ui-dialog .ui-resizable-se {\n\tright: 0;\n\tbottom: 0;\n}\n.ui-dialog .ui-resizable-sw {\n\tleft: 0;\n\tbottom: 0;\n}\n.ui-dialog .ui-resizable-ne {\n\tright: 0;\n\ttop: 0;\n}\n.ui-dialog .ui-resizable-nw {\n\tleft: 0;\n\ttop: 0;\n}\n.ui-draggable .ui-dialog-titlebar {\n\tcursor: move;\n}\n", ""]);
	
	// exports


/***/ }),
/* 48 */
/***/ (function(module, exports, __webpack_require__) {

	exports = module.exports = __webpack_require__(38)();
	// imports
	
	
	// module
	exports.push([module.id, "/*!\n * jQuery UI Draggable 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n.ui-draggable-handle {\n\t-ms-touch-action: none;\n\ttouch-action: none;\n}\n", ""]);
	
	// exports


/***/ }),
/* 49 */
/***/ (function(module, exports, __webpack_require__) {

	exports = module.exports = __webpack_require__(38)();
	// imports
	
	
	// module
	exports.push([module.id, "/*!\n * jQuery UI Menu 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/menu/#theming\n */\n.ui-menu {\n\tlist-style: none;\n\tpadding: 0;\n\tmargin: 0;\n\tdisplay: block;\n\toutline: 0;\n}\n.ui-menu .ui-menu {\n\tposition: absolute;\n}\n.ui-menu .ui-menu-item {\n\tmargin: 0;\n\tcursor: pointer;\n\t/* support: IE10, see #8844 */\n\tlist-style-image: url(\"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\");\n}\n.ui-menu .ui-menu-item-wrapper {\n\tposition: relative;\n\tpadding: 3px 1em 3px .4em;\n}\n.ui-menu .ui-menu-divider {\n\tmargin: 5px 0;\n\theight: 0;\n\tfont-size: 0;\n\tline-height: 0;\n\tborder-width: 1px 0 0 0;\n}\n.ui-menu .ui-state-focus,\n.ui-menu .ui-state-active {\n\tmargin: -1px;\n}\n\n/* icon support */\n.ui-menu-icons {\n\tposition: relative;\n}\n.ui-menu-icons .ui-menu-item-wrapper {\n\tpadding-left: 2em;\n}\n\n/* left-aligned */\n.ui-menu .ui-icon {\n\tposition: absolute;\n\ttop: 0;\n\tbottom: 0;\n\tleft: .2em;\n\tmargin: auto 0;\n}\n\n/* right-aligned */\n.ui-menu .ui-menu-icon {\n\tleft: auto;\n\tright: 0;\n}\n", ""]);
	
	// exports


/***/ }),
/* 50 */
/***/ (function(module, exports, __webpack_require__) {

	exports = module.exports = __webpack_require__(38)();
	// imports
	
	
	// module
	exports.push([module.id, "/*!\n * jQuery UI Progressbar 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/progressbar/#theming\n */\n.ui-progressbar {\n\theight: 2em;\n\ttext-align: left;\n\toverflow: hidden;\n}\n.ui-progressbar .ui-progressbar-value {\n\tmargin: -1px;\n\theight: 100%;\n}\n.ui-progressbar .ui-progressbar-overlay {\n\tbackground: url(\"data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==\");\n\theight: 100%;\n\tfilter: alpha(opacity=25); /* support: IE8 */\n\topacity: 0.25;\n}\n.ui-progressbar-indeterminate .ui-progressbar-value {\n\tbackground-image: none;\n}\n", ""]);
	
	// exports


/***/ }),
/* 51 */
/***/ (function(module, exports, __webpack_require__) {

	exports = module.exports = __webpack_require__(38)();
	// imports
	
	
	// module
	exports.push([module.id, "/*!\n * jQuery UI Resizable 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n.ui-resizable {\n\tposition: relative;\n}\n.ui-resizable-handle {\n\tposition: absolute;\n\tfont-size: 0.1px;\n\tdisplay: block;\n\t-ms-touch-action: none;\n\ttouch-action: none;\n}\n.ui-resizable-disabled .ui-resizable-handle,\n.ui-resizable-autohide .ui-resizable-handle {\n\tdisplay: none;\n}\n.ui-resizable-n {\n\tcursor: n-resize;\n\theight: 7px;\n\twidth: 100%;\n\ttop: -5px;\n\tleft: 0;\n}\n.ui-resizable-s {\n\tcursor: s-resize;\n\theight: 7px;\n\twidth: 100%;\n\tbottom: -5px;\n\tleft: 0;\n}\n.ui-resizable-e {\n\tcursor: e-resize;\n\twidth: 7px;\n\tright: -5px;\n\ttop: 0;\n\theight: 100%;\n}\n.ui-resizable-w {\n\tcursor: w-resize;\n\twidth: 7px;\n\tleft: -5px;\n\ttop: 0;\n\theight: 100%;\n}\n.ui-resizable-se {\n\tcursor: se-resize;\n\twidth: 12px;\n\theight: 12px;\n\tright: 1px;\n\tbottom: 1px;\n}\n.ui-resizable-sw {\n\tcursor: sw-resize;\n\twidth: 9px;\n\theight: 9px;\n\tleft: -5px;\n\tbottom: -5px;\n}\n.ui-resizable-nw {\n\tcursor: nw-resize;\n\twidth: 9px;\n\theight: 9px;\n\tleft: -5px;\n\ttop: -5px;\n}\n.ui-resizable-ne {\n\tcursor: ne-resize;\n\twidth: 9px;\n\theight: 9px;\n\tright: -5px;\n\ttop: -5px;\n}\n", ""]);
	
	// exports


/***/ }),
/* 52 */
/***/ (function(module, exports, __webpack_require__) {

	exports = module.exports = __webpack_require__(38)();
	// imports
	
	
	// module
	exports.push([module.id, "/*!\n * jQuery UI Selectable 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n.ui-selectable {\n\t-ms-touch-action: none;\n\ttouch-action: none;\n}\n.ui-selectable-helper {\n\tposition: absolute;\n\tz-index: 100;\n\tborder: 1px dotted black;\n}\n", ""]);
	
	// exports


/***/ }),
/* 53 */
/***/ (function(module, exports, __webpack_require__) {

	exports = module.exports = __webpack_require__(38)();
	// imports
	
	
	// module
	exports.push([module.id, "/*!\n * jQuery UI Selectmenu 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/selectmenu/#theming\n */\n.ui-selectmenu-menu {\n\tpadding: 0;\n\tmargin: 0;\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tdisplay: none;\n}\n.ui-selectmenu-menu .ui-menu {\n\toverflow: auto;\n\toverflow-x: hidden;\n\tpadding-bottom: 1px;\n}\n.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup {\n\tfont-size: 1em;\n\tfont-weight: bold;\n\tline-height: 1.5;\n\tpadding: 2px 0.4em;\n\tmargin: 0.5em 0 0 0;\n\theight: auto;\n\tborder: 0;\n}\n.ui-selectmenu-open {\n\tdisplay: block;\n}\n.ui-selectmenu-text {\n\tdisplay: block;\n\tmargin-right: 20px;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n}\n.ui-selectmenu-button.ui-button {\n\ttext-align: left;\n\twhite-space: nowrap;\n\twidth: 14em;\n}\n.ui-selectmenu-icon.ui-icon {\n\tfloat: right;\n\tmargin-top: 0;\n}\n", ""]);
	
	// exports


/***/ }),
/* 54 */
/***/ (function(module, exports, __webpack_require__) {

	exports = module.exports = __webpack_require__(38)();
	// imports
	
	
	// module
	exports.push([module.id, "/*!\n * jQuery UI Sortable 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n.ui-sortable-handle {\n\t-ms-touch-action: none;\n\ttouch-action: none;\n}\n", ""]);
	
	// exports


/***/ }),
/* 55 */
/***/ (function(module, exports, __webpack_require__) {

	exports = module.exports = __webpack_require__(38)();
	// imports
	
	
	// module
	exports.push([module.id, "/*!\n * jQuery UI Slider 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/slider/#theming\n */\n.ui-slider {\n\tposition: relative;\n\ttext-align: left;\n}\n.ui-slider .ui-slider-handle {\n\tposition: absolute;\n\tz-index: 2;\n\twidth: 1.2em;\n\theight: 1.2em;\n\tcursor: default;\n\t-ms-touch-action: none;\n\ttouch-action: none;\n}\n.ui-slider .ui-slider-range {\n\tposition: absolute;\n\tz-index: 1;\n\tfont-size: .7em;\n\tdisplay: block;\n\tborder: 0;\n\tbackground-position: 0 0;\n}\n\n/* support: IE8 - See #6727 */\n.ui-slider.ui-state-disabled .ui-slider-handle,\n.ui-slider.ui-state-disabled .ui-slider-range {\n\tfilter: inherit;\n}\n\n.ui-slider-horizontal {\n\theight: .8em;\n}\n.ui-slider-horizontal .ui-slider-handle {\n\ttop: -.3em;\n\tmargin-left: -.6em;\n}\n.ui-slider-horizontal .ui-slider-range {\n\ttop: 0;\n\theight: 100%;\n}\n.ui-slider-horizontal .ui-slider-range-min {\n\tleft: 0;\n}\n.ui-slider-horizontal .ui-slider-range-max {\n\tright: 0;\n}\n\n.ui-slider-vertical {\n\twidth: .8em;\n\theight: 100px;\n}\n.ui-slider-vertical .ui-slider-handle {\n\tleft: -.3em;\n\tmargin-left: 0;\n\tmargin-bottom: -.6em;\n}\n.ui-slider-vertical .ui-slider-range {\n\tleft: 0;\n\twidth: 100%;\n}\n.ui-slider-vertical .ui-slider-range-min {\n\tbottom: 0;\n}\n.ui-slider-vertical .ui-slider-range-max {\n\ttop: 0;\n}\n", ""]);
	
	// exports


/***/ }),
/* 56 */
/***/ (function(module, exports, __webpack_require__) {

	exports = module.exports = __webpack_require__(38)();
	// imports
	
	
	// module
	exports.push([module.id, "/*!\n * jQuery UI Spinner 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/spinner/#theming\n */\n.ui-spinner {\n\tposition: relative;\n\tdisplay: inline-block;\n\toverflow: hidden;\n\tpadding: 0;\n\tvertical-align: middle;\n}\n.ui-spinner-input {\n\tborder: none;\n\tbackground: none;\n\tcolor: inherit;\n\tpadding: .222em 0;\n\tmargin: .2em 0;\n\tvertical-align: middle;\n\tmargin-left: .4em;\n\tmargin-right: 2em;\n}\n.ui-spinner-button {\n\twidth: 1.6em;\n\theight: 50%;\n\tfont-size: .5em;\n\tpadding: 0;\n\tmargin: 0;\n\ttext-align: center;\n\tposition: absolute;\n\tcursor: default;\n\tdisplay: block;\n\toverflow: hidden;\n\tright: 0;\n}\n/* more specificity required here to override default borders */\n.ui-spinner a.ui-spinner-button {\n\tborder-top-style: none;\n\tborder-bottom-style: none;\n\tborder-right-style: none;\n}\n.ui-spinner-up {\n\ttop: 0;\n}\n.ui-spinner-down {\n\tbottom: 0;\n}\n", ""]);
	
	// exports


/***/ }),
/* 57 */
/***/ (function(module, exports, __webpack_require__) {

	exports = module.exports = __webpack_require__(38)();
	// imports
	
	
	// module
	exports.push([module.id, "/*!\n * jQuery UI Tabs 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/tabs/#theming\n */\n.ui-tabs {\n\tposition: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as \"fixed\") */\n\tpadding: .2em;\n}\n.ui-tabs .ui-tabs-nav {\n\tmargin: 0;\n\tpadding: .2em .2em 0;\n}\n.ui-tabs .ui-tabs-nav li {\n\tlist-style: none;\n\tfloat: left;\n\tposition: relative;\n\ttop: 0;\n\tmargin: 1px .2em 0 0;\n\tborder-bottom-width: 0;\n\tpadding: 0;\n\twhite-space: nowrap;\n}\n.ui-tabs .ui-tabs-nav .ui-tabs-anchor {\n\tfloat: left;\n\tpadding: .5em 1em;\n\ttext-decoration: none;\n}\n.ui-tabs .ui-tabs-nav li.ui-tabs-active {\n\tmargin-bottom: -1px;\n\tpadding-bottom: 1px;\n}\n.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,\n.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,\n.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor {\n\tcursor: text;\n}\n.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor {\n\tcursor: pointer;\n}\n.ui-tabs .ui-tabs-panel {\n\tdisplay: block;\n\tborder-width: 0;\n\tpadding: 1em 1.4em;\n\tbackground: none;\n}\n", ""]);
	
	// exports


/***/ }),
/* 58 */
/***/ (function(module, exports, __webpack_require__) {

	exports = module.exports = __webpack_require__(38)();
	// imports
	
	
	// module
	exports.push([module.id, "/*!\n * jQuery UI Tooltip 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/tooltip/#theming\n */\n.ui-tooltip {\n\tpadding: 8px;\n\tposition: absolute;\n\tz-index: 9999;\n\tmax-width: 300px;\n}\nbody .ui-tooltip {\n\tborder-width: 2px;\n}\n", ""]);
	
	// exports


/***/ }),
/* 59 */
/***/ (function(module, exports, __webpack_require__) {

	exports = module.exports = __webpack_require__(38)();
	// imports
	
	
	// module
	exports.push([module.id, "/*!\n * jQuery UI CSS Framework 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/category/theming/\n *\n * To view and modify this theme, visit http://jqueryui.com/themeroller/\n */\n\n\n/* Component containers\n----------------------------------*/\n.ui-widget {\n\tfont-family: Arial,Helvetica,sans-serif/*{ffDefault}*/;\n\tfont-size: 1em/*{fsDefault}*/;\n}\n.ui-widget .ui-widget {\n\tfont-size: 1em;\n}\n.ui-widget input,\n.ui-widget select,\n.ui-widget textarea,\n.ui-widget button {\n\tfont-family: Arial,Helvetica,sans-serif/*{ffDefault}*/;\n\tfont-size: 1em;\n}\n.ui-widget.ui-widget-content {\n\tborder: 1px solid #c5c5c5/*{borderColorDefault}*/;\n}\n.ui-widget-content {\n\tborder: 1px solid #dddddd/*{borderColorContent}*/;\n\tbackground: #ffffff/*{bgColorContent}*/ /*{bgImgUrlContent}*/ /*{bgContentXPos}*/ /*{bgContentYPos}*/ /*{bgContentRepeat}*/;\n\tcolor: #333333/*{fcContent}*/;\n}\n.ui-widget-content a {\n\tcolor: #333333/*{fcContent}*/;\n}\n.ui-widget-header {\n\tborder: 1px solid #dddddd/*{borderColorHeader}*/;\n\tbackground: #e9e9e9/*{bgColorHeader}*/ /*{bgImgUrlHeader}*/ /*{bgHeaderXPos}*/ /*{bgHeaderYPos}*/ /*{bgHeaderRepeat}*/;\n\tcolor: #333333/*{fcHeader}*/;\n\tfont-weight: bold;\n}\n.ui-widget-header a {\n\tcolor: #333333/*{fcHeader}*/;\n}\n\n/* Interaction states\n----------------------------------*/\n.ui-state-default,\n.ui-widget-content .ui-state-default,\n.ui-widget-header .ui-state-default,\n.ui-button,\n\n/* We use html here because we need a greater specificity to make sure disabled\nworks properly when clicked or hovered */\nhtml .ui-button.ui-state-disabled:hover,\nhtml .ui-button.ui-state-disabled:active {\n\tborder: 1px solid #c5c5c5/*{borderColorDefault}*/;\n\tbackground: #f6f6f6/*{bgColorDefault}*/ /*{bgImgUrlDefault}*/ /*{bgDefaultXPos}*/ /*{bgDefaultYPos}*/ /*{bgDefaultRepeat}*/;\n\tfont-weight: normal/*{fwDefault}*/;\n\tcolor: #454545/*{fcDefault}*/;\n}\n.ui-state-default a,\n.ui-state-default a:link,\n.ui-state-default a:visited,\na.ui-button,\na:link.ui-button,\na:visited.ui-button,\n.ui-button {\n\tcolor: #454545/*{fcDefault}*/;\n\ttext-decoration: none;\n}\n.ui-state-hover,\n.ui-widget-content .ui-state-hover,\n.ui-widget-header .ui-state-hover,\n.ui-state-focus,\n.ui-widget-content .ui-state-focus,\n.ui-widget-header .ui-state-focus,\n.ui-button:hover,\n.ui-button:focus {\n\tborder: 1px solid #cccccc/*{borderColorHover}*/;\n\tbackground: #ededed/*{bgColorHover}*/ /*{bgImgUrlHover}*/ /*{bgHoverXPos}*/ /*{bgHoverYPos}*/ /*{bgHoverRepeat}*/;\n\tfont-weight: normal/*{fwDefault}*/;\n\tcolor: #2b2b2b/*{fcHover}*/;\n}\n.ui-state-hover a,\n.ui-state-hover a:hover,\n.ui-state-hover a:link,\n.ui-state-hover a:visited,\n.ui-state-focus a,\n.ui-state-focus a:hover,\n.ui-state-focus a:link,\n.ui-state-focus a:visited,\na.ui-button:hover,\na.ui-button:focus {\n\tcolor: #2b2b2b/*{fcHover}*/;\n\ttext-decoration: none;\n}\n\n.ui-visual-focus {\n\tbox-shadow: 0 0 3px 1px rgb(94, 158, 214);\n}\n.ui-state-active,\n.ui-widget-content .ui-state-active,\n.ui-widget-header .ui-state-active,\na.ui-button:active,\n.ui-button:active,\n.ui-button.ui-state-active:hover {\n\tborder: 1px solid #003eff/*{borderColorActive}*/;\n\tbackground: #007fff/*{bgColorActive}*/ /*{bgImgUrlActive}*/ /*{bgActiveXPos}*/ /*{bgActiveYPos}*/ /*{bgActiveRepeat}*/;\n\tfont-weight: normal/*{fwDefault}*/;\n\tcolor: #ffffff/*{fcActive}*/;\n}\n.ui-icon-background,\n.ui-state-active .ui-icon-background {\n\tborder: #003eff/*{borderColorActive}*/;\n\tbackground-color: #ffffff/*{fcActive}*/;\n}\n.ui-state-active a,\n.ui-state-active a:link,\n.ui-state-active a:visited {\n\tcolor: #ffffff/*{fcActive}*/;\n\ttext-decoration: none;\n}\n\n/* Interaction Cues\n----------------------------------*/\n.ui-state-highlight,\n.ui-widget-content .ui-state-highlight,\n.ui-widget-header .ui-state-highlight {\n\tborder: 1px solid #dad55e/*{borderColorHighlight}*/;\n\tbackground: #fffa90/*{bgColorHighlight}*/ /*{bgImgUrlHighlight}*/ /*{bgHighlightXPos}*/ /*{bgHighlightYPos}*/ /*{bgHighlightRepeat}*/;\n\tcolor: #777620/*{fcHighlight}*/;\n}\n.ui-state-checked {\n\tborder: 1px solid #dad55e/*{borderColorHighlight}*/;\n\tbackground: #fffa90/*{bgColorHighlight}*/;\n}\n.ui-state-highlight a,\n.ui-widget-content .ui-state-highlight a,\n.ui-widget-header .ui-state-highlight a {\n\tcolor: #777620/*{fcHighlight}*/;\n}\n.ui-state-error,\n.ui-widget-content .ui-state-error,\n.ui-widget-header .ui-state-error {\n\tborder: 1px solid #f1a899/*{borderColorError}*/;\n\tbackground: #fddfdf/*{bgColorError}*/ /*{bgImgUrlError}*/ /*{bgErrorXPos}*/ /*{bgErrorYPos}*/ /*{bgErrorRepeat}*/;\n\tcolor: #5f3f3f/*{fcError}*/;\n}\n.ui-state-error a,\n.ui-widget-content .ui-state-error a,\n.ui-widget-header .ui-state-error a {\n\tcolor: #5f3f3f/*{fcError}*/;\n}\n.ui-state-error-text,\n.ui-widget-content .ui-state-error-text,\n.ui-widget-header .ui-state-error-text {\n\tcolor: #5f3f3f/*{fcError}*/;\n}\n.ui-priority-primary,\n.ui-widget-content .ui-priority-primary,\n.ui-widget-header .ui-priority-primary {\n\tfont-weight: bold;\n}\n.ui-priority-secondary,\n.ui-widget-content .ui-priority-secondary,\n.ui-widget-header .ui-priority-secondary {\n\topacity: .7;\n\tfilter:Alpha(Opacity=70); /* support: IE8 */\n\tfont-weight: normal;\n}\n.ui-state-disabled,\n.ui-widget-content .ui-state-disabled,\n.ui-widget-header .ui-state-disabled {\n\topacity: .35;\n\tfilter:Alpha(Opacity=35); /* support: IE8 */\n\tbackground-image: none;\n}\n.ui-state-disabled .ui-icon {\n\tfilter:Alpha(Opacity=35); /* support: IE8 - See #6059 */\n}\n\n/* Icons\n----------------------------------*/\n\n/* states and images */\n.ui-icon {\n\twidth: 16px;\n\theight: 16px;\n}\n.ui-icon,\n.ui-widget-content .ui-icon {\n\tbackground-image: url(" + __webpack_require__(60) + ");\n}\n.ui-widget-header .ui-icon {\n\tbackground-image: url(" + __webpack_require__(60) + ");\n}\n.ui-state-hover .ui-icon,\n.ui-state-focus .ui-icon,\n.ui-button:hover .ui-icon,\n.ui-button:focus .ui-icon {\n\tbackground-image: url(" + __webpack_require__(61) + ");\n}\n.ui-state-active .ui-icon,\n.ui-button:active .ui-icon {\n\tbackground-image: url(" + __webpack_require__(62) + ");\n}\n.ui-state-highlight .ui-icon,\n.ui-button .ui-state-highlight.ui-icon {\n\tbackground-image: url(" + __webpack_require__(63) + ");\n}\n.ui-state-error .ui-icon,\n.ui-state-error-text .ui-icon {\n\tbackground-image: url(" + __webpack_require__(64) + ");\n}\n.ui-button .ui-icon {\n\tbackground-image: url(" + __webpack_require__(65) + ");\n}\n\n/* positioning */\n.ui-icon-blank { background-position: 16px 16px; }\n.ui-icon-caret-1-n { background-position: 0 0; }\n.ui-icon-caret-1-ne { background-position: -16px 0; }\n.ui-icon-caret-1-e { background-position: -32px 0; }\n.ui-icon-caret-1-se { background-position: -48px 0; }\n.ui-icon-caret-1-s { background-position: -65px 0; }\n.ui-icon-caret-1-sw { background-position: -80px 0; }\n.ui-icon-caret-1-w { background-position: -96px 0; }\n.ui-icon-caret-1-nw { background-position: -112px 0; }\n.ui-icon-caret-2-n-s { background-position: -128px 0; }\n.ui-icon-caret-2-e-w { background-position: -144px 0; }\n.ui-icon-triangle-1-n { background-position: 0 -16px; }\n.ui-icon-triangle-1-ne { background-position: -16px -16px; }\n.ui-icon-triangle-1-e { background-position: -32px -16px; }\n.ui-icon-triangle-1-se { background-position: -48px -16px; }\n.ui-icon-triangle-1-s { background-position: -65px -16px; }\n.ui-icon-triangle-1-sw { background-position: -80px -16px; }\n.ui-icon-triangle-1-w { background-position: -96px -16px; }\n.ui-icon-triangle-1-nw { background-position: -112px -16px; }\n.ui-icon-triangle-2-n-s { background-position: -128px -16px; }\n.ui-icon-triangle-2-e-w { background-position: -144px -16px; }\n.ui-icon-arrow-1-n { background-position: 0 -32px; }\n.ui-icon-arrow-1-ne { background-position: -16px -32px; }\n.ui-icon-arrow-1-e { background-position: -32px -32px; }\n.ui-icon-arrow-1-se { background-position: -48px -32px; }\n.ui-icon-arrow-1-s { background-position: -65px -32px; }\n.ui-icon-arrow-1-sw { background-position: -80px -32px; }\n.ui-icon-arrow-1-w { background-position: -96px -32px; }\n.ui-icon-arrow-1-nw { background-position: -112px -32px; }\n.ui-icon-arrow-2-n-s { background-position: -128px -32px; }\n.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }\n.ui-icon-arrow-2-e-w { background-position: -160px -32px; }\n.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }\n.ui-icon-arrowstop-1-n { background-position: -192px -32px; }\n.ui-icon-arrowstop-1-e { background-position: -208px -32px; }\n.ui-icon-arrowstop-1-s { background-position: -224px -32px; }\n.ui-icon-arrowstop-1-w { background-position: -240px -32px; }\n.ui-icon-arrowthick-1-n { background-position: 1px -48px; }\n.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }\n.ui-icon-arrowthick-1-e { background-position: -32px -48px; }\n.ui-icon-arrowthick-1-se { background-position: -48px -48px; }\n.ui-icon-arrowthick-1-s { background-position: -64px -48px; }\n.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }\n.ui-icon-arrowthick-1-w { background-position: -96px -48px; }\n.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }\n.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }\n.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }\n.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }\n.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }\n.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }\n.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }\n.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }\n.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }\n.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }\n.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }\n.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }\n.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }\n.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }\n.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }\n.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }\n.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }\n.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }\n.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }\n.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }\n.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }\n.ui-icon-arrow-4 { background-position: 0 -80px; }\n.ui-icon-arrow-4-diag { background-position: -16px -80px; }\n.ui-icon-extlink { background-position: -32px -80px; }\n.ui-icon-newwin { background-position: -48px -80px; }\n.ui-icon-refresh { background-position: -64px -80px; }\n.ui-icon-shuffle { background-position: -80px -80px; }\n.ui-icon-transfer-e-w { background-position: -96px -80px; }\n.ui-icon-transferthick-e-w { background-position: -112px -80px; }\n.ui-icon-folder-collapsed { background-position: 0 -96px; }\n.ui-icon-folder-open { background-position: -16px -96px; }\n.ui-icon-document { background-position: -32px -96px; }\n.ui-icon-document-b { background-position: -48px -96px; }\n.ui-icon-note { background-position: -64px -96px; }\n.ui-icon-mail-closed { background-position: -80px -96px; }\n.ui-icon-mail-open { background-position: -96px -96px; }\n.ui-icon-suitcase { background-position: -112px -96px; }\n.ui-icon-comment { background-position: -128px -96px; }\n.ui-icon-person { background-position: -144px -96px; }\n.ui-icon-print { background-position: -160px -96px; }\n.ui-icon-trash { background-position: -176px -96px; }\n.ui-icon-locked { background-position: -192px -96px; }\n.ui-icon-unlocked { background-position: -208px -96px; }\n.ui-icon-bookmark { background-position: -224px -96px; }\n.ui-icon-tag { background-position: -240px -96px; }\n.ui-icon-home { background-position: 0 -112px; }\n.ui-icon-flag { background-position: -16px -112px; }\n.ui-icon-calendar { background-position: -32px -112px; }\n.ui-icon-cart { background-position: -48px -112px; }\n.ui-icon-pencil { background-position: -64px -112px; }\n.ui-icon-clock { background-position: -80px -112px; }\n.ui-icon-disk { background-position: -96px -112px; }\n.ui-icon-calculator { background-position: -112px -112px; }\n.ui-icon-zoomin { background-position: -128px -112px; }\n.ui-icon-zoomout { background-position: -144px -112px; }\n.ui-icon-search { background-position: -160px -112px; }\n.ui-icon-wrench { background-position: -176px -112px; }\n.ui-icon-gear { background-position: -192px -112px; }\n.ui-icon-heart { background-position: -208px -112px; }\n.ui-icon-star { background-position: -224px -112px; }\n.ui-icon-link { background-position: -240px -112px; }\n.ui-icon-cancel { background-position: 0 -128px; }\n.ui-icon-plus { background-position: -16px -128px; }\n.ui-icon-plusthick { background-position: -32px -128px; }\n.ui-icon-minus { background-position: -48px -128px; }\n.ui-icon-minusthick { background-position: -64px -128px; }\n.ui-icon-close { background-position: -80px -128px; }\n.ui-icon-closethick { background-position: -96px -128px; }\n.ui-icon-key { background-position: -112px -128px; }\n.ui-icon-lightbulb { background-position: -128px -128px; }\n.ui-icon-scissors { background-position: -144px -128px; }\n.ui-icon-clipboard { background-position: -160px -128px; }\n.ui-icon-copy { background-position: -176px -128px; }\n.ui-icon-contact { background-position: -192px -128px; }\n.ui-icon-image { background-position: -208px -128px; }\n.ui-icon-video { background-position: -224px -128px; }\n.ui-icon-script { background-position: -240px -128px; }\n.ui-icon-alert { background-position: 0 -144px; }\n.ui-icon-info { background-position: -16px -144px; }\n.ui-icon-notice { background-position: -32px -144px; }\n.ui-icon-help { background-position: -48px -144px; }\n.ui-icon-check { background-position: -64px -144px; }\n.ui-icon-bullet { background-position: -80px -144px; }\n.ui-icon-radio-on { background-position: -96px -144px; }\n.ui-icon-radio-off { background-position: -112px -144px; }\n.ui-icon-pin-w { background-position: -128px -144px; }\n.ui-icon-pin-s { background-position: -144px -144px; }\n.ui-icon-play { background-position: 0 -160px; }\n.ui-icon-pause { background-position: -16px -160px; }\n.ui-icon-seek-next { background-position: -32px -160px; }\n.ui-icon-seek-prev { background-position: -48px -160px; }\n.ui-icon-seek-end { background-position: -64px -160px; }\n.ui-icon-seek-start { background-position: -80px -160px; }\n/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */\n.ui-icon-seek-first { background-position: -80px -160px; }\n.ui-icon-stop { background-position: -96px -160px; }\n.ui-icon-eject { background-position: -112px -160px; }\n.ui-icon-volume-off { background-position: -128px -160px; }\n.ui-icon-volume-on { background-position: -144px -160px; }\n.ui-icon-power { background-position: 0 -176px; }\n.ui-icon-signal-diag { background-position: -16px -176px; }\n.ui-icon-signal { background-position: -32px -176px; }\n.ui-icon-battery-0 { background-position: -48px -176px; }\n.ui-icon-battery-1 { background-position: -64px -176px; }\n.ui-icon-battery-2 { background-position: -80px -176px; }\n.ui-icon-battery-3 { background-position: -96px -176px; }\n.ui-icon-circle-plus { background-position: 0 -192px; }\n.ui-icon-circle-minus { background-position: -16px -192px; }\n.ui-icon-circle-close { background-position: -32px -192px; }\n.ui-icon-circle-triangle-e { background-position: -48px -192px; }\n.ui-icon-circle-triangle-s { background-position: -64px -192px; }\n.ui-icon-circle-triangle-w { background-position: -80px -192px; }\n.ui-icon-circle-triangle-n { background-position: -96px -192px; }\n.ui-icon-circle-arrow-e { background-position: -112px -192px; }\n.ui-icon-circle-arrow-s { background-position: -128px -192px; }\n.ui-icon-circle-arrow-w { background-position: -144px -192px; }\n.ui-icon-circle-arrow-n { background-position: -160px -192px; }\n.ui-icon-circle-zoomin { background-position: -176px -192px; }\n.ui-icon-circle-zoomout { background-position: -192px -192px; }\n.ui-icon-circle-check { background-position: -208px -192px; }\n.ui-icon-circlesmall-plus { background-position: 0 -208px; }\n.ui-icon-circlesmall-minus { background-position: -16px -208px; }\n.ui-icon-circlesmall-close { background-position: -32px -208px; }\n.ui-icon-squaresmall-plus { background-position: -48px -208px; }\n.ui-icon-squaresmall-minus { background-position: -64px -208px; }\n.ui-icon-squaresmall-close { background-position: -80px -208px; }\n.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }\n.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }\n.ui-icon-grip-solid-vertical { background-position: -32px -224px; }\n.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }\n.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }\n.ui-icon-grip-diagonal-se { background-position: -80px -224px; }\n\n\n/* Misc visuals\n----------------------------------*/\n\n/* Corner radius */\n.ui-corner-all,\n.ui-corner-top,\n.ui-corner-left,\n.ui-corner-tl {\n\tborder-top-left-radius: 3px/*{cornerRadius}*/;\n}\n.ui-corner-all,\n.ui-corner-top,\n.ui-corner-right,\n.ui-corner-tr {\n\tborder-top-right-radius: 3px/*{cornerRadius}*/;\n}\n.ui-corner-all,\n.ui-corner-bottom,\n.ui-corner-left,\n.ui-corner-bl {\n\tborder-bottom-left-radius: 3px/*{cornerRadius}*/;\n}\n.ui-corner-all,\n.ui-corner-bottom,\n.ui-corner-right,\n.ui-corner-br {\n\tborder-bottom-right-radius: 3px/*{cornerRadius}*/;\n}\n\n/* Overlays */\n.ui-widget-overlay {\n\tbackground: #aaaaaa/*{bgColorOverlay}*/ /*{bgImgUrlOverlay}*/ /*{bgOverlayXPos}*/ /*{bgOverlayYPos}*/ /*{bgOverlayRepeat}*/;\n\topacity: .3/*{opacityOverlay}*/;\n\tfilter: Alpha(Opacity=30)/*{opacityFilterOverlay}*/; /* support: IE8 */\n}\n.ui-widget-shadow {\n\t-webkit-box-shadow: 0/*{offsetLeftShadow}*/ 0/*{offsetTopShadow}*/ 5px/*{thicknessShadow}*/ #666666/*{bgColorShadow}*/;\n\tbox-shadow: 0/*{offsetLeftShadow}*/ 0/*{offsetTopShadow}*/ 5px/*{thicknessShadow}*/ #666666/*{bgColorShadow}*/;\n}\n", ""]);
	
	// exports


/***/ }),
/* 60 */
/***/ (function(module, exports, __webpack_require__) {

	module.exports = __webpack_require__.p + "a4c733ec4baef9ad3896d4e34a8a5448.png";

/***/ }),
/* 61 */
/***/ (function(module, exports, __webpack_require__) {

	module.exports = __webpack_require__.p + "971364734f3b603e5d363a2634898b42.png";

/***/ }),
/* 62 */
/***/ (function(module, exports, __webpack_require__) {

	module.exports = __webpack_require__.p + "bf27228a7d3957983584fa7698121ea1.png";

/***/ }),
/* 63 */
/***/ (function(module, exports, __webpack_require__) {

	module.exports = __webpack_require__.p + "208a290102a4ada58a04de354a1354d7.png";

/***/ }),
/* 64 */
/***/ (function(module, exports, __webpack_require__) {

	module.exports = __webpack_require__.p + "0de3b51742ed3ac61435875bccd8973b.png";

/***/ }),
/* 65 */
/***/ (function(module, exports, __webpack_require__) {

	module.exports = __webpack_require__.p + "73a1fd052c9d84c0ee0bea3ee85892ed.png";

/***/ }),
/* 66 */
/***/ (function(module, exports, __webpack_require__) {

	/*
		MIT License http://www.opensource.org/licenses/mit-license.php
		Author Tobias Koppers @sokra
	*/
	var stylesInDom = {},
		memoize = function(fn) {
			var memo;
			return function () {
				if (typeof memo === "undefined") memo = fn.apply(this, arguments);
				return memo;
			};
		},
		isOldIE = memoize(function() {
			return /msie [6-9]\b/.test(self.navigator.userAgent.toLowerCase());
		}),
		getHeadElement = memoize(function () {
			return document.head || document.getElementsByTagName("head")[0];
		}),
		singletonElement = null,
		singletonCounter = 0,
		styleElementsInsertedAtTop = [];
	
	module.exports = function(list, options) {
		if(false) {
			if(typeof document !== "object") throw new Error("The style-loader cannot be used in a non-browser environment");
		}
	
		options = options || {};
		// Force single-tag solution on IE6-9, which has a hard limit on the # of <style>
		// tags it will allow on a page
		if (typeof options.singleton === "undefined") options.singleton = isOldIE();
	
		// By default, add <style> tags to the bottom of <head>.
		if (typeof options.insertAt === "undefined") options.insertAt = "bottom";
	
		var styles = listToStyles(list);
		addStylesToDom(styles, options);
	
		return function update(newList) {
			var mayRemove = [];
			for(var i = 0; i < styles.length; i++) {
				var item = styles[i];
				var domStyle = stylesInDom[item.id];
				domStyle.refs--;
				mayRemove.push(domStyle);
			}
			if(newList) {
				var newStyles = listToStyles(newList);
				addStylesToDom(newStyles, options);
			}
			for(var i = 0; i < mayRemove.length; i++) {
				var domStyle = mayRemove[i];
				if(domStyle.refs === 0) {
					for(var j = 0; j < domStyle.parts.length; j++)
						domStyle.parts[j]();
					delete stylesInDom[domStyle.id];
				}
			}
		};
	}
	
	function addStylesToDom(styles, options) {
		for(var i = 0; i < styles.length; i++) {
			var item = styles[i];
			var domStyle = stylesInDom[item.id];
			if(domStyle) {
				domStyle.refs++;
				for(var j = 0; j < domStyle.parts.length; j++) {
					domStyle.parts[j](item.parts[j]);
				}
				for(; j < item.parts.length; j++) {
					domStyle.parts.push(addStyle(item.parts[j], options));
				}
			} else {
				var parts = [];
				for(var j = 0; j < item.parts.length; j++) {
					parts.push(addStyle(item.parts[j], options));
				}
				stylesInDom[item.id] = {id: item.id, refs: 1, parts: parts};
			}
		}
	}
	
	function listToStyles(list) {
		var styles = [];
		var newStyles = {};
		for(var i = 0; i < list.length; i++) {
			var item = list[i];
			var id = item[0];
			var css = item[1];
			var media = item[2];
			var sourceMap = item[3];
			var part = {css: css, media: media, sourceMap: sourceMap};
			if(!newStyles[id])
				styles.push(newStyles[id] = {id: id, parts: [part]});
			else
				newStyles[id].parts.push(part);
		}
		return styles;
	}
	
	function insertStyleElement(options, styleElement) {
		var head = getHeadElement();
		var lastStyleElementInsertedAtTop = styleElementsInsertedAtTop[styleElementsInsertedAtTop.length - 1];
		if (options.insertAt === "top") {
			if(!lastStyleElementInsertedAtTop) {
				head.insertBefore(styleElement, head.firstChild);
			} else if(lastStyleElementInsertedAtTop.nextSibling) {
				head.insertBefore(styleElement, lastStyleElementInsertedAtTop.nextSibling);
			} else {
				head.appendChild(styleElement);
			}
			styleElementsInsertedAtTop.push(styleElement);
		} else if (options.insertAt === "bottom") {
			head.appendChild(styleElement);
		} else {
			throw new Error("Invalid value for parameter 'insertAt'. Must be 'top' or 'bottom'.");
		}
	}
	
	function removeStyleElement(styleElement) {
		styleElement.parentNode.removeChild(styleElement);
		var idx = styleElementsInsertedAtTop.indexOf(styleElement);
		if(idx >= 0) {
			styleElementsInsertedAtTop.splice(idx, 1);
		}
	}
	
	function createStyleElement(options) {
		var styleElement = document.createElement("style");
		styleElement.type = "text/css";
		insertStyleElement(options, styleElement);
		return styleElement;
	}
	
	function createLinkElement(options) {
		var linkElement = document.createElement("link");
		linkElement.rel = "stylesheet";
		insertStyleElement(options, linkElement);
		return linkElement;
	}
	
	function addStyle(obj, options) {
		var styleElement, update, remove;
	
		if (options.singleton) {
			var styleIndex = singletonCounter++;
			styleElement = singletonElement || (singletonElement = createStyleElement(options));
			update = applyToSingletonTag.bind(null, styleElement, styleIndex, false);
			remove = applyToSingletonTag.bind(null, styleElement, styleIndex, true);
		} else if(obj.sourceMap &&
			typeof URL === "function" &&
			typeof URL.createObjectURL === "function" &&
			typeof URL.revokeObjectURL === "function" &&
			typeof Blob === "function" &&
			typeof btoa === "function") {
			styleElement = createLinkElement(options);
			update = updateLink.bind(null, styleElement);
			remove = function() {
				removeStyleElement(styleElement);
				if(styleElement.href)
					URL.revokeObjectURL(styleElement.href);
			};
		} else {
			styleElement = createStyleElement(options);
			update = applyToTag.bind(null, styleElement);
			remove = function() {
				removeStyleElement(styleElement);
			};
		}
	
		update(obj);
	
		return function updateStyle(newObj) {
			if(newObj) {
				if(newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap)
					return;
				update(obj = newObj);
			} else {
				remove();
			}
		};
	}
	
	var replaceText = (function () {
		var textStore = [];
	
		return function (index, replacement) {
			textStore[index] = replacement;
			return textStore.filter(Boolean).join('\n');
		};
	})();
	
	function applyToSingletonTag(styleElement, index, remove, obj) {
		var css = remove ? "" : obj.css;
	
		if (styleElement.styleSheet) {
			styleElement.styleSheet.cssText = replaceText(index, css);
		} else {
			var cssNode = document.createTextNode(css);
			var childNodes = styleElement.childNodes;
			if (childNodes[index]) styleElement.removeChild(childNodes[index]);
			if (childNodes.length) {
				styleElement.insertBefore(cssNode, childNodes[index]);
			} else {
				styleElement.appendChild(cssNode);
			}
		}
	}
	
	function applyToTag(styleElement, obj) {
		var css = obj.css;
		var media = obj.media;
	
		if(media) {
			styleElement.setAttribute("media", media)
		}
	
		if(styleElement.styleSheet) {
			styleElement.styleSheet.cssText = css;
		} else {
			while(styleElement.firstChild) {
				styleElement.removeChild(styleElement.firstChild);
			}
			styleElement.appendChild(document.createTextNode(css));
		}
	}
	
	function updateLink(linkElement, obj) {
		var css = obj.css;
		var sourceMap = obj.sourceMap;
	
		if(sourceMap) {
			// http://stackoverflow.com/a/26603875
			css += "\n/*# sourceMappingURL=data:application/json;base64," + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))) + " */";
		}
	
		var blob = new Blob([css], { type: "text/css" });
	
		var oldSrc = linkElement.href;
	
		linkElement.href = URL.createObjectURL(blob);
	
		if(oldSrc)
			URL.revokeObjectURL(oldSrc);
	}


/***/ }),
/* 67 */
/***/ (function(module, exports) {

	module.exports = {"name":"nglview-js-widgets","version":"1.1.5","description":"nglview-js-widgets","author":"Hai Nguyen <hainm.comp@gmail.com>, Alexander Rose <alexander.rose@weirdbyte.de>","license":"MIT","main":"src/index.js","repository":{"type":"git","url":"git+https://github.com/arose/nglview.git"},"bugs":{"url":"https://github.com/arose/nglview/issues"},"files":["dist","src"],"keywords":["molecular graphics","molecular structure","jupyter","widgets","ipython","ipywidgets","science"],"scripts":{"lint":"eslint src test","prepublish":"webpack","test":"mocha"},"devDependencies":{"babel-eslint":"^7.0.0","babel-register":"^6.11.6","css-loader":"^0.23.1","eslint":"^3.2.2","eslint-config-google":"^0.7.1","file-loader":"^0.8.5","json-loader":"^0.5.4","ngl":"^2.0.0-dev.33","style-loader":"^0.13.1","webpack":"^1.12.14"},"dependencies":{"jquery":"^3.2.1","jquery-ui":"^1.12.1","underscore":"^1.8.3","@jupyter-widgets/base":"^1.0.0"},"jupyterlab":{"extension":"src/jupyterlab-plugin"},"homepage":"https://github.com/arose/nglview#readme","directories":{"test":"test"}}

/***/ })
/******/ ])});;
//# sourceMappingURL=index.js.map