{"version":3,"file":"tangram.debug.mjs","sources":["../src/utils/thread.js","../node_modules/@babel/runtime/helpers/esm/typeof.js","../node_modules/@babel/runtime/helpers/esm/toPrimitive.js","../node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","../node_modules/@babel/runtime/helpers/esm/defineProperty.js","../src/utils/version.js","../src/utils/worker_broker.js","../src/utils/log.js","../src/utils/utils.js","../src/utils/debug_settings.js","../src/utils/urls.js","../src/utils/task.js","../src/utils/subscribe.js","../src/utils/slice.js","../src/gl/texture.js","../src/gl/glsl.js","../src/gl/extensions.js","../src/utils/hash.js","../node_modules/gl-shader-errors/index.js","../src/gl/shader_program.js","../src/gl/vao.js","../src/utils/merge.js","../src/utils/geo.js","../src/utils/functions.js","../node_modules/csscolorparser/csscolorparser.js","../src/styles/style_parser.js","../src/selection/selection.js","../src/gl/constants.js","../src/gl/vbo_mesh.js","../src/lights/material.js","../src/utils/vector.js","../src/lights/light.js","../src/utils/errors.js","../src/sources/data_source.js","../src/tile/tile_id.js","../src/sources/raster.js","../src/builders/wireframe.js","../src/styles/style.js","../src/gl/vertex_elements.js","../src/gl/vertex_data.js","../src/gl/vertex_layout.js","../src/builders/common.js","../node_modules/earcut/src/earcut.js","../node_modules/quickselect/index.js","../src/builders/polygons.js","../src/styles/polygons/polygons.js","../src/builders/polylines.js","../src/styles/lines/dasharray.js","../src/styles/lines/lines.js","../src/builders/points.js","../src/labels/point_anchor.js","../src/labels/intersect.js","../src/utils/obb.js","../src/labels/label.js","../src/labels/repeat_group.js","../src/labels/collision_grid.js","../src/labels/collision.js","../src/labels/label_point.js","../src/labels/point_placement.js","../src/styles/text/text_settings.js","../node_modules/fontfaceobserver/fontfaceobserver.standalone.js","../src/styles/text/font_manager.js","../src/styles/text/text_segments.js","../src/styles/text/text_wrap.js","../src/styles/text/text_canvas.js","../src/styles/text/text_labels.js","../node_modules/gl-mat3/normal-from-mat4.js","../node_modules/gl-mat3/invert.js","../node_modules/gl-mat4/multiply.js","../node_modules/gl-mat4/translate.js","../node_modules/gl-mat4/scale.js","../node_modules/gl-mat4/perspective.js","../node_modules/gl-mat4/identity.js","../node_modules/gl-mat4/lookAt.js","../node_modules/gl-mat4/copy.js","../src/utils/gl-matrix.js","../src/scene/camera.js","../src/scene/view.js","../src/styles/points/points.js","../src/labels/label_line.js","../src/styles/text/text.js","../src/styles/raster/raster.js","../src/styles/style_manager.js","../src/styles/filter.js","../src/styles/layer.js","../src/tile/tile.js","../node_modules/ieee754/index.js","../node_modules/pbf/index.js","../node_modules/@mapbox/point-geometry/index.js","../node_modules/@mapbox/vector-tile/lib/vectortilefeature.js","../node_modules/@mapbox/vector-tile/lib/vectortilelayer.js","../node_modules/@mapbox/vector-tile/lib/vectortile.js","../node_modules/@mapbox/vector-tile/index.js","../src/sources/mvt.js","../node_modules/geojson-vt/src/simplify.js","../node_modules/geojson-vt/src/feature.js","../node_modules/geojson-vt/src/convert.js","../node_modules/geojson-vt/src/clip.js","../node_modules/geojson-vt/src/wrap.js","../node_modules/geojson-vt/src/transform.js","../node_modules/geojson-vt/src/tile.js","../node_modules/geojson-vt/src/index.js","../src/sources/geojson.js","../node_modules/topojson-client/src/reverse.js","../node_modules/topojson-client/src/identity.js","../node_modules/topojson-client/src/transform.js","../node_modules/topojson-client/src/feature.js","../src/sources/topojson.js","../src/scene/scene_worker.js","../src/gl/context.js","../src/utils/props.js","../src/scene/globals.js","../node_modules/rollup-plugin-node-globals/src/global.js","../node_modules/buffer-es6/base64.js","../node_modules/buffer-es6/ieee754.js","../node_modules/buffer-es6/isArray.js","../node_modules/buffer-es6/index.js","../node_modules/process-es6/browser.js","../node_modules/jszip/dist/jszip.min.js","../node_modules/js-yaml/lib/js-yaml/common.js","../node_modules/js-yaml/lib/js-yaml/exception.js","../node_modules/js-yaml/lib/js-yaml/mark.js","../node_modules/js-yaml/lib/js-yaml/type.js","../node_modules/js-yaml/lib/js-yaml/schema.js","../node_modules/js-yaml/lib/js-yaml/type/str.js","../node_modules/js-yaml/lib/js-yaml/type/seq.js","../node_modules/js-yaml/lib/js-yaml/type/map.js","../node_modules/js-yaml/lib/js-yaml/schema/failsafe.js","../node_modules/js-yaml/lib/js-yaml/type/null.js","../node_modules/js-yaml/lib/js-yaml/type/bool.js","../node_modules/js-yaml/lib/js-yaml/type/int.js","../node_modules/js-yaml/lib/js-yaml/type/float.js","../node_modules/js-yaml/lib/js-yaml/schema/json.js","../node_modules/js-yaml/lib/js-yaml/schema/core.js","../node_modules/js-yaml/lib/js-yaml/type/timestamp.js","../node_modules/js-yaml/lib/js-yaml/type/merge.js","../node_modules/js-yaml/lib/js-yaml/type/binary.js","../node_modules/js-yaml/lib/js-yaml/type/omap.js","../node_modules/js-yaml/lib/js-yaml/type/pairs.js","../node_modules/js-yaml/lib/js-yaml/type/set.js","../node_modules/js-yaml/lib/js-yaml/schema/default_safe.js","../node_modules/js-yaml/lib/js-yaml/type/js/undefined.js","../node_modules/js-yaml/lib/js-yaml/type/js/regexp.js","../node_modules/js-yaml/lib/js-yaml/type/js/function.js","../node_modules/js-yaml/lib/js-yaml/schema/default_full.js","../node_modules/js-yaml/lib/js-yaml/loader.js","../node_modules/js-yaml/lib/js-yaml.js","../node_modules/js-yaml/index.js","../src/scene/scene_bundle.js","../src/scene/scene_loader.js","../src/tile/tile_pyramid.js","../src/labels/main_pass.js","../src/tile/tile_manager.js","../src/gl/render_state.js","../src/utils/media_capture.js","../src/scene/scene_debug.js","../src/scene/scene.js","../src/utils/debounce.js","../src/leaflet_layer.js","../src/index.js","../build/bundle.mjs"],"sourcesContent":["/*jshint worker: true*/\n\n// Mark thread as main or worker\nconst Thread = {};\n\ntry {\n    if (window instanceof Window && window.document instanceof HTMLDocument) { // jshint ignore:line\n        Thread.is_worker = false;\n        Thread.is_main   = true;\n    }\n}\ncatch(e) {\n    Thread.is_worker = true;\n    Thread.is_main   = false;\n\n    // Patch for 3rd party libs that require these globals to be present. Specifically, FontFaceObserver.\n    // Brittle solution but allows that library to load on worker threads.\n    self.window = { document: {} };\n    self.document = self.window.document;\n}\n\nexport default Thread;\n","function _typeof(o) {\n  \"@babel/helpers - typeof\";\n\n  return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n    return typeof o;\n  } : function (o) {\n    return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n  }, _typeof(o);\n}\nexport { _typeof as default };","import _typeof from \"./typeof.js\";\nfunction toPrimitive(t, r) {\n  if (\"object\" != _typeof(t) || !t) return t;\n  var e = t[Symbol.toPrimitive];\n  if (void 0 !== e) {\n    var i = e.call(t, r || \"default\");\n    if (\"object\" != _typeof(i)) return i;\n    throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n  }\n  return (\"string\" === r ? String : Number)(t);\n}\nexport { toPrimitive as default };","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nfunction toPropertyKey(t) {\n  var i = toPrimitive(t, \"string\");\n  return \"symbol\" == _typeof(i) ? i : i + \"\";\n}\nexport { toPropertyKey as default };","import toPropertyKey from \"./toPropertyKey.js\";\nfunction _defineProperty(e, r, t) {\n  return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n    value: t,\n    enumerable: !0,\n    configurable: !0,\n    writable: !0\n  }) : e[r] = t, e;\n}\nexport { _defineProperty as default };","import {version} from '../../package.json';\n\nexport default 'v' + version;\n","/*jshint worker: true*/\n\n// WorkerBroker routes messages between web workers and the main thread, allowing for simpler\n// async code via promises. Example usage:\n//\n// In web worker, register self as a callable \"target\", and define a method:\n//\n//     WorkerBroker.addTarget('self', self);\n//\n//     self.square = function (x) {\n//         return x * x;\n//     };\n//\n// In main thread, invoke that method and receive the result (if any) as a promise.\n//\n//     worker = new Worker(...);\n//     WorkerBroker.addWorker(worker);\n//\n//     WorkerBroker.postMessage(worker, 'self.square', 5).then(function(y) {\n//         console.log(y);\n//     });\n//\n//     -> prints 25\n//\n// Async code:\n//\n// For synchronous code that must pass a return value to the main thread, the function can simply\n// return an immediate value (see example above). For cases where the worker method needs to run\n// asynchronous code, the function can return a promise, and the resolved or rejected value will\n// be sent back to the main thread when the promise is fulfilled.\n//\n// Error handling:\n//\n// If the worker method either throws an error, or returns a promise that is rejected, it will be\n// sent back to the main thread as a promise rejection. These two examples are equivalent:\n//\n//     In worker, throwing an error:\n//\n//         self.broken = function () {\n//             throw new Error('error in worker!');\n//         };\n//\n//     In worker, returning a rejected promise:\n//\n//         self.broken = function () {\n//             return Promise.reject(new Error('error in worker!'));\n//         };\n//\n//     In main thread, both errors are received as a promise rejection:\n//\n//         WorkerBroker.postMessage(worker, 'self.broken').then(\n//             // Promise resolved\n//             function() {\n//                 console.log('success!');\n//             },\n//             // Promise rejected\n//             function(error) {\n//                 console.log('error!', error);\n//             });\n//\n//         -> prints 'error! error in worker'\n//\n// Calling from worker to main thread:\n//\n// The same style of calls can be made *from* a web worker, to the main thread. The API is the same\n// with the exception that the first argument, 'worker', is not needed for WorkerBroker.postMessage(),\n// since the main thread is the implicit target.\n//\n// In main thread, define a method and register it:\n//\n//     var geometry = {\n//         length: function(x, y) {\n//             return Math.sqrt(x * x + y * y);\n//         }\n//     };\n//\n//     WorkerBroker.addTarget('geometry', geometry);\n//\n// In worker thread):\n//\n//     WorkerBroker.postMessage('geometry.length', 3, 4).then(function(d) {\n//         console.log(d);\n//     });\n//\n//     -> prints 5\n//\n\nimport Thread from './thread';\nimport log from './log';\n\nvar WorkerBroker;\nexport default WorkerBroker = {};\n\n// Global list of all worker messages\n// Uniquely tracks every call made between main thread and a worker\nvar message_id = 0;\nvar messages = {};\n\n// Register an object to receive calls from other thread\nWorkerBroker.targets = {};\nWorkerBroker.addTarget = function (name, target) {\n    WorkerBroker.targets[name] = target;\n};\n\nWorkerBroker.removeTarget = function (name) {\n    if (name) {\n        delete WorkerBroker.targets[name];\n    }\n};\n\n// Given a dot-notation-style method name, e.g. 'Object.object.method',\n// find the object to call the method on from the list of registered targets\nfunction findTarget (method) {\n    var chain = [];\n    if (typeof method === 'string') {\n        chain = method.split('.');\n        method = chain.pop();\n    }\n\n    var target = WorkerBroker.targets;\n\n    for (let m=0; m < chain.length; m++) {\n        if (target[chain[m]]) {\n            target = target[chain[m]];\n        }\n        else {\n            return [];\n        }\n    }\n\n    return [method, target];\n}\n\n// Main thread:\n// - Send messages to workers, and optionally receive an async response as a promise\n// - Receive messages from workers, and optionally send an async response back as a promise\nfunction setupMainThread () {\n\n    // Send a message to a worker, and optionally get an async response\n    // Arguments:\n    //   - worker: one or more web worker instances to send the message to (single value or array)\n    //   - method: the method with this name, specified with dot-notation, will be invoked in the worker\n    //   - message: spread of arguments to call the method with\n    // Returns:\n    //   - a promise that will be fulfilled if the worker method returns a value (could be immediately, or async)\n    //\n    WorkerBroker.postMessage = function (worker, method, ...message) {\n        // If more than one worker specified, post to multiple\n        if (Array.isArray(worker)) {\n            return Promise.all(\n                worker.map(w => WorkerBroker.postMessage(w, method, ...message))\n            );\n        }\n\n        // Parse options\n        let options = {};\n        if (typeof method === 'object') {\n            options = method;\n            method = method.method;\n        }\n\n        // Track state of this message\n        var promise = new Promise((resolve, reject) => {\n            messages[message_id] = { method, message, resolve, reject };\n        });\n\n\n        let payload, transferables = [];\n\n        if (message && message.length === 1 && message[0] instanceof WorkerBroker.withTransferables) {\n            transferables = message[0].transferables;\n            message = message[0].value;\n        }\n\n        payload = {\n            type: 'main_send',      // mark message as method invocation from main thread\n            message_id,             // unique id for this message, for life of program\n            method,                 // will dispatch to a function of this name within the worker\n            message                 // message payload\n        };\n\n        if (options.stringify) {\n            payload = JSON.stringify(payload);\n        }\n\n        worker.postMessage(payload, transferables.map(t => t.object));\n        freeTransferables(transferables);\n        if (transferables.length > 0) {\n            log('trace', `'${method}' transferred ${transferables.length} objects to worker thread`);\n        }\n\n        message_id++;\n        return promise;\n    };\n\n    // Add a worker to communicate with - each worker must be registered from the main thread\n    WorkerBroker.addWorker = function (worker) {\n        if (!(worker instanceof Worker)) {\n            throw Error('Worker broker could not add non-Worker object', worker);\n        }\n\n        worker.addEventListener('message', function WorkerBrokerMainThreadHandler(event) {\n            let data = ((typeof event.data === 'string') ? JSON.parse(event.data) : event.data);\n            let id = data.message_id;\n\n            // Listen for messages coming back from the worker, and fulfill that message's promise\n            if (data.type === 'worker_reply') {\n                // Pass the result to the promise\n                if (messages[id]) {\n                    if (data.error) {\n                        messages[id].reject(data.error);\n                    }\n                    else {\n                        messages[id].resolve(data.message);\n                    }\n                    delete messages[id];\n                }\n            }\n            // Listen for messages initiating a call from the worker, dispatch them,\n            // and send any return value back to the worker\n            // Unique id for this message & return call to main thread\n            else if (data.type === 'worker_send' && id != null) {\n                // Call the requested method and save the return value\n                let result, error, target, method_name, method;\n                try {\n                    [method_name, target] = findTarget(data.method);\n                    if (!target) {\n                        throw Error(`Worker broker could not dispatch message type ${data.method} on target ${data.target} because no object with that name is registered on main thread`);\n                    }\n\n                    method = (typeof target[method_name] === 'function') && target[method_name];\n                    if (!method) {\n                        throw Error(`Worker broker could not dispatch message type ${data.method} on target ${data.target} because object has no method with that name`);\n                    }\n\n                    result = method.apply(target, data.message);\n                }\n                catch(e) {\n                    // Thrown errors will be passed back (in string form) to worker\n                    error = e;\n\n                }\n                // Send return value to worker\n                let payload, transferables = [];\n\n                // Async result\n                if (result instanceof Promise) {\n                    result.then((value) => {\n                        if (value instanceof WorkerBroker.withTransferables) {\n                            transferables = value.transferables;\n                            value = value.value[0];\n                        }\n\n                        payload = {\n                            type: 'main_reply',\n                            message_id: id,\n                            message: value\n                        };\n                        worker.postMessage(payload, transferables.map(t => t.object));\n                        freeTransferables(transferables);\n                        if (transferables.length > 0) {\n                            log('trace', `'${method_name}' transferred ${transferables.length} objects to worker thread`);\n                        }\n\n                    }, (error) => {\n                        worker.postMessage({\n                            type: 'main_reply',\n                            message_id: id,\n                            error: (error instanceof Error ? `${error.message}: ${error.stack}` : error)\n                        });\n                    });\n                }\n                // Immediate result\n                else {\n                    if (result instanceof WorkerBroker.withTransferables) {\n                        transferables = result.transferables;\n                        result = result.value[0];\n                    }\n\n                    payload = {\n                        type: 'main_reply',\n                        message_id: id,\n                        message: result,\n                        error: (error instanceof Error ? `${error.message}: ${error.stack}` : error)\n                    };\n                    worker.postMessage(payload, transferables.map(t => t.object));\n                    freeTransferables(transferables);\n                    if (transferables.length > 0) {\n                        log('trace', `'${method_name}' transferred ${transferables.length} objects to worker thread`);\n                    }\n                }\n            }\n        });\n\n    };\n\n    // Expose for debugging\n    WorkerBroker.getMessages = function () {\n        return messages;\n    };\n\n    WorkerBroker.getMessageId = function () {\n        return message_id;\n    };\n\n}\n\n// Worker threads:\n// - Receive messages from main thread, and optionally send an async response back as a promise\n// - Send messages to main thread, and optionally receive an async response as a promise\nfunction setupWorkerThread () {\n\n    // Send a message to the main thread, and optionally get an async response as a promise\n    // Arguments:\n    //   - method: the method with this name, specified with dot-notation, will be invoked on the main thread\n    //   - message: array of arguments to call the method with\n    // Returns:\n    //   - a promise that will be fulfilled if the main thread method returns a value (could be immediately, or async)\n    //\n    WorkerBroker.postMessage = function (method, ...message) {\n        // Parse options\n        let options = {};\n        if (typeof method === 'object') {\n            options = method;\n            method = method.method;\n        }\n\n        // Track state of this message\n        var promise = new Promise((resolve, reject) => {\n            messages[message_id] = { method, message, resolve, reject };\n        });\n\n        let payload, transferables = [];\n\n        if (message && message.length === 1 && message[0] instanceof WorkerBroker.withTransferables) {\n            transferables = message[0].transferables;\n            message = message[0].value;\n        }\n\n        payload = {\n            type: 'worker_send',    // mark message as method invocation from worker\n            message_id,             // unique id for this message, for life of program\n            method,                 // will dispatch to a method of this name on the main thread\n            message                 // message payload\n        };\n\n        if (options.stringify) {\n            payload = JSON.stringify(payload);\n        }\n\n        self.postMessage(payload, transferables.map(t => t.object));\n        freeTransferables(transferables);\n        if (transferables.length > 0) {\n            log('trace', `'${method}' transferred ${transferables.length} objects to main thread`);\n        }\n\n        message_id++;\n        return promise;\n    };\n\n    self.addEventListener('message', function WorkerBrokerWorkerThreadHandler(event) {\n        let data = ((typeof event.data === 'string') ? JSON.parse(event.data) : event.data);\n        let id = data.message_id;\n\n        // Listen for messages coming back from the main thread, and fulfill that message's promise\n        if (data.type === 'main_reply') {\n            // Pass the result to the promise\n            if (messages[id]) {\n                if (data.error) {\n                    messages[id].reject(data.error);\n                }\n                else {\n                    messages[id].resolve(data.message);\n                }\n                delete messages[id];\n            }\n        }\n        // Receive messages from main thread, dispatch them, and send back a reply\n        // Unique id for this message & return call to main thread\n        else if (data.type === 'main_send' && id != null) {\n            // Call the requested worker method and save the return value\n            let result, error, target, method_name, method;\n            try {\n                [method_name, target] = findTarget(data.method);\n                if (!target) {\n                    throw Error(`Worker broker could not dispatch message type ${data.method} on target ${data.target} because no object with that name is registered on main thread`);\n                }\n\n                method = (typeof target[method_name] === 'function') && target[method_name];\n\n                if (!method) {\n                    throw Error(`Worker broker could not dispatch message type ${data.method} because worker has no method with that name`);\n                }\n\n                result = method.apply(target, data.message);\n            }\n            catch(e) {\n                // Thrown errors will be passed back (in string form) to main thread\n                error = e;\n            }\n\n            // Send return value to main thread\n            let payload, transferables = [];\n\n            // Async result\n            if (result instanceof Promise) {\n                result.then((value) => {\n                    if (value instanceof WorkerBroker.withTransferables) {\n                        transferables = value.transferables;\n                        value = value.value[0];\n                    }\n\n                    payload = {\n                        type: 'worker_reply',\n                        message_id: id,\n                        message: value\n                    };\n                    self.postMessage(payload, transferables.map(t => t.object));\n                    freeTransferables(transferables);\n                    if (transferables.length > 0) {\n                        log('trace', `'${method_name}' transferred ${transferables.length} objects to main thread`);\n                    }\n                }, (error) => {\n                    self.postMessage({\n                        type: 'worker_reply',\n                        message_id: id,\n                        error: (error instanceof Error ? `${error.message}: ${error.stack}` : error)\n                    });\n                });\n            }\n            // Immediate result\n            else {\n                if (result instanceof WorkerBroker.withTransferables) {\n                    transferables = result.transferables;\n                    result = result.value[0];\n                }\n\n                payload = {\n                    type: 'worker_reply',\n                    message_id: id,\n                    message: result,\n                    error: (error instanceof Error ? `${error.message}: ${error.stack}` : error)\n                };\n                self.postMessage(payload, transferables.map(t => t.object));\n                freeTransferables(transferables);\n                if (transferables.length > 0) {\n                    log('trace', `'${method_name}' transferred ${transferables.length} objects to main thread`);\n                }\n            }\n        }\n    });\n\n}\n\n// Special value wrapper, to indicate that we want to find and include transferable objects in the message\nWorkerBroker.withTransferables = function (...value) {\n    if (!(this instanceof WorkerBroker.withTransferables)) {\n        return new WorkerBroker.withTransferables(...value);\n    }\n\n    this.value = value;\n    this.transferables = findTransferables(this.value);\n};\n\n// Build a list of transferable objects from a source object\n// Returns a list of info about each transferable:\n//   - object: the actual transferable object\n//   - parent: the parent object that the transferable is a property of (if any)\n//   - property: the property name of the transferable on the parent object (if any)\n// TODO: add option in case you DON'T want to transfer objects\nfunction findTransferables(source, parent = null, property = null, list = []) {\n    if (!source) {\n        return list;\n    }\n\n    if (Array.isArray(source)) {\n        // Check each array element\n        source.forEach((x, i) => findTransferables(x, source, i, list));\n    }\n    else if (typeof source === 'object') {\n        // Is the object a transferable array buffer?\n        if (source instanceof ArrayBuffer) {\n            list.push({ object: source, parent, property });\n        }\n        // Or looks like a typed array (has an array buffer property)?\n        else if (source.buffer instanceof ArrayBuffer) {\n            list.push({ object: source.buffer, parent, property });\n        }\n        // Otherwise check each property\n        else {\n            for (let prop in source) {\n                findTransferables(source[prop], source, prop, list);\n            }\n        }\n    }\n    return list;\n}\n\n// Remove neutered transferables from parent objects, as they should no longer be accessed after transfer\nfunction freeTransferables(transferables) {\n    if (!Array.isArray(transferables)) {\n        return;\n    }\n    transferables.filter(t => t.parent && t.property).forEach(t => delete t.parent[t.property]);\n}\n\n// Setup this thread as appropriate\nif (Thread.is_main) {\n    setupMainThread();\n}\n\nif (Thread.is_worker) {\n    setupWorkerThread();\n}\n","import version from './version';\nimport Thread from './thread';\nimport WorkerBroker from './worker_broker';\n\nconst LEVELS = {\n    silent: -1,\n    error: 0,\n    warn: 1,\n    info: 2,\n    debug: 3,\n    trace: 4\n};\n\nconst methods = {};\nlet logged_once = {};\n\nfunction methodForLevel (level) {\n    if (Thread.is_main) {\n        methods[level] = methods[level] || (console[level] ? console[level] : console.log).bind(console); // eslint-disable-line no-console\n        return methods[level];\n    }\n}\n\n// Logs message, proxying any log requests from worker threads back to the main thread.\n// Returns (asynchronously, due to proxying) a boolean indicating if the message was logged.\n// Option `once: true` can be used to only log each unique log message once (e.g. for warnings\n// that would otherwise be repetitive or possibly logged thousands of times, such as per feature).\nexport default function log (opts, ...msg) {\n    let level = (typeof opts === 'object') ? opts.level : opts;\n    if (LEVELS[level] <= LEVELS[log.level]) {\n        if (Thread.is_worker) {\n            // Proxy to main thread\n            return WorkerBroker.postMessage({ method: '_logProxy', stringify: true }, opts, ...msg);\n        }\n        else {\n            // Only log message once?\n            if (typeof opts === 'object' && opts.once === true) {\n                if (logged_once[JSON.stringify(msg)]) {\n                    return Promise.resolve(false);\n                }\n                logged_once[JSON.stringify(msg)] = true;\n            }\n\n            // Write to console (on main thread)\n            let logger = methodForLevel(level);\n            if (msg.length > 1) {\n                logger(`Tangram ${version} [${level}]: ${msg[0]}`, ...msg.slice(1));\n            }\n            else {\n                logger(`Tangram ${version} [${level}]: ${msg[0]}`);\n            }\n        }\n        return Promise.resolve(true);\n    }\n    return Promise.resolve(false);\n}\n\nlog.level = 'info';\nlog.workers = null;\n\nlog.setLevel = function (level) {\n    log.level = level;\n\n    if (Thread.is_main && Array.isArray(log.workers)) {\n        WorkerBroker.postMessage(log.workers, '_logSetLevelProxy', level);\n    }\n};\n\nif (Thread.is_main) {\n    log.setWorkers = function (workers) {\n        log.workers = workers;\n    };\n\n    log.reset = function () {\n        logged_once = {};\n    };\n}\n\nWorkerBroker.addTarget('_logProxy', log);                   // proxy log messages from worker to main thread\nWorkerBroker.addTarget('_logSetLevelProxy', log.setLevel);  // proxy log level setting from main to worker thread\n","// Miscellaneous utilities\n/*jshint worker: true*/\n\nimport log from './log';\nimport Thread from './thread';\nimport WorkerBroker from './worker_broker';\n\nconst Utils = {};\n\nexport default Utils;\n\nWorkerBroker.addTarget('Utils', Utils);\n\n// Basic Safari detection\n// http://stackoverflow.com/questions/7944460/detect-safari-browser\nUtils.isSafari = function () {\n    return /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n};\n\n// Basic IE11 or Edge detection\nUtils.isMicrosoft = function () {\n    return /(Trident\\/7.0|Edge[ /](\\d+[.\\d]+))/i.test(navigator.userAgent);\n};\n\nUtils._requests = {};       // XHR requests on current thread\nUtils._proxy_requests = {}; // XHR requests proxied to main thread\n\n// `request_key` is a user-provided key that can be later used to cancel the request\nUtils.io = function (url, timeout = 60000, responseType = 'text', method = 'GET', headers = {}, request_key = null, proxy = false) {\n    if (Thread.is_worker && Utils.isMicrosoft()) {\n        // Some versions of IE11 and Edge will hang web workers when performing XHR requests\n        // These requests can be proxied through the main thread\n        // https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/9545866/\n        log('debug', 'Proxying request for URL to worker', url);\n\n        if (request_key) {\n            Utils._proxy_requests[request_key] = true; // mark as proxied\n        }\n        return WorkerBroker.postMessage('Utils.io', url, timeout, responseType, method, headers, request_key, true);\n    }\n    else {\n        var request = new XMLHttpRequest();\n        var promise = new Promise((resolve, reject) => {\n            request.open(method, url, true);\n            request.timeout = timeout;\n            request.responseType = responseType;\n\n            // Attach optional request headers\n            if (headers && typeof headers === 'object') {\n                for (let key in headers) {\n                    request.setRequestHeader(key, headers[key]);\n                }\n            }\n\n            request.onload = () => {\n                if (request.status === 200) {\n                    if (['text', 'json'].indexOf(request.responseType) > -1) {\n                        resolve({ body: request.responseText, status: request.status });\n                    }\n                    else {\n                        resolve({ body: request.response, status: request.status });\n                    }\n                }\n                else if (request.status === 204) { // No Content\n                    resolve({ body: null, status: request.status });\n                }\n                else {\n                    reject(Error('Request error with a status of ' + request.statusText));\n                }\n            };\n            request.onerror = (evt) => {\n                reject(Error('There was a network error' + evt.toString()));\n            };\n            request.ontimeout = (evt) => {\n                reject(Error('timeout '+ evt.toString()));\n            };\n            request.send();\n        });\n\n        promise = promise.then(response => {\n            if (request_key) {\n                delete Utils._requests[request_key];\n            }\n\n            if (proxy) {\n                return WorkerBroker.withTransferables(response);\n            }\n            return response;\n        });\n\n        if (request_key) {\n            Utils._requests[request_key] = request;\n        }\n\n        return promise;\n    }\n};\n\n// Ãancel a pending network request by user-provided request key\nUtils.cancelRequest = function (key) {\n    // Check for a request that was proxied to the main thread\n    if (Thread.is_worker && Utils._proxy_requests[key]) {\n        return WorkerBroker.postMessage('Utils.cancelRequest', key); // forward to main thread\n    }\n\n    let req = Utils._requests[key];\n    if (req) {\n        log('trace', `Cancelling network request key '${key}'`);\n        Utils._requests[key].abort();\n        delete Utils._requests[key];\n    }\n    else {\n        log('trace', `Could not find network request key '${key}'`);\n    }\n};\n\n// Stringify an object into JSON, but convert functions to strings\nUtils.serializeWithFunctions = function (obj) {\n    if (typeof obj === 'function') {\n        return obj.toString();\n    }\n\n    let serialized = JSON.stringify(obj, function(k, v) {\n        // Convert functions to strings\n        if (typeof v === 'function') {\n            return v.toString();\n        }\n        return v;\n    });\n\n    return serialized;\n};\n\n// Default to allowing high pixel density\n// Returns true if display density changed\nUtils.use_high_density_display = true;\nUtils.updateDevicePixelRatio = function () {\n    let prev = Utils.device_pixel_ratio;\n    Utils.device_pixel_ratio = (Utils.use_high_density_display && window.devicePixelRatio) || 1;\n    return Utils.device_pixel_ratio !== prev;\n};\n\nif (Thread.is_main) {\n    Utils.updateDevicePixelRatio();\n}\n\n// Used for differentiating between power-of-2 and non-power-of-2 textures\n// Via: http://stackoverflow.com/questions/19722247/webgl-wait-for-texture-to-load\nUtils.isPowerOf2 = function(value) {\n    return (value & (value - 1)) === 0;\n};\n\n// Interpolate 'x' along a series of control points\n// 'points' is an array of control points in the form [x, y]\n//\n// Example:\n//     Control points:\n//         [0, 5]:  when x=0, y=5\n//         [4, 10]: when x=4, y=10\n//\n//     Utils.interpolate(2, [[0, 5], [4, 10]]);\n//     -> computes x=2, halfway between x=0 and x=4: (10 - 5) / 2 +5\n//     -> returns 7.5\n//\n// TODO: add other interpolation methods besides linear\n//\nUtils.interpolate = function(x, points, transform) {\n    // If this doesn't resemble a list of control points, just return the original value\n    if (!Array.isArray(points) || !Array.isArray(points[0])) {\n        return points;\n    }\n    else if (points.length < 1) {\n        return points;\n    }\n\n    var x1, x2, d, y, y1, y2;\n\n    // Min bounds\n    if (x <= points[0][0]) {\n        y = points[0][1];\n        if (typeof transform === 'function') {\n            y = transform(y);\n        }\n    }\n    // Max bounds\n    else if (x >= points[points.length-1][0]) {\n        y = points[points.length-1][1];\n        if (typeof transform === 'function') {\n            y = transform(y);\n        }\n    }\n    // Find which control points x is between\n    else {\n        for (var i=0; i < points.length - 1; i++) {\n            if (x >= points[i][0] && x < points[i+1][0]) {\n                // Linear interpolation\n                x1 = points[i][0];\n                x2 = points[i+1][0];\n\n                // Multiple values\n                if (Array.isArray(points[i][1])) {\n                    y = [];\n                    for (var c=0; c < points[i][1].length; c++) {\n                        if (typeof transform === 'function') {\n                            y1 = transform(points[i][1][c]);\n                            y2 = transform(points[i+1][1][c]);\n                            d = y2 - y1;\n                            y[c] = d * (x - x1) / (x2 - x1) + y1;\n                        }\n                        else {\n                            d = points[i+1][1][c] - points[i][1][c];\n                            y[c] = d * (x - x1) / (x2 - x1) + points[i][1][c];\n                        }\n                    }\n                }\n                // Single value\n                else {\n                    if (typeof transform === 'function') {\n                        y1 = transform(points[i][1]);\n                        y2 = transform(points[i+1][1]);\n                        d = y2 - y1;\n                        y = d * (x - x1) / (x2 - x1) + y1;\n                    }\n                    else {\n                        d = points[i+1][1] - points[i][1];\n                        y = d * (x - x1) / (x2 - x1) + points[i][1];\n                    }\n                }\n                break;\n            }\n        }\n    }\n    return y;\n};\n\nUtils.toCSSColor = function (color) {\n    if (color != null) {\n        if (color[3] === 1) { // full opacity\n            return `rgb(${color.slice(0, 3).map(c => Math.round(c * 255)).join(', ')})`;\n        }\n        // RGB is between [0, 255] opacity is between [0, 1]\n        return `rgba(${color.map((c, i) => (i < 3 && Math.round(c * 255)) || c).join(', ')})`;\n    }\n};\n","let debugSettings;\n\nexport default debugSettings = {\n    // draws a blue rectangle border around the collision box of a label\n    draw_label_collision_boxes: false,\n\n    // draws a green rectangle border within the texture box of a label\n    draw_label_texture_boxes: false,\n\n    // suppreses fade-in of labels\n    suppress_label_fade_in: false,\n\n    // suppress animaton of label snap to pixel grid\n    suppress_label_snap_animation: false,\n\n    // show hidden labels for debugging\n    show_hidden_labels: false,\n\n    // collect feature/geometry stats on styling layers\n    layer_stats: false,\n\n    // draw scene in wireframe mode\n    wireframe: false\n};\n\nexport function mergeDebugSettings (settings) {\n    Object.assign(debugSettings, settings);\n}\n","import log from './log';\n\n// Adds a base origin to relative URLs\nexport function addBaseURL (url, base) {\n    if (!url || !isRelativeURL(url)) {\n        return url;\n    }\n\n    var relative_path = (url[0] !== '/');\n    var base_info;\n    if (base) {\n        base_info = document.createElement('a'); // use a temporary element to parse URL\n        base_info.href = base;\n    }\n    else {\n        base_info = window.location;\n    }\n\n    if (relative_path) {\n        let path = pathForURL(base_info.href);\n        url = path + url;\n    }\n    else {\n        let origin = base_info.origin;\n        if (!origin) {\n            origin = base_info.protocol + '//' + base_info.host; // IE11 doesn't have origin property\n        }\n        url = origin + url;\n    }\n\n    return url;\n}\n\nexport function pathForURL (url) {\n    if (typeof url === 'string' && url.search(/^(data|blob):/) === -1) {\n        let qs = url.indexOf('?');\n        if (qs > -1) {\n            url = url.substr(0, qs);\n        }\n\n        let hash = url.indexOf('#');\n        if (hash > -1) {\n            url = url.substr(0, hash);\n        }\n\n        return url.substr(0, url.lastIndexOf('/') + 1) || '';\n    }\n    return '';\n}\n\nexport function extensionForURL (url) {\n    url = url.split('/').pop();\n    let last_dot = url.lastIndexOf('.');\n    if (last_dot > -1) {\n        return url.substring(last_dot + 1);\n    }\n}\n\nexport function isLocalURL (url) {\n    if (typeof url !== 'string') {\n        return;\n    }\n    return (url.search(/^(data|blob):/) > -1);\n}\n\nexport function isRelativeURL (url) {\n    if (typeof url !== 'string') {\n        return;\n    }\n    return !(url.search(/^(http|https|data|blob):/) > -1 || url.substr(0, 2) === '//');\n}\n\n// Resolves './' and '../' components from relative path, to get a \"flattened\" path\nexport function flattenRelativeURL (url) {\n    let dirs = (url || '').split('/');\n    for (let d = 1; d < dirs.length; d++) {\n        if (dirs[d] === '.') {\n            dirs.splice(d, 1);\n            d--;\n        }\n        else if (dirs[d] === '..') {\n            d = d + 0;\n            dirs.splice(d-1, 2);\n            d--;\n        }\n    }\n    return dirs.join('/');\n}\n\n// Add a set of query string params to a URL\n// params: hash of key/value pairs of query string parameters\n// returns array of: [modified URL, array of duplicate param name and values]\nexport function addParamsToURL (url, params) {\n    if (!params || Object.keys(params).length === 0) {\n        return [url, []];\n    }\n\n    var qs_index = url.indexOf('?');\n    var hash_index = url.indexOf('#');\n\n    // Save and trim hash\n    var hash = '';\n    if (hash_index > -1) {\n        hash = url.slice(hash_index);\n        url = url.slice(0, hash_index);\n    }\n\n    // Start query string\n    if (qs_index === -1) {\n        qs_index = url.length;\n        url += '?';\n    }\n    qs_index++; // advanced past '?'\n\n    // Build query string params\n    var url_params = '';\n    var dupes = [];\n    for (var p in params) {\n        if (getURLParameter(p, url) !== '') {\n            dupes.push([p, params[p]]);\n            continue;\n        }\n        url_params += `${p}=${params[p]}&`;\n    }\n\n    // Insert new query string params and restore hash\n    url = url.slice(0, qs_index) + url_params + url.slice(qs_index) + hash;\n\n    return [url, dupes];\n}\n\n// Polyfill (for Safari compatibility)\nlet _createObjectURL;\nexport function createObjectURL (url) {\n    if (_createObjectURL === undefined) {\n        _createObjectURL = (window.URL && window.URL.createObjectURL) || (window.webkitURL && window.webkitURL.createObjectURL);\n\n        if (typeof _createObjectURL !== 'function') {\n            _createObjectURL = null;\n            log('warn', 'window.URL.createObjectURL (or vendor prefix) not found, unable to create local blob URLs');\n        }\n    }\n\n    if (_createObjectURL) {\n        return _createObjectURL(url);\n    }\n    else {\n        return url;\n    }\n}\n\nlet _revokeObjectURL;\nexport function revokeObjectURL (url) {\n    if (_revokeObjectURL === undefined) {\n        _revokeObjectURL = (window.URL && window.URL.revokeObjectURL) || (window.webkitURL && window.webkitURL.revokeObjectURL);\n\n        if (typeof _revokeObjectURL !== 'function') {\n            _revokeObjectURL = null;\n            log('warn', 'window.URL.revokeObjectURL (or vendor prefix) not found, unable to create local blob URLs');\n        }\n    }\n\n    if (_revokeObjectURL) {\n        return _revokeObjectURL(url);\n    }\n    else {\n        return url;\n    }\n}\n\n// Get URL that the current script was loaded from\n// If currentScript is not available, loops through <script> elements searching for a list of provided paths\n// e.g. findCurrentURL('tangram.debug.js', 'tangram.min.js');\nexport function findCurrentURL (...paths) {\n    // Find currently executing script\n    var script = document.currentScript;\n    if (script) {\n        return script.src;\n    }\n    else if (Array.isArray(paths)) {\n        // Fallback on looping through <script> elements if document.currentScript is not supported\n        var scripts = document.getElementsByTagName('script');\n        for (var s=0; s < scripts.length; s++) {\n            for (let p=0; p < paths.length; p++) {\n                if (scripts[s].src.indexOf(paths[p]) > -1) {\n                    return scripts[s].src;\n                }\n            }\n        }\n    }\n}\n\n// Via https://davidwalsh.name/query-string-javascript\nfunction getURLParameter (name, url) {\n    name = name.replace(/[[]/, '\\\\[').replace(/[\\]]/, '\\\\]');\n    var regex = new RegExp('[\\\\?&]' + name + '=([^&#]*)');\n    var results = regex.exec(url);\n    return results === null ? '' : decodeURIComponent(results[1].replace(/\\+/g, ' '));\n}\n","// import log from './log';\n\nconst Task = {\n    id: 0,              // unique id per task\n    queue: [],          // current queue of outstanding tasks\n    max_time: 20,       // default time in which all tasks should complete per frame\n    start_time: null,   // start time for tasks in current frame\n    state: {},          // track flags about environment state (ex: whether user is currently moving the view)\n\n    add (task) {\n        task.id = Task.id++;\n        task.max_time = task.max_time || Task.max_time; // allow task to run for this much time (tasks have a global collective limit per frame, too)\n        task.pause_factor = task.pause_factor || 1;     // pause tasks by this many frames when they run too long\n        let promise = new Promise((resolve, reject) => {\n            task.resolve = resolve;\n            task.reject = reject;\n        });\n        task.promise = promise;\n\n        task.elapsed = 0;\n        task.total_elapsed = 0;\n        task.stats = { calls: 0 };\n        this.queue.push(task);\n\n        // Run task immediately if under total frame time\n        this.start_time = this.start_time || performance.now(); // start frame timer if necessary\n        this.elapsed = performance.now() - this.start_time;\n        if (this.elapsed < Task.max_time || task.immediate) {\n            this.process(task);\n        }\n\n        return task.promise;\n    },\n\n    remove (task) {\n        let idx = this.queue.indexOf(task);\n        if (idx > -1) {\n            this.queue.splice(idx, 1);\n        }\n    },\n\n    process (task) {\n        // Skip task while user is moving the view, if the task requests it\n        // (for intensive tasks that lock the UI, like canvas rasterization)\n        if (this.state.user_moving_view && task.user_moving_view === false) {\n            // log('debug', `*** SKIPPING task id ${task.id}, ${task.type} while user is moving view`);\n            return;\n        }\n\n        // Skip task if it's currently paused\n        if (task.pause) {\n            // log('debug', `*** PAUSING task id ${task.id}, ${task.type} (${task.pause})`);\n            task.pause--;\n            return true;\n        }\n\n        task.stats.calls++;\n        task.start_time = performance.now(); // start task timer\n        return task.run(task);\n    },\n\n    processAll () {\n        this.start_time = this.start_time || performance.now(); // start frame timer if necessary\n        for (let i=0; i < this.queue.length; i++) {\n            // Exceeded either total task time, or total frame time\n            let task = this.queue[i];\n\n            if (this.process(task) !== true) {\n                // If the task didn't complete, pause it for a task-specific number of frames\n                // (can be disabled by setting pause_factor to 0)\n                if (!task.pause) {\n                    task.pause = (task.elapsed > task.max_time) ? task.pause_factor : 0;\n                }\n                task.total_elapsed += task.elapsed;\n            }\n\n            // Check total frame time\n            this.elapsed = performance.now() - this.start_time;\n            if (this.elapsed >= Task.max_time) {\n                this.start_time = null; // reset frame timer\n                break;\n            }\n        }\n\n    },\n\n    finish (task, value) {\n        task.elapsed = performance.now() - task.start_time;\n        task.total_elapsed += task.elapsed;\n        // log('debug', `task type ${task.type}, tile ${task.id}, finish after ${task.stats.calls} calls, ${task.total_elapsed.toFixed(2)} elapsed`);\n        this.remove(task);\n        task.resolve(value);\n        return task.promise;\n    },\n\n    cancel (task) {\n        let val;\n\n        if (task.cancel instanceof Function) {\n            val = task.cancel(task); // optional cancel function\n        }\n\n        task.resolve(val);\n    },\n\n    shouldContinue (task) {\n        // Suspend task if it runs over its specific per-frame limit, or the global limit\n        task.elapsed = performance.now() - task.start_time;\n        this.elapsed = performance.now() - this.start_time;\n        return ((task.elapsed < task.max_time) && (this.elapsed < Task.max_time));\n    },\n\n    removeForTile (tile_id) {\n        for (let idx = this.queue.length-1; idx >= 0; idx--) {\n            if (this.queue[idx].tile_id === tile_id) {\n                // log('trace', `Task: remove tasks for tile ${tile_id}`);\n                this.cancel(this.queue[idx]);\n                this.queue.splice(idx, 1);\n            }\n        }\n    },\n\n    setState (state) {\n        this.state = state;\n    }\n\n};\n\nexport default Task;\n","import log from './log';\n\nexport default function subscribeMixin (target) {\n\n    let listeners = [];\n\n    return Object.assign(target, {\n\n        subscribe(listener) {\n            if (listeners.indexOf(listener) === -1) {\n                listeners.push(listener);\n            }\n        },\n\n        unsubscribe(listener) {\n            let index = listeners.indexOf(listener);\n            if (index > -1) {\n                listeners.splice(index, 1);\n            }\n        },\n\n        unsubscribeAll() {\n            listeners = [];\n        },\n\n        trigger(event, ...data) {\n            listeners.forEach(listener => {\n                if (typeof listener[event] === 'function') {\n                    try {\n                        listener[event](...data);\n                    }\n                    catch(e) {\n                        log('warn', `Caught exception in listener for event '${event}':`, e);\n                    }\n                }\n            });\n        },\n\n        hasSubscribersFor(event) {\n            let has = false;\n            listeners.forEach(listener => {\n                if (typeof listener[event] === 'function') {\n                    has = true;\n                }\n            });\n            return has;\n        }\n\n    });\n\n}\n","export default function sliceObject (obj, keys) {\n    let sliced = {};\n    keys.forEach(k => sliced[k] = obj[k]);\n    return sliced;\n}\n","// Texture management\nimport log from '../utils/log';\nimport Utils from '../utils/utils';\nimport subscribeMixin from '../utils/subscribe';\nimport WorkerBroker from '../utils/worker_broker';\n\n// GL texture wrapper object for keeping track of a global set of textures, keyed by a unique user-defined name\nexport default class Texture {\n\n    constructor(gl, name, options = {}) {\n        options = Texture.sliceOptions(options); // exclude any non-texture-specific props\n        this.gl = gl;\n        this.texture = gl.createTexture();\n        if (this.texture) {\n            this.valid = true;\n        }\n        this.bind();\n\n        this.name = name;\n        this.retain_count = 0;\n        this.config_type = null;\n        this.loading = null;    // a Promise object to track the loading state of this texture\n        this.loaded = false;    // successfully loaded as expected\n        this.filtering = options.filtering;\n        this.density = options.density || 1; // native pixel density of texture\n        this.sprites = options.sprites;\n        this.texcoords = {};    // sprite UVs ([0, 1] range)\n        this.sizes = {};        // sprite sizes (pixel size)\n        this.css_sizes = {};    // sprite sizes, adjusted for native texture pixel density\n        this.aspects = {};      // sprite aspect ratios\n\n        // Default to a 1-pixel transparent black texture so we can safely render while we wait for an image to load\n        // See: http://stackoverflow.com/questions/19722247/webgl-wait-for-texture-to-load\n        this.setData(1, 1, new Uint8Array([0, 0, 0, 0]), { filtering: 'nearest' });\n        this.loaded = false; // don't consider loaded when only placeholder data is present\n\n        // Destroy previous texture if present\n        if (Texture.textures[this.name]) {\n            // Preserve previous retain count\n            this.retain_count = Texture.textures[this.name].retain_count;\n            Texture.textures[this.name].retain_count = 0; // allow to be freed\n            Texture.textures[this.name].destroy();\n        }\n\n        // Cache texture instance and definition\n        Texture.textures[this.name] = this;\n        Texture.texture_configs[this.name] = JSON.stringify(Object.assign({ name }, options));\n\n        this.load(options);\n        log('trace', `creating Texture ${this.name}`);\n    }\n\n    // Destroy a single texture instance\n    destroy({ force } = {}) {\n        if (this.retain_count > 0 && !force) {\n            log('error', `Texture '${this.name}': destroying texture with retain count of '${this.retain_count}'`);\n            return;\n        }\n\n        if (!this.valid) {\n            return;\n        }\n        this.gl.deleteTexture(this.texture);\n        this.texture = null;\n        if (Texture.textures[this.name] === this) {\n            delete Texture.textures[this.name];\n            delete Texture.texture_configs[this.name];\n        }\n        this.valid = false;\n        log('trace', `destroying Texture ${this.name}`);\n    }\n\n    retain () {\n        this.retain_count++;\n    }\n\n    release () {\n        if (this.retain_count <= 0) {\n            log('error', `Texture '${this.name}': releasing texture with retain count of '${this.retain_count}'`);\n        }\n\n        this.retain_count--;\n        if (this.retain_count <= 0) {\n            this.destroy();\n        }\n    }\n\n    bind(unit = 0) {\n        if (!this.valid) {\n            return;\n        }\n\n        if (Texture.activeUnit !== unit) {\n            this.gl.activeTexture(this.gl.TEXTURE0 + unit);\n            Texture.activeUnit = unit;\n            Texture.boundTexture = null; // texture must be re-bound when unit changes\n        }\n\n        if (Texture.boundTexture !== this.texture) {\n            this.gl.bindTexture(this.gl.TEXTURE_2D, this.texture);\n            Texture.boundTexture = this.texture;\n        }\n    }\n\n    load(options) {\n        if (!options) {\n            return this.loading || Promise.resolve(this);\n        }\n\n        this.loading = null;\n        if (typeof options.url === 'string') {\n            this.config_type = 'url';\n            this.setUrl(options.url, options);\n        } else if (options.element) {\n            this.config_type = 'element';\n            this.setElement(options.element, options);\n        } else if (options.data && options.width && options.height) {\n            this.config_type = 'data';\n            this.setData(options.width, options.height, options.data, options);\n        }\n\n        this.loading =\n            (this.loading && this.loading.then(() => { this.calculateSprites(); return this; })) ||\n            Promise.resolve(this);\n        return this.loading;\n    }\n\n    // Sets texture from an url\n    setUrl(url, options = {}) {\n        if (!this.valid) {\n            return;\n        }\n\n        this.url = url; // save URL reference (will be overwritten when element is loaded below)\n\n        this.loading = new Promise(resolve => {\n            let image = new Image();\n            image.onload = () => {\n                try {\n                    // For data URL images, first draw the image to a separate canvas element. Workaround for\n                    // obscure bug seen with small (<28px) SVG images encoded as data URLs in Chrome and Safari.\n                    if (this.url.slice(0, 5) === 'data:') {\n                        const canvas = document.createElement('canvas');\n                        const ctx = canvas.getContext('2d');\n                        canvas.width = image.width;\n                        canvas.height = image.height;\n                        ctx.drawImage(image, 0, 0);\n                        this.setElement(canvas, options);\n                    }\n                    else {\n                        this.setElement(image, options);\n                    }\n                }\n                catch (e) {\n                    this.loaded = false;\n                    log('warn', `Texture '${this.name}': failed to load url: '${this.url}'`, e, options);\n                    Texture.trigger('warning', { message: `Failed to load texture from ${this.url}`, error: e, texture: options });\n                }\n\n                this.loaded = true;\n                resolve(this);\n            };\n            image.onerror = e => {\n                // Warn and resolve on error\n                this.loaded = false;\n                log('warn', `Texture '${this.name}': failed to load url: '${this.url}'`, e, options);\n                Texture.trigger('warning', { message: `Failed to load texture from ${this.url}`, error: e, texture: options });\n                resolve(this);\n            };\n\n            // Safari has a bug loading data-URL images with CORS enabled, so it must be disabled in that case\n            // https://bugs.webkit.org/show_bug.cgi?id=123978\n            if (!(Utils.isSafari() && this.url.slice(0, 5) === 'data:')) {\n                image.crossOrigin = 'anonymous';\n            }\n\n            image.src = this.url;\n        });\n        return this.loading;\n    }\n\n    // Sets texture to a raw image buffer\n    setData(width, height, data, options = {}) {\n        this.width = width;\n        this.height = height;\n\n        // Convert regular array to typed array\n        if (Array.isArray(data)) {\n            data = new Uint8Array(data);\n        }\n\n        this.update(data, options);\n        this.setFiltering(options);\n\n        this.loaded = true;\n        this.loading = Promise.resolve(this);\n        return this.loading;\n    }\n\n    // Sets the texture to track a element (canvas/image)\n    setElement(element, options) {\n        let el = element;\n\n        // a string element is interpeted as a CSS selector\n        if (typeof element === 'string') {\n            element = document.querySelector(element);\n        }\n\n        if (element instanceof HTMLCanvasElement ||\n            element instanceof HTMLImageElement ||\n            element instanceof HTMLVideoElement) {\n            this.update(element, options);\n            this.setFiltering(options);\n        }\n        else {\n            this.loaded = false;\n            let msg = `the 'element' parameter (\\`element: ${JSON.stringify(el)}\\`) must be a CSS `;\n            msg += 'selector string, or a <canvas>, <image> or <video> object';\n            log('warn', `Texture '${this.name}': ${msg}`, options);\n            Texture.trigger('warning', { message: `Failed to load texture because ${msg}`, texture: options });\n        }\n\n        this.loaded = true;\n        this.loading = Promise.resolve(this);\n        return this.loading;\n    }\n\n    // Uploads current image or buffer to the GPU (can be used to update animated textures on the fly)\n    update(source, options = {}) {\n        if (!this.valid) {\n            return;\n        }\n\n        this.bind();\n\n        // Image or Canvas element\n        if (source instanceof HTMLCanvasElement || source instanceof HTMLVideoElement ||\n            (source instanceof HTMLImageElement && source.complete)) {\n\n            this.width = source.width;\n            this.height = source.height;\n            this.gl.pixelStorei(this.gl.UNPACK_FLIP_Y_WEBGL, (options.UNPACK_FLIP_Y_WEBGL === false ? false : true));\n            this.gl.pixelStorei(this.gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, options.UNPACK_PREMULTIPLY_ALPHA_WEBGL || false);\n            this.gl.texImage2D(this.gl.TEXTURE_2D, 0, this.gl.RGBA, this.gl.RGBA, this.gl.UNSIGNED_BYTE, source);\n        }\n        // Raw image buffer\n        else {\n            // these pixel store params are deprecated for non-DOM element uploads\n            // (e.g. when creating texture from raw data)\n            // setting them to null avoids a Firefox warning\n            this.gl.pixelStorei(this.gl.UNPACK_FLIP_Y_WEBGL, null);\n            this.gl.pixelStorei(this.gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, null);\n            this.gl.texImage2D(this.gl.TEXTURE_2D, 0, this.gl.RGBA, this.width, this.height, 0, this.gl.RGBA, this.gl.UNSIGNED_BYTE, source);\n        }\n\n        Texture.trigger('update', this);\n    }\n\n    // Determines appropriate filtering mode\n    setFiltering(options = {}) {\n        if (!this.valid) {\n            return;\n        }\n\n        options.filtering = options.filtering || 'linear';\n\n        var gl = this.gl;\n        this.bind();\n\n        // For power-of-2 textures, the following presets are available:\n        // mipmap: linear blend from nearest mip\n        // linear: linear blend from original image (no mips)\n        // nearest: nearest pixel from original image (no mips, 'blocky' look)\n        if (Utils.isPowerOf2(this.width) && Utils.isPowerOf2(this.height)) {\n            this.power_of_2 = true;\n            gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, options.TEXTURE_WRAP_S || (options.repeat && gl.REPEAT) || gl.CLAMP_TO_EDGE);\n            gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, options.TEXTURE_WRAP_T || (options.repeat && gl.REPEAT) || gl.CLAMP_TO_EDGE);\n\n            if (options.filtering === 'mipmap') {\n                this.filtering = 'mipmap';\n                gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_LINEAR); // TODO: use trilinear filtering by defualt instead?\n                gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n                gl.generateMipmap(gl.TEXTURE_2D);\n            }\n            else if (options.filtering === 'linear') {\n                this.filtering = 'linear';\n                gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n                gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n            }\n            else if (options.filtering === 'nearest') {\n                this.filtering = 'nearest';\n                gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);\n                gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);\n            }\n        }\n        else {\n            // WebGL has strict requirements on non-power-of-2 textures:\n            // No mipmaps and must clamp to edge\n            this.power_of_2 = false;\n            gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n            gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n\n            if (options.filtering === 'nearest') {\n                this.filtering = 'nearest';\n                gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);\n                gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);\n            }\n            else { // default to linear for non-power-of-2 textures\n                this.filtering = 'linear';\n                gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n                gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n            }\n        }\n\n        Texture.trigger('update', this);\n    }\n\n    // Pre-calc sprite regions for a texture sprite in UV [0, 1] space\n    calculateSprites() {\n        if (this.sprites) {\n            for (let s in this.sprites) {\n                let sprite = this.sprites[s];\n\n                // Map [0, 0] to [1, 1] coords to the appropriate sprite sub-area of the texture\n                this.texcoords[s] = Texture.getTexcoordsForSprite(\n                    [sprite[0], sprite[1]],\n                    [sprite[2], sprite[3]],\n                    [this.width, this.height]\n                );\n\n                // Pixel size of sprite\n                // Divide by native texture density to get correct CSS pixels\n                this.sizes[s] = [sprite[2], sprite[3]];\n                this.css_sizes[s] = [sprite[2] / this.density, sprite[3] / this.density];\n                this.aspects[s] = sprite[2] / sprite[3];\n            }\n        }\n    }\n\n    // Get the tetxure size in bytes\n    byteSize() {\n        // mipmaps use 33% additional memory\n        return Math.round(this.width * this.height * 4 * (this.filtering == 'mipmap' ? 1.33 : 1));\n    }\n\n}\n\n\n// Static/class methods and state\n\nTexture.create = function (gl, name, options) {\n    return new Texture(gl, name, options);\n};\n\nTexture.retain = function (name) {\n    if (Texture.textures[name]) {\n        Texture.textures[name].retain();\n    }\n};\n\nTexture.release = function (name) {\n    if (Texture.textures[name]) {\n        Texture.textures[name].release();\n    }\n};\n\n// Destroy all texture instances for a given GL context\nTexture.destroy = function (gl) {\n    var textures = Object.keys(Texture.textures);\n    textures.forEach(t => {\n        var texture = Texture.textures[t];\n        if (texture.gl === gl) {\n            texture.destroy({ force: true });\n        }\n    });\n};\n\n// Get sprite pixel size and UVs\nTexture.getSpriteInfo = function (texname, sprite) {\n    let texture = Texture.textures[texname];\n    return texture && {\n        size: texture.sizes[sprite],\n        css_size: texture.css_sizes[sprite],\n        aspect: texture.aspects[sprite],\n        texcoords: texture.texcoords[sprite]\n    };\n};\n\n// Re-scale UVs from [0, 1] range to a smaller area within the image\nTexture.getTexcoordsForSprite = function (area_origin, area_size, tex_size) {\n    var area_origin_y = tex_size[1] - area_origin[1] - area_size[1];\n\n    return [\n        area_origin[0] / tex_size[0],\n        area_origin_y / tex_size[1],\n        (area_size[0] + area_origin[0]) / tex_size[0],\n        (area_size[1] + area_origin_y) / tex_size[1]\n    ];\n};\n\n// Create a set of textures keyed in an object\n// Optionally load each if it has a URL specified\nTexture.createFromObject = function (gl, textures) {\n    let loading = [];\n    if (textures) {\n        for (let texname in textures) {\n            let config = textures[texname];\n\n            if (config.skip_create) {\n                // explicitly skip (re-)creating this texture\n                // used for dynamic canvas textures that we *know* haven't changed\n                // (internal raster tiles, vs. user-supplied canvas where pixels may have changed)\n                continue;\n            }\n\n            // If texture already exists and definition hasn't changed, no need to re-create\n            // Note: to avoid flicker when other textures/scene items change\n            if (!Texture.changed(texname, config)) {\n                continue;\n            }\n\n            let texture = Texture.create(gl, texname, config);\n            loading.push(texture.loading);\n        }\n    }\n    return Promise.all(loading);\n};\n\n// Create a 'default' texture (1x1 pixel) that can be used as a placeholder\n// (for example to prevent GL from complaining about unbound textures)\nTexture.default = '__default';\nTexture.createDefault = function (gl) {\n    return Texture.create(gl, Texture.default);\n};\n\n// Only include texture-specific properties (avoid faulty equality comparisons between\n// textures when caller may include other ancillary props)\nTexture.sliceOptions = function(options) {\n    return {\n        filtering: options.filtering,\n        sprites: options.sprites,\n        url: options.url,\n        element: options.element,\n        data: options.data,\n        width: options.width,\n        height: options.height,\n        density: options.density,\n        repeat: options.repeat,\n        TEXTURE_WRAP_S: options.TEXTURE_WRAP_S,\n        TEXTURE_WRAP_T: options.TEXTURE_WRAP_T,\n        UNPACK_FLIP_Y_WEBGL: options.UNPACK_FLIP_Y_WEBGL,\n        UNPACK_PREMULTIPLY_ALPHA_WEBGL: options.UNPACK_PREMULTIPLY_ALPHA_WEBGL\n    };\n};\n\n// Indicate if a texture definition would be a change from the current cache\nTexture.changed = function (name, config) {\n    let texture = Texture.textures[name];\n    if (texture) { // cached texture\n        // canvas/image-based textures are considered dynamic and always refresh\n        if (texture.config_type === 'element' || config.element != null) {\n            return true;\n        }\n\n        // compare definitions\n        config = Texture.sliceOptions(config); // exclude any non-texture-specific props\n        if (Texture.texture_configs[name] === JSON.stringify(Object.assign({ name }, config))) {\n            return false;\n        }\n    }\n    return true;\n};\n\n// Get metadata for a texture by name\n// Returns via promise, in case texture is still loading\n// Can be called on main thread from worker, to sync texture info to worker\nTexture.getInfo = function (name) {\n    // Get info for all textures by default\n    if (!name) {\n        name = Object.keys(Texture.textures);\n    }\n\n    // Get multiple textures\n    if (Array.isArray(name)) {\n        return Promise.all(name.map(n => Texture.getInfo(n)));\n    }\n\n    // Get single texture\n    var tex = Texture.textures[name];\n    if (tex) {\n        // Wait for this texture to finish loading, or return immediately\n        var loading = tex.loading || Promise.resolve(tex);\n        return loading.then(() => {\n            // Return a subset of texture info\n            // (compatible w/structured cloning, suitable for passing to a worker)\n            return {\n                name: tex.name,\n                width: tex.width,\n                height: tex.height,\n                density: tex.density,\n                css_size: [ tex.width / tex.density, tex.height / tex.density ],\n                aspect: tex.width / tex.height,\n                sprites: tex.sprites,\n                texcoords: tex.texcoords,\n                sizes: tex.sizes,\n                css_sizes: tex.css_sizes,\n                aspects: tex.aspects,\n                filtering: tex.filtering,\n                power_of_2: tex.power_of_2,\n                valid: tex.valid\n            };\n        });\n    }\n    else {\n        // No texture found\n        return Promise.resolve(null);\n    }\n};\n\n// Sync texture info to worker\n// Called from worker, gets info on one or more textures info from main thread via remote call, then stores it\n// locally in worker. 'textures' can be an array of texture names to sync, or if null, all textures are synced.\nTexture.syncTexturesToWorker = function (names) {\n    return WorkerBroker.postMessage('Texture.getInfo', names).\n        then(textures => {\n            if (textures) {\n                textures\n                    .filter(x => x) // remove nulls\n                    .forEach(t => Texture.textures[t.name] = t);\n            }\n            return Texture.textures;\n        });\n};\n\n// Report max texture size for a GL context\nTexture.getMaxTextureSize = function (gl) {\n    return gl.getParameter(gl.MAX_TEXTURE_SIZE);\n};\n\n// Global set of textures, by name\nTexture.textures = {};\nTexture.texture_configs = {};\nTexture.boundTexture = null;\nTexture.activeUnit = null;\n\nWorkerBroker.addTarget('Texture', Texture);\nsubscribeMixin(Texture);\n","var GLSL = {};\nexport default GLSL;\n\n/**\n    Parse uniforms from a JS object, infers types and returns an array of objects with the\n    necessary information to set uniform values on a GL program. Each object in the returned\n    array has the form:\n    { type, method, name, value }\n\n    type: the GL uniform type, such as 'vec3', 'float', etc.\n    method: the GL uniform setter method to use, such as '1f', '3fv', etc.\n    name: the fully qualified name of the GL uniform location, e.g. 'array[0].field', etc.\n    value: the value to be passed to the GL uniform setter for that type, e.g. [1, 2, 3] for a vec3\n\n    Textures have special behavior: uniforms with string values are treated as textures, and\n    the string is used as a unique texture 'key' to be interpreted by the caller (which is responsible\n    for actually setting the uniforms). For example, this could be used as a key into a dictionary of\n    known texture names, or it could simply be used as a URL to dynamically load the texture from.\n*/\nGLSL.parseUniforms = function (uniforms = {}) {\n    var parsed = [];\n\n    for (const [name, uniform] of Object.entries(uniforms)) {\n        // Single float\n        if (typeof uniform === 'number') {\n            parsed.push({\n                type: 'float',\n                method: '1f',\n                name,\n                value: uniform,\n                path: [name]\n            });\n        }\n        // Array: vector, array of floats, array of textures\n        else if (Array.isArray(uniform)) {\n            // Numeric values\n            if (typeof uniform[0] === 'number') {\n                // float vectors (vec2, vec3, vec4)\n                if (uniform.length >= 2 && uniform.length <= 4) {\n                    parsed.push({\n                        type: 'vec' + uniform.length,\n                        method: uniform.length + 'fv',\n                        name,\n                        value: uniform,\n                        path: [name]\n                    });\n                }\n                // float array\n                else if (uniform.length > 4) {\n                    parsed.push({\n                        type: 'float[]',\n                        method: '1fv',\n                        name: name + '[0]',\n                        value: uniform,\n                        path: [name]\n                    });\n                }\n                // TODO: assume matrix for (typeof == Float32Array && length == 16)?\n            }\n            // Array of textures\n            else if (typeof uniform[0] === 'string') {\n                for (let u = 0; u < uniform.length; u++) {\n                    parsed.push({\n                        type: 'sampler2D',\n                        method: '1i',\n                        name: name + '[' + u + ']',\n                        value: uniform[u],\n                        path: [name, u]\n                    });\n                }\n            }\n            // Array of arrays - but only arrays of vectors are allowed in this case\n            else if (Array.isArray(uniform[0]) && typeof uniform[0][0] === 'number') {\n                // float vectors (vec2, vec3, vec4)\n                if (uniform[0].length >= 2 && uniform[0].length <= 4) {\n                    // Set each vector in the array\n                    for (let u = 0; u < uniform.length; u++) {\n                        parsed.push({\n                            type: 'vec' + uniform[0].length,\n                            method: uniform[0].length + 'fv',\n                            name: name + '[' + u + ']',\n                            value: uniform[u],\n                            path: [name, u]\n                        });\n                    }\n                }\n            }\n            // TODO: else warning\n        }\n        // Boolean\n        else if (typeof uniform === 'boolean') {\n            parsed.push({\n                type: 'bool',\n                method: '1i',\n                name,\n                value: uniform,\n                path: [name]\n            });\n        }\n        // Texture\n        else if (typeof uniform === 'string') {\n            parsed.push({\n                type: 'sampler2D',\n                method: '1i',\n                name,\n                value: uniform,\n                path: [name]\n            });\n        }\n    }\n\n    return parsed;\n};\n\n/**\n    Generate a GLSL variable definition from a JS object\n*/\nGLSL.defineVariable = function (name, value) {\n    var type, array;\n\n    // Single float\n    if (typeof value === 'number') {\n        type = 'float';\n    }\n    // Multiple floats - vector or array\n    else if (Array.isArray(value)) {\n        // Numeric values\n        if (typeof value[0] === 'number') {\n            // float vectors (vec2, vec3, vec4)\n            if (value.length >= 2 && value.length <= 4) {\n                type = 'vec' + value.length;\n            }\n            // float array\n            else { //if (value.length > 4) {\n                type = 'float';\n                array = value.length;\n            }\n            // TODO: assume matrix for (typeof == Float32Array && length == 16)?\n        }\n        // Array of textures\n        else if (typeof value[0] === 'string') {\n            type = 'sampler2D';\n            array = value.length;\n        }\n        // Array of arrays - but only arrays of vectors are allowed in this case\n        else if (Array.isArray(value[0]) && typeof value[0][0] === 'number') {\n            // float vectors (vec2, vec3, vec4)\n            if (value[0].length >= 2 && value[0].length <= 4) {\n                type = 'vec' + value[0].length;\n                array = value.length;\n            }\n        }\n    }\n    // Boolean\n    else if (typeof value === 'boolean') {\n        type = 'bool';\n    }\n    // Texture\n    else if (typeof value === 'string') {\n        type = 'sampler2D';\n    }\n    else {\n        return; // no valid type found\n    }\n\n    // Construct variable definition\n    var variable = '';\n    variable += `${type} ${name}`;\n    if (array) {\n        variable += `[${array}]`;\n    }\n    variable += ';\\n';\n\n    return variable;\n};\n\n/**\n    Generate a GLSL uniform definition from a JS object\n*/\nGLSL.defineUniform = function (name, value) {\n    var def = GLSL.defineVariable(name, value);\n    if (!def) {\n        return;\n    }\n    return 'uniform ' + def;\n};\n\n/**\n    Expand a single value or 2-element array into a 3-element array, with the last ( z )\n    coordinate defaulting to 1 (with option to specify). Also runs parseFloat to try to maintain\n    data integrity. Returns null if input couldn't be parsed.\n*/\nGLSL.expandVec3 = function (v, z = 1) {\n    let x;\n    if (Array.isArray(v)) {\n        if (v.length === 2) {\n            x = [...v, z].map(parseFloat);\n        }\n        else {\n            return v;\n        }\n    }\n    else {\n        x = [v, v, v].map(parseFloat);\n    }\n\n    if (x && x.every(n => typeof n === 'number' && !isNaN(n))) {\n        return x;\n    }\n};\n\n/**\n    Expand a single value or 3-element array into a 4-element array, with the last (e.g. w or a)\n    coordinate defaulting to 1 (with option to specify). Also runs parseFloat to try to maintain\n    data integrity. Returns null if input couldn't be parsed.\n*/\nGLSL.expandVec4 = function (v, w = 1) {\n    let x;\n    if (Array.isArray(v)) {\n        if (v.length === 3) {\n            x = [...v, w].map(parseFloat);\n        }\n        else {\n            return v;\n        }\n    }\n    else {\n        x = [v, v, v, w].map(parseFloat);\n    }\n\n    if (x && x.every(n => typeof n === 'number' && !isNaN(n))) {\n        return x;\n    }\n};\n\n\n","// WebGL extension wrapper\n// Stores extensions by name and GL context\n\n// list of extension arrays, for each entry, 1st element GL context, 2nd map of extensions by name\nlet extensions = [];\n\nexport default function getExtension (gl, name) {\n    let exts = extensions.filter(e => e[0] === gl)[0];\n    exts = exts && exts[1];\n\n    if (!exts) {\n        extensions.push([gl, {}]);\n        exts = extensions[extensions.length-1][1];\n    }\n\n    if (!exts[name]) {\n        exts[name] = gl.getExtension(name);\n    }\n    return exts[name];\n}\n","// http://werxltd.com/wp/2010/05/13/javascript-implementation-of-javas-string-hashcode-method/\nexport default function hashString (string) {\n    var hash = 0, i, chr, len;\n\n    if (string.length === 0) {\n        return hash;\n    }\n\n    for (i = 0, len = string.length; i < len; i++) {\n        chr   = string.charCodeAt(i);\n        hash  = ((hash << 5) - hash) + chr;\n        hash |= 0; // Convert to 32bit integer\n    }\n    return hash;\n}\n","module.exports = parseErrors\n\nfunction parseErrors(log) {\n  log = String(log)\n\n  var logs = []\n  var result\n\n  while (result = log.match(/ERROR\\:([^\\n]+)/)) {\n    log = log.slice(result.index + 1)\n\n    var line = result[1].trim()\n    var seps = line.split(':')\n    var emsg = seps.slice(2).join(':').trim()\n    var file = parseInt(seps[0], 10)\n    var line = parseInt(seps[1], 10)\n\n    logs.push({\n        message: emsg\n      , file: file\n      , line: line\n    })\n  }\n\n  return logs\n}\n","// GL program wrapper to cache uniform locations/values, do compile-time pre-processing\n// (injecting #defines and #pragma blocks into shaders), etc.\n\nimport log from '../utils/log';\nimport GLSL from './glsl';\nimport Texture from './texture';\nimport getExtension from './extensions';\nimport hashString from '../utils/hash';\n\nimport parseShaderErrors from 'gl-shader-errors';\n\n// Regex patterns\nconst re_pragma = /^\\s*#pragma.*$/gm;   // for removing unused pragmas after shader block injection\nconst re_continue_line = /\\\\\\s*\\n/mg;   // for removing backslash line continuations\n\nexport default class ShaderProgram {\n\n    constructor(gl, vertex_source, fragment_source, options) {\n        options = options || {};\n\n        this.gl = gl;\n        this.program = null;\n        this.compiled = false;\n        this.compiling = false;\n        this.error = null;\n\n        // key/values inserted as #defines into shaders at compile-time\n        this.defines = Object.assign({}, options.defines||{});\n\n        // key/values for blocks that can be injected into shaders at compile-time\n        this.blocks = Object.assign({}, options.blocks||{});\n        this.block_scopes = Object.assign({}, options.block_scopes||{});\n\n        // list of extensions to activate\n        this.extensions = options.extensions || [];\n\n        // JS-object uniforms that are expected by this program, their types are inferred and definitions\n        // for each will be injected.\n        this.dependent_uniforms = options.uniforms;\n\n        this.uniforms = {}; // program locations of uniforms, lazily added as each uniform is set\n        this.attribs = {}; // program locations of vertex attributes, lazily added as each attribute is accessed\n\n        this.vertex_source = vertex_source;\n        this.fragment_source = fragment_source;\n\n        this.id = ShaderProgram.id++;\n        this.name = options.name; // can provide a program name (useful for debugging)\n    }\n\n    destroy() {\n        this.gl.useProgram(null);\n        this.gl.deleteProgram(this.program);\n        this.program = null;\n        this.uniforms = {};\n        this.attribs = {};\n        this.compiled = false;\n    }\n\n    // Use program wrapper with simple state cache\n    use() {\n        if (!this.compiled) {\n            return;\n        }\n\n        if (ShaderProgram.current !== this) {\n            this.gl.useProgram(this.program);\n        }\n        ShaderProgram.current = this;\n    }\n\n    compile() {\n        if (this.compiling) {\n            throw(new Error(`ShaderProgram.compile(): skipping for ${this.id} (${this.name}) because already compiling`));\n        }\n        this.compiling = true;\n        this.compiled = false;\n        this.error = null;\n\n        // Copy sources from pre-modified template\n        this.computed_vertex_source = this.vertex_source;\n        this.computed_fragment_source = this.fragment_source;\n\n        // Check for extension availability\n        let extensions = this.checkExtensions();\n\n        // Make list of defines to be injected later\n        var defines = this.buildDefineList();\n\n        // Inject user-defined blocks (arbitrary code points matching named #pragmas)\n        // Replace according to this pattern:\n        // #pragma tangram: [key]\n        // e.g. #pragma tangram: global\n\n        // Gather all block code snippets\n        var blocks = this.buildShaderBlockList();\n        var regexp;\n\n        for (var key in blocks) {\n            var block = blocks[key];\n            if (!block || (Array.isArray(block) && block.length === 0)) {\n                continue;\n            }\n\n            // First find code replace points in shaders\n            regexp = new RegExp('^\\\\s*#pragma\\\\s+tangram:\\\\s+' + key + '\\\\s*$', 'm');\n            var inject_vertex = this.computed_vertex_source.match(regexp);\n            var inject_fragment = this.computed_fragment_source.match(regexp);\n\n            // Avoid network request if nothing to replace\n            if (inject_vertex == null && inject_fragment == null) {\n                continue;\n            }\n\n            // Combine all blocks into one string\n            var source = '';\n            block.forEach(val => {\n                // Mark start and end of each block with metadata (which can be extracted from\n                // final source for error handling, debugging, etc.)\n                let mark = `${val.scope}, ${val.key}, ${val.num}`;\n                source += `\\n// tangram-block-start: ${mark}\\n`;\n                source += val.source;\n                source += `\\n// tangram-block-end: ${mark}\\n`;\n            });\n\n            // Inject\n            if (inject_vertex != null) {\n                this.computed_vertex_source = this.computed_vertex_source.replace(regexp, source);\n            }\n            if (inject_fragment != null) {\n                this.computed_fragment_source = this.computed_fragment_source.replace(regexp, source);\n            }\n\n            // Add a #define for this injection point\n            defines['TANGRAM_BLOCK_' + key.replace(/[\\s-]+/g, '_').toUpperCase()] = true;\n        }\n\n        // Clean-up any #pragmas that weren't replaced (to prevent compiler warnings)\n        this.computed_vertex_source = this.computed_vertex_source.replace(re_pragma, '');\n        this.computed_fragment_source = this.computed_fragment_source.replace(re_pragma, '');\n\n        // Inject uniform definitions\n        this.ensureUniforms(this.dependent_uniforms);\n\n        // Build & inject extensions & defines\n        // This is done *after* code injection so that we can add defines for which code points were injected\n        let precision = '';\n        let high = this.gl.getShaderPrecisionFormat(this.gl.FRAGMENT_SHADER, this.gl.HIGH_FLOAT);\n        if (high && high.precision > 0) {\n            precision = 'precision highp float;\\n';\n        }\n        else {\n            precision = 'precision mediump float;\\n';\n        }\n\n        defines['TANGRAM_VERTEX_SHADER'] = true;\n        defines['TANGRAM_FRAGMENT_SHADER'] = false;\n        this.computed_vertex_source =\n            precision +\n            ShaderProgram.buildDefineString(defines) +\n            this.computed_vertex_source;\n\n        // Precision qualifier only valid in fragment shader\n        // NB: '#extension' statements added to fragment shader only, as IE11 throws error when they appear in\n        // vertex shader (even when guarded by #ifdef), and no WebGL extensions require '#extension' in vertex shaders\n        defines['TANGRAM_VERTEX_SHADER'] = false;\n        defines['TANGRAM_FRAGMENT_SHADER'] = true;\n        this.computed_fragment_source =\n            ShaderProgram.buildExtensionString(extensions) +\n            precision +\n            ShaderProgram.buildDefineString(defines) +\n            this.computed_fragment_source;\n\n        // Replace multi-line backslashes\n        this.computed_vertex_source = this.computed_vertex_source.replace(re_continue_line, '');\n        this.computed_fragment_source = this.computed_fragment_source.replace(re_continue_line, '');\n\n        // Compile & set uniforms to cached values\n        try {\n            this.program = ShaderProgram.updateProgram(this.gl, this.program, this.computed_vertex_source, this.computed_fragment_source);\n            this.compiled = true;\n            this.compiling = false;\n        }\n        catch(error) {\n            this.program = null;\n            this.compiled = false;\n            this.compiling = false;\n            this.error = error;\n\n            // shader error info\n            this.error.vertex_shader_source = this.computed_vertex_source;\n            this.error.fragment_shader_source = this.computed_fragment_source;\n\n            if (error.type === 'vertex' || error.type === 'fragment') {\n                this.shader_errors = error.errors;\n                this.shader_errors.forEach(e => {\n                    e.type = error.type;\n                    e.block = this.block(error.type, e.line);\n                    e.line = this.block(error.type, e.line);\n                });\n                this.error.shader_errors = this.shader_errors;\n            }\n            throw error;\n        }\n\n        // Discard shader sources after successful compilation\n        this.computed_vertex_source = null;\n        this.computed_fragment_source = null;\n\n        this.use();\n        this.refreshUniforms();\n        this.refreshAttributes();\n    }\n\n    // Make list of defines (global, then program-specific)\n    buildDefineList() {\n        var d, defines = {};\n        for (d in ShaderProgram.defines) {\n            defines[d] = ShaderProgram.defines[d];\n        }\n        for (d in this.defines) {\n            defines[d] = this.defines[d];\n        }\n        return defines;\n    }\n\n    // Make list of shader blocks (global, then program-specific)\n    buildShaderBlockList() {\n        let key, blocks = {};\n\n        // Global blocks\n        for (key in ShaderProgram.blocks) {\n            blocks[key] = [];\n\n            if (Array.isArray(ShaderProgram.blocks[key])) {\n                blocks[key].push(\n                    ...ShaderProgram.blocks[key].map((source, num) => {\n                        return { key, source, num, scope: 'ShaderProgram' };\n                    })\n                );\n            }\n            else {\n                blocks[key] = [{ key, source: ShaderProgram.blocks[key], num: 0, scope: 'ShaderProgram' }];\n            }\n        }\n\n        // Program-specific blocks\n        for (key in this.blocks) {\n            blocks[key] = blocks[key] || [];\n\n            if (Array.isArray(this.blocks[key])) {\n                let scopes = (this.block_scopes && this.block_scopes[key]) || [];\n                let cur_scope = null, num = 0;\n\n                for (let b=0; b < this.blocks[key].length; b++) {\n                    // Count blocks relative to current scope\n                    if (scopes[b] !== cur_scope) {\n                        cur_scope = scopes[b];\n                        num = 0;\n                    }\n\n                    blocks[key].push({\n                        key,\n                        source: this.blocks[key][b],\n                        num,\n                        scope: cur_scope || this.name\n                    });\n\n                    num++;\n                }\n            }\n            else {\n                // TODO: address discrepancy in array vs. single-value blocks\n                // styles assume array when tracking block scopes\n                blocks[key].push({ key, source: this.blocks[key], num: 0, scope: this.name });\n            }\n        }\n        return blocks;\n    }\n\n    // Inject uniform definitions\n    ensureUniforms(uniforms) {\n        if (!uniforms) {\n            return;\n        }\n\n        // Get GLSL definitions\n        const inject = Object.entries(uniforms).\n            map(([name, uniform]) => GLSL.defineUniform(name, uniform)).\n            filter(x => x);\n\n        // Inject uniforms\n        // NOTE: these are injected at the very top of the shaders, even before any #defines or #pragmas are added\n        // this could cause some issues with certain #pragmas, or other functions that might expect #defines\n        this.computed_vertex_source = inject.join('\\n') + this.computed_vertex_source;\n        this.computed_fragment_source = inject.join('\\n') + this.computed_fragment_source;\n    }\n\n    // Set uniforms from a JS object, with inferred types\n    setUniforms(uniforms, reset_texture_unit = true) {\n        if (!this.compiled) {\n            return;\n        }\n\n        // TODO: only update uniforms when changed\n\n        // Texture units must be tracked and incremented each time a texture sampler uniform is set.\n        // By default, the texture unit is reset to 0 each time setUniforms is called, but they can\n        // also be preserved, for example in cases where multiple calls to setUniforms are expected\n        // (e.g. program-specific uniforms followed by mesh-specific ones).\n        if (reset_texture_unit) {\n            this.texture_unit = 0;\n        }\n\n        // Parse uniform types and values from the JS object\n        GLSL.parseUniforms(uniforms)\n            .forEach(({ name, type, value, method }) => {\n                if (type === 'sampler2D') {\n                    // For textures, we need to track texture units, so we have a special setter\n                    this.setTextureUniform(name, value);\n                }\n                else {\n                    this.uniform(method, name, value);\n                }\n            });\n    }\n\n    // Cache some or all uniform values so they can be restored\n    saveUniforms(subset) {\n        let uniforms = subset || this.uniforms;\n        for (let u in uniforms) {\n            let uniform = this.uniforms[u];\n            if (uniform) {\n                uniform.saved_value = uniform.value;\n            }\n        }\n        this.saved_texture_unit = this.texture_unit || 0;\n    }\n\n    // Restore some or all uniforms to saved values\n    restoreUniforms(subset) {\n        let uniforms = subset || this.uniforms;\n        for (let u in uniforms) {\n            let uniform = this.uniforms[u];\n            if (uniform && uniform.saved_value) {\n                uniform.value = uniform.saved_value;\n                this.updateUniform(uniform);\n            }\n        }\n        this.texture_unit = this.saved_texture_unit || 0;\n    }\n\n    // Set a texture uniform, finds texture by name or creates a new one\n    setTextureUniform(uniform_name, texture_name) {\n        var texture = Texture.textures[texture_name];\n        if (texture == null) {\n            log('warn', `Cannot find texture '${texture_name}'`);\n            return;\n        }\n\n        texture.bind(this.texture_unit);\n        this.uniform('1i', uniform_name, this.texture_unit);\n        this.texture_unit++; // TODO: track max texture units and log/throw errors\n    }\n\n    // ex: program.uniform('3fv', 'position', [x, y, z]);\n    // TODO: only update uniforms when changed\n    uniform(method, name, value) { // 'value' is a method-appropriate arguments list\n        if (!this.compiled) {\n            return;\n        }\n\n        this.uniforms[name] = this.uniforms[name] || {};\n        let uniform = this.uniforms[name];\n        uniform.name = name;\n        if (uniform.location === undefined) {\n            uniform.location = this.gl.getUniformLocation(this.program, name);\n        }\n        uniform.method = method;\n        uniform.value = value;\n        this.updateUniform(uniform);\n    }\n\n    // Set a single uniform\n    updateUniform(uniform) {\n        if (!this.compiled) {\n            return;\n        }\n\n        if (!uniform || uniform.location == null) {\n            return;\n        }\n\n        this.use();\n        this.commitUniform(uniform);\n    }\n\n    // Commits the uniform to the GPU\n    commitUniform(uniform){\n        let location = uniform.location;\n        let value = uniform.value;\n\n        switch (uniform.method) {\n        case '1i':\n            this.gl.uniform1i(location, value);\n            break;\n        case '1f':\n            this.gl.uniform1f(location, value);\n            break;\n        case '2f':\n            this.gl.uniform2f(location, value[0], value[1]);\n            break;\n        case '3f':\n            this.gl.uniform3f(location, value[0], value[1], value[2]);\n            break;\n        case '4f':\n            this.gl.uniform4f(location, value[0], value[1], value[2], value[3]);\n            break;\n        case '1iv':\n            this.gl.uniform1iv(location, value);\n            break;\n        case '3iv':\n            this.gl.uniform3iv(location, value);\n            break;\n        case '1fv':\n            this.gl.uniform1fv(location, value);\n            break;\n        case '2fv':\n            this.gl.uniform2fv(location, value);\n            break;\n        case '3fv':\n            this.gl.uniform3fv(location, value);\n            break;\n        case '4fv':\n            this.gl.uniform4fv(location, value);\n            break;\n        case 'Matrix3fv':\n            this.gl.uniformMatrix3fv(location, false, value);\n            break;\n        case 'Matrix4fv':\n            this.gl.uniformMatrix4fv(location, false, value);\n            break;\n        }\n    }\n\n    // Refresh uniform locations and set to last cached values\n    refreshUniforms() {\n        if (!this.compiled) {\n            return;\n        }\n\n        for (var u in this.uniforms) {\n            let uniform = this.uniforms[u];\n            uniform.location = this.gl.getUniformLocation(this.program, u);\n            this.updateUniform(uniform);\n        }\n    }\n\n    refreshAttributes() {\n        // var len = this.gl.getProgramParameter(this.program, this.gl.ACTIVE_ATTRIBUTES);\n        // for (var i=0; i < len; i++) {\n        //     var a = this.gl.getActiveAttrib(this.program, i);\n        // }\n        this.attribs = {};\n    }\n\n    // Get the location of a vertex attribute\n    attribute(name) {\n        if (!this.compiled) {\n            return;\n        }\n\n        var attrib = (this.attribs[name] = this.attribs[name] || {});\n        if (attrib.location != null) {\n            return attrib;\n        }\n\n        attrib.name = name;\n        attrib.location = this.gl.getAttribLocation(this.program, name);\n\n        // var info = this.gl.getActiveAttrib(this.program, attrib.location);\n        // attrib.type = info.type;\n        // attrib.size = info.size;\n\n        return attrib;\n    }\n\n    // Get shader source as string\n    source(type) {\n        if (type === 'vertex') {\n            return this.computed_vertex_source;\n        }\n        else if (type === 'fragment') {\n            return this.computed_fragment_source;\n        }\n    }\n\n    // Get shader source as array of line strings\n    lines(type) {\n        let source = this.source(type);\n        if (source) {\n            return source.split('\\n');\n        }\n        return [];\n    }\n\n    // Get a specific line from shader source\n    line(type, num) {\n        let source = this.lines(type);\n        if (source) {\n            return source[num];\n        }\n    }\n\n    // Get info on which shader block (if any) a particular line number in a shader is in\n    // Returns an object with the following info if a block is found: { name, line, source }\n    //  scope: where the shader block originated, either a style name, or global such as ShaderProgram\n    //  name: shader block name (e.g. 'color', 'position', 'global')\n    //  num: the block number *within* local scope (e.g. if a style has multiple 'color' blocks)\n    //  line: line number *within* the shader block (not the whole shader program), useful for error highlighting\n    //  source: the code for the line\n    // NOTE: this does a bruteforce loop over the shader source and looks for shader block start/end markers\n    // We could track line ranges for shader blocks as they are inserted, but as this code is only used for\n    // error handling on compilation failure, it was simpler to keep it separate than to burden the core\n    // compilation path.\n    block(type, num) {\n        let lines = this.lines(type);\n        let block;\n        for (let i=0; i < num && i < lines.length; i++) {\n            let line = lines[i];\n            let match = line.match(/\\/\\/ tangram-block-start: ([A-Za-z0-9_-]+), ([A-Za-z0-9_-]+), (\\d+)/);\n            if (match && match.length > 1) {\n                // mark current block\n                block = {\n                    scope: match[1],\n                    name: match[2],\n                    num: match[3]\n                };\n            }\n            else {\n                match = line.match(/\\/\\/ tangram-block-end: ([A-Za-z0-9_-]+), ([A-Za-z0-9_-]+), (\\d+)/);\n                if (match && match.length > 1) {\n                    block = null; // clear current block\n                }\n            }\n\n            // update line # and content\n            if (block) {\n                // init to -1 so that line 0 is first actual line of block code, after comment marker\n                block.line = (block.line == null) ? -1 : block.line + 1;\n                block.source = line;\n            }\n        }\n        return block;\n    }\n\n    // Returns list of available extensions from those requested\n    // Sets internal #defines indicating availability of each requested extension\n    checkExtensions() {\n        let exts = [];\n        this.extensions.forEach(name => {\n            let ext = getExtension(this.gl, name);\n            let def = `TANGRAM_EXTENSION_${name}`;\n\n            this.defines[def] = (ext != null);\n\n            if (ext) {\n                exts.push(name);\n            }\n            else {\n                log('debug', `Could not enable extension '${name}'`);\n            }\n        });\n        return exts;\n    }\n\n}\n\n\n// Static methods and state\nShaderProgram.id = 0;                   // assign each program a unique id\nShaderProgram.current = null;           // currently bound program\n\n// Global config applied to all programs (duplicate properties for a specific program will take precedence)\nShaderProgram.defines = {};\nShaderProgram.blocks = {};\n\n// Reset program and shader caches\nShaderProgram.reset = function () {\n    ShaderProgram.programs_by_source = {};  // GL program objects by exact vertex + fragment shader source\n    ShaderProgram.shaders_by_source = {};   // GL shader objects by exact source\n};\nShaderProgram.reset();\n\n// Turn an object of key/value pairs into single string of #define statements\nShaderProgram.buildDefineString = function (defines) {\n    var define_str = '';\n    for (var d in defines) {\n        if (defines[d] == null || defines[d] === false) {\n            continue;\n        }\n        else if (typeof defines[d] === 'boolean' && defines[d] === true) { // booleans are simple defines with no value\n            define_str += '#define ' + d + '\\n';\n        }\n        else if (typeof defines[d] === 'number' && Math.floor(defines[d]) === defines[d]) { // int to float conversion to satisfy GLSL floats\n            define_str += '#define ' + d + ' ' + defines[d].toFixed(1) + '\\n';\n        }\n        else { // any other float or string value\n            define_str += '#define ' + d + ' ' + defines[d] + '\\n';\n        }\n    }\n    return define_str;\n};\n\n// Turn a list of extension names into single string of #extension statements\nShaderProgram.buildExtensionString = function (extensions) {\n    extensions = extensions || [];\n    let str = '';\n    extensions.forEach(ext => {\n        str += `#ifdef GL_${ext}\\n#extension GL_${ext} : enable\\n#endif\\n`;\n    });\n    return str;\n};\n\nShaderProgram.addBlock = function (key, ...blocks) {\n    ShaderProgram.blocks[key] = ShaderProgram.blocks[key] || [];\n    ShaderProgram.blocks[key].push(...blocks);\n};\n\n// Remove all global shader blocks for a given key\nShaderProgram.removeBlock = function (key) {\n    ShaderProgram.blocks[key] = [];\n};\n\nShaderProgram.replaceBlock = function (key, ...blocks) {\n    ShaderProgram.removeBlock(key);\n    ShaderProgram.addBlock(key, ...blocks);\n};\n\n// Compile & link a WebGL program from provided vertex and fragment shader sources\n// update a program if one is passed in. Create one if not. Alert and don't update anything if the shaders don't compile.\nShaderProgram.updateProgram = function (gl, program, vertex_shader_source, fragment_shader_source) {\n    // Program with this exact vertex and fragment shader sources already cached?\n    let key = hashString(gl._tangram_id + '::' + vertex_shader_source + '::' + fragment_shader_source);\n    if (ShaderProgram.programs_by_source[key]) {\n        log('trace', 'Reusing identical source GL program object');\n        return ShaderProgram.programs_by_source[key];\n    }\n\n    var vertex_shader = ShaderProgram.createShader(gl, vertex_shader_source, gl.VERTEX_SHADER);\n    var fragment_shader = ShaderProgram.createShader(gl, fragment_shader_source, gl.FRAGMENT_SHADER);\n\n    gl.useProgram(null);\n    if (program != null) {\n        var old_shaders = gl.getAttachedShaders(program);\n        for(var i = 0; i < old_shaders.length; i++) {\n            gl.detachShader(program, old_shaders[i]);\n        }\n    } else {\n        program = gl.createProgram();\n    }\n\n    if (vertex_shader == null || fragment_shader == null) {\n        return program;\n    }\n\n    gl.attachShader(program, vertex_shader);\n    gl.attachShader(program, fragment_shader);\n\n    // Require position to be at attribute location 0\n    // Attribute 0 should never be disabled (per GL best practices). All of our shader programs have an `a_position`\n    // attribute, and it's customary for the vertex position to be the first attribute, so we enforce that here.\n    // This can avoid unexpected/undefined interaction between static and dynamic attributes in Safari, and\n    // possible warnings/errors in other browsers.\n    // See https://stackoverflow.com/questions/20305231/webgl-warning-attribute-0-is-disabled-this-has-significant-performance-penalt/20923946\n    gl.bindAttribLocation(program, 0, 'a_position');\n\n    gl.linkProgram(program);\n\n    // TODO: reference count and delete shader objects when no programs reference them\n\n    if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {\n        let message = new Error(\n            `WebGL program error:\n            VALIDATE_STATUS: ${gl.getProgramParameter(program, gl.VALIDATE_STATUS)}\n            ERROR: ${gl.getError()}\n            --- Vertex Shader ---\n            ${vertex_shader_source}\n            --- Fragment Shader ---\n            ${fragment_shader_source}`);\n\n        throw Object.assign(new Error(message), { type: 'program' });\n    }\n\n    ShaderProgram.programs_by_source[key] = program; // cache by exact source\n    return program;\n};\n\n// Compile a vertex or fragment shader from provided source\nShaderProgram.createShader = function (gl, source, stype) {\n    // Program with identical vertex and fragment shader sources already cached?\n    let key = hashString(gl._tangram_id + '::' + source);\n    if (ShaderProgram.shaders_by_source[key]) {\n        log('trace', 'Reusing identical source GL shader object');\n        return ShaderProgram.shaders_by_source[key];\n    }\n\n    let shader = gl.createShader(stype);\n\n    gl.shaderSource(shader, source);\n    gl.compileShader(shader);\n\n    if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\n        let type = (stype === gl.VERTEX_SHADER ? 'vertex' : 'fragment');\n        let message = gl.getShaderInfoLog(shader);\n        let errors = parseShaderErrors(message);\n        throw Object.assign(new Error(message), { type, errors });\n    }\n\n    ShaderProgram.shaders_by_source[key] = shader; // cache by exact source\n    return shader;\n};\n","// Creates a Vertex Array Object if the extension is available, or falls back on standard attribute calls\n\nimport getExtension from './extensions';\nimport log from '../utils/log';\n\nexport default {\n\n    disabled: false, // set to true to disable VAOs even if extension is available\n    bound_vao: [],   // currently bound VAO, by GL context\n\n    init (gl) {\n        let ext;\n        if (this.disabled !== true) {\n            ext = getExtension(gl, 'OES_vertex_array_object');\n        }\n\n        if (ext != null) {\n            log('info', 'Vertex Array Object extension available');\n        }\n        else if (this.disabled !== true) {\n            log('warn', 'Vertex Array Object extension NOT available');\n        }\n        else {\n            log('warn', 'Vertex Array Object extension force disabled');\n        }\n    },\n\n    getExtension(gl, ext_name) {\n        if (this.disabled !== true) {\n            return getExtension(gl, ext_name);\n        }\n    },\n\n    create (gl, setup, teardown) {\n        let vao = {};\n        vao.setup = setup;\n        vao.teardown = teardown;\n\n        let ext = this.getExtension(gl, 'OES_vertex_array_object');\n        if (ext != null) {\n            vao._vao = ext.createVertexArrayOES();\n            ext.bindVertexArrayOES(vao._vao);\n        }\n\n        vao.setup();\n\n        return vao;\n    },\n\n    getCurrentBinding (gl) {\n        let bound = this.bound_vao.filter(e => e[0] === gl)[0];\n        return bound && bound[1];\n    },\n\n    setCurrentBinding (gl, vao) {\n        let bound_vao = this.bound_vao;\n        let binding = bound_vao.filter(e => e[0] === gl)[0];\n        if (binding == null) {\n            bound_vao.push([gl, vao]);\n        }\n        else {\n            binding[1] = vao;\n        }\n    },\n\n    bind (gl, vao) {\n        let ext = this.getExtension(gl, 'OES_vertex_array_object');\n        if (vao != null) {\n            if (ext != null && vao._vao != null) {\n                ext.bindVertexArrayOES(vao._vao);\n                this.setCurrentBinding(gl, vao);\n            }\n            else {\n                vao.setup();\n            }\n        }\n        else {\n            let bound_vao = this.getCurrentBinding(gl);\n            if (ext != null) {\n                ext.bindVertexArrayOES(null);\n            }\n            else if (bound_vao != null && typeof bound_vao.teardown === 'function') {\n                bound_vao.teardown();\n            }\n            this.setCurrentBinding(gl, null);\n        }\n    },\n\n    destroy (gl, vao) {\n        let ext = this.getExtension(gl, 'OES_vertex_array_object');\n        if (ext != null && vao != null && vao._vao != null) {\n            ext.deleteVertexArrayOES(vao._vao);\n            vao._vao = null;\n        }\n        // destroy is a no-op if VAO extension isn't available\n    }\n\n};\n","// Deep/recursive merge of one or more source objects into a destination object\nexport default function mergeObjects (dest, ...sources) {\n    for (let s=0; s < sources.length; s++) {\n        let source = sources[s];\n        if (!source) {\n            continue;\n        }\n        for (let key in source) {\n            let value = source[key];\n            // Recursively merge the source into the destination if it is a a non-null key/value object\n            // (e.g. don't merge arrays, those are treated as scalar values; null values will overwrite/erase\n            // the previous destination value)\n            if (value !== null && typeof value === 'object' && !Array.isArray(value)) {\n                if (dest[key] !== null && typeof dest[key] === 'object' && !Array.isArray(dest[key])) {\n                    dest[key] = mergeObjects(dest[key], value);\n                }\n                else {\n                    dest[key] = mergeObjects({}, value); // destination not an object, overwrite\n                }\n            }\n            // Overwrite the previous destination value if the source property is: a scalar (number/string),\n            // an array, or a null value\n            else if (value !== undefined) {\n                dest[key] = value;\n            }\n            // Undefined source properties are ignored\n        }\n\n    }\n    return dest;\n}\n","// Miscellaneous geo functions\n\nvar Geo;\nexport default Geo = {};\n\n// Projection constants\nGeo.default_source_max_zoom = 18;\nGeo.default_view_max_zoom = 20;\nGeo.max_style_zoom = 25; // max zoom at which styles will be evaluated\nGeo.tile_size = 256;\nGeo.half_circumference_meters = 20037508.342789244;\nGeo.circumference_meters = Geo.half_circumference_meters * 2;\nGeo.min_zoom_meters_per_pixel = Geo.circumference_meters / Geo.tile_size; // min zoom draws world as 2 tiles wide\n\nlet meters_per_pixel = [];\nGeo.metersPerPixel = function (z) {\n    meters_per_pixel[z] = meters_per_pixel[z] || Geo.min_zoom_meters_per_pixel / Math.pow(2, z);\n    return meters_per_pixel[z];\n};\n\nlet meters_per_tile = [];\nGeo.metersPerTile = function (z) {\n    meters_per_tile[z] = meters_per_tile[z] || Geo.circumference_meters / Math.pow(2, z);\n    return meters_per_tile[z];\n};\n\n// Conversion functions based on an defined tile scale\nGeo.tile_scale = 4096; // coordinates are locally scaled to the range [0, tile_scale]\nGeo.units_per_pixel = Geo.tile_scale / Geo.tile_size;\nGeo.height_scale = 16;  // provides sub-meter precision for height values (16ths of a meters)\n\nlet units_per_meter = [];\nGeo.unitsPerMeter = function (z) {\n    units_per_meter[z] = units_per_meter[z] || Geo.tile_scale / (Geo.tile_size * Geo.metersPerPixel(z));\n    return units_per_meter[z];\n};\n\n// Convert tile location to mercator meters - multiply by pixels per tile, then by meters per pixel, adjust for map origin\nGeo.metersForTile = function (tile) {\n    return {\n        x: tile.x * Geo.circumference_meters / Math.pow(2, tile.z) - Geo.half_circumference_meters,\n        y: -(tile.y * Geo.circumference_meters / Math.pow(2, tile.z) - Geo.half_circumference_meters)\n    };\n};\n\n/**\n   Given a point in mercator meters and a zoom level, return the tile X/Y/Z that the point lies in\n*/\nGeo.tileForMeters = function ([x, y], zoom) {\n    return {\n        x: Math.floor((x + Geo.half_circumference_meters) / (Geo.circumference_meters / Math.pow(2, zoom))),\n        y: Math.floor((-y + Geo.half_circumference_meters) / (Geo.circumference_meters / Math.pow(2, zoom))),\n        z: zoom\n    };\n};\n\n// Wrap a tile to positive #s for zoom\n// Optionally specify the axes to wrap\nGeo.wrapTile = function({ x, y, z }, mask = { x: true, y: false }) {\n    var m = (1 << z) - 1;\n    if (mask.x) {\n        x = x & m;\n    }\n    if (mask.y) {\n        y = y & m;\n    }\n    return { x, y, z };\n};\n\n/**\n   Convert mercator meters to lat-lng, in-place\n*/\nGeo.metersToLatLng = function (c) {\n    c[0] /= Geo.half_circumference_meters;\n    c[1] /= Geo.half_circumference_meters;\n\n    c[1] = (2 * Math.atan(Math.exp(c[1] * Math.PI)) - (Math.PI / 2)) / Math.PI;\n\n    c[0] *= 180;\n    c[1] *= 180;\n\n    return c;\n};\n\n/**\n  Convert lat-lng to mercator meters, in-place\n*/\nGeo.latLngToMeters = function (c) {\n    // Latitude\n    c[1] = Math.log(Math.tan(c[1] * Math.PI / 360 + Math.PI / 4)) / Math.PI;\n    c[1] *= Geo.half_circumference_meters;\n\n    // Longitude\n    c[0] *= Geo.half_circumference_meters / 180;\n\n    return c;\n};\n\n// Transform from local tile coordinats to lat lng\nGeo.tileSpaceToLatlng = function (geometry, z, min) {\n    const units_per_meter = Geo.unitsPerMeter(z);\n    Geo.transformGeometry(geometry, coord => {\n        coord[0] = (coord[0] / units_per_meter) + min.x;\n        coord[1] = (coord[1] / units_per_meter) + min.y;\n        Geo.metersToLatLng(coord);\n    });\n    return geometry;\n};\n\n// Copy GeoJSON geometry\nGeo.copyGeometry = function (geometry) {\n    if (geometry == null) {\n        return; // skip if missing geometry (valid GeoJSON)\n    }\n\n    let copy = { type: geometry.type };\n\n    if (geometry.type === 'Point') {\n        copy.coordinates = [geometry.coordinates[0], geometry.coordinates[1]];\n    }\n    else if (geometry.type === 'LineString' || geometry.type === 'MultiPoint') {\n        copy.coordinates = geometry.coordinates.map(c => [c[0], c[1]]);\n    }\n    else if (geometry.type === 'Polygon' || geometry.type === 'MultiLineString') {\n        copy.coordinates = geometry.coordinates.map(ring => ring.map(c => [c[0], c[1]]));\n    }\n    else if (geometry.type === 'MultiPolygon') {\n        copy.coordinates = geometry.coordinates.map(polygon => {\n            return polygon.map(ring => ring.map(c => [c[0], c[1]]));\n        });\n    }\n    // TODO: support GeometryCollection\n    return copy;\n};\n\n// Run an in-place transform function on each cooordinate in a GeoJSON geometry\nGeo.transformGeometry = function (geometry, transform) {\n    if (geometry == null) {\n        return; // skip if missing geometry (valid GeoJSON)\n    }\n\n    if (geometry.type === 'Point') {\n        transform(geometry.coordinates);\n    }\n    else if (geometry.type === 'LineString' || geometry.type === 'MultiPoint') {\n        geometry.coordinates.forEach(transform);\n    }\n    else if (geometry.type === 'Polygon' || geometry.type === 'MultiLineString') {\n        geometry.coordinates.forEach(ring => ring.forEach(transform));\n    }\n    else if (geometry.type === 'MultiPolygon') {\n        geometry.coordinates.forEach(polygon => {\n            polygon.forEach(ring => ring.forEach(transform));\n        });\n    }\n    // TODO: support GeometryCollection\n};\n\nGeo.boxIntersect = function (b1, b2) {\n    return !(\n        b2.sw.x > b1.ne.x ||\n        b2.ne.x < b1.sw.x ||\n        b2.sw.y > b1.ne.y ||\n        b2.ne.y < b1.sw.y\n    );\n};\n\n// Finds the axis-aligned bounding box for a polygon\nGeo.findBoundingBox = function (polygon) {\n    var min_x = Infinity,\n        max_x = -Infinity,\n        min_y = Infinity,\n        max_y = -Infinity;\n\n    // Only need to examine outer ring (polygon[0])\n    var num_coords = polygon[0].length;\n    for (var c=0; c < num_coords; c++) {\n        var coord = polygon[0][c];\n\n        if (coord[0] < min_x) {\n            min_x = coord[0];\n        }\n        if (coord[1] < min_y) {\n            min_y = coord[1];\n        }\n        if (coord[0] > max_x) {\n            max_x = coord[0];\n        }\n        if (coord[1] > max_y) {\n            max_y = coord[1];\n        }\n    }\n\n    return [min_x, min_y, max_x, max_y];\n};\n\n// Convert geometry type to one of: 'point', 'line', 'polygon'\nGeo.geometryType = function(type) {\n    if (type === 'Polygon' || type === 'MultiPolygon') {\n        return 'polygon';\n    }\n    else if (type === 'LineString' || type === 'MultiLineString') {\n        return 'line';\n    }\n    if (type === 'Point' || type === 'MultiPoint') {\n        return 'point';\n    }\n};\n\n// Geometric / weighted centroid of polygon\n// Adapted from https://github.com/Leaflet/Leaflet/blob/c10f405a112142b19785967ce0e142132a6095ad/src/layer/vector/Polygon.js#L57\nGeo.centroid = function (polygon, relative = true) {\n    if (!polygon || polygon.length === 0) {\n        return;\n    }\n\n    let x = 0, y = 0, area = 0;\n    let ring = polygon[0]; // only use first ring for now\n    let len = ring.length;\n\n    // optionally calculate relative to first coordinate to avoid precision issues w/small polygons\n    let origin;\n    if (relative) {\n        origin = ring[0];\n        ring = ring.map(v => [v[0] - origin[0], v[1] - origin[1]]);\n    }\n\n    for (let i = 0, j = len - 1; i < len; j = i, i++) {\n        let p0 = ring[i];\n        let p1 = ring[j];\n        let f = p0[1] * p1[0] - p1[1] * p0[0];\n\n        x += (p0[0] + p1[0]) * f;\n        y += (p0[1] + p1[1]) * f;\n        area += f * 3;\n    }\n\n    if (!area) {\n        return; // skip degenerate polygons\n    }\n\n    let c = [x / area, y / area];\n    if (relative) {\n        c[0] += origin[0];\n        c[1] += origin[1];\n    }\n    return c;\n};\n\nGeo.multiCentroid = function (polygons) {\n    let n = 0;\n    let centroid = null;\n\n    for (let p=0; p < polygons.length; p++) {\n        let c = Geo.centroid(polygons[p]);\n        if (c) { // skip degenerate polygons\n            centroid = centroid || [0, 0];\n            centroid[0] += c[0];\n            centroid[1] += c[1];\n            n++;\n        }\n    }\n\n    if (n > 0) {\n        centroid[0] /= n;\n        centroid[1] /= n;\n    }\n\n    return centroid; // will return null if all polygons were degenerate\n};\n\nGeo.signedPolygonRingAreaSum = function (ring) {\n    let area = 0;\n    let n = ring.length;\n\n    for (let i = 0; i < n - 1; i++) {\n        let p0 = ring[i];\n        let p1 = ring[i+1];\n\n        area += p0[0] * p1[1] - p1[0] * p0[1];\n    }\n\n    area += ring[n - 1][0] * ring[0][1] - ring[0][0] * ring[n - 1][1];\n    return area;\n};\n\nGeo.polygonRingArea = function (ring) {\n    return Math.abs(Geo.signedPolygonRingAreaSum(ring)) / 2;\n};\n\n// TODO: subtract inner rings\nGeo.polygonArea = function (polygon) {\n    if (!polygon) {\n        return;\n    }\n    return Geo.polygonRingArea(polygon[0]);\n};\n\nGeo.multiPolygonArea = function (polygons) {\n    let area = 0;\n\n    for (let p=0; p < polygons.length; p++) {\n        area += Geo.polygonArea(polygons[p]);\n    }\n\n    return area;\n};\n\nGeo.ringWinding = function (ring) {\n    let area = Geo.signedPolygonRingAreaSum(ring);\n    if (area > 0) {\n        return 'CW';\n    }\n    else if (area < 0) {\n        return 'CCW';\n    }\n    // return undefined on zero area polygon\n};\n","import hashString from './hash';\n\n// cache of functions, keyed by unique source\nconst cache = {\n    functions: {},\n    num_functions: 0,\n    num_cached: 0\n};\n\nexport { cache as functionStringCache };\n\nexport function clearFunctionStringCache () {\n    cache.functions = {};\n    cache.num_functions = 0;\n    cache.num_cached = 0;\n}\n\n// Recursively parse an object, compiling string properties that look like functions\nexport function compileFunctionStrings (obj, wrap) {\n    // Convert string\n    if (typeof obj === 'string') {\n        obj = compileFunctionString(obj, wrap);\n    }\n    // Loop through object properties\n    else if (obj != null && typeof obj === 'object') {\n        for (let p in obj) {\n            obj[p] = compileFunctionStrings(obj[p], wrap);\n        }\n    }\n    return obj;\n}\n\n// Compile a string that looks like a function\nexport function compileFunctionString (val, wrap) {\n    // Parse function signature and body\n    let fmatch =\n        (typeof val === 'string') &&\n        val.match(/^\\s*function[^(]*\\(([^)]*)\\)\\s*?\\{([\\s\\S]*)\\}$/m);\n\n    if (fmatch && fmatch.length > 2) {\n        try {\n            // function body\n            const body = fmatch[2];\n            const source = (typeof wrap === 'function') ? wrap(body) : body; // optionally wrap source\n\n            // compile and cache by unique function source\n            const key = hashString(source);\n            if (cache.functions[key] === undefined) {\n                // function arguments extracted from signature\n                let args = fmatch[1].length > 0 && fmatch[1].split(',').map(x => x.trim()).filter(x => x);\n                args = args.length > 0 ? args : ['context']; // default to single 'context' argument\n\n                cache.functions[key] = new Function(args.toString(), source); // jshint ignore:line\n                cache.functions[key].source = body; // save original, un-wrapped function body source\n                cache.num_functions++;\n            }\n            else {\n                cache.num_cached++;\n            }\n\n            return cache.functions[key];\n        }\n        catch (e) {\n            // fall-back to original value if parsing failed\n            return val;\n        }\n    }\n    return val;\n}\n","// (c) Dean McNamee <dean@gmail.com>, 2012.\n//\n// https://github.com/deanm/css-color-parser-js\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to\n// deal in the Software without restriction, including without limitation the\n// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n// sell copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n// IN THE SOFTWARE.\n\n// http://www.w3.org/TR/css3-color/\nvar kCSSColorTable = {\n  \"transparent\": [0,0,0,0], \"aliceblue\": [240,248,255,1],\n  \"antiquewhite\": [250,235,215,1], \"aqua\": [0,255,255,1],\n  \"aquamarine\": [127,255,212,1], \"azure\": [240,255,255,1],\n  \"beige\": [245,245,220,1], \"bisque\": [255,228,196,1],\n  \"black\": [0,0,0,1], \"blanchedalmond\": [255,235,205,1],\n  \"blue\": [0,0,255,1], \"blueviolet\": [138,43,226,1],\n  \"brown\": [165,42,42,1], \"burlywood\": [222,184,135,1],\n  \"cadetblue\": [95,158,160,1], \"chartreuse\": [127,255,0,1],\n  \"chocolate\": [210,105,30,1], \"coral\": [255,127,80,1],\n  \"cornflowerblue\": [100,149,237,1], \"cornsilk\": [255,248,220,1],\n  \"crimson\": [220,20,60,1], \"cyan\": [0,255,255,1],\n  \"darkblue\": [0,0,139,1], \"darkcyan\": [0,139,139,1],\n  \"darkgoldenrod\": [184,134,11,1], \"darkgray\": [169,169,169,1],\n  \"darkgreen\": [0,100,0,1], \"darkgrey\": [169,169,169,1],\n  \"darkkhaki\": [189,183,107,1], \"darkmagenta\": [139,0,139,1],\n  \"darkolivegreen\": [85,107,47,1], \"darkorange\": [255,140,0,1],\n  \"darkorchid\": [153,50,204,1], \"darkred\": [139,0,0,1],\n  \"darksalmon\": [233,150,122,1], \"darkseagreen\": [143,188,143,1],\n  \"darkslateblue\": [72,61,139,1], \"darkslategray\": [47,79,79,1],\n  \"darkslategrey\": [47,79,79,1], \"darkturquoise\": [0,206,209,1],\n  \"darkviolet\": [148,0,211,1], \"deeppink\": [255,20,147,1],\n  \"deepskyblue\": [0,191,255,1], \"dimgray\": [105,105,105,1],\n  \"dimgrey\": [105,105,105,1], \"dodgerblue\": [30,144,255,1],\n  \"firebrick\": [178,34,34,1], \"floralwhite\": [255,250,240,1],\n  \"forestgreen\": [34,139,34,1], \"fuchsia\": [255,0,255,1],\n  \"gainsboro\": [220,220,220,1], \"ghostwhite\": [248,248,255,1],\n  \"gold\": [255,215,0,1], \"goldenrod\": [218,165,32,1],\n  \"gray\": [128,128,128,1], \"green\": [0,128,0,1],\n  \"greenyellow\": [173,255,47,1], \"grey\": [128,128,128,1],\n  \"honeydew\": [240,255,240,1], \"hotpink\": [255,105,180,1],\n  \"indianred\": [205,92,92,1], \"indigo\": [75,0,130,1],\n  \"ivory\": [255,255,240,1], \"khaki\": [240,230,140,1],\n  \"lavender\": [230,230,250,1], \"lavenderblush\": [255,240,245,1],\n  \"lawngreen\": [124,252,0,1], \"lemonchiffon\": [255,250,205,1],\n  \"lightblue\": [173,216,230,1], \"lightcoral\": [240,128,128,1],\n  \"lightcyan\": [224,255,255,1], \"lightgoldenrodyellow\": [250,250,210,1],\n  \"lightgray\": [211,211,211,1], \"lightgreen\": [144,238,144,1],\n  \"lightgrey\": [211,211,211,1], \"lightpink\": [255,182,193,1],\n  \"lightsalmon\": [255,160,122,1], \"lightseagreen\": [32,178,170,1],\n  \"lightskyblue\": [135,206,250,1], \"lightslategray\": [119,136,153,1],\n  \"lightslategrey\": [119,136,153,1], \"lightsteelblue\": [176,196,222,1],\n  \"lightyellow\": [255,255,224,1], \"lime\": [0,255,0,1],\n  \"limegreen\": [50,205,50,1], \"linen\": [250,240,230,1],\n  \"magenta\": [255,0,255,1], \"maroon\": [128,0,0,1],\n  \"mediumaquamarine\": [102,205,170,1], \"mediumblue\": [0,0,205,1],\n  \"mediumorchid\": [186,85,211,1], \"mediumpurple\": [147,112,219,1],\n  \"mediumseagreen\": [60,179,113,1], \"mediumslateblue\": [123,104,238,1],\n  \"mediumspringgreen\": [0,250,154,1], \"mediumturquoise\": [72,209,204,1],\n  \"mediumvioletred\": [199,21,133,1], \"midnightblue\": [25,25,112,1],\n  \"mintcream\": [245,255,250,1], \"mistyrose\": [255,228,225,1],\n  \"moccasin\": [255,228,181,1], \"navajowhite\": [255,222,173,1],\n  \"navy\": [0,0,128,1], \"oldlace\": [253,245,230,1],\n  \"olive\": [128,128,0,1], \"olivedrab\": [107,142,35,1],\n  \"orange\": [255,165,0,1], \"orangered\": [255,69,0,1],\n  \"orchid\": [218,112,214,1], \"palegoldenrod\": [238,232,170,1],\n  \"palegreen\": [152,251,152,1], \"paleturquoise\": [175,238,238,1],\n  \"palevioletred\": [219,112,147,1], \"papayawhip\": [255,239,213,1],\n  \"peachpuff\": [255,218,185,1], \"peru\": [205,133,63,1],\n  \"pink\": [255,192,203,1], \"plum\": [221,160,221,1],\n  \"powderblue\": [176,224,230,1], \"purple\": [128,0,128,1],\n  \"rebeccapurple\": [102,51,153,1],\n  \"red\": [255,0,0,1], \"rosybrown\": [188,143,143,1],\n  \"royalblue\": [65,105,225,1], \"saddlebrown\": [139,69,19,1],\n  \"salmon\": [250,128,114,1], \"sandybrown\": [244,164,96,1],\n  \"seagreen\": [46,139,87,1], \"seashell\": [255,245,238,1],\n  \"sienna\": [160,82,45,1], \"silver\": [192,192,192,1],\n  \"skyblue\": [135,206,235,1], \"slateblue\": [106,90,205,1],\n  \"slategray\": [112,128,144,1], \"slategrey\": [112,128,144,1],\n  \"snow\": [255,250,250,1], \"springgreen\": [0,255,127,1],\n  \"steelblue\": [70,130,180,1], \"tan\": [210,180,140,1],\n  \"teal\": [0,128,128,1], \"thistle\": [216,191,216,1],\n  \"tomato\": [255,99,71,1], \"turquoise\": [64,224,208,1],\n  \"violet\": [238,130,238,1], \"wheat\": [245,222,179,1],\n  \"white\": [255,255,255,1], \"whitesmoke\": [245,245,245,1],\n  \"yellow\": [255,255,0,1], \"yellowgreen\": [154,205,50,1]}\n\nfunction clamp_css_byte(i) {  // Clamp to integer 0 .. 255.\n  i = Math.round(i);  // Seems to be what Chrome does (vs truncation).\n  return i < 0 ? 0 : i > 255 ? 255 : i;\n}\n\nfunction clamp_css_float(f) {  // Clamp to float 0.0 .. 1.0.\n  return f < 0 ? 0 : f > 1 ? 1 : f;\n}\n\nfunction parse_css_int(str) {  // int or percentage.\n  if (str[str.length - 1] === '%')\n    return clamp_css_byte(parseFloat(str) / 100 * 255);\n  return clamp_css_byte(parseInt(str));\n}\n\nfunction parse_css_float(str) {  // float or percentage.\n  if (str[str.length - 1] === '%')\n    return clamp_css_float(parseFloat(str) / 100);\n  return clamp_css_float(parseFloat(str));\n}\n\nfunction css_hue_to_rgb(m1, m2, h) {\n  if (h < 0) h += 1;\n  else if (h > 1) h -= 1;\n\n  if (h * 6 < 1) return m1 + (m2 - m1) * h * 6;\n  if (h * 2 < 1) return m2;\n  if (h * 3 < 2) return m1 + (m2 - m1) * (2/3 - h) * 6;\n  return m1;\n}\n\nfunction parseCSSColor(css_str) {\n  // Remove all whitespace, not compliant, but should just be more accepting.\n  var str = css_str.replace(/ /g, '').toLowerCase();\n\n  // Color keywords (and transparent) lookup.\n  if (str in kCSSColorTable) return kCSSColorTable[str].slice();  // dup.\n\n  // #abc and #abc123 syntax.\n  if (str[0] === '#') {\n    if (str.length === 4) {\n      var iv = parseInt(str.substr(1), 16);  // TODO(deanm): Stricter parsing.\n      if (!(iv >= 0 && iv <= 0xfff)) return null;  // Covers NaN.\n      return [((iv & 0xf00) >> 4) | ((iv & 0xf00) >> 8),\n              (iv & 0xf0) | ((iv & 0xf0) >> 4),\n              (iv & 0xf) | ((iv & 0xf) << 4),\n              1];\n    } else if (str.length === 7) {\n      var iv = parseInt(str.substr(1), 16);  // TODO(deanm): Stricter parsing.\n      if (!(iv >= 0 && iv <= 0xffffff)) return null;  // Covers NaN.\n      return [(iv & 0xff0000) >> 16,\n              (iv & 0xff00) >> 8,\n              iv & 0xff,\n              1];\n    }\n\n    return null;\n  }\n\n  var op = str.indexOf('('), ep = str.indexOf(')');\n  if (op !== -1 && ep + 1 === str.length) {\n    var fname = str.substr(0, op);\n    var params = str.substr(op+1, ep-(op+1)).split(',');\n    var alpha = 1;  // To allow case fallthrough.\n    switch (fname) {\n      case 'rgba':\n        if (params.length !== 4) return null;\n        alpha = parse_css_float(params.pop());\n        // Fall through.\n      case 'rgb':\n        if (params.length !== 3) return null;\n        return [parse_css_int(params[0]),\n                parse_css_int(params[1]),\n                parse_css_int(params[2]),\n                alpha];\n      case 'hsla':\n        if (params.length !== 4) return null;\n        alpha = parse_css_float(params.pop());\n        // Fall through.\n      case 'hsl':\n        if (params.length !== 3) return null;\n        var h = (((parseFloat(params[0]) % 360) + 360) % 360) / 360;  // 0 .. 1\n        // NOTE(deanm): According to the CSS spec s/l should only be\n        // percentages, but we don't bother and let float or percentage.\n        var s = parse_css_float(params[1]);\n        var l = parse_css_float(params[2]);\n        var m2 = l <= 0.5 ? l * (s + 1) : l + s - l * s;\n        var m1 = l * 2 - m2;\n        return [clamp_css_byte(css_hue_to_rgb(m1, m2, h+1/3) * 255),\n                clamp_css_byte(css_hue_to_rgb(m1, m2, h) * 255),\n                clamp_css_byte(css_hue_to_rgb(m1, m2, h-1/3) * 255),\n                alpha];\n      default:\n        return null;\n    }\n  }\n\n  return null;\n}\n\ntry { exports.parseCSSColor = parseCSSColor } catch(e) { }\n","import Utils from '../utils/utils';\nimport {compileFunctionString} from '../utils/functions';\nimport Geo from '../utils/geo';\nimport log from '../utils/log';\n\nimport parseCSSColor from 'csscolorparser';\n\nconst StyleParser = {};\nexport default StyleParser;\n\n// Helpers for string converstion / NaN handling\nconst clampPositive = v => Math.max(v, 0);\nconst noNaN = v => isNaN(v) ? 0 : v;\nconst parseNumber = v => Array.isArray(v) ? v.map(parseFloat).map(noNaN) : noNaN(parseFloat(v));\nconst parsePositiveNumber = v => Array.isArray(v) ? v.map(parseNumber).map(clampPositive) : clampPositive(parseNumber(v));\n\nObject.assign(StyleParser, {clampPositive, noNaN, parseNumber, parsePositiveNumber});\n\n// Wraps style functions and provides a scope of commonly accessible data:\n// - feature: the 'properties' of the feature, e.g. accessed as 'feature.name'\n// - global: user-defined properties on the `global` object in the scene file\n// - $zoom: the current map zoom level\n// - $geometry: the type of geometry, 'point', 'line', or 'polygon'\n// - $meters_per_pixel: conversion for meters/pixels at current map zoom\nStyleParser.wrapFunction = function (func) {\n    var f = `\n        var feature = context.feature.properties;\n        var global = context.global;\n        var $zoom = context.zoom;\n        var $layer = context.layer;\n        var $source = context.source;\n        var $geometry = context.geometry;\n        var $meters_per_pixel = context.meters_per_pixel;\n        var $id = context.id;\n\n        var val = (function(){ ${func} }());\n\n        if (typeof val === 'number' && isNaN(val)) {\n            val = null; // convert NaNs to nulls\n        }\n\n        return val;\n    `;\n    return f;\n};\n\n\n// Style parsing\n\nStyleParser.zeroPair = Object.freeze([0, 0]); // single allocation for zero values that won't be modified\n\n// Style defaults\nStyleParser.defaults = {\n    color: [1, 1, 1, 1],\n    width: 1,\n    size: 1,\n    extrude: false,\n    height: 20,\n    min_height: 0,\n    order: 0,\n    z: 0,\n    outline: {\n        color: [0, 0, 0, 0],\n        width: 0\n    },\n    material: {\n        ambient: 1,\n        diffuse: 1\n    }\n};\n\n// Style macros\nStyleParser.macros = {\n    // pseudo-random color by geometry id\n    'Style.color.pseudoRandomColor': function() {\n        return [\n            0.7 * (parseInt(feature.id, 16) / 100 % 1),     // eslint-disable-line no-undef\n            0.7 * (parseInt(feature.id, 16) / 10000 % 1),   // eslint-disable-line no-undef\n            0.7 * (parseInt(feature.id, 16) / 1000000 % 1), // eslint-disable-line no-undef\n            1\n        ];\n    },\n\n    // random color\n    'Style.color.randomColor': function() {\n        return [0.7 * Math.random(), 0.7 * Math.random(), 0.7 * Math.random(), 1];\n    }\n};\n\n// A context object that is passed to style parsing functions to provide a scope of commonly used values\nStyleParser.getFeatureParseContext = function (feature, tile, global) {\n    return {\n        feature,\n        id: feature.id,\n        tile,\n        global,\n        zoom: tile.style_z,\n        geometry: Geo.geometryType(feature.geometry.type),\n        meters_per_pixel: tile.meters_per_pixel,\n        meters_per_pixel_sq: tile.meters_per_pixel_sq,\n        units_per_meter_overzoom: tile.units_per_meter_overzoom\n    };\n};\n\n// Build a style param cache object\n// `value` is a raw value, cache methods will add other properties as needed\n// `transform` is an optional, one-time transform function to run on values during setup\n// `dynamic_transform` is an optional post-processing function applied to the result of function-based properties\nconst CACHE_TYPE = {\n    STATIC: 0,\n    DYNAMIC: 1,\n    ZOOM: 2\n};\nStyleParser.CACHE_TYPE = CACHE_TYPE;\n\nStyleParser.createPropertyCache = function (obj, transform = null, dynamic_transform = null) {\n    if (obj == null) {\n        return;\n    }\n\n    if (obj.value) {\n        return { value: obj.value, zoom: (obj.zoom ? {} : null), type: obj.type }; // clone existing cache object\n    }\n\n    let c = { value: obj, type: CACHE_TYPE.STATIC };\n\n    // does value contain zoom stops to be interpolated?\n    if (Array.isArray(c.value) && Array.isArray(c.value[0])) {\n        c.zoom = {}; // will hold values interpolated by zoom\n        c.type = CACHE_TYPE.ZOOM;\n    }\n    else if (typeof c.value === 'function') {\n        c.type = CACHE_TYPE.DYNAMIC;\n        c.dynamic_transform = (typeof dynamic_transform === 'function' ? dynamic_transform : null);\n    }\n\n    // apply optional transform function - usually a parsing function\n    if (typeof transform === 'function') {\n        if (c.zoom) { // apply to each zoom stop value\n            c.value = c.value.map((v, i) => [v[0], transform(v[1], i)]);\n        }\n        else if (typeof c.value !== 'function') { // don't transform functions\n            c.value = transform(c.value, 0); // single value, 0 = the first and only item in the array\n        }\n    }\n\n    return c;\n};\n\n// Convert old-style color macro into a function\n// TODO: deprecate this macro syntax\nStyleParser.createColorPropertyCache = function (obj) {\n    return StyleParser.createPropertyCache(obj, v => {\n        if (v === 'Style.color.pseudoRandomColor') {\n            return compileFunctionString(StyleParser.wrapFunction(StyleParser.macros['Style.color.pseudoRandomColor']));\n        }\n        else if (v === 'Style.color.randomColor') {\n            return StyleParser.macros['Style.color.randomColor'];\n        }\n\n        return v;\n    });\n};\n\n// Parse point sizes, which include optional %-based or aspect-ratio-constrained scaling from sprite size\n// Returns a cache object if successful, otherwise throws error message\nconst isPercent = v => typeof v === 'string' && v[v.length-1] === '%'; // size computed by %\nconst isRatio = v => v === 'auto'; // size derived from aspect ratio of one dimension\nconst isComputed = v => isPercent(v) || isRatio(v);\nconst dualRatioError = '\\'size\\' can specify either width or height as derived from aspect ratio, but not both';\nStyleParser.createPointSizePropertyCache = function (obj, texture) {\n    // obj is the value to be parsed eg \"64px\" \"100%\" \"auto\"\n    // mimics the structure of the size value (at each zoom stop if applicable),\n    // stores flags indicating if each element is a %-based size or not, or derived from aspect\n    let has_pct = null;\n    let has_ratio = null;\n    if (isPercent(obj)) { // 1D size\n        has_pct = [true];\n    }\n    else if (Array.isArray(obj)) {\n        // track which fields are % vals\n        if (Array.isArray(obj[0])) { // zoom stops\n            // could be a 1D value (that could be a %), or a 2D value (either width or height or both could be a %)\n            if (obj.some(v => Array.isArray(v[1]) ? v[1].some(w => isComputed(w)) : isPercent(v[1]))) {\n                has_pct = obj.map(v => Array.isArray(v[1]) ? v[1].map(w => isPercent(w)) : isPercent(v[1]));\n                has_ratio = obj.map(v => Array.isArray(v[1]) && v[1].map(w => isRatio(w)));\n                if (has_ratio.some(v => Array.isArray(v) && v.every(c => c))) {\n                    throw dualRatioError; // invalid case where both dims are ratios\n                }\n            }\n        }\n        else if (obj.some(isComputed)) { // 2D size\n            has_pct = [obj.map(isPercent)];\n            has_ratio = [obj.map(isRatio)];\n            if (has_ratio[0].every(c => c)) {\n                throw dualRatioError; // invalid case where both dims are ratios\n            }\n        }\n    }\n    else if (isRatio(obj)) {\n        throw 'this value only allowed as half of an array, eg [16px, auto]:';\n        // TODO: add this error check for zoom stop parsing above\n    }\n\n    if (has_pct || has_ratio) {\n        // texture is required when % or ratio sizes are used\n        if (!texture) {\n            throw '% or \\'auto\\' keywords can only be used to specify point size when a texture is defined';\n        }\n\n        // per-sprite based evaluation\n        obj = { value: obj };\n        obj.has_pct = has_pct;\n        obj.has_ratio = has_ratio;\n        obj.sprites = {}; // cache by sprite\n    }\n    else {\n        // no % or aspect ratio sizing, one cache for texture or all sprites\n        obj = StyleParser.createPropertyCache(obj, parsePositiveNumber);\n    }\n\n    return obj;\n};\n\nStyleParser.evalCachedPointSizeProperty = function (val, sprite_info, texture_info, context) {\n    if (val == null) {\n        return;\n    }\n\n    // no percentage-based calculation, one cache for all sprites\n    if (!val.has_pct && !val.has_ratio) {\n        return StyleParser.evalCachedProperty(val, context);\n    }\n\n    if (sprite_info) {\n        // per-sprite based evaluation, cache sizes per sprite\n        if (!val.sprites[sprite_info.sprite]) {\n            val.sprites[sprite_info.sprite] = createPointSizeCacheEntry(val, sprite_info);\n        }\n        return StyleParser.evalCachedProperty(val.sprites[sprite_info.sprite], context);\n    }\n    else {\n        // texture-based evaluation\n        // apply percentage or ratio sizing to a texture\n        val.texture = val.texture || createPointSizeCacheEntry(val, texture_info);\n        return StyleParser.evalCachedProperty(val.texture, context);\n    }\n};\n\nfunction createPointSizeCacheEntry (val, image_info) {\n    // the cache property transform function needs access to the image in `val`\n    // so it's accessed via a closure here\n    return StyleParser.createPropertyCache(val.value, (v, i) => {\n        if (Array.isArray(v)) { // 2D size\n            // either width or height or both could be a %\n            v = v.\n                map((c, j) => val.has_ratio[i][j] ? c : parsePositiveNumber(c)). // convert non-ratio values to px\n                map((c, j) => val.has_pct[i][j] ? image_info.css_size[j] * c / 100 : c); // apply % scaling as needed\n\n            // either width or height could be a ratio\n            if (val.has_ratio[i][0]) {\n                v[0] = v[1] * image_info.aspect;\n            }\n            else if (val.has_ratio[i][1]) {\n                v[1] = v[0] / image_info.aspect;\n            }\n        }\n        else { // 1D size\n            v = parsePositiveNumber(v);\n            if (val.has_pct[i]) {\n                v = image_info.css_size.map(c => c * v / 100); // set size as % of image\n            }\n            else {\n                v = [v, v]; // expand 1D size to 2D\n            }\n        }\n        return v;\n    });\n}\n\n// Interpolation and caching for a generic property (not a color or distance)\n// { value: original, static: val, zoom: { 1: val1, 2: val2, ... }, dynamic: function(){...} }\nStyleParser.evalCachedProperty = function(val, context) {\n    if (val == null) {\n        return;\n    }\n    else if (val.dynamic) { // function, compute each time (no caching)\n        return tryEval(val.dynamic, context);\n    }\n    else if (val.static) { // single static value\n        return val.static;\n    }\n    else if (val.zoom && val.zoom[context.zoom]) { // interpolated, cached\n        return val.zoom[context.zoom];\n    }\n    else { // not yet evaulated for cache\n        // Dynamic function-based\n        if (typeof val.value === 'function') {\n            if (val.dynamic_transform) {\n                // apply an optional post-eval transform function\n                // e.g. apply device pixel ratio to font sizes, unit conversions, etc.\n                val.dynamic = function(context) {\n                    return val.dynamic_transform(val.value(context));\n                };\n            }\n            else {\n                val.dynamic = val.value;\n            }\n            return tryEval(val.dynamic, context);\n        }\n        // Array of zoom-interpolated stops, e.g. [zoom, value] pairs\n        else if (Array.isArray(val.value) && Array.isArray(val.value[0])) {\n            // Calculate value for current zoom\n            val.zoom = val.zoom || {};\n            val.zoom[context.zoom] = Utils.interpolate(context.zoom, val.value);\n            return val.zoom[context.zoom];\n        }\n        // Single static value\n        else {\n            val.static = val.value;\n            return val.static;\n        }\n    }\n};\n\nStyleParser.convertUnits = function(val, context) {\n    // pre-parsed units\n    if (val.value != null) {\n        if (val.units === 'px') { // convert from pixels\n            return val.value * Geo.metersPerPixel(context.zoom);\n        }\n        return val.value;\n    }\n    // un-parsed unit string\n    else if (typeof val === 'string') {\n        if (val.trim().slice(-2) === 'px') {\n            val = parseNumber(val);\n            val *= Geo.metersPerPixel(context.zoom); // convert from pixels\n        }\n        else {\n            val = parseNumber(val);\n        }\n    }\n    // multiple values or stops\n    else if (Array.isArray(val)) {\n        // Array of arrays, e.g. zoom-interpolated stops\n        if (Array.isArray(val[0])) {\n            return val.map(v => [v[0], StyleParser.convertUnits(v[1], context)]);\n        }\n        // Array of values\n        else {\n            return val.map(v => StyleParser.convertUnits(v, context));\n        }\n    }\n    return val;\n};\n\n// Pre-parse units from string values\nStyleParser.parseUnits = function (value) {\n    var obj = { value: parseNumber(value) };\n    if (obj.value !== 0 && typeof value === 'string' && value.trim().slice(-2) === 'px') {\n        obj.units = 'px';\n    }\n    return obj;\n};\n\n// Takes a distance cache object and returns a distance value for this zoom\n// (caching the result for future use)\n// { value: original, zoom: { z: meters }, dynamic: function(){...} }\nStyleParser.evalCachedDistanceProperty = function(val, context) {\n    if (val == null) {\n        return;\n    }\n    else if (val.dynamic) {\n        return tryEval(val.dynamic, context);\n    }\n    else if (val.zoom && val.zoom[context.zoom]) {\n        return val.zoom[context.zoom];\n    }\n    else {\n        // Dynamic function-based\n        if (typeof val.value === 'function') {\n            val.dynamic = val.value;\n            return tryEval(val.dynamic, context);\n        }\n        // Array of zoom-interpolated stops, e.g. [zoom, value] pairs\n        else if (val.zoom) {\n            // Calculate value for current zoom\n            // Do final unit conversion as late as possible, when interpolation values have been determined\n            val.zoom[context.zoom] = Utils.interpolate(context.zoom, val.value,\n                v => StyleParser.convertUnits(v, context));\n\n            return val.zoom[context.zoom];\n        }\n        else {\n            return StyleParser.convertUnits(val.value, context);\n        }\n    }\n};\n\n// Cache previously parsed color strings\nStyleParser.string_colors = {};\nStyleParser.colorForString = function(string) {\n    // Cached\n    if (StyleParser.string_colors[string]) {\n        return StyleParser.string_colors[string];\n    }\n\n    // Calculate and cache\n    let color = parseCSSColor.parseCSSColor(string);\n    if (color && color.length === 4) {\n        color[0] /= 255;\n        color[1] /= 255;\n        color[2] /= 255;\n    }\n    else {\n        color = StyleParser.defaults.color;\n    }\n    StyleParser.string_colors[string] = color;\n    return color;\n};\n\n// Takes a color cache object and returns a color value for this zoom\n// (caching the result for future use)\n// { value: original, static: [r,g,b,a], zoom: { z: [r,g,b,a] }, dynamic: function(){...} }\nStyleParser.evalCachedColorProperty = function(val, context = {}) {\n    if (val == null) {\n        return;\n    }\n    else if (val.dynamic) {\n        let v = tryEval(val.dynamic, context);\n\n        if (typeof v === 'string') {\n            v = StyleParser.colorForString(v);\n        }\n\n        if (v && v[3] == null) {\n            v[3] = 1; // default alpha\n        }\n        return v;\n    }\n    else if (val.static) {\n        return val.static;\n    }\n    else if (val.zoom && val.zoom[context.zoom]) {\n        return val.zoom[context.zoom];\n    }\n    else {\n        // Dynamic function-based color\n        if (typeof val.value === 'function') {\n            val.dynamic = val.value;\n            let v = tryEval(val.dynamic, context);\n\n            if (typeof v === 'string') {\n                v = StyleParser.colorForString(v);\n            }\n\n            if (v && v[3] == null) {\n                v[3] = 1; // default alpha\n            }\n            return v;\n        }\n        // Single string color\n        else if (typeof val.value === 'string') {\n            val.static = StyleParser.colorForString(val.value);\n            return val.static;\n        }\n        // Array of zoom-interpolated stops, e.g. [zoom, color] pairs\n        else if (val.zoom) {\n            // Parse any string colors inside stops, the first time we encounter this property\n            if (!val.zoom_preprocessed) {\n                for (let i=0; i < val.value.length; i++) {\n                    let v = val.value[i];\n                    if (v && typeof v[1] === 'string') {\n                        v[1] = StyleParser.colorForString(v[1]);\n                    }\n                }\n                val.zoom_preprocessed = true;\n            }\n\n            // Calculate color for current zoom\n            val.zoom[context.zoom] = Utils.interpolate(context.zoom, val.value);\n            val.zoom[context.zoom][3] = val.zoom[context.zoom][3] || 1; // default alpha\n            return val.zoom[context.zoom];\n        }\n        // Single array color\n        else {\n            val.static = val.value.map(x => x); // copy to avoid modifying\n            if (val.static && val.static[3] == null) {\n                val.static[3] = 1; // default alpha\n            }\n            return val.static;\n        }\n    }\n};\n\n// Evaluate color cache object and apply optional alpha override (alpha arg is a single value cache object)\nStyleParser.evalCachedColorPropertyWithAlpha = function (val, alpha_prop, context) {\n    const color = StyleParser.evalCachedColorProperty(val, context);\n    if (color != null && alpha_prop != null) {\n        const alpha = StyleParser.evalCachedProperty(alpha_prop, context);\n        if (alpha != null) {\n            return [color[0], color[1], color[2], alpha];\n        }\n    }\n    return color;\n};\n\nStyleParser.parseColor = function(val, context = {}) {\n    if (typeof val === 'function') {\n        val = tryEval(val, context);\n    }\n\n    // Parse CSS-style colors\n    // TODO: change all colors to use 0-255 range internally to avoid dividing and then re-multiplying in geom builder\n    if (typeof val === 'string') {\n        val = StyleParser.colorForString(val);\n    }\n    else if (Array.isArray(val) && Array.isArray(val[0])) {\n        // Array of zoom-interpolated stops, e.g. [zoom, color] pairs\n        for (let i=0; i < val.length; i++) {\n            let v = val[i];\n            if (typeof v[1] === 'string') {\n                v[1] = StyleParser.colorForString(v[1]);\n            }\n        }\n\n        if (context.zoom) {\n            val = Utils.interpolate(context.zoom, val);\n        }\n    }\n\n    // Defaults\n    if (Array.isArray(val)) {\n        val = val.map(x => x); // copy to avoid modifying\n        // alpha\n        if (val[3] == null) {\n            val[3] = 1;\n        }\n    }\n    else {\n        val = [0, 0, 0, 1];\n    }\n\n    return val;\n};\n\nStyleParser.calculateOrder = function(order, context) {\n    // Computed order\n    if (typeof order === 'function') {\n        order = tryEval(order, context);\n    }\n    else if (typeof order === 'string') {\n        // Order tied to feature property\n        if (context.feature.properties[order]) {\n            order = context.feature.properties[order];\n        }\n        // Explicit order value\n        else {\n            order = parsePositiveNumber(order);\n        }\n    }\n\n    return order;\n};\n\n// Evaluate a function-based property, or pass-through static value\nStyleParser.evalProperty = function(prop, context) {\n    if (typeof prop === 'function') {\n        return tryEval(prop, context);\n    }\n    return prop;\n};\n\n// eval property function with try/catch\nfunction tryEval (func, context) {\n    try {\n        return func(context);\n    } catch(e) {\n        log('warn',\n            `Property function in layer '${context.layers[context.layers.length-1]}' failed with\\n`,\n            `error ${e.stack}\\n`,\n            `function '${func.source}'\\n`,\n            context.feature, context);\n    }\n}\n","import log from '../utils/log';\nimport Texture from '../gl/texture';\nimport WorkerBroker from '../utils/worker_broker';\n\nexport default class FeatureSelection {\n\n    constructor(gl, workers, lock_fn) {\n        this.gl = gl;\n        this.workers = workers; // pool of workers to request feature look-ups from, keyed by id\n        this._lock_fn = (typeof lock_fn === 'function') && lock_fn; // indicates if safe to read/write selection buffer this frame\n        this.init();\n    }\n\n    init() {\n        // Selection state tracking\n        this.requests = {}; // pending selection requests\n        this.feature = null; // currently selected feature\n        this.read_delay = 0; // delay time from selection render to framebuffer sample, to avoid CPU/GPU sync lock\n        this.read_delay_timer = null; // current timer (setTimeout) for delayed selection reads\n        this.pixels = null; // allocated lazily on request\n\n        // Frame buffer for selection\n        // TODO: initiate lazily in case we don't need to do any selection\n        this.fbo = this.gl.createFramebuffer();\n        this.gl.bindFramebuffer(this.gl.FRAMEBUFFER, this.fbo);\n        this.fbo_size = { width: 256, height: 256 }; // TODO: make configurable / adaptive based on canvas size\n\n        // Texture for the FBO color attachment\n        var fbo_texture = Texture.create( this.gl, '__selection_fbo', { filtering: 'nearest' });\n        fbo_texture.setData(this.fbo_size.width, this.fbo_size.height, null, { filtering: 'nearest' });\n        this.gl.framebufferTexture2D(this.gl.FRAMEBUFFER, this.gl.COLOR_ATTACHMENT0, this.gl.TEXTURE_2D, fbo_texture.texture, 0);\n\n        // Renderbuffer for the FBO depth attachment\n        var fbo_depth_rb = this.gl.createRenderbuffer();\n        this.gl.bindRenderbuffer(this.gl.RENDERBUFFER, fbo_depth_rb);\n        this.gl.renderbufferStorage(this.gl.RENDERBUFFER, this.gl.DEPTH_COMPONENT16, this.fbo_size.width, this.fbo_size.height);\n        this.gl.framebufferRenderbuffer(this.gl.FRAMEBUFFER, this.gl.DEPTH_ATTACHMENT, this.gl.RENDERBUFFER, fbo_depth_rb);\n\n        this.gl.bindFramebuffer(this.gl.FRAMEBUFFER, null);\n    }\n\n    destroy() {\n        if (this.gl && this.fbo) {\n            this.gl.deleteFramebuffer(this.fbo);\n            this.fbo = null;\n            this.gl.bindFramebuffer(this.gl.FRAMEBUFFER, null);\n        }\n\n        // TODO: free texture?\n    }\n\n    // external lock function determines when it's safe to read/write from selection buffer\n    get locked () {\n        return (this._lock_fn && this._lock_fn()) || false;\n    }\n\n    bind() {\n        // Switch to FBO\n        this.gl.bindFramebuffer(this.gl.FRAMEBUFFER, this.fbo);\n        this.gl.viewport(0, 0, this.fbo_size.width, this.fbo_size.height);\n        this.gl.clearColor(...FeatureSelection.defaultColor);\n    }\n\n    // Request feature selection\n    // Runs asynchronously, schedules selection buffer to be updated\n    getFeatureAt(point, { radius }) {\n        // ensure requested point is in canvas bounds\n        if (!point || point.x < 0 || point.y < 0 || point.x > 1 || point.y > 1) {\n            return Promise.resolve({ feature: null, changed: false });\n        }\n\n        return new Promise((resolve, reject) => {\n            // Queue requests for feature selection, and they will be picked up by the render loop\n            this.selection_request_id = (this.selection_request_id + 1) || 0;\n            this.requests[this.selection_request_id] = {\n                id: this.selection_request_id,\n                point,\n                radius,\n                resolve,\n                reject\n            };\n        });\n    }\n\n    // Any pending selection requests\n    pendingRequests() {\n        return Object.keys(this.requests).length ? this.requests : null;\n    }\n\n    hasPendingRequests() {\n        return this.pendingRequests() != null;\n    }\n\n    clearPendingRequests() {\n        for (var r in this.requests) {\n            var request = this.requests[r];\n\n            // This request was already sent to the worker, we're just awaiting its reply\n            if (request.sent) {\n                continue;\n            }\n\n            // Reject request since it will never be fulfilled\n            // TODO: pass a reason for rejection?\n            request.reject({ request });\n            delete this.requests[r];\n        }\n    }\n\n    // Read pending results from the selection buffer. Called after rendering to selection buffer.\n    read() {\n        // Delay reading the pixel result from the selection buffer to avoid CPU/GPU sync lock.\n        // Calling readPixels synchronously caused a massive performance hit, presumably since it\n        // forced this function to wait for the GPU to finish rendering and retrieve the texture contents.\n        if (this.read_delay_timer != null) {\n            clearTimeout(this.read_delay_timer);\n        }\n        this.read_delay_timer = setTimeout(() => {\n            if (this.locked) {\n                return;\n            }\n\n            var gl = this.gl;\n\n            gl.bindFramebuffer(gl.FRAMEBUFFER, this.fbo);\n\n            for (var r in this.requests) {\n                var request = this.requests[r];\n\n                // This request was already sent to the worker, we're just awaiting its reply\n                if (request.sent) {\n                    continue;\n                }\n\n                // Check selection map against FBO\n                let feature_key, worker_id = 255;\n                let {point, radius} = request;\n                let diam_px;\n\n                if (!radius) {\n                    radius = { x: 0, y: 0 };\n                    diam_px = { x: 1, y: 1 };\n                }\n                else {\n                    // diameter in selection buffer pixels\n                    let max_radius = Math.min(this.fbo_size.width, this.fbo_size.height);\n                    diam_px = {\n                        x: Math.min(Math.ceil(radius.x * 2 * this.fbo_size.width), max_radius),\n                        y: Math.min(Math.ceil(radius.y * 2 * this.fbo_size.height), max_radius)\n                    };\n                }\n\n                // allocate or resize\n                if (this.pixels == null || this.pixels.byteLength < diam_px.x * diam_px.y * 4) {\n                    this.pixels = new Uint8Array(diam_px.x * diam_px.y * 4);\n                }\n\n                // clear pixels\n                if (this.pixels.fill instanceof Function) {\n                    this.pixels.fill(0); // native typed array fill\n                }\n                else {\n                    for (let p=0; p < this.pixels.length; p++) {\n                        this.pixels[p] = 0;\n                    }\n                }\n\n                // capture pixels\n                gl.readPixels(\n                    Math.round(((point.x - radius.x) * this.fbo_size.width)),\n                    Math.round((1 - point.y - radius.y) * this.fbo_size.height),\n                    diam_px.x, diam_px.y, gl.RGBA, gl.UNSIGNED_BYTE, this.pixels);\n\n                // first check center pixel (avoid scanning all pixels if cursor is directly on a feature)\n                let p = (Math.round(diam_px.y / 2) * diam_px.x + Math.round(diam_px.x / 2)) * 4;\n                let v = this.pixels[p] + (this.pixels[p+1] << 8) + (this.pixels[p+2] << 16); // feature id in RGB channels\n                if (v > 0) {\n                    feature_key = (v + (this.pixels[p+3] << 24)) >>> 0; // worker id in alpha channel\n                    worker_id = this.pixels[p+3];\n                }\n                else {\n                    // scan all pixels for feature closest to cursor\n                    let min_dist = -1 >>> 0;\n                    p = 0;\n                    for (let y=0; y < diam_px.y; y++) {\n                        for (let x=0; x < diam_px.x; x++, p += 4) {\n                            v = this.pixels[p] + (this.pixels[p+1] << 8) + (this.pixels[p+2] << 16); // feature id in RGB channels\n                            if (v > 0) { // non-zero value indicates a feature\n                                // check to see if closer than last found feature\n                                let dist = (x - diam_px.x/2) * (x - diam_px.x/2) + (y - diam_px.y/2) * (y - diam_px.y/2);\n                                if (dist <= min_dist) {\n                                    // get worker id from alpha channel\n                                    feature_key = (v + (this.pixels[p+3] << 24)) >>> 0;\n                                    worker_id = this.pixels[p+3];\n                                    min_dist = dist;\n                                }\n                            }\n                        }\n                    }\n                }\n\n                // If feature found, ask appropriate web worker to lookup feature\n                if (worker_id !== 255) { // 255 indicates an empty selection buffer pixel\n                    if (this.workers[worker_id] != null) {\n                        WorkerBroker.postMessage(\n                            this.workers[worker_id],\n                            'self.getFeatureSelection',\n                            { id: request.id, key: feature_key })\n                            .then(message => {\n                                this.finishRead(message);\n                            });\n                    }\n                }\n                // No feature found, but still need to resolve promise\n                else {\n                    this.finishRead({ id: request.id });\n                }\n\n                request.sent = true;\n            }\n\n            gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n\n        }, this.read_delay);\n    }\n\n    // Called on main thread when a web worker finds a feature in the selection buffer\n    finishRead (message) {\n        var request = this.requests[message.id];\n        if (!request) {\n            log('error', 'FeatureSelection.finishRead(): could not find message', message);\n            return; // request was cleared before it returned\n        }\n\n        var feature = message.feature;\n        var changed = false;\n        if ((feature != null && this.feature == null) ||\n            (feature == null && this.feature != null) ||\n            (feature != null && this.feature != null &&\n                JSON.stringify(feature) !== JSON.stringify(this.feature))) {\n            changed = true;\n        }\n\n        this.feature = feature; // store the most recently selected feature\n\n        // Resolve the request\n        request.resolve({ feature, changed, request });\n        delete this.requests[message.id]; // done processing this request\n    }\n\n\n    // Selection map generation\n    // Each worker will create its own independent, 'local' selection map\n\n    // Create a unique 32-bit color to identify a feature\n    // Workers independently create/modify selection colors in their own threads, but we also\n    // need the main thread to know where each feature color originated. To accomplish this,\n    // we partition the map by setting the 4th component (alpha channel) to the worker's id.\n    static makeEntry(tile) {\n        // 32-bit color key\n        this.map_entry++;\n        var ir = this.map_entry & 255;\n        var ig = (this.map_entry >> 8) & 255;\n        var ib = (this.map_entry >> 16) & 255;\n        var ia = this.map_prefix;\n        var r = ir / 255;\n        var g = ig / 255;\n        var b = ib / 255;\n        var a = ia / 255;\n        var key = (ir + (ig << 8) + (ib << 16) + (ia << 24)) >>> 0; // need unsigned right shift to convert to positive #\n\n        this.map[key] = {\n            color: [r, g, b, a],\n        };\n        this.map_size++;\n\n        // Initialize tile-specific tracking info\n        if (!this.tiles[tile.key]) {\n            this.tiles[tile.key] = {\n                entries: [],                        // set of feature entries in this thread\n                tile: {                             // subset of tile properties to pass back with feature\n                    key: tile.key,\n                    coords: tile.coords,\n                    style_z: tile.style_z,\n                    source: tile.source,\n                    generation: tile.generation\n                }\n            };\n        }\n\n        this.tiles[tile.key].entries.push(key);\n\n        return this.map[key];\n    }\n\n    static makeColor(feature, tile, context) {\n        var selector = this.makeEntry(tile);\n        selector.feature = {\n            id: feature.id,\n            properties: feature.properties,\n            source_name: context.source,\n            source_layer: context.layer,\n            layers: context.layers,\n            tile: this.tiles[tile.key].tile\n        };\n\n        return selector.color;\n    }\n\n    static reset(sources) {\n        // Clear specific sources\n        if (Array.isArray(sources)) {\n            sources.forEach(source => this.clearSource(source));\n        }\n        // Clear all sources\n        else {\n            this.tiles = {};\n            this.map = {};\n            this.map_size = 0;\n            this.map_entry = 0;\n        }\n    }\n\n    static clearSource(source) {\n        for (let key in this.tiles) {\n            if (this.tiles[key].tile.source === source) {\n                this.clearTile(key);\n            }\n        }\n    }\n\n    static clearTile(key) {\n        if (this.tiles[key]) {\n            this.tiles[key].entries.forEach(k => delete this.map[k]);\n            this.map_size -= this.tiles[key].entries.length;\n            delete this.tiles[key];\n        }\n    }\n\n    static getMapSize() {\n        return this.map_size;\n    }\n\n    static setPrefix(prefix) {\n        this.map_prefix = prefix;\n    }\n\n}\n\n// Static properties\nFeatureSelection.map = {};   // this will be unique per module instance (so unique per worker)\nFeatureSelection.tiles = {}; // selection keys, by tile\nFeatureSelection.map_size = 0;\nFeatureSelection.map_entry = 0;\nFeatureSelection.map_prefix = 0; // set by worker to worker id #\nFeatureSelection.defaultColor = [0, 0, 0, 1];\n","// WebGL constants - need to import these separately to make them available in the web worker\n\nvar gl;\nexport default gl = {};\n\n/* DataType */\ngl.BYTE                           = 0x1400;\ngl.UNSIGNED_BYTE                  = 0x1401;\ngl.SHORT                          = 0x1402;\ngl.UNSIGNED_SHORT                 = 0x1403;\ngl.INT                            = 0x1404;\ngl.UNSIGNED_INT                   = 0x1405;\ngl.FLOAT                          = 0x1406;\n","// Manage rendering for primitives\nimport ShaderProgram from './shader_program';\nimport VertexArrayObject from './vao';\nimport Texture from './texture';\n\n// A single mesh/VBO, described by a vertex layout, that can be drawn with one or more programs\nexport default class VBOMesh  {\n\n    constructor(gl, vertex_data, element_data, vertex_layout, options) {\n        options = options || {};\n\n        this.gl = gl;\n        this.vertex_data = vertex_data; // typed array\n        this.element_data = element_data; // typed array\n        this.vertex_layout = vertex_layout;\n        this.vertex_buffer = this.gl.createBuffer();\n        this.buffer_size = this.vertex_data.byteLength;\n        this.draw_mode = options.draw_mode || this.gl.TRIANGLES;\n        this.data_usage = options.data_usage || this.gl.STATIC_DRAW;\n        this.vertices_per_geometry = 3; // TODO: support lines, strip, fan, etc.\n        this.uniforms = options.uniforms;\n        this.textures = options.textures; // any textures owned by this mesh\n        this.retain = options.retain || false; // whether to retain mesh data in CPU after uploading to GPU\n        this.created_at = +new Date();\n        this.fade_in_time = options.fade_in_time || 0; // optional time to fade in mesh\n\n        this.vertex_count = this.vertex_data.byteLength / this.vertex_layout.stride;\n        this.element_count = 0;\n        this.vaos = {}; // map of VertexArrayObjects, keyed by program\n\n        this.toggle_element_array = false;\n        if (this.element_data) {\n            this.toggle_element_array = true;\n            this.element_count = this.element_data.length;\n            this.geometry_count = this.element_count / this.vertices_per_geometry;\n            this.element_type = (this.element_data.constructor === Uint16Array) ? this.gl.UNSIGNED_SHORT: this.gl.UNSIGNED_INT;\n            this.element_buffer = this.gl.createBuffer();\n            this.buffer_size += this.element_data.byteLength;\n            this.gl.bindBuffer(this.gl.ELEMENT_ARRAY_BUFFER, this.element_buffer);\n            this.gl.bufferData(this.gl.ELEMENT_ARRAY_BUFFER, this.element_data, this.data_usage);\n        }\n        else {\n            this.geometry_count = this.vertex_count / this.vertices_per_geometry;\n        }\n\n        this.upload();\n\n        if (!this.retain) {\n            delete this.vertex_data;\n            delete this.element_data;\n        }\n        this.valid = true;\n    }\n\n    // Render, by default with currently bound program, or otherwise with optionally provided one\n    // Returns true if mesh requests a render on next frame (e.g. for fade animations)\n    render(options = {}) {\n        if (!this.valid) {\n            return false;\n        }\n\n        var program = options.program || ShaderProgram.current;\n        program.use();\n\n        if (this.uniforms) {\n            program.saveUniforms(this.uniforms);\n            program.setUniforms(this.uniforms, false); // don't reset texture unit\n        }\n\n        let visible_time = (+new Date() - this.created_at) / 1000;\n        program.uniform('1f', 'u_visible_time', visible_time);\n\n        this.bind(program);\n\n        if (this.toggle_element_array){\n            this.gl.drawElements(this.draw_mode, this.element_count, this.element_type, 0);\n        }\n        else {\n            this.gl.drawArrays(this.draw_mode, 0, this.vertex_count);\n        }\n\n        VertexArrayObject.bind(this.gl, null);\n\n        if (this.uniforms) {\n            program.restoreUniforms(this.uniforms);\n        }\n\n        // Request next render if mesh is fading in\n        return (visible_time < this.fade_in_time);\n    }\n\n    // Bind buffers and vertex attributes to prepare for rendering\n    bind(program) {\n        // Bind VAO for this progam, or create one\n        let vao = this.vaos[program.id];\n        if (vao) {\n            VertexArrayObject.bind(this.gl, vao);\n        }\n        else {\n            this.vaos[program.id] = VertexArrayObject.create(this.gl, () => {\n                this.gl.bindBuffer(this.gl.ARRAY_BUFFER, this.vertex_buffer);\n                if (this.toggle_element_array) {\n                    this.gl.bindBuffer(this.gl.ELEMENT_ARRAY_BUFFER, this.element_buffer);\n                }\n                this.vertex_layout.enableDynamicAttributes(this.gl, program);\n            });\n        }\n\n        this.vertex_layout.enableStaticAttributes(this.gl, program);\n    }\n\n    // Upload buffer data to GPU\n    upload() {\n        this.gl.bindBuffer(this.gl.ARRAY_BUFFER, this.vertex_buffer);\n        this.gl.bufferData(this.gl.ARRAY_BUFFER, this.vertex_data, this.data_usage);\n    }\n\n    destroy() {\n        if (!this.valid) {\n            return false;\n        }\n        this.valid = false;\n\n        for (let v in this.vaos) {\n            VertexArrayObject.destroy(this.gl, this.vaos[v]);\n        }\n\n        this.gl.deleteBuffer(this.vertex_buffer);\n        this.vertex_buffer = null;\n\n        if (this.element_buffer) {\n            this.gl.deleteBuffer(this.element_buffer);\n            this.element_buffer = null;\n        }\n\n        delete this.vertex_data;\n        delete this.element_data;\n\n        if (this.textures) {\n            this.textures.forEach(t => Texture.release(t));\n        }\n\n        return true;\n    }\n\n}\n","import GLSL from '../gl/glsl';\nimport StyleParser from '../styles/style_parser';\n\nimport material_source from './material.glsl';\n\nconst material_props = ['emission', 'ambient', 'diffuse', 'specular'];\n\nexport default class Material {\n    constructor (config) {\n\n        config = config || {};\n\n        // These properties all have the same defaults, so they can be set in bulk\n        material_props.forEach(prop => {\n            const value = config[prop];\n            if (value != null) {\n                if (value.texture) {\n                    this[prop] = {\n                        texture: value.texture,\n                        mapping: value.mapping || 'spheremap',\n                        scale: GLSL.expandVec3(value.scale != null ? value.scale : 1),\n                        amount: GLSL.expandVec4(value.amount != null ? value.amount : 1)\n                    };\n                }\n                else if (typeof value === 'number' || Array.isArray(value)) {\n                    this[prop] = { amount: GLSL.expandVec4(value) };\n                }\n                else if (typeof value === 'string') {\n                    this[prop] = { amount: StyleParser.parseColor(value) };\n                }\n                else {\n                    this[prop] = value;\n                }\n            }\n        });\n\n        // Extra specular props\n        if (this.specular) {\n            this.specular.shininess = config.shininess ? parseFloat(config.shininess) : 0.2;\n        }\n\n        // Normal mapping\n        if (config.normal != null) {\n            this.normal = {\n                texture: config.normal.texture,\n                mapping: config.normal.mapping || 'triplanar',\n                scale: GLSL.expandVec3(config.normal.scale != null ? config.normal.scale : 1),\n                amount: config.normal.amount != null ? config.normal.amount : 1\n            };\n        }\n    }\n\n    // Determine if a material config block has sufficient properties to create a material\n    static isValid (config) {\n        if (config == null) {\n            return false;\n        }\n\n        if (config.emission == null &&\n            config.ambient == null &&\n            config.diffuse == null &&\n            config.specular == null) {\n            return false;\n        }\n\n        return true;\n    }\n\n    inject (style) {\n        // For each property, sets defines to configure texture mapping, with a pattern like:\n        //   TANGRAM_MATERIAL_DIFFUSE, TANGRAM_MATERIAL_DIFFUSE_TEXTURE, TANGRAM_MATERIAL_DIFFUSE_TEXTURE_SPHEREMAP\n        // Also sets flags to keep track of each unique mapping type being used, e.g.:\n        //   TANGRAM_MATERIAL_TEXTURE_SPHEREMAP\n        // Enables texture coordinates if needed and not already on\n        material_props.forEach(prop => {\n            let def = `TANGRAM_MATERIAL_${prop.toUpperCase()}`;\n            let texdef = def + '_TEXTURE';\n            style.defines[def] = (this[prop] != null);\n            if (this[prop] && this[prop].texture) {\n                style.defines[texdef] = true;\n                style.defines[texdef + '_' + this[prop].mapping.toUpperCase()] = true;\n                style.defines[`TANGRAM_MATERIAL_TEXTURE_${this[prop].mapping.toUpperCase()}`] = true;\n                style.texcoords = style.texcoords || (this[prop].mapping === 'uv');\n            }\n        });\n\n        // Normal mapping\n        // As anove, sets flags to keep track of each unique mapping type being used, e.g.:\n        //   TANGRAM_MATERIAL_TEXTURE_SPHEREMAP\n        if (this.normal && this.normal.texture) {\n            style.defines['TANGRAM_MATERIAL_NORMAL_TEXTURE'] = true;\n            style.defines['TANGRAM_MATERIAL_NORMAL_TEXTURE_' + this.normal.mapping.toUpperCase()] = true;\n            style.defines[`TANGRAM_MATERIAL_TEXTURE_${this.normal.mapping.toUpperCase()}`] = true;\n            style.texcoords = style.texcoords || (this.normal.mapping === 'uv');\n        }\n\n        style.replaceShaderBlock(Material.block, material_source, 'Material');\n        style.addShaderBlock('setup', '\\nmaterial = u_material;\\n', 'Material');\n    }\n\n    setupProgram (_program) {\n        // For each property, sets uniforms in the pattern:\n        // u_material.diffuse, u_material.diffuseScale u_material_diffuse_texture\n        material_props.forEach(prop => {\n            if (this[prop]) {\n                if (this[prop].texture) {\n                    _program.setTextureUniform(`u_material_${prop}_texture`, this[prop].texture);\n                    _program.uniform('3fv', `u_material.${prop}Scale`, this[prop].scale);\n                    _program.uniform('4fv', `u_material.${prop}`, this[prop].amount);\n                } else if (this[prop].amount) {\n                    _program.uniform('4fv', `u_material.${prop}`, this[prop].amount);\n                }\n            }\n        });\n\n        // Extra specular props\n        if (this.specular) {\n            _program.uniform('1f', 'u_material.shininess', this.specular.shininess);\n        }\n\n        // Normal mapping\n        if (this.normal && this.normal.texture) {\n            _program.setTextureUniform('u_material_normal_texture', this.normal.texture);\n            _program.uniform('3fv', 'u_material.normalScale', this.normal.scale);\n            _program.uniform('1f', 'u_material.normalAmount', this.normal.amount);\n        }\n    }\n}\n\nMaterial.block = 'material';\n","/*** Vector functions - vectors provided as [x, y] or [x, y, z] arrays ***/\n\nvar Vector;\nexport default Vector = {};\n\nVector.copy = function (v) {\n    var V = [];\n    var lim = v.length;\n    for (var i = 0; i < lim; i++) {\n        V[i] = v[i];\n    }\n    return V;\n};\n\nVector.neg = function (v) {\n    var V = [];\n    var lim = v.length;\n    for (var i = 0; i < lim; i++) {\n        V[i] = -v[i];\n    }\n    return V;\n};\n\n// Addition of two vectors\nVector.add = function (v1, v2) {\n    var v = [];\n    var lim = Math.min(v1.length,v2.length);\n    for (var i = 0; i < lim; i++) {\n        v[i] = v1[i] + v2[i];\n    }\n    return v;\n};\n\n// Substraction of two vectors\nVector.sub = function (v1, v2) {\n    var v = [];\n    var lim = Math.min(v1.length,v2.length);\n\n    for (var i = 0; i < lim; i++) {\n        v[i] = v1[i] - v2[i];\n    }\n    return v;\n};\n\nVector.signed_area = function (v1, v2, v3) {\n    return (v2[0]-v1[0])*(v3[1]-v1[1]) - (v3[0]-v1[0])*(v2[1]-v1[1]);\n};\n\n// Multiplication of two vectors, or a vector and a scalar\nVector.mult = function (v1, v2) {\n    var v = [],\n        len = v1.length,\n        i;\n\n    if (typeof v2 === 'number') {\n        // Mulitply by scalar\n        for (i = 0; i < len; i++) {\n            v[i] = v1[i] * v2;\n        }\n    }\n    else {\n        // Multiply two vectors\n        len = Math.min(v1.length,v2.length);\n        for (i = 0; i < len; i++) {\n            v[i] = v1[i] * v2[i];\n        }\n    }\n    return v;\n};\n\n// Division of two vectors\nVector.div = function (v1, v2) {\n    var v = [],\n        i;\n    if(typeof v2 === 'number'){\n        // Divide by scalar\n        for (i = 0; i < v1.length; i++){\n            v[i] = v1[i] / v2;\n        }\n    } else {\n        // Divide to vectors\n        var len = Math.min(v1.length,v2.length);\n        for (i = 0; i < len; i++) {\n            v[i] = v1[i] / v2[i];\n        }\n    }\n    return v;\n};\n\n// Get 2D perpendicular\nVector.perp = function (v1, v2) {\n    return [\n        v2[1] - v1[1],\n        v1[0] - v2[0]\n    ];\n};\n\n// Get 2D vector rotated\nVector.rot = function (v, a) {\n    var c = Math.cos(a);\n    var s = Math.sin(a);\n    return [\n        v[0] * c - v[1] * s,\n        v[0] * s + v[1] * c\n    ];\n};\n\n// Get 2D counter-clockwise angle\n// Angles in quadrant I and II are mapped to [0, PI)\n// Angles in quadrant III and IV are mapped to [-PI, 0]\nVector.angle = function ([x, y]) {\n    return Math.atan2(y,x);\n};\n\n// Get angle between two vectors\nVector.angleBetween = function(A, B){\n    var delta = Vector.dot(\n        Vector.normalize(Vector.copy(A)),\n        Vector.normalize(Vector.copy(B))\n    );\n    if (delta > 1) {delta = 1;} // protect against floating point error\n    return Math.acos(delta);\n};\n\n// Compare two points\nVector.isEqual = function (v1, v2) {\n    var len = v1.length;\n    for (var i = 0; i < len; i++) {\n        if (v1[i] !== v2[i]){\n            return false;\n        }\n    }\n    return true;\n};\n\n// Vector length squared\nVector.lengthSq = function (v) {\n    if (v.length === 2) {\n        return (v[0]*v[0] + v[1]*v[1]);\n    }\n    else if (v.length >= 3) {\n        return (v[0]*v[0] + v[1]*v[1] + v[2]*v[2]);\n    }\n    return 0;\n};\n\n// Vector length\nVector.length = function (v) {\n    return Math.sqrt(Vector.lengthSq(v));\n};\n\n// Normalize a vector *in place* (use Vector.copy() if you need a new vector instance)\nVector.normalize = function (v) {\n    var d;\n    if (v.length === 2) {\n        d = v[0]*v[0] + v[1]*v[1];\n\n        if (d === 1) {\n            return v;\n        }\n\n        d = Math.sqrt(d);\n\n        if (d !== 0) {\n            v[0] /= d;\n            v[1] /= d;\n        }\n        else {\n            v[0] = 0, v[1] = 0;\n        }\n    } else if (v.length >= 3) {\n        d = v[0]*v[0] + v[1]*v[1] + v[2]*v[2];\n\n        if (d === 1) {\n            return v;\n        }\n\n        d = Math.sqrt(d);\n\n        if (d !== 0) {\n            v[0] /= d;\n            v[1] /= d;\n            v[2] /= d;\n        }\n        else {\n            v[0] = 0, v[1] = 0, v[2] = 0;\n        }\n    }\n    return v;\n};\n\n// Cross product of two vectors\nVector.cross  = function (v1, v2) {\n    if (v1.length === 2){\n        return v1[0] * v2[1] - v1[1] * v2[0];\n    }\n    else if (v1.length === 3){\n        return [\n            (v1[1] * v2[2]) - (v1[2] * v2[1]),\n            (v1[2] * v2[0]) - (v1[0] * v2[2]),\n            (v1[0] * v2[1]) - (v1[1] * v2[0])\n        ];\n    }\n};\n\n// Dot product of two vectors\nVector.dot = function (v1, v2) {\n    var n = 0;\n    var lim = Math.min(v1.length, v2.length);\n    for (var i = 0; i < lim; i++) {\n        n += v1[i] * v2[i];\n    }\n    return n;\n};\n","import ShaderProgram from '../gl/shader_program';\nimport GLSL from '../gl/glsl';\nimport Geo from '../utils/geo';\nimport Vector from '../utils/vector';\nimport StyleParser from '../styles/style_parser';\n\nimport ambient_source from './ambient_light.glsl';\nimport directional_source from './directional_light.glsl';\nimport point_source from './point_light.glsl';\nimport spot_source from './spot_light.glsl';\n\n// Abstract light\nexport default class Light {\n\n    constructor (view, config) {\n        this.name = config.name;\n        this.view = view;\n\n        if (config.ambient == null || typeof config.ambient === 'number') {\n            this.ambient = GLSL.expandVec3(config.ambient || 0);\n        }\n        else {\n            this.ambient = StyleParser.parseColor(config.ambient).slice(0, 3);\n        }\n\n        if (config.diffuse == null || typeof config.diffuse === 'number') {\n            this.diffuse = GLSL.expandVec3(config.diffuse != null ? config.diffuse : 1);\n        }\n        else {\n            this.diffuse = StyleParser.parseColor(config.diffuse).slice(0, 3);\n        }\n\n        if (config.specular == null || typeof config.specular === 'number') {\n            this.specular = GLSL.expandVec3(config.specular || 0);\n        }\n        else {\n            this.specular = StyleParser.parseColor(config.specular).slice(0, 3);\n        }\n    }\n\n    // Create a light by type name, factory-style\n    // 'config' must include 'name' and 'type', along with any other type-specific properties\n    static create (view, config) {\n        if (Light.types[config.type]) {\n            return new Light.types[config.type](view, config);\n        }\n    }\n\n    // Set light for a style: fragment lighting, vertex lighting, or none\n    static setMode (mode, style) {\n        if (mode === true) {\n            mode = 'fragment';\n        }\n        mode = Light.enabled && ((mode != null) ? mode : 'fragment'); // default to fragment lighting\n        style.defines['TANGRAM_LIGHTING_FRAGMENT'] = (mode === 'fragment');\n        style.defines['TANGRAM_LIGHTING_VERTEX'] = (mode === 'vertex');\n    }\n\n    // Inject all provided light definitions, and calculate cumulative light function\n    static inject (lights) {\n        // Clear previous injections\n        ShaderProgram.removeBlock(Light.block);\n\n        // If lighting is globally disabled, nothing is injected (mostly for debugging or live editing)\n        if (!Light.enabled) {\n            return;\n        }\n\n        // Construct code to calculate each light instance\n        let calculateLights = '';\n        if (lights && Object.keys(lights).length > 0) {\n            // Collect uniques types of lights\n            let types = {};\n            for (let light_name in lights) {\n                types[lights[light_name].type] = true;\n            }\n\n            // Inject each type of light\n            for (let type in types) {\n                Light.types[type].inject();\n            }\n\n            // Inject per-instance blocks and construct the list of functions to calculate each light\n            for (let light_name in lights) {\n                // Define instance\n                lights[light_name].inject();\n\n                // Add the calculation function to the list\n                calculateLights += `calculateLight(${light_name}, _eyeToPoint, _normal);\\n`;\n            }\n        }\n\n        // Glue together the final lighting function that sums all the lights\n        let calculateFunction = `\n            vec4 calculateLighting(in vec3 _eyeToPoint, in vec3 _normal, in vec4 _color) {\n\n                // Do initial material calculations over normal, emission, ambient, diffuse and specular values\n                calculateMaterial(_eyeToPoint,_normal);\n\n                // Un roll the loop of individual ligths to calculate\n                ${calculateLights}\n\n                //  Final light intensity calculation\n                vec4 color = vec4(vec3(0.), _color.a); // start with vertex color alpha\n\n                #ifdef TANGRAM_MATERIAL_EMISSION\n                    color.rgb = material.emission.rgb;\n                    color.a *= material.emission.a;\n                #endif\n\n                #ifdef TANGRAM_MATERIAL_AMBIENT\n                    color.rgb += light_accumulator_ambient.rgb * _color.rgb * material.ambient.rgb;\n                    color.a *= material.ambient.a;\n                #else\n                    #ifdef TANGRAM_MATERIAL_DIFFUSE\n                        color.rgb += light_accumulator_ambient.rgb * _color.rgb * material.diffuse.rgb;\n                    #endif\n                #endif\n\n                #ifdef TANGRAM_MATERIAL_DIFFUSE\n                    color.rgb += light_accumulator_diffuse.rgb * _color.rgb * material.diffuse.rgb;\n                    color.a *= material.diffuse.a;\n                #endif\n\n                #ifdef TANGRAM_MATERIAL_SPECULAR\n                    color.rgb += light_accumulator_specular.rgb * material.specular.rgb;\n                    color.a *= material.specular.a;\n                #endif\n\n                // Clamp final color\n                color = clamp(color, 0.0, 1.0);\n\n                return color;\n            }`;\n\n        ShaderProgram.addBlock(Light.block, calculateFunction);\n    }\n\n    // Common instance definition\n    inject () {\n        let instance =  `\n            uniform ${this.struct_name} u_${this.name};\n            ${this.struct_name} ${this.name};\n            `;\n        let assign = `\n            ${this.name} = u_${this.name};\\n\n        `;\n\n        ShaderProgram.addBlock(Light.block, instance);\n        ShaderProgram.addBlock('setup', assign);\n    }\n\n    // Update method called once per frame\n    update () {\n    }\n\n    // Called once per frame per program (e.g. for main render pass, then for each additional\n    // pass for feature selection, etc.)\n    setupProgram (_program) {\n        //  Three common light properties\n        _program.uniform('3fv', `u_${this.name}.ambient`, this.ambient);\n        _program.uniform('3fv', `u_${this.name}.diffuse`, this.diffuse);\n        _program.uniform('3fv', `u_${this.name}.specular`, this.specular);\n    }\n\n}\n\nLight.types = {}; // references to subclasses by short name\nLight.block = 'lighting'; // shader block name\nLight.enabled = true; // lighting can be globally enabled/disabled\n\n\n// Light subclasses\nclass AmbientLight extends Light {\n\n    constructor(view, config) {\n        super(view, config);\n        this.type = 'ambient';\n        this.struct_name = 'AmbientLight';\n    }\n\n    // Inject struct and calculate function\n    static inject() {\n        ShaderProgram.addBlock(Light.block, ambient_source);\n    }\n\n    setupProgram (_program) {\n        _program.uniform('3fv', `u_${this.name}.ambient`, this.ambient);\n    }\n\n}\nLight.types['ambient'] = AmbientLight;\n\nclass DirectionalLight extends Light {\n\n    constructor(view, config) {\n        super(view, config);\n        this.type = 'directional';\n        this.struct_name = 'DirectionalLight';\n\n        if (config.direction) {\n            this._direction = config.direction;\n        }\n        else {\n            // Default directional light maintains full intensity on ground, with basic extrusion shading\n            let theta = 135; // angle of light in xy plane (rotated around z axis)\n            let scale = Math.sin(Math.PI*60/180); // scaling factor to keep total directional intensity to 0.5\n            this._direction = [\n                Math.cos(Math.PI*theta/180) * scale,\n                Math.sin(Math.PI*theta/180) * scale,\n                -0.5\n            ];\n\n            if (config.ambient == null) {\n                this.ambient = GLSL.expandVec3(0.5);\n            }\n        }\n        this.direction = this._direction.map(parseFloat);\n    }\n\n    get direction () {\n        return this._direction;\n    }\n\n    set direction (v) {\n        this._direction = Vector.normalize(Vector.copy(v));\n    }\n\n    // Inject struct and calculate function\n    static inject() {\n        ShaderProgram.addBlock(Light.block, directional_source);\n    }\n\n    setupProgram (_program) {\n        super.setupProgram(_program);\n        _program.uniform('3fv', `u_${this.name}.direction`, this.direction);\n    }\n\n}\nLight.types['directional'] = DirectionalLight;\n\n\nclass PointLight extends Light {\n\n    constructor (view, config) {\n        super(view, config);\n        this.type = 'point';\n        this.struct_name = 'PointLight';\n\n        this.position = config.position || [0, 0, '100px'];\n        this.position_eye = []; // position in eyespace\n        this.origin = config.origin || 'ground';\n        this.attenuation = !isNaN(parseFloat(config.attenuation)) ? parseFloat(config.attenuation) : 0;\n\n        if (config.radius) {\n            if (Array.isArray(config.radius) && config.radius.length === 2) {\n                this.radius = config.radius;\n            }\n            else {\n                this.radius = [null, config.radius];\n            }\n        }\n        else {\n            this.radius = null;\n        }\n    }\n\n    // Inject struct and calculate function\n    static inject () {\n        ShaderProgram.addBlock(Light.block, point_source);\n    }\n\n    // Inject isntance-specific settings\n    inject() {\n        super.inject();\n\n        ShaderProgram.defines['TANGRAM_POINTLIGHT_ATTENUATION_EXPONENT'] = (this.attenuation !== 0);\n        ShaderProgram.defines['TANGRAM_POINTLIGHT_ATTENUATION_INNER_RADIUS'] = (this.radius != null && this.radius[0] != null);\n        ShaderProgram.defines['TANGRAM_POINTLIGHT_ATTENUATION_OUTER_RADIUS'] = (this.radius != null);\n    }\n\n    update () {\n        this.updateEyePosition();\n    }\n\n    updateEyePosition () {\n        if (this.origin === 'world') {\n            // For world origin, format is: [longitude, latitude, meters (default) or pixels w/px units]\n\n            // Move light's world position into camera space\n            const m = Geo.latLngToMeters([...this.position]);\n            this.position_eye[0] = m[0] - this.view.camera.position_meters[0];\n            this.position_eye[1] = m[1] - this.view.camera.position_meters[1];\n\n            this.position_eye[2] = StyleParser.convertUnits(this.position[2],\n                { zoom: this.view.zoom, meters_per_pixel: Geo.metersPerPixel(this.view.zoom) });\n            this.position_eye[2] = this.position_eye[2] - this.view.camera.position_meters[2];\n        }\n        else if (this.origin === 'ground' || this.origin === 'camera') {\n            // For camera or ground origin, format is: [x, y, z] in meters (default) or pixels w/px units\n\n            // Light is in camera space by default\n            this.position_eye = StyleParser.convertUnits(this.position,\n                { zoom: this.view.zoom, meters_per_pixel: Geo.metersPerPixel(this.view.zoom) });\n\n            if (this.origin === 'ground') {\n                // Leave light's xy in camera space, but z needs to be moved relative to ground plane\n                this.position_eye[2] = this.position_eye[2] - this.view.camera.position_meters[2];\n            }\n        }\n        this.position_eye[3] = 1;\n    }\n\n    setupProgram (_program) {\n        super.setupProgram(_program);\n\n        _program.uniform('4fv', `u_${this.name}.position`, this.position_eye);\n\n        if(ShaderProgram.defines['TANGRAM_POINTLIGHT_ATTENUATION_EXPONENT']) {\n            _program.uniform('1f', `u_${this.name}.attenuationExponent`, this.attenuation);\n        }\n\n        if(ShaderProgram.defines['TANGRAM_POINTLIGHT_ATTENUATION_INNER_RADIUS']) {\n            _program.uniform('1f', `u_${this.name}.innerRadius`,\n                StyleParser.convertUnits(this.radius[0],\n                    { zoom: this.view.zoom, meters_per_pixel: Geo.metersPerPixel(this.view.zoom) }));\n        }\n\n        if(ShaderProgram.defines['TANGRAM_POINTLIGHT_ATTENUATION_OUTER_RADIUS']) {\n            _program.uniform('1f', `u_${this.name}.outerRadius`,\n                StyleParser.convertUnits(this.radius[1],\n                    { zoom: this.view.zoom, meters_per_pixel: Geo.metersPerPixel(this.view.zoom) }));\n        }\n    }\n}\nLight.types['point'] = PointLight;\n\n\nclass SpotLight extends PointLight {\n\n    constructor (view, config) {\n        super(view, config);\n        this.type = 'spotlight';\n        this.struct_name = 'SpotLight';\n\n        this.direction = this._direction = (config.direction || [0, 0, -1]).map(parseFloat); // [x, y, z]\n        this.exponent = config.exponent ? parseFloat(config.exponent) : 0.2;\n        this.angle = config.angle ? parseFloat(config.angle) : 20;\n    }\n\n    get direction () {\n        return this._direction;\n    }\n\n    set direction (v) {\n        this._direction = Vector.normalize(Vector.copy(v));\n    }\n\n    // Inject struct and calculate function\n    static inject () {\n        ShaderProgram.addBlock(Light.block, spot_source);\n    }\n\n    setupProgram (_program) {\n        super.setupProgram(_program);\n\n        _program.uniform('3fv', `u_${this.name}.direction`, this.direction);\n        _program.uniform('1f', `u_${this.name}.spotCosCutoff`, Math.cos(this.angle * 3.14159 / 180));\n        _program.uniform('1f', `u_${this.name}.spotExponent`, this.exponent);\n    }\n\n}\nLight.types['spotlight'] = SpotLight;\n","\n\nexport class MethodNotImplemented extends Error {\n    constructor(methodName) {\n        super();\n        this.name    = 'MethodNotImplemented';\n        this.message = 'Method ' + methodName + ' must be implemented in subclass';\n    }\n}\n","/*jshint worker: true */\nimport Geo from '../utils/geo';\nimport {MethodNotImplemented} from '../utils/errors';\nimport Utils from '../utils/utils';\nimport sliceObject from '../utils/slice';\nimport * as URLs from '../utils/urls';\nimport log from '../utils/log';\n\nexport default class DataSource {\n\n    constructor (config, sources) {\n        this.validate(config);\n\n        this.config = config; // save original config\n        this.sources = sources; // full set of data sources TODO: centralize these like textures?\n        this.id = config.id;\n        this.name = config.name;\n        this.pad_scale = config.pad_scale || 0.00001; // scale tile up by small factor to cover seams\n        this.default_winding = null; // winding order will adapt to data source\n        this.rasters = []; // attached raster tile sources\n        if (Array.isArray(config.rasters)) { // copy unique set of raster sources\n            config.rasters.forEach(r => {\n                if (this.rasters.indexOf(r) === -1) {\n                    this.rasters.push(r);\n                }\n            });\n        }\n\n        // Optional function to preprocess source data\n        this.preprocess = config.preprocess;\n        if (typeof this.preprocess === 'function') {\n            this.preprocess.bind(this);\n        }\n\n        // Optional function to transform source data\n        this.transform = config.transform;\n        if (typeof this.transform === 'function') {\n            this.transform.bind(this);\n        }\n\n        // Optional additional data to pass to the transform function\n        this.extra_data = config.extra_data;\n\n        // Optional additional scripts made available to the transform function\n        // NOTE: these are loaded alongside the library when the workers are instantiated\n        this.scripts = config.scripts;\n\n        // Configure zoom ranges at which new data will be loaded\n        this.setZooms(config);\n\n        // set a custom extra overzoom adjustment factor to load consistently lower zoom levels\n        // than the current map zoom level â eg a zoom_offset of 1 would load z3 data at z4\n        this.zoom_offset = (config.zoom_offset != null) ? config.zoom_offset : 0;\n        if (this.zoom_offset < 0) {\n            let msg = `Data source '${this.name}' zoom_offset must not be negative â setting to 0.`;\n            log({ level: 'warn', once: true }, msg);\n            this.zoom_offset = 0;\n        }\n\n        this.setTileSize(config.tile_size);\n\n        // no tiles will be requested or displayed outside of these min/max values\n        this.min_display_zoom = Math.max(config.min_display_zoom || 0, this.zooms[0]);\n        this.max_display_zoom = (config.max_display_zoom != null) ? config.max_display_zoom : null;\n    }\n\n    // Register a new data source type name, providing a function that returns the class name\n    // to instantiate based on the source definition in the scene\n    static register (type_name, type_func) {\n        if (!type_name || !type_func) {\n            return;\n        }\n\n        DataSource.types[type_name] = type_func;\n    }\n\n    // Create a data source, factory-style\n    static create (source, sources) {\n        // Find the class to instantiate based on the source definition\n        if (typeof DataSource.types[source.type] === 'function') {\n            const source_class = DataSource.types[source.type](source);\n            if (source_class) {\n                return new source_class(source, sources);\n            }\n        }\n    }\n\n    // Check if a data source definition changed in a way that could affect which tiles are in view\n    static tileLayoutChanged (source, prev_source) {\n        if (!source || !prev_source) {\n            return true;\n        }\n\n        // subset of parameters that affect tile layout\n        const rebuild_params = [\n            'max_zoom',\n            'zooms',\n            'min_display_zoom',\n            'max_display_zoom',\n            'bounds',\n            'tile_size',\n            'zoom_offset'\n        ];\n        const cur = sliceObject(source.config, rebuild_params);\n        const prev = sliceObject(prev_source.config, rebuild_params);\n\n        return JSON.stringify(cur) !== JSON.stringify(prev);\n    }\n\n    // Mercator projection\n    static projectData (source) {\n        var timer = +new Date();\n        for (var t in source.layers) {\n            var num_features = source.layers[t].features.length;\n            for (var f=0; f < num_features; f++) {\n                var feature = source.layers[t].features[f];\n                Geo.transformGeometry(feature.geometry, this.projectCoord);\n            }\n        }\n\n        if (source.debug !== undefined) {\n            source.debug.projection = +new Date() - timer;\n        }\n    }\n\n    static projectCoord (coord) {\n        Geo.latLngToMeters(coord);\n    }\n\n    /**\n     Re-scale geometries within each source to internal tile units\n    */\n    static scaleData (source, { coords: { z }, min }) {\n        let units_per_meter = Geo.unitsPerMeter(z);\n        for (var t in source.layers) {\n            var num_features = source.layers[t].features.length;\n            for (var f=0; f < num_features; f++) {\n                var feature = source.layers[t].features[f];\n                Geo.transformGeometry(feature.geometry, coord => {\n                    coord[0] = (coord[0] - min.x) * units_per_meter;\n                    coord[1] = (coord[1] - min.y) * units_per_meter * -1; // flip coords positive\n                });\n            }\n        }\n    }\n\n    load (dest) {\n        dest.source_data = {};\n        dest.source_data.layers = {};\n        dest.pad_scale = this.pad_scale;\n        dest.rasters = [...this.rasters]; // copy list of rasters to load for tile\n\n        return this._load(dest).then((dest) => {\n            // Post-processing\n            for (let layer in dest.source_data.layers) {\n                let data = dest.source_data.layers[layer];\n                if (data && data.features) {\n                    data.features.forEach(feature => {\n                        Geo.transformGeometry(feature.geometry, coord => {\n                            // Flip Y coords\n                            coord[1] = -coord[1];\n\n                            // Slightly scale up tile to cover seams\n                            if (this.pad_scale) {\n                                coord[0] = Math.round(coord[0] * (1 + this.pad_scale) - (Geo.tile_scale * this.pad_scale/2));\n                                coord[1] = Math.round(coord[1] * (1 + this.pad_scale) - (Geo.tile_scale * this.pad_scale/2));\n                            }\n                        });\n\n                        // Use first encountered polygon winding order as default for data source\n                        this.updateDefaultWinding(feature.geometry);\n                    });\n                }\n            }\n\n            dest.default_winding = this.default_winding || 'CCW';\n            return dest;\n        });\n    }\n\n    // Sub-classes must implement\n    _load (/*dest*/) {\n        throw new MethodNotImplemented('_load');\n    }\n\n    // Copy source data from another tile (so we can reuse source data for overzoomed tiles)\n    copyTileData (source, dest) {\n        log('trace', `Copy tile data from ${source.key} to ${dest.key}`);\n        dest.source_data = { layers: source.source_data.layers };\n        dest.rasters = [...source.rasters];\n        dest.pad_scale = source.pad_scale;\n        dest.default_winding = source.default_winding;\n        return dest;\n    }\n\n    // Configure zoom ranges at which new data will be loaded\n    // e.g. can be used to skip fetching data for some zooms, reusing data from next lowest available zoom instead\n    setZooms ({ max_zoom, zooms }) {\n        // overzoom will apply for zooms higher than this\n        this.max_zoom = (max_zoom != null) ? max_zoom : Geo.default_source_max_zoom;\n        if (Array.isArray(zooms)) {\n            this.zooms = zooms; // TODO: support range parsing, e.g. [0-4, 6-7, 12]?\n            this.max_zoom = this.zooms[this.zooms.length-1]; // overrides `max_zoom` when both are present\n        }\n        else {\n            this.zooms = [];\n            for (let i = 0; i <= this.max_zoom; i++) {\n                this.zooms[i] = i;\n            }\n        }\n    }\n\n    // Set the internal tile size in pixels, e.g. '256px' (default), '512px', etc.\n    // Must be a power of 2, and greater than or equal to 256\n    setTileSize (tile_size) {\n        this.tile_size = tile_size || 256;\n        if (typeof this.tile_size !== 'number' || this.tile_size < 256 || !Utils.isPowerOf2(this.tile_size)) {\n            log({ level: 'warn', once: true },\n                `Data source '${this.name}': 'tile_size' parameter must be a number that is a power of 2 greater than or equal to 256, but was '${tile_size}'`);\n            this.tile_size = 256;\n        }\n\n        // # of zoom levels bigger than 256px tiles - 8 in place of log2(256)\n        // Many Tangram functions assume 256px tiles, this factor adjusts for the\n        // case of bigger tile sizes - eg 512px tiles are 1 zoom level bigger,\n        // 1024px tiles are 2 levels bigger\n        this.zoom_bias = Math.log2(this.tile_size) - 8 + this.zoom_offset;\n    }\n\n    // Infer winding for data source from first ring of provided geometry\n    updateDefaultWinding (geom) {\n        if (this.default_winding == null) {\n            if (geom.type === 'Polygon') {\n                this.default_winding = Geo.ringWinding(geom.coordinates[0]);\n            }\n            else if (geom.type === 'MultiPolygon') {\n                this.default_winding = Geo.ringWinding(geom.coordinates[0][0]);\n            }\n        }\n        return this.default_winding;\n    }\n\n    // All data sources support a min zoom, tiled sources can subclass for more specific limits (e.g. bounding box)\n    includesTile (coords, style_z) {\n        // Limit by this data source\n        if (coords.z < this.min_display_zoom || (this.max_display_zoom != null && style_z > this.max_display_zoom)) {\n            return false;\n        }\n\n        // Limit by any dependent raster sources\n        for (let r=0; r < this.rasters.length; r++) {\n            const source_name = this.rasters[r];\n            if (this.sources[source_name] &&\n                this.sources[source_name] !== this &&\n                !this.sources[source_name].includesTile(coords, coords.z)) {\n                return false;\n            }\n        }\n\n        return true;\n    }\n\n    validate (/*source*/) {\n    }\n\n}\n\nDataSource.types = {}; // set of supported data source classes, referenced by type name\n\n\n/*** Generic network loading source - abstract class ***/\n\nlet network_request_id = 0; // used to namespace URL requests\n\nexport class NetworkSource extends DataSource {\n\n    constructor (source, sources) {\n        super(source, sources);\n        this.response_type = ''; // use to set explicit XHR type\n\n        // Add extra URL params, and warn on duplicates\n        let [url, dupes] = URLs.addParamsToURL(source.url, source.url_params);\n        this.url = url;\n        dupes.forEach(([param, value]) => {\n            log({ level: 'warn', once: true },\n                `Data source '${this.name}': parameter '${param}' already present in URL '${source.url}', ` +\n                `skipping value '${param}=${value}' specified in 'url_params'`);\n        });\n\n        // Optional HTTP request headers to send\n        if (source.request_headers && typeof source.request_headers === 'object') {\n            this.request_headers = source.request_headers;\n        }\n    }\n\n    _load (dest) {\n        let url = this.formatURL(this.url, dest);\n\n        let source_data = dest.source_data;\n        source_data.url = url;\n        dest.debug = dest.debug || {};\n        dest.debug.network = +new Date();\n\n        return new Promise(resolve => {\n            let request_id = (network_request_id++) + '-' + url;\n            let promise = Utils.io(url, 60 * 1000, this.response_type, 'GET', this.request_headers, request_id);\n\n            source_data.request_id = request_id;\n            source_data.error = null;\n\n            promise.then(({ body }) => {\n                dest.debug.response_size = body && (body.length || body.byteLength);\n                dest.debug.network = +new Date() - dest.debug.network;\n                dest.debug.parsing = +new Date();\n\n                // Apply optional data transform on raw network response\n                if (body != null && typeof this.preprocess === 'function') {\n                    body = this.preprocess(body);\n                }\n\n                // Return data immediately, or after user-returned promise resolves\n                body = (body instanceof Promise) ? body : Promise.resolve(body);\n                body.then(body => {\n                    if (body != null) {\n                        this.parseSourceData(dest, source_data, body);\n                    }\n                    else {\n                        source_data.layers = {}; // for cases where server returned no content (e.g. 204 response)\n                    }\n                    dest.debug.parsing = +new Date() - dest.debug.parsing;\n                    resolve(dest);\n                });\n            }).catch((error) => {\n                source_data.error = error.stack;\n                resolve(dest); // resolve request but pass along error\n            });\n        });\n    }\n\n    validate (source) {\n        if (typeof source.url !== 'string') {\n            throw Error('Network data source must provide a string `url` property');\n        }\n    }\n\n    // Sub-classes must implement:\n\n    formatURL (/*url_template, dest*/) {\n        throw new MethodNotImplemented('formatURL');\n    }\n\n    parseSourceData (/*dest, source, reponse*/) {\n        throw new MethodNotImplemented('parseSourceData');\n    }\n}\n\n\n/*** Generic network tile loading - abstract class ***/\n\nexport class NetworkTileSource extends NetworkSource {\n\n    constructor (source, sources) {\n        super(source, sources);\n\n        this.tiled = true;\n        this.bounds = this.parseBounds(source);\n\n        // indicates if source should build geometry tiles, enabled for sources referenced in the scene's layers,\n        // and left disabled for sources that are never referenced, or only used as raster textures\n        this.builds_geometry_tiles = false;\n\n        this.tms = (source.tms === true); // optionally flip tile coords for TMS\n\n        // optional list of subdomains to round-robin through\n        if (this.url && this.url.search('{s}') > -1) {\n            if (Array.isArray(source.url_subdomains) && source.url_subdomains.length > 0) {\n                this.url_subdomains = source.url_subdomains;\n                this.next_url_subdomain = 0;\n            }\n            else {\n                log({ level: 'warn', once: true },\n                    `Data source '${this.name}': source URL includes '{s}' subdomain marker ('${this.url}'), but no subdomains ` +\n                    'were specified in \\'url_subdomains\\' parameter');\n            }\n        }\n\n        // optional list of pixel density scale modifiers\n        if (this.url && this.url.search('{r}') > -1) {\n            if (Array.isArray(source.url_density_scales) && source.url_density_scales.length > 0) {\n                this.url_density_scales = source.url_density_scales;\n            }\n            else {\n                this.url_density_scales = [1, 2]; // default to supporting 1x and 2x display densities\n            }\n        }\n    }\n\n    // Get bounds from source config parameters\n    parseBounds (source) {\n        if (Array.isArray(source.bounds) && source.bounds.length === 4) {\n            const [w, s, e, n] = source.bounds;\n            return {\n                latlng: [...source.bounds],\n                meters: {\n                    min: Geo.latLngToMeters([w, n]),\n                    max: Geo.latLngToMeters([e, s]),\n                },\n                tiles: { // max tile bounds per zoom (lazily evaluated)\n                    min: {},\n                    max: {}\n                }\n            };\n        }\n    }\n\n    // Returns false if tile is outside data source's bounds, true if within\n    checkBounds (coords, bounds) {\n        // Check tile bounds\n        if (bounds) {\n            // get tile and bounds coords at current zoom, wrapping to keep x coords in positive range\n            coords = Geo.wrapTile(coords);\n\n            let min = bounds.tiles.min[coords.z];\n            if (!min) {\n                min = bounds.tiles.min[coords.z] = Geo.tileForMeters(bounds.meters.min, coords.z);\n            }\n\n            let max = bounds.tiles.max[coords.z];\n            if (!max) {\n                max = bounds.tiles.max[coords.z] = Geo.tileForMeters(bounds.meters.max, coords.z);\n            }\n\n            // check latitude\n            if (coords.y < min.y || coords.y > max.y) {\n                return false;\n            }\n\n            // longitude bounds are between meridians\n            if (min.x <= max.x) {\n                if (coords.x < min.x || coords.x > max.x) {\n                    return false;\n                }\n            }\n            // longitude bounds cross the antimeridian\n            else if (coords.x > max.x && coords.x < min.x) {\n                return false;\n            }\n        }\n        return true;\n    }\n\n    includesTile (coords, style_z) {\n        if (!super.includesTile(coords, style_z)) {\n            return false;\n        }\n\n        // Check tile bounds\n        if (!this.checkBounds(coords, this.bounds)) {\n            return false;\n        }\n        return true;\n    }\n\n    formatURL (url_template, tile) {\n        let coords = Geo.wrapTile(tile.coords, { x: true });\n\n        if (this.tms) {\n            coords.y = Math.pow(2, coords.z) - 1 - coords.y; // optionally flip tile coords for TMS\n        }\n\n        // tile URL template replacement\n        let url = url_template\n            .replace('{x}', coords.x)\n            .replace('{y}', coords.y)\n            .replace('{z}', coords.z)\n            .replace('{r}', this.getDensityModifier()) // modify URL by display density (e.g. @2x)\n            .replace('{q}', this.toQuadKey(coords)); // quadkey for tile coordinates\n\n        if (this.url_subdomains != null) {\n            url = url.replace('{s}', this.url_subdomains[this.next_url_subdomain]);\n            this.next_url_subdomain = (this.next_url_subdomain + 1) % this.url_subdomains.length;\n        }\n        return url;\n    }\n\n    // Find the right tile URL modifier based on the display density, e.g. add `@2x` for sources supporting 2x tiles.\n    // Source `url_density_scales` param can specify an array of densities supported by the source,\n    // each entry serves as a threshold based on the current display density.\n    getDensityModifier () {\n        if (this.url_density_scales) {\n            // find the highest matching density\n            const dpr = Utils.device_pixel_ratio;\n            let scale = this.url_density_scales\n                .filter(s => dpr >= s)\n                .reverse()[0];\n\n            // default to first scale if none matched\n            scale = (scale != null ? scale : this.url_density_scales[0]);\n\n            // scales higher than 1x use the `@` modifier (e.g. `@2x`)\n            if (scale > 1) {\n                return `@${scale}x`;\n            }\n        }\n        return ''; // for 1x (or less) displays, no URL modifier is used (following @2x URL convention)\n    }\n\n    toQuadKey ({ x, y, z }) {\n        let quadkey = '';\n        for (let i = z; i > 0; i--) {\n            let b = 0;\n            let mask = 1 << (i - 1);\n            if ((x & mask) !== 0) b++;\n            if ((y & mask) !== 0) b += 2;\n            quadkey += b.toString();\n        }\n        return quadkey;\n    }\n\n    // Checks for the x/y/z tile pattern in URL template\n    static urlHasTilePattern (url) {\n        return url && (\n            (url.search('{x}') > -1 && url.search('{y}') > -1 && url.search('{z}') > -1) ||\n            url.search('{q}') > -1\n        );\n    }\n\n}\n","export const TileID = {\n\n    coord(c) {\n        return {x: c.x, y: c.y, z: c.z, key: this.coordKey(c)};\n    },\n\n    coordKey({x, y, z}) {\n        return x + '/' + y + '/' + z;\n    },\n\n    key (coords, source, style_z) {\n        if (coords.y < 0 || coords.y >= (1 << coords.z) || coords.z < 0) {\n            return; // cull tiles out of range (x will wrap)\n        }\n        return [source.name, coords.x, coords.y, coords.z, style_z].join('/');\n    },\n\n    normalizedKey (coords, source, style_z) {\n        return this.key(this.normalizedCoord(coords, source), source, style_z);\n    },\n\n    normalizedCoord (coords, source) {\n        if (source.zoom_bias) {\n            coords = this.coordAtZoom(coords, Math.max(coords.z - source.zoom_bias, source.zooms[0]));\n        }\n        return this.coordForTileZooms(coords, source.zooms);\n    },\n\n    coordAtZoom({x, y, z}, zoom) {\n        zoom = Math.max(0, zoom); // zoom can't go below zero\n        if (z !== zoom) {\n            let zscale = Math.pow(2, z - zoom);\n            x = Math.floor(x / zscale);\n            y = Math.floor(y / zscale);\n            z = zoom;\n        }\n        return this.coord({x, y, z});\n    },\n\n    coordForTileZooms({ x, y, z }, zooms) {\n        const nz = this.findZoomInRange(z, zooms);\n        if (nz !== z) {\n            return this.coordAtZoom({ x, y, z }, nz);\n        }\n        return this.coord({ x, y, z });\n    },\n\n    findZoomInRange(z, zooms) {\n        return zooms.filter(s => z >= s).reverse()[0] || zooms[0];\n    },\n\n    isDescendant(parent, descendant) {\n        if (descendant.z > parent.z) {\n            let {x, y} = this.coordAtZoom(descendant, parent.z);\n            return (parent.x === x && parent.y === y);\n        }\n        return false;\n    },\n\n    // Return identifying info for tile's parent tile\n    parent ({ coords, source, style_z }) {\n        if (style_z > 0) { // no more tiles above style zoom 0\n            style_z--;\n            const sz = Math.max(style_z - source.zoom_bias, source.zooms[0]); // z can't be lower than tile source\n            const c = this.coordForTileZooms(this.coordAtZoom(coords, sz), source.zooms);\n\n            if (c.z > style_z) {\n                return null;\n            }\n\n            return {\n                key: this.key(c, source, style_z),\n                coords: c,\n                style_z,\n                source\n            };\n        }\n    },\n\n    // Return identifying info for tile's child tiles\n    children ({ coords, source, style_z }, CACHE = {}) {\n        style_z++;\n        const c = this.coordForTileZooms(this.coordAtZoom(coords, style_z - source.zoom_bias), source.zooms);\n        if (c.z === coords.z) {\n            // same coord zoom for next level down\n            return [{\n                key: this.key(c, source, style_z),\n                coords: c,\n                style_z,\n                source\n            }];\n        }\n        else {\n            // coord zoom advanced down\n            const key = this.key(c, source, style_z);\n            CACHE[source.id] = CACHE[source.id] || {};\n            if (CACHE[source.id][key] == null) {\n                const span = Math.pow(2, c.z - coords.z);\n                const x = coords.x * span;\n                const y = coords.y * span;\n                let children = [];\n                for (let nx = x; nx < x + span; nx++) {\n                    for (let ny = y; ny < y + span; ny++) {\n                        let nc = this.coord({ x: nx, y: ny, z: c.z });\n                        children.push({\n                            key: this.key(nc, source, style_z),\n                            coords: nc,\n                            style_z,\n                            source\n                        });\n                    }\n                }\n                CACHE[source.id][key] = children;\n            }\n            return CACHE[source.id][key];\n        }\n    }\n\n};\n","import DataSource, {NetworkTileSource} from './data_source';\nimport {TileID} from '../tile/tile_id';\nimport Geo from '../utils/geo';\nimport Texture from '../gl/texture';\nimport Utils from '../utils/utils';\nimport hashString from '../utils/hash';\nimport log from '../utils/log';\n\nexport class RasterTileSource extends NetworkTileSource {\n\n    constructor (source, sources) {\n        super(source, sources);\n\n        if (this.rasters.indexOf(this.name) === -1) {\n            this.rasters.unshift(this.name); // add this raster as the first\n        }\n        this.filtering = source.filtering; // optional texture filtering (nearest, linear, mipmap)\n\n        // save texture objects by tile key, so URL remains stable if tile is built multiple times,\n        // e.g. avoid re-loading the same tile texture under a different subdomain when using tile hosts\n        this.textures = {};\n    }\n\n    async load (tile) {\n        tile.source_data = {};\n        tile.source_data.layers = {};\n        tile.pad_scale = this.pad_scale;\n        tile.rasters = [...this.rasters]; // copy list of rasters to load for tile\n\n        // Generate a single quad that fills the entire tile\n        let scale = Geo.tile_scale;\n        tile.source_data.layers = {\n            _default: {\n                type: 'FeatureCollection',\n                features: [{\n                    geometry: {\n                        type: 'Polygon',\n                        coordinates: [[\n                            [0, 0], [scale, 0],\n                            [scale, -scale], [0, -scale], [0, 0]\n                        ]]\n                    },\n                    properties: {}\n                }]\n            }\n        };\n\n        tile.default_winding = 'CW';\n        return tile;\n    }\n\n    // Return texture info for a raster tile\n    async tileTexture (tile) {\n        let coords = this.adjustRasterTileZoom(tile);\n        let key = coords.key;\n        // texture definitions are cached to avoid loading the same raster tile multiple times,\n        // e.g. due to slightly different URLs when subdomain pattern is used (a.tile.com vs. b.tile.com)\n        if (!this.textures[key]) {\n            let url = this.formatURL(this.url, { coords });\n            this.textures[key] = {\n                name: url,\n                url,\n                filtering: this.filtering,\n                coords\n            };\n        }\n        return this.textures[key];\n    }\n\n    // If the raster is attached to another source, we need to compare their levels of zoom detail\n    // to see if any adjustments are needed. Both the `tile_size` and `zoom_offset` data source params\n    // cause the zoom level to be downsampled relative to the \"base\" zoom level of the map view.\n    // The attaching source has already applied its own zoom downsampling. If this source has a lower\n    // level of detail, we apply the remaining differential here.\n    adjustRasterTileZoom (tile) {\n        let coords = tile.coords;\n        const tile_source = this.sources[tile.source];\n        if (tile_source !== this) { // no-op if the raster source isn't being rendered as an attachment\n            let zdiff = this.zoom_bias - tile_source.zoom_bias; // difference in zoom detail between the sources\n            if (zdiff > 0) { // raster source is less detailed\n                // do extra zoom adjustment and apply this raster source's max zoom\n                coords = TileID.normalizedCoord(tile.coords, {\n                    zoom_bias: zdiff,\n                    zooms: this.zooms\n                });\n            }\n            else {\n                // raster source supports higher detail, but was downsampled to match (the downsampling already\n                // happened upstream, when the attaching source calculated its own tile coordinate)\n                if (zdiff < 0) {\n                    log({ level: 'warn', once: true},\n                        `Raster source '${this.name}' supports higher zoom detail than source '${tile_source.name}' ` +\n                        `it's attached to. Downsampling this source ${-zdiff} extra zoom levels to match.`\n                    );\n                }\n\n                // no extra zoom adjustment needed, but still need to apply this raster source's max zoom\n                coords = TileID.coordForTileZooms(coords, this.zooms);\n            }\n        }\n        return coords;\n    }\n\n}\n\n// Data source for loading standalone, geo-referenced raster images\n// The `bounds` parameter is used to position the raster image on the map\n// Currently, only axis-aligned, rectangular North-up images are supported\n// TODO: add support for arbitrarily rotated images and quadrangle control points\nexport class RasterSource extends RasterTileSource {\n\n    constructor (source, sources) {\n        super(source, sources);\n\n        this.load_image = {}; // resolves to image, cached for life of data source\n\n        // alpha factor applied at time raster images are loaded and tiled (*not* at shader render-time)\n        this.alpha = (source.alpha != null) ? Math.max(Math.min(source.alpha, 1), 0) : null;\n\n        // non-full-alpha pixels should be discarded (for rendering rasters w/opaque blend)\n        this.mask_alpha = true;\n\n        // don't retain tiles for this source from nearby zooms (to improve memory usage)\n        this.preserve_tiles_within_zoom = 0;\n\n        // optionally set a max pixel density used for generated raster tiles (to improve memory usage)\n        this.max_display_density = source.max_display_density;\n\n        // Optionally composite multiple images into one raster layer\n        if (Array.isArray(source.composite)) {\n            // TODO: calculate enclosing bounding box to speed tile intersection checks\n            this.images = source.composite.map(s => {\n                return {\n                    url: s.url,\n                    bounds: this.parseBounds(s),\n                    alpha: (s.alpha != null) ? Math.max(Math.min(s.alpha, 1), 0) : null\n                };\n            });\n        }\n        // Single image raster layer\n        else {\n            this.images = [{\n                url: this.url,\n                bounds: this.bounds,\n                alpha: this.alpha\n            }];\n        }\n    }\n\n    // Render the sub-rectangle of the source raster image for the given tile, to a texture.\n    // Clipping the source image to individual raster tiles naturally partitions images\n    // (which may be large or only have a small portion in current view), and maintains\n    // consistency with the raster tile pipeline allowing for sampling within the fragment shader,\n    // and clipping the raster against vector source data.\n    async tileTexture (tile, { blend, generation }) {\n        let coords = this.adjustRasterTileZoom(tile);\n        const use_alpha = (blend !== 'opaque'); // ignore source alpha multiplier with opaque blending\n        const name = `raster-${this.name}-${coords.key}-${use_alpha ? 'alpha' : 'opaque'}-${generation}`; // unique texture name\n\n        // only render each raster tile once (per scene generation)\n        if (Texture.textures[name]) {\n            return {\n                name,\n                coords,\n\n                // tell style to skip re-creating this texture\n                // we have an explicit flag for this because element-based (e.g. canvas) textures\n                // are usually considered dynamic and always re-created when a new tile needs them\n                // (because the user could have updated the canvas pixel contents outside of Tangram)\n                skip_create: true\n            };\n        }\n\n        // Display density, with extra 2x for better intra-zoom scaling, because raster tiles\n        // can be scaled up to 100% before next zoom level is loaded\n        let dpr = Utils.device_pixel_ratio;\n        if (this.max_display_density) {\n            dpr = Math.min(dpr, this.max_display_density); // optionally cap pixel density\n        }\n        dpr *= 2;\n\n        const canvas = document.createElement('canvas');\n        const ctx = canvas.getContext('2d');\n        canvas.width = this.tile_size * dpr; // adjusted for display density\n        canvas.height = this.tile_size * dpr;\n\n        // Applies nearest neighbor filtering to the canvas image rendering when data source requests it\n        // NB: does not work on IE11 (image will be blurry when scaled)\n        ctx.imageSmoothingEnabled = (this.filtering !== 'nearest');\n\n        // Draw one or more images\n        const images = this.images.filter(r => this.checkBounds(tile.coords, r.bounds));\n        await Promise.all(images.map(i => {\n            // TODO: log warning if alpha specified but will be ignored (in opaque mode)?\n            const alpha = (use_alpha ? (i.alpha != null ? i.alpha : this.alpha) : 1);\n            return this.drawImage(i.url, i.bounds, alpha, tile, dpr, ctx);\n        }));\n\n        // texture config\n        return {\n            name,\n            element: canvas,\n            filtering: this.filtering,\n            coords\n        };\n    }\n\n    // Draw a single image to the tile canvas based on on its bounds\n    async drawImage (url, bounds, alpha, tile, dpr, ctx) {\n        // Get source raster image\n        const key = hashString(url); // use hash of URL for shorter keys\n        this.load_image[key] = this.load_image[key] || this.loadImage(url);\n        const image = await this.load_image[key];\n\n        // Meters per pixel for this zoom, adjusted for display density and source tile size (e.g. 512px tiles)\n        const mpp = Geo.metersPerPixel(tile.coords.z) / dpr / (this.tile_size / Geo.tile_size);\n\n        // Raster origin relative to tile origin (get delta in meters, then convert to pixels)\n        const dx = (bounds.meters.min[0] - tile.min.x) / mpp;\n        const dy = -(bounds.meters.min[1] - tile.min.y) / mpp;\n\n        // Raster size in pixels for current zoom\n        const sx = (bounds.meters.max[0] - bounds.meters.min[0]) / mpp;\n        const sy = -(bounds.meters.max[1] - bounds.meters.min[1]) / mpp;\n\n        // Draw the raster, clipped to the current tile\n        // NB: this is drawing the *whole* raster, no matter how large, and relying on the native Canvas clipping.\n        // May want to benchmark with a pre-clipped draw area, though the native implementation is likely fast,\n        // and has to apply its own clipping check anyway.\n        ctx.globalAlpha = (alpha != null) ? alpha : 1;\n        ctx.drawImage(image, dx, dy, sx, sy);\n    }\n\n    // Load source raster image\n    loadImage (url) {\n        return new Promise(resolve => {\n            let image = new Image();\n            image.onload = () => resolve(image);\n            image.onerror = e => {\n                // Warn and resolve on error\n                log('warn', `Raster source '${this.name}': failed to load url: '${url}'`, e);\n                resolve(null);\n            };\n\n            // Safari has a bug loading data-URL images with CORS enabled, so it must be disabled in that case\n            // https://bugs.webkit.org/show_bug.cgi?id=123978\n            if (!(Utils.isSafari() && url.slice(0, 5) === 'data:')) {\n                image.crossOrigin = 'anonymous';\n            }\n\n            image.src = url;\n        });\n    }\n\n    // Checks if tile interects any rasters in this source\n    includesTile (coords, style_z) {\n        // Checks zoom range and dependent rasters\n        if (!DataSource.prototype.includesTile.call(this, coords, style_z)) {\n            return false;\n        }\n\n        return this.images.some(r => this.checkBounds(coords, r.bounds)); // check if any images intersect\n    }\n\n    validate (source) {\n        const is_composite = Array.isArray(source.composite);\n\n        let url_msg = 'Raster data source must provide a string `url` parameter, or an array of `composite` raster ';\n        url_msg += 'image objects that each have a `url` parameter';\n\n        let bounds_msg = 'Raster data source must provide a `bounds` parameter, or an array of `composite` raster ';\n        bounds_msg += 'image objects that each have a `bounds` parameter';\n\n        let mutex_msg = 'Raster data source must have *either* a single image specified as `url` and `bounds `';\n        mutex_msg += 'parameters, or an array of `composite` raster image objects, each with `url` and `bounds`.';\n\n        if (is_composite) {\n            if (source.composite.some(s => typeof s.url !== 'string')) {\n                throw Error(url_msg);\n            }\n\n            if (source.composite.some(s => !(Array.isArray(s.bounds) && s.bounds.length === 4))) {\n                throw Error(bounds_msg);\n            }\n\n            if (source.url != null || source.bounds != null) {\n                throw Error(mutex_msg);\n            }\n        }\n        else {\n            if (typeof source.url !== 'string') {\n                throw Error(url_msg);\n            }\n\n            if (!(Array.isArray(source.bounds) && source.bounds.length === 4)) {\n                throw Error(bounds_msg);\n            }\n        }\n    }\n\n}\n\n// Check for URL tile pattern, if not found, treat as geo-referenced raster layer\nDataSource.register('Raster', source => {\n    return RasterTileSource.urlHasTilePattern(source.url) ? RasterTileSource : RasterSource;\n});\n","// Rearranges element array for triangles into a new element array that draws a wireframe\n// Used for debugging\nexport default function makeWireframeForTriangleElementData (element_data) {\n    const wireframe_data = new Uint16Array(element_data.length * 2);\n\n    // Draw triangles as lines:\n    // Make a copy of element_data, and for every group of three vertices, duplicate\n    // each vertex according to the following pattern:\n    // [1, 2, 3] => [1, 2, 2, 3, 3, 1]\n    // This takes three vertices which would have been interpreted as a triangle,\n    // and converts them into three 2-vertex line segments.\n    for (let i = 0; i < element_data.length; i += 3) {\n        wireframe_data.set(\n            [\n                element_data[i],\n                element_data[i+1],\n                element_data[i+1],\n                element_data[i+2],\n                element_data[i+2],\n                element_data[i]\n            ],\n            i * 2\n        );\n    }\n    return wireframe_data;\n}\n","// Rendering styles\n\nimport StyleParser from './style_parser';\nimport FeatureSelection from '../selection/selection';\nimport gl from '../gl/constants'; // import GL constants since workers can't access GL context\nimport ShaderProgram from '../gl/shader_program';\nimport VBOMesh from '../gl/vbo_mesh';\nimport Texture from '../gl/texture';\nimport Material from '../lights/material';\nimport Light from '../lights/light';\nimport {RasterTileSource} from '../sources/raster';\nimport log from '../utils/log';\nimport mergeObjects from '../utils/merge';\nimport Thread from '../utils/thread';\nimport WorkerBroker from '../utils/worker_broker';\nimport makeWireframeForTriangleElementData from '../builders/wireframe';\nimport debugSettings from '../utils/debug_settings';\n\nimport selection_fragment_source from '../selection/selection_fragment.glsl';\nimport rasters_source from './raster/raster_globals.glsl';\n\n// Base class\n\nexport var Style = {\n    init ({ generation, styles, sources = {}, introspection } = {}) {\n        this.setGeneration(generation);\n        this.styles = styles;                       // styles for scene\n        this.sources = sources;                     // data sources for scene\n        this.defines = (Object.prototype.hasOwnProperty.call(this, 'defines') && this.defines) || {}; // #defines to be injected into the shaders\n        this.shaders = (Object.prototype.hasOwnProperty.call(this, 'shaders') && this.shaders) || {}; // shader customization (uniforms, defines, blocks, etc.)\n        this.introspection = introspection || false;\n        this.selection = this.selection || this.introspection || false;   // flag indicating if this style supports feature selection\n        this.compile_setup = false;                 // one-time setup steps for program compilation\n        this.program = null;                        // GL program reference (for main render pass)\n        this.selection_program = null;              // GL program reference for feature selection render pass\n        this.feature_style = {};                    // style for feature currently being parsed, shared to lessen GC/memory thrash\n        this.vertex_template = [];                  // shared single-vertex template, filled out by each style\n        this.tile_data = {};\n        this.stencil_proxy_tiles = true;            // applied to proxy tiles w/non-opaque blend mode to avoid compounding alpha\n\n        this.variants = {}; // mesh variants by variant key\n        this.vertex_layouts = {}; // vertex layouts by variant key\n\n        // Default world coords to wrap every 100,000 meters, can turn off by setting this to 'false'\n        this.defines.TANGRAM_WORLD_POSITION_WRAP = 100000;\n\n        // Blending\n        // `opaque` styles are drawn first/under other styles, without alpha blending\n        this.blend = this.blend || 'opaque'; // default to opaque\n        if (this.blend !== 'opaque') {\n            // non-opaque styles can customize their blend order, which will determine which features\n            // are drawn first/under each other\n            if (this.blend_order == null) {\n                this.blend_order = this.default_blend_orders[this.blend];\n            }\n        }\n        else {\n            // `opaque` ignores blend order, always render first/under\n            this.blend_order = this.default_blend_orders[this.blend];\n        }\n\n        this.defines[`TANGRAM_BLEND_${this.blend.toUpperCase()}`] = true;\n\n        this.removeShaderBlock('setup'); // clear before material injection\n\n        // If the style defines its own material, replace the inherited material instance\n        if (!(this.material instanceof Material)) {\n            if (!Material.isValid(this.material)) {\n                this.material = StyleParser.defaults.material;\n            }\n            this.material = new Material(this.material);\n        }\n        this.material.inject(this);\n\n        // Set lighting mode: fragment, vertex, or none (specified as 'false')\n        Light.setMode(this.lighting, this);\n\n        // Setup raster samplers if needed\n        this.setupRasters();\n\n        // Setup shader definitions for custom attributes\n        this.setupCustomAttributes();\n\n        this.initialized = true;\n    },\n\n    destroy () {\n        if (this.program) {\n            this.program.destroy();\n            this.program = null;\n        }\n\n        if (this.selection_program) {\n            this.selection_program.destroy();\n            this.selection_program = null;\n        }\n\n        WorkerBroker.removeTarget(this.main_thread_target);\n        this.gl = null;\n        this.initialized = false;\n    },\n\n    reset () {\n    },\n\n    baseStyle () {\n        return this.base || this.name;\n    },\n\n    setGeneration (generation) {\n        // Scene generation id this style was created for\n        this.generation = generation;\n\n        // Provide a hook for this object to be called from worker threads\n        this.main_thread_target = ['Style', this.name, this.generation].join('_');\n        if (Thread.is_main) {\n            WorkerBroker.addTarget(this.main_thread_target, this);\n        }\n    },\n\n    /*** Style parsing and geometry construction ***/\n\n    // Returns an object to hold feature data (for a tile or other object)\n    startData (tile) {\n        this.tile_data[tile.id] = this.tile_data[tile.id] || {\n            meshes: {},\n            uniforms: {},\n            textures: []\n        };\n    },\n\n    // Finalizes an object holding feature data (for a tile or other object)\n    async endData (tile) {\n        var tile_data = this.tile_data[tile.id];\n        this.tile_data[tile.id] = null;\n\n        if (tile_data && Object.keys(tile_data.meshes).length > 0) {\n            for (let variant in tile_data.meshes) {\n                let mesh = tile_data.meshes[variant];\n\n                // Remove empty mesh variants\n                if (mesh.vertex_data.vertex_count === 0) {\n                    delete tile_data.meshes[variant];\n                    continue;\n                }\n\n                // Only keep final byte buffer\n                mesh.vertex_data.end();\n                mesh.vertex_elements = mesh.vertex_data.element_buffer;\n                mesh.vertex_data = mesh.vertex_data.vertex_buffer; // convert from instance to raw typed array\n            }\n\n            // Load raster tiles passed from data source\n            // Blocks mesh completion to avoid flickering\n            return this.buildRasterTextures(tile, tile_data);\n        }\n        else {\n            return null; // don't send tile data back if doesn't have geometry\n        }\n    },\n\n    // Has mesh data for a given tile?\n    hasDataForTile (tile) {\n        return this.tile_data[tile.id] != null;\n    },\n\n    getTileMesh (tile, variant) {\n        const meshes = this.tile_data[tile.id].meshes;\n        if (meshes[variant.key] == null) {\n            const vertex_layout = this.vertexLayoutForMeshVariant(variant);\n            meshes[variant.key] = {\n                variant,\n                vertex_data: vertex_layout.createVertexData()\n            };\n        }\n        return meshes[variant.key];\n    },\n\n    vertexLayoutForMeshVariant (/*variant*/) {\n        // styles must implement\n    },\n\n    meshVariantTypeForDraw (/*draw*/) {\n        // styles must implement\n    },\n\n    addFeature (feature, draw, context) {\n        let tile = context.tile;\n        if (tile.generation !== this.generation) {\n            return;\n        }\n\n        if (!this.tile_data[tile.id]) {\n            this.startData(tile);\n        }\n\n        let style = this.parseFeature(feature, draw, context);\n        if (!style) {\n            return; // skip feature\n        }\n\n        if (this.buildGeometry(feature.geometry, style, context) > 0) {\n            feature.generation = this.generation; // track scene generation that feature was rendered for\n        }\n    },\n\n    buildGeometry (geometry, style, context) {\n        let geom_count;\n        if (geometry.type === 'Polygon') {\n            geom_count = this.buildPolygons([geometry.coordinates], style, context);\n        }\n        else if (geometry.type === 'MultiPolygon') {\n            geom_count = this.buildPolygons(geometry.coordinates, style, context);\n        }\n        else if (geometry.type === 'LineString') {\n            geom_count = this.buildLines([geometry.coordinates], style, context);\n        }\n        else if (geometry.type === 'MultiLineString') {\n            geom_count = this.buildLines(geometry.coordinates, style, context);\n        }\n        else if (geometry.type === 'Point') {\n            geom_count = this.buildPoints([geometry.coordinates], style, context);\n        }\n        else if (geometry.type === 'MultiPoint') {\n            geom_count = this.buildPoints(geometry.coordinates, style, context);\n        }\n\n        // Optionally collect per-layer stats\n        if (geom_count > 0 && debugSettings.layer_stats) {\n            let tile = context.tile;\n            tile.debug.layers = tile.debug.layers || { list: {}, tree: {} };\n            let list = tile.debug.layers.list;\n            let tree = tile.debug.layers.tree;\n            let ftree = {}; // tree of layers for this feature\n            context.layers.forEach(layer => {\n                addLayerDebugEntry(list, layer, 1, geom_count, {[this.name]: geom_count}, {[this.baseStyle()]: geom_count});\n\n                let node = tree;\n                let fnode = ftree;\n                let levels = layer.split(':');\n                for (let i=0; i < levels.length; i++) {\n                    let level = levels[i];\n                    node[level] = node[level] || { features: 0, geoms: 0, styles: {}, base: {} };\n\n                    if (fnode[level] == null) { // only count each layer level once per feature\n                        fnode[level] = {};\n                        addLayerDebugEntry(node, level, 1, geom_count, {[this.name]: geom_count}, {[this.baseStyle()]: geom_count});\n                    }\n\n                    if (i < levels.length - 1) {\n                        node[level].layers = node[level].layers || {};\n                    }\n                    node = node[level].layers;\n                    fnode = fnode[level];\n                }\n            });\n        }\n\n        return geom_count;\n    },\n\n    parseFeature (feature, draw, context) {\n        try {\n            var style = this.feature_style;\n\n            // Calculate order\n            style.order = this.parseOrder(draw.order, context);\n            if (style.order == null && this.blend !== 'overlay') {\n                let msg = `Layer '${draw.layers.join(', ')}', draw group '${draw.group}': `;\n                msg += '\\'order\\' parameter is required unless blend mode is \\'overlay\\'';\n                if (draw.order != null) {\n                    msg += '; \\'order\\' was set to a dynamic value (e.g. string tied to feature property, ';\n                    msg += 'or JS function), but evaluated to null for one or more features';\n                }\n                log({ level: 'warn', once: true }, msg);\n                return;\n            }\n\n            // Subclass implementation\n            style = this._parseFeature(feature, draw, context);\n            if (!style) {\n                return; // skip feature\n            }\n\n            // Custom attributes\n            if (this.shaders.attributes) {\n                style.attributes = style.attributes || {};\n                for (const aname in this.shaders.attributes) {\n                    style.attributes[aname] = StyleParser.evalCachedProperty(\n                        draw.attributes && draw.attributes[aname], context);\n                    // set attribute value to zero for null/undefined/non-numeric values\n                    if (typeof style.attributes[aname] !== 'number') {\n                        style.attributes[aname] = 0;\n                    }\n                }\n            }\n\n            // Feature selection (only if feature is marked as interactive, and style supports it)\n            if (this.selection) {\n                style.interactive = StyleParser.evalProperty(draw.interactive, context);\n            }\n            else {\n                style.interactive = false;\n            }\n\n            if (style.interactive === true) {\n                style.selection_color = FeatureSelection.makeColor(feature, context.tile, context);\n            }\n            else {\n                style.selection_color = FeatureSelection.defaultColor;\n            }\n\n            return style;\n        }\n        catch (error) {\n            log('error', 'Style.parseFeature: style parsing error', feature, style, error.stack);\n        }\n    },\n\n    _parseFeature (/*feature, draw, context*/) {\n        return this.feature_style;\n    },\n\n    preprocess (draw) {\n        // Preprocess first time\n        if (!draw.preprocessed) {\n            // Apply draw defaults\n            if (this.draw) {\n                // Merge each property separately to avoid modifying `draw` instance identity\n                for (let param in this.draw) {\n                    let val = this.draw[param];\n                    if (typeof val === 'object' && !Array.isArray(val)) {  // nested param (e.g. `outline`)\n                        draw[param] = mergeObjects({}, val, draw[param]);\n                    }\n                    else if (draw[param] == null) { // simple param (single scalar value or array)\n                        draw[param] = val;\n                    }\n                }\n            }\n\n            if (!this.selection) {\n                draw.interactive = false; // always disable feature selection for when style doesn't support it\n            }\n            else if (this.introspection) {\n                draw.interactive = true;  // always enable feature selection for introspection\n            }\n\n            draw = this._preprocess(draw); // optional subclass implementation\n            if (!draw) {\n                return;\n            }\n\n            // Custom attributes\n            if (this.shaders.attributes) {\n                draw.attributes = draw.attributes || {};\n                for (const aname in this.shaders.attributes) {\n                    draw.attributes[aname] = StyleParser.createPropertyCache(\n                        draw.attributes[aname] != null ? draw.attributes[aname] : 0);\n                }\n            }\n\n            draw.preprocessed = true;\n        }\n        return draw;\n    },\n\n    // optionally implemented by subclass\n    _preprocess (draw) {\n        return draw;\n    },\n\n    // Parse an order value\n    parseOrder (order, context) {\n        // Calculate order if it was not cached\n        if (typeof order !== 'number') {\n            return StyleParser.calculateOrder(order, context);\n        }\n        return order;\n    },\n\n    // Expand final precision for half-layers (for outlines)\n    scaleOrder (order) {\n        return order * 2;\n    },\n\n    // Parse a color of choose a default if acceptable, return undefined if color missing\n    parseColor(color, context) {\n        // Need either a color, or a shader block for 'color' or 'filter'\n        if (color) {\n            return StyleParser.evalCachedColorProperty(color, context);\n        }\n        else if (this.shaders.blocks.color || this.shaders.blocks.filter) {\n            return StyleParser.defaults.color;\n        }\n    },\n\n    // Build functions are no-ops until overriden\n    buildPolygons () { return 0; },\n    buildLines () { return 0; },\n    buildPoints () { return 0; },\n\n\n    /*** GL state and rendering ***/\n\n    setGL (gl) {\n        this.gl = gl;\n        this.max_texture_size = Texture.getMaxTextureSize(this.gl);\n    },\n\n    makeMesh (vertex_data, vertex_elements, options = {}) {\n        let vertex_layout = this.vertexLayoutForMeshVariant(options.variant);\n\n        if (debugSettings.wireframe) {\n            // In wireframe debug mode, transform mesh into lines\n            vertex_elements = makeWireframeForTriangleElementData(vertex_elements);\n            return new VBOMesh(this.gl, vertex_data, vertex_elements, vertex_layout,\n                { ...options, draw_mode: this.gl.LINES });\n        }\n\n        return new VBOMesh(this.gl, vertex_data, vertex_elements, vertex_layout, options);\n    },\n\n    render (mesh) {\n        return mesh.render();\n    },\n\n    // Get a specific program, compiling if necessary\n    getProgram (key = 'program') {\n        this.compileSetup();\n\n        const program = this[key];\n        if (!program || program.error) {\n            return;\n        }\n\n        if (!program.compiled) {\n            log('debug', `Compiling style '${this.name}', program key '${key}'`);\n            try {\n                program.compile();\n            }\n            catch (e) {\n                log('error', `Style: error compiling program for style '${this.name}' (program key '${key}')`,\n                    this, e.stack, e.type, e.shader_errors);\n                throw e; // re-throw so users can be notified via event subscriptions\n            }\n        }\n        return program;\n    },\n\n    // One-time setup for compiling style's programs\n    compileSetup () {\n        if (this.compile_setup) {\n            return;\n        }\n\n        if (!this.gl) {\n            throw(new Error(`style.compile(): skipping for ${this.name} because no GL context`));\n        }\n\n        // Build defines & for selection (need to create a new object since the first is stored as a reference by the program)\n        var defines = this.buildDefineList();\n        if (this.selection) {\n            var selection_defines = Object.assign({}, defines);\n            selection_defines.TANGRAM_FEATURE_SELECTION = true;\n        }\n\n        // Shader blocks\n        var blocks = (this.shaders && this.shaders.blocks);\n        var block_scopes = (this.shaders && this.shaders.block_scopes);\n\n        // Uniforms\n        var uniforms = Object.assign({}, this.shaders && this.shaders.uniforms);\n        for (let u in uniforms) { // validate uniforms\n            if (uniforms[u] == null) {\n                log({ level: 'warn', once: true }, `Style '${this.name}' has invalid uniform '${u}': uniform values must be non-null`);\n            }\n        }\n\n        // Accept a single extension, or an array of extensions\n        var extensions = (this.shaders && this.shaders.extensions);\n        if (typeof extensions === 'string') {\n            extensions = [extensions];\n        }\n\n        // Create shaders\n        this.program = new ShaderProgram(\n            this.gl,\n            this.vertex_shader_src,\n            this.fragment_shader_src,\n            {\n                name: this.name,\n                defines,\n                uniforms,\n                blocks,\n                block_scopes,\n                extensions\n            }\n        );\n\n        if (this.selection) {\n            this.selection_program = new ShaderProgram(\n                this.gl,\n                this.vertex_shader_src,\n                selection_fragment_source,\n                {\n                    name: (this.name + ' (selection)'),\n                    defines: selection_defines,\n                    uniforms,\n                    blocks,\n                    block_scopes,\n                    extensions\n                }\n            );\n        }\n        else {\n            this.selection_program = null;\n        }\n\n        this.compile_setup = true;\n    },\n\n    // Add a shader block\n    addShaderBlock (key, block, scope = null) {\n        this.shaders.blocks = this.shaders.blocks || {};\n        this.shaders.blocks[key] = this.shaders.blocks[key] || [];\n        this.shaders.blocks[key].push(block);\n\n        this.shaders.block_scopes = this.shaders.block_scopes || {};\n        this.shaders.block_scopes[key] = this.shaders.block_scopes[key] || [];\n        this.shaders.block_scopes[key].push(scope);\n    },\n\n    // Remove all shader blocks for key\n    removeShaderBlock (key) {\n        if (this.shaders.blocks) {\n            this.shaders.blocks[key] = null;\n        }\n\n        if (this.shaders.block_scopes) {\n            this.shaders.block_scopes[key] = null;\n        }\n    },\n\n    replaceShaderBlock (key, block, scope = null) {\n        this.removeShaderBlock(key);\n        this.addShaderBlock(key, block, scope);\n    },\n\n    /** TODO: could probably combine and generalize this with similar method in ShaderProgram\n     * (list of define objects that inherit from each other)\n     */\n    buildDefineList () {\n        // Add any custom defines to built-in style defines\n        var defines = {}; // create a new object to avoid mutating a prototype value that may be shared with other styles\n        if (this.defines != null) {\n            for (var d in this.defines) {\n                defines[d] = this.defines[d];\n            }\n        }\n        if (this.shaders != null && this.shaders.defines != null) {\n            for (d in this.shaders.defines) {\n                defines[d] = this.shaders.defines[d];\n            }\n        }\n        return defines;\n\n    },\n\n    // Determines if 'raster' parameter is set to a valid value\n    hasRasters () {\n        return (['color', 'normal', 'custom'].indexOf(this.raster) > -1);\n    },\n\n    // Setup raster access in shaders\n    setupRasters () {\n        if (!this.hasRasters()) {\n            return;\n        }\n\n        // Enable raster textures and configure how first raster is applied\n        if (this.raster === 'color') {\n            this.defines.TANGRAM_RASTER_TEXTURE_COLOR = true;\n        }\n        else if (this.raster === 'normal') {\n            this.defines.TANGRAM_RASTER_TEXTURE_NORMAL = true;\n        }\n        // else custom raster (samplers will be made available but not automatically applied)\n\n        // A given style may be built with multiple data sources, each of which may attach\n        // a variable number of raster sources (0 to N, where N is the max number of raster sources\n        // defined for the scene). This means we don't know *which* or *how many* rasters will be\n        // bound now, at initial compile-time; we only know this at geometry build-time. To ensure\n        // that we can bind as many raster sources as needed, we declare our uniform arrays to hold\n        // the maximum number of possible sources. At render time, only the necessary number of rasters\n        // are bound (the remaining slots aren't intended to be accessed).\n        let num_raster_sources =\n            Object.keys(this.sources)\n                .filter(s => this.sources[s] instanceof RasterTileSource)\n                .length;\n\n        this.defines.TANGRAM_NUM_RASTER_SOURCES = `${num_raster_sources}`; // force to string to avoid auto-float conversion\n        if (num_raster_sources > 0) {\n            // Track how many raster sources have alpha masking (used for handling transparency outside raster image)\n            const num_masked_rasters = Object.keys(this.sources)\n                .filter(s => this.sources[s].mask_alpha)\n                .length;\n            this.defines.TANGRAM_HAS_MASKED_RASTERS = (num_masked_rasters > 0);\n            this.defines.TANGRAM_ALL_MASKED_RASTERS = (num_masked_rasters === num_raster_sources);\n\n            // Use model position of tile's coordinate zoom for raster tile texture UVs\n            this.defines.TANGRAM_MODEL_POSITION_BASE_ZOOM_VARYING = true;\n\n            // Uniforms and samplers\n            this.replaceShaderBlock('raster', rasters_source, 'Raster');\n        }\n    },\n\n    // Load raster tile textures and set uniforms\n    async buildRasterTextures (tile, tile_data) {\n        // skip if style doesn't support rasters\n        if (!this.hasRasters()) {\n            return tile_data;\n        }\n\n        // skip if source didn't attach any rasters to tile\n        if (tile.rasters.length === 0) {\n            return tile_data;\n        }\n\n        // Load textures on main thread and return when done\n        // We want to block the building of a raster tile mesh until its texture is loaded,\n        // to avoid flickering while loading (texture will render as black)\n        let textures;\n        try {\n            textures = await WorkerBroker.postMessage(\n                `${this.main_thread_target}.loadTextures`,\n                { coords: tile.coords, source: tile.source, rasters: tile.rasters, min: tile.min, max: tile.max }\n            );\n        }\n        catch (e) { // error thrown if style has been removed from main thread\n            return tile_data;\n        }\n\n        if (!textures || textures.length < 1) { // no textures found (unexpected)\n            // TODO: warning\n            return tile_data;\n        }\n        else if (textures.some(t => !t.loaded)) { // some textures failed, throw out style for this tile\n            return null;\n        }\n\n        // Enable alpha masking if needed (for transparency outside raster image, on first raster only)\n        tile_data.uniforms['u_raster_mask_alpha'] = (this.sources[tile.rasters[0]].mask_alpha === true);\n\n        // Set texture uniforms (returned after loading from main thread)\n        const u_samplers = tile_data.uniforms['u_rasters'] = [];\n        const u_sizes = tile_data.uniforms['u_raster_sizes'] = [];\n        const u_offsets = tile_data.uniforms['u_raster_offsets'] = [];\n\n        textures.forEach(t => {\n            const i = t.index;\n            u_samplers[i] = t.name;\n            tile_data.textures.push(t.name);\n\n            u_sizes[i] = [t.width, t.height];\n\n            // Tile geometry may be at a higher zoom than the raster tile texture,\n            // (e.g. an overzoomed raster tile), in which case we need to adjust the\n            // raster texture UVs to offset to the appropriate starting point for\n            // this geometry tile.\n            if (tile.coords.z > t.coords.z) {\n                let dz = tile.coords.z - t.coords.z; // # of levels raster source is overzoomed\n                let dz2 = Math.pow(2, dz);\n                u_offsets[i] = [\n                    (((tile.coords.x % dz2) + dz2) % dz2) / dz2, // double-modulo to handle negative (wrapped) tile coords\n                    (dz2 - 1 - (tile.coords.y % dz2)) / dz2, // GL texture coords are +Y up\n                    1 / dz2\n                ];\n            }\n            else {\n                u_offsets[i] = [0, 0, 1];\n            }\n        });\n\n        return tile_data;\n    },\n\n    // Determine which raster tile textures need to load for this tile, load them and return metadata to worker\n    // Called on main thread\n    async loadTextures (tile) {\n        let configs = {}; // texture configs to pass to texture builder, keyed by texture name\n        let index = {};   // index into raster sampler array, keyed by texture name\n        let queue = [];\n\n        // Find raster textures that need to be loaded\n        tile.rasters.map(r => this.sources[r]).filter(x => x).forEach((source, i) => {\n            if (source instanceof RasterTileSource) {\n                queue.push(source.tileTexture(tile, this).then(config => {\n                    configs[config.name] = config;\n                    index[config.name] = i;\n                }));\n            }\n        });\n        await Promise.all(queue);\n\n        // Create and load raster textures\n        await Texture.createFromObject(this.gl, configs);\n        let textures = await Promise.all(Object.keys(configs)\n            .map(t => Texture.textures[t] && Texture.textures[t].load())\n            .filter(x => x)\n        );\n        textures.forEach(t => t.retain());\n\n        // Take a subset of texture metadata, and decorate with raster-specific info\n        // NB: only return name and size of textures loaded, because we can't send actual texture objects to worker\n        return textures.map(t => ({\n            name: t.name,\n            width: t.width,\n            height: t.height,\n            loaded: t.loaded,\n            index: index[t.name],          // raster sampler index\n            coords: configs[t.name].coords // tile coords of raster tile\n        }));\n    },\n\n    // Setup shader definitions for custom attributes\n    setupCustomAttributes() {\n        if (this.shaders.attributes) {\n            for (const [aname, attrib] of Object.entries(this.shaders.attributes)) {\n                // alias each custom attribute to the internal attribute name in vertex shader,\n                // and internal varying name in fragment shader (if varying is enabled)\n                if (attrib.type === 'float') {\n                    if (attrib.varying !== false) {\n                        this.addShaderBlock('attributes', `\n                            #ifdef TANGRAM_VERTEX_SHADER\n                                attribute float a_${aname};\n                                varying float v_${aname};\n                                #define ${aname} a_${aname}\n                            #else\n                                varying float v_${aname};\n                                #define ${aname} v_${aname}\n                            #endif\n                        `);\n                        this.addShaderBlock('setup', `#ifdef TANGRAM_VERTEX_SHADER\\nv_${aname} = a_${aname};\\n#endif`);\n                    }\n                    else {\n                        this.addShaderBlock('attributes', `\n                            #ifdef TANGRAM_VERTEX_SHADER\n                                attribute float a_${aname};\n                                #define ${aname} a_${aname}\n                            #endif\n                        `);\n                    }\n                }\n            }\n        }\n    },\n\n    // Add custom attributes to a list of attributes for initializing a vertex layout\n    addCustomAttributesToAttributeList(attribs) {\n        if (this.shaders.attributes) {\n            for (const [aname, attrib] of Object.entries(this.shaders.attributes)) {\n                if (attrib.type === 'float') {\n                    attribs.push({ name: `a_${aname}`, size: 1, type: gl.FLOAT, normalized: false });\n                }\n            }\n        }\n        return attribs;\n    },\n\n    // Add current feature values for custom attributes to vertex template\n    addCustomAttributesToVertexTemplate(draw, index) {\n        if (this.shaders.attributes) {\n            for (let aname in this.shaders.attributes) {\n                this.vertex_template[index++] = draw.attributes[aname] != null ? draw.attributes[aname] : 0;\n            }\n        }\n    },\n\n    // Setup any GL state for rendering\n    setup () {\n        this.setUniforms();\n        this.material.setupProgram(ShaderProgram.current);\n    },\n\n    // Set style uniforms on currently bound program\n    setUniforms () {\n        var program = ShaderProgram.current;\n        if (!program) {\n            return;\n        }\n\n        program.setUniforms(this.shaders?.uniforms, true); // reset texture unit to 0\n    },\n\n    // Render state settings by blend mode\n    render_states: {\n        opaque: { depth_test: true, depth_write: true },\n        translucent: { depth_test: true, depth_write: true },\n        add: { depth_test: true, depth_write: false },\n        multiply: { depth_test: true, depth_write: false },\n        inlay: { depth_test: true, depth_write: false },\n        overlay: { depth_test: false, depth_write: false }\n    },\n\n    // Default sort order for blend modes\n    default_blend_orders: {\n        opaque: Number.MIN_SAFE_INTEGER,\n        add: 1,\n        multiply: 2,\n        inlay: 3,\n        translucent: 4,\n        overlay: 5\n    },\n\n    getBlendOrderForDraw (draw) {\n        // Allow draw block to override blend_order for non-opaque blend styles\n        return ((this.blend !== 'opaque' && draw.blend_order != null) ? draw.blend_order : this.blend_order);\n    }\n\n};\n\n// add feature and geometry counts for a single layer\nexport function addLayerDebugEntry (target, layer, faeture_count, geom_count, styles, bases) {\n    target[layer] = target[layer] || { features: 0, geoms: 0, styles: {}, base: {} };\n    target[layer].features += faeture_count;    // feature count\n    target[layer].geoms += geom_count;          // geometry count\n\n    // geometry count by style\n    for (let style in styles) {\n        target[layer].styles[style] = target[layer].styles[style] || 0;\n        target[layer].styles[style] += styles[style];\n    }\n\n    // geometry count by base style\n    for (let style in bases) {\n        target[layer].base[style] = target[layer].base[style] || 0;\n        target[layer].base[style] += bases[style];\n    }\n}\n","let MAX_VALUE = Math.pow(2, 16) - 1;\nlet has_element_index_uint = false;\n\nexport default class VertexElements {\n    constructor () {\n        this.array = [];\n        this.has_overflown = false;\n    }\n    push (value) {\n        // If values have overflown and no Uint32 option is available, do not push values\n        if (this.has_overflown && !has_element_index_uint) {\n            return;\n        }\n\n        // Trigger overflow if value is greater than Uint16 max\n        if (value > MAX_VALUE) {\n            this.has_overflown = true;\n            if (!has_element_index_uint) {\n                return;\n            }\n        }\n\n        this.array.push(value);\n    }\n    end () {\n        if (this.array.length){\n            let buffer = createBuffer(this.array, this.has_overflown);\n            this.array = [];\n            this.has_overflown = false;\n            return buffer;\n        }\n        else {\n            return false;\n        }\n    }\n}\n\nVertexElements.setElementIndexUint = function(flag) {\n    has_element_index_uint = flag;\n};\n\nfunction createBuffer(array, overflown) {\n    var typedArray = (overflown && has_element_index_uint) ? Uint32Array : Uint16Array;\n    return new typedArray(array);\n}\n","import gl from './constants'; // web workers don't have access to GL context, so import all GL constants\nimport log from '../utils/log';\nimport VertexElements from './vertex_elements';\n\n// Maps GL types to JS array types\nlet array_types = {\n    [gl.FLOAT]: Float32Array,\n    [gl.BYTE]: Int8Array,\n    [gl.UNSIGNED_BYTE]: Uint8Array,\n    [gl.INT]: Int32Array,\n    [gl.UNSIGNED_INT]: Uint32Array,\n    [gl.SHORT]: Int16Array,\n    [gl.UNSIGNED_SHORT]: Uint16Array\n};\n\n// An intermediary object that holds vertex data in typed arrays, according to a given vertex layout\n// Used to construct a mesh/VBO for rendering\nexport default class VertexData {\n\n    constructor (vertex_layout, { prealloc = 500 } = {}) {\n        this.vertex_layout = vertex_layout;\n        this.vertex_elements = new VertexElements();\n        this.stride = this.vertex_layout.stride;\n\n        if (VertexData.array_pool.length > 0) {\n            this.vertex_buffer = VertexData.array_pool.pop();\n            this.byte_length = this.vertex_buffer.byteLength;\n            this.size = Math.floor(this.byte_length / this.stride);\n            log('trace', `VertexData: reused buffer of bytes ${this.byte_length}, ${this.size} vertices`);\n        }\n        else {\n            this.size = prealloc; // # of vertices to allocate\n            this.byte_length = this.stride * this.size;\n            this.vertex_buffer = new Uint8Array(this.byte_length);\n        }\n        this.offset = 0;             // byte offset into currently allocated buffer\n\n        this.vertex_count = 0;\n        this.realloc_count = 0;\n        this.setBufferViews();\n        this.setAddVertexFunction();\n    }\n\n    // (Re-)allocate typed views into the main buffer - only create the types we need for this layout\n    setBufferViews () {\n        this.views = {};\n        this.views[gl.UNSIGNED_BYTE] = this.vertex_buffer;\n        this.vertex_layout.dynamic_attribs.forEach(attrib => {\n            // Need view for this type?\n            if (this.views[attrib.type] == null) {\n                var array_type = array_types[attrib.type];\n                this.views[attrib.type] = new array_type(this.vertex_buffer.buffer);\n            }\n        });\n    }\n\n    // Check allocated buffer size, expand/realloc buffer if needed\n    checkBufferSize () {\n        if ((this.offset + this.stride) > this.byte_length) {\n            this.size = Math.floor(this.size * 1.5);\n            this.size -= this.size % 4;\n            this.byte_length = this.stride * this.size;\n            var new_view = new Uint8Array(this.byte_length);\n            new_view.set(this.vertex_buffer); // copy existing data to new buffer\n            VertexData.array_pool.push(this.vertex_buffer); // save previous buffer for use by next tile\n            this.vertex_buffer = new_view;\n            this.setBufferViews();\n            this.realloc_count++;\n            // log('info', `VertexData: expanded vertex block to ${this.size} vertices`);\n        }\n    }\n\n    // Initialize the add vertex function (lazily compiled by vertex layout)\n    setAddVertexFunction () {\n        this.vertexLayoutAddVertex = this.vertex_layout.getAddVertexFunction();\n    }\n\n    // Add a vertex, copied from a plain JS array of elements matching the order of the vertex layout\n    addVertex (vertex) {\n        this.checkBufferSize();\n        this.vertexLayoutAddVertex(vertex, this.views, this.offset);\n        this.offset += this.stride;\n        this.vertex_count++;\n    }\n\n    // Finalize vertex buffer for use in constructing a mesh\n    end () {\n        // Clip the buffer to size used for this VBO\n        this.vertex_buffer = this.vertex_buffer.subarray(0, this.offset);\n        this.element_buffer = this.vertex_elements.end();\n\n        log('trace', `VertexData: ${this.size} vertices total, realloc count ${this.realloc_count}`);\n\n        return this;\n    }\n\n}\n\nVertexData.array_pool = []; // pool of currently available (previously used) buffers (uint8)\n","import gl from './constants'; // web workers don't have access to GL context, so import all GL constants\nimport VertexData from './vertex_data';\nimport hashString from '../utils/hash';\n\n// Describes a vertex layout that can be used with many different GL programs.\nexport default class VertexLayout {\n    // Attribs are an array, in layout order, of: name, size, type, normalized\n    // ex: { name: 'position', size: 3, type: gl.FLOAT, normalized: false }\n    constructor (attribs) {\n        this.attribs = attribs; // array of attributes, specified as standard GL attrib options\n        this.dynamic_attribs = this.attribs.filter(x => x.static == null); // attributes with per-vertex values, used to build VBOs\n        this.static_attribs = this.attribs.filter(x => x.static != null); // attributes with fixed values\n        this.components = [];   // list of type and offset info about each attribute component\n        this.index = {};        // JS buffer index of each attribute component, e.g. this.index.position\n        this.offset = {};       // VBO buffer byte offset of each attribute component, e.g. this.offset.color\n        this.stride = 0;        // byte stride of a single vertex\n\n        let index = 0, count = 0;\n        for (let a=0; a < this.attribs.length; a++) {\n            let attrib = this.attribs[a];\n            // Dynamic attribute\n            if (attrib.static == null) {\n                attrib.offset = this.stride;\n                attrib.byte_size = attrib.size;\n                let shift = 0;\n\n                switch (attrib.type) {\n                case gl.FLOAT:\n                case gl.INT:\n                case gl.UNSIGNED_INT:\n                    attrib.byte_size *= 4;\n                    shift = 2;\n                    break;\n                case gl.SHORT:\n                case gl.UNSIGNED_SHORT:\n                    attrib.byte_size *= 2;\n                    shift = 1;\n                    break;\n                }\n\n                // Force 4-byte alignment on attributes\n                if (attrib.byte_size & 3) { // pad to multiple of 4 bytes\n                    attrib.byte_size += 4 - (attrib.byte_size & 3);\n                }\n                this.stride += attrib.byte_size;\n\n                // Add info to list of attribute components (e.g. float is 1 component, vec3 is 3 separate components)\n                // Used to map plain JS array to typed arrays\n                let offset_typed = attrib.offset >> shift;\n                for (let s=0; s < attrib.size; s++) {\n                    this.components.push({\n                        type: attrib.type,\n                        shift,\n                        offset: offset_typed++,\n                        index: count++\n                    });\n                }\n\n                // Provide an index into the vertex data buffer for each attribute by name\n                this.index[attrib.name] = index;\n                index += attrib.size;\n\n                // Store byte offset of each attribute by name\n                this.offset[attrib.name] = attrib.offset;\n            }\n            // Static attribute\n            else {\n                attrib.static = Array.isArray(attrib.static) ? attrib.static : [attrib.static]; // convert single value to array\n                attrib.method = `vertexAttrib${attrib.static.length}fv`;\n            }\n        }\n    }\n\n    // Enables dynamic (array-based) attributes for a given GL program\n    // Assumes that the desired vertex buffer (VBO) is already bound\n    // If the program doesn't include all attributes, it can still use the vertex layout\n    // to read those attribs that it does recognize, using the attrib offsets to skip others.\n    enableDynamicAttributes (gl, program) {\n        // Disable all attributes\n        for (const location in VertexLayout.enabled_attribs) {\n            gl.disableVertexAttribArray(location);\n        }\n        VertexLayout.enabled_attribs = {};\n\n        // Enable dynamic attributes for this layout\n        this.dynamic_attribs.forEach(attrib => {\n            const location = program.attribute(attrib.name).location;\n            if (location !== -1) {\n                gl.enableVertexAttribArray(location);\n                gl.vertexAttribPointer(location, attrib.size, attrib.type, attrib.normalized, this.stride, attrib.offset);\n                VertexLayout.enabled_attribs[location] = program;\n            }\n        });\n    }\n\n    // Enable static attributes for this layout. Since these aren't captured as part of Vertex Array Object state,\n    // they are enabled separately.\n    enableStaticAttributes (gl, program) {\n        this.static_attribs.forEach(attrib => {\n            const location = program.attribute(attrib.name).location;\n            if (location !== -1 && gl[attrib.method] instanceof Function) {\n                // N.B.: Safari appears to require an explicit array enable to set vertex attribute as \"active\"\n                // (the static attribute value method does not work without it). So the attribute is temporarily\n                // enabled as an array, then disabled.\n                gl.enableVertexAttribArray(location);\n                gl[attrib.method](location, attrib.static);\n                gl.disableVertexAttribArray(location);\n            }\n        });\n    }\n\n    createVertexData () {\n        return new VertexData(this);\n    }\n\n    // Lazily create the add vertex function\n    getAddVertexFunction () {\n        if (this.addVertex == null) {\n            this.createAddVertexFunction();\n        }\n        return this.addVertex;\n    }\n\n    // Dynamically compile a function to add a plain JS vertex array to this layout's typed VBO arrays\n    createAddVertexFunction () {\n        let key = hashString(JSON.stringify(this.attribs));\n        if (VertexLayout.add_vertex_funcs[key] == null) {\n            // `t` = current typed array to write to\n            // `o` = current offset into VBO, in current type size (e.g. divide 2 for shorts, divide by 4 for floats, etc.)\n            // `v` = plain JS array containing vertex data\n            // `vs` = typed arrays (one per GL type needed for this vertex layout)\n            // `off` = current offset into VBO, in bytes\n            let src = ['var t, o;'];\n\n            // Sort by array type to reduce redundant array look-up and offset calculation\n            let last_type;\n            let components = [...this.components];\n            components.sort((a, b) => (a.type !== b.type) ? (a.type - b.type) : (a.index - b.index));\n\n            for (let c=0; c < components.length; c++) {\n                let component = components[c];\n\n                if (last_type !== component.type) {\n                    src.push(`t = vs[${component.type}];`);\n                    src.push(`o = off${component.shift ? ' >> ' + component.shift : ''};`);\n                    last_type = component.type;\n                }\n\n                src.push(`t[o + ${component.offset}] = v[${component.index}];`);\n            }\n\n            src = src.join('\\n');\n            let func = new Function('v', 'vs', 'off', src); // jshint ignore:line\n            VertexLayout.add_vertex_funcs[key] = func;\n        }\n\n        this.addVertex = VertexLayout.add_vertex_funcs[key];\n    }\n\n}\n\n// Track currently enabled attribs, by the program they are bound to\n// Static class property to reflect global GL state\nVertexLayout.enabled_attribs = {};\n\n// Functions to add plain JS vertex array to typed VBO arrays\nVertexLayout.add_vertex_funcs = {}; // keyed by unique set of attributes\n","// Geometry building functions\nimport Geo from '../utils/geo';\n\nexport const tile_bounds = [\n    { x: 0, y: 0},\n    { x: Geo.tile_scale, y: -Geo.tile_scale } // TODO: correct for flipped y-axis?\n];\n\nexport const default_uvs = [0, 0, 1, 1];\n\n// Tests if a line segment (from point A to B) is outside the tile bounds\n// (within a certain tolerance to account for geometry nearly on tile edges)\nexport function outsideTile (_a, _b, tolerance) {\n    let tile_min = tile_bounds[0];\n    let tile_max = tile_bounds[1];\n\n    // TODO: fix flipped Y coords here, confusing with 'max' reference\n    if ((_a[0] <= tile_min.x + tolerance && _b[0] <= tile_min.x + tolerance) ||\n        (_a[0] >= tile_max.x - tolerance && _b[0] >= tile_max.x - tolerance) ||\n        (_a[1] >= tile_min.y - tolerance && _b[1] >= tile_min.y - tolerance) ||\n        (_a[1] <= tile_max.y + tolerance && _b[1] <= tile_max.y + tolerance)) {\n        return true;\n    }\n\n    return false;\n}\n\nexport function isCoordOutsideTile (coord, tolerance) {\n    tolerance = tolerance || 0;\n    let tile_min = tile_bounds[0];\n    let tile_max = tile_bounds[1];\n\n    return coord[0] <= tile_min.x + tolerance ||\n           coord[0] >= tile_max.x - tolerance ||\n           coord[1] >= tile_min.y - tolerance ||\n           coord[1] <= tile_max.y + tolerance;\n}\n","'use strict';\n\nmodule.exports = earcut;\nmodule.exports.default = earcut;\n\nfunction earcut(data, holeIndices, dim) {\n\n    dim = dim || 2;\n\n    var hasHoles = holeIndices && holeIndices.length,\n        outerLen = hasHoles ? holeIndices[0] * dim : data.length,\n        outerNode = linkedList(data, 0, outerLen, dim, true),\n        triangles = [];\n\n    if (!outerNode || outerNode.next === outerNode.prev) return triangles;\n\n    var minX, minY, maxX, maxY, x, y, invSize;\n\n    if (hasHoles) outerNode = eliminateHoles(data, holeIndices, outerNode, dim);\n\n    // if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox\n    if (data.length > 80 * dim) {\n        minX = maxX = data[0];\n        minY = maxY = data[1];\n\n        for (var i = dim; i < outerLen; i += dim) {\n            x = data[i];\n            y = data[i + 1];\n            if (x < minX) minX = x;\n            if (y < minY) minY = y;\n            if (x > maxX) maxX = x;\n            if (y > maxY) maxY = y;\n        }\n\n        // minX, minY and invSize are later used to transform coords into integers for z-order calculation\n        invSize = Math.max(maxX - minX, maxY - minY);\n        invSize = invSize !== 0 ? 1 / invSize : 0;\n    }\n\n    earcutLinked(outerNode, triangles, dim, minX, minY, invSize);\n\n    return triangles;\n}\n\n// create a circular doubly linked list from polygon points in the specified winding order\nfunction linkedList(data, start, end, dim, clockwise) {\n    var i, last;\n\n    if (clockwise === (signedArea(data, start, end, dim) > 0)) {\n        for (i = start; i < end; i += dim) last = insertNode(i, data[i], data[i + 1], last);\n    } else {\n        for (i = end - dim; i >= start; i -= dim) last = insertNode(i, data[i], data[i + 1], last);\n    }\n\n    if (last && equals(last, last.next)) {\n        removeNode(last);\n        last = last.next;\n    }\n\n    return last;\n}\n\n// eliminate colinear or duplicate points\nfunction filterPoints(start, end) {\n    if (!start) return start;\n    if (!end) end = start;\n\n    var p = start,\n        again;\n    do {\n        again = false;\n\n        if (!p.steiner && (equals(p, p.next) || area(p.prev, p, p.next) === 0)) {\n            removeNode(p);\n            p = end = p.prev;\n            if (p === p.next) break;\n            again = true;\n\n        } else {\n            p = p.next;\n        }\n    } while (again || p !== end);\n\n    return end;\n}\n\n// main ear slicing loop which triangulates a polygon (given as a linked list)\nfunction earcutLinked(ear, triangles, dim, minX, minY, invSize, pass) {\n    if (!ear) return;\n\n    // interlink polygon nodes in z-order\n    if (!pass && invSize) indexCurve(ear, minX, minY, invSize);\n\n    var stop = ear,\n        prev, next;\n\n    // iterate through ears, slicing them one by one\n    while (ear.prev !== ear.next) {\n        prev = ear.prev;\n        next = ear.next;\n\n        if (invSize ? isEarHashed(ear, minX, minY, invSize) : isEar(ear)) {\n            // cut off the triangle\n            triangles.push(prev.i / dim);\n            triangles.push(ear.i / dim);\n            triangles.push(next.i / dim);\n\n            removeNode(ear);\n\n            // skipping the next vertex leads to less sliver triangles\n            ear = next.next;\n            stop = next.next;\n\n            continue;\n        }\n\n        ear = next;\n\n        // if we looped through the whole remaining polygon and can't find any more ears\n        if (ear === stop) {\n            // try filtering points and slicing again\n            if (!pass) {\n                earcutLinked(filterPoints(ear), triangles, dim, minX, minY, invSize, 1);\n\n            // if this didn't work, try curing all small self-intersections locally\n            } else if (pass === 1) {\n                ear = cureLocalIntersections(filterPoints(ear), triangles, dim);\n                earcutLinked(ear, triangles, dim, minX, minY, invSize, 2);\n\n            // as a last resort, try splitting the remaining polygon into two\n            } else if (pass === 2) {\n                splitEarcut(ear, triangles, dim, minX, minY, invSize);\n            }\n\n            break;\n        }\n    }\n}\n\n// check whether a polygon node forms a valid ear with adjacent nodes\nfunction isEar(ear) {\n    var a = ear.prev,\n        b = ear,\n        c = ear.next;\n\n    if (area(a, b, c) >= 0) return false; // reflex, can't be an ear\n\n    // now make sure we don't have other points inside the potential ear\n    var p = ear.next.next;\n\n    while (p !== ear.prev) {\n        if (pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) &&\n            area(p.prev, p, p.next) >= 0) return false;\n        p = p.next;\n    }\n\n    return true;\n}\n\nfunction isEarHashed(ear, minX, minY, invSize) {\n    var a = ear.prev,\n        b = ear,\n        c = ear.next;\n\n    if (area(a, b, c) >= 0) return false; // reflex, can't be an ear\n\n    // triangle bbox; min & max are calculated like this for speed\n    var minTX = a.x < b.x ? (a.x < c.x ? a.x : c.x) : (b.x < c.x ? b.x : c.x),\n        minTY = a.y < b.y ? (a.y < c.y ? a.y : c.y) : (b.y < c.y ? b.y : c.y),\n        maxTX = a.x > b.x ? (a.x > c.x ? a.x : c.x) : (b.x > c.x ? b.x : c.x),\n        maxTY = a.y > b.y ? (a.y > c.y ? a.y : c.y) : (b.y > c.y ? b.y : c.y);\n\n    // z-order range for the current triangle bbox;\n    var minZ = zOrder(minTX, minTY, minX, minY, invSize),\n        maxZ = zOrder(maxTX, maxTY, minX, minY, invSize);\n\n    var p = ear.prevZ,\n        n = ear.nextZ;\n\n    // look for points inside the triangle in both directions\n    while (p && p.z >= minZ && n && n.z <= maxZ) {\n        if (p !== ear.prev && p !== ear.next &&\n            pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) &&\n            area(p.prev, p, p.next) >= 0) return false;\n        p = p.prevZ;\n\n        if (n !== ear.prev && n !== ear.next &&\n            pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y) &&\n            area(n.prev, n, n.next) >= 0) return false;\n        n = n.nextZ;\n    }\n\n    // look for remaining points in decreasing z-order\n    while (p && p.z >= minZ) {\n        if (p !== ear.prev && p !== ear.next &&\n            pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) &&\n            area(p.prev, p, p.next) >= 0) return false;\n        p = p.prevZ;\n    }\n\n    // look for remaining points in increasing z-order\n    while (n && n.z <= maxZ) {\n        if (n !== ear.prev && n !== ear.next &&\n            pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y) &&\n            area(n.prev, n, n.next) >= 0) return false;\n        n = n.nextZ;\n    }\n\n    return true;\n}\n\n// go through all polygon nodes and cure small local self-intersections\nfunction cureLocalIntersections(start, triangles, dim) {\n    var p = start;\n    do {\n        var a = p.prev,\n            b = p.next.next;\n\n        if (!equals(a, b) && intersects(a, p, p.next, b) && locallyInside(a, b) && locallyInside(b, a)) {\n\n            triangles.push(a.i / dim);\n            triangles.push(p.i / dim);\n            triangles.push(b.i / dim);\n\n            // remove two nodes involved\n            removeNode(p);\n            removeNode(p.next);\n\n            p = start = b;\n        }\n        p = p.next;\n    } while (p !== start);\n\n    return filterPoints(p);\n}\n\n// try splitting polygon into two and triangulate them independently\nfunction splitEarcut(start, triangles, dim, minX, minY, invSize) {\n    // look for a valid diagonal that divides the polygon into two\n    var a = start;\n    do {\n        var b = a.next.next;\n        while (b !== a.prev) {\n            if (a.i !== b.i && isValidDiagonal(a, b)) {\n                // split the polygon in two by the diagonal\n                var c = splitPolygon(a, b);\n\n                // filter colinear points around the cuts\n                a = filterPoints(a, a.next);\n                c = filterPoints(c, c.next);\n\n                // run earcut on each half\n                earcutLinked(a, triangles, dim, minX, minY, invSize);\n                earcutLinked(c, triangles, dim, minX, minY, invSize);\n                return;\n            }\n            b = b.next;\n        }\n        a = a.next;\n    } while (a !== start);\n}\n\n// link every hole into the outer loop, producing a single-ring polygon without holes\nfunction eliminateHoles(data, holeIndices, outerNode, dim) {\n    var queue = [],\n        i, len, start, end, list;\n\n    for (i = 0, len = holeIndices.length; i < len; i++) {\n        start = holeIndices[i] * dim;\n        end = i < len - 1 ? holeIndices[i + 1] * dim : data.length;\n        list = linkedList(data, start, end, dim, false);\n        if (list === list.next) list.steiner = true;\n        queue.push(getLeftmost(list));\n    }\n\n    queue.sort(compareX);\n\n    // process holes from left to right\n    for (i = 0; i < queue.length; i++) {\n        eliminateHole(queue[i], outerNode);\n        outerNode = filterPoints(outerNode, outerNode.next);\n    }\n\n    return outerNode;\n}\n\nfunction compareX(a, b) {\n    return a.x - b.x;\n}\n\n// find a bridge between vertices that connects hole with an outer ring and and link it\nfunction eliminateHole(hole, outerNode) {\n    outerNode = findHoleBridge(hole, outerNode);\n    if (outerNode) {\n        var b = splitPolygon(outerNode, hole);\n\n        // filter collinear points around the cuts\n        filterPoints(outerNode, outerNode.next);\n        filterPoints(b, b.next);\n    }\n}\n\n// David Eberly's algorithm for finding a bridge between hole and outer polygon\nfunction findHoleBridge(hole, outerNode) {\n    var p = outerNode,\n        hx = hole.x,\n        hy = hole.y,\n        qx = -Infinity,\n        m;\n\n    // find a segment intersected by a ray from the hole's leftmost point to the left;\n    // segment's endpoint with lesser x will be potential connection point\n    do {\n        if (hy <= p.y && hy >= p.next.y && p.next.y !== p.y) {\n            var x = p.x + (hy - p.y) * (p.next.x - p.x) / (p.next.y - p.y);\n            if (x <= hx && x > qx) {\n                qx = x;\n                if (x === hx) {\n                    if (hy === p.y) return p;\n                    if (hy === p.next.y) return p.next;\n                }\n                m = p.x < p.next.x ? p : p.next;\n            }\n        }\n        p = p.next;\n    } while (p !== outerNode);\n\n    if (!m) return null;\n\n    if (hx === qx) return m; // hole touches outer segment; pick leftmost endpoint\n\n    // look for points inside the triangle of hole point, segment intersection and endpoint;\n    // if there are no points found, we have a valid connection;\n    // otherwise choose the point of the minimum angle with the ray as connection point\n\n    var stop = m,\n        mx = m.x,\n        my = m.y,\n        tanMin = Infinity,\n        tan;\n\n    p = m;\n\n    do {\n        if (hx >= p.x && p.x >= mx && hx !== p.x &&\n                pointInTriangle(hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y)) {\n\n            tan = Math.abs(hy - p.y) / (hx - p.x); // tangential\n\n            if (locallyInside(p, hole) &&\n                (tan < tanMin || (tan === tanMin && (p.x > m.x || (p.x === m.x && sectorContainsSector(m, p)))))) {\n                m = p;\n                tanMin = tan;\n            }\n        }\n\n        p = p.next;\n    } while (p !== stop);\n\n    return m;\n}\n\n// whether sector in vertex m contains sector in vertex p in the same coordinates\nfunction sectorContainsSector(m, p) {\n    return area(m.prev, m, p.prev) < 0 && area(p.next, m, m.next) < 0;\n}\n\n// interlink polygon nodes in z-order\nfunction indexCurve(start, minX, minY, invSize) {\n    var p = start;\n    do {\n        if (p.z === null) p.z = zOrder(p.x, p.y, minX, minY, invSize);\n        p.prevZ = p.prev;\n        p.nextZ = p.next;\n        p = p.next;\n    } while (p !== start);\n\n    p.prevZ.nextZ = null;\n    p.prevZ = null;\n\n    sortLinked(p);\n}\n\n// Simon Tatham's linked list merge sort algorithm\n// http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html\nfunction sortLinked(list) {\n    var i, p, q, e, tail, numMerges, pSize, qSize,\n        inSize = 1;\n\n    do {\n        p = list;\n        list = null;\n        tail = null;\n        numMerges = 0;\n\n        while (p) {\n            numMerges++;\n            q = p;\n            pSize = 0;\n            for (i = 0; i < inSize; i++) {\n                pSize++;\n                q = q.nextZ;\n                if (!q) break;\n            }\n            qSize = inSize;\n\n            while (pSize > 0 || (qSize > 0 && q)) {\n\n                if (pSize !== 0 && (qSize === 0 || !q || p.z <= q.z)) {\n                    e = p;\n                    p = p.nextZ;\n                    pSize--;\n                } else {\n                    e = q;\n                    q = q.nextZ;\n                    qSize--;\n                }\n\n                if (tail) tail.nextZ = e;\n                else list = e;\n\n                e.prevZ = tail;\n                tail = e;\n            }\n\n            p = q;\n        }\n\n        tail.nextZ = null;\n        inSize *= 2;\n\n    } while (numMerges > 1);\n\n    return list;\n}\n\n// z-order of a point given coords and inverse of the longer side of data bbox\nfunction zOrder(x, y, minX, minY, invSize) {\n    // coords are transformed into non-negative 15-bit integer range\n    x = 32767 * (x - minX) * invSize;\n    y = 32767 * (y - minY) * invSize;\n\n    x = (x | (x << 8)) & 0x00FF00FF;\n    x = (x | (x << 4)) & 0x0F0F0F0F;\n    x = (x | (x << 2)) & 0x33333333;\n    x = (x | (x << 1)) & 0x55555555;\n\n    y = (y | (y << 8)) & 0x00FF00FF;\n    y = (y | (y << 4)) & 0x0F0F0F0F;\n    y = (y | (y << 2)) & 0x33333333;\n    y = (y | (y << 1)) & 0x55555555;\n\n    return x | (y << 1);\n}\n\n// find the leftmost node of a polygon ring\nfunction getLeftmost(start) {\n    var p = start,\n        leftmost = start;\n    do {\n        if (p.x < leftmost.x || (p.x === leftmost.x && p.y < leftmost.y)) leftmost = p;\n        p = p.next;\n    } while (p !== start);\n\n    return leftmost;\n}\n\n// check if a point lies within a convex triangle\nfunction pointInTriangle(ax, ay, bx, by, cx, cy, px, py) {\n    return (cx - px) * (ay - py) - (ax - px) * (cy - py) >= 0 &&\n           (ax - px) * (by - py) - (bx - px) * (ay - py) >= 0 &&\n           (bx - px) * (cy - py) - (cx - px) * (by - py) >= 0;\n}\n\n// check if a diagonal between two polygon nodes is valid (lies in polygon interior)\nfunction isValidDiagonal(a, b) {\n    return a.next.i !== b.i && a.prev.i !== b.i && !intersectsPolygon(a, b) && // dones't intersect other edges\n           (locallyInside(a, b) && locallyInside(b, a) && middleInside(a, b) && // locally visible\n            (area(a.prev, a, b.prev) || area(a, b.prev, b)) || // does not create opposite-facing sectors\n            equals(a, b) && area(a.prev, a, a.next) > 0 && area(b.prev, b, b.next) > 0); // special zero-length case\n}\n\n// signed area of a triangle\nfunction area(p, q, r) {\n    return (q.y - p.y) * (r.x - q.x) - (q.x - p.x) * (r.y - q.y);\n}\n\n// check if two points are equal\nfunction equals(p1, p2) {\n    return p1.x === p2.x && p1.y === p2.y;\n}\n\n// check if two segments intersect\nfunction intersects(p1, q1, p2, q2) {\n    var o1 = sign(area(p1, q1, p2));\n    var o2 = sign(area(p1, q1, q2));\n    var o3 = sign(area(p2, q2, p1));\n    var o4 = sign(area(p2, q2, q1));\n\n    if (o1 !== o2 && o3 !== o4) return true; // general case\n\n    if (o1 === 0 && onSegment(p1, p2, q1)) return true; // p1, q1 and p2 are collinear and p2 lies on p1q1\n    if (o2 === 0 && onSegment(p1, q2, q1)) return true; // p1, q1 and q2 are collinear and q2 lies on p1q1\n    if (o3 === 0 && onSegment(p2, p1, q2)) return true; // p2, q2 and p1 are collinear and p1 lies on p2q2\n    if (o4 === 0 && onSegment(p2, q1, q2)) return true; // p2, q2 and q1 are collinear and q1 lies on p2q2\n\n    return false;\n}\n\n// for collinear points p, q, r, check if point q lies on segment pr\nfunction onSegment(p, q, r) {\n    return q.x <= Math.max(p.x, r.x) && q.x >= Math.min(p.x, r.x) && q.y <= Math.max(p.y, r.y) && q.y >= Math.min(p.y, r.y);\n}\n\nfunction sign(num) {\n    return num > 0 ? 1 : num < 0 ? -1 : 0;\n}\n\n// check if a polygon diagonal intersects any polygon segments\nfunction intersectsPolygon(a, b) {\n    var p = a;\n    do {\n        if (p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i &&\n                intersects(p, p.next, a, b)) return true;\n        p = p.next;\n    } while (p !== a);\n\n    return false;\n}\n\n// check if a polygon diagonal is locally inside the polygon\nfunction locallyInside(a, b) {\n    return area(a.prev, a, a.next) < 0 ?\n        area(a, b, a.next) >= 0 && area(a, a.prev, b) >= 0 :\n        area(a, b, a.prev) < 0 || area(a, a.next, b) < 0;\n}\n\n// check if the middle point of a polygon diagonal is inside the polygon\nfunction middleInside(a, b) {\n    var p = a,\n        inside = false,\n        px = (a.x + b.x) / 2,\n        py = (a.y + b.y) / 2;\n    do {\n        if (((p.y > py) !== (p.next.y > py)) && p.next.y !== p.y &&\n                (px < (p.next.x - p.x) * (py - p.y) / (p.next.y - p.y) + p.x))\n            inside = !inside;\n        p = p.next;\n    } while (p !== a);\n\n    return inside;\n}\n\n// link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two;\n// if one belongs to the outer ring and another to a hole, it merges it into a single ring\nfunction splitPolygon(a, b) {\n    var a2 = new Node(a.i, a.x, a.y),\n        b2 = new Node(b.i, b.x, b.y),\n        an = a.next,\n        bp = b.prev;\n\n    a.next = b;\n    b.prev = a;\n\n    a2.next = an;\n    an.prev = a2;\n\n    b2.next = a2;\n    a2.prev = b2;\n\n    bp.next = b2;\n    b2.prev = bp;\n\n    return b2;\n}\n\n// create a node and optionally link it with previous one (in a circular doubly linked list)\nfunction insertNode(i, x, y, last) {\n    var p = new Node(i, x, y);\n\n    if (!last) {\n        p.prev = p;\n        p.next = p;\n\n    } else {\n        p.next = last.next;\n        p.prev = last;\n        last.next.prev = p;\n        last.next = p;\n    }\n    return p;\n}\n\nfunction removeNode(p) {\n    p.next.prev = p.prev;\n    p.prev.next = p.next;\n\n    if (p.prevZ) p.prevZ.nextZ = p.nextZ;\n    if (p.nextZ) p.nextZ.prevZ = p.prevZ;\n}\n\nfunction Node(i, x, y) {\n    // vertex index in coordinates array\n    this.i = i;\n\n    // vertex coordinates\n    this.x = x;\n    this.y = y;\n\n    // previous and next vertex nodes in a polygon ring\n    this.prev = null;\n    this.next = null;\n\n    // z-order curve value\n    this.z = null;\n\n    // previous and next nodes in z-order\n    this.prevZ = null;\n    this.nextZ = null;\n\n    // indicates whether this is a steiner point\n    this.steiner = false;\n}\n\n// return a percentage difference between the polygon area and its triangulation area;\n// used to verify correctness of triangulation\nearcut.deviation = function (data, holeIndices, dim, triangles) {\n    var hasHoles = holeIndices && holeIndices.length;\n    var outerLen = hasHoles ? holeIndices[0] * dim : data.length;\n\n    var polygonArea = Math.abs(signedArea(data, 0, outerLen, dim));\n    if (hasHoles) {\n        for (var i = 0, len = holeIndices.length; i < len; i++) {\n            var start = holeIndices[i] * dim;\n            var end = i < len - 1 ? holeIndices[i + 1] * dim : data.length;\n            polygonArea -= Math.abs(signedArea(data, start, end, dim));\n        }\n    }\n\n    var trianglesArea = 0;\n    for (i = 0; i < triangles.length; i += 3) {\n        var a = triangles[i] * dim;\n        var b = triangles[i + 1] * dim;\n        var c = triangles[i + 2] * dim;\n        trianglesArea += Math.abs(\n            (data[a] - data[c]) * (data[b + 1] - data[a + 1]) -\n            (data[a] - data[b]) * (data[c + 1] - data[a + 1]));\n    }\n\n    return polygonArea === 0 && trianglesArea === 0 ? 0 :\n        Math.abs((trianglesArea - polygonArea) / polygonArea);\n};\n\nfunction signedArea(data, start, end, dim) {\n    var sum = 0;\n    for (var i = start, j = end - dim; i < end; i += dim) {\n        sum += (data[j] - data[i]) * (data[i + 1] + data[j + 1]);\n        j = i;\n    }\n    return sum;\n}\n\n// turn a polygon in a multi-dimensional array form (e.g. as in GeoJSON) into a form Earcut accepts\nearcut.flatten = function (data) {\n    var dim = data[0][0].length,\n        result = {vertices: [], holes: [], dimensions: dim},\n        holeIndex = 0;\n\n    for (var i = 0; i < data.length; i++) {\n        for (var j = 0; j < data[i].length; j++) {\n            for (var d = 0; d < dim; d++) result.vertices.push(data[i][j][d]);\n        }\n        if (i > 0) {\n            holeIndex += data[i - 1].length;\n            result.holes.push(holeIndex);\n        }\n    }\n    return result;\n};\n","\n/**\n * Rearranges items so that all items in the [left, k] are the smallest.\n * The k-th element will have the (k - left + 1)-th smallest value in [left, right].\n *\n * @template T\n * @param {T[]} arr the array to partially sort (in place)\n * @param {number} k middle index for partial sorting (as defined above)\n * @param {number} [left=0] left index of the range to sort\n * @param {number} [right=arr.length-1] right index\n * @param {(a: T, b: T) => number} [compare = (a, b) => a - b] compare function\n */\nexport default function quickselect(arr, k, left = 0, right = arr.length - 1, compare = defaultCompare) {\n\n    while (right > left) {\n        if (right - left > 600) {\n            const n = right - left + 1;\n            const m = k - left + 1;\n            const z = Math.log(n);\n            const s = 0.5 * Math.exp(2 * z / 3);\n            const sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);\n            const newLeft = Math.max(left, Math.floor(k - m * s / n + sd));\n            const newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));\n            quickselect(arr, k, newLeft, newRight, compare);\n        }\n\n        const t = arr[k];\n        let i = left;\n        /** @type {number} */\n        let j = right;\n\n        swap(arr, left, k);\n        if (compare(arr[right], t) > 0) swap(arr, left, right);\n\n        while (i < j) {\n            swap(arr, i, j);\n            i++;\n            j--;\n            while (compare(arr[i], t) < 0) i++;\n            while (compare(arr[j], t) > 0) j--;\n        }\n\n        if (compare(arr[left], t) === 0) swap(arr, left, j);\n        else {\n            j++;\n            swap(arr, j, right);\n        }\n\n        if (j <= k) left = j + 1;\n        if (k <= j) right = j - 1;\n    }\n}\n\n/**\n * @template T\n * @param {T[]} arr\n * @param {number} i\n * @param {number} j\n */\nfunction swap(arr, i, j) {\n    const tmp = arr[i];\n    arr[i] = arr[j];\n    arr[j] = tmp;\n}\n\n/**\n * @template T\n * @param {T} a\n * @param {T} b\n * @returns {number}\n */\nfunction defaultCompare(a, b) {\n    return a < b ? -1 : a > b ? 1 : 0;\n}\n","// Polygon builders\nimport Geo from '../utils/geo';\nimport Vector from '../utils/vector';\nimport { default_uvs, outsideTile } from './common';\n\nimport earcut from 'earcut';\nimport quickselect from 'quickselect';\n\nconst up_vec3 = [0, 0, 1];\n\n\n/**\n * To tesselate flat 2D polygons.\n * The x & y coordinates will be set as first two elements of provided vertex_template.\n * @param {Array.<Array.<Array.<Array.<number>>>>} polygons The polygons to tesselate.\n * @param {VertexData} vertex_data The VertexData were to store the results\n * @param {Array.<number>} vertex_template The vertex template to use\n * @param {Object} options The texture coordinate options to apply\n * @return {number} the number of the resulting geometries (triangles)\n */\nexport function buildPolygons (\n    polygons, vertex_data, vertex_template, { texcoord_index, texcoord_scale, texcoord_normalize }) {\n\n    let vertex_elements = vertex_data.vertex_elements,\n        num_polygons = polygons.length,\n        geom_count = 0,\n        min_u, min_v, max_u, max_v,\n        min_x, min_y, max_x, max_y,\n        span_x, span_y, scale_u, scale_v;\n\n    if (texcoord_index) {\n        texcoord_normalize = texcoord_normalize || 1;\n        [min_u, min_v, max_u, max_v] = texcoord_scale || default_uvs;\n    }\n\n    for (let p = 0; p < num_polygons; p++) {\n\n        const max_rings = 500;\n        let polygon = polygons[p];\n\n        if (polygon.length > max_rings) {\n            polygon = [...polygon]; // copy to avoid modifying original\n            quickselect(polygon, max_rings, 1, polygon.length - 1, (a, b) => b.area - a.area);\n            polygon = polygon.slice(0, max_rings);\n        }\n\n        const indices = triangulatePolygon(earcut.flatten(polygon));\n        const num_indices = indices.length;\n        const element_offset = vertex_data.vertex_count;\n\n        // The vertices and vertex-elements must not be added if earcut returns no indices:\n        if (num_indices) {\n\n            // Find polygon extents to calculate UVs, fit them to the axis-aligned bounding box:\n            if (texcoord_index) {\n                [min_x, min_y, max_x, max_y] = Geo.findBoundingBox(polygon),\n                span_x = max_x - min_x,\n                span_y = max_y - min_y,\n                scale_u = (max_u - min_u) / span_x,\n                scale_v = (max_v - min_v) / span_y;\n            }\n\n            for (let ring_index = 0; ring_index < polygon.length; ring_index++) {\n                // Add vertex data:\n                let polygon_ring = polygon[ring_index];\n                for (let i = 0; i < polygon_ring.length; i++) {\n                    let vertex = polygon_ring[i];\n                    vertex_template[0] = vertex[0];\n                    vertex_template[1] = vertex[1];\n\n                    // Add UVs:\n                    if (texcoord_index) {\n                        vertex_template[texcoord_index + 0] = ((vertex[0] - min_x) * scale_u + min_u) * texcoord_normalize;\n                        vertex_template[texcoord_index + 1] = ((vertex[1] - min_y) * scale_v + min_v) * texcoord_normalize;\n                    }\n\n                    vertex_data.addVertex(vertex_template);\n                }\n            }\n\n            // Add element indices:\n            for (let i = 0; i < num_indices; i++) {\n                vertex_elements.push(element_offset + indices[i]);\n            }\n            geom_count += num_indices / 3;\n\n        }\n    }\n    return geom_count;\n}\n\n\n// Tesselate and extrude a flat 2D polygon into a simple 3D model with fixed height and add to GL vertex buffer\nexport function buildExtrudedPolygons (\n    polygons,\n    z, height, min_height,\n    vertex_data, vertex_template,\n    normal_index,\n    normal_normalize,\n    {\n        remove_tile_edges,\n        tile_edge_tolerance,\n        texcoord_index,\n        texcoord_scale,\n        texcoord_normalize,\n        winding\n    }) {\n\n    // Top\n    var min_z = z + (min_height || 0);\n    var max_z = z + height;\n    vertex_template[2] = max_z;\n    var geom_count = buildPolygons(polygons, vertex_data, vertex_template, { texcoord_index, texcoord_scale, texcoord_normalize });\n\n    var vertex_elements = vertex_data.vertex_elements;\n    var element_offset = vertex_data.vertex_count;\n\n    // Walls\n    // Fit UVs to wall quad\n    if (texcoord_index) {\n        texcoord_normalize = texcoord_normalize || 1;\n        var [min_u, min_v, max_u, max_v] = texcoord_scale || default_uvs;\n        var texcoords = [\n            [min_u, max_v],\n            [min_u, min_v],\n            [max_u, min_v],\n            [max_u, max_v]\n        ];\n    }\n\n    var num_polygons = polygons.length;\n    for (var p=0; p < num_polygons; p++) {\n        var polygon = polygons[p];\n\n        for (var q=0; q < polygon.length; q++) {\n            var contour = polygon[q];\n\n            for (var w=0; w < contour.length - 1; w++) {\n                if (remove_tile_edges && outsideTile(contour[w], contour[w+1], tile_edge_tolerance)) {\n                    continue; // don't extrude tile edges\n                }\n\n                // Wall order is dependent on winding order, so that normals face outward\n                let w0, w1;\n                if (winding === 'CCW') {\n                    w0 = w;\n                    w1 = w+1;\n                }\n                else {\n                    w0 = w+1;\n                    w1 = w;\n                }\n\n                // Two triangles for the quad formed by each vertex pair, going from bottom to top height\n                var wall_vertices = [\n                    [contour[w1][0], contour[w1][1], max_z],\n                    [contour[w1][0], contour[w1][1], min_z],\n                    [contour[w0][0], contour[w0][1], min_z],\n                    [contour[w0][0], contour[w0][1], max_z]\n                ];\n\n                // Calc the normal of the wall from up vector and one segment of the wall triangles\n                let wall_vec = Vector.normalize([contour[w1][0] - contour[w0][0], contour[w1][1] - contour[w0][1], 0]);\n                let normal = Vector.cross(up_vec3, wall_vec);\n\n                // Update vertex template with current surface normal\n                vertex_template[normal_index + 0] = normal[0] * normal_normalize;\n                vertex_template[normal_index + 1] = normal[1] * normal_normalize;\n                vertex_template[normal_index + 2] = normal[2] * normal_normalize;\n\n                for (var wv=0; wv < wall_vertices.length; wv++) {\n                    vertex_template[0] = wall_vertices[wv][0];\n                    vertex_template[1] = wall_vertices[wv][1];\n                    vertex_template[2] = wall_vertices[wv][2];\n\n                    if (texcoord_index) {\n                        vertex_template[texcoord_index + 0] = texcoords[wv][0] * texcoord_normalize;\n                        vertex_template[texcoord_index + 1] = texcoords[wv][1] * texcoord_normalize;\n                    }\n\n                    vertex_data.addVertex(vertex_template);\n                }\n\n                vertex_elements.push(element_offset + 0);\n                vertex_elements.push(element_offset + 1);\n                vertex_elements.push(element_offset + 2);\n                vertex_elements.push(element_offset + 2);\n                vertex_elements.push(element_offset + 3);\n                vertex_elements.push(element_offset + 0);\n\n                element_offset += 4;\n                geom_count += 2;\n            }\n        }\n    }\n    return geom_count;\n}\n\n// Triangulation using earcut\n// https://github.com/mapbox/earcut\nexport function triangulatePolygon (data) {\n    return earcut(data.vertices, data.holes, data.dimensions);\n}\n","// Polygon rendering style\n\nimport {Style} from '../style';\nimport StyleParser from '../style_parser';\nimport gl from '../../gl/constants'; // web workers don't have access to GL context, so import all GL constants\nimport VertexLayout from '../../gl/vertex_layout';\nimport {buildPolygons, buildExtrudedPolygons} from '../../builders/polygons';\nimport Geo from '../../utils/geo';\n\nimport polygons_vs from './polygons_vertex.glsl';\nimport polygons_fs from './polygons_fragment.glsl';\n\nexport const Polygons = Object.create(Style);\n\nObject.assign(Polygons, {\n    name: 'polygons',\n    built_in: true,\n    vertex_shader_src: polygons_vs,\n    fragment_shader_src: polygons_fs,\n    selection: true, // enable feature selection\n\n    init() {\n        Style.init.apply(this, arguments);\n\n        // Tell the shader about optional attributes (shader is shared with lines style, which has different config)\n        this.defines.TANGRAM_NORMAL_ATTRIBUTE = true;\n        this.defines.TANGRAM_TEXTURE_COORDS = this.texcoords;\n    },\n\n    _parseFeature (feature, draw, context) {\n        var style = this.feature_style;\n\n        style.color = this.parseColor(draw.color, context);\n        if (!style.color) {\n            return null;\n        }\n\n        style.alpha = StyleParser.evalCachedProperty(draw.alpha, context); // optional alpha override\n\n        style.variant = draw.variant; // pre-calculated mesh variant\n\n        style.z = StyleParser.evalCachedDistanceProperty(draw.z, context) || StyleParser.defaults.z;\n        style.z *= Geo.height_scale; // provide sub-meter precision of height values\n\n        style.extrude = StyleParser.evalProperty(draw.extrude, context);\n        if (style.extrude) {\n            // use feature's height and min_height properties\n            if (style.extrude === true) {\n                style.height = feature.properties.height || StyleParser.defaults.height;\n                style.min_height = feature.properties.min_height || StyleParser.defaults.min_height;\n\n            }\n            // explicit height, no min_height\n            else if (typeof style.extrude === 'number') {\n                style.height = style.extrude;\n                style.min_height = 0;\n            }\n            // explicit height and min_height\n            else if (Array.isArray(style.extrude)) {\n                style.min_height = style.extrude[0];\n                style.height = style.extrude[1];\n            }\n\n            style.height *= Geo.height_scale;       // provide sub-meter precision of height values\n            style.min_height *= Geo.height_scale;\n        }\n\n        style.tile_edges = draw.tile_edges; // usually activated for debugging, or rare visualization needs\n\n        return style;\n    },\n\n    _preprocess (draw) {\n        draw.color = StyleParser.createColorPropertyCache(draw.color);\n        draw.alpha = StyleParser.createPropertyCache(draw.alpha);\n        draw.z = StyleParser.createPropertyCache(draw.z, StyleParser.parseUnits);\n        this.computeVariant(draw);\n        return draw;\n    },\n\n    // Calculate and store mesh variant (unique by draw group but not feature)\n    computeVariant (draw) {\n        // Factors that determine a unique mesh rendering variant\n        const selection = (draw.interactive ? 1 : 0); // whether feature has interactivity\n        const normal = (draw.extrude != null ? 1 : 0); // whether feature has extrusion (need per-vertex normals)\n        const texcoords = (this.texcoords ? 1 : 0); // whether feature has texture UVs\n        const blend_order = this.getBlendOrderForDraw(draw);\n        const key = [selection, normal, texcoords, blend_order].join('/');\n        draw.variant = key;\n\n        if (this.variants[key] == null) {\n            this.variants[key] = {\n                key,\n                blend_order,\n                mesh_order: 0,\n                selection,\n                normal,\n                texcoords\n            };\n        }\n    },\n\n    // Override\n    // Create or return desired vertex layout permutation based on flags\n    vertexLayoutForMeshVariant (variant) {\n        if (this.vertex_layouts[variant.key] == null) {\n            // Attributes for this mesh variant\n            // Optional attributes have placeholder values assigned with `static` parameter\n            const attribs = [\n                { name: 'a_position', size: 4, type: gl.SHORT, normalized: false },\n                { name: 'a_normal', size: 3, type: gl.BYTE, normalized: true, static: (variant.normal ? null : [0, 0, 1]) }, // gets padded to 4-bytes\n                { name: 'a_color', size: 4, type: gl.UNSIGNED_BYTE, normalized: true },\n                { name: 'a_selection_color', size: 4, type: gl.UNSIGNED_BYTE, normalized: true, static: (variant.selection ? null : [0, 0, 0, 0]) },\n                { name: 'a_texcoord', size: 2, type: gl.UNSIGNED_SHORT, normalized: true, static: (variant.texcoords ? null : [0, 0]) }\n            ];\n\n            this.addCustomAttributesToAttributeList(attribs);\n            this.vertex_layouts[variant.key] = new VertexLayout(attribs);\n        }\n        return this.vertex_layouts[variant.key];\n    },\n\n    // Override\n    meshVariantTypeForDraw (draw) {\n        return this.variants[draw.variant]; // return pre-calculated mesh variant\n    },\n\n    /**\n     * A \"template\" that sets constant attibutes for each vertex, which is then modified per vertex or per feature.\n     * A plain JS array matching the order of the vertex layout.\n     */\n    makeVertexTemplate(style, mesh) {\n        let i = 0;\n\n        // a_position.xyz - vertex position\n        // a_position.w - layer order\n        this.vertex_template[i++] = 0;\n        this.vertex_template[i++] = 0;\n        this.vertex_template[i++] = style.z || 0;\n        this.vertex_template[i++] = this.scaleOrder(style.order);\n\n        // a_normal.xyz - surface normal\n        // only stored per-vertex for extruded features (hardcoded to 'up' for others)\n        if (mesh.variant.normal) {\n            this.vertex_template[i++] = 0;\n            this.vertex_template[i++] = 0;\n            this.vertex_template[i++] = 1 * 127;\n        }\n\n        // a_color.rgba - feature color\n        this.vertex_template[i++] = style.color[0] * 255;\n        this.vertex_template[i++] = style.color[1] * 255;\n        this.vertex_template[i++] = style.color[2] * 255;\n        this.vertex_template[i++] = (style.alpha != null ? style.alpha : style.color[3]) * 255;\n\n        // a_selection_color.rgba - selection color\n        if (mesh.variant.selection) {\n            this.vertex_template[i++] = style.selection_color[0] * 255;\n            this.vertex_template[i++] = style.selection_color[1] * 255;\n            this.vertex_template[i++] = style.selection_color[2] * 255;\n            this.vertex_template[i++] = style.selection_color[3] * 255;\n        }\n\n        // a_texcoord.uv - texture coordinates\n        if (mesh.variant.texcoords) {\n            this.vertex_template[i++] = 0;\n            this.vertex_template[i++] = 0;\n        }\n\n        this.addCustomAttributesToVertexTemplate(style, i);\n        return this.vertex_template;\n    },\n\n    buildPolygons(polygons, style, context) {\n        let mesh = this.getTileMesh(context.tile, this.meshVariantTypeForDraw(style));\n        let vertex_data = mesh.vertex_data;\n        let vertex_layout = vertex_data.vertex_layout;\n        let vertex_template = this.makeVertexTemplate(style, mesh);\n        let options = {\n            texcoord_index: vertex_layout.index.a_texcoord,\n            texcoord_normalize: 65535, // scale UVs to unsigned shorts\n            remove_tile_edges: !style.tile_edges,\n            tile_edge_tolerance: Geo.tile_scale * context.tile.pad_scale * 4,\n            winding: context.winding\n        };\n\n        // Extruded polygons (e.g. 3D buildings)\n        if (style.extrude && style.height) {\n            return buildExtrudedPolygons(\n                polygons,\n                style.z, style.height, style.min_height,\n                vertex_data, vertex_template,\n                vertex_layout.index.a_normal,\n                127, // scale normals to signed bytes\n                options\n            );\n        }\n        // Regular polygons\n        else {\n            return buildPolygons(\n                polygons,\n                vertex_data, vertex_template,\n                options\n            );\n        }\n    }\n\n});\n","// Geometry building functions\n\nimport Vector from '../utils/vector';\nimport Geo from '../utils/geo';\nimport {outsideTile, isCoordOutsideTile} from './common';\n\nconst zero_vec2 = [0, 0];\n\n// Build tessellated triangles for a polyline\nconst CAP_TYPE = {\n    butt: 0,\n    square: 1,\n    round: 2\n};\n\nconst JOIN_TYPE = {\n    miter: 0,\n    bevel: 1,\n    round: 2\n};\n\nconst DEFAULT_MITER_LIMIT = 3;\nconst MIN_FAN_WIDTH = 5; // Width of line in tile units to place 1 triangle per fan\nconst TEXCOORD_NORMALIZE = 65535; // Scaling factor for UV attribute values\n\n// Scaling factor to add precision to line texture V coordinate packed as normalized short\nconst V_SCALE_ADJUST = Geo.tile_scale;\nconst zero_v = [0, 0], one_v = [1, 0], mid_v = [0.5, 0]; // reusable instances, updated with V coordinate\n\nexport function buildPolylines (\n    lines,\n    style,\n    vertex_data,\n    vertex_template,\n    vindex,\n    closed_polygon,\n    remove_tile_edges,\n    tile_edge_tolerance) {\n\n    var cap_type = style.cap ? CAP_TYPE[style.cap] : CAP_TYPE.butt;\n    var join_type = style.join ? JOIN_TYPE[style.join] : JOIN_TYPE.miter;\n\n    // Configure miter limit\n    if (join_type === JOIN_TYPE.miter) {\n        const miter_limit = style.miter_limit || DEFAULT_MITER_LIMIT; // default miter limit\n        var miter_len_sq = miter_limit * miter_limit;\n    }\n\n    // Texture Variables\n    var v_scale;\n    if (vindex.a_texcoord) {\n        v_scale = 1 / (style.texcoord_width * V_SCALE_ADJUST); // scales line texture as a ratio of the line's width\n    }\n\n    // Values that are constant for each line and are passed to helper functions\n    var context = {\n        closed_polygon,\n        remove_tile_edges,\n        tile_edge_tolerance,\n        miter_len_sq,\n        join_type,\n        cap_type,\n        vertex_data,\n        vertex_template,\n        half_width: style.width / 2,\n        extrude_index: vindex.a_extrude,\n        offset_index: vindex.a_offset,\n        v_scale,\n        texcoord_index: vindex.a_texcoord,\n        texcoord_width: style.texcoord_width,\n        offset: style.offset,\n        geom_count: 0\n    };\n\n    // Process lines\n    for (let i = 0; i < lines.length; i++) {\n        buildPolyline(lines[i], context);\n    }\n\n    // Process extra lines (which are created above if lines need to be mutated for easier processing)\n    if (context.extra_lines) {\n        for (let i = 0; i < context.extra_lines.length; i++) {\n            buildPolyline(context.extra_lines[i], context);\n        }\n    }\n\n    return context.geom_count;\n}\n\nfunction buildPolyline(line, context){\n    // Skip if line is not valid\n    if (line.length < 2) {\n        return;\n    }\n\n    var coordCurr, coordNext, normPrev, normNext;\n    var {join_type, cap_type, closed_polygon, remove_tile_edges, tile_edge_tolerance, v_scale, miter_len_sq} = context;\n    var has_texcoord = (context.texcoord_index != null);\n    var v = 0; // Texture v-coordinate\n\n    // Loop backwards through line to a tile boundary if found\n    // since you need to draw lines that are only partially inside the tile,\n    // so we start at the first index where it is safe to loop through to the last index within the tile\n    if (closed_polygon && join_type === JOIN_TYPE.miter) {\n        var boundaryIndex = getTileBoundaryIndex(line);\n        if (boundaryIndex !== 0) {\n            // create new line that is a cyclic permutation of the original\n            var permutedLine = permuteLine(line, boundaryIndex);\n            context.extra_lines = context.extra_lines || [];\n            context.extra_lines.push(permutedLine);\n            return;\n        }\n    }\n\n    var index_start = 0;\n    var index_end = line.length - 1;\n    var ignored_indices_count = 0;\n\n    // FIRST POINT\n    // loop through beginning points if duplicates\n    coordCurr = line[index_start];\n    coordNext = line[index_start + 1];\n    while (Vector.isEqual(coordCurr, coordNext)) {\n        index_start++;\n        coordCurr = coordNext;\n        coordNext = line[index_start + 1];\n        ignored_indices_count++;\n        if (index_start === line.length - 1) {\n            return;\n        }\n    }\n\n    // loop through ending points to check for duplicates\n    while (Vector.isEqual(line[index_end], line[index_end - 1])) {\n        index_end--;\n        ignored_indices_count++;\n        if (index_end === 0) {\n            return;\n        }\n    }\n\n    if (line.length < 2 + ignored_indices_count) {\n        return;\n    }\n\n    normNext = Vector.normalize(Vector.perp(coordCurr, coordNext));\n\n    // Skip tile boundary lines and append a new line if needed\n    if (remove_tile_edges && outsideTile(coordCurr, coordNext, tile_edge_tolerance)) {\n        var nonBoundarySegment = getNextNonBoundarySegment(line, index_start, tile_edge_tolerance);\n        if (nonBoundarySegment) {\n            context.extra_lines = context.extra_lines || [];\n            context.extra_lines.push(nonBoundarySegment);\n        }\n        return;\n    }\n\n    if (closed_polygon){\n        // Begin the polygon with a join (connecting the first and last segments)\n        normPrev = Vector.normalize(Vector.perp(line[index_end - 1], coordCurr));\n        startPolygon(coordCurr, normPrev, normNext, join_type, context);\n    }\n    else {\n        // If line begins at edge, don't add a cap\n        if (!isCoordOutsideTile(coordCurr)) {\n            addCap(coordCurr, v, normNext, cap_type, true, context);\n            if (has_texcoord && cap_type !== CAP_TYPE.butt) {\n                v += 0.5 * v_scale * context.texcoord_width;\n            }\n        }\n\n        // Add first pair of points for the line strip\n        addVertex(coordCurr, normNext, normNext, 1, v, context, 1);\n        addVertex(coordCurr, normNext, normNext, 0, v, context, -1);\n    }\n\n    // INTERMEDIARY POINTS\n    if (has_texcoord) {\n        v += v_scale * Vector.length(Vector.sub(coordNext, coordCurr));\n    }\n\n    for (var i = index_start + 1; i < index_end; i++) {\n        var currIndex = i;\n        var nextIndex = i + 1;\n        coordCurr = line[currIndex];\n        coordNext = line[nextIndex];\n\n        // Skip redundant vertices\n        if (Vector.isEqual(coordCurr, coordNext)) {\n            continue;\n        }\n\n        // Remove tile boundaries\n        if (remove_tile_edges && outsideTile(coordCurr, coordNext, tile_edge_tolerance)) {\n            addVertex(coordCurr, normNext, normNext, 1, v, context, 1);\n            addVertex(coordCurr, normNext, normNext, 0, v, context, -1);\n\n            indexPairs(1, context);\n\n            var nonBoundaryLines = getNextNonBoundarySegment(line, currIndex + 1, tile_edge_tolerance);\n            if (nonBoundaryLines) {\n                context.extra_lines = context.extra_lines || [];\n                context.extra_lines.push(nonBoundaryLines);\n            }\n            return;\n        }\n\n        normPrev = normNext;\n        normNext = Vector.normalize(Vector.perp(coordCurr, coordNext));\n\n        // Add join\n        if (join_type === JOIN_TYPE.miter) {\n            addMiter(v, coordCurr, normPrev, normNext, miter_len_sq, false, context);\n        }\n        else {\n            addJoin(join_type, v, coordCurr, normPrev, normNext, false, context);\n        }\n\n        if (has_texcoord) {\n            v += v_scale * Vector.length(Vector.sub(coordNext, coordCurr));\n        }\n    }\n\n    // LAST POINT\n    coordCurr = coordNext;\n    normPrev = normNext;\n\n    if (closed_polygon) {\n        // Close the polygon with a miter joint or butt cap if on a tile boundary\n        normNext = Vector.normalize(Vector.perp(coordCurr, line[1]));\n        endPolygon(coordCurr, normPrev, normNext, join_type, v, context);\n    }\n    else {\n        // Finish the line strip\n        addVertex(coordCurr, normPrev, normNext, 1, v, context, 1);\n        addVertex(coordCurr, normPrev, normNext, 0, v, context, -1);\n\n        indexPairs(1, context);\n\n        // If line ends at edge, don't add a cap\n        if (!isCoordOutsideTile(coordCurr)) {\n            addCap(coordCurr, v, normPrev, cap_type, false, context);\n        }\n    }\n\n}\n\nfunction getTileBoundaryIndex(line){\n    if (isCoordOutsideTile(line[0])) {\n        return 0;\n    }\n\n    for (var backIndex = 0; backIndex < line.length; backIndex++) {\n        var coordCurr = line[line.length - 1 - backIndex];\n        if (isCoordOutsideTile(coordCurr)) {\n            return line.length - 1 - backIndex;\n        }\n    }\n\n    return 0;\n}\n\n// Iterate through line from startIndex to find a segment not on a tile boundary, if any.\nfunction getNextNonBoundarySegment (line, startIndex, tolerance) {\n    var endIndex = startIndex;\n    while (line[endIndex + 1] && outsideTile(line[endIndex], line[endIndex + 1], tolerance)) {\n        endIndex++;\n    }\n\n    // If there is a line segment remaining that is within the tile, push it to the lines array\n    return (line.length - endIndex >= 2) ? line.slice(endIndex) : false;\n}\n\n// Begin a polygon with a join connecting to the last segment (if valid join-type specified)\nfunction startPolygon(coordCurr, normPrev, normNext, join_type, context){\n    // If polygon starts on a tile boundary, don't add a join\n    if (join_type === undefined || isCoordOutsideTile(coordCurr)) {\n        addVertex(coordCurr, normNext, normNext, 1, 0, context, 1);\n        addVertex(coordCurr, normNext, normNext, 0, 0, context, -1);\n    }\n    else {\n        // If polygon starts within a tile, add a join\n        var v = 0;\n        if (join_type === JOIN_TYPE.miter) {\n            addMiter(v, coordCurr, normPrev, normNext, context.miter_len_sq, true, context);\n        }\n        else {\n            addJoin(join_type, v, coordCurr, normPrev, normNext, true, context);\n        }\n    }\n}\n\n// End a polygon appropriately\nfunction endPolygon(coordCurr, normPrev, normNext, join_type, v, context) {\n    // If polygon ends on a tile boundary, don't add a join\n    if (isCoordOutsideTile(coordCurr)) {\n        addVertex(coordCurr, normPrev, normPrev, 1, v, context, 1);\n        addVertex(coordCurr, normPrev, normPrev, 0, v, context, -1);\n        indexPairs(1, context);\n    }\n    else {\n        // If polygon ends within a tile, add Miter or no joint (join added on startPolygon)\n        var miterVec = createMiterVec(normPrev, normNext);\n\n        if (join_type === JOIN_TYPE.miter && Vector.lengthSq(miterVec) > context.miter_len_sq) {\n            join_type = JOIN_TYPE.bevel; // switch to bevel\n        }\n\n        if (join_type === JOIN_TYPE.miter) {\n            addVertex(coordCurr, miterVec, normPrev, 1, v, context, 1);\n            addVertex(coordCurr, miterVec, normPrev, 0, v, context, -1);\n            indexPairs(1, context);\n        }\n        else {\n            addVertex(coordCurr, normPrev, normPrev, 1, v, context, 1);\n            addVertex(coordCurr, normPrev, normPrev, 0, v, context, -1);\n            indexPairs(1, context);\n        }\n    }\n}\n\nfunction createMiterVec(normPrev, normNext) {\n    var miterVec = Vector.normalize(Vector.add(normPrev, normNext));\n    var scale = 2 / (1 + Math.abs(Vector.dot(normPrev, miterVec)));\n    return Vector.mult(miterVec, scale * scale);\n}\n\n// Add a miter vector or a join if the miter is too sharp\nfunction addMiter (v, coordCurr, normPrev, normNext, miter_len_sq, isBeginning, context) {\n    var miterVec = createMiterVec(normPrev, normNext);\n\n    //  Miter limit: if miter join is too sharp, convert to bevel instead\n    if (Vector.lengthSq(miterVec) > miter_len_sq) {\n        addJoin(JOIN_TYPE.bevel, v, coordCurr, normPrev, normNext, isBeginning, context);\n    }\n    else {\n        addVertex(coordCurr, miterVec, miterVec, 1, v, context, 1);\n        addVertex(coordCurr, miterVec, miterVec, 0, v, context, -1);\n        if (!isBeginning) {\n            indexPairs(1, context);\n        }\n    }\n}\n\n// Add a bevel or round join\nfunction addJoin(join_type, v, coordCurr, normPrev, normNext, isBeginning, context) {\n    var miterVec = createMiterVec(normPrev, normNext);\n    var isClockwise = (normNext[0] * normPrev[1] - normNext[1] * normPrev[0] > 0);\n\n    if (context.texcoord_index != null) {\n        zero_v[1] = v;\n        one_v[1] = v;\n    }\n\n    if (isClockwise){\n        addVertex(coordCurr, miterVec, miterVec, 1, v, context, 1);\n        addVertex(coordCurr, normPrev, miterVec, 0, v, context, -1);\n\n        if (!isBeginning) {\n            indexPairs(1, context);\n        }\n\n        addFan(coordCurr,\n            // extrusion vector of first vertex\n            Vector.neg(normPrev),\n            // controls extrude distance of pivot vertex\n            miterVec,\n            // extrusion vector of last vertex\n            Vector.neg(normNext),\n            // line normal (unused here)\n            miterVec,\n            // uv coordinates\n            zero_v, one_v, zero_v,\n            false, (join_type === JOIN_TYPE.bevel), context\n        );\n\n        addVertex(coordCurr, miterVec, miterVec, 1, v, context, 1);\n        addVertex(coordCurr, normNext, miterVec, 0, v, context, -1);\n    } else {\n        addVertex(coordCurr, normPrev, miterVec, 1, v, context, 1);\n        addVertex(coordCurr, miterVec, miterVec, 0, v, context, -1);\n\n        if (!isBeginning) {\n            indexPairs(1, context);\n        }\n\n        addFan(coordCurr,\n            // extrusion vector of first vertex\n            normPrev,\n            // extrusion vector of pivot vertex\n            Vector.neg(miterVec),\n            // extrusion vector of last vertex\n            normNext,\n            // line normal for offset\n            miterVec,\n            // uv coordinates\n            one_v, zero_v, one_v,\n            false, (join_type === JOIN_TYPE.bevel), context\n        );\n\n        addVertex(coordCurr, normNext, miterVec, 1, v, context, 1);\n        addVertex(coordCurr, miterVec, miterVec, 0, v, context, -1);\n    }\n}\n\n// Add indices to vertex_elements\nfunction indexPairs(num_pairs, context){\n    var vertex_elements = context.vertex_data.vertex_elements;\n    var num_vertices = context.vertex_data.vertex_count;\n    var offset = num_vertices - 2 * num_pairs - 2;\n\n    for (var i = 0; i < num_pairs; i++){\n        vertex_elements.push(offset + 2 * i + 2);\n        vertex_elements.push(offset + 2 * i + 1);\n        vertex_elements.push(offset + 2 * i + 0);\n        vertex_elements.push(offset + 2 * i + 2);\n        vertex_elements.push(offset + 2 * i + 3);\n        vertex_elements.push(offset + 2 * i + 1);\n        context.geom_count += 2;\n    }\n}\n\nfunction addVertex(position, extrude, normal, u, v, context, flip) {\n    var vertex_template = context.vertex_template;\n    var vertex_data = context.vertex_data;\n\n    // set vertex position\n    vertex_template[0] = position[0];\n    vertex_template[1] = position[1];\n\n    // set line extrusion vector\n    let len = context.half_width * flip;\n    vertex_template[context.extrude_index + 0] = extrude[0] * len;\n    vertex_template[context.extrude_index + 1] = extrude[1] * len;\n\n    // set line offset vector\n    if (context.offset) {\n        vertex_template[context.offset_index + 0] = normal[0] * context.offset;\n        vertex_template[context.offset_index + 1] = normal[1] * context.offset;\n    }\n\n    // set UVs\n    if (context.texcoord_index != null) {\n        vertex_template[context.texcoord_index + 0] = u * TEXCOORD_NORMALIZE;\n        vertex_template[context.texcoord_index + 1] = v * TEXCOORD_NORMALIZE;\n    }\n\n    vertex_data.addVertex(vertex_template);\n}\n\n//  Tesselate a fan geometry between points A ----- B\n//  using their normals from a center p      \\ . . /\n//  and interpolating their UVs               \\ p /\n//                                             \\./\n//                                              C\nvar uvCurr = [0, 0];\n\nfunction addFan (coord, eA, eC, eB, normal, uvA, uvC, uvB, isCap, isBevel, context) {\n    // eA = extrusion vector of first outer vertex\n    // eC = extrusion vector of inner vertex\n    // eA, eC, eB = extrusion vectors\n    // normal = line normal for calculating cap offsets\n    // coord = center point p - vertex connecting two line segments\n\n    var cross = eA[0] * eB[1] - eA[1] * eB[0];\n    var dot = Vector.dot(eA, eB);\n\n    var angle = Math.atan2(cross, dot);\n    while (angle >= Math.PI) {\n        angle -= 2*Math.PI;\n    }\n\n    if (isBevel) {\n        numTriangles = 1;\n    } else {\n        // vary number of triangles in fan with angle (based on MIN_FAN_WIDTH)\n        var numTriangles = trianglesPerArc(angle, context.half_width);\n        if (numTriangles < 1) {\n            return;\n        }\n    }\n\n    var pivotIndex = context.vertex_data.vertex_count;\n    var vertex_elements = context.vertex_data.vertex_elements;\n    if (angle < 0) { // cw\n        addVertex(coord, eC, normal, uvC[0], uvC[1], context, 1);\n        addVertex(coord, eA, normal, uvA[0], uvA[1], context, 1);\n    } else { // ccw\n        addVertex(coord, eC, normal, uvC[0], uvC[1], context, 1);\n        addVertex(coord, eA, normal, uvA[0], uvA[1], context, 1);\n    }\n\n    var blade = eA;\n\n    var has_texcoord = (context.texcoord_index != null);\n    if (has_texcoord) {\n        if (isCap){\n            var affine_uvCurr = Vector.sub(uvA, uvC);\n        }\n        else {\n            uvCurr = Vector.copy(uvA);\n            var uv_delta = Vector.div(Vector.sub(uvB, uvA), numTriangles);\n        }\n    }\n\n    var angle_step = angle / numTriangles;\n    let flip = ((angle < 0) ? -1 : 1); // if angle < 0, is cw - set 'flip' flag\n\n    // add outside vertices in reverse order depending on sign of angle\n    let v1, v2;\n    if (cross > 0) {\n        v1 = 2;\n        v2 = 1;\n    }\n    else {\n        v1 = 1;\n        v2 = 2;\n    }\n\n    for (var i = 0; i < numTriangles; i++) {\n        if (i === 0 && angle < 0) {\n            // if ccw, flip the extrusion vector so offsets work properly\n            blade = Vector.neg(blade);\n        }\n\n        blade = Vector.rot(blade, angle_step);\n\n        if (has_texcoord) {\n            if (isCap){\n                // UV textures go \"through\" the cap\n                affine_uvCurr = Vector.rot(affine_uvCurr, angle_step);\n                uvCurr[0] = affine_uvCurr[0] + uvC[0];\n                uvCurr[1] = affine_uvCurr[1] * context.texcoord_width * context.v_scale + uvC[1]; // scale the v-coordinate\n            }\n            else {\n                // UV textures go \"around\" the join\n                uvCurr = Vector.add(uvCurr, uv_delta);\n            }\n        }\n\n        addVertex(coord, blade, normal, uvCurr[0], uvCurr[1], context, flip);\n\n        vertex_elements.push(pivotIndex + i + v1);\n        vertex_elements.push(pivotIndex);\n        vertex_elements.push(pivotIndex + i + v2);\n    }\n}\n\n//  Function to add the vertices needed for line caps,\n//  because to re-use the buffers they need to be at the end\nfunction addCap (coord, v, normal, type, isBeginning, context) {\n    var neg_normal = Vector.neg(normal);\n    var has_texcoord = (context.texcoord_index != null);\n\n    switch (type){\n    case CAP_TYPE.square:\n        var tangent;\n        // first vertex on the lineString\n        if (isBeginning){\n            tangent = [normal[1], -normal[0]];\n\n            addVertex(coord, Vector.add(normal, tangent), normal, 1, v, context, 1);\n            addVertex(coord, Vector.add(neg_normal, tangent), normal, 0, v, context, 1);\n\n            if (has_texcoord) {\n                // Add length of square cap to texture coordinate\n                v += 0.5 * context.texcoord_width * context.v_scale;\n            }\n\n            addVertex(coord, normal, normal, 1, v, context, 1);\n            addVertex(coord, neg_normal, normal, 0, v, context, 1);\n\n        }\n        // last vertex on the lineString\n        else {\n            tangent = [-normal[1], normal[0]];\n\n            addVertex(coord, normal, normal, 1, v, context, 1);\n            addVertex(coord, neg_normal, normal, 0, v, context, 1);\n\n            if (has_texcoord) {\n                // Add length of square cap to texture coordinate\n                v += 0.5 * context.texcoord_width * context.v_scale;\n            }\n\n            addVertex(coord, Vector.add(normal, tangent), normal, 1, v, context, 1);\n            addVertex(coord, Vector.add(neg_normal, tangent), normal, 0, v, context, 1);\n        }\n\n        indexPairs(1, context);\n        break;\n    case CAP_TYPE.round:\n        // default for end cap, beginning cap will overwrite below (this way we're always passing a non-null value,\n        // even if texture coords are disabled)\n        var uvA = zero_v, uvB = one_v, uvC = mid_v;\n        var nA, nB;\n\n        // first vertex on the lineString\n        if (isBeginning) {\n            nA = normal;\n            nB = neg_normal;\n\n            if (has_texcoord){\n                v += 0.5 * context.texcoord_width * context.v_scale;\n                uvA = one_v, uvB = zero_v, uvC = mid_v; // update cap UV order\n            }\n        }\n        // last vertex on the lineString - flip the direction of the cap\n        else {\n            nA = neg_normal;\n            nB = normal;\n        }\n\n        if (has_texcoord) {\n            zero_v[1] = v, one_v[1] = v, mid_v[1] = v; // update cap UV values\n        }\n\n        addFan(coord,\n            nA, zero_vec2, nB,  // extrusion normal\n            normal,             // line normal, for offsets\n            uvA, uvC, uvB,      // texture coords (ignored if disabled)\n            true, false, context\n        );\n\n        break;\n    case CAP_TYPE.butt:\n        return;\n    }\n}\n\n// Calculate number of triangles for a fan given an angle and line width\nfunction trianglesPerArc (angle, width) {\n    if (angle < 0) {\n        angle = -angle;\n    }\n\n    var numTriangles = (width > 2 * MIN_FAN_WIDTH) ? Math.log2(width / MIN_FAN_WIDTH) : 1;\n    return Math.ceil(angle / Math.PI * numTriangles);\n}\n\n// Cyclically permute closed line starting at an index\nfunction permuteLine(line, startIndex){\n    var newLine = [];\n    for (let i = 0; i < line.length; i++){\n        var index = (i + startIndex) % line.length;\n        // skip the first (repeated) index\n        if (index !== 0) {\n            newLine.push(line[index]);\n        }\n    }\n    newLine.push(newLine[0]);\n    return newLine;\n}\n","// Renders an array specifying a line pattern of alternating dashes and spaces,\n// similar to an SVG `dasharray` or Canvas setLineDash(), into a byte array of RGBA pixels\n// Returns:\n// {\n//    pixel: rendered image in Uint8Array buffer\n//    length: pixel length of rendered dash pattern (sum of all dashes and spaces)\n// }\n//\n// https://www.w3.org/TR/SVG/painting.html#StrokeDasharrayProperty\n// https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray\n// https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/setLineDash\n\nconst default_dash_color = [255, 255, 255, 255];\nconst default_background_color = [0, 0, 0, 0];\n\nexport default function renderDashArray (pattern, options = {}) {\n    const dash_pixel = options.dash_color || default_dash_color;\n    const background_color = options.background_color || default_background_color;\n    const dashes = pattern;\n    const scale = options.scale || 1;\n\n    // If pattern is odd, repeat it to make it even (see SVG spec)\n    if (dashes.length % 2 === 1) {\n        Array.prototype.push.apply(dashes, dashes);\n    }\n\n    let dash = true;\n    let pixels = [];\n    for (let i=0; i < dashes.length; i++) {\n        let segment = Math.floor(dashes[i] * scale);\n        for (let s=0; s < segment; s++) {\n            Array.prototype.push.apply(pixels, dash ? dash_pixel : background_color);\n        }\n        dash = !dash; // alternate between dashes and spaces\n    }\n\n    pixels.reverse(); // flip Y (GL textures are upside down)\n    pixels = new Uint8Array(pixels); // convert to typed array\n    const length = pixels.length / 4; // one RGBA byte sequences to one pixel\n\n    return { pixels, length };\n}\n","// Line rendering style\n\nimport log from '../../utils/log';\nimport {Style} from '../style';\nimport StyleParser from '../style_parser';\nimport gl from '../../gl/constants'; // web workers don't have access to GL context, so import all GL constants\nimport Texture from '../../gl/texture';\nimport VertexLayout from '../../gl/vertex_layout';\nimport {buildPolylines} from '../../builders/polylines';\nimport renderDashArray from './dasharray';\nimport Geo from '../../utils/geo';\n\nimport WorkerBroker from '../../utils/worker_broker';\nimport hashString from '../../utils/hash';\n\nimport polygons_vs from '../polygons/polygons_vertex.glsl';\nimport polygons_fs from '../polygons/polygons_fragment.glsl';\n\nexport const Lines = Object.create(Style);\n\nconst DASH_SCALE = 20; // adjustment factor for UV scale to for line dash patterns w/fractional pixel width\n\nObject.assign(Lines, {\n    name: 'lines',\n    built_in: true,\n    vertex_shader_src: polygons_vs,\n    fragment_shader_src: polygons_fs,\n    selection: true, // enable feature selection\n\n    init() {\n        Style.init.apply(this, arguments);\n\n        // Tell the shader we want a order in vertex attributes, and to extrude lines\n        this.defines.TANGRAM_EXTRUDE_LINES = true;\n        this.defines.TANGRAM_TEXTURE_COORDS = true; // texcoords attribute is set to static when not needed\n\n        // Additional single-allocated object used for holding outline style as it is processed\n        // Separate from this.feature_style so that outline properties do not overwrite calculated\n        // inline properties (outline call is made *within* the inline call)\n        this.outline_feature_style = {};\n        this.inline_feature_style = this.feature_style; // save reference to main computed style object\n\n        this.dash_textures = {}; // cache previously rendered line dash pattern textures\n    },\n\n    // Calculate width or offset at zoom given in `context`\n    calcDistance (prop, context) {\n        return StyleParser.evalCachedDistanceProperty(prop, context) || 0;\n    },\n\n    // Calculate width or offset at next zoom (used for zoom-based interpolation in shader)\n    calcDistanceNextZoom (prop, context) {\n        context.zoom++;\n        let val = this.calcDistance(prop, context);\n        context.zoom--;\n        return val;\n    },\n\n    // Calculate width at current and next zoom, and scaling factor between\n    calcWidth (draw, style, context) {\n        // line width in meters\n        let width = this.calcDistance(draw.width, context);\n        if (width < 0) {\n            return; // skip lines with negative width\n        }\n\n        let next_width;\n        if (draw.next_width) {\n            next_width = this.calcDistanceNextZoom(draw.next_width, context);\n        }\n        else {\n            next_width = width / 2; // when width is static, width at next zoom is just half as many tile units\n        }\n\n        if ((width === 0 && next_width === 0) || next_width < 0) {\n            return false; // skip lines that don't interpolate to a positive value at next zoom\n        }\n\n        // these values are saved for later calculating the outline width, which needs to add the base line's width\n        style.width_unscaled = width;\n        style.next_width_unscaled = next_width;\n\n        // calculate relative change in line width between zooms\n        // interpolate from the line width at the zoom mid-point, towards/away from the previous/next integer zoom\n        if (draw.next_width) {\n            next_width *= 2; // NB: a given width is twice as big in screen space at the next zoom\n            let mid_width = (width + next_width) * 0.5;\n            style.width = mid_width * context.units_per_meter_overzoom; // width at zoom mid-point\n            style.width_scale = 1 - (next_width / mid_width);\n        }\n        else {\n            style.width = width * context.units_per_meter_overzoom;\n            style.width_scale = 0;\n        }\n\n        // optional adjustment to texcoord width based on scale\n        if (draw.texcoords) {\n            // when drawing an outline, use the inline's texture scale\n            // (e.g. keeps dashed outline pattern locked to inline pattern)\n            if (draw.inline_texcoord_width) {\n                style.texcoord_width = draw.inline_texcoord_width;\n            }\n            // when drawing an inline, calculate UVs based on line width\n            else {\n                // UVs can't calc for zero-width, use next zoom width in that case\n                style.texcoord_width = (style.width_unscaled || style.next_width_unscaled) * context.units_per_meter_overzoom / context.tile.overzoom2; // shorten calcs\n            }\n        }\n\n        return true;\n    },\n\n    // Calculate offset at current and next zoom, and scaling factor between\n    calcOffset (draw, style, context) {\n        // Pre-calculated offset passed\n        // This happens when a line passes pre-computed offset values to its outline\n        if (draw.offset_precalc) {\n            style.offset = draw.offset_precalc;\n            style.offset_scale = draw.offset_scale_precalc;\n        }\n        // Offset to calculate\n        else if (draw.offset) {\n            let offset = this.calcDistance(draw.offset, context);\n\n            if (draw.next_offset) {\n                let next_offset = this.calcDistanceNextZoom(draw.next_offset, context) * 2;\n\n                if (Math.abs(offset) >= Math.abs(next_offset)) {\n                    style.offset = offset * context.units_per_meter_overzoom;\n                    if (offset !== 0) {\n                        style.offset_scale = 1 - (next_offset / offset);\n                    }\n                    else {\n                        style.offset_scale = 0;\n                    }\n                }\n                else {\n                    style.offset = next_offset * context.units_per_meter_overzoom;\n                    if (next_offset !== 0) {\n                        style.offset_scale = (1 - (offset / next_offset)) * -1;\n                    }\n                    else {\n                        style.offset_scale = 0;\n                    }\n                }\n            }\n            else {\n                style.offset = offset * context.units_per_meter_overzoom;\n                style.offset_scale = 0;\n            }\n        }\n        // No offset\n        else {\n            style.offset = 0;\n            style.offset_scale = 0;\n        }\n    },\n\n    _parseFeature (feature, draw, context) {\n        var style = this.feature_style;\n\n        // calculate line width at current and next zoom\n        if (this.calcWidth(draw, style, context) === false) {\n            return; // missing or zero width\n        }\n\n        // calculate line offset at current and next zoom\n        this.calcOffset(draw, style, context);\n\n        style.color = this.parseColor(draw.color, context);\n        if (!style.color) {\n            return;\n        }\n\n        style.alpha = StyleParser.evalCachedProperty(draw.alpha, context); // optional alpha override\n\n        style.variant = draw.variant; // pre-calculated mesh variant\n\n        // height defaults to feature height, but extrude style can dynamically adjust height by returning a number or array (instead of a boolean)\n        style.z = StyleParser.evalCachedDistanceProperty(draw.z, context) || StyleParser.defaults.z;\n        style.height = feature.properties.height || StyleParser.defaults.height;\n        style.extrude = StyleParser.evalProperty(draw.extrude, context);\n        if (style.extrude) {\n            if (typeof style.extrude === 'number') {\n                style.height = style.extrude;\n            }\n            else if (Array.isArray(style.extrude)) {\n                style.height = style.extrude[1];\n            }\n        }\n\n        // Raise line height if extruded\n        if (style.extrude && style.height) {\n            style.z += style.height;\n        }\n\n        style.z *= Geo.height_scale;        // provide sub-meter precision of height values\n\n        style.cap = draw.cap;\n        style.join = draw.join;\n\n        style.miter_limit = draw.miter_limit;\n        style.tile_edges = draw.tile_edges; // usually activated for debugging, or rare visualization needs\n\n        // Construct an outline style\n        // Reusable outline style object, marked as already wrapped in cache objects (preprocessed = true)\n        style.outline = style.outline || {\n            width: {}, next_width: {},\n            preprocessed: true\n        };\n\n        if (draw.outline && draw.outline.visible !== false && draw.outline.color && draw.outline.width) {\n            // outline width in meters\n            // NB: multiply by 2 because outline is applied on both sides of line\n            let outline_width = this.calcDistance(draw.outline.width, context) * 2;\n            let outline_next_width = this.calcDistanceNextZoom(draw.outline.next_width, context) * 2;\n\n            if ((outline_width === 0 && outline_next_width === 0) || outline_width < 0 || outline_next_width < 0) {\n                // skip lines that don't interpolate between zero or greater width\n                style.outline.width.value = null;\n                style.outline.next_width.value = null;\n                style.outline.color = null;\n                style.outline.inline_texcoord_width = null;\n                style.outline.texcoords = false;\n            }\n            else {\n                // Maintain consistent outline width around the line fill\n                style.outline.width.value = outline_width + style.width_unscaled;\n                style.outline.next_width.value = outline_next_width + style.next_width_unscaled;\n                style.outline.inline_texcoord_width = style.texcoord_width;\n\n                // Offset is directly copied from fill to outline, no need to re-calculate it\n                style.outline.offset_precalc = style.offset;\n                style.outline.offset_scale_precalc = style.offset_scale;\n\n                style.outline.color = draw.outline.color;\n                style.outline.alpha = draw.outline.alpha;\n                style.outline.interactive = draw.outline.interactive;\n                style.outline.cap = draw.outline.cap;\n                style.outline.join = draw.outline.join;\n                style.outline.miter_limit = draw.outline.miter_limit;\n                style.outline.texcoords = draw.outline.texcoords;\n                style.outline.extrude = draw.outline.extrude;\n                style.outline.z = draw.outline.z;\n                style.outline.style = draw.outline.style;\n                style.outline.variant = draw.outline.variant;\n\n                // Explicitly defined outline order, or inherited from inner line\n                if (draw.outline.order) {\n                    style.outline.order = this.parseOrder(draw.outline.order, context);\n                }\n                else {\n                    style.outline.order = style.order;\n                }\n\n                // Don't let outline be above inner line\n                if (style.outline.order > style.order) {\n                    style.outline.order = style.order;\n                }\n\n                // Outlines are always at half-layer intervals to avoid conflicting with inner lines\n                style.outline.order -= 0.5;\n            }\n        }\n        else {\n            style.outline.width.value = null;\n            style.outline.next_width.value = null;\n            style.outline.color = null;\n            style.outline.inline_texcoord_width = null;\n        }\n\n        return style;\n    },\n\n    _preprocess (draw) {\n        draw.color = StyleParser.createColorPropertyCache(draw.color);\n        draw.alpha = StyleParser.createPropertyCache(draw.alpha);\n        draw.width = StyleParser.createPropertyCache(draw.width, StyleParser.parseUnits);\n        if (draw.width && draw.width.type !== StyleParser.CACHE_TYPE.STATIC) {\n            draw.next_width = StyleParser.createPropertyCache(draw.width, StyleParser.parseUnits);\n        }\n        draw.offset = draw.offset && StyleParser.createPropertyCache(draw.offset, StyleParser.parseUnits);\n        if (draw.offset && draw.offset.type !== StyleParser.CACHE_TYPE.STATIC) {\n            draw.next_offset = StyleParser.createPropertyCache(draw.offset, StyleParser.parseUnits);\n        }\n        draw.z = StyleParser.createPropertyCache(draw.z, StyleParser.parseUnits);\n\n        draw.dash = (draw.dash !== undefined ? draw.dash : this.dash);\n        draw.dash_key = draw.dash && this.dashTextureKey(draw.dash);\n        draw.dash_background_color = (draw.dash_background_color !== undefined ? draw.dash_background_color : this.dash_background_color);\n        draw.dash_background_color = draw.dash_background_color && StyleParser.parseColor(draw.dash_background_color);\n        draw.texture_merged = draw.dash_key || ((draw.texture !== undefined ? draw.texture : this.texture));\n        draw.texcoords = ((this.texcoords || draw.texture_merged) ? 1 : 0);\n        this.computeVariant(draw);\n\n        if (draw.outline) {\n            draw.outline.is_outline = true; // mark as outline (so mesh variant can be adjusted for render order, etc.)\n            draw.outline.style = draw.outline.style || this.name;\n            draw.outline.color = StyleParser.createColorPropertyCache(draw.outline.color);\n            draw.outline.alpha = StyleParser.createPropertyCache(draw.outline.alpha);\n            draw.outline.width = StyleParser.createPropertyCache(draw.outline.width, StyleParser.parseUnits);\n            draw.outline.next_width = StyleParser.createPropertyCache(draw.outline.width, StyleParser.parseUnits); // width re-computed for next zoom\n\n            draw.outline.interactive = (draw.outline.interactive != null) ? draw.outline.interactive : draw.interactive;\n            draw.outline.cap = draw.outline.cap || draw.cap;\n            draw.outline.join = draw.outline.join || draw.join;\n            draw.outline.miter_limit = (draw.outline.miter_limit != null) ? draw.outline.miter_limit : draw.miter_limit;\n\n            // always apply inline values for offset and extrusion/height to outline\n            draw.outline.offset = draw.offset;\n            draw.outline.extrude = draw.extrude;\n            draw.outline.z = draw.z;\n\n            // outline inherits dash pattern, but NOT explicit texture\n            let outline_style = this.styles[draw.outline.style];\n            if (outline_style) {\n                draw.outline.dash = (draw.outline.dash !== undefined ? draw.outline.dash : outline_style.dash);\n                draw.outline.texture = (draw.outline.texture !== undefined ? draw.outline.texture : outline_style.texture);\n\n                if (draw.outline.dash != null) {            // dash was defined by outline draw or style\n                    draw.outline.dash_key = draw.outline.dash && this.dashTextureKey(draw.outline.dash);\n                    draw.outline.texture_merged = draw.outline.dash_key;\n                }\n                else if (draw.outline.dash === null) {      // dash explicitly disabled by outline draw or style\n                    draw.outline.dash_key = null;\n                    draw.outline.texture_merged = draw.outline.texture;\n                }\n                else if (draw.outline.texture != null) {    // texture was defined by outline draw or style\n                    draw.outline.dash_key = null; // outline explicitly turning off dash\n                    draw.outline.texture_merged = draw.outline.texture;\n                }\n                else {                                      // no dash or texture defined for outline, inherit parent dash\n                    draw.outline.dash = draw.dash;\n                    draw.outline.dash_key = draw.outline.dash && this.dashTextureKey(draw.outline.dash);\n                    draw.outline.texture_merged = draw.outline.dash_key;\n                }\n                draw.outline.dash_background_color = (draw.outline.dash_background_color !== undefined ? draw.outline.dash_background_color : outline_style.dash_background_color);\n                draw.outline.dash_background_color = (draw.outline.dash_background_color !== undefined ? draw.outline.dash_background_color : draw.dash_background_color);\n                draw.outline.dash_background_color = draw.outline.dash_background_color && StyleParser.parseColor(draw.outline.dash_background_color);\n                draw.outline.texcoords = ((outline_style.texcoords || draw.outline.texture_merged) ? 1 : 0);\n\n                // outline inherits draw blend order from parent inline, unless explicitly turned off with null\n                if (draw.outline.blend_order === undefined && draw.blend_order != null) {\n                    draw.outline.blend_order = draw.blend_order;\n                }\n\n                outline_style.computeVariant(draw.outline);\n            }\n            else {\n                log({ level: 'warn', once: true }, `Layer group '${draw.layers.join(', ')}': ` +\n                    `line 'outline' specifies non-existent draw style '${draw.outline.style}' (or maybe the style is ` +\n                    'defined but is missing a \\'base\\' or has another error), skipping outlines for features matching this layer group');\n                draw.outline = null;\n            }\n        }\n        return draw;\n    },\n\n    // Unique string key for a dash pattern (used as texture name)\n    dashTextureKey (dash) {\n        return '__dash_' + JSON.stringify(dash);\n    },\n\n    // Return or render a dash pattern texture\n    getDashTexture (dash) {\n        let dash_key = this.dashTextureKey(dash);\n\n        if (this.dash_textures[dash_key] == null) {\n            this.dash_textures[dash_key] = true;\n            // Render line pattern\n            const dash_texture = renderDashArray(dash, { scale: DASH_SCALE });\n            Texture.create(this.gl, dash_key, {\n                data: dash_texture.pixels,\n                height: dash_texture.length,\n                width: 1,\n                filtering: 'nearest'\n            });\n        }\n    },\n\n    // Override\n    async endData (tile) {\n        const tile_data = await Style.endData.call(this, tile);\n        if (tile_data) {\n            tile_data.uniforms.u_has_line_texture = false;\n            tile_data.uniforms.u_texture = Texture.default;\n            tile_data.uniforms.u_v_scale_adjust = Geo.tile_scale;\n\n            let pending = [];\n            for (let m in tile_data.meshes) {\n                let variant = tile_data.meshes[m].variant;\n                if (variant.texture) {\n                    let uniforms = tile_data.meshes[m].uniforms = tile_data.meshes[m].uniforms || {};\n                    uniforms.u_has_line_texture = true;\n                    uniforms.u_texture = variant.texture;\n                    uniforms.u_texture_ratio = 1;\n\n                    if (variant.dash) {\n                        uniforms.u_v_scale_adjust = Geo.tile_scale * DASH_SCALE;\n                        uniforms.u_has_dash = (variant.dash_background_color != null ? 1 : 0);\n                        uniforms.u_dash_background_color = variant.dash_background_color || [0, 0, 0, 0];\n                    }\n\n                    if (variant.dash_key && this.dash_textures[variant.dash_key] == null) {\n                        this.dash_textures[variant.dash_key] = true;\n                        try {\n                            await WorkerBroker.postMessage(this.main_thread_target+'.getDashTexture', variant.dash);\n                        }\n                        catch (e) {\n                            log('trace', `${this.name}: line dash texture create failed because style no longer on main thread`);\n                        }\n                    }\n\n                    if (Texture.textures[variant.texture] == null) {\n                        pending.push(\n                            Texture.syncTexturesToWorker([variant.texture]).then(textures => {\n                                let texture = textures[variant.texture];\n                                if (texture) {\n                                    uniforms.u_texture_ratio = texture.height / texture.width;\n                                }\n                            })\n                        );\n                    }\n                    else {\n                        let texture = Texture.textures[variant.texture];\n                        uniforms.u_texture_ratio = texture.height / texture.width;\n                    }\n                }\n            }\n            await Promise.all(pending);\n        }\n        return tile_data;\n    },\n\n    // Calculate and store mesh variant (unique by draw group but not feature)\n    computeVariant (draw) {\n        // Factors that determine a unique mesh rendering variant\n        let key = (draw.offset ? 1 : 0); // whether feature has a line offset\n        key += '/' + draw.texcoords; // whether feature has texture UVs\n        key += '/' + (draw.interactive ? 1 : 0); // whether feature has interactivity\n        key += '/' + ((draw.extrude || draw.z) ? 1 : 0); // whether feature has a z coordinate\n        key += '/' + draw.is_outline; // whether this is an outline of a line feature\n\n        if (draw.dash_key) { // whether feature has a line dash pattern\n            key += draw.dash_key;\n            if (draw.dash_background_color) {\n                key += draw.dash_background_color;\n            }\n        }\n\n        if (draw.texture_merged) { // whether feature has a line texture\n            key += draw.texture_merged;\n        }\n\n        const blend_order = this.getBlendOrderForDraw(draw);\n        key += '/' + blend_order;\n\n        // Create unique key\n        key = hashString(key);\n        draw.variant = key;\n\n        if (this.variants[key] == null) {\n            this.variants[key] = {\n                key,\n                blend_order,\n                mesh_order: (draw.is_outline ? 0 : 1), // outlines should be drawn first, so inline is on top\n                selection: (draw.interactive ? 1 : 0),\n                offset: (draw.offset ? 1 : 0),\n                z_or_offset: ((draw.offset || draw.extrude || draw.z) ? 1 : 0),\n                texcoords: draw.texcoords,\n                texture: draw.texture_merged,\n                dash: draw.dash,\n                dash_key: draw.dash_key,\n                dash_background_color: draw.dash_background_color\n            };\n        }\n    },\n\n    // Override\n    // Create or return desired vertex layout permutation based on flags\n    vertexLayoutForMeshVariant (variant) {\n        if (this.vertex_layouts[variant.key] == null) {\n            // Attributes for this mesh variant\n            // Optional attributes have placeholder values assigned with `static` parameter\n            const attribs = [\n                { name: 'a_position', size: 4, type: gl.SHORT, normalized: false },\n                { name: 'a_extrude', size: 2, type: gl.SHORT, normalized: false },\n                { name: 'a_offset', size: 2, type: gl.SHORT, normalized: false, static: (variant.offset ? null : [0, 0]) },\n                { name: 'a_z_and_offset_scale', size: 2, type: gl.SHORT, normalized: false, static: (variant.z_or_offset ? null : [0, 0]) },\n                { name: 'a_texcoord', size: 2, type: gl.UNSIGNED_SHORT, normalized: true, static: (variant.texcoords ? null : [0, 0]) },\n                { name: 'a_color', size: 4, type: gl.UNSIGNED_BYTE, normalized: true },\n                { name: 'a_selection_color', size: 4, type: gl.UNSIGNED_BYTE, normalized: true, static: (variant.selection ? null : [0, 0, 0, 0]) }\n            ];\n\n            this.addCustomAttributesToAttributeList(attribs);\n            this.vertex_layouts[variant.key] = new VertexLayout(attribs);\n        }\n        return this.vertex_layouts[variant.key];\n    },\n\n    // Override\n    meshVariantTypeForDraw (draw) {\n        return this.variants[draw.variant]; // return pre-calculated mesh variant\n    },\n\n    /**\n     * A \"template\" that sets constant attibutes for each vertex, which is then modified per vertex or per feature.\n     * A plain JS array matching the order of the vertex layout.\n     */\n    makeVertexTemplate(style, mesh) {\n        let i = 0;\n\n        // a_position.xy - vertex position\n        // a_position.z - line width scaling factor\n        // a_position.w - layer order\n        this.vertex_template[i++] = 0;\n        this.vertex_template[i++] = 0;\n        this.vertex_template[i++] = style.width_scale * 1024;\n        this.vertex_template[i++] = this.scaleOrder(style.order);\n\n        // a_extrude.xy - extrusion vector (vertex extrusion away from center of line)\n        this.vertex_template[i++] = 0;\n        this.vertex_template[i++] = 0;\n\n        // a_offset.xy - normal vector\n        // offset can be static or dynamic depending on style\n        if (mesh.variant.offset) {\n            this.vertex_template[i++] = 0;\n            this.vertex_template[i++] = 0;\n        }\n\n        // a_z_and_offset_scale.xy\n        if (mesh.variant.z_or_offset) {\n            this.vertex_template[i++] = style.z || 0; // feature z position\n            this.vertex_template[i++] = style.offset_scale * 1024; // line offset scaling factor\n        }\n\n        // a_texcoord.uv - texture coordinates\n        if (mesh.variant.texcoords) {\n            this.vertex_template[i++] = 0;\n            this.vertex_template[i++] = 0;\n        }\n\n        // a_color.rgba - feature color\n        this.vertex_template[i++] = style.color[0] * 255;\n        this.vertex_template[i++] = style.color[1] * 255;\n        this.vertex_template[i++] = style.color[2] * 255;\n        this.vertex_template[i++] = (style.alpha != null ? style.alpha : style.color[3]) * 255;\n\n        // a_selection_color.rgba - selection color\n        if (mesh.variant.selection) {\n            this.vertex_template[i++] = style.selection_color[0] * 255;\n            this.vertex_template[i++] = style.selection_color[1] * 255;\n            this.vertex_template[i++] = style.selection_color[2] * 255;\n            this.vertex_template[i++] = style.selection_color[3] * 255;\n        }\n\n        this.addCustomAttributesToVertexTemplate(style, i);\n        return this.vertex_template;\n    },\n\n    buildLines(lines, style, context, options) {\n        // Outline (build first so that blended geometry without a depth test is drawn first/under the inner line)\n        this.feature_style = this.outline_feature_style; // swap in outline-specific style holder\n        if (style.outline && style.outline.color != null && style.outline.width.value != null) {\n            var outline_style = this.styles[style.outline.style];\n            if (outline_style) {\n                outline_style.addFeature(context.feature, style.outline, context);\n            }\n        }\n\n        // Main line\n        this.feature_style = this.inline_feature_style; // restore calculated style for inline\n        let mesh = this.getTileMesh(context.tile, this.meshVariantTypeForDraw(style));\n        let vertex_data = mesh.vertex_data;\n        let vertex_layout = vertex_data.vertex_layout;\n        let vertex_template = this.makeVertexTemplate(style, mesh);\n        return buildPolylines(\n            lines,\n            style,\n            vertex_data,\n            vertex_template,\n            vertex_layout.index,\n            (options && options.closed_polygon), // closed_polygon\n            (!style.tile_edges && options && options.remove_tile_edges), // remove_tile_edges\n            (Geo.tile_scale * context.tile.pad_scale * 2) // tile_edge_tolerance\n        );\n    },\n\n    buildPolygons(polygons, style, context) {\n        // Render polygons as individual lines\n        let geom_count = 0;\n        for (let p=0; p < polygons.length; p++) {\n            geom_count += this.buildLines(polygons[p], style, context, { closed_polygon: true, remove_tile_edges: true });\n        }\n        return geom_count;\n    }\n\n});\n","// Point builders\nimport { default_uvs } from './common';\n\n// Scaling values to encode fractional values with fixed-point integer attributes\nconst pre_angles_normalize = 128 / Math.PI;\nconst angles_normalize = 16384 / Math.PI;\nconst offsets_normalize = 64;\nconst texcoord_normalize = 65535;\nconst size_normalize = 128; // width/height are 8.8 fixed-point, but are halved (so multiply by 128 instead of 256)\n\n// These index values map a 4-element vertex position counter from this pattern (used for size and UVs):\n//  [min_x, min_y, max_x, max_y]\n// to this pattern:\n//  [min_x, min_y],\n//  [max_x, min_y],\n//  [max_x, max_y],\n//  [min_x, max_y]\nconst ix = [0, 2, 2, 0];\nconst iy = [1, 1, 3, 3];\nconst shape = new Array(4); // single, reusable allocation\n\n// Build a billboard sprite quad centered on a point. Sprites are intended to be drawn in screenspace, and have\n// properties for width, height, angle, and texture UVs. Curved label segment sprites have additional properties\n// for interpolating their position and angle across zooms.\nexport function buildQuadForPoint (\n    point,\n    vertex_data,\n    vertex_template,\n    vindex,\n    size,\n    offset,\n    offsets,\n    pre_angles,\n    angle,\n    angles,\n    texcoords,\n    curve) {\n\n    // Half-sized point dimensions in fixed point\n    const w2 = size[0] * size_normalize;\n    const h2 = size[1] * size_normalize;\n    shape[0] = -w2;\n    shape[1] = -h2;\n    shape[2] = w2;\n    shape[3] = h2;\n\n    const uvs = texcoords || default_uvs;\n\n    const vertex_elements = vertex_data.vertex_elements;\n    let element_offset = vertex_data.vertex_count;\n\n    for (let p=0; p < 4; p++) {\n        vertex_template[vindex.a_position + 0] = point[0];\n        vertex_template[vindex.a_position + 1] = point[1];\n\n        vertex_template[vindex.a_shape + 0] = shape[ix[p]];\n        vertex_template[vindex.a_shape + 1] = shape[iy[p]];\n        vertex_template[vindex.a_shape + 2] = angle;\n\n        vertex_template[vindex.a_offset + 0] = offset[0];\n        vertex_template[vindex.a_offset + 1] = offset[1];\n\n        // Add texcoords\n        if (vindex.a_texcoord) {\n            vertex_template[vindex.a_texcoord + 0] = uvs[ix[p]] * texcoord_normalize;\n            vertex_template[vindex.a_texcoord + 1] = uvs[iy[p]] * texcoord_normalize;\n        }\n\n        // Add curved label segment props\n        if (curve) {\n            // 1 byte (signed) range: [-127, 128]\n            // actual range: [-2pi, 2pi]\n            // total: multiply by 128 / (2 PI)\n            vertex_template[vindex.a_pre_angles + 0] = pre_angles_normalize * pre_angles[0];\n            vertex_template[vindex.a_pre_angles + 1] = pre_angles_normalize * pre_angles[1];\n            vertex_template[vindex.a_pre_angles + 2] = pre_angles_normalize * pre_angles[2];\n            vertex_template[vindex.a_pre_angles + 3] = pre_angles_normalize * pre_angles[3];\n\n            // 2 byte (signed) of resolution [-32767, 32768]\n            // actual range: [-2pi, 2pi]\n            // total: multiply by 32768 / (2 PI) = 16384 / PI\n            vertex_template[vindex.a_angles + 0] = angles_normalize * angles[0];\n            vertex_template[vindex.a_angles + 1] = angles_normalize * angles[1];\n            vertex_template[vindex.a_angles + 2] = angles_normalize * angles[2];\n            vertex_template[vindex.a_angles + 3] = angles_normalize * angles[3];\n\n            // offset range can be [0, 65535]\n            // actual range: [0, 1024]\n            vertex_template[vindex.a_offsets + 0] = offsets_normalize * offsets[0];\n            vertex_template[vindex.a_offsets + 1] = offsets_normalize * offsets[1];\n            vertex_template[vindex.a_offsets + 2] = offsets_normalize * offsets[2];\n            vertex_template[vindex.a_offsets + 3] = offsets_normalize * offsets[3];\n        }\n\n        vertex_data.addVertex(vertex_template);\n    }\n\n    vertex_elements.push(element_offset + 0);\n    vertex_elements.push(element_offset + 1);\n    vertex_elements.push(element_offset + 2);\n    vertex_elements.push(element_offset + 2);\n    vertex_elements.push(element_offset + 3);\n    vertex_elements.push(element_offset + 0);\n\n    return 2; // geom count is always two triangles, for one quad\n}\n","// Sets of values to match for directional and corner anchors\nconst lefts = ['left', 'top-left', 'bottom-left'];\nconst rights = ['right', 'top-right', 'bottom-right'];\nconst tops = ['top', 'top-left', 'top-right'];\nconst bottoms = ['bottom', 'bottom-left', 'bottom-right'];\n\nconst PointAnchor = {\n\n    computeOffset (offset, size, anchor, buffer = null) {\n        if (!anchor || anchor === 'center') {\n            return offset;\n        }\n\n        let offset2 = [offset[0], offset[1]];\n        buffer = buffer || this.default_buffer;\n\n        // An optional left/right offset\n        if (this.isLeftAnchor(anchor)) {\n            offset2[0] -= size[0] / 2;\n            if (anchor === 'left') {\n                offset2[0] -= buffer[0];\n            }\n        }\n        else if (this.isRightAnchor(anchor)) {\n            offset2[0] += size[0] / 2;\n            if (anchor === 'right') {\n                offset2[0] += buffer[1];\n            }\n        }\n\n        // An optional top/bottom offset\n        if (this.isTopAnchor(anchor)) {\n            offset2[1] -= size[1] / 2;\n            if (anchor === 'top') {\n                offset2[1] -= buffer[2];\n            }\n        }\n        else if (this.isBottomAnchor(anchor)) {\n            offset2[1] += size[1] / 2;\n            if (anchor === 'bottom') {\n                offset2[1] += buffer[3];\n            }\n        }\n\n        return offset2;\n    },\n\n    alignForAnchor (anchor) {\n        if (anchor && anchor !== 'center') {\n            if (this.isLeftAnchor(anchor)) {\n                return 'right';\n            }\n            else if (this.isRightAnchor(anchor)) {\n                return 'left';\n            }\n        }\n        return 'center';\n    },\n\n    isLeftAnchor (anchor) {\n        return (lefts.indexOf(anchor) > -1);\n    },\n\n    isRightAnchor (anchor) {\n        return (rights.indexOf(anchor) > -1);\n    },\n\n    isTopAnchor (anchor) {\n        return (tops.indexOf(anchor) > -1);\n    },\n\n    isBottomAnchor (anchor) {\n        return (bottoms.indexOf(anchor) > -1);\n    },\n\n    // Buffers: [left, right, top, bottom]\n    default_buffer: [2.5, 2.5, 1.5, 0.75],\n    zero_buffer: [0, 0, 0, 0]\n\n};\n\nexport default PointAnchor;\n","\n// Do AABB `a` and `b` intersect?\nexport function boxIntersectsBox (a, b) {\n    if (a[2] < b[0] || // a is left of b\n        a[0] > b[2] || // a is right of b\n        a[3] < b[1] || // a is above b\n        a[1] > b[3]) { // a is below b\n        return false;\n    }\n    return true; // boxes overlap\n}\n\n// Does AABB `a` intersect any of the AABBs in array `boxes`?\n// Invokes `callback` with index of intersecting box\n// Stops intersecting if `callback` returns non-null value (continues otherwise)\nexport function boxIntersectsList (a, boxes, callback) {\n    for (let i=0; i < boxes.length; i++) {\n        if (boxIntersectsBox(a, boxes[i])) {\n            if (callback(i) != null) {\n                break;\n            }\n        }\n    }\n}\n","import Vector from './vector';\n\n// single-allocation, reusable objects\nconst ZERO_AXES = [[1, 0], [0, 1]];\nconst proj_a = [], proj_b = [];\nlet d0, d1, d2, d3;\n\nexport default class OBB {\n\n    constructor (x, y, a, w, h) {\n        this.dimension = [w / 2, h / 2]; // store half-dimension as that's what's needed in calculations below\n        this.angle = a;\n        this.centroid = [x, y];\n        this.quad = null;\n        this.axis_0 = null;\n        this.axis_1 = null;\n\n        this.update();\n    }\n\n    toJSON () {\n        return {\n            x: this.centroid[0],\n            y: this.centroid[1],\n            a: this.angle,\n            w: this.dimension[0],\n            h: this.dimension[1]\n        };\n    }\n\n    getExtent () {\n        // special handling to skip calculations for 0-angle\n        if (this.angle === 0) {\n            return [\n                this.quad[0], this.quad[1], // lower-left\n                this.quad[4], this.quad[5]  // upper-right\n            ];\n        }\n\n        let aabb = [\n            Math.min(this.quad[0], this.quad[2], this.quad[4], this.quad[6]), // min x\n            Math.min(this.quad[1], this.quad[3], this.quad[5], this.quad[7]), // min y\n            Math.max(this.quad[0], this.quad[2], this.quad[4], this.quad[6]), // max x\n            Math.max(this.quad[1], this.quad[3], this.quad[5], this.quad[7])  // max y\n        ];\n\n        return aabb;\n    }\n\n    updateAxes () {\n        // upper-left to upper-right\n        this.axis_0 = Vector.normalize([this.quad[4] - this.quad[6], this.quad[5] - this.quad[7]]);\n\n        // lower-right to upper-right\n        this.axis_1 = Vector.normalize([this.quad[4] - this.quad[2], this.quad[5] - this.quad[3]]);\n    }\n\n    update () {\n        const c = this.centroid;\n        const w2 = this.dimension[0];\n        const h2 = this.dimension[1];\n\n        // special handling to skip calculations for 0-angle\n        if (this.angle === 0) {\n            // quad is a flat array storing 4 [x, y] vectors\n            this.quad = [\n                c[0] - w2, c[1] - h2, // lower-left\n                c[0] + w2, c[1] - h2, // lower-right\n                c[0] + w2, c[1] + h2, // upper-right\n                c[0] - w2, c[1] + h2  // upper-left\n            ];\n\n            this.axis_0 = ZERO_AXES[0];\n            this.axis_1 = ZERO_AXES[1];\n        }\n        // calculate axes and enclosing quad\n        else {\n            let x0 = Math.cos(this.angle) * w2;\n            let x1 = Math.sin(this.angle) * w2;\n\n            let y0 = -Math.sin(this.angle) * h2;\n            let y1 = Math.cos(this.angle) * h2;\n\n            // quad is a flat array storing 4 [x, y] vectors\n            this.quad = [\n                c[0] - x0 - y0, c[1] - x1 - y1, // lower-left\n                c[0] + x0 - y0, c[1] + x1 - y1, // lower-right\n                c[0] + x0 + y0, c[1] + x1 + y1, // upper-right\n                c[0] - x0 + y0, c[1] - x1 + y1  // upper-left\n            ];\n\n            this.updateAxes();\n        }\n    }\n\n    static projectToAxis (obb, axis, proj) {\n        // for each axis, project obb quad to it and find min and max values\n        let quad = obb.quad;\n        d0 = quad[0] * axis[0] + quad[1] * axis[1];\n        d1 = quad[2] * axis[0] + quad[3] * axis[1];\n        d2 = quad[4] * axis[0] + quad[5] * axis[1];\n        d3 = quad[6] * axis[0] + quad[7] * axis[1];\n\n        proj[0] = Math.min(d0, d1, d2, d3);\n        proj[1] = Math.max(d0, d1, d2, d3);\n        return proj;\n    }\n\n    static axisCollide(obb_a, obb_b, axis_0, axis_1) {\n        OBB.projectToAxis(obb_a, axis_0, proj_a);\n        OBB.projectToAxis(obb_b, axis_0, proj_b);\n        if (proj_b[0] > proj_a[1] || proj_b[1] < proj_a[0]) {\n            return false;\n        }\n\n        OBB.projectToAxis(obb_a, axis_1, proj_a);\n        OBB.projectToAxis(obb_b, axis_1, proj_b);\n        if (proj_b[0] > proj_a[1] || proj_b[1] < proj_a[0]) {\n            return false;\n        }\n\n        return true;\n    }\n\n    static intersect(obb_a, obb_b) {\n        return OBB.axisCollide(obb_a, obb_b, obb_a.axis_0, obb_a.axis_1) &&\n               OBB.axisCollide(obb_a, obb_b, obb_b.axis_0, obb_b.axis_1);\n    }\n\n}\n","import PointAnchor from './point_anchor';\nimport {boxIntersectsList} from './intersect';\nimport OBB from '../utils/obb';\nimport Geo from '../utils/geo';\n// import log from '../utils/log';\n\nexport default class Label {\n\n    constructor (size, layout = {}) {\n        this.id = Label.nextLabelId();\n        this.type = ''; // set by subclass\n        this.size = size;\n        this.layout = layout;\n        this.position = null;\n        this.angle = 0;\n        this.anchor = Array.isArray(this.layout.anchor) ? this.layout.anchor[0] : this.layout.anchor; // initial anchor\n        this.placed = null;\n        this.offset = layout.offset;\n        this.unit_scale = this.layout.units_per_pixel;\n        this.aabb = null;\n        this.obb = null;\n        this.align = 'center';\n        this.throw_away = false;    // if label does not fit (exceeds tile boundary, etc) this boolean will be true\n    }\n\n    // Minimal representation of label\n    toJSON () {\n        return {\n            id: this.id,\n            type: this.type,\n            obb: this.obb.toJSON(),\n            position: this.position,\n            angle: this.angle,\n            size: this.size,\n            offset: this.offset,\n            breach: this.breach,\n            may_repeat_across_tiles: this.may_repeat_across_tiles,\n            layout: textLayoutToJSON(this.layout)\n        };\n    }\n\n    update () {\n        this.align = this.layout.align || PointAnchor.alignForAnchor(this.anchor);\n    }\n\n    // check for overlaps with other labels in the tile\n    occluded (bboxes, exclude = null) {\n        let intersect = false;\n        let aabbs = bboxes.aabb;\n        let obbs = bboxes.obb;\n\n        // Broad phase\n        if (aabbs.length > 0) {\n            boxIntersectsList(this.aabb, aabbs, (j) => {\n                // log('trace', 'collision: broad phase collide', this.layout.id, this, this.aabb, aabbs[j]);\n\n                // Skip if colliding with excluded label\n                if (exclude && aabbs[j] === exclude.aabb) {\n                    // log('trace', 'collision: skipping due to explicit exclusion', this, exclude);\n                    return;\n                }\n\n                // Skip narrow phase collision if no rotation\n                if (this.obb.angle === 0 && obbs[j].angle === 0) {\n                    // log('trace', 'collision: skip narrow phase collide because neither is rotated', this.layout.id, this, this.obb, obbs[j]);\n                    intersect = true;\n                    return true;\n                }\n\n                // Narrow phase\n                if (OBB.intersect(this.obb, obbs[j])) {\n                    // log('trace', 'collision: narrow phase collide', this.layout.id, this, this.obb, obbs[j]);\n                    intersect = true;\n                    return true;\n                }\n            });\n        }\n        return intersect;\n    }\n\n    // checks whether the label is within the tile boundaries\n    inTileBounds () {\n        if ((this.aabb[0] >= 0 && this.aabb[1] > -Geo.tile_scale && this.aabb[0] < Geo.tile_scale && this.aabb[1] <= 0) ||\n            (this.aabb[2] >= 0 && this.aabb[3] > -Geo.tile_scale && this.aabb[2] < Geo.tile_scale && this.aabb[3] <= 0)) {\n            return true;\n        }\n        return false;\n    }\n\n    // some labels need further repeat culling checks on the main thread\n    // checks whether the label is within its repeat distance of the tile boundaries\n    mayRepeatAcrossTiles () {\n        if (this.layout.collide) {\n            return true; // additional collision pass will already apply, so skip further distance checks\n        }\n\n        const dist = this.layout.repeat_distance;\n        if (dist === 0) {\n            return false;\n        }\n\n        return (Math.abs(this.position[0]) < dist ||  Math.abs(this.position[0] - Geo.tile_scale) < dist) ||\n               (Math.abs(this.position[1]) < dist ||  Math.abs(-(this.position[1] - Geo.tile_scale)) < dist);\n    }\n\n    // Whether the label should be discarded\n    // Depends on whether label must fit in the tile bounds, and if so, can it be moved to fit there\n    discard(bboxes, exclude = null) {\n        if (this.throw_away) {\n            return true;\n        }\n        return this.occluded(bboxes, exclude);\n    }\n}\n\n// Generic label placement function, adds a label's bounding boxes to the currently placed set\n//  Supports single or multiple collision boxes\nLabel.add = function (label, bboxes) {\n    label.placed = true;\n\n    if (label.aabb) {\n        bboxes.aabb.push(label.aabb);\n        bboxes.obb.push(label.obb);\n    }\n\n    if (label.aabbs) {\n        for (let i = 0; i < label.aabbs.length; i++) {\n            bboxes.aabb.push(label.aabbs[i]);\n            bboxes.obb.push(label.obbs[i]);\n        }\n    }\n};\n\nLabel.id = 0;\nLabel.id_prefix = 0; // id prefix scoped to worker thread\nLabel.id_multiplier = 0; // multiplier to keep label ids distinct across threads\n\nLabel.nextLabelId = function () {\n    return Label.id_prefix + ((Label.id++) * Label.id_multiplier);\n};\n\nLabel.epsilon = 0.9999; // tolerance around collision boxes, prevent perfectly adjacent objects from colliding\n\n// Minimal representation of text layout, sent to main thread for label collisions\nexport function textLayoutToJSON (layout) {\n    return {\n        priority: layout.priority,\n        collide: layout.collide,\n        repeat_distance: layout.repeat_distance,\n        repeat_group: layout.repeat_group,\n        buffer: layout.buffer,\n        italic: layout.italic // affects bounding box size\n    };\n}\n","export default class RepeatGroup {\n\n    constructor (key, repeat_dist) {\n        this.key = key;\n        this.repeat_dist = repeat_dist;\n        this.repeat_dist_sq = this.repeat_dist * this.repeat_dist;\n        this.positions = [];\n    }\n\n    // Check an object to see if it's a repeat in this group\n    check (obj) {\n        // Check distance from new object to objects already in group\n        let p1 = obj.position;\n        for (let i=0; i < this.positions.length; i++) {\n            let p2 = this.positions[i];\n            let dx = p1[0] - p2[0];\n            let dy = p1[1] - p2[1];\n            let dist_sq = dx * dx + dy * dy;\n\n            // Found an existing object within allowed distance\n            if (dist_sq < this.repeat_dist_sq) {\n                return true;\n            }\n        }\n    }\n\n    // Add object to this group\n    add (obj) {\n        // only store object's position, to save space / prevent unnecessary references\n        if (obj && obj.position) {\n            this.positions.push(obj.position);\n        }\n    }\n\n    // Static methods are used to manage repeat groups, within and across tiles\n\n    // Reset all groups for this tile\n    static clear (tile) {\n        this.groups[tile] = {};\n    }\n\n    // Check an object to see if it's a repeat within its designated group\n    static check (obj, layout, tile) {\n        if (layout.repeat_distance && layout.repeat_group && this.groups[tile][layout.repeat_group]) {\n            return this.groups[tile][layout.repeat_group].check(obj);\n        }\n    }\n\n    // Add an object to its designated group\n    static add (obj, layout, tile) {\n        if (layout.repeat_distance && layout.repeat_group) {\n            if (this.groups[tile][layout.repeat_group] == null) {\n                this.groups[tile][layout.repeat_group] = new RepeatGroup(layout.repeat_group, layout.repeat_distance * layout.repeat_scale);\n            }\n            this.groups[tile][layout.repeat_group].add(obj);\n        }\n    }\n\n}\n\n// Current set of repeat groups, grouped and keyed by tile\nRepeatGroup.groups = {};\n","export default class CollisionGrid {\n    constructor (anchor, span) {\n        this.anchor = anchor;\n        this.span = span;\n        this.cells = {};\n    }\n\n    addLabel (label) {\n        if (label.aabb) {\n            this.addLabelBboxes(label, label.aabb);\n        }\n\n        if (label.aabbs) {\n            label.aabbs.forEach(aabb => this.addLabelBboxes(label, aabb));\n        }\n    }\n\n    addLabelBboxes (label, aabb) {\n        // min/max cells that the label falls into\n        // keep grid coordinates at zero or above so any labels that go \"below\" the anchor are in the lowest grid cell\n        const cell_bounds = [\n            Math.max(Math.floor((aabb[0] - this.anchor.x) / this.span), 0),\n            Math.max(Math.floor(-(aabb[1] - this.anchor.y) / this.span), 0),\n            Math.max(Math.floor((aabb[2] - this.anchor.x) / this.span), 0),\n            Math.max(Math.floor(-(aabb[3] - this.anchor.y) / this.span), 0)\n        ];\n\n        label.cells = []; // label knows which cells it falls in\n\n        // initialize each grid cell as necessary, and add to label's list of cells\n        for (let gy = cell_bounds[1]; gy <= cell_bounds[3]; gy++) {\n            this.cells[gy] = this.cells[gy] || {};\n            for (let gx = cell_bounds[0]; gx <= cell_bounds[2]; gx++) {\n                this.cells[gy][gx] = this.cells[gy][gx] || { aabb: [], obb: [] };\n                label.cells.push(this.cells[gy][gx]);\n            }\n        }\n    }\n\n}\n","import Label from './label';\nimport RepeatGroup from './repeat_group';\nimport CollisionGrid from './collision_grid';\nimport log from '../utils/log';\n\nconst Collision = {\n\n    tiles: {},\n    grid: null, // no collision grid by default\n\n    initGrid (options) {\n        if (options == null) {\n            this.grid = null;\n        }\n        else {\n            this.grid = new CollisionGrid(options.anchor, options.span);\n        }\n    },\n\n    startTile (tile, { apply_repeat_groups = true, return_hidden = false } = {}) {\n        let state = this.tiles[tile] = {\n            bboxes: {           // current set of placed bounding boxes\n                aabb: [],\n                obb: []\n            },\n            objects: {},        // objects to collide, grouped by priority, then by style\n            labels: {},         // objects post-collision, grouped by style, marked as show/hide\n            styles: {},         // styles contributing collision objects\n            repeat: apply_repeat_groups,\n            return_hidden\n        };\n\n        // Promise resolved when all registered styles have added objects\n        if (state.complete == null) {\n            state.complete = new Promise((resolve, reject) => {\n                state.resolve = resolve;\n                state.reject = reject;\n            });\n        }\n    },\n\n    resetTile (tile) {\n        delete this.tiles[tile];\n    },\n\n    abortTile (tile) {\n        if (this.tiles[tile] && this.tiles[tile].resolve) {\n            this.tiles[tile].resolve([]);\n        }\n        this.resetTile(tile);\n    },\n\n    // Add a style to the pending set, collision will block on all styles submitting to collision set\n    addStyle (style, tile) {\n        this.tiles[tile].styles[style] = true;\n    },\n\n    // Add collision objects for a style\n    collide (objects, style, tile) {\n        let state = this.tiles[tile];\n        if (!state) {\n            log('trace', 'Collision.collide() called with null tile', tile, this.tiles, style, objects);\n            return Promise.resolve([]);\n        }\n\n        // Group by priority and style\n        let tile_objects = state.objects;\n        for (let i=0; i < objects.length; i++) {\n            let obj = objects[i];\n            let priority = obj.label.layout.priority;\n            tile_objects[priority] = tile_objects[priority] || {};\n            tile_objects[priority][style] = tile_objects[priority][style] || [];\n            tile_objects[priority][style].push(obj);\n        }\n\n        // Remove from pending style set, if no more styles, do collision & finish tile\n        delete state.styles[style];\n        if (Object.keys(state.styles).length === 0) {\n            this.endTile(tile);\n        }\n\n        // Wait for objects to be added from all styles\n        return state.complete.then(() => {\n            state.resolve = null;\n            return state.labels[style] || [];\n        });\n    },\n\n    // Test labels for collisions, higher to lower priority\n    // When two collide, hide the lower-priority label\n    endTile (tile) {\n        let state = this.tiles[tile];\n        let labels = state.labels;\n\n        if (this.grid) {\n            this.addLabelsToGrid(tile);\n        }\n\n        if (state.repeat) {\n            RepeatGroup.clear(tile);\n        }\n\n        // Process labels by priority, then by style\n        let priorities = Object.keys(state.objects).sort((a, b) => a - b);\n        for (let p=0; p < priorities.length; p++) {\n            let style_objects = state.objects[priorities[p]];\n            if (!style_objects) { // no labels at this priority, skip to next\n                continue;\n            }\n\n            // For each style\n            for (let style in style_objects) {\n                let objects = style_objects[style];\n                labels[style] = labels[style] || [];\n\n                for (let i = 0; i < objects.length; i++) {\n                    let object = objects[i];\n                    if (this.canBePlaced(object, tile, object.linked, state)) {\n                        // show object if it isn't dependent on a parent object\n                        if (!object.linked) {\n                            object.show = true;\n                            labels[style].push(object);\n                            this.place(object, tile, state);\n                        }\n                        // If object is dependent on a parent, only show if both can be placed\n                        else if (this.canBePlaced(object.linked, tile, object, state)) {\n                            object.show = true;\n\n                            // If a label is breach, its linked label should be considered breach as well\n                            // (this keeps linked labels (in)visible in tandem)\n                            if (object.label.breach || object.linked.label.breach) {\n                                object.label.breach = true;\n                                object.linked.label.breach = true;\n                            }\n\n                            // Similarly for labels that need main thread repeat culling, keep linked labels in sync\n                            if (object.label.may_repeat_across_tiles || object.linked.label.may_repeat_across_tiles) {\n                                object.label.may_repeat_across_tiles = true;\n                                object.linked.label.may_repeat_across_tiles = true;\n                            }\n\n                            labels[style].push(object);\n                            this.place(object, tile, state);\n                            this.place(object.linked, tile, state);\n                        }\n                        else if (state.return_hidden) {\n                            object.show = false;\n                            labels[style].push(object);\n                        }\n                    }\n                    else if (state.return_hidden) {\n                        object.show = false;\n                        labels[style].push(object);\n                    }\n                }\n            }\n        }\n\n        delete this.tiles[tile];\n        state.resolve();\n    },\n\n    addLabelsToGrid (tile_id) {\n        // Process labels by priority, then by style\n        const tile = this.tiles[tile_id];\n        for (const priority in tile.objects) {\n            const style_objects = tile.objects[priority];\n            if (!style_objects) { // no labels at this priority, skip to next\n                continue;\n            }\n\n            // For each style\n            for (const style in style_objects) {\n                const objects = style_objects[style];\n                objects.forEach(object => this.grid.addLabel(object.label));\n            }\n        }\n    },\n\n    // Run collision and repeat check to see if label can currently be placed\n    canBePlaced (object, tile, exclude = null, { repeat = true } = {}) {\n        let label = object.label;\n        let layout = object.label.layout;\n\n        // Skip if already processed (e.g. by parent object)\n        if (label.placed != null) {\n            return label.placed;\n        }\n\n        let placeable = !layout.collide;\n        if (!placeable) {\n            // Test the label for intersections with other labels\n            if (this.grid && label.cells) {\n                // test label candidate against labels placed in each grid cell\n                placeable = label.cells.reduce((keep, cell) => {\n                    if (keep && label.discard(cell, exclude && exclude.label)) {\n                        keep = false;\n                    }\n                    return keep;\n                }, true);\n            }\n            else {\n                placeable = !label.discard(this.tiles[tile].bboxes, exclude && exclude.label);\n            }\n        }\n\n        if (placeable) {\n            // repeat culling with nearby labels\n            if (repeat && RepeatGroup.check(label, layout, tile)) {\n                label.placed = false;\n            }\n            else {\n                return true;\n            }\n        }\n        else if (layout.collide) {\n            // log('trace', `hide label '${label.text}' due to collision`);\n            label.placed = false;\n        }\n        return label.placed;\n    },\n\n    // Place label\n    place ({ label }, tile, { repeat = true }) {\n        // Skip if already processed (e.g. by parent object)\n        if (label.placed != null) {\n            return;\n        }\n\n        // Register as placed for future collision and repeat culling\n        if (repeat) {\n            RepeatGroup.add(label, label.layout, tile);\n        }\n\n        if (this.grid && label.cells) {\n            label.cells.forEach(cell => Label.add(label, cell));\n        }\n        else {\n            Label.add(label, this.tiles[tile].bboxes);\n        }\n    }\n\n};\n\nexport default Collision;\n","import Label from './label';\nimport PointAnchor from './point_anchor';\nimport OBB from '../utils/obb';\nimport StyleParser from '../styles/style_parser';\n\nexport default class LabelPoint extends Label {\n\n    constructor (position, size, layout, angle = 0) {\n        super(size, layout);\n        this.type = 'point';\n        this.position = [position[0], position[1]];\n        this.angle = angle;\n        this.parent = this.layout.parent;\n        this.update();\n\n        this.start_anchor_index = 1;\n        this.degenerate = !this.size[0] && !this.size[1] && !this.layout.buffer[0] && !this.layout.buffer[1];\n        this.throw_away = false;\n    }\n\n    update() {\n        super.update();\n        this.computeOffset();\n        this.updateBBoxes();\n    }\n\n    computeOffset () {\n        this.offset = [this.layout.offset[0], this.layout.offset[1]];\n\n        // Additional anchor/offset for point:\n        if (this.parent) {\n            let parent = this.parent;\n            // point's own anchor, text anchor applied to point, additional point offset\n            this.offset = PointAnchor.computeOffset(this.offset, parent.size, parent.anchor, PointAnchor.zero_buffer);\n            this.offset = PointAnchor.computeOffset(this.offset, parent.size, this.anchor, PointAnchor.zero_buffer);\n            if (parent.offset !== StyleParser.zeroPair) {        // point has an offset\n                if (this.offset === StyleParser.zeroPair) {      // no text offset, use point's\n                    this.offset = parent.offset;\n                }\n                else {                                           // text has offset, add point's\n                    this.offset[0] += parent.offset[0];\n                    this.offset[1] += parent.offset[1];\n                }\n            }\n        }\n\n        this.offset = PointAnchor.computeOffset(this.offset, this.size, this.anchor);\n    }\n\n    updateBBoxes () {\n        let width = (this.size[0] + this.layout.buffer[0] * 2) * this.unit_scale * Label.epsilon;\n        let height = (this.size[1] + this.layout.buffer[1] * 2) * this.unit_scale * Label.epsilon;\n\n        // fudge width value as text may overflow bounding box if it has italic, bold, etc style\n        if (this.layout.italic) {\n            width += 5 * this.unit_scale;\n        }\n\n        // make bounding boxes\n        this.obb = new OBB(\n            this.position[0] + (this.offset[0] * this.unit_scale),\n            this.position[1] - (this.offset[1] * this.unit_scale),\n            -this.angle, // angle is negative because tile system y axis is pointing down\n            width,\n            height\n        );\n        this.aabb = this.obb.getExtent();\n\n        if (this.inTileBounds) {\n            this.breach = !this.inTileBounds();\n        }\n\n        if (this.mayRepeatAcrossTiles) {\n            this.may_repeat_across_tiles = this.mayRepeatAcrossTiles();\n        }\n    }\n\n    discard (bboxes, exclude = null) {\n        if (this.degenerate) {\n            return false;\n        }\n\n        if (super.discard(bboxes, exclude)) {\n            // If more than one anchor specified, try them in order\n            if (Array.isArray(this.layout.anchor)) {\n                // Start on second anchor (first anchor was set on creation)\n                for (let i=this.start_anchor_index; i < this.layout.anchor.length; i++) {\n                    this.anchor = this.layout.anchor[i];\n                    this.update();\n\n                    if (!super.discard(bboxes, exclude)) {\n                        return false;\n                    }\n                }\n            }\n            return true;\n        }\n        return false;\n    }\n\n}\n\n// Placement strategies\nLabelPoint.PLACEMENT = {\n    VERTEX: 0,          // place labels at endpoints of line segments\n    MIDPOINT: 1,        // place labels at midpoints of line segments\n    SPACED: 2,          // place labels equally spaced along line\n    CENTROID: 3         // place labels at center of polygons\n};\n","// Logic for placing point labels along a line geometry\n\nimport LabelPoint from './label_point';\nimport {isCoordOutsideTile} from '../builders/common';\n\nconst PLACEMENT = LabelPoint.PLACEMENT;\nconst default_spacing = 80; // spacing of points along line in pixels\n\nexport default function placePointsOnLine (line, size, layout) {\n    const labels = [];\n    const strategy = layout.placement;\n    const min_length = Math.max(size[0], size[1]) * layout.placement_min_length_ratio * layout.units_per_pixel;\n\n    if (strategy === PLACEMENT.SPACED) {\n        let result = getPositionsAndAngles(line, min_length, layout);\n        // false will be returned if line have no length\n        if (!result) {\n            return [];\n        }\n\n        let positions = result.positions;\n        let angles = result.angles;\n        for (let i = 0; i < positions.length; i++) {\n            let position = positions[i];\n            let angle = angles[i];\n            if (layout.tile_edges === true || !isCoordOutsideTile(position)) {\n                labels.push(new LabelPoint(position, size, layout, angle));\n            }\n        }\n    }\n    else if (strategy === PLACEMENT.VERTEX) {\n        let p, q;\n        for (let i = 0; i < line.length - 1; i++) {\n            p = line[i];\n            q = line[i + 1];\n            if (layout.tile_edges === true || !isCoordOutsideTile(p)) {\n                const angle = getAngle(p, q, layout.angle);\n                labels.push(new LabelPoint(p, size, layout, angle));\n            }\n        }\n\n        // add last endpoint\n        const angle = getAngle(p, q, layout.angle);\n        labels.push(new LabelPoint(q, size, layout, angle));\n    }\n    else if (strategy === PLACEMENT.MIDPOINT) {\n        for (let i = 0; i < line.length - 1; i++) {\n            let p = line[i];\n            let q = line[i + 1];\n            let position = [\n                0.5 * (p[0] + q[0]),\n                0.5 * (p[1] + q[1])\n            ];\n            if (layout.tile_edges === true || !isCoordOutsideTile(position)) {\n                if (!min_length || norm(p, q) > min_length) {\n                    const angle = getAngle(p, q, layout.angle);\n                    labels.push(new LabelPoint(position, size, layout, angle));\n                }\n            }\n        }\n    }\n    return labels;\n}\n\nfunction getPositionsAndAngles(line, min_length, layout) {\n    let upp = layout.units_per_pixel;\n    let spacing = (layout.placement_spacing || default_spacing) * upp;\n\n    let length = getLineLength(line);\n    if (length <= min_length) {\n        return false;\n    }\n\n    let num_labels = Math.max(Math.floor(length / spacing), 1);\n    let remainder = length - (num_labels - 1) * spacing;\n    let positions = [];\n    let angles = [];\n\n    let distance = 0.5 * remainder;\n    for (let i = 0; i < num_labels; i++) {\n        let {position, angle} = interpolateLine(line, distance, min_length, layout);\n        if (position != null && angle != null) {\n            positions.push(position);\n            angles.push(angle);\n        }\n        distance += spacing;\n    }\n\n    return {positions, angles};\n}\n\nfunction getAngle(p, q, angle = 0) {\n    return (angle === 'auto') ? Math.atan2(q[0] - p[0], q[1] - p[1]) : angle;\n}\n\nfunction getLineLength(line) {\n    let distance = 0;\n    for (let i = 0; i < line.length - 1; i++) {\n        distance += norm(line[i], line[i+1]);\n    }\n    return distance;\n}\n\nfunction norm(p, q) {\n    return Math.sqrt(Math.pow(p[0] - q[0], 2) + Math.pow(p[1] - q[1], 2));\n}\n\n// TODO: can be optimized.\n// you don't have to start from the first index every time for placement\nfunction interpolateLine(line, distance, min_length, layout) {\n    let sum = 0;\n    let position, angle;\n    for (let i = 0; i < line.length-1; i++) {\n        let p = line[i];\n        let q = line[i+1];\n\n        const length = norm(p, q);\n        if (length <= min_length) {\n            continue;\n        }\n\n        sum += length;\n\n        if (sum > distance) {\n            position = interpolateSegment(p, q, sum - distance);\n            angle = getAngle(p, q, layout.angle);\n            break;\n        }\n    }\n    return {position, angle};\n}\n\nfunction interpolateSegment(p, q, distance) {\n    let length = norm(p, q);\n    let ratio = distance / length;\n    return [\n        ratio * p[0] + (1 - ratio) * q[0],\n        ratio * p[1] + (1 - ratio) * q[1]\n    ];\n}\n","import Utils from '../../utils/utils';\nimport StyleParser from '../style_parser';\n\nconst TextSettings = {\n\n    // A key for grouping all labels of the same text style (e.g. same Canvas state, to minimize state changes)\n    key (settings) {\n        return [\n            settings.style,\n            settings.weight,\n            settings.family,\n            settings.px_size,\n            settings.fill,\n            settings.stroke,\n            settings.stroke_width,\n            settings.underline_width,\n            settings.background_color,\n            settings.background_width,\n            settings.background_stroke_color,\n            settings.background_stroke_width,\n            settings.transform,\n            settings.text_wrap,\n            settings.max_lines,\n            settings.supersample,\n            Utils.device_pixel_ratio\n        ].join('/');\n    },\n\n    defaults: {\n        style: 'normal',\n        weight: 'normal',\n        size: '12px',\n        px_size: 12,\n        family: 'Helvetica',\n        fill: [1, 1, 1, 1],\n        text_wrap: 15,\n        max_lines: 5,\n        align: 'center'\n    },\n\n    compute (draw, context) {\n        const style = {};\n\n        draw.font = draw.font || this.defaults;\n\n        style.supersample = draw.supersample_text ? 1.5 : 1; // optionally render text at 150% to improve clarity\n\n        // LineString labels can articulate while point labels cannot. Needed for future texture coordinate calculations.\n        style.can_articulate = draw.can_articulate;\n\n        // Text fill\n        style.fill = StyleParser.evalCachedColorPropertyWithAlpha(draw.font.fill, draw.font.alpha, context);\n        style.fill = Utils.toCSSColor(style.fill); // convert to CSS for Canvas\n\n        // Text stroke\n        if (draw.font.stroke && draw.font.stroke.color) {\n            style.stroke = StyleParser.evalCachedColorPropertyWithAlpha(draw.font.stroke.color, draw.font.stroke.alpha, context);\n            style.stroke = Utils.toCSSColor(style.stroke); // convert to CSS for Canvas\n            style.stroke_width = StyleParser.evalCachedProperty(draw.font.stroke.width, context);\n        }\n\n        // Text underline\n        if (draw.font.underline === true && !style.can_articulate) {\n            style.underline_width = 1.5 * style.supersample;\n        }\n\n        // Background box\n        if (draw.font.background && !style.can_articulate) { // supported for point labels only\n            // Background fill\n            style.background_color = StyleParser.evalCachedColorPropertyWithAlpha(draw.font.background.color, draw.font.background.alpha, context);\n            style.background_color = Utils.toCSSColor(style.background_color); // convert to CSS for Canvas\n            if (style.background_color) {\n                style.background_width = StyleParser.evalCachedProperty(draw.font.background.width, context);\n            }\n\n            // Background stroke\n            style.background_stroke_color =\n                draw.font.background.stroke &&\n                draw.font.background.stroke.color &&\n            StyleParser.evalCachedColorPropertyWithAlpha(draw.font.background.stroke.color, draw.font.background.stroke.alpha, context);\n            if (style.background_stroke_color) {\n                style.background_stroke_color = Utils.toCSSColor(style.background_stroke_color); // convert to CSS for Canvas\n\n                // default background stroke to 1px when stroke color but no stroke width specified\n                style.background_stroke_width = draw.font.background.stroke.width != null ?\n                    StyleParser.evalCachedProperty(draw.font.background.stroke.width, context) : 1;\n            }\n        }\n\n        // Font properties are modeled after CSS names:\n        // - family: Helvetica, Futura, etc.\n        // - size: in pt, px, or em\n        // - style: normal, italic, oblique\n        // - weight: normal, bold, etc.\n        // - transform: capitalize, uppercase, lowercase\n\n        // clamp weight to 1-1000 (see https://drafts.csswg.org/css-fonts-4/#valdef-font-weight-number)\n        style.weight = StyleParser.evalCachedProperty(draw.font.weight, context) || this.defaults.weight;\n        if (typeof style.weight === 'number') {\n            style.weight = Math.min(Math.max(style.weight, 1), 1000);\n        }\n\n        if (draw.font.family) {\n            style.family = draw.font.family;\n            if (style.family !== this.defaults.family) {\n                style.family += ', ' + this.defaults.family;\n            }\n        }\n        else {\n            style.family = this.defaults.family;\n        }\n\n        style.style = draw.font.style || this.defaults.style;\n        style.transform = draw.font.transform;\n\n        // calculated pixel size\n        style.px_size = StyleParser.evalCachedProperty(draw.font.px_size, context) * style.supersample;\n\n        style.font_css = this.fontCSS(style);\n\n        // Word wrap and text alignment\n        // Not a font properties, but affect atlas of unique text textures\n        let text_wrap = draw.text_wrap; // use explicitly set value\n\n        if (text_wrap == null && !style.can_articulate) {\n            // point labels (for point and polygon features) have word wrap on w/default max length,\n            // line labels default off\n            text_wrap = true;\n        }\n\n        // setting to 'true' causes default wrap value to be used\n        if (text_wrap === true) {\n            text_wrap = this.defaults.text_wrap;\n        }\n        style.text_wrap = text_wrap;\n\n        // max_lines setting to truncate very long labels with an ellipsis\n        style.max_lines = draw.max_lines || this.defaults.max_lines;\n\n        return style;\n    },\n\n    // Build CSS-style font string (to set Canvas draw state)\n    fontCSS ({ style, weight, px_size, family }) {\n        return [style, weight, px_size + 'px', family]\n            .filter(x => x) // remove null props\n            .join(' ');\n    }\n\n};\n\nexport default TextSettings;\n","(function(){function m(a,b){document.addEventListener?a.addEventListener(\"scroll\",b,!1):a.attachEvent(\"scroll\",b)}function n(a){document.body?a():document.addEventListener?document.addEventListener(\"DOMContentLoaded\",function c(){document.removeEventListener(\"DOMContentLoaded\",c);a()}):document.attachEvent(\"onreadystatechange\",function l(){if(\"interactive\"==document.readyState||\"complete\"==document.readyState)document.detachEvent(\"onreadystatechange\",l),a()})};function t(a){this.a=document.createElement(\"div\");this.a.setAttribute(\"aria-hidden\",\"true\");this.a.appendChild(document.createTextNode(a));this.b=document.createElement(\"span\");this.c=document.createElement(\"span\");this.h=document.createElement(\"span\");this.f=document.createElement(\"span\");this.g=-1;this.b.style.cssText=\"max-width:none;display:inline-block;position:absolute;height:100%;width:100%;overflow:scroll;font-size:16px;\";this.c.style.cssText=\"max-width:none;display:inline-block;position:absolute;height:100%;width:100%;overflow:scroll;font-size:16px;\";\nthis.f.style.cssText=\"max-width:none;display:inline-block;position:absolute;height:100%;width:100%;overflow:scroll;font-size:16px;\";this.h.style.cssText=\"display:inline-block;width:200%;height:200%;font-size:16px;max-width:none;\";this.b.appendChild(this.h);this.c.appendChild(this.f);this.a.appendChild(this.b);this.a.appendChild(this.c)}\nfunction x(a,b){a.a.style.cssText=\"max-width:none;min-width:20px;min-height:20px;display:inline-block;overflow:hidden;position:absolute;width:auto;margin:0;padding:0;top:-999px;left:-999px;white-space:nowrap;font:\"+b+\";\"}function y(a){var b=a.a.offsetWidth,c=b+100;a.f.style.width=c+\"px\";a.c.scrollLeft=c;a.b.scrollLeft=a.b.scrollWidth+100;return a.g!==b?(a.g=b,!0):!1}function z(a,b){function c(){var a=l;y(a)&&a.a.parentNode&&b(a.g)}var l=a;m(a.b,c);m(a.c,c);y(a)};function A(a,b){var c=b||{};this.family=a;this.style=c.style||\"normal\";this.weight=c.weight||\"normal\";this.stretch=c.stretch||\"normal\"}var B=null,C=null,E=null,F=null;function I(){if(null===E){var a=document.createElement(\"div\");try{a.style.font=\"condensed 100px sans-serif\"}catch(b){}E=\"\"!==a.style.font}return E}function J(a,b){return[a.style,a.weight,I()?a.stretch:\"\",\"100px\",b].join(\" \")}\nA.prototype.load=function(a,b){var c=this,l=a||\"BESbswy\",r=0,D=b||3E3,G=(new Date).getTime();return new Promise(function(a,b){var e;null===F&&(F=!!document.fonts);if(e=F)null===C&&(C=/OS X.*Version\\/10\\..*Safari/.test(navigator.userAgent)&&/Apple/.test(navigator.vendor)),e=!C;if(e){e=new Promise(function(a,b){function f(){(new Date).getTime()-G>=D?b():document.fonts.load(J(c,'\"'+c.family+'\"'),l).then(function(c){1<=c.length?a():setTimeout(f,25)},function(){b()})}f()});var K=new Promise(function(a,\nc){r=setTimeout(c,D)});Promise.race([K,e]).then(function(){clearTimeout(r);a(c)},function(){b(c)})}else n(function(){function e(){var b;if(b=-1!=g&&-1!=h||-1!=g&&-1!=k||-1!=h&&-1!=k)(b=g!=h&&g!=k&&h!=k)||(null===B&&(b=/AppleWebKit\\/([0-9]+)(?:\\.([0-9]+))/.exec(window.navigator.userAgent),B=!!b&&(536>parseInt(b[1],10)||536===parseInt(b[1],10)&&11>=parseInt(b[2],10))),b=B&&(g==u&&h==u&&k==u||g==v&&h==v&&k==v||g==w&&h==w&&k==w)),b=!b;b&&(d.parentNode&&d.parentNode.removeChild(d),clearTimeout(r),a(c))}\nfunction H(){if((new Date).getTime()-G>=D)d.parentNode&&d.parentNode.removeChild(d),b(c);else{var a=document.hidden;if(!0===a||void 0===a)g=f.a.offsetWidth,h=p.a.offsetWidth,k=q.a.offsetWidth,e();r=setTimeout(H,50)}}var f=new t(l),p=new t(l),q=new t(l),g=-1,h=-1,k=-1,u=-1,v=-1,w=-1,d=document.createElement(\"div\");d.dir=\"ltr\";x(f,J(c,\"sans-serif\"));x(p,J(c,\"serif\"));x(q,J(c,\"monospace\"));d.appendChild(f.a);d.appendChild(p.a);d.appendChild(q.a);document.body.appendChild(d);u=f.a.offsetWidth;v=p.a.offsetWidth;\nw=q.a.offsetWidth;H();z(f,function(a){g=a;e()});x(f,J(c,'\"'+c.family+'\",sans-serif'));z(p,function(a){h=a;e()});x(p,J(c,'\"'+c.family+'\",serif'));z(q,function(a){k=a;e()});x(q,J(c,'\"'+c.family+'\",monospace'))})})};\"undefined\"!==typeof module?module.exports=A:(window.FontFaceObserver=A,window.FontFaceObserver.prototype.load=A.prototype.load);}());\n","import log from '../../utils/log';\nimport Utils from '../../utils/utils';\nimport FontFaceObserver from 'fontfaceobserver';\n\nconst FontManager = {\n\n    // Font detection\n    fonts_loaded: Promise.resolve(), // resolves when all requested fonts have been detected\n    last_loaded: null,               // tracks last set of fonts loaded\n\n    // Load set of custom font faces\n    // `fonts` is an object where the key is a font family name, and the value is one or more font face\n    // definitions. The value can be either a single object, or an array of such objects.\n    // If the special string value 'external' is used, it indicates the the font will be loaded via external CSS.\n    loadFonts (fonts) {\n        const same = (JSON.stringify(fonts) === this.last_loaded);\n        if (fonts && !same) {\n            const queue = [];\n            for (const family in fonts) {\n                if (Array.isArray(fonts[family])) {\n                    fonts[family].forEach(face => queue.push(this.loadFontFace(family, face)));\n                }\n                else {\n                    queue.push(this.loadFontFace(family, fonts[family]));\n                }\n            }\n\n            this.last_loaded = JSON.stringify(fonts);\n            this.fonts_loaded = Promise.all(queue.filter(x => x));\n        }\n        return this.fonts_loaded;\n    },\n\n    // Load a single font face\n    // `face` contains the font face definition, with optional parameters for `weight`, `style`, and `url`.\n    // If the `url` is defined, the font is injected into the document as a CSS font-face.\n    // If the object's value is the special string 'external', or if no `url` is defined, then the font face\n    // is assumed is assumed to been loaded via external CSS. In either case, the function returns a promise\n    // that resolves when the font face has loaded, or times out.\n    async loadFontFace (family, face) {\n        if (face == null || (typeof face !== 'object' && face !== 'external')) {\n            return;\n        }\n\n        const options = { family };\n\n        if (typeof face === 'object') {\n            Object.assign(options, face);\n\n            // If URL is defined, inject font into document\n            if (typeof face.url === 'string') {\n                await this.injectFontFace(options);\n            }\n        }\n\n        // Wait for font to load\n        try {\n            // FontFaceObserver does not directly support variable fonts syntax, which allows for ranges,\n            // e.g. `font-weight: 100 800`. FontFaceObserver will insert the entire string value into a\n            // CSS `font` shorthand property, causing an error. To get around this, we simply take the first\n            // value, because as soon as one variant of the variable font is available, they all should be.\n            // See https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Fonts/Variable_Fonts_Guide\n            options.weight = typeof options.weight === 'string' ? options.weight.split(' ')[0] : options.weight;\n            const observer = new FontFaceObserver(family, options);\n            await observer.load();\n            // Promise resolves, font is available\n            log('debug', `Font face '${family}' is available`, options);\n        }\n        catch (e) {\n            // Promise rejects, font is not available\n            log('warn', `Font face '${family}' is NOT available`, options, e);\n        }\n    },\n\n    // Loads a font face via either the native FontFace API, or CSS injection\n    // TODO: consider support for multiple format URLs per face, unicode ranges\n    async injectFontFace ({ family, url, weight, style }) {\n        if (this.supports_native_font_loading === undefined) {\n            this.supports_native_font_loading = (window.FontFace !== undefined);\n        }\n\n        // Convert blob URLs, depending on whether the native FontFace API will be used or not.\n        //\n        // When the FontFace API *is* supported, the blob URL is read into a raw data array.\n        // NB: it's inefficient to be converting blob URLs into typed arrays here, since they originated\n        // as raw data *before* they were converted into blob URLs. However, this process should be fast since\n        // these are native browser functions and all data is local (no network request), and it keeps the\n        // logic streamlined by allowing us to continue to use a URL-based interface for all scene resources.\n        //\n        // When the FontFace API is *not* supported, the blob URL data is converted to a base64 data URL.\n        // This avoids security restricions in some browsers.\n        // Also see https://github.com/bramstein/fontloader/blob/598e9399117bdc946ff786fa2c5007a6bd7d3b9e/src/fontface.js#L145-L153\n        let data = url;\n        if (url.slice(0, 5) === 'blob:') {\n            data = (await Utils.io(url, 60000, 'arraybuffer')).body;\n            let bytes = new Uint8Array(data);\n            if (this.supports_native_font_loading) {\n                data = bytes; // use raw binary data\n            }\n            else {\n                let str = '';\n                for (let i = 0; i < bytes.length; i++) {\n                    str += String.fromCharCode(bytes[i]);\n                }\n                data = 'data:font/opentype;base64,' + btoa(str); // base64 encode as data URL\n            }\n        }\n\n        if (this.supports_native_font_loading) {\n            // Use native FontFace API\n            let face;\n            if (typeof data === 'string') { // add as URL\n                face = new FontFace(family, `url(${encodeURI(data)})`, { weight, style });\n            }\n            else if (data instanceof Uint8Array) { // add as binary data\n                face = new FontFace(family, data, { weight, style });\n            }\n            document.fonts.add(face);\n            log('trace', 'Adding FontFace to document.fonts:', face);\n        }\n        else {\n            // Use CSS injection\n            let css = `\n                @font-face {\n                    font-family: '${family}';\n                    font-weight: ${weight || 'normal'};\n                    font-style: ${style || 'normal'};\n                    src: url(${encodeURI(data)});\n                }`;\n            let style_el = document.createElement('style');\n            style_el.appendChild(document.createTextNode(''));\n            document.head.appendChild(style_el);\n            style_el.sheet.insertRule(css, 0);\n            log('trace', 'Injecting CSS font face:', css);\n        }\n    }\n\n};\n\nexport default FontManager;\n","// Text directionality (right-to-left, bi-directional) and segmentation (curved labels, Arabic handling)\n\n// Right-to-left / bi-directional text handling\n// Taken from http://stackoverflow.com/questions/12006095/javascript-how-to-check-if-character-is-rtl\nconst rtl_test = new RegExp('[\\u0591-\\u07FF\\u200F\\u202B\\u202E\\uFB1D-\\uFDFD\\uFE70-\\uFEFC]');\nexport function isTextRTL(s){\n    return rtl_test.test(s);\n}\n\nconst neutral_chars = '\\u0000-\\u002F\\u003A-\\u0040\\u005B-\\u0060\\u007B-\\u00BF\\u00D7\\u00F7\\u02B9-\\u02FF\\u2000-\\u2BFF\\u2010-\\u2029\\u202C\\u202F-\\u2BFF';\nconst neutral_test = new RegExp('['+neutral_chars+']+');\nexport function isTextNeutral(s){\n    return neutral_test.test(s);\n}\n\nexport const RTL_MARKER = '\\u200F'; // explicit right-to-left marker\n\n// Arabic script ranges\n// test http://localhost:8000/#16.72917/30.08541/31.28466\nconst arabic_range = new RegExp('^['+neutral_chars+'\\u0600-\\u06FF]+'); // all characters are Arabic or neutral\nconst arabic_splitters = new RegExp('['+neutral_chars+'\\u0622-\\u0625\\u0627\\u062F-\\u0632\\u0648\\u0671-\\u0677\\u0688-\\u0699\\u06C4-\\u06CB\\u06CF\\u06D2\\u06D3\\u06EE\\u06EF]');\nconst arabic_vowels = new RegExp('^[\\u0610-\\u061A\\u064B-\\u065F\\u0670\\u06D6-\\u06DC\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED]+');\n\n// Complex script ranges (non-Arabic)\nconst accents_and_vowels = '[\\u0300-\\u036F' + // Combining Diacritical Marks\n'\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7' + // Hebrew\n'\\u07A6-\\u07B0' + // Thaana\n'\\u0900-\\u0903\\u093A-\\u094C\\u094E\\u094F\\u0951-\\u0957\\u0962\\u0963' + // Devanagari\n'\\u0981-\\u0983\\u09BC\\u09BE-\\u09CC\\u09D7\\u09E2\\u09E3' + // Bengali\n'\\u0A01-\\u0A03\\u0A3C-\\u0A4C\\u0A51' + // Gurmukhi\n'\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0ACC\\u0AE2\\u0AE3' + // Gujarati\n'\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B4C\\u0B56\\u0B57\\u0B62\\u0B63' + // Oriya\n'\\u0B82\\u0BBE-\\u0BCD\\u0BD7' + // Tamil\n'\\u0C00-\\u0C03\\u0C3E-\\u0C4C\\u0C55\\u0C56\\u0C62\\u0C63' + // Telugu\n'\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CCC\\u0CD5\\u0CD6\\u0CE2\\u0CE3' + // Kannada\n'\\u0D01-\\u0D03\\u0D3E-\\u0D4C\\u0D4E\\u0D57\\u0D62\\u0D63' + // Malayalam\n'\\u0D82\\u0D83\\u0DCA-\\u0DDF\\u0DF2\\u0DF3' + // Sinhala\n'\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E' + // Thai\n'\\u0EB1\\u0EB4-\\u0EBC\\u0EC8-\\u0ECD' + // Lao\n'\\u0F18\\u0F19\\u0F35\\u0F37\\u0F39\\u0F3E\\u0F3F\\u0F71-\\u0F83\\u0F86\\u0F87\\u0F8D-\\u0FBC\\u0FC6' + // Tibetan\n'\\u102B-\\u1038\\u103A-\\u103E\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F\\u109A-\\u109D' + // Burmese\n'\\u17B4-\\u17D1\\u17D3' + // Khmer\n'\\u1A55-\\u1A5E\\u1A61-\\u1A7C' + // Tai Tham\n'\\u1DC0-\\u1DFF' + // Combining Diacritical Marks Supplement\n'\\u20D0-\\u20FF' + // Combining Diacritical Marks for Symbols\n']';\nconst combo_characters = '[\\u094D\\u09CD\\u0A4D\\u0ACD\\u0B4D\\u0C4D\\u0CCD\\u0D4D\\u0F84\\u1039\\u17D2\\u1A60\\u1A7F]';\n\n// Find the next grapheme cluster (non-Arabic)\nconst grapheme_match = new RegExp(`^.(?:${accents_and_vowels}+)?(${combo_characters}\\\\W(?:${accents_and_vowels}+)?)*`); // eslint-disable-line no-misleading-character-class\n\n// Scripts that cannot be curved due (due to contextual shaping and/or layout complexity)\nconst curve_blacklist = {\n    Mongolian: '\\u1800-\\u18AF'\n};\nconst curve_blacklist_range = Object.keys(curve_blacklist).map(r => curve_blacklist[r]).join('');\nconst curve_blacklist_test = new RegExp('['+curve_blacklist_range+']');\nexport function isTextCurveBlacklisted(s){\n    return curve_blacklist_test.test(s);\n}\n\n// Splitting strategy for chopping a label into segments\nconst default_segment_length = 2; // character length of each segment when dividing up label text\n\nexport function splitLabelText(text, rtl, cache) {\n    // Use single-character segments for RTL, to avoid additional handling for neutral characters\n    // (see https://github.com/tangrams/tangram/issues/541)\n    const segment_length = rtl ? 1 : default_segment_length;\n\n    // Only one segment\n    if (text.length < segment_length) {\n        return [text];\n    }\n\n    // Check segment cache first (skips processing for labels we've seen before)\n    let key = text;\n    if (cache.segment[key]) {\n        cache.stats.segment_hits++;\n        return cache.segment[key];\n    }\n\n    let segments = [];\n\n    // Arabic-specific text handling\n    // NB: works for strings that are *only* Arabic; mixed-script labels may need more work\n    if (arabic_range.exec(text)) {\n        segments = text.split(arabic_splitters);\n        let offset = -1;\n        for (var s = 0; s < segments.length - 1; s++) {\n            if (s > 0) {\n                let carryover_vowels = arabic_vowels.exec(segments[s]);\n                if (carryover_vowels) {\n                    segments[s] = segments[s].substring(carryover_vowels[0].length);\n                    segments[s - 1] += carryover_vowels[0];\n                    offset += carryover_vowels[0].length;\n                }\n            }\n            offset += 1 + segments[s].length;\n            segments[s] += text.slice(offset, offset + 1);\n        }\n        text = ''; // will skip non-Arabic handling below\n    }\n\n    // Non-Arabic text handling\n    while (text.length) {\n        let segment = '';\n        let test_text = text;\n        let grapheme_count = 0;\n\n        for (grapheme_count; grapheme_count < segment_length && test_text.length; grapheme_count++) {\n            let grapheme_cluster = (grapheme_match.exec(test_text) || test_text)[0];\n            segment += grapheme_cluster;\n            test_text = test_text.substring(grapheme_cluster.length);\n        }\n\n        segments.push(segment);\n        text = text.substring(segment.length);\n    }\n\n    // Reverse segments if needed\n    if (rtl) {\n        segments.reverse();\n    }\n\n    // Cache and return\n    cache.stats.segment_misses++;\n    cache.segment[key] = segments;\n    return segments;\n}\n","// Word wrapping\n\nimport { isTextRTL, isTextNeutral, RTL_MARKER } from './text_segments';\n\n// Private class to arrange text labels into multiple lines based on\n// \"text wrap\" and \"max line\" values\nexport default class MultiLine {\n    constructor (context, max_lines = Infinity, text_wrap = Infinity) {\n        this.width = 0;\n        this.height = 0;\n        this.lines = [];\n\n        this.max_lines = max_lines;\n        this.text_wrap = text_wrap;\n        this.context = context;\n    }\n\n    createLine (line_height){\n        if (this.lines.length < this.max_lines){\n            return new Line(line_height, this.text_wrap);\n        }\n        else {\n            return false;\n        }\n    }\n\n    push (line){\n        if (this.lines.length < this.max_lines){\n            // measure line width\n            let line_width = this.context.measureText(line.text).width;\n            line.width = line_width;\n\n            if (line_width > this.width){\n                this.width = Math.ceil(line_width);\n            }\n\n            // add to lines and increment height\n            this.lines.push(line);\n            this.height += line.height;\n            return true;\n        }\n        else {\n            this.addEllipsis();\n            return false;\n        }\n    }\n\n    // pushes to the lines array and returns a new line if possible (false otherwise)\n    advance (line, line_height) {\n        let can_push = this.push(line);\n        if (can_push){\n            return this.createLine(line_height);\n        }\n        else {\n            return false;\n        }\n    }\n\n    addEllipsis (){\n        let last_line = this.lines[this.lines.length - 1];\n        let ellipsis_width = Math.ceil(this.context.measureText(MultiLine.ellipsis).width);\n\n        last_line.append(MultiLine.ellipsis);\n        last_line.width += ellipsis_width;\n\n        if (last_line.width > this.width) {\n            this.width = last_line.width;\n        }\n    }\n\n    finish (line){\n        if (line){\n            this.push(line);\n        }\n        else {\n            this.addEllipsis();\n        }\n    }\n\n    static parse (str, text_wrap, max_lines, line_height, ctx) {\n        // Word wrapping\n        // Line breaks can be caused by:\n        //  - implicit line break when a maximum character threshold is exceeded per line (text_wrap)\n        //  - explicit line break in the label text (\\n)\n        let words;\n        if (typeof text_wrap === 'number') {\n            words = str.split(' '); // split words on spaces\n        }\n        else {\n            words = [str]; // no max line word wrapping (but new lines will still be in effect)\n        }\n\n        let multiline = new MultiLine(ctx, max_lines, text_wrap);\n        let line = multiline.createLine(line_height);\n\n        // First iterate on space-break groups (will be one if max line length off), then iterate on line-break groups\n        for (let i = 0; i < words.length; i++) {\n            let breaks = words[i].split('\\n'); // split on line breaks\n            let new_line = (i === 0) ? true : false;\n\n            for (let n=0; n < breaks.length; n++) {\n                if (!line){\n                    break;\n                }\n\n                let word = breaks[n];\n\n                // force punctuation (neutral chars) at the end of a RTL line, so they stay attached to original word\n                if (isTextRTL(word) && isTextNeutral(word[word.length - 1])) {\n                    word += RTL_MARKER;\n                }\n\n                let spaced_word = (new_line) ? word : ' ' + word;\n\n                // if adding current word would overflow, add a new line instead\n                // first word (i === 0) always appends\n                if (text_wrap && i > 0 && line.exceedsTextwrap(spaced_word)) {\n                    line = multiline.advance(line, line_height);\n                    if (!line){\n                        break;\n                    }\n                    line.append(word);\n                    new_line = true;\n                }\n                else {\n                    line.append(spaced_word);\n                }\n\n                // if line breaks present, add new line (unless on last line)\n                if (n < breaks.length - 1) {\n                    line = multiline.advance(line, line_height);\n                    new_line = true;\n                }\n            }\n\n            if (i === words.length - 1){\n                multiline.finish(line);\n            }\n        }\n        return multiline;\n    }\n}\n\nMultiLine.ellipsis = '...';\n\n// A Private class used by MultiLine to contain the logic for a single line\n// including character count, width, height and text\nclass Line {\n    constructor (height = 0, text_wrap = 0){\n        this.chars = 0;\n        this.text = '';\n\n        this.height = Math.ceil(height);\n        this.text_wrap = text_wrap;\n    }\n\n    append (text){\n        this.chars += text.length;\n        this.text += text;\n    }\n\n    exceedsTextwrap (text){\n        return text.length + this.chars > this.text_wrap;\n    }\n}\n","import log from '../../utils/log';\nimport Utils from '../../utils/utils';\nimport Texture from '../../gl/texture';\nimport FontManager from './font_manager';\nimport Task from '../../utils/task';\nimport StyleParser from '../style_parser';\nimport MultiLine from './text_wrap';\nimport { splitLabelText, isTextRTL, isTextNeutral, isTextCurveBlacklisted } from './text_segments';\nimport debugSettings from '../../utils/debug_settings';\n\nexport default class TextCanvas {\n\n    constructor () {\n        this.createCanvas();                // create initial canvas and context\n        this.vertical_text_buffer = 8;      // vertical pixel padding around text\n        this.horizontal_text_buffer = 4;    // text styling such as italic emphasis is not measured by the Canvas API, so padding is necessary\n        this.background_size = 4;           // padding around label for optional background box (TODO: make configurable?)\n    }\n\n    createCanvas () {\n        this.canvas = document.createElement('canvas');\n        this.canvas.style.backgroundColor = 'transparent'; // render text on transparent background\n        this.context = this.canvas.getContext('2d');\n    }\n\n    resize (width, height) {\n        this.canvas.width = width;\n        this.canvas.height = height;\n        this.context.clearRect(0, 0, width, height);\n    }\n\n    // Set font style params for canvas drawing\n    setFont ({ font_css, fill, stroke, stroke_width, px_size, supersample }) {\n        this.px_size = px_size;\n        let ctx = this.context;\n        let dpr = Utils.device_pixel_ratio * supersample;\n\n        if (stroke && stroke_width > 0) {\n            ctx.strokeStyle = stroke;\n            ctx.lineWidth = stroke_width * dpr;\n        }\n        ctx.fillStyle = fill;\n\n        ctx.font = font_css;\n        ctx.miterLimit = 2;\n    }\n\n    async textSizes (tile_id, texts) {\n        await FontManager.loadFonts();\n        return Task.add({\n            type: 'textSizes',\n            run: this.processTextSizesTask.bind(this),\n            texts,\n            tile_id,\n            cursor: {\n                styles: Object.keys(texts),\n                texts: null,\n                style_idx: null,\n                text_idx: null\n            }\n        });\n    }\n\n    processTextSizesTask (task) {\n        let { cursor, texts  } = task;\n        cursor.style_idx = cursor.style_idx || 0;\n\n        while (cursor.style_idx < cursor.styles.length) {\n            let style = cursor.styles[cursor.style_idx];\n            if (cursor.text_idx == null) {\n                cursor.text_idx = 0;\n                cursor.texts = Object.keys(texts[style]);\n            }\n\n            let text_infos = texts[style];\n            let first = true;\n\n            while (cursor.text_idx < cursor.texts.length) {\n                let text = cursor.texts[cursor.text_idx];\n                let text_info = text_infos[text];\n                let text_settings = text_info.text_settings;\n\n                if (first) {\n                    this.setFont(text_settings);\n                    first = false;\n                }\n\n                // add size of full text string\n                text_info.size = this.textSize(style, text, text_settings).size;\n\n                // if text may curve, calculate per-segment as well\n                if (text_settings.can_articulate) {\n                    let rtl = false;\n                    let bidi = false;\n                    if (isTextRTL(text)) {\n                        if (!isTextNeutral(text)) {\n                            bidi = true;\n                        }\n                        else {\n                            rtl = true;\n                        }\n                    }\n\n                    text_info.isRTL = rtl;\n                    text_info.no_curving = bidi || isTextCurveBlacklisted(text); // used in LabelLine to prevent curved labels\n                    text_info.vertical_buffer = this.vertical_text_buffer;\n                    text_info.segment_sizes = [];\n\n                    if (!text_info.no_curving) {\n                        let segments = splitLabelText(text, rtl, TextCanvas.cache);\n                        text_info.segments = segments;\n                        for (let i = 0; i < segments.length; i++){\n                            text_info.segment_sizes.push(this.textSize(style, segments[i], text_settings).size);\n                        }\n                    }\n                }\n\n                cursor.text_idx++;\n\n                if (!Task.shouldContinue(task)) {\n                    return false;\n                }\n            }\n            cursor.text_idx = null;\n            cursor.style_idx++;\n        }\n\n        Task.finish(task, texts);\n        return true;\n    }\n\n    // Computes width and height of text based on current font style\n    // Includes word wrapping, returns size info for whole text block and individual lines\n    textSize(style, text, { transform, text_wrap, max_lines, stroke_width = 0, background_color, background_stroke_width = 0, background_width, underline_width = 0, supersample }) {\n        // Check cache first\n        TextCanvas.cache.text[style] = TextCanvas.cache.text[style] || {};\n        if (TextCanvas.cache.text[style][text]) {\n            TextCanvas.cache.stats.text_hits++;\n            return TextCanvas.cache.text[style][text];\n        }\n        TextCanvas.cache.stats.text_misses++;\n        TextCanvas.cache.text_count++;\n\n        // Calc and store in cache\n        const dpr = Utils.device_pixel_ratio * supersample;\n        const str = this.applyTextTransform(text, transform);\n        const ctx = this.context;\n        const vertical_buffer = this.vertical_text_buffer * dpr;\n        const horizontal_buffer = (stroke_width + this.horizontal_text_buffer) * dpr;\n\n        background_width = background_width != null ? background_width : this.background_size; // apply default background width\n        const background_size = (background_color || background_stroke_width) ? (background_width + background_stroke_width) * dpr : 0;\n\n        const leading = (2 + underline_width + (underline_width ? (stroke_width + 1) : 0)) * dpr; // adjust for underline and text stroke\n        const line_height = this.px_size + leading; // px_size already in device pixels\n\n        // Parse string into series of lines if it exceeds the text wrapping value or contains line breaks\n        // const multiline = MultiLine.parse(str, text_wrap, max_lines, line_height, ctx);\n        let { width, height, lines } = MultiLine.parse(str, text_wrap, max_lines, line_height, ctx);\n        width += background_size * 2;\n        height += background_size * 2;\n\n        let collision_size = [\n            width / dpr,\n            height / dpr\n        ];\n\n        let texture_size = [\n            width + 2 * horizontal_buffer,\n            height + 2 * vertical_buffer\n        ];\n\n        let logical_size = [\n            texture_size[0] / dpr,\n            texture_size[1] / dpr,\n        ];\n\n        // Returns lines (w/per-line info for drawing) and text's overall bounding box + canvas size\n        TextCanvas.cache.text[style][text] = {\n            lines,\n            size: {\n                collision_size, texture_size, logical_size,\n                horizontal_buffer, vertical_buffer, dpr, line_height, background_size\n            }\n        };\n        return TextCanvas.cache.text[style][text];\n    }\n\n    // Draw multiple lines of text\n    drawTextMultiLine (lines, [x, y], size, text_settings, label_type) {\n        const { dpr, collision_size, texture_size, line_height, horizontal_buffer, vertical_buffer } = size;\n\n        // draw optional background box\n        if (text_settings.background_color || text_settings.background_stroke_color) {\n            const background_stroke_color = text_settings.background_stroke_color;\n            const background_stroke_width = (text_settings.background_stroke_width || 0) * dpr;\n\n            this.context.save();\n\n            if (text_settings.background_color) {\n                this.context.fillStyle = text_settings.background_color;\n                this.context.fillRect(\n                    // shift to \"foreground\" stroke texture for curved labels (separate stroke and fill textures)\n                    x + horizontal_buffer + (label_type === 'curved' ? texture_size[0] : 0) + background_stroke_width,\n                    y + vertical_buffer + background_stroke_width,\n                    dpr * collision_size[0] - background_stroke_width * 2,\n                    dpr * collision_size[1] - background_stroke_width * 2\n                );\n            }\n\n            // optional stroke around background box\n            if (background_stroke_color && background_stroke_width) {\n                this.context.strokeStyle = background_stroke_color;\n                this.context.lineWidth = background_stroke_width;\n                this.context.strokeRect(\n                    // shift to \"foreground\" stroke texture for curved labels (separate stroke and fill textures)\n                    x + horizontal_buffer + (label_type === 'curved' ? texture_size[0] : 0) + background_stroke_width * 0.5,\n                    y + vertical_buffer + background_stroke_width * 0.5,\n                    dpr * collision_size[0] - background_stroke_width,\n                    dpr * collision_size[1] - background_stroke_width\n                );\n            }\n\n            this.context.restore();\n        }\n\n        // draw text\n        const underline_width = text_settings.underline_width || 0;\n        const stroke_width = text_settings.stroke_width || 0;\n        const voffset = underline_width ? // offset text position to account for underline and text stroke\n            ((underline_width + stroke_width + 1) * 0.5 * dpr) : 0;\n        let ty = y - voffset;\n        for (let line_num=0; line_num < lines.length; line_num++) {\n            let line = lines[line_num];\n            this.drawTextLine(line, [x, ty], size, text_settings, label_type);\n            ty += line_height;\n        }\n\n        this.drawTextDebug([x, y], size, label_type);\n    }\n\n    // Draw single line of text at specified location, adjusting for buffer and baseline\n    drawTextLine(line, [x, y], size, text_settings, type) {\n        const { stroke, stroke_width, transform, align = 'center' } = text_settings;\n        const { horizontal_buffer, vertical_buffer, texture_size, background_size, line_height, dpr } = size;\n        const underline_width = (text_settings.underline_width || 0) * dpr;\n        const text = this.applyTextTransform(line.text, transform);\n\n        // Text alignment\n        let tx;\n        if (align === 'left') {\n            tx = x + horizontal_buffer + background_size;\n        }\n        else if (align === 'center') {\n            tx = x + texture_size[0] / 2 - line.width / 2;\n        }\n        else if (align === 'right') {\n            tx = x + texture_size[0] - line.width - horizontal_buffer - background_size;\n        }\n\n        // In the absence of better Canvas TextMetrics (not supported by browsers yet),\n        // 0.75 buffer produces a better approximate vertical centering of text\n        const ty = y + vertical_buffer * 0.75 + line_height + background_size - underline_width * 0.5;\n\n        // Draw stroke and fill separately for curved text. Offset stroke in texture atlas by shift.\n        const shift = (stroke && stroke_width > 0 && type === 'curved') ? texture_size[0] : 0;\n\n        // optional text underline\n        if (underline_width) {\n            this.context.save();\n            this.context.strokeStyle = this.context.fillStyle;\n            this.context.lineWidth = underline_width;\n\n            // adjust the underline to account for the text stroke\n            const uy = ty + ((stroke_width * 0.5 + 2) * dpr) + this.context.lineWidth * 0.5;\n\n            this.context.beginPath();\n            this.context.moveTo(tx + shift, uy);\n            this.context.lineTo(tx + shift + line.width, uy);\n            this.context.stroke();\n            this.context.restore();\n        }\n\n        if (stroke && stroke_width > 0) {\n            this.context.strokeText(text, tx + shift, ty);\n        }\n        this.context.fillText(text, tx, ty);\n    }\n\n    // Draw optional text debug boxes\n    drawTextDebug ([x, y], size, label_type) {\n        const { dpr, horizontal_buffer, vertical_buffer, texture_size, collision_size } = size;\n        const line_width = 2;\n\n        if (debugSettings.draw_label_collision_boxes) {\n            this.context.save();\n            this.context.strokeStyle = 'blue';\n            this.context.lineWidth = line_width;\n            this.context.strokeRect(x + horizontal_buffer, y + vertical_buffer, dpr * collision_size[0], dpr * collision_size[1]);\n            if (label_type === 'curved'){\n                this.context.strokeRect(x + texture_size[0] + horizontal_buffer, y + vertical_buffer, dpr * collision_size[0], dpr * collision_size[1]);\n            }\n            this.context.restore();\n        }\n\n        if (debugSettings.draw_label_texture_boxes) {\n            this.context.save();\n            this.context.strokeStyle = 'green';\n            this.context.lineWidth = line_width;\n            // stroke is applied internally, so the outer border is the edge of the texture\n            this.context.strokeRect(x + line_width, y + line_width, texture_size[0] - 2 * line_width, texture_size[1] - 2 * line_width);\n            if (label_type === 'curved') {\n                this.context.strokeRect(x + line_width + texture_size[0], y + line_width, texture_size[0] - 2 * line_width, texture_size[1] - 2 * line_width);\n            }\n            this.context.restore();\n        }\n    }\n\n    rasterize (texts, textures, tile_id, texture_prefix, gl) {\n        return Task.add({\n            type: 'rasterizeLabels',\n            run: this.processRasterizeTask.bind(this),\n            cancel: this.cancelRasterizeTask.bind(this),\n            pause_factor: 2,         // pause 2 frames when task run past allowed time\n            user_moving_view: false, // don't run task when user is moving view\n            texts,\n            textures,\n            texture_prefix,\n            gl,\n            tile_id,\n            cursor: {\n                styles: Object.keys(texts),\n                texts: null,\n                style_idx: 0,\n                text_idx: null,\n                texture_idx: 0,\n                texture_resize: true,\n                texture_names: []\n            }\n        });\n    }\n\n    processRasterizeTask (task) {\n        let { cursor, texts, textures } = task;\n        let texture;\n\n        // Rasterize one texture at a time, so we only have to keep one canvas in memory (they can be large)\n        while (cursor.texture_idx < task.textures.length) {\n            texture = textures[cursor.texture_idx];\n\n            if (cursor.texture_resize) {\n                cursor.texture_resize = false;\n                this.resize(...texture.texture_size);\n            }\n\n            while (cursor.style_idx < cursor.styles.length) {\n                let style = cursor.styles[cursor.style_idx];\n                if (cursor.text_idx == null) {\n                    cursor.text_idx = 0;\n                    cursor.texts = Object.keys(texts[style]);\n                }\n\n                let text_infos = texts[style];\n                let first = true;\n\n                while (cursor.text_idx < cursor.texts.length) {\n                    let text = cursor.texts[cursor.text_idx];\n                    let text_info = text_infos[text];\n                    let text_settings = text_info.text_settings;\n\n                    // set font on first occurence of new font style\n                    if (first) {\n                        this.setFont(text_settings);\n                        first = false;\n                    }\n\n                    if (text_settings.can_articulate) {\n                        text_info.texcoords = text_info.texcoords || {};\n                        for (let t = 0; t < text_info.type.length; t++) {\n                            let type = text_info.type[t];\n                            if (type === 'straight') {\n                                // Only render for current texture\n                                if (text_info.textures[t] !== cursor.texture_idx) {\n                                    continue;\n                                }\n\n                                let word = (text_info.isRTL) ? text.split().reverse().join() : text;\n                                let cache = texture.texcoord_cache[style][word];\n\n                                let texcoord;\n                                if (cache.texcoord) {\n                                    texcoord = cache.texcoord;\n                                }\n                                else {\n                                    let texture_position = cache.texture_position;\n                                    let { size, lines } = this.textSize(style, word, text_settings);\n\n                                    this.drawTextMultiLine(lines, texture_position, size, text_settings, type);\n\n                                    texcoord = Texture.getTexcoordsForSprite(\n                                        texture_position,\n                                        size.texture_size,\n                                        texture.texture_size\n                                    );\n\n                                    cache.texcoord = texcoord;\n                                }\n\n                                text_info.texcoords[type] = {\n                                    texcoord,\n                                    texture_id: cache.texture_id\n                                };\n                            }\n                            else if (type === 'curved') {\n                                let words = text_info.segments;\n                                text_info.texcoords.curved = text_info.texcoords.curved || [];\n                                text_info.texcoords_stroke = text_info.texcoords_stroke || [];\n\n                                for (let w = 0; w < words.length; w++){\n                                    // Only render for current texture\n                                    if (text_info.textures[t][w] !== cursor.texture_idx) {\n                                        continue;\n                                    }\n\n                                    let word = words[w];\n                                    let cache = texture.texcoord_cache[style][word];\n\n                                    let texcoord;\n                                    let texcoord_stroke;\n                                    if (cache.texcoord){\n                                        texcoord = cache.texcoord;\n                                        texcoord_stroke = cache.texcoord_stroke;\n                                        text_info.texcoords_stroke.push(texcoord_stroke);\n                                    }\n                                    else {\n                                        let texture_position = cache.texture_position;\n                                        let { size, lines } = this.textSize(style, word, text_settings);\n\n                                        this.drawTextMultiLine(lines, texture_position, size, text_settings, type);\n\n                                        texcoord = Texture.getTexcoordsForSprite(\n                                            texture_position,\n                                            size.texture_size,\n                                            texture.texture_size\n                                        );\n\n                                        let texture_position_stroke = [\n                                            texture_position[0] + size.texture_size[0],\n                                            texture_position[1]\n                                        ];\n\n                                        texcoord_stroke = Texture.getTexcoordsForSprite(\n                                            texture_position_stroke,\n                                            size.texture_size,\n                                            texture.texture_size\n                                        );\n\n                                        cache.texcoord = texcoord;\n                                        cache.texcoord_stroke = texcoord_stroke;\n\n                                        // NB: texture_id is the same between stroke and fill, so it's not duplicated here\n                                        text_info.texcoords_stroke.push(texcoord_stroke);\n                                    }\n\n                                    text_info.texcoords.curved.push({\n                                        texcoord,\n                                        texture_id: cache.texture_id\n                                    });\n                                }\n                            }\n                        }\n                    }\n                    else {\n                        let lines = this.textSize(style, text, text_settings).lines;\n                        const aligned_text_settings = { ...text_settings };\n\n                        for (let align in text_info.align) {\n                            // Only render for current texture\n                            if (text_info.align[align].texture_id !== cursor.texture_idx) {\n                                continue;\n                            }\n\n                            aligned_text_settings.align = align;\n                            this.drawTextMultiLine(lines, text_info.align[align].texture_position, text_info.size, aligned_text_settings);\n\n                            text_info.align[align].texcoords = Texture.getTexcoordsForSprite(\n                                text_info.align[align].texture_position,\n                                text_info.size.texture_size,\n                                texture.texture_size\n                            );\n                        }\n                    }\n\n                    cursor.text_idx++;\n\n                    if (!Task.shouldContinue(task)) {\n                        return false;\n                    }\n                }\n                cursor.text_idx = null;\n                cursor.style_idx++;\n            }\n\n            // Create GL texture (canvas element will be reused for next texture)\n            let tname = task.texture_prefix + cursor.texture_idx;\n            Texture.create(task.gl, tname, {\n                element: this.canvas,\n                filtering: 'linear',\n                UNPACK_PREMULTIPLY_ALPHA_WEBGL: true\n            });\n            Texture.retain(tname);\n            cursor.texture_names.push(tname);\n\n            cursor.texture_idx++;\n            cursor.texture_resize = true;\n            cursor.style_idx = 0;\n        }\n\n        Task.finish(task, cursor.texture_names);\n        return true;\n    }\n\n    // Free any textures that have been allocated part-way through label rasterization for a tile\n    cancelRasterizeTask (task) {\n        log('trace', `RasterizeTask: release textures [${task.cursor.texture_names.join(', ')}]`);\n        task.cursor.texture_names.forEach(t => Texture.release(t));\n    }\n\n    // Place text labels within an atlas of the given max size\n    setTextureTextPositions (texts, max_texture_size) {\n        let texture = {\n                cx: 0,\n                cy: 0,\n                width: 0,\n                height: 0,\n                column_width: 0,\n                texture_id: 0,\n                texcoord_cache: {}\n            },\n            textures = [];\n\n        for (let style in texts) {\n            let text_infos = texts[style];\n\n            for (let text in text_infos) {\n                let text_info = text_infos[text];\n                let texture_position;\n\n                if (text_info.text_settings.can_articulate) {\n                    text_info.textures = [];\n                    texture.texcoord_cache[style] = texture.texcoord_cache[style] || {};\n\n                    for (let t = 0; t < text_info.type.length; t++) {\n                        let type = text_info.type[t];\n\n                        if (type === 'straight') {\n                            let word = (text_info.isRTL) ? text.split().reverse().join() : text;\n\n                            if (!texture.texcoord_cache[style][word]) {\n                                let size = text_info.size.texture_size;\n                                texture_position = this.placeText(size[0], size[1], style, texture, textures, max_texture_size);\n                                texture.texcoord_cache[style][word] = {\n                                    texture_id: texture.texture_id,\n                                    texture_position\n                                };\n                            }\n\n                            text_info.textures[t] = texture.texture_id;\n                        }\n                        else if (type === 'curved') {\n                            text_info.textures[t] = [];\n\n                            for (let w = 0; w < text_info.segment_sizes.length; w++) {\n                                let word = text_info.segments[w];\n\n                                if (!texture.texcoord_cache[style][word]) {\n                                    let size = text_info.segment_sizes[w].texture_size;\n                                    let width = 2 * size[0]; // doubled to account for side-by-side rendering of fill and stroke\n                                    texture_position = this.placeText(width, size[1], style, texture, textures, max_texture_size);\n                                    texture.texcoord_cache[style][word] = {\n                                        texture_id: texture.texture_id,\n                                        texture_position\n                                    };\n                                }\n\n                                text_info.textures[t].push(texture.texture_id);\n                            }\n\n                        }\n                    }\n                }\n                else {\n                    // rendered size is same for all alignments\n                    let size = text_info.size.texture_size;\n\n                    // but each alignment needs to be rendered separately\n                    for (let align in text_info.align) {\n                        texture_position = this.placeText (size[0], size[1], style, texture, textures, max_texture_size);\n                        text_info.align[align].texture_id = texture.texture_id;\n                        text_info.align[align].texture_position = texture_position;\n                    }\n                }\n            }\n        }\n\n        // save final texture\n        if (texture.column_width > 0 && texture.height > 0) {\n            textures[texture.texture_id] = {\n                texture_size: [texture.width, texture.height],\n                texcoord_cache: texture.texcoord_cache\n            };\n        }\n\n        // return computed texture sizes and UV cache\n        return textures;\n    }\n\n    // Place text sprite in texture atlas, enlarging current texture, or starting new one if max texture size reached\n    placeText (text_width, text_height, style, texture, textures, max_texture_size) {\n        let texture_position;\n\n        // TODO: what if first label is wider than entire max texture?\n\n        if (texture.cy + text_height > max_texture_size) {\n            // start new column\n            texture.cx += texture.column_width;\n            texture.cy = 0;\n            texture.column_width = text_width;\n        }\n        else {\n            // expand current column\n            texture.column_width = Math.max(texture.column_width, text_width);\n        }\n\n        if (texture.cx + texture.column_width <= max_texture_size) {\n            // add label to current texture\n            texture_position = [texture.cx, texture.cy];\n\n            texture.cy += text_height;\n\n            // expand texture if needed\n            texture.height = Math.max(texture.height, texture.cy);\n            texture.width = Math.max(texture.width, texture.cx + texture.column_width);\n        }\n        else {\n            // start new texture\n            // save size and cache of last texture\n            textures[texture.texture_id] = {\n                texture_size: [texture.width, texture.height],\n                texcoord_cache: texture.texcoord_cache\n            };\n            texture.texcoord_cache = {}; // reset cache\n            texture.texcoord_cache[style] = {};\n\n            texture.texture_id++;\n            texture.cx = 0;\n            texture.cy = text_height;\n            texture.column_width = text_width;\n            texture.width = text_width;\n            texture.height = text_height;\n            texture_position = [0, 0]; // TODO: allocate zero array once\n        }\n\n        return texture_position;\n    }\n\n    // Called before rasterization\n    applyTextTransform (text, transform) {\n        if (transform === 'capitalize') {\n            return text.replace(/\\w\\S*/g, function (txt) {\n                return txt.charAt(0).toUpperCase() + txt.substr(1);\n            });\n        }\n        else if (transform === 'uppercase') {\n            return text.toUpperCase();\n        }\n        else if (transform === 'lowercase') {\n            return text.toLowerCase();\n        }\n        return text;\n    }\n\n    // Convert font CSS-style size ('12px', '14pt', '1.5em', etc.) to pixel size (adjusted for device pixel ratio)\n    // Defaults units to pixels if not specified\n    static fontPixelSize (size) {\n        if (size == null) {\n            return;\n        }\n        size = (typeof size === 'string') ? size : String(size); // need a string for regex\n\n        let [, px_size, units] = size.match(TextCanvas.font_size_re) || [];\n        units = units || 'px';\n\n        if (units === 'em') {\n            px_size *= 16;\n        } else if (units === 'pt') {\n            px_size /= 0.75;\n        } else if (units === '%') {\n            px_size /= 6.25;\n        }\n\n        px_size = StyleParser.parsePositiveNumber(px_size);\n        px_size *= Utils.device_pixel_ratio;\n        return px_size;\n    }\n\n    static pruneTextCache () {\n        if (TextCanvas.cache.text_count > TextCanvas.cache.text_count_max) {\n            TextCanvas.cache.text = {};\n            TextCanvas.cache.text_count = 0;\n            log('debug', 'TextCanvas: pruning text cache');\n        }\n\n        if (Object.keys(TextCanvas.cache.segment).length > TextCanvas.cache.segment_count_max) {\n            TextCanvas.cache.segment = {};\n            log('debug', 'TextCanvas: pruning segment cache');\n        }\n    }\n\n}\n\n// Extract font size and units\nTextCanvas.font_size_re = /((?:[0-9]*\\.)?[0-9]+)\\s*(px|pt|em|%)?/;\n\n// Cache sizes of rendered text\nTextCanvas.cache = {\n    text: {},                   // size and line parsing, by text style, then text string\n    text_count: 0,              // current size of cache (measured as # of entries)\n    text_count_max: 2000,       // prune cache when it exceeds this size\n    segment: {},                // segmentation of text (by run of characters or grapheme clusters), by text string\n    segment_count_max: 2000,    // prune cache when it exceeds this size\n    stats: { text_hits: 0, text_misses: 0, segment_hits: 0, segment_misses: 0 }\n};\n\n","// Text label rendering methods, can be mixed into a rendering style\n\nimport StyleParser from '../style_parser';\nimport Geo from '../../utils/geo';\nimport log from '../../utils/log';\nimport Thread from '../../utils/thread';\nimport WorkerBroker from '../../utils/worker_broker';\nimport Collision from '../../labels/collision';\nimport TextSettings from '../text/text_settings';\nimport TextCanvas from './text_canvas';\n\n// namespaces label textures (ensures new texture name when a tile is built multiple times)\nlet text_texture_id = 0;\n\nexport const TextLabels = {\n\n    resetText () {\n        if (Thread.is_main) {\n            this.canvas = new TextCanvas();\n        }\n        else if (Thread.is_worker) {\n            this.texts = {}; // unique texts, grouped by tile, by style\n        }\n    },\n\n    freeText (tile) {\n        delete this.texts[tile.id];\n    },\n\n    parseTextFeature (feature, draw, context, tile) {\n        // Compute label text\n        let text = this.parseTextSource(feature, draw, context);\n\n        if (text == null || text === '') {\n            return; // no text for this feature\n        }\n\n        // Compute text style and layout settings for this feature label\n        let text_settings = TextSettings.compute(draw, context);\n        let text_settings_key = TextSettings.key(text_settings);\n\n        // first label in tile, or with this style?\n        this.texts[tile.id] = this.texts[tile.id] || {};\n        let sizes = this.texts[tile.id][text_settings_key] = this.texts[tile.id][text_settings_key] || {};\n\n        if (text instanceof Object){\n            let results = [];\n\n            // add both left/right text elements to repeat group to improve repeat culling\n            // avoids one component of a boundary label (e.g. Colorado) being culled too aggressively when it also\n            // appears in nearby boundary labels (e.g. Colorado/Utah & Colorado/New Mexico repeat as separate groups)\n            let repeat_group_prefix = text.left + '-' + text.right; // NB: should be all text keys, not just left/right\n\n            for (let key in text){\n                let current_text = text[key];\n                if (!current_text) {\n                    continue;\n                }\n\n                let layout = this.computeTextLayout({}, feature, draw, context, tile, current_text, text_settings, repeat_group_prefix, key);\n                if (!sizes[current_text]) {\n                    // first label with this text/style/tile combination, make a new label entry\n                    sizes[current_text] = {\n                        text_settings,\n                        ref: 0 // # of times this text/style combo appears in tile\n                    };\n                }\n\n                results.push({\n                    draw, text : current_text, text_settings_key, layout\n                });\n            }\n\n            return (results.length > 0 && results); // return null if no boundary labels found\n        }\n        else {\n            // unique text strings, grouped by text drawing style\n            let layout = this.computeTextLayout({}, feature, draw, context, tile, text, text_settings);\n            if (!sizes[text]) {\n                // first label with this text/style/tile combination, make a new label entry\n                sizes[text] = {\n                    text_settings,\n                    ref: 0 // # of times this text/style combo appears in tile\n                };\n            }\n\n            return {\n                draw, text, text_settings_key, layout\n            };\n        }\n    },\n\n    // Compute the label text, default is value of feature.properties.name\n    // - String value indicates a feature property look-up, e.g. `short_name` means use feature.properties.short_name\n    // - Function will use the return value as the label text (for custom labels)\n    // - Array (of strings and/or functions) defines a list of fallbacks, evaluated according to the above rules,\n    //   with the first non-null value used as the label text\n    //   e.g. `[name:es, name:en, name]` prefers Spanish names, followed by English, and last the default local name\n    parseTextSource (feature, draw, context) {\n        let text;\n        let source = draw.text_source || 'name';\n\n        if (source != null && !Array.isArray(source) && typeof source === 'object') {\n            // left/right boundary labels\n            text = {};\n            for (let key in source) {\n                text[key] = this.parseTextSourceValue(source[key], feature, context);\n            }\n        }\n        else {\n            // single label\n            text = this.parseTextSourceValue(source, feature, context);\n        }\n\n        return text;\n    },\n\n    parseTextSourceValue (source, feature, context) {\n        let text;\n        if (Array.isArray(source)) {\n            for (let s=0; s < source.length; s++) {\n                if (typeof source[s] === 'string') {\n                    text = feature.properties[source[s]];\n                } else if (typeof source[s] === 'function') {\n                    text = source[s](context);\n                }\n\n                if (text) {\n                    return text; // stop if we found a text property\n                }\n            }\n        }\n        else if (typeof source === 'string') {\n            text = feature.properties[source];\n        }\n        else if (source instanceof Function) {\n            text = source(context);\n        }\n\n        return text;\n    },\n\n    async prepareTextLabels (tile, queue) {\n        if (Object.keys(this.texts[tile.id]||{}).length === 0) {\n            return [];\n        }\n\n        // first call to main thread, ask for text pixel sizes\n        try {\n            const texts = await WorkerBroker.postMessage(this.main_thread_target+'.calcTextSizes', tile.id, this.texts[tile.id]);\n            if (tile.canceled) {\n                log('trace', `Style ${this.name}: stop tile build because tile was canceled: ${tile.key}, post-calcTextSizes()`);\n                return [];\n            }\n\n            this.texts[tile.id] = texts || [];\n            if (!texts) {\n                Collision.abortTile(tile.id);\n                return [];\n            }\n\n            return this.buildTextLabels(tile, queue);\n        }\n        catch (e) { // error thrown if style has been removed from main thread\n            Collision.abortTile(tile.id);\n            return [];\n        }\n    },\n\n    async collideAndRenderTextLabels (tile, collision_group, queue) {\n        let labels = await this.prepareTextLabels(tile, queue);\n        if (labels.length === 0) {\n            Collision.collide([], collision_group, tile.id);\n            return {};\n        }\n\n        labels = await Collision.collide(labels, collision_group, tile.id);\n        if (tile.canceled) {\n            log('trace', `stop tile build because tile was canceled: ${tile.key}, post-collide()`);\n            return {};\n        }\n\n        let texts = this.texts[tile.id];\n        if (texts == null || labels.length === 0) {\n            return {};\n        }\n\n        this.cullTextStyles(texts, labels);\n\n        // set alignments\n        labels.forEach(q => {\n            let text_settings_key = q.text_settings_key;\n            let text_info = texts[text_settings_key] && texts[text_settings_key][q.text];\n            if (!text_info.text_settings.can_articulate){\n                text_info.align = text_info.align || {};\n                text_info.align[q.label.align] = {};\n            }\n            else {\n                // consider making it a set\n                if (!text_info.type) {\n                    text_info.type = [];\n                }\n\n                if (text_info.type.indexOf(q.label.type) === -1){\n                    text_info.type.push(q.label.type);\n                }\n            }\n        });\n\n        // second call to main thread, for rasterizing the set of texts\n        try {\n            const rasterized = await WorkerBroker.postMessage(this.main_thread_target+'.rasterizeTexts', tile.id, tile.key, texts);\n            if (tile.canceled) {\n                log('trace', `stop tile build because tile was canceled: ${tile.key}, post-rasterizeTexts()`);\n                return {};\n            }\n            return { labels, ...rasterized };\n        }\n        catch (e) { // error thrown if style has been removed from main thread\n            return {};\n        }\n    },\n\n    // Remove unused text/style combinations to avoid unnecessary rasterization\n    cullTextStyles(texts, labels) {\n        // Count how many times each text/style combination is used\n        for (let i=0; i < labels.length; i++) {\n            let label = labels[i];\n            texts[label.text_settings_key][label.text].ref++;\n        }\n\n        // Remove text/style combinations that have no visible labels\n        for (let style in texts) {\n            for (let text in texts[style]) {\n                // no labels for this text\n                if (texts[style][text].ref < 1) {\n                    delete texts[style][text];\n                }\n            }\n        }\n\n        for (let style in texts) {\n            // no labels for this style\n            if (Object.keys(texts[style]).length === 0) {\n                delete texts[style];\n            }\n        }\n    },\n\n    // Called on main thread from worker, to compute the size of each text string,\n    // were it to be rendered. This info is then used to perform initial label culling, *before*\n    // labels are actually rendered.\n    calcTextSizes (tile_id, texts) {\n        return this.canvas.textSizes(tile_id, texts);\n    },\n\n    // Called on main thread from worker, to create atlas of labels for a tile\n    async rasterizeTexts (tile_id, tile_key, texts) {\n        let canvas = new TextCanvas(); // one per style per tile (style may be rendering multiple tiles at once)\n        let max_texture_size = Math.min(this.max_texture_size, 2048); // cap each label texture at 2048x2048\n\n        let textures = canvas.setTextureTextPositions(texts, max_texture_size);\n        let texture_prefix = ['labels', this.name, tile_key, tile_id, text_texture_id, ''].join('-');\n        text_texture_id++;\n\n        textures = await canvas.rasterize(texts, textures, tile_id, texture_prefix, this.gl);\n        if (!textures) {\n            return {};\n        }\n        return { texts, textures };\n    },\n\n    preprocessText (draw) {\n        // Font settings are required\n        if (!draw || !draw.font || typeof draw.font !== 'object') {\n            return;\n        }\n\n        // Font weight\n        draw.font.weight = StyleParser.createPropertyCache(draw.font.weight);\n\n        // Colors\n        draw.font.fill = StyleParser.createPropertyCache(draw.font.fill || TextSettings.defaults.fill);\n        draw.font.alpha = StyleParser.createPropertyCache(draw.font.alpha);\n\n        if (draw.font.stroke) {\n            draw.font.stroke.color = StyleParser.createPropertyCache(draw.font.stroke.color);\n            draw.font.stroke.alpha = StyleParser.createPropertyCache(draw.font.stroke.alpha);\n        }\n\n        if (draw.font.background) {\n            draw.font.background.color = StyleParser.createPropertyCache(draw.font.background.color);\n            draw.font.background.alpha = StyleParser.createPropertyCache(draw.font.background.alpha);\n            draw.font.background.width = StyleParser.createPropertyCache(draw.font.background.width, StyleParser.parsePositiveNumber);\n            if (draw.font.background.stroke) {\n                draw.font.background.stroke.color = StyleParser.createPropertyCache(draw.font.background.stroke.color);\n                draw.font.background.stroke.alpha = StyleParser.createPropertyCache(draw.font.background.stroke.alpha);\n            }\n        }\n\n        // Convert font and text stroke sizes\n        draw.font.px_size = StyleParser.createPropertyCache(draw.font.size || TextSettings.defaults.size, TextCanvas.fontPixelSize, TextCanvas.fontPixelSize);\n\n        if (draw.font.stroke && draw.font.stroke.width != null) {\n            draw.font.stroke.width = StyleParser.createPropertyCache(draw.font.stroke.width, StyleParser.parsePositiveNumber);\n        }\n\n        if (draw.font.background && draw.font.background.stroke && draw.font.background.stroke.width != null) {\n            draw.font.background.stroke.width = StyleParser.createPropertyCache(draw.font.background.stroke.width, StyleParser.parsePositiveNumber);\n        }\n\n        // Offset (2d array)\n        draw.offset = StyleParser.createPropertyCache(draw.offset,\n            v => Array.isArray(v) && v.map(StyleParser.parseNumber)\n        );\n\n        // Buffer (1d value or or 2d array) - must be >= 0\n        draw.buffer = StyleParser.createPropertyCache(draw.buffer,\n            v => (Array.isArray(v) ? v : [v, v]).map(StyleParser.parsePositiveNumber)\n        );\n\n        // Repeat rules - for text labels, defaults to tile size\n        draw.repeat_distance = StyleParser.createPropertyCache(\n            draw.repeat_distance,\n            StyleParser.parsePositiveNumber\n        );\n\n        return draw;\n    },\n\n    // Additional text-specific layout settings\n    computeTextLayout (target, feature, draw, context, tile, text, text_settings, repeat_group_prefix, orientation) {\n        let layout = target || {};\n\n        // common settings w/points\n        layout = this.computeLayout(layout, feature, draw, context, tile);\n\n        // if draw group didn't specify repeat distance, override with text label-specific logic\n        if (draw.repeat_distance == null) {\n            // defaults: no limit on labels for point geometries,  tile size (256px) limit for other geometries\n            layout.repeat_distance = (context.geometry === 'point' ? 0 : Geo.tile_size);\n\n            if (layout.repeat_distance) {\n                layout.repeat_distance *= layout.units_per_pixel;\n                layout.repeat_scale = 1; // initial repeat pass in tile with full scale\n\n                if (typeof draw.repeat_group === 'function') {\n                    layout.repeat_group = draw.repeat_group(context); // dynamic repeat group\n                }\n                else {\n                    layout.repeat_group = draw.repeat_group; // pre-computed repeat group\n                }\n            }\n        }\n\n        // repeat rules include the text\n        if (layout.repeat_distance) {\n            if (repeat_group_prefix) {\n                layout.repeat_group += '/' + repeat_group_prefix;\n            }\n            layout.repeat_group += '/' + text;\n        }\n\n        // Max number of subdivisions to try\n        layout.subdiv = tile.overzoom2;\n\n        layout.align = draw.align;\n\n        // used to fudge width value as text may overflow bounding box if it has italic, bold, etc style\n        // TODO rename to more generic, not italic-specific (bold)\n        layout.italic = (text_settings.style !== 'normal');\n\n        // used to determine orientation of text if the text_source has a `left` or `right` key\n        if (orientation === 'right') {\n            layout.orientation = 1;\n        }\n        else if (orientation === 'left'){\n            layout.orientation = -1;\n        }\n\n        return layout;\n    }\n\n};\n","module.exports = normalFromMat4\n\n/**\n* Calculates a 3x3 normal matrix (transpose inverse) from the 4x4 matrix\n*\n* @alias mat3.normalFromMat4\n* @param {mat3} out mat3 receiving operation result\n* @param {mat4} a Mat4 to derive the normal matrix from\n*\n* @returns {mat3} out\n*/\nfunction normalFromMat4(out, a) {\n  var a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3]\n  var a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7]\n  var a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11]\n  var a30 = a[12], a31 = a[13], a32 = a[14], a33 = a[15]\n\n  var b00 = a00 * a11 - a01 * a10\n  var b01 = a00 * a12 - a02 * a10\n  var b02 = a00 * a13 - a03 * a10\n  var b03 = a01 * a12 - a02 * a11\n  var b04 = a01 * a13 - a03 * a11\n  var b05 = a02 * a13 - a03 * a12\n  var b06 = a20 * a31 - a21 * a30\n  var b07 = a20 * a32 - a22 * a30\n  var b08 = a20 * a33 - a23 * a30\n  var b09 = a21 * a32 - a22 * a31\n  var b10 = a21 * a33 - a23 * a31\n  var b11 = a22 * a33 - a23 * a32\n\n  // Calculate the determinant\n  var det = b00 * b11\n          - b01 * b10\n          + b02 * b09\n          + b03 * b08\n          - b04 * b07\n          + b05 * b06\n\n  if (!det) return null\n  det = 1.0 / det\n\n  out[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det\n  out[1] = (a12 * b08 - a10 * b11 - a13 * b07) * det\n  out[2] = (a10 * b10 - a11 * b08 + a13 * b06) * det\n\n  out[3] = (a02 * b10 - a01 * b11 - a03 * b09) * det\n  out[4] = (a00 * b11 - a02 * b08 + a03 * b07) * det\n  out[5] = (a01 * b08 - a00 * b10 - a03 * b06) * det\n\n  out[6] = (a31 * b05 - a32 * b04 + a33 * b03) * det\n  out[7] = (a32 * b02 - a30 * b05 - a33 * b01) * det\n  out[8] = (a30 * b04 - a31 * b02 + a33 * b00) * det\n\n  return out\n}\n","module.exports = invert\n\n/**\n * Inverts a mat3\n *\n * @alias mat3.invert\n * @param {mat3} out the receiving matrix\n * @param {mat3} a the source matrix\n * @returns {mat3} out\n */\nfunction invert(out, a) {\n  var a00 = a[0], a01 = a[1], a02 = a[2]\n  var a10 = a[3], a11 = a[4], a12 = a[5]\n  var a20 = a[6], a21 = a[7], a22 = a[8]\n\n  var b01 = a22 * a11 - a12 * a21\n  var b11 = -a22 * a10 + a12 * a20\n  var b21 = a21 * a10 - a11 * a20\n\n  // Calculate the determinant\n  var det = a00 * b01 + a01 * b11 + a02 * b21\n\n  if (!det) return null\n  det = 1.0 / det\n\n  out[0] = b01 * det\n  out[1] = (-a22 * a01 + a02 * a21) * det\n  out[2] = (a12 * a01 - a02 * a11) * det\n  out[3] = b11 * det\n  out[4] = (a22 * a00 - a02 * a20) * det\n  out[5] = (-a12 * a00 + a02 * a10) * det\n  out[6] = b21 * det\n  out[7] = (-a21 * a00 + a01 * a20) * det\n  out[8] = (a11 * a00 - a01 * a10) * det\n\n  return out\n}\n","module.exports = multiply;\n\n/**\n * Multiplies two mat4's\n *\n * @param {mat4} out the receiving matrix\n * @param {mat4} a the first operand\n * @param {mat4} b the second operand\n * @returns {mat4} out\n */\nfunction multiply(out, a, b) {\n    var a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3],\n        a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7],\n        a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11],\n        a30 = a[12], a31 = a[13], a32 = a[14], a33 = a[15];\n\n    // Cache only the current line of the second matrix\n    var b0  = b[0], b1 = b[1], b2 = b[2], b3 = b[3];  \n    out[0] = b0*a00 + b1*a10 + b2*a20 + b3*a30;\n    out[1] = b0*a01 + b1*a11 + b2*a21 + b3*a31;\n    out[2] = b0*a02 + b1*a12 + b2*a22 + b3*a32;\n    out[3] = b0*a03 + b1*a13 + b2*a23 + b3*a33;\n\n    b0 = b[4]; b1 = b[5]; b2 = b[6]; b3 = b[7];\n    out[4] = b0*a00 + b1*a10 + b2*a20 + b3*a30;\n    out[5] = b0*a01 + b1*a11 + b2*a21 + b3*a31;\n    out[6] = b0*a02 + b1*a12 + b2*a22 + b3*a32;\n    out[7] = b0*a03 + b1*a13 + b2*a23 + b3*a33;\n\n    b0 = b[8]; b1 = b[9]; b2 = b[10]; b3 = b[11];\n    out[8] = b0*a00 + b1*a10 + b2*a20 + b3*a30;\n    out[9] = b0*a01 + b1*a11 + b2*a21 + b3*a31;\n    out[10] = b0*a02 + b1*a12 + b2*a22 + b3*a32;\n    out[11] = b0*a03 + b1*a13 + b2*a23 + b3*a33;\n\n    b0 = b[12]; b1 = b[13]; b2 = b[14]; b3 = b[15];\n    out[12] = b0*a00 + b1*a10 + b2*a20 + b3*a30;\n    out[13] = b0*a01 + b1*a11 + b2*a21 + b3*a31;\n    out[14] = b0*a02 + b1*a12 + b2*a22 + b3*a32;\n    out[15] = b0*a03 + b1*a13 + b2*a23 + b3*a33;\n    return out;\n};","module.exports = translate;\n\n/**\n * Translate a mat4 by the given vector\n *\n * @param {mat4} out the receiving matrix\n * @param {mat4} a the matrix to translate\n * @param {vec3} v vector to translate by\n * @returns {mat4} out\n */\nfunction translate(out, a, v) {\n    var x = v[0], y = v[1], z = v[2],\n        a00, a01, a02, a03,\n        a10, a11, a12, a13,\n        a20, a21, a22, a23;\n\n    if (a === out) {\n        out[12] = a[0] * x + a[4] * y + a[8] * z + a[12];\n        out[13] = a[1] * x + a[5] * y + a[9] * z + a[13];\n        out[14] = a[2] * x + a[6] * y + a[10] * z + a[14];\n        out[15] = a[3] * x + a[7] * y + a[11] * z + a[15];\n    } else {\n        a00 = a[0]; a01 = a[1]; a02 = a[2]; a03 = a[3];\n        a10 = a[4]; a11 = a[5]; a12 = a[6]; a13 = a[7];\n        a20 = a[8]; a21 = a[9]; a22 = a[10]; a23 = a[11];\n\n        out[0] = a00; out[1] = a01; out[2] = a02; out[3] = a03;\n        out[4] = a10; out[5] = a11; out[6] = a12; out[7] = a13;\n        out[8] = a20; out[9] = a21; out[10] = a22; out[11] = a23;\n\n        out[12] = a00 * x + a10 * y + a20 * z + a[12];\n        out[13] = a01 * x + a11 * y + a21 * z + a[13];\n        out[14] = a02 * x + a12 * y + a22 * z + a[14];\n        out[15] = a03 * x + a13 * y + a23 * z + a[15];\n    }\n\n    return out;\n};","module.exports = scale;\n\n/**\n * Scales the mat4 by the dimensions in the given vec3\n *\n * @param {mat4} out the receiving matrix\n * @param {mat4} a the matrix to scale\n * @param {vec3} v the vec3 to scale the matrix by\n * @returns {mat4} out\n **/\nfunction scale(out, a, v) {\n    var x = v[0], y = v[1], z = v[2];\n\n    out[0] = a[0] * x;\n    out[1] = a[1] * x;\n    out[2] = a[2] * x;\n    out[3] = a[3] * x;\n    out[4] = a[4] * y;\n    out[5] = a[5] * y;\n    out[6] = a[6] * y;\n    out[7] = a[7] * y;\n    out[8] = a[8] * z;\n    out[9] = a[9] * z;\n    out[10] = a[10] * z;\n    out[11] = a[11] * z;\n    out[12] = a[12];\n    out[13] = a[13];\n    out[14] = a[14];\n    out[15] = a[15];\n    return out;\n};","module.exports = perspective;\n\n/**\n * Generates a perspective projection matrix with the given bounds\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {number} fovy Vertical field of view in radians\n * @param {number} aspect Aspect ratio. typically viewport width/height\n * @param {number} near Near bound of the frustum\n * @param {number} far Far bound of the frustum\n * @returns {mat4} out\n */\nfunction perspective(out, fovy, aspect, near, far) {\n    var f = 1.0 / Math.tan(fovy / 2),\n        nf = 1 / (near - far);\n    out[0] = f / aspect;\n    out[1] = 0;\n    out[2] = 0;\n    out[3] = 0;\n    out[4] = 0;\n    out[5] = f;\n    out[6] = 0;\n    out[7] = 0;\n    out[8] = 0;\n    out[9] = 0;\n    out[10] = (far + near) * nf;\n    out[11] = -1;\n    out[12] = 0;\n    out[13] = 0;\n    out[14] = (2 * far * near) * nf;\n    out[15] = 0;\n    return out;\n};","module.exports = identity;\n\n/**\n * Set a mat4 to the identity matrix\n *\n * @param {mat4} out the receiving matrix\n * @returns {mat4} out\n */\nfunction identity(out) {\n    out[0] = 1;\n    out[1] = 0;\n    out[2] = 0;\n    out[3] = 0;\n    out[4] = 0;\n    out[5] = 1;\n    out[6] = 0;\n    out[7] = 0;\n    out[8] = 0;\n    out[9] = 0;\n    out[10] = 1;\n    out[11] = 0;\n    out[12] = 0;\n    out[13] = 0;\n    out[14] = 0;\n    out[15] = 1;\n    return out;\n};","var identity = require('./identity');\n\nmodule.exports = lookAt;\n\n/**\n * Generates a look-at matrix with the given eye position, focal point, and up axis\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {vec3} eye Position of the viewer\n * @param {vec3} center Point the viewer is looking at\n * @param {vec3} up vec3 pointing up\n * @returns {mat4} out\n */\nfunction lookAt(out, eye, center, up) {\n    var x0, x1, x2, y0, y1, y2, z0, z1, z2, len,\n        eyex = eye[0],\n        eyey = eye[1],\n        eyez = eye[2],\n        upx = up[0],\n        upy = up[1],\n        upz = up[2],\n        centerx = center[0],\n        centery = center[1],\n        centerz = center[2];\n\n    if (Math.abs(eyex - centerx) < 0.000001 &&\n        Math.abs(eyey - centery) < 0.000001 &&\n        Math.abs(eyez - centerz) < 0.000001) {\n        return identity(out);\n    }\n\n    z0 = eyex - centerx;\n    z1 = eyey - centery;\n    z2 = eyez - centerz;\n\n    len = 1 / Math.sqrt(z0 * z0 + z1 * z1 + z2 * z2);\n    z0 *= len;\n    z1 *= len;\n    z2 *= len;\n\n    x0 = upy * z2 - upz * z1;\n    x1 = upz * z0 - upx * z2;\n    x2 = upx * z1 - upy * z0;\n    len = Math.sqrt(x0 * x0 + x1 * x1 + x2 * x2);\n    if (!len) {\n        x0 = 0;\n        x1 = 0;\n        x2 = 0;\n    } else {\n        len = 1 / len;\n        x0 *= len;\n        x1 *= len;\n        x2 *= len;\n    }\n\n    y0 = z1 * x2 - z2 * x1;\n    y1 = z2 * x0 - z0 * x2;\n    y2 = z0 * x1 - z1 * x0;\n\n    len = Math.sqrt(y0 * y0 + y1 * y1 + y2 * y2);\n    if (!len) {\n        y0 = 0;\n        y1 = 0;\n        y2 = 0;\n    } else {\n        len = 1 / len;\n        y0 *= len;\n        y1 *= len;\n        y2 *= len;\n    }\n\n    out[0] = x0;\n    out[1] = y0;\n    out[2] = z0;\n    out[3] = 0;\n    out[4] = x1;\n    out[5] = y1;\n    out[6] = z1;\n    out[7] = 0;\n    out[8] = x2;\n    out[9] = y2;\n    out[10] = z2;\n    out[11] = 0;\n    out[12] = -(x0 * eyex + x1 * eyey + x2 * eyez);\n    out[13] = -(y0 * eyex + y1 * eyey + y2 * eyez);\n    out[14] = -(z0 * eyex + z1 * eyey + z2 * eyez);\n    out[15] = 1;\n\n    return out;\n};","module.exports = copy;\n\n/**\n * Copy the values from one mat4 to another\n *\n * @param {mat4} out the receiving matrix\n * @param {mat4} a the source matrix\n * @returns {mat4} out\n */\nfunction copy(out, a) {\n    out[0] = a[0];\n    out[1] = a[1];\n    out[2] = a[2];\n    out[3] = a[3];\n    out[4] = a[4];\n    out[5] = a[5];\n    out[6] = a[6];\n    out[7] = a[7];\n    out[8] = a[8];\n    out[9] = a[9];\n    out[10] = a[10];\n    out[11] = a[11];\n    out[12] = a[12];\n    out[13] = a[13];\n    out[14] = a[14];\n    out[15] = a[15];\n    return out;\n};","// Partial import of gl-matrix via modularized stack-gl forks\n// https://github.com/toji/gl-matrix\n// https://github.com/stackgl\n\n// vec3\n\n// Substitute 64-bit version\n// We need the extra precision when multiplying matrices w/mercator projected values\nconst vec3 = {\n    fromValues (x, y, z) {\n        var out = new Float64Array(3);\n        out[0] = x;\n        out[1] = y;\n        out[2] = z;\n        return out;\n    }\n};\n\n\n// mat3\n\nimport {default as mat3_normalFromMat4} from 'gl-mat3/normal-from-mat4';\nimport {default as mat3_invert} from 'gl-mat3/invert';\n\nconst mat3 = {\n    normalFromMat4: mat3_normalFromMat4,\n    invert: mat3_invert\n};\n\n\n// mat4\n\nimport {default as mat4_multiply} from 'gl-mat4/multiply';\nimport {default as mat4_translate} from 'gl-mat4/translate';\nimport {default as mat4_scale} from 'gl-mat4/scale';\nimport {default as mat4_perspective} from 'gl-mat4/perspective';\nimport {default as mat4_lookAt} from 'gl-mat4/lookAt';\nimport {default as mat4_identity} from 'gl-mat4/identity';\nimport {default as mat4_copy} from 'gl-mat4/copy';\n\nconst mat4 = {\n    multiply: mat4_multiply,\n    translate: mat4_translate,\n    scale: mat4_scale,\n    perspective: mat4_perspective,\n    lookAt: mat4_lookAt,\n    identity: mat4_identity,\n    copy: mat4_copy\n};\n\n\nexport {vec3, mat3, mat4};\n","import Utils from '../utils/utils';\nimport ShaderProgram from '../gl/shader_program';\nimport {mat4, mat3, vec3} from '../utils/gl-matrix';\n\n// Abstract base class\nexport default class Camera {\n\n    constructor(name, view, options = {}) {\n        this.view = view;\n        this.position = options.position;\n        this.zoom = options.zoom;\n    }\n\n    // Create a camera by type name, factory-style\n    static create(name, view, config) {\n        switch (config.type) {\n        case 'isometric':\n            return new IsometricCamera(name, view, config);\n        case 'flat':\n            return new FlatCamera(name, view, config);\n        case 'perspective':\n            /* falls through */\n        default:\n            return new PerspectiveCamera(name, view, config);\n        }\n    }\n\n    // Update method called once per frame\n    update() {\n    }\n\n    // Called once per frame per program (e.g. for main render pass, then for each additional pass for feature selection, etc.)\n    setupProgram(/*program*/) {\n    }\n\n    // Sync camera position/zoom to scene view\n    updateView () {\n        if (this.position || this.zoom) {\n            var view = {};\n            if (this.position) {\n                view = { lng: this.position[0], lat: this.position[1], zoom: this.position[2] };\n            }\n            if (this.zoom) {\n                view.zoom = this.zoom;\n            }\n            this.view.setView(view);\n        }\n    }\n\n    // Set model-view and normal matrices\n    setupMatrices (matrices, program) {\n        // Model view matrix - transform tile space into view space (meters, relative to camera)\n        mat4.multiply(matrices.model_view32, this.view_matrix, matrices.model);\n        program.uniform('Matrix4fv', 'u_modelView', matrices.model_view32);\n\n        // Normal matrices - transforms surface normals into view space\n        mat3.normalFromMat4(matrices.normal32, matrices.model_view32);\n        mat3.invert(matrices.inverse_normal32, matrices.normal32);\n        program.uniform('Matrix3fv', 'u_normalMatrix', matrices.normal32);\n        program.uniform('Matrix3fv', 'u_inverseNormalMatrix', matrices.inverse_normal32);\n    }\n\n}\n\n/**\n    Perspective matrix projection\n\n    This is a specialized perspective camera that, given a desired camera focal length (which can also vary by zoom level),\n    constrains the camera height above the ground plane such that the displayed ground area of the map matches that of\n    a traditional web mercator map. This means you can set the camera location by [lat, lng, zoom] as you would a typical\n    web mercator map, then adjust the focal length as needed.\n\n    Vanishing point can also be adjusted to achieve different \"viewing angles\", e.g. instead of looking straight down into\n    the center of the viewport, the camera appears to be tilted at an angle. For example:\n\n    [0, 0] = looking towards center of viewport\n    [-250, -250] = looking 250 pixels from the viewport center to the lower-left corner\n    [400, 0] = looking 400 pixels to the right of the viewport center\n*/\nclass PerspectiveCamera extends Camera {\n\n    constructor(name, view, options = {}) {\n        super(name, view, options);\n        this.type = 'perspective';\n\n        // a single scalar, or pairs of stops mapping zoom levels, e.g. [zoom, focal length]\n        this.focal_length = options.focal_length;\n        this.fov = options.fov;\n        if (!this.focal_length && !this.fov) {\n            // Default focal length ranges by zoom\n            this.focal_length = [[16, 2], [17, 2.5], [18, 3], [19, 4], [20, 6]];\n        }\n\n        this.vanishing_point = options.vanishing_point || [0, 0]; // [x, y]\n        this.vanishing_point = this.vanishing_point.map(parseFloat); // we implicitly only support px units here\n        this.vanishing_point_skew = [];\n\n        this.position_meters = null;\n        this.view_matrix = new Float64Array(16);\n        this.projection_matrix = new Float32Array(16);\n\n        // 'camera' is the name of the shader block, e.g. determines where in the shader this code is injected\n        ShaderProgram.replaceBlock('camera', `\n            uniform mat4 u_projection;\n            uniform vec3 u_eye;\n            uniform vec2 u_vanishing_point;\n\n            void cameraProjection (inout vec4 position) {\n                position = u_projection * position;\n            }`\n        );\n    }\n\n    // Constrains the camera so that the viewable area matches given the viewport height\n    // (in world space, e.g. meters), given either a camera focal length or field-of-view\n    // (focal length is used if both are passed).\n    constrainCamera({ view_height, height, focal_length, fov }) {\n        // Solve for camera height\n        if (!height) {\n            // We have focal length, calculate FOV\n            if (focal_length) {\n                fov = Math.atan(1 / focal_length) * 2;\n            }\n            // We have FOV, calculate focal length\n            else if (fov) {\n                fov = fov * Math.PI / 180; // convert FOV degrees to radians\n                focal_length = 1 / Math.tan(fov / 2);\n            }\n\n            // Distance that camera should be from ground such that it fits the field of view expected\n            // for a conventional web mercator map at the current zoom level and camera focal length\n            height = view_height / 2 * focal_length;\n        }\n        // Solve for camera focal length / field-of-view\n        else {\n            focal_length = 2 * height / view_height;\n            fov = Math.atan(1 / focal_length) * 2;\n        }\n\n        return { view_height, height, focal_length, fov };\n    }\n\n    updateMatrices() {\n        // TODO: only re-calculate these vars when necessary\n\n        // Height of the viewport in meters at current zoom\n        var viewport_height = this.view.size.css.height * this.view.meters_per_pixel;\n\n        // Compute camera properties to fit desired view\n        var { height, fov } = this.constrainCamera({\n            view_height: viewport_height,\n            focal_length: Utils.interpolate(this.view.zoom, this.focal_length),\n            fov: Utils.interpolate(this.view.zoom, this.fov)\n        });\n\n        // View matrix\n        var position = [this.view.center.meters.x, this.view.center.meters.y, height];\n        this.position_meters = position;\n\n        // mat4.lookAt(this.view_matrix,\n        //     vec3.fromValues(...position),\n        //     vec3.fromValues(position[0], position[1], height - 1),\n        //     vec3.fromValues(0, 1, 0));\n        // Exclude camera height from view matrix\n        mat4.lookAt(this.view_matrix,\n            vec3.fromValues(position[0], position[1], 0),\n            vec3.fromValues(position[0], position[1], -1),\n            vec3.fromValues(0, 1, 0));\n\n        // Projection matrix\n        mat4.perspective(this.projection_matrix, fov, this.view.aspect, 1, height * 2);\n\n        // Convert vanishing point from pixels to viewport space\n        this.vanishing_point_skew[0] = this.vanishing_point[0] / this.view.size.css.width;\n        this.vanishing_point_skew[1] = this.vanishing_point[1] / this.view.size.css.height;\n\n        // Adjust projection matrix to include vanishing point skew\n        this.projection_matrix[8] = -this.vanishing_point_skew[0] * 2; // z column of x row, e.g. amount z skews x\n        this.projection_matrix[9] = -this.vanishing_point_skew[1] * 2; // z column of y row, e.g. amount z skews y\n\n        // Translate geometry into the distance so that camera is appropriate height above ground\n        // Additionally, adjust xy to compensate for any vanishing point skew, e.g. move geometry so that the displayed g\n        // plane of the map matches that expected by a traditional web mercator map at this [lat, lng, zoom].\n        mat4.translate(this.projection_matrix, this.projection_matrix,\n            vec3.fromValues(\n                viewport_height/2 * this.view.aspect * (-this.vanishing_point_skew[0] * 2),\n                viewport_height/2 * (-this.vanishing_point_skew[1] * 2),\n                0\n            )\n        );\n\n        // Include camera height in projection matrix\n        mat4.translate(this.projection_matrix, this.projection_matrix, vec3.fromValues(0, 0, -height));\n    }\n\n    update() {\n        super.update();\n        this.updateMatrices();\n    }\n\n    setupProgram(program) {\n        program.uniform('Matrix4fv', 'u_projection', this.projection_matrix);\n        program.uniform('3f', 'u_eye', [0, 0, this.position_meters[2]]);\n        program.uniform('2fv', 'u_vanishing_point', this.vanishing_point_skew);\n    }\n\n}\n\n// Isometric-style projection\n// Note: this is actually an \"axonometric\" projection, but I'm using the colloquial term isometric because it is more recognizable.\n// An isometric projection is a specific subset of axonometric projections.\n// 'axis' determines the xy skew applied to a vertex based on its z coordinate, e.g. [0, 1] axis causes buildings to be drawn\n// straight upwards on screen at their true height, [0, .5] would draw them up at half-height, [1, 0] would be sideways, etc.\nclass IsometricCamera extends Camera {\n\n    constructor(name, view, options = {}) {\n        super(name, view, options);\n        this.type = 'isometric';\n        this.axis = options.axis || { x: 0, y: 1 };\n        if (this.axis.length === 2) {\n            this.axis = { x: this.axis[0], y: this.axis[1] }; // allow axis to also be passed as 2-elem array\n        }\n\n        this.position_meters = null;\n        this.viewport_height = null;\n\n        this.view_matrix = new Float64Array(16);\n        this.projection_matrix = new Float32Array(16);\n\n        // 'camera' is the name of the shader block, e.g. determines where in the shader this code is injected\n        ShaderProgram.replaceBlock('camera', `\n            uniform mat4 u_projection;\n            uniform vec3 u_eye;\n            uniform vec2 u_vanishing_point;\n\n            void cameraProjection (inout vec4 position) {\n                position = u_projection * position;\n                // position.xy += position.z * u_isometric_axis;\n\n                // Reverse z for depth buffer so up is negative,\n                // and scale down values so objects higher than one screen height will not get clipped\n                // pull forward slightly to avoid going past far clipping plane\n                position.z = -position.z / 100. + 1. - 0.001;\n            }`\n        );\n    }\n\n    update() {\n        super.update();\n\n        this.viewport_height = this.view.size.css.height * this.view.meters_per_pixel;\n        var position = [this.view.center.meters.x, this.view.center.meters.y, this.viewport_height];\n        this.position_meters = position;\n\n        // View\n        mat4.identity(this.view_matrix);\n        mat4.translate(this.view_matrix, this.view_matrix, vec3.fromValues(-position[0], -position[1], 0));\n\n        // Projection\n        mat4.identity(this.projection_matrix);\n\n        // apply isometric skew\n        this.projection_matrix[8] = this.axis.x / this.view.aspect; // z column of x row, e.g. amount z skews x\n        this.projection_matrix[9] = this.axis.y;                    // z column of x row, e.g. amount z skews y\n\n        // convert meters to viewport\n        mat4.scale(this.projection_matrix, this.projection_matrix,\n            vec3.fromValues(\n                2 / this.view.size.meters.x,\n                2 / this.view.size.meters.y,\n                2 / this.view.size.meters.y\n            )\n        );\n    }\n\n    setupProgram(program) {\n        program.uniform('Matrix4fv', 'u_projection', this.projection_matrix);\n\n        program.uniform('3fv', 'u_eye', [0, 0, this.viewport_height]);\n        // program.uniform('3f', 'u_eye', this.viewport_height * this.axis.x, this.viewport_height * this.axis.y, this.viewport_height);\n        program.uniform('2fv', 'u_vanishing_point', [0, 0]);\n    }\n\n}\n\n// Flat projection (e.g. just top-down, no perspective) - a degenerate isometric camera\nclass FlatCamera extends IsometricCamera {\n\n    constructor(name, view, options = {}) {\n        super(name, view, options);\n        this.type = 'flat';\n    }\n\n    update() {\n        // Axis is fixed to (0, 0) for flat camera\n        this.axis.x = 0;\n        this.axis.y = 0;\n\n        super.update();\n    }\n\n}\n","import Geo from '../utils/geo';\nimport {TileID} from '../tile/tile_id';\nimport Camera from './camera';\nimport Utils from '../utils/utils';\nimport subscribeMixin from '../utils/subscribe';\nimport log from '../utils/log';\n\nexport const VIEW_PAN_SNAP_TIME = 0.5;\n\nexport default class View {\n\n    constructor (scene, options) {\n        subscribeMixin(this);\n\n        this.scene = scene;\n        this.createMatrices();\n\n        this.zoom = null;\n        this.center = null;\n        this.bounds = null;\n        this.meters_per_pixel = null;\n\n        this.panning = false;\n        this.panning_stop_at = 0;\n        this.pan_snap_timer = 0;\n        this.zoom_direction = 0;\n\n        this.user_input_at = 0;\n        this.user_input_timeout = 50;\n        this.user_input_active = false;\n\n        // Size of viewport in CSS pixels, device pixels, and mercator meters\n        this.size = {\n            css: {},\n            device: {},\n            meters: {}\n        };\n        this.aspect = null;\n\n        this.buffer = 0;\n        this.continuous_zoom = (typeof options.continuousZoom === 'boolean') ? options.continuousZoom : true;\n        this.wrap = (options.wrapView === false) ? false : true;\n        this.preserve_tiles_within_zoom = 1;\n\n        this.reset();\n    }\n\n    // Reset state before scene config is updated\n    reset () {\n        this.createCamera();\n    }\n\n    // Create camera\n    createCamera () {\n        let active_camera = this.getActiveCamera();\n        if (active_camera) {\n            this.camera = Camera.create(active_camera, this, this.scene.config.cameras[active_camera]);\n            this.camera.updateView();\n        }\n    }\n\n    // Get active camera - for public API\n    getActiveCamera () {\n        if (this.scene.config && this.scene.config.cameras) {\n            for (let name in this.scene.config.cameras) {\n                if (this.scene.config.cameras[name].active) {\n                    return name;\n                }\n            }\n\n            // If no camera set as active, use first one\n            let keys = Object.keys(this.scene.config.cameras);\n            return keys.length && keys[0];\n        }\n    }\n\n    // Set active camera and recompile - for public API\n    setActiveCamera (name) {\n        let prev = this.getActiveCamera();\n        if (prev === name) {\n            return name;\n        }\n\n        if (this.scene.config.cameras[name]) {\n            this.scene.config.cameras[name].active = true;\n\n            // Clear previously active camera\n            if (prev && this.scene.config.cameras[prev]) {\n                delete this.scene.config.cameras[prev].active;\n            }\n        }\n\n        this.scene.updateConfig({ rebuild: false, normalize: false });\n        return this.getActiveCamera();\n    }\n\n    // Update method called once per frame\n    update () {\n        if (this.camera != null && this.ready()) {\n            this.camera.update();\n        }\n        this.pan_snap_timer = ((+new Date()) - this.panning_stop_at) / 1000;\n        this.user_input_active = ((+new Date() - this.user_input_at) < this.user_input_timeout);\n    }\n\n    // Set logical pixel size of viewport\n    setViewportSize (width, height) {\n        this.size.css = { width, height };\n        this.size.device = {\n            width: Math.round(this.size.css.width * Utils.device_pixel_ratio),\n            height: Math.round(this.size.css.height * Utils.device_pixel_ratio)\n        };\n        this.aspect = this.size.css.width / this.size.css.height;\n        this.updateBounds();\n    }\n\n    // Set the map view, can be passed an object with lat/lng and/or zoom\n    setView ({ lng, lat, zoom } = {}) {\n        var changed = false;\n\n        // Set center\n        if (typeof lng === 'number' && typeof lat === 'number') {\n            if (!this.center || lng !== this.center.lng || lat !== this.center.lat) {\n                changed = true;\n                this.center = { lng, lat };\n            }\n        }\n\n        // Set zoom\n        if (typeof zoom === 'number' && zoom !== this.zoom) {\n            changed = true;\n            this.setZoom(zoom);\n        }\n\n        if (changed) {\n            this.updateBounds();\n        }\n        return changed;\n    }\n\n    setZoom (zoom) {\n        let last_tile_zoom = this.tile_zoom;\n        let tile_zoom = this.baseZoom(zoom);\n        if (!this.continuous_zoom) {\n            zoom = tile_zoom;\n        }\n\n        if (tile_zoom !== last_tile_zoom) {\n            this.zoom_direction = tile_zoom > last_tile_zoom ? 1 : -1;\n        }\n\n        this.zoom = zoom;\n        this.tile_zoom = tile_zoom;\n\n        this.updateBounds();\n        this.scene.requestRedraw();\n    }\n\n    // Choose the base zoom level to use for a given fractional zoom\n    baseZoom (zoom) {\n        return Math.floor(zoom);\n    }\n\n    setPanning (panning) {\n        this.panning = panning;\n        if (!this.panning) {\n            this.panning_stop_at = (+new Date());\n        }\n    }\n\n    markUserInput () {\n        this.user_input_at = (+new Date());\n    }\n\n    ready () {\n        // TODO: better concept of \"readiness\" state?\n        if (typeof this.size.css.width !== 'number' ||\n            typeof this.size.css.height !== 'number' ||\n            this.center == null ||\n            typeof this.zoom !== 'number') {\n            return false;\n        }\n        return true;\n    }\n\n    // Calculate viewport bounds based on current center and zoom\n    updateBounds () {\n        if (!this.ready()) {\n            return;\n        }\n\n        this.meters_per_pixel = Geo.metersPerPixel(this.zoom);\n\n        // Size of the half-viewport in meters at current zoom\n        this.size.meters = {\n            x: this.size.css.width * this.meters_per_pixel,\n            y: this.size.css.height * this.meters_per_pixel\n        };\n\n        // Center of viewport in meters, and tile\n        const m = Geo.latLngToMeters([this.center.lng, this.center.lat]);\n        this.center.meters = { x: m[0], y: m[1] };\n\n        this.center.tile = Geo.tileForMeters([this.center.meters.x, this.center.meters.y], this.tile_zoom);\n\n        // Bounds in meters\n        this.bounds = {\n            sw: {\n                x: this.center.meters.x - this.size.meters.x / 2,\n                y: this.center.meters.y - this.size.meters.y / 2\n            },\n            ne: {\n                x: this.center.meters.x + this.size.meters.x / 2,\n                y: this.center.meters.y + this.size.meters.y / 2\n            }\n        };\n\n        this.scene.tile_manager.updateTilesForView();\n\n        this.trigger('move');\n        this.scene.requestRedraw(); // TODO automate via move event?\n    }\n\n    findVisibleTileCoordinates () {\n        if (!this.bounds) {\n            return [];\n        }\n\n        let z = this.tile_zoom;\n        let sw = Geo.tileForMeters([this.bounds.sw.x, this.bounds.sw.y], z);\n        let ne = Geo.tileForMeters([this.bounds.ne.x, this.bounds.ne.y], z);\n\n        let range = [\n            sw.x - this.buffer, ne.x + this.buffer, // x\n            ne.y - this.buffer, sw.y + this.buffer  // y\n        ];\n\n        if (this.wrap === false) { // prevent tiles from wrapping across antimeridian\n            let tmax = (1 << z) - 1; // max xy tile number for this zoom\n            range = range.map(v => Math.min(Math.max(0, v), tmax));\n        }\n\n        let coords = [];\n        for (let x = range[0]; x <= range[1]; x++) {\n            for (let y = range[2]; y <= range[3]; y++) {\n                coords.push(TileID.coord({ x, y, z }));\n            }\n        }\n        return coords;\n    }\n\n    // Remove tiles too far outside of view\n    pruneTilesForView () {\n        // TODO: will this function ever be called when view isn't ready?\n        if (!this.ready()) {\n            return;\n        }\n\n        this.scene.tile_manager.removeTiles(tile => {\n            // Ignore visible tiles\n            if (tile.visible || tile.isProxy()) {\n                return false;\n            }\n\n            // Remove tiles outside given zoom that are still loading\n            if (tile.loading && tile.style_z !== this.tile_zoom) {\n                return true;\n            }\n\n            // Discard if too far from current zoom\n            const zdiff = Math.abs(tile.style_z - this.tile_zoom);\n            const preserve_tiles_within_zoom = (tile.preserve_tiles_within_zoom != null ?\n                tile.preserve_tiles_within_zoom : this.preserve_tiles_within_zoom); // optionally tile source specific\n            if (zdiff > preserve_tiles_within_zoom) {\n                return true;\n            }\n\n            // Discard tiles outside an area surrounding the viewport, handling tiles at different zooms\n            // Get min and max tiles for the viewport, at the scale of the tile currently being evaluated\n            const view_buffer = this.meters_per_pixel * Geo.tile_size; // buffer area to keep tiles surrounding viewport\n            const view_tile_min = TileID.coordAtZoom(\n                Geo.tileForMeters(\n                    [\n                        this.center.meters.x - this.size.meters.x/2 - view_buffer,\n                        this.center.meters.y + this.size.meters.y/2 + view_buffer\n                    ],\n                    this.tile_zoom),\n                tile.coords.z);\n            const view_tile_max = TileID.coordAtZoom(\n                Geo.tileForMeters(\n                    [\n                        this.center.meters.x + this.size.meters.x/2 + view_buffer,\n                        this.center.meters.y - this.size.meters.y/2 - view_buffer\n                    ],\n                    this.tile_zoom),\n                tile.coords.z);\n\n            if (tile.coords.x < view_tile_min.x || tile.coords.x > view_tile_max.x ||\n                tile.coords.y < view_tile_min.y || tile.coords.y > view_tile_max.y) {\n                log('trace', `View: remove tile ${tile.key} (as ${tile.coords.key}) ` +\n                    `for being too far out of visible area (${view_tile_min.key}, ${view_tile_max.key})`);\n                return true;\n            }\n            return false;\n        });\n    }\n\n    // Allocate model-view matrices\n    // 64-bit versions are for CPU calcuations\n    // 32-bit versions are downsampled and sent to GPU\n    createMatrices () {\n        this.matrices = {};\n        this.matrices.model = new Float64Array(16);\n        this.matrices.model32 = new Float32Array(16);\n        this.matrices.model_view = new Float64Array(16);\n        this.matrices.model_view32 = new Float32Array(16);\n        this.matrices.normal = new Float64Array(9);\n        this.matrices.normal32 = new Float32Array(9);\n        this.matrices.inverse_normal32 = new Float32Array(9);\n    }\n\n    // Calculate and set model/view and normal matrices for a tile\n    setupTile (tile, program) {\n        // Tile-specific state\n        // TODO: calc these once per tile (currently being needlessly re-calculated per-tile-per-style)\n        tile.setupProgram(this.matrices, program);\n\n        // Model-view and normal matrices\n        this.camera.setupMatrices(this.matrices, program);\n    }\n\n    // Set general uniforms that must be updated once per program\n    setupProgram (program) {\n        program.uniform('2fv', 'u_resolution', [this.size.device.width, this.size.device.height]);\n        program.uniform('3fv', 'u_map_position', [this.center.meters.x, this.center.meters.y, this.zoom]);\n        program.uniform('1f', 'u_meters_per_pixel', this.meters_per_pixel);\n        program.uniform('1f', 'u_device_pixel_ratio', Utils.device_pixel_ratio);\n        program.uniform('1f', 'u_view_pan_snap_timer', this.pan_snap_timer);\n        program.uniform('1i', 'u_view_panning', this.panning);\n\n        this.camera.setupProgram(program);\n    }\n\n    // View requires some animation, such as after panning stops\n    isAnimating () {\n        return (this.pan_snap_timer <= VIEW_PAN_SNAP_TIME);\n    }\n\n}\n","// Point + text label rendering style\n\nimport log from '../../utils/log';\nimport {Style} from '../style';\nimport StyleParser from '../style_parser';\nimport gl from '../../gl/constants'; // web workers don't have access to GL context, so import all GL constants\nimport VertexLayout from '../../gl/vertex_layout';\nimport { buildQuadForPoint } from '../../builders/points';\nimport Texture from '../../gl/texture';\nimport Geo from '../../utils/geo';\nimport Collision from '../../labels/collision';\nimport LabelPoint from '../../labels/label_point';\nimport placePointsOnLine from '../../labels/point_placement';\nimport {TextLabels} from '../text/text_labels';\nimport {VIEW_PAN_SNAP_TIME} from '../../scene/view';\nimport debugSettings from '../../utils/debug_settings';\n\nimport points_vs from './points_vertex.glsl';\nimport points_fs from './points_fragment.glsl';\n\nconst PLACEMENT = LabelPoint.PLACEMENT;\n\nexport const Points = Object.create(Style);\n\nconst SHADER_POINT_VARIANT = '__shader_point';\n\n// texture types\nconst TANGRAM_POINT_TYPE_TEXTURE = 1; // style texture/sprites (assigned by user)\nconst TANGRAM_POINT_TYPE_LABEL = 2;   // labels (generated by rendering labels to canvas)\nconst TANGRAM_POINT_TYPE_SHADER = 3;  // point (drawn in shader)\n\n// default point size in pixels\nconst DEFAULT_POINT_SIZE = 16;\n\n// Mixin text label methods\nObject.assign(Points, TextLabels);\n\nObject.assign(Points, {\n    name: 'points',\n    built_in: true,\n    vertex_shader_src: points_vs,\n    fragment_shader_src: points_fs,\n    selection: true,  // enable feature selection\n    collision: true,  // style includes a collision pass\n    blend: 'overlay', // overlays drawn on top of all other styles, with blending\n\n    init(options = {}) {\n        Style.init.call(this, options);\n\n        // Shader defines\n        this.setupDefines();\n\n        // Include code for SDF-drawn shader points\n        this.defines.TANGRAM_HAS_SHADER_POINTS = true;\n\n        // texture types\n        this.defines.TANGRAM_POINT_TYPE_TEXTURE = TANGRAM_POINT_TYPE_TEXTURE;\n        this.defines.TANGRAM_POINT_TYPE_LABEL = TANGRAM_POINT_TYPE_LABEL;\n        this.defines.TANGRAM_POINT_TYPE_SHADER = TANGRAM_POINT_TYPE_SHADER;\n\n        this.collision_group_points = this.name+'-points';\n        this.collision_group_text = this.name+'-text';\n\n        // Stenciling proxy tiles (to avoid compounding alpha artifacts) doesn't work well with\n        // points/text labels, which have pure transparent pixels that interfere with the stencil buffer,\n        // causing a \"cut-out\"/\"x-ray\" effect (preventing pixels that would usually be covered by proxy tiles\n        // underneath from being rendered).\n        this.stencil_proxy_tiles = false;\n\n        this.reset();\n    },\n\n    // Setup defines common to points base and child (text) styles\n    setupDefines () {\n        // If we're not rendering as overlay, we need a layer attribute\n        if (this.blend !== 'overlay') {\n            this.defines.TANGRAM_LAYER_ORDER = true;\n        }\n\n        // Fade in labels\n        if (debugSettings.suppress_label_fade_in === true) {\n            this.fade_in_time = 0;\n            this.defines.TANGRAM_FADE_IN_RATE = null;\n        }\n        else {\n            this.fade_in_time = 0.15; // time in seconds\n            this.defines.TANGRAM_FADE_IN_RATE = 1 / this.fade_in_time;\n        }\n\n        // Snap points to pixel grid after panning stop\n        if (debugSettings.suppress_label_snap_animation !== true) {\n            this.defines.TANGRAM_VIEW_PAN_SNAP_RATE = 1 / VIEW_PAN_SNAP_TIME; // inverse time in seconds\n        }\n\n        // Show hidden labels for debugging\n        if (debugSettings.show_hidden_labels === true) {\n            this.defines.TANGRAM_SHOW_HIDDEN_LABELS = true;\n        }\n\n        // Enable wireframe for debugging\n        if (debugSettings.wireframe === true) {\n            this.defines.TANGRAM_WIREFRAME = true;\n        }\n    },\n\n    reset () {\n        this.queues = {};\n        this.resetText();\n        this.texture_missing_sprites = {}; // track which missing sprites we've found (reduce dupe log messages)\n    },\n\n    // Override to queue features instead of processing immediately\n    addFeature (feature, draw, context) {\n        let tile = context.tile;\n        if (tile.generation !== this.generation) {\n            return;\n        }\n\n        // Point styling\n        let style = {};\n        style.color = this.parseColor(draw.color, context);\n        style.texture = draw.texture;   // optional point texture, specified in `draw` or at style level\n        style.label_texture = null;     // assigned by labelling code if needed\n        style.blend_order = draw.blend_order; // copy pre-computed blend order\n\n        // require color or texture\n        if (!style.color && !style.texture) {\n            return;\n        }\n\n        style.alpha = StyleParser.evalCachedProperty(draw.alpha, context); // optional alpha override\n\n        // optional sprite and texture\n        let sprite_info;\n        if (this.hasSprites(style)) {\n            // populate sprite_info object with used sprites\n            sprite_info = this.parseSprite(style, draw, context);\n\n            if (sprite_info) {\n                style.texcoords = sprite_info.texcoords;\n            }\n            else {\n                // sprites are defined in the style's texture, but none are used in the current layer\n                log({ level: 'debug', once: true }, `Layer group '${draw.layers.join(', ')}' ` +\n                    `uses a texture '${style.texture}', but doesn't specify which sprite to draw. ` +\n                    'Features that match this layer group won\\'t be drawn without specifying the sprite with the ' +\n                    '\\'sprite\\' or \\'sprite_default\\' properties. The merged draw parameters for this layer group are:', draw).then(logged => {\n                    if (logged) {\n                        log('debug', `Example feature for layer group '${draw.layers.join(', ')}'`, feature);\n                    }\n                });\n                return;\n            }\n        } else if (draw.sprite) {\n            // sprite specified in the draw layer but no sprites defined in the texture\n            log({ level: 'warn', once: true }, `Layer group '${draw.layers.join(', ')}' ` +\n                `specifies sprite '${draw.sprite}', but the texture '${draw.texture}' doesn't define any sprites. ` +\n                'Features that match this layer group won\\'t be drawn. The merged draw parameters for this layer group are:', draw);\n            return;\n        }\n\n        this.calcSize(draw, style, sprite_info, context);\n\n        // incorporate outline into size\n        if (draw.outline) {\n            style.outline_width = StyleParser.evalCachedProperty(draw.outline.width, context) || StyleParser.defaults.outline.width;\n            style.outline_color = this.parseColor(draw.outline.color, context);\n        }\n\n        style.outline_edge_pct = 0;\n        if (style.outline_width && style.outline_color) {\n            // adjust size and UVs for outline\n            let outline_width = style.outline_width;\n            style.size[0] += outline_width;\n            style.size[1] += outline_width;\n            style.outline_edge_pct = outline_width / Math.min(style.size[0], style.size[1]) * 2; // UV distance at which outline starts\n            style.outline_alpha = StyleParser.evalCachedProperty(draw.outline.alpha, context); // optional alpha override\n        }\n\n        // size will be scaled to 16-bit signed int, so max allowed width + height of 256 pixels\n        style.size[0] = Math.min(style.size[0], 256);\n        style.size[1] = Math.min(style.size[1], 256);\n\n        // Placement strategy\n        style.placement = draw.placement;\n        style.placement_min_length_ratio = StyleParser.evalCachedProperty(draw.placement_min_length_ratio, context);\n\n        // Spacing parameter (in pixels) to equally space points along a line\n        if (style.placement === PLACEMENT.SPACED && draw.placement_spacing) {\n            style.placement_spacing = StyleParser.evalCachedProperty(draw.placement_spacing, context);\n        }\n\n        // Angle parameter (can be a number or the string \"auto\")\n        style.angle = StyleParser.evalProperty(draw.angle, context) || 0;\n\n        // points can be placed off the ground\n        style.z = StyleParser.evalCachedDistanceProperty(draw.z, context) || StyleParser.defaults.z;\n\n        style.tile_edges = draw.tile_edges; // usually activated for debugging, or rare visualization needs\n\n        this.computeLayout(style, feature, draw, context, tile);\n\n        // Text styling\n        let tf =\n            draw.text &&\n            draw.text.visible !== false && // explicitly handle `visible` property for nested text\n            this.parseTextFeature(feature, draw.text, context, tile);\n\n        if (Array.isArray(tf)) {\n            tf = null; // NB: boundary labels not supported for point label attachments, should log warning\n            log({ level: 'warn', once: true }, `Layer group '${draw.layers.join(', ')}': ` +\n                'cannot use boundary labels (e.g. \\'text_source: { left: ..., right: ... }\\') for \\'text\\' labels attached to \\'points\\'; ' +\n                `provided 'text_source' value was ${JSON.stringify(draw.text.text_source)}`);\n        }\n\n        if (tf) {\n            tf.layout.parent = style; // parent point will apply additional anchor/offset to text\n\n            // Text labels have a default priority of 0.5 below their parent point (+0.5, priority is lower-is-better)\n            // This can be overriden, as long as it is less than or equal to the default\n            tf.layout.priority = draw.text.priority ? Math.max(tf.layout.priority, style.priority + 0.5) : (style.priority + 0.5);\n\n            Collision.addStyle(this.collision_group_text, tile.id);\n        }\n\n        this.queueFeature({ feature, draw, context, style, text_feature: tf }, tile); // queue the feature for later processing\n\n        // Register with collision manager\n        Collision.addStyle(this.collision_group_points, tile.id);\n    },\n\n    // Calcuate the size for the current point feature\n    calcSize (draw, style, sprite_info, context) {\n        // point size defined explicitly, or defaults to sprite size, or generic fallback\n        style.size = draw.size;\n        if (!style.size) {\n            // a 'size' property has not been set in the draw layer -\n            // use the sprite size if it exists and a generic fallback if it doesn't\n            style.size = (sprite_info && sprite_info.css_size) || [DEFAULT_POINT_SIZE, DEFAULT_POINT_SIZE];\n        }\n        else {\n            // check for a cached size, passing the texture and any sprite references\n            style.size = StyleParser.evalCachedPointSizeProperty(draw.size, sprite_info, Texture.textures[style.texture], context);\n            if (style.size == null) {\n                // the StyleParser couldn't evaluate a sprite size\n                log({ level: 'warn', once: true }, `Layer group '${draw.layers.join(', ')}': ` +\n                    `'size' (${JSON.stringify(draw.size.value)}) couldn't be interpreted, features that match ` +\n                    'this layer group won\\'t be drawn');\n                return;\n            }\n            else if (typeof style.size === 'number') {\n                style.size = [style.size, style.size]; // convert 1d size to 2d\n            }\n        }\n    },\n\n    hasSprites (style) {\n        return style.texture && Texture.textures[style.texture] && Texture.textures[style.texture].sprites;\n    },\n\n    // Generate a sprite_info object\n    getSpriteInfo (style, sprite) {\n        let info = Texture.textures[style.texture].sprites[sprite] && Texture.getSpriteInfo(style.texture, sprite);\n        if (sprite && !info) {\n            // track missing sprites (per texture)\n            this.texture_missing_sprites[style.texture] = this.texture_missing_sprites[style.texture] || {};\n            if (!this.texture_missing_sprites[style.texture][sprite]) { // only log each missing sprite once\n                log('debug', `Style: in style '${this.name}', could not find sprite '${sprite}' for texture '${style.texture}'`);\n                this.texture_missing_sprites[style.texture][sprite] = true;\n            }\n        }\n        else if (info) {\n            info.sprite = sprite;\n        }\n        return info;\n    },\n\n    // Check a sprite name against available sprites and return a sprite_info object\n    parseSprite (style, draw, context) {\n        // check for functions\n        let sprite = StyleParser.evalProperty(draw.sprite, context);\n        let sprite_info = this.getSpriteInfo(style, sprite) || this.getSpriteInfo(style, draw.sprite_default);\n        return sprite_info;\n    },\n\n    // Queue features for deferred processing (collect all features first so we can do collision on the whole group)\n    queueFeature (q, tile) {\n        if (!this.tile_data[tile.id] || !this.queues[tile.id]) {\n            this.startData(tile);\n        }\n        this.queues[tile.id] = this.queues[tile.id] || [];\n        this.queues[tile.id].push(q);\n    },\n\n    // Override\n    async endData (tile) {\n        if (tile.canceled) {\n            log('trace', `Style ${this.name}: stop tile build because tile was canceled: ${tile.key}`);\n            return null;\n        }\n\n        let queue = this.queues[tile.id];\n        delete this.queues[tile.id];\n\n        // For each point feature, create one or more labels\n        let text_objs = [];\n        let point_objs = [];\n\n        queue.forEach(q => {\n            let style = q.style;\n            let feature = q.feature;\n            let geometry = feature.geometry;\n            let feature_labels = this.buildLabels(style.size, geometry, style);\n            for (let i = 0; i < feature_labels.length; i++) {\n                let label = feature_labels[i];\n                let point_obj = {\n                    feature,\n                    draw: q.draw,\n                    context: q.context,\n                    style,\n                    label\n                };\n                point_objs.push(point_obj);\n\n                if (q.text_feature) {\n                    let text_obj = {\n                        feature,\n                        draw: q.text_feature.draw,\n                        context: q.context,\n                        text: q.text_feature.text,\n                        text_settings_key: q.text_feature.text_settings_key,\n                        layout: q.text_feature.layout,\n                        point_label: label,\n                        linked: point_obj   // link so text only renders when parent point is placed\n                    };\n                    text_objs.push(text_obj);\n\n                    // Unless text feature is optional, create a two-way link so that parent\n                    // point will only render when text is also placed\n                    if (!q.draw.text.optional) {\n                        point_obj.linked = text_obj; // two-way link\n                    }\n                }\n            }\n        });\n\n        // Collide both points and text, then build features\n        const [, { labels, texts, textures }] = await Promise.all([\n            // Points\n            Collision.collide(point_objs, this.collision_group_points, tile.id).then(point_objs => {\n                point_objs.forEach(q => {\n                    this.feature_style = q.style;\n                    this.feature_style.label = q.label;\n                    this.feature_style.linked = q.linked; // TODO: move linked into label to avoid extra prop tracking?\n                    Style.addFeature.call(this, q.feature, q.draw, q.context);\n                });\n            }),\n            // Labels\n            this.collideAndRenderTextLabels(tile, this.collision_group_text, text_objs)\n        ]);\n\n        // Process labels\n        if (labels && texts) {\n            // Build queued features\n            labels.forEach(q => {\n                let text_settings_key = q.text_settings_key;\n                let text_info = texts[text_settings_key] && texts[text_settings_key][q.text];\n\n                // setup styling object expected by Style class\n                let style = this.feature_style;\n                style.label = q.label;\n                style.linked = q.linked; // TODO: move linked into label to avoid extra prop tracking?\n                style.size = text_info.size.logical_size;\n                style.texcoords = text_info.align[q.label.align].texcoords;\n                style.label_texture = textures[text_info.align[q.label.align].texture_id];\n                style.blend_order = q.draw.blend_order; // copy blend order from parent point\n\n                Style.addFeature.call(this, q.feature, q.draw, q.context);\n            });\n        }\n        this.freeText(tile);\n\n        // Finish tile mesh\n        const tile_data = await Style.endData.call(this, tile);\n        // Attach tile-specific label atlas to mesh as a texture uniform\n        if (tile_data && textures && textures.length) {\n            tile_data.textures = tile_data.textures || [];\n            tile_data.textures.push(...textures); // assign texture ownership to tile\n        }\n        return tile_data;\n    },\n\n    _preprocess (draw) {\n        draw.color = StyleParser.createColorPropertyCache(draw.color);\n        draw.alpha = StyleParser.createPropertyCache(draw.alpha);\n        draw.texture = (draw.texture !== undefined ? draw.texture : this.texture); // optional or default texture\n        draw.blend_order = this.getBlendOrderForDraw(draw); // from draw block, or fall back on default style blend order\n\n        if (draw.outline) {\n            draw.outline.color = StyleParser.createColorPropertyCache(draw.outline.color);\n            draw.outline.alpha = StyleParser.createPropertyCache(draw.outline.alpha);\n            draw.outline.width = StyleParser.createPropertyCache(draw.outline.width, StyleParser.parsePositiveNumber);\n        }\n\n        draw.z = StyleParser.createPropertyCache(draw.z, StyleParser.parseUnits);\n\n        // Size (1d value or 2d array)\n        try {\n            draw.size = StyleParser.createPointSizePropertyCache(draw.size, draw.texture);\n        }\n        catch(e) {\n            log({ level: 'warn', once: true }, `Layer group '${draw.layers.join(', ')}': ` +\n                `${e} (${JSON.stringify(draw.size)}), features that match this layer group won't be drawn.`);\n            return null;\n        }\n\n        // Offset (2d array)\n        draw.offset = StyleParser.createPropertyCache(draw.offset,\n            v => Array.isArray(v) && v.map(StyleParser.parseNumber)\n        );\n\n        // Buffer (1d value or or 2d array) - must be >= 0\n        draw.buffer = StyleParser.createPropertyCache(draw.buffer,\n            v => (Array.isArray(v) ? v : [v, v]).map(StyleParser.parsePositiveNumber)\n        );\n\n        // Repeat rules - no repeat limitation for points by default\n        draw.repeat_distance = StyleParser.createPropertyCache(draw.repeat_distance, StyleParser.parseNumber);\n\n        // Placement strategies\n        draw.placement = PLACEMENT[draw.placement && draw.placement.toUpperCase()];\n        if (draw.placement == null) {\n            draw.placement = PLACEMENT.VERTEX;\n        }\n\n        draw.placement_spacing = draw.placement_spacing != null ? draw.placement_spacing : 80; // default spacing\n        draw.placement_spacing = StyleParser.createPropertyCache(draw.placement_spacing, StyleParser.parsePositiveNumber);\n\n        draw.placement_min_length_ratio = draw.placement_min_length_ratio != null ? draw.placement_min_length_ratio : 1;\n        draw.placement_min_length_ratio = StyleParser.createPropertyCache(draw.placement_min_length_ratio, StyleParser.parsePositiveNumber);\n\n        if (typeof draw.angle === 'number') {\n            draw.angle = draw.angle * Math.PI / 180; // convert static value to radians\n        }\n        else if (typeof draw.angle === 'function') {\n            // convert function return value to radians\n            const angle_func = draw.angle;\n            draw.angle = context => angle_func(context) * Math.PI / 180;\n        }\n        else {\n            draw.angle = draw.angle || 0; // angle can be a string like \"auto\" (use angle of geometry)\n        }\n\n        // Optional text styling\n        draw.text = this.preprocessText(draw.text); // will return null if valid text styling wasn't provided\n        if (draw.text) {\n            draw.text.key = draw.key; // inherits parent properties\n            draw.text.group = draw.group;\n            draw.text.layers = draw.layers;\n            draw.text.order = draw.order;\n            draw.text.blend_order = draw.blend_order;\n            draw.text.repeat_group = (draw.text.repeat_group != null ? draw.text.repeat_group : draw.repeat_group);\n            draw.text.anchor = draw.text.anchor || this.default_anchor;\n            draw.text.optional = (typeof draw.text.optional === 'boolean') ? draw.text.optional : false; // default text to required\n            draw.text.interactive = draw.text.interactive || draw.interactive; // inherits from point\n        }\n\n        return draw;\n    },\n\n    // Default to trying all anchor placements\n    default_anchor: ['bottom', 'top', 'right', 'left'],\n\n    // Compute label layout-related properties\n    computeLayout (target, feature, draw, context, tile) {\n        let layout = target || {};\n        layout.id = feature;\n        layout.units_per_pixel = tile.units_per_pixel || 1;\n\n        // collision flag\n        layout.collide = (draw.collide === false) ? false : true;\n\n        // label anchors (point labels only)\n        // label position will be adjusted in the given direction, relative to its original point\n        // one of: left, right, top, bottom, top-left, top-right, bottom-left, bottom-right\n        layout.anchor = draw.anchor;\n\n        // label offset and buffer in pixel (applied in screen space)\n        layout.offset = StyleParser.evalCachedProperty(draw.offset, context) || StyleParser.zeroPair;\n        layout.buffer = StyleParser.evalCachedProperty(draw.buffer, context) || StyleParser.zeroPair;\n\n        // repeat rules\n        layout.repeat_distance = StyleParser.evalCachedProperty(draw.repeat_distance, context);\n        if (layout.repeat_distance) {\n            layout.repeat_distance *= layout.units_per_pixel;\n            layout.repeat_scale = 1; // initial repeat pass in tile with full scale\n\n            if (typeof draw.repeat_group === 'function') {\n                layout.repeat_group = draw.repeat_group(context); // dynamic repeat group\n            }\n            else {\n                // default to top-level layer name\n                // (e.g. all labels under `roads` layer, including sub-layers, are in one repeat group)\n                layout.repeat_group = draw.repeat_group || context.layer;\n            }\n        }\n\n        // label priority (lower is higher)\n        let priority = draw.priority;\n        if (priority != null) {\n            if (typeof priority === 'function') {\n                priority = priority(context);\n            }\n        }\n        else {\n            priority = -1 >>> 0; // default to max priority value if none set\n        }\n        layout.priority = priority;\n\n        return layout;\n    },\n\n    // Implements label building for TextLabels mixin\n    buildTextLabels (tile, feature_queue) {\n        let labels = [];\n        for (let f=0; f < feature_queue.length; f++) {\n            let fq = feature_queue[f];\n            let text_info = this.texts[tile.id][fq.text_settings_key][fq.text];\n            let size = text_info.size.collision_size;\n            fq.label = new LabelPoint(fq.point_label.position, size, fq.layout);\n            labels.push(fq);\n        }\n        return labels;\n    },\n\n    // Builds one or more point labels for a geometry\n    buildLabels (size, geometry, layout) {\n        let labels = [];\n\n        if (geometry.type === 'Point') {\n            labels.push(new LabelPoint(geometry.coordinates, size, layout, layout.angle));\n        }\n        else if (geometry.type === 'MultiPoint') {\n            let points = geometry.coordinates;\n            for (let i = 0; i < points.length; ++i) {\n                let point = points[i];\n                labels.push(new LabelPoint(point, size, layout, layout.angle));\n            }\n        }\n        else if (geometry.type === 'LineString') {\n            let line = geometry.coordinates;\n            let point_labels = placePointsOnLine(line, size, layout);\n            for (let i = 0; i < point_labels.length; ++i) {\n                labels.push(point_labels[i]);\n            }\n        }\n        else if (geometry.type === 'MultiLineString') {\n            let lines = geometry.coordinates;\n            for (let ln = 0; ln < lines.length; ln++) {\n                let line = lines[ln];\n                let point_labels = placePointsOnLine(line, size, layout);\n                for (let i = 0; i < point_labels.length; ++i) {\n                    labels.push(point_labels[i]);\n                }\n            }\n        }\n        else if (geometry.type === 'Polygon') {\n            // Point at polygon centroid (of outer ring)\n            if (layout.placement === PLACEMENT.CENTROID) {\n                let centroid = Geo.centroid(geometry.coordinates);\n                if (centroid) { // skip degenerate polygons\n                    labels.push(new LabelPoint(centroid, size, layout, layout.angle));\n                }\n            }\n            // Point at each polygon vertex (all rings)\n            else {\n                let rings = geometry.coordinates;\n                for (let ln = 0; ln < rings.length; ln++) {\n                    let point_labels = placePointsOnLine(rings[ln], size, layout);\n                    for (let i = 0; i < point_labels.length; ++i) {\n                        labels.push(point_labels[i]);\n                    }\n                }\n            }\n        }\n        else if (geometry.type === 'MultiPolygon') {\n            if (layout.placement === PLACEMENT.CENTROID) {\n                let centroid = Geo.multiCentroid(geometry.coordinates);\n                if (centroid) { // skip degenerate polygons\n                    labels.push(new LabelPoint(centroid, size, layout, layout.angle));\n                }\n            }\n            else {\n                let polys = geometry.coordinates;\n                for (let p = 0; p < polys.length; p++) {\n                    let rings = polys[p];\n                    for (let ln = 0; ln < rings.length; ln++) {\n                        let point_labels = placePointsOnLine(rings[ln], size, layout);\n                        for (let i = 0; i < point_labels.length; ++i) {\n                            labels.push(point_labels[i]);\n                        }\n                    }\n                }\n            }\n        }\n\n        return labels;\n    },\n\n    /**\n     * A \"template\" that sets constant attibutes for each vertex, which is then modified per vertex or per feature.\n     * A plain JS array matching the order of the vertex layout.\n     */\n    makeVertexTemplate(style, mesh, add_custom_attribs = true) {\n        let i = 0;\n\n        // a_position.xyz - vertex position\n        // a_position.w - layer order\n        this.vertex_template[i++] = 0;\n        this.vertex_template[i++] = 0;\n        this.vertex_template[i++] = style.z || 0;\n        this.vertex_template[i++] = this.scaleOrder(style.order);\n\n        // a_shape.xy - size of point in pixels (scaling vector)\n        // a_shape.z - angle of point\n        // a_shape.w - show/hide flag\n        this.vertex_template[i++] = 0;\n        this.vertex_template[i++] = 0;\n        this.vertex_template[i++] = 0;\n        this.vertex_template[i++] = style.label.layout.collide ? 0 : 1; // set initial label hide/show state\n\n        // a_texcoord.xy - texture coords\n        if (!mesh.variant.shader_point) {\n            this.vertex_template[i++] = 0;\n            this.vertex_template[i++] = 0;\n        }\n\n        // a_offset.xy - offset of point from center, in pixels\n        this.vertex_template[i++] = 0;\n        this.vertex_template[i++] = 0;\n\n        // a_color.rgba - feature color\n        const color = style.color || StyleParser.defaults.color;\n        this.vertex_template[i++] = color[0] * 255;\n        this.vertex_template[i++] = color[1] * 255;\n        this.vertex_template[i++] = color[2] * 255;\n        this.vertex_template[i++] = (style.alpha != null ? style.alpha : color[3]) * 255;\n\n        // a_selection_color.rgba - selection color\n        if (mesh.variant.selection) {\n            this.vertex_template[i++] = style.selection_color[0] * 255;\n            this.vertex_template[i++] = style.selection_color[1] * 255;\n            this.vertex_template[i++] = style.selection_color[2] * 255;\n            this.vertex_template[i++] = style.selection_color[3] * 255;\n        }\n\n        // point outline\n        if (mesh.variant.shader_point) {\n            // a_outline_color.rgba - outline color\n            const outline_color = style.outline_color || StyleParser.defaults.outline.color;\n            this.vertex_template[i++] = outline_color[0] * 255;\n            this.vertex_template[i++] = outline_color[1] * 255;\n            this.vertex_template[i++] = outline_color[2] * 255;\n            this.vertex_template[i++] = (style.outline_alpha != null ? style.outline_alpha : outline_color[3]) * 255;\n\n            // a_outline_edge - point outline edge (as % of point size where outline begins)\n            this.vertex_template[i++] = style.outline_edge_pct || StyleParser.defaults.outline.width;\n        }\n\n        if (add_custom_attribs) {\n            this.addCustomAttributesToVertexTemplate(style, i);\n        }\n        return this.vertex_template;\n    },\n\n    buildQuad(point, size, angle, angles, pre_angles, offset, offsets, texcoords, curve, vertex_data, vertex_template) {\n        if (size[0] <= 0 || size[1] <= 0) {\n            return 0; // size must be positive\n        }\n\n        return buildQuadForPoint(\n            point,\n            vertex_data,\n            vertex_template,\n            vertex_data.vertex_layout.index,\n            size,\n            offset,\n            offsets,\n            pre_angles,\n            angle * 4096, // angle values have a 12-bit fraction\n            angles,\n            texcoords,\n            curve\n        );\n    },\n\n    // Build quad for point sprite\n    build (style, context) {\n        let label = style.label;\n        if (label.type === 'curved') {\n            return this.buildCurvedLabel(label, style, context);\n        }\n        else {\n            return this.buildStraightLabel(label, style, context);\n        }\n    },\n\n    buildStraightLabel (label, style, context) {\n        let mesh = this.getTileMesh(context.tile, this.meshVariantTypeForDraw(style));\n        let vertex_template = this.makeVertexTemplate(style, mesh);\n\n        let size, texcoords;\n        if (label.type !== 'point') {\n            size = style.size[label.type];\n            texcoords = style.texcoords[label.type].texcoord;\n        }\n        else {\n            size = style.size;\n            texcoords = style.texcoords;\n        }\n\n        // setup style or label texture if applicable\n        mesh.uniforms = mesh.uniforms || {};\n        if (style.label_texture) {\n            mesh.uniforms.u_texture = style.label_texture;\n            mesh.uniforms.u_point_type = TANGRAM_POINT_TYPE_LABEL;\n            mesh.uniforms.u_apply_color_blocks = false;\n        }\n        else if (style.texture) {\n            mesh.uniforms.u_texture = style.texture;\n            mesh.uniforms.u_point_type = TANGRAM_POINT_TYPE_TEXTURE;\n            mesh.uniforms.u_apply_color_blocks = true;\n        }\n        else {\n            mesh.uniforms.u_texture = Texture.default; // ensure a tetxure is always bound to avoid GL warnings ('no texture bound to unit' in Chrome)\n            mesh.uniforms.u_point_type = TANGRAM_POINT_TYPE_SHADER;\n            mesh.uniforms.u_apply_color_blocks = true;\n        }\n\n        let offset = label.offset;\n\n        // TODO: instead of passing null, pass arrays with fingerprintable values\n        // This value is checked in the shader to determine whether to apply curving logic\n        let geom_count = this.buildQuad(\n            label.position,                 // position\n            size,                           // size in pixels\n            label.angle,                    // angle in radians\n            null,                           // placeholder for multiple angles\n            null,                           // placeholder for multiple pre_angles\n            offset,                         // offset from center in pixels\n            null,                           // placeholder for multiple offsets\n            texcoords,                      // texture UVs\n            false,                          // if curved boolean\n            mesh.vertex_data, vertex_template    // VBO and data for current vertex\n        );\n\n        // track label mesh buffer data\n        const linked = (style.linked && style.linked.label.id);\n        this.trackLabel(label, linked, mesh, geom_count, context);\n\n        return geom_count;\n    },\n\n    buildCurvedLabel (label, style, context) {\n        let mesh, vertex_template;\n        let geom_count = 0;\n\n        // two passes for stroke and fill, where stroke needs to be drawn first (painter's algorithm)\n        // this ensures strokes don't overlap on other fills\n\n        // pass for stroke\n        for (let i = 0; i < label.num_segments; i++){\n            let size = style.size[label.type][i];\n            let texcoord_stroke = style.texcoords_stroke[i];\n\n            // re-point to correct label texture\n            style.label_texture = style.label_textures[i];\n            mesh = this.getTileMesh(context.tile, this.meshVariantTypeForDraw(style));\n            vertex_template = this.makeVertexTemplate(style, mesh);\n\n            // add label texture uniform if needed\n            mesh.uniforms = mesh.uniforms || {};\n            mesh.uniforms.u_texture = style.label_texture;\n            mesh.uniforms.u_point_type = TANGRAM_POINT_TYPE_LABEL;\n            mesh.uniforms.u_apply_color_blocks = false;\n\n            let offset = label.offset || [0,0];\n            let position = label.position;\n\n            let angles = label.angles[i];\n            let offsets = label.offsets[i];\n            let pre_angles = label.pre_angles[i];\n\n            let seg_count = this.buildQuad(\n                position,                       // position\n                size,                           // size in pixels\n                label.angle,                    // angle in degrees\n                angles,                         // angles per segment\n                pre_angles,                     // pre_angle array (rotation applied before offseting)\n                offset,                         // offset from center in pixels\n                offsets,                        // offsets per segment\n                texcoord_stroke,                // texture UVs for stroked text\n                true,                           // if curved\n                mesh.vertex_data, vertex_template    // VBO and data for current vertex\n            );\n            geom_count += seg_count;\n\n            // track label mesh buffer data\n            const linked = (style.linked && style.linked.label.id);\n            this.trackLabel(label, linked, mesh, seg_count, context);\n        }\n\n        // pass for fill\n        for (let i = 0; i < label.num_segments; i++){\n            let size = style.size[label.type][i];\n            let texcoord = style.texcoords[label.type][i].texcoord;\n\n            // re-point to correct label texture\n            style.label_texture = style.label_textures[i];\n            mesh = this.getTileMesh(context.tile, this.meshVariantTypeForDraw(style));\n            vertex_template = this.makeVertexTemplate(style, mesh);\n\n            // add label texture uniform if needed\n            mesh.uniforms = mesh.uniforms || {};\n            mesh.uniforms.u_texture = style.label_texture;\n            mesh.uniforms.u_point_type = TANGRAM_POINT_TYPE_LABEL;\n            mesh.uniforms.u_apply_color_blocks = false;\n\n            let offset = label.offset || [0,0];\n            let position = label.position;\n\n            let angles = label.angles[i];\n            let offsets = label.offsets[i];\n            let pre_angles = label.pre_angles[i];\n\n            let seg_count = this.buildQuad(\n                position,                       // position\n                size,                           // size in pixels\n                label.angle,                    // angle in degrees\n                angles,                         // angles per segment\n                pre_angles,                     // pre_angle array (rotation applied before offseting)\n                offset,                         // offset from center in pixels\n                offsets,                        // offsets per segment\n                texcoord,                       // texture UVs for fill text\n                true,                           // if curved\n                mesh.vertex_data, vertex_template    // VBO and data for current vertex\n            );\n            geom_count += seg_count;\n\n            // track label mesh buffer data\n            const linked = (style.linked && style.linked.label.id);\n            this.trackLabel(label, linked, mesh, seg_count, context);\n        }\n\n        return geom_count;\n    },\n\n    // track mesh data for label on main thread, for additional cross-tile collision/repeat passes\n    trackLabel (label, linked, mesh, geom_count/*, context*/) {\n        // track if collision is enabled, or if the label is near enough to the tile edge to\n        // necessitate further repeat checking\n        if (label.layout.collide || label.may_repeat_across_tiles) {\n            mesh.labels = mesh.labels || {};\n            mesh.labels[label.id] = mesh.labels[label.id] || {\n                container: {\n                    label: label.toJSON(),\n                    linked,\n                },\n                ranges: [],\n                // debug: { // uncomment and pass in context for debugging\n                //     id: context.feature.properties.id,\n                //     name: context.feature.properties.name,\n                //     props: JSON.stringify(context.feature.properties),\n                //     point_type: mesh.uniforms.u_point_type\n                // }\n            };\n\n            // store byte ranges occupied by label in VBO, so they can be updated on main thread\n            const vertex_count = geom_count * 2; // geom count is triangles: 2 triangles = 1 quad = 4 vertices\n            const start = mesh.vertex_data.offset - mesh.vertex_data.stride * vertex_count; // start offset of byte range\n            mesh.labels[label.id].ranges.push([\n                start,\n                vertex_count\n            ]);\n        }\n    },\n\n    // Override to pass-through to generic point builder\n    buildLines (lines, style, context) {\n        return this.build(style, context);\n    },\n\n    buildPoints (points, style, context) {\n        return this.build(style, context);\n    },\n\n    buildPolygons (points, style, context) {\n        return this.build(style, context);\n    },\n\n    // Override\n    // Create or return desired vertex layout permutation based on flags\n    vertexLayoutForMeshVariant (variant) {\n        // Vertex layout only depends on shader point flag, so using it as layout key to avoid duplicate layouts\n        if (this.vertex_layouts[variant.shader_point] == null) {\n            // Attributes for this mesh variant\n            // Optional attributes have placeholder values assigned with `static` parameter\n            // TODO: could support optional attributes for selection and offset, but may not be worth it\n            // since points generally don't consume much memory anyway\n            const attribs = [\n                { name: 'a_position', size: 4, type: gl.SHORT, normalized: false },\n                { name: 'a_shape', size: 4, type: gl.SHORT, normalized: false },\n                { name: 'a_texcoord', size: 2, type: gl.UNSIGNED_SHORT, normalized: true, static: (variant.shader_point ? [0, 0] : null) },\n                { name: 'a_offset', size: 2, type: gl.SHORT, normalized: false },\n                { name: 'a_color', size: 4, type: gl.UNSIGNED_BYTE, normalized: true },\n                { name: 'a_selection_color', size: 4, type: gl.UNSIGNED_BYTE, normalized: true, static: (variant.selection ? null : [0, 0, 0, 0]) },\n                { name: 'a_outline_color', size: 4, type: gl.UNSIGNED_BYTE, normalized: true, static: (variant.shader_point ? null : [0, 0, 0, 0]) },\n                { name: 'a_outline_edge', size: 1, type: gl.FLOAT, normalized: false, static: (variant.shader_point ? null : 0) }\n            ];\n\n            this.addCustomAttributesToAttributeList(attribs);\n            this.vertex_layouts[variant.shader_point] = new VertexLayout(attribs);\n        }\n        return this.vertex_layouts[variant.shader_point];\n\n    },\n\n    // Override\n    meshVariantTypeForDraw (draw) {\n        const texture = draw.label_texture || draw.texture || SHADER_POINT_VARIANT; // unique key by texture name\n        const key = texture + '/' + draw.blend_order;\n        if (this.variants[key] == null) {\n            this.variants[key] = {\n                key,\n                selection: 1, // TODO: make this vary by draw params\n                shader_point: (texture === SHADER_POINT_VARIANT), // is shader point\n                blend_order: draw.blend_order,\n                mesh_order: (draw.label_texture ? 1 : 0) // put text on top of points (e.g. for highway shields, etc.)\n            };\n        }\n        return this.variants[key]; // return pre-calculated mesh variant\n    },\n\n    // Override\n    makeMesh (vertex_data, vertex_elements, options = {}) {\n        // Add label fade time\n        options = Object.assign({}, options, { fade_in_time: this.fade_in_time });\n        return Style.makeMesh.call(this, vertex_data, vertex_elements, options);\n    }\n\n});\n","import Label, {textLayoutToJSON} from './label';\nimport Vector from '../utils/vector';\nimport OBB from '../utils/obb';\n\nconst STOPS = [0, 0.33, 0.66, 0.99];        // zoom levels for curved label snapshot data (offsets and angles)\nconst LINE_EXCEED_STRAIGHT = 1.5;           // minimal ratio for straight labels (label length) / (line length)\nconst LINE_EXCEED_STRAIGHT_NO_CURVE = 1.8;  // minimal ratio for straight labels that have no curved option (like Arabic)\nconst LINE_EXCEED_STAIGHT_LOOSE = 2.3;      // 2nd pass minimal ratio for straight labels\nconst STRAIGHT_ANGLE_TOLERANCE = 0.1;       // multiple \"almost straight\" segments within this angle tolerance can be considered one straight segment (in radians)\nconst CURVE_MIN_TOTAL_COST = 1.3;           // curved line total curvature tolerance (sum in radians)\nconst CURVE_MIN_AVG_COST = 0.4;             // curved line average curvature tolerance (mean)\nconst CURVE_MAX_ANGLE = 1;                  // curved line singular curvature tolerance (value in radians)\nconst ORIENTED_LABEL_OFFSET_FACTOR = 1.2;   // multiply offset by this amount to avoid linked label collision\nconst VERTICAL_ANGLE_TOLERANCE = 0.01;      // nearly vertical lines considered vertical within this angle tolerance\n\nlet LabelLine = {\n    // Given a label's bounding box size and size of broken up individual segments\n    // return a label that fits along the line geometry that is either straight (preferred) or curved (if straight tolerances aren't met)\n    create : function(segment_sizes, total_size, line, layout){\n        // The passes done for fitting a label, and provided tolerances for each pass\n        // First straight is chosen with a low tolerance. Then curved. Then straight with a higher tolerance.\n        const passes = [\n            { type: 'straight', tolerance : (layout.no_curving) ? LINE_EXCEED_STRAIGHT_NO_CURVE : LINE_EXCEED_STRAIGHT },\n            { type: 'curved' },\n            { type: 'straight', tolerance : LINE_EXCEED_STAIGHT_LOOSE }\n        ];\n\n        // loop through passes. first label found wins.\n        for (let i = 0; i < passes.length; i++){\n            let check = passes[i];\n            let label;\n            if (check.type === 'straight'){\n                label = new LabelLineStraight(total_size, line, layout, check.tolerance);\n            }\n            else if (check.type === 'curved' && !layout.no_curving && line.length > 2){\n                label = new LabelLineCurved(segment_sizes, line, layout);\n            }\n\n            if (label && !label.throw_away) {\n                return label;\n            }\n        }\n\n        return false;\n    }\n};\n\nexport default LabelLine;\n\n// Base class for a labels.\nexport class LabelLineBase {\n    constructor (layout) {\n        this.id = Label.nextLabelId();\n        this.layout = layout;\n        this.position = [];\n        this.angle = 0;\n        this.offset = layout.offset.slice();\n        this.unit_scale = this.layout.units_per_pixel;\n        this.obbs = [];\n        this.aabbs = [];\n        this.type = ''; // \"curved\" or \"straight\" to be set by child class\n        this.throw_away = false; // boolean that determines if label should be discarded\n    }\n\n    // Minimal representation of label\n    toJSON () {\n        return {\n            id: this.id,\n            type: this.type,\n            position: this.position,\n            size: this.size,\n            offset: this.offset,\n            angle: this.angle,\n            breach: this.breach,\n            may_repeat_across_tiles: this.may_repeat_across_tiles,\n            layout: textLayoutToJSON(this.layout)\n        };\n    }\n\n    // Given a line, find the longest series of segments that maintains a constant orientation in the x-direction.\n    // This assures us that the line has no orientation flip, so text would not appear upside-down.\n    // If the line's orientation is reversed, the flip return value will be true, otherwise false\n    static splitLineByOrientation(line){\n        let current_line = [line[0]];\n        let current_length = 0;\n        let max_length = 0;\n        let orientation = 0;\n        let longest_line = current_line;\n        let flip = false;\n\n        for (let i = 1; i < line.length; i++) {\n            let pt = line[i];\n            let prev_pt = line[i - 1];\n            let length = Vector.length(Vector.sub(pt, prev_pt));\n\n            if (pt[0] > prev_pt[0]){\n                // positive orientation\n                if (orientation === 1){\n                    current_line.push(pt);\n                    current_length += length;\n                    if (current_length > max_length){\n                        longest_line = current_line;\n                        max_length = current_length;\n                        flip = false;\n                    }\n                }\n                else {\n                    current_line = [prev_pt, pt];\n                    current_length = length;\n                    if (current_length > max_length){\n                        longest_line = current_line;\n                        max_length = current_length;\n                        flip = false;\n                    }\n                    orientation = 1;\n                }\n            }\n            else if (pt[0] < prev_pt[0]) {\n                // negative orientation\n                if (orientation === -1){\n                    current_line.unshift(pt);\n                    current_length += length;\n                    if (current_length > max_length){\n                        longest_line = current_line;\n                        max_length = current_length;\n                        flip = true;\n                    }\n                }\n                else {\n                    // prepend points (reverse order)\n                    current_line = [pt, prev_pt];\n                    current_length = length;\n                    if (current_length > max_length){\n                        longest_line = current_line;\n                        max_length = current_length;\n                        flip = true;\n                    }\n                    orientation = -1;\n                }\n            }\n            else {\n                // vertical line (doesn't change previous orientation)\n                if (orientation === -1){\n                    current_line.unshift(pt);\n                }\n                else {\n                    current_line.push(pt);\n                    orientation = 1;\n                }\n\n                current_length += length;\n                if (current_length > max_length){\n                    longest_line = current_line;\n                    max_length = current_length;\n\n                    flip = (orientation === -1);\n                }\n            }\n        }\n\n        return [longest_line, flip];\n    }\n\n    // Checks each segment to see if it should be discarded (via collision). If any segment fails this test, they all fail.\n    discard(bboxes, exclude = null) {\n        if (this.throw_away) {\n            return true;\n        }\n\n        for (let i = 0; i < this.obbs.length; i++){\n            let aabb = this.aabbs[i];\n            let obb = this.obbs[i];\n            let obj = { aabb, obb };\n\n            let shouldDiscard = Label.prototype.occluded.call(obj, bboxes, exclude);\n            if (shouldDiscard) {\n                return true;\n            }\n        }\n        return false;\n    }\n\n    // Checks each segment to see if it is within the tile. If any segment fails this test, they all fail.\n    inTileBounds() {\n        for (let i = 0; i < this.aabbs.length; i++) {\n            let aabb = this.aabbs[i];\n            let obj = { aabb };\n            let in_bounds = Label.prototype.inTileBounds.call(obj);\n            if (!in_bounds) {\n                return false;\n            }\n        }\n        return true;\n    }\n\n    // Method to calculate oriented bounding box\n    // \"angle\" is the angle of the text segment, \"angle_offset\" is the angle applied to the offset.\n    // Offset angle is constant for the entire label, while segment angles are not.\n    static createOBB (position, width, height, angle, angle_offset, offset, upp) {\n        let p0 = position[0];\n        let p1 = position[1];\n\n        // apply offset, x positive, y pointing down\n        if (offset && (offset[0] !== 0 || offset[1] !== 0)) {\n            offset = Vector.rot(offset, angle_offset);\n            p0 += offset[0] * upp;\n            p1 -= offset[1] * upp;\n        }\n\n        // the angle of the obb is negative since it's the tile system y axis is pointing down\n        return new OBB(p0, p1, -angle, width, height);\n    }\n}\n\n// Class for straight labels.\n// Extends base LabelLine class.\nexport class LabelLineStraight extends LabelLineBase {\n    constructor (size, line, layout, tolerance){\n        super(layout);\n        this.type = 'straight';\n        this.size = size;\n        this.throw_away = !this.fit(size, line, layout, tolerance);\n    }\n\n    // Determine if the label can fit the geometry within provided tolerance\n    // A straight label is generally placed at segment midpoints, but can \"look ahead\" to further segments\n    // if they are within an angle bound given by STRAIGHT_ANGLE_TOLERANCE and place at the midpoint between non-consecutive segments\n    fit (size, line, layout, tolerance){\n        let upp = this.unit_scale;\n        let flipped; // boolean indicating if orientation of line is changed\n\n        // Make new copy of line, with consistent orientation\n        [line, flipped] = LabelLineBase.splitLineByOrientation(line);\n\n        // matches for \"left\" or \"right\" labels where the offset angle is dependent on the geometry\n        if (typeof layout.orientation === 'number'){\n            this.offset[1] += ORIENTED_LABEL_OFFSET_FACTOR * (size[1] - layout.vertical_buffer);\n\n            // if line is flipped, or the orientation is \"left\" (-1), flip the offset's y-axis\n            if (flipped){\n                this.offset[1] *= -1;\n            }\n\n            if (layout.orientation === -1){\n                this.offset[1] *= -1;\n            }\n        }\n\n        let line_lengths = getLineLengths(line);\n        let label_length = size[0] * upp;\n\n        // loop through line looking for a placement for the label\n        for (let i = 0; i < line.length - 1; i++){\n            let curr = line[i];\n\n            let curve_tolerance = 0;\n            let length = 0;\n            let ahead_index = i + 1;\n            let prev_angle;\n\n            // look ahead to further line segments within an angle tolerance\n            while (ahead_index < line.length){\n                let ahead_curr = line[ahead_index - 1];\n                let ahead_next = line[ahead_index];\n\n                let next_angle = getAngleForSegment(ahead_curr, ahead_next);\n\n                if (ahead_index !== i + 1){\n                    curve_tolerance += getAbsAngleDiff(next_angle, prev_angle);\n                }\n\n                // if curve tolerance is exceeded, break out of loop\n                if (Math.abs(curve_tolerance) > STRAIGHT_ANGLE_TOLERANCE){\n                    break;\n                }\n\n                length += line_lengths[ahead_index - 1];\n\n                // check if label fits geometry\n                if (calcFitness(length, label_length) < tolerance){\n                    let curr_midpt = Vector.mult(Vector.add(curr, ahead_next), 0.5);\n\n                    // TODO: modify angle if line chosen within curve_angle_tolerance\n                    // Currently line angle is the same as the starting angle, perhaps it should average across segments?\n                    this.angle = -next_angle;\n\n                    // ensure that all vertical labels point up (not down) by snapping angles close to pi/2 to -pi/2\n                    if (Math.abs(this.angle - Math.PI/2) < VERTICAL_ANGLE_TOLERANCE) {\n                        // flip angle and offset\n                        this.angle = -Math.PI/2;\n\n                        if (typeof layout.orientation === 'number'){\n                            this.offset[1] *= -1;\n                        }\n                    }\n\n                    this.position = curr_midpt;\n                    this.updateBBoxes(this.position, size, this.angle, this.angle, this.offset);\n                    return true; // use this placement\n                }\n\n                prev_angle = next_angle;\n                ahead_index++;\n            }\n        }\n\n        return false;\n    }\n\n    // Calculate bounding boxes\n    updateBBoxes(position, size, angle, angle_offset, offset) {\n        let upp = this.unit_scale;\n\n        // reset bounding boxes\n        this.obbs = [];\n        this.aabbs = [];\n\n        let width = (size[0] + 2 * this.layout.buffer[0]) * upp * Label.epsilon;\n        let height = (size[1] + 2 * this.layout.buffer[1]) * upp * Label.epsilon;\n\n        let obb = LabelLineBase.createOBB(position, width, height, angle, angle_offset, offset, upp);\n        let aabb = obb.getExtent();\n\n        this.obbs.push(obb);\n        this.aabbs.push(aabb);\n\n        if (this.inTileBounds) {\n            this.breach = !this.inTileBounds();\n        }\n\n        if (this.mayRepeatAcrossTiles) {\n            this.may_repeat_across_tiles = this.mayRepeatAcrossTiles();\n        }\n    }\n}\n\n// Class for curved labels\n// Extends base LabelLine class to support angles, pre_angles, offsets as arrays for each segment\nclass LabelLineCurved extends LabelLineBase {\n    constructor (segment_sizes, line, layout) {\n        super(layout);\n        this.type = 'curved';\n\n        // extra data for curved labels\n        this.angles = [];\n        this.pre_angles = [];\n        this.offsets = [];\n        this.num_segments = segment_sizes.length;\n        this.sizes = segment_sizes;\n\n        this.throw_away = !this.fit(this.sizes, line, layout);\n    }\n\n    // Minimal representation of label\n    toJSON () {\n        return {\n            id: this.id,\n            type: this.type,\n            obbs: this.obbs.map(o => o.toJSON()),\n            position: this.position,\n            breach: this.breach,\n            may_repeat_across_tiles: this.may_repeat_across_tiles,\n            layout: textLayoutToJSON(this.layout)\n        };\n    }\n\n    // Determine if the curved label can fit the geometry.\n    // No tolerance is provided because the label must fit entirely within the line geometry.\n    fit (size, line, layout){\n        let upp = this.unit_scale;\n        let flipped; // boolean determining if the line orientation is reversed\n\n        let height_px = Math.max(...size.map(s => s[1])); // use max segment height\n        let height = height_px * upp;\n\n        // Make new copy of line, with consistent orientation\n        [line, flipped] = LabelLineBase.splitLineByOrientation(line);\n\n        // matches for \"left\" or \"right\" labels where the offset angle is dependent on the geometry\n        if (typeof layout.orientation === 'number'){\n            this.offset[1] += ORIENTED_LABEL_OFFSET_FACTOR * (height_px - layout.vertical_buffer);\n\n            // if line is flipped, or the orientation is \"left\" (-1), flip the offset's y-axis\n            if (flipped){\n                this.offset[1] *= -1;\n            }\n\n            if (layout.orientation === -1){\n                this.offset[1] *= -1;\n            }\n        }\n\n        let line_lengths = getLineLengths(line);\n        let label_lengths = size.map(size => size[0] * upp);\n\n        let total_line_length = line_lengths.reduce((prev, next) => prev + next, 0);\n        let total_label_length = label_lengths.reduce((prev, next) => prev + next, 0);\n\n        // if label displacement is longer than the line, no fit can be possible\n        if (total_label_length > total_line_length){\n            return false;\n        }\n\n        // need two line segments for a curved label\n        // NB: single segment lines should still be labeled if possible during straight label placement pass\n        let start_index = 0, end_index = line.length-1;\n        if (end_index - start_index < 2){\n            return false;\n        }\n\n        // all positional offsets of the label are relative to the anchor\n        let anchor_index = LabelLineCurved.curvaturePlacement(line, total_line_length, line_lengths, total_label_length, start_index, end_index);\n        let anchor = line[anchor_index];\n\n        // if anchor not found, or greater than the end_index, no fit possible\n        if (anchor_index === -1 || end_index - anchor_index < 2){\n            return false;\n        }\n\n        // set start position at anchor position\n        this.position = anchor;\n\n        // Loop through labels at each zoom level stop\n        // TODO: Can be made faster since we are computing every segment for every zoom stop\n        // We can skip a segment's calculation once a segment's angle equals its fully zoomed angle\n        for (var i = 0; i < label_lengths.length; i++){\n            this.offsets[i] = [];\n            this.angles[i] = [];\n            this.pre_angles[i] = [];\n\n            // loop through stops (z = [0, .33, .66, .99] + base zoom)\n            for (var j = 0; j < STOPS.length; j++){\n                let stop = STOPS[j];\n\n                // scale the line geometry by the zoom magnification\n                let [new_line, line_lengths] = LabelLineCurved.scaleLine(stop, line);\n                anchor = new_line[anchor_index];\n\n                // calculate label data relative to anchor position\n                let {positions, offsets, angles, pre_angles} = LabelLineCurved.placeAtIndex(anchor_index, new_line, line_lengths, label_lengths);\n\n                // translate 2D offsets into \"polar coordinates\"\" (1D distances with angles)\n                let offsets1d = offsets.map(offset => {\n                    return Math.sqrt(offset[0] * offset[0] + offset[1] * offset[1]) / upp;\n                });\n\n                // Calculate everything that is independent of zoom level (angle for offset, bounding boxes, etc)\n                if (stop === 0){\n                    // use average angle for a global label offset (if offset is specified)\n                    this.angle = 1 / angles.length * angles.reduce((prev, next) => prev + next);\n\n                    // calculate bounding boxes for collision at zoom level 0\n                    for (let i = 0; i < positions.length; i++){\n                        let position = positions[i];\n                        let pre_angle = pre_angles[i];\n                        let width = label_lengths[i];\n                        let angle_segment = pre_angle + angles[i];\n                        let angle_offset = this.angle;\n\n                        let obb = LabelLineBase.createOBB(position, width, height, angle_segment, angle_offset, this.offset, upp);\n                        let aabb = obb.getExtent();\n\n                        this.obbs.push(obb);\n                        this.aabbs.push(aabb);\n                    }\n                }\n\n                // push offsets/angles/pre_angles for each zoom and for each label segment\n                this.offsets[i].push(offsets1d[i]);\n                this.angles[i].push(angles[i]);\n                this.pre_angles[i].push(pre_angles[i]);\n            }\n        }\n\n        return true;\n    }\n\n    // Find optimal starting segment for placing a curved label along a line within provided tolerances\n    // This is determined by calculating the curvature at each interior vertex of a line\n    // then construct a \"window\" whose breadth is the length of the label. Place this label at each vertex\n    // and add the curvatures of each vertex within the window. The vertex mimimizing this value is the \"best\" placement.\n    // Return -1 is no placement found.\n    static curvaturePlacement(line, total_line_length, line_lengths, label_length, start_index, end_index){\n        start_index = start_index || 0;\n        end_index = end_index || line.length - 1;\n\n        var curvatures = []; // array of curvature values per line vertex\n\n        // calculate curvature values\n        for (let i = start_index + 1; i < end_index; i++){\n            var prev = line[i - 1];\n            var curr = line[i];\n            var next = line[i + 1];\n\n            var norm_1 = Vector.perp(curr, prev);\n            var norm_2 = Vector.perp(next, curr);\n\n            var curvature = Vector.angleBetween(norm_1, norm_2);\n\n            // If curvature at a vertex is greater than the tolerance, remove it from consideration\n            // by giving it an infinite penalty\n            if (curvature > CURVE_MAX_ANGLE) {\n                curvature = Infinity;\n            }\n\n            curvatures.push(curvature);\n        }\n\n        curvatures.push(Infinity); // Infinite penalty for going off end of line\n\n        // calculate curvature costs\n        var total_costs = [];\n        var avg_costs = [];\n        var line_index = start_index;\n        var position = 0;\n\n        for (let i = 0; i < start_index; i++){\n            position += line_lengths[i];\n        }\n\n        // move window along line, starting at first vertex\n        while (position + label_length < total_line_length){\n            // define window breadth\n            var window_start = position;\n            var window_end = window_start + label_length;\n\n            var line_position = window_start;\n            var ahead_index = line_index;\n            var cost = 0;\n\n            // iterate through points on line intersecting window\n            while (ahead_index < end_index && line_position + line_lengths[ahead_index] < window_end){\n                cost += curvatures[ahead_index];\n                if (cost === Infinity) {\n                    break; // no further progress can be made\n                }\n\n                line_position += line_lengths[ahead_index];\n                ahead_index++;\n            }\n\n            // if optimal cost, break out\n            if (cost === 0) {\n                return line_index;\n            }\n\n            var avg_cost = cost / (ahead_index - line_index);\n\n            total_costs.push(cost);\n            avg_costs.push(avg_cost);\n\n            position += line_lengths[line_index];\n            line_index++;\n        }\n\n        if (total_costs.length === 0) {\n            return -1;\n        }\n\n        // calculate min cost and avg cost to determine if label can fit within curvatures tolerances\n        var min_total_cost = Math.min.apply(null, total_costs);\n        var min_index = total_costs.indexOf(min_total_cost);\n        var min_avg_cost = avg_costs[min_index];\n\n        if (min_total_cost < CURVE_MIN_TOTAL_COST && min_avg_cost < CURVE_MIN_AVG_COST){\n            // return index with best placement (least curvature)\n            return total_costs.indexOf(min_total_cost);\n        }\n        else {\n            // if tolerances aren't satisfied, throw away tile\n            return -1;\n        }\n    }\n\n    // Scale the line by a scale factor (used for computing the angles and offsets at fractional zoom levels)\n    // Return the new line positions and their lengths\n    static scaleLine(scale, line){\n        var new_line = [line[0]];\n        var line_lengths = [];\n\n        line.forEach((pt, i) => {\n            if (i === line.length - 1) {\n                return;\n            }\n            var v = Vector.sub(line[i+1], line[i]);\n            var delta = Vector.mult(v, 1 + scale);\n\n            new_line.push(Vector.add(new_line[i], delta));\n            line_lengths.push(Vector.length(delta));\n        });\n\n        return [new_line, line_lengths];\n    }\n\n    // Place a label at a given line index\n    static placeAtIndex(anchor_index, line, line_lengths, label_lengths){\n        let anchor = line[anchor_index];\n\n        // Use flat coordinates. Get nearest line vertex index, and offset from the vertex for all labels.\n        let [indices, relative_offsets] = LabelLineCurved.getIndicesAndOffsets(anchor_index, line_lengths, label_lengths);\n\n        // get 2D positions based on \"flat\" indices and offsets\n        let positions = LabelLineCurved.getPositionsFromIndicesAndOffsets(line, indices, relative_offsets);\n\n        // get 2d offsets, angles and pre_angles relative to anchor\n        let [offsets, angles, pre_angles] = LabelLineCurved.getAnglesFromIndicesAndOffsets(anchor, indices, line, positions);\n\n        return {positions, offsets, angles, pre_angles};\n    }\n\n    // Given label lengths to place along a line broken into several lengths, computer what indices and at which offsets\n    // the labels will appear on the line. Assume the line is straight, as it is not necessary to consider angles.\n    //\n    // Label lengths:\n    // |-----|----|-----|-----------------|-------------|\n    //\n    // Line Lengths;\n    // |---------|---------|-------------|------------|----------|-------|\n    //\n    // Result: indices: [0,0,1,1,3,4]\n    static getIndicesAndOffsets(line_index, line_lengths, label_lengths){\n        let num_labels = label_lengths.length;\n\n        let indices = [];\n        let offsets = [];\n\n        let label_index = 0;\n        let label_offset = 0;\n        let line_offset = 0;\n\n        // iterate along line\n        while (label_index < num_labels){\n            let label_length = label_lengths[label_index];\n\n            // iterate along labels within the line segment\n            while (label_index < num_labels && label_offset + 0.5 * label_length <= line_offset + line_lengths[line_index]){\n                let offset = label_offset - line_offset + 0.5 * label_length;\n                offsets.push(offset);\n                indices.push(line_index);\n\n                label_offset += label_length;\n                label_index++;\n                label_length = label_lengths[label_index];\n            }\n\n            line_offset += line_lengths[line_index];\n            line_index++;\n        }\n\n        return [indices, offsets];\n    }\n\n    // Given indices and 1D offsets on a line, compute their 2D positions\n    static getPositionsFromIndicesAndOffsets(line, indices, offsets){\n        let positions = [];\n        for (let i = 0; i < indices.length; i++){\n            let index = indices[i];\n            let offset = offsets[i];\n\n            let angle = getAngleForSegment(line[index], line[index + 1]);\n\n            let offset2d = Vector.rot([offset, 0], angle);\n            let position = Vector.add(line[index], offset2d);\n\n            positions.push(position);\n        }\n\n        return positions;\n    }\n\n    // Given indices and 1D offsets on a line, compute their angles and pre-angles from a reference anchor point\n    static getAnglesFromIndicesAndOffsets(anchor, indices, line, positions){\n        let angles = [];\n        let pre_angles = [];\n        let offsets = [];\n\n        for (let i = 0; i < positions.length; i++){\n            let position = positions[i];\n            let index = indices[i];\n\n            let offset = Vector.sub(position, anchor);\n            let offset_angle = -Vector.angle(offset);\n\n            let angle = getTextAngleForSegment(line[index], line[index + 1]);\n            let pre_angle = angle - offset_angle;\n\n            if (i > 0){\n                let prev_angle = angles[i - 1];\n                let prev_pre_angle = pre_angles[i - 1];\n                if (Math.abs(offset_angle - prev_angle) > Math.PI) {\n                    offset_angle += (offset_angle > prev_angle) ? -2 * Math.PI : 2 * Math.PI;\n                }\n                if (Math.abs(prev_pre_angle - pre_angle) > Math.PI) {\n                    pre_angle += (pre_angle > prev_pre_angle) ? -2 * Math.PI : 2 * Math.PI;\n                }\n            }\n\n            angles.push(offset_angle);\n            pre_angles.push(pre_angle);\n            offsets.push(offset);\n        }\n\n        return [offsets, angles, pre_angles];\n    }\n}\n\n// Fitness function (label length / line length)\nfunction calcFitness(line_length, label_length) {\n    return label_length / line_length;\n}\n\nfunction getAngleForSegment(p, q){\n    let pq = Vector.sub(q,p);\n    return Vector.angle(pq);\n}\n\nfunction getTextAngleForSegment(pt1, pt2) {\n    return -getAngleForSegment(pt1, pt2);\n}\n\nfunction getLineLengths(line){\n    let lengths = [];\n    for (let i = 0; i < line.length - 1; i++){\n        let p = line[i];\n        let q = line[i+1];\n        let length = Math.hypot(p[0] - q[0], p[1] - q[1]);\n        lengths.push(length);\n    }\n    return lengths;\n}\n\nfunction getAbsAngleDiff(angle1, angle2){\n    let small, big;\n    if (angle1 > angle2){\n        small = angle2;\n        big = angle1;\n    }\n    else {\n        small = angle1;\n        big = angle2;\n    }\n\n    while (big - small > Math.PI){\n        small += 2 * Math.PI;\n    }\n\n    return Math.abs(big - small);\n}\n","// Text rendering style\n\nimport Geo from '../../utils/geo';\nimport {Style} from '../style';\nimport {Points} from '../points/points';\nimport Collision from '../../labels/collision';\nimport LabelPoint from '../../labels/label_point';\nimport LabelLine from '../../labels/label_line';\nimport gl from '../../gl/constants'; // web workers don't have access to GL context, so import all GL constants\nimport VertexLayout from '../../gl/vertex_layout';\n\nexport let TextStyle = Object.create(Points);\n\nObject.assign(TextStyle, {\n    name: 'text',\n    super: Points,\n    built_in: true,\n\n    init(options = {}) {\n        Style.init.call(this, options);\n\n        // Shader defines\n        this.setupDefines();\n\n        // Omit some code for SDF-drawn shader points\n        this.defines.TANGRAM_HAS_SHADER_POINTS = false;\n\n        // Indicate vertex shader should apply zoom-interpolated offsets and angles for curved labels\n        this.defines.TANGRAM_CURVED_LABEL = true;\n\n        this.reset();\n    },\n\n    /**\n     * A \"template\" that sets constant attibutes for each vertex, which is then modified per vertex or per feature.\n     * A plain JS array matching the order of the vertex layout.\n     */\n    makeVertexTemplate(style, mesh) {\n        this.super.makeVertexTemplate.call(this, style, mesh, /* add_custom_attribs */ false);\n        let vertex_layout = mesh.vertex_data.vertex_layout;\n        let i = vertex_layout.index.a_pre_angles;\n\n        // a_pre_angles.xyzw - rotation of entire curved label\n        // a_angles.xyzw - angle of each curved label segment\n        // a_offsets.xyzw - offset of each curved label segment\n        for (let j=0; j < 12; j++) {\n            this.vertex_template[i++] = 0;\n        }\n\n        this.addCustomAttributesToVertexTemplate(style, i);\n        return this.vertex_template;\n    },\n\n    reset() {\n        this.queues = {};\n        this.resetText();\n    },\n\n    // Override to queue features instead of processing immediately\n    addFeature (feature, draw, context) {\n        let tile = context.tile;\n        if (tile.generation !== this.generation) {\n            return;\n        }\n\n        let type = feature.geometry.type;\n        draw.can_articulate = (type === 'LineString' || type === 'MultiLineString');\n\n        // supersample text rendering for angled labels, to improve clarity\n        draw.supersample_text = (type === 'LineString' || type === 'MultiLineString');\n\n        let q = this.parseTextFeature(feature, draw, context, tile);\n        if (!q) {\n            return;\n        }\n\n        // text can be an array if a `left` or `right` orientation key is defined for the text source\n        // in which case, push both text sources to the queue\n        if (q instanceof Array){\n            q.forEach(q => {\n                q.feature = feature;\n                q.context = context;\n                q.layout.vertex = false; // vertex placement option not applicable to standalone labels\n                this.queueFeature(q, tile); // queue the feature for later processing\n            });\n        }\n        else {\n            q.feature = feature;\n            q.context = context;\n            q.layout.vertex = false; // vertex placement option not applicable to standalone labels\n            this.queueFeature(q, tile); // queue the feature for later processing\n        }\n\n        // Register with collision manager\n        Collision.addStyle(this.name, tile.id);\n    },\n\n    // Override\n    async endData (tile) {\n        let queue = this.queues[tile.id];\n        delete this.queues[tile.id];\n\n        const { labels, texts, textures } = await this.collideAndRenderTextLabels(tile, this.name, queue);\n\n        if (labels && texts) {\n            this.texts[tile.id] = texts;\n\n            // Build queued features\n            labels.forEach(q => {\n                let text_settings_key = q.text_settings_key;\n                let text_info =\n                    this.texts[tile.id][text_settings_key] &&\n                    this.texts[tile.id][text_settings_key][q.text];\n\n                // setup styling object expected by Style class\n                let style = this.feature_style;\n                style.label = q.label;\n\n                if (text_info.text_settings.can_articulate){\n                    // unpack logical sizes of each segment into an array for the style\n                    style.size = {};\n                    style.texcoords = {};\n\n                    if (q.label.type === 'straight'){\n                        style.size.straight = text_info.size.logical_size;\n                        style.texcoords.straight = text_info.texcoords.straight;\n                        style.label_texture = textures[text_info.texcoords.straight.texture_id];\n                    }\n                    else{\n                        style.size.curved = text_info.segment_sizes.map(function(size){ return size.logical_size; });\n                        style.texcoords_stroke = text_info.texcoords_stroke;\n                        style.texcoords.curved = text_info.texcoords.curved;\n                        style.label_textures = text_info.texcoords.curved.map(t => textures[t.texture_id]);\n                    }\n                }\n                else {\n                    style.size = text_info.size.logical_size;\n                    style.texcoords = text_info.align[q.label.align].texcoords;\n                    style.label_texture = textures[text_info.align[q.label.align].texture_id];\n                }\n\n                style.blend_order = q.draw.blend_order; // copy pre-computed blend order\n                Style.addFeature.call(this, q.feature, q.draw, q.context);\n            });\n        }\n        this.freeText(tile);\n\n        // Finish tile mesh\n        const tile_data = await Style.endData.call(this, tile);\n        if (tile_data) {\n            // Attach tile-specific label atlas to mesh as a texture uniform\n            if (textures && textures.length) {\n                tile_data.textures.push(...textures); // assign texture ownership to tile\n            }\n\n            // Always apply shader blocks to standalone text\n            for (let m in tile_data.meshes) {\n                tile_data.meshes[m].uniforms.u_apply_color_blocks = true;\n            }\n        }\n\n        return tile_data;\n    },\n\n    // Sets up caching for draw properties\n    _preprocess (draw) {\n        draw.blend_order = this.getBlendOrderForDraw(draw); // from draw block, or fall back on default style blend order\n        return this.preprocessText(draw);\n    },\n\n    // Implements label building for TextLabels mixin\n    buildTextLabels (tile, feature_queue) {\n        let labels = [];\n        for (let f=0; f < feature_queue.length; f++) {\n            let fq = feature_queue[f];\n            let text_info = this.texts[tile.id][fq.text_settings_key][fq.text];\n            let feature_labels;\n\n            fq.layout.vertical_buffer = text_info.vertical_buffer;\n\n            if (text_info.text_settings.can_articulate){\n                var sizes = text_info.segment_sizes.map(size => size.collision_size);\n                fq.layout.no_curving = text_info.no_curving;\n                feature_labels = this.buildLabels(sizes, fq.feature.geometry, fq.layout, text_info.size.collision_size);\n            }\n            else {\n                feature_labels = this.buildLabels(text_info.size.collision_size, fq.feature.geometry, fq.layout);\n            }\n            for (let i = 0; i < feature_labels.length; i++) {\n                let fql = Object.create(fq);\n                fql.label = feature_labels[i];\n                labels.push(fql);\n            }\n        }\n        return labels;\n    },\n\n    // Builds one or more labels for a geometry\n    buildLabels (size, geometry, layout, total_size) {\n        let labels = [];\n\n        if (geometry.type === 'LineString') {\n            Array.prototype.push.apply(labels, this.buildLineLabels(geometry.coordinates, size, layout, total_size));\n        } else if (geometry.type === 'MultiLineString') {\n            let lines = geometry.coordinates;\n            for (let i = 0; i < lines.length; ++i) {\n                Array.prototype.push.apply(labels, this.buildLineLabels(lines[i], size, layout, total_size));\n            }\n        } else if (geometry.type === 'Point') {\n            labels.push(new LabelPoint(geometry.coordinates, size, layout));\n        } else if (geometry.type === 'MultiPoint') {\n            let points = geometry.coordinates;\n            for (let i = 0; i < points.length; ++i) {\n                labels.push(new LabelPoint(points[i], size, layout));\n            }\n        } else if (geometry.type === 'Polygon') {\n            let centroid = Geo.centroid(geometry.coordinates);\n            if (centroid) { // skip degenerate polygons\n                labels.push(new LabelPoint(centroid, size, layout));\n            }\n        } else if (geometry.type === 'MultiPolygon') {\n            let centroid = Geo.multiCentroid(geometry.coordinates);\n            if (centroid) { // skip degenerate polygons\n                labels.push(new LabelPoint(centroid, size, layout));\n            }\n        }\n\n        return labels;\n    },\n\n    // Build one or more labels for a line geometry\n    buildLineLabels (line, size, layout, total_size) {\n        let labels = [];\n        let subdiv = Math.min(layout.subdiv, line.length - 1);\n        if (subdiv > 1) {\n            // Create multiple labels for line, with each allotted a range of segments\n            // in which it will attempt to place\n            let seg_per_div = (line.length - 1) / subdiv;\n            for (let i = 0; i < subdiv; i++) {\n                let start = Math.floor(i * seg_per_div);\n                let end = Math.floor((i + 1) * seg_per_div) + 1;\n                let line_segment = line.slice(start, end);\n\n                let label = LabelLine.create(size, total_size, line_segment, layout);\n                if (label){\n                    labels.push(label);\n                }\n            }\n        }\n\n        // Consider full line for label placement if no subdivisions requested, or as last resort if not enough\n        // labels placed (e.g. fewer than requested subdivisions)\n        // TODO: refactor multiple label placements per line / move into label placement class for better effectiveness\n        if (labels.length < subdiv) {\n            let label = LabelLine.create(size, total_size, line, layout);\n            if (label){\n                labels.push(label);\n            }\n        }\n        return labels;\n    },\n\n    // Override\n    // Create or return vertex layout\n    vertexLayoutForMeshVariant(variant) {\n        // Vertex layout only depends on shader point flag, so using it as layout key to avoid duplicate layouts\n        if (this.vertex_layouts[variant.shader_point] == null) {\n            // TODO: could make selection, offset, and curved label attribs optional, but may not be worth it\n            // since text points generally don't consume much memory anyway\n            const attribs = [\n                { name: 'a_position', size: 4, type: gl.SHORT, normalized: false },\n                { name: 'a_shape', size: 4, type: gl.SHORT, normalized: false },\n                { name: 'a_texcoord', size: 2, type: gl.UNSIGNED_SHORT, normalized: true },\n                { name: 'a_offset', size: 2, type: gl.SHORT, normalized: false },\n                { name: 'a_color', size: 4, type: gl.UNSIGNED_BYTE, normalized: true },\n                { name: 'a_selection_color', size: 4, type: gl.UNSIGNED_BYTE, normalized: true, static: (variant.selection ? null : [0, 0, 0, 0]) },\n                { name: 'a_pre_angles', size: 4, type: gl.BYTE, normalized: false },\n                { name: 'a_angles', size: 4, type: gl.SHORT, normalized: false },\n                { name: 'a_offsets', size: 4, type: gl.UNSIGNED_SHORT, normalized: false },\n            ];\n\n            this.addCustomAttributesToAttributeList(attribs);\n            this.vertex_layouts[variant.shader_point] = new VertexLayout(attribs);\n        }\n        return this.vertex_layouts[variant.shader_point];\n    },\n});\n\nTextStyle.texture_id = 0; // namespaces per-tile label textures\n","// Raster tile rendering style\n\nimport StyleParser from '../style_parser';\nimport {Polygons} from '../polygons/polygons';\n\nexport let RasterStyle = Object.create(Polygons);\n\nObject.assign(RasterStyle, {\n    name: 'raster',\n    super: Polygons,\n    built_in: true,\n\n    init() {\n        // Required for raster tiles\n        this.raster = this.raster || 'color';\n\n        this.super.init.apply(this, arguments);\n\n        this.selection = false; // raster styles can't support feature selection\n    },\n\n    _preprocess (draw) {\n        // Raster tiles default to white vertex color, as this color will tint the underlying texture\n        draw.color = draw.color || StyleParser.defaults.color;\n        return this.super._preprocess.apply(this, arguments);\n    }\n\n});\n","// Manage rendering styles\nimport ShaderProgram from '../gl/shader_program';\nimport mergeObjects from '../utils/merge';\nimport Geo from '../utils/geo';\nimport WorkerBroker from '../utils/worker_broker';\nimport log from '../utils/log';\n\nimport {Polygons} from './polygons/polygons';\nimport {Lines} from './lines/lines';\nimport {Points} from './points/points';\nimport {TextStyle} from './text/text';\nimport {RasterStyle} from './raster/raster';\n\nimport style_globals_source from './style_globals.glsl';\nimport selection_globals_source from '../selection/selection_globals.glsl';\nimport selection_vertex_source from '../selection/selection_vertex.glsl';\n\nexport class StyleManager {\n\n    constructor () {\n        this.styles = {};\n        this.base_styles = {};\n        this.active_styles = [];\n        this.active_blend_orders = [];\n\n        // Add built-in rendering styles\n        this.register(Object.create(Polygons));\n        this.register(Object.create(Lines));\n        this.register(Object.create(Points));\n        this.register(Object.create(TextStyle));\n        this.register(Object.create(RasterStyle));\n    }\n\n    // Global configuration for all styles\n    init () {\n        ShaderProgram.removeBlock('global');\n        ShaderProgram.removeBlock('setup');\n\n        // Model and world position accessors, layer re-ordering function\n        ShaderProgram.addBlock('global', style_globals_source);\n\n        // Feature selection global\n        ShaderProgram.addBlock('global', selection_globals_source);\n\n        // Feature selection vertex shader support\n        ShaderProgram.replaceBlock('setup', selection_vertex_source);\n\n        // Minimum value for float comparisons\n        ShaderProgram.defines.TANGRAM_EPSILON = 0.00001;\n\n        // Minimum depth buffer value separating each `order` unit\n        // Assume min 16-bit depth buffer, in practice uses 14-bits, 1 extra bit to handle virtual half-layers\n        // for outlines (inserted in between layers), another extra bit to prevent precision loss\n        ShaderProgram.defines.TANGRAM_LAYER_DELTA = 1 / (1 << 14);\n\n        // Internal tile scale\n        ShaderProgram.defines.TANGRAM_TILE_SCALE =\n            `vec3(${Geo.tile_scale}., ${Geo.tile_scale}., u_meters_per_pixel * ${Geo.tile_size}.)`;\n\n        // Increases precision for height values\n        ShaderProgram.defines.TANGRAM_HEIGHT_SCALE = Geo.height_scale;\n\n        // Alpha discard threshold (substitute for alpha blending)\n        ShaderProgram.defines.TANGRAM_ALPHA_TEST = 0.5;\n    }\n\n    // Destroy all styles for a given GL context\n    destroy (gl) {\n        Object.keys(this.styles).forEach((_name) => {\n            let style = this.styles[_name];\n            if (style.gl === gl) {\n                log('trace', `StyleManager.destroy: destroying render style ${style.name}`);\n\n                if (style.base) {\n                    this.remove(style.name);\n                }\n                style.destroy();\n            }\n        });\n    }\n\n    // Register a style\n    register (style) {\n        this.styles[style.name] = style;\n        this.base_styles[style.name] = style;\n    }\n\n    // Remove a style\n    remove (name) {\n        delete this.styles[name];\n    }\n\n    getActiveStyles () {\n        return this.active_styles;\n    }\n\n    // Get list of active styles based on a set of tiles\n    updateActiveStyles (tiles) {\n        this.active_styles = Object.keys(\n            tiles.reduce((active, tile) => {\n                Object.keys(tile.meshes).forEach(s => active[s] = true);\n                return active;\n            }, {})\n        );\n        return this.active_styles;\n    }\n\n    getActiveBlendOrders () {\n        return this.active_blend_orders;\n    }\n\n    updateActiveBlendOrders (tiles) {\n        const orders = [];\n        tiles.forEach(tile => {\n            Object.entries(tile.meshes)\n                .forEach(([style, style_meshes]) => { // for each tile's set of meshes, keyed by style name\n                    style_meshes.forEach(mesh => { // for each style's list of meshes\n                        // find entry for this mesh's blend order, insert if first entry\n                        const blend_order = mesh.variant.blend_order;\n                        let oi = orders.findIndex(x => x.blend_order === blend_order);\n                        oi = oi > -1 ? oi : orders.push({ blend_order, styles: [] }) - 1;\n\n                        // add style to list for this blend order\n                        if (orders[oi].styles.indexOf(style) === -1) {\n                            orders[oi].styles.push(style);\n                        }\n                    });\n                });\n        });\n\n        // sort ascending by blend order\n        this.active_blend_orders = orders.sort((a, b) => a.blend_order - b.blend_order);\n    }\n\n    mix (style, styles) {\n        // Exit early if we have already applied mixins to this style\n        if (style.mixed) {\n            return style;\n        }\n        style.mixed = {};\n\n        // Mixin sources, in order\n        let sources = [];\n        if (style.mix) {\n            if (Array.isArray(style.mix)) {\n                sources.push(...style.mix);\n            }\n            else {\n                sources.push(style.mix);\n            }\n            sources = sources.map(x => styles[x]).filter(x => x && x !== style); // TODO: warning on trying to mix into self\n\n            // Track which styles were mixed into this one\n            sources.forEach(s => style.mixed[s.name] = true);\n        }\n        sources.push(style);\n\n        // Flags - OR'd, true if any style has it set\n        style.animated = sources.some(x => x && x.animated);\n        style.texcoords = sources.some(x => x && x.texcoords);\n\n        // Overwrites - last definition wins\n        style.base = sources.map(x => x.base).filter(x => x).pop();\n        style.lighting = sources.map(x => x.lighting).filter(x => x != null).pop();\n        style.texture = sources.map(x => x.texture).filter(x => x).pop();\n        style.raster = sources.map(x => x.raster).filter(x => x != null).pop();\n        style.dash = sources.map(x => x.dash).filter(x => x != null).pop();\n        style.dash_background_color = sources.map(x => x.dash_background_color).filter(x => x != null).pop();\n        if (sources.some(x => Object.prototype.hasOwnProperty.call(x, 'blend') && x.blend)) {\n            // only mix blend if explicitly set, otherwise let base style choose blending mode\n            // hasOwnProperty check gives preference to base style prototype\n            style.blend = sources.map(x => Object.prototype.hasOwnProperty.call(x, 'blend') && x.blend).filter(x => x).pop();\n        }\n        style.blend_order = sources.map(x => x.blend_order).filter(x => x != null).pop();\n\n        // Merges - property-specific rules for merging values\n        style.defines = Object.assign({}, ...sources.map(x => x.defines).filter(x => x)); // internal defines (not user-defined)\n        style.material = Object.assign({}, ...sources.map(x => x.material).filter(x => x));\n\n        let draws = sources.map(x => x.draw).filter(x => x); // draw defaults\n        if (draws.length > 0) {\n            style.draw = mergeObjects({}, ...draws);\n        }\n\n        // Mix shader properties\n        this.mixShaders(style, styles, sources);\n        return style;\n    }\n\n    // Mix the propertes in the \"shaders\" block\n    mixShaders (style, styles, sources) {\n        let shaders = {}; // newly mixed shaders properties\n        let shader_merges = sources.map(x => x.shaders).filter(x => x); // just the source styles with shader properties\n\n        // Defines\n        shaders.defines = Object.assign({}, ...shader_merges.map(x => x.defines).filter(x => x));\n\n        // Attributes\n        shaders.attributes = Object.assign({}, ...shader_merges.map(x => x.attributes).filter(x => x));\n\n        // Uniforms\n        shaders.uniforms = {};  // uniforms for this style, both explicitly defined, and mixed from other styles\n        shaders._uniforms = (style.shaders && style.shaders.uniforms) || {}; // uniforms explicitly defined by *this* style\n        shaders._uniform_scopes = {}; // tracks which style each uniform originated from (this one, or ancestor)\n\n        // Mix in uniforms from ancestors, providing means to access\n        sources\n            .filter(x => x.shaders && x.shaders.uniforms)\n            .forEach(x => {\n                for (let u in x.shaders.uniforms) {\n                    shaders._uniform_scopes[u] = x.name;\n\n                    // Define getter and setter for this uniform\n                    // Getter returns value for this style if present, otherwise asks appropriate ancestor for it\n                    // Setter sets the value for this style (whether previously present in this style or not)\n                    // Mimics JS prototype/hasOwnProperty behavior, but with multiple ancestors (via mixins)\n                    Object.defineProperty(shaders.uniforms, u, {\n                        enumerable: true,\n                        configurable: true,\n                        get: function () {\n                            // Uniform is explicitly defined on this style\n                            if (shaders._uniforms[u] !== undefined) {\n                                return shaders._uniforms[u];\n                            }\n                            // Uniform was mixed from another style, forward request there\n                            // Identity check is needed to prevent infinite recursion if a previously defined uniform\n                            // is set to undefined\n                            else if (styles[shaders._uniform_scopes[u]].shaders.uniforms !== shaders.uniforms) {\n                                return styles[shaders._uniform_scopes[u]].shaders.uniforms[u];\n                            }\n                            return undefined;\n                        },\n                        set: function (v) {\n                            shaders._uniforms[u] = v;\n                        }\n                    });\n                }\n            });\n\n        // Extensions: build a list of unique extensions\n        shaders.extensions = Object.keys(shader_merges\n            .map(x => x.extensions)\n            .filter(x => x)\n            .reduce((prev, cur) => {\n                // single extension\n                if (typeof cur === 'string') {\n                    prev[cur] = true;\n                }\n                // array of extensions\n                else {\n                    cur.forEach(x => prev[x] = true);\n                }\n                return prev;\n            }, {}) || {}\n        );\n\n        // Shader blocks\n        // Mark all shader blocks for the target style as originating with its own name\n        if (style.shaders && style.shaders.blocks) {\n            style.shaders.block_scopes = style.shaders.block_scopes || {};\n            for (let k in style.shaders.blocks) {\n                let block = style.shaders.blocks[k];\n                style.shaders.block_scopes[k] = style.shaders.block_scopes[k] || [];\n                if (Array.isArray(block)) {\n                    style.shaders.block_scopes[k].push(...block.map(() => style.name));\n                }\n                else {\n                    style.shaders.block_scopes[k].push(style.name);\n                }\n            }\n        }\n\n        // Merge shader blocks, keeping track of which style each block originated from\n        let mixed = {}; // all scopes mixed so far\n        shader_merges.forEach(source => {\n            if (!source.blocks) {\n                return;\n            }\n\n            shaders.blocks = shaders.blocks || {};\n            shaders.block_scopes = shaders.block_scopes || {};\n            let mixed_source = {}; // scopes mixed for this source style\n\n            for (let t in source.blocks) {\n                let block = source.blocks[t];\n                let block_scope = source.block_scopes[t];\n\n                shaders.blocks[t] = shaders.blocks[t] || [];\n                shaders.block_scopes[t] = shaders.block_scopes[t] || [];\n\n                // standardize on arrays (block can be single or multi-value)\n                block = Array.isArray(block) ? block : [block];\n                block_scope = Array.isArray(block_scope) ? block_scope : [block_scope];\n\n                for (let b=0; b < block.length; b++) {\n                    // Skip blocks we've already mixed in from the same scope\n                    // Repeating scope indicates a diamond pattern where a style is being mixed multiple times\n                    if (mixed[block_scope[b]]) {\n                        continue;\n                    }\n                    mixed_source[block_scope[b]] = true;\n\n                    shaders.blocks[t].push(block[b]);\n                    shaders.block_scopes[t].push(block_scope[b]);\n                }\n            }\n\n            // Add styles mixed in from this source - they could be multi-level ancestors,\n            // beyond the first-level \"parents\" defined in this style's `mix` list\n            Object.assign(mixed, mixed_source);\n        });\n\n        Object.assign(style.mixed, mixed); // add all newly mixed styles\n\n        style.shaders = shaders; // assign back to style\n        return style;\n    }\n\n    // Create a new style\n    // name: name of new style\n    // config: properties of new style\n    // styles: working set of styles being built (used for mixing in existing styles)\n    create (name, config, styles = {}) {\n        let style = mergeObjects({}, config); // deep copy\n        style.name = name;\n\n        // Style mixins\n        style = this.mix(style, styles);\n\n        // Has base style?\n        // Only renderable (instantiated) styles should be included for run-time use\n        // Others are intermediary/abstract, used during style composition but not execution\n        if (style.base && this.base_styles[style.base]) {\n            this.styles[name] = style = Object.assign(Object.create(this.base_styles[style.base]), style);\n        }\n        else {\n            style.base = null; // null out invalid base style\n        }\n\n        return style;\n    }\n\n    // Called to create and initialize styles\n    build (styles_defs) {\n        const styles = { ...styles_defs }; // copy to avoid modifying underlying object\n\n        // Un-register existing styles from cross-thread communication\n        if (this.styles) {\n            Object.values(this.styles)\n                .forEach(s => WorkerBroker.removeTarget(s.main_thread_target));\n        }\n\n        // Add default blend/base style pairs as needed\n        const blends = ['opaque', 'add', 'multiply', 'overlay', 'inlay', 'translucent'];\n        const bases = ['polygons', 'lines', 'points', 'text', 'raster'];\n        for (const blend of blends) {\n            for (const base of bases) {\n                const style = blend + '_' + base;\n                if (styles[style] == null) {\n                    styles[style] = { base, blend };\n                }\n            }\n        }\n\n        // Sort styles by dependency, then build them\n        let style_deps = Object.keys(styles).sort(\n            (a, b) => this.inheritanceDepth(a, styles) - this.inheritanceDepth(b, styles)\n        );\n\n        // Only keep built-in base styles\n        for (let sname in this.styles) {\n            if (!this.base_styles[sname]) {\n                delete this.styles[sname];\n            }\n            else {\n                this.styles[sname].reset();\n            }\n        }\n\n        // Working set of styles being built\n        let ws = {};\n        style_deps.forEach(sname => {\n            ws[sname] = this.create(sname, styles[sname], ws);\n        });\n\n        return this.styles;\n    }\n\n    // Initialize all styles\n    initStyles (scene = {}) {\n        // Initialize all\n        for (let sname in this.styles) {\n            this.styles[sname].init(scene);\n        }\n    }\n\n    // Given a style key in a set of styles to add, count the length of the inheritance chain\n    inheritanceDepth (key, styles) {\n        let parents = 0;\n\n        for (;;) {\n            let style = styles[key];\n            if (!style) {\n                // this is a scene def error, trying to extend a style that doesn't exist\n                break;\n            }\n\n            // Dependency chain ends when this style isn't mixing in any others\n            if (!style.mix) {\n                break;\n            }\n\n            // Traverse next parent style\n            parents++;\n\n            if (Array.isArray(style.mix)) {\n                // If multiple mixins, find the deepest one\n                parents += Math.max(...style.mix.map(s => {\n                    // Trying to mix into itself!\n                    if (key === s) {\n                        return;\n                    }\n\n                    return this.inheritanceDepth(s, styles);\n                }));\n                break;\n            }\n            else {\n                // Trying to mix into itself!\n                if (key === style.mix) {\n                    break;\n                }\n\n                // If single mixin, continue loop up the tree\n                key = style.mix;\n            }\n        }\n        return parents;\n    }\n\n}\n","function notNull(x)  { return x != null; }\nfunction wrap(x)     { return '(' + x + ')';}\n\nfunction maybeQuote(value) {\n    if (typeof value === 'string') {\n        return '\"' + value + '\"';\n    }\n    return value;\n}\n\nfunction lookUp(key) {\n    if (key[0] === '$') {\n        // keys prefixed with $ are special properties in the context object (not feature properties)\n        return 'context[\\'' + key.substring(1) + '\\']';\n    }\n    else if (key.indexOf('.') > -1) {\n        if (key.indexOf('\\\\.') === -1) { // no escaped dot notation\n            // un-escaped dot notation indicates a nested feature property\n            return `context.feature.properties${key.split('.').map(k => '[\\'' + k + '\\']').join('')}`;\n        }\n        else { // mixed escaped/unescaped dot notation\n            // escaped dot notation will be interpreted as a single-level feature property with dots in the name\n            // this splits on unescaped dots, which requires a temporary swap of escaped and unescaped dots\n            let keys = key\n                .replace(/\\\\\\./g, '__TANGRAM_DELIMITER__')\n                .split('.')\n                .map(s => s.replace(/__TANGRAM_DELIMITER__/g, '.'));\n            return `context.feature.properties${keys.map(k => '[\\'' + k + '\\']').join('')}`;\n        }\n    }\n    // single-level feature property\n    return 'context.feature.properties[\\'' + key + '\\']';\n}\n\nfunction nullValue(/*key, value*/) {\n    return ' true ';\n}\n\nfunction propertyEqual(key, value) {\n    return wrap(maybeQuote(value) + ' === ' + lookUp(key));\n}\n\nfunction propertyOr(key, values) {\n    const arr = '[' + values.map(maybeQuote).join(',') + ']';\n    return wrap(`${arr}.indexOf(${lookUp(key)}) > -1`);\n}\n\nfunction printNested(values, joiner) {\n    return wrap(values.filter(notNull).map(function (x) {\n        return wrap(x.join(' && '));\n    }).join(' ' + joiner + ' '));\n}\n\nfunction any(_, values, options) {\n    return (values && values.length > 0) ? printNested(values.map(function(v) { return parseFilter(v, options); }), '||') : 'true';\n}\n\nfunction all(_, values, options) {\n    return (values && values.length > 0) ? printNested(values.map(function(v) { return parseFilter(v, options); }), '&&') : 'true';\n}\n\nfunction not(key, value, options) {\n    return '!' + wrap(parseFilter(value, options).join(' && '));\n}\n\nfunction none(key, values, options) {\n    return '!' + wrap(any(null, values, options));\n}\n\nfunction propertyMatchesBoolean(key, value) {\n    return wrap(lookUp(key) + (value ? ' != ' : ' == ')  + 'null');\n}\n\nfunction rangeMatch(key, value, options) {\n    var expressions = [];\n    var transform = options && (typeof options.rangeTransform === 'function') && options.rangeTransform;\n\n    if (value.max) {\n        var max = transform ? transform(value.max) : value.max;\n        expressions.push('' + lookUp(key) + ' < ' + max);\n    }\n\n    if (value.min) {\n        var min = transform ? min = transform(value.min) : value.min;\n        expressions.push('' + lookUp(key) + ' >= ' + min);\n    }\n\n    return wrap(expressions.join(' && '));\n}\n\nfunction includesMatch(key, value) {\n    let expressions = [];\n\n    // the array includes ONE OE MORE of the provided values (a single value is converted to an array)\n    if (value.includes_any) {\n        const vals = Array.isArray(value.includes_any) ? value.includes_any : [value.includes_any];\n        const arr = '['+ vals.map(maybeQuote).join(',') + ']';\n        expressions.push(`${lookUp(key)} != null && ${arr}.some(function(v) { return ${lookUp(key)}.indexOf(v) > -1 })`);\n    }\n\n    // the array includes ALL of the provided values (a single value is converted to an array)\n    if (value.includes_all) {\n        const vals = Array.isArray(value.includes_all) ? value.includes_all : [value.includes_all];\n        const arr = '[' + vals.map(maybeQuote).join(',') + ']';\n        expressions.push(`${lookUp(key)} != null && ${arr}.every(function(v) { return ${lookUp(key)}.indexOf(v) > -1 })`);\n    }\n\n    return wrap(expressions.join(' && '));\n}\n\nfunction parseFilter(filter, options) {\n    var filterAST = [];\n\n    // Function filter\n    if (typeof filter === 'function') {\n        return [wrap(filter.toString() + '(context)')];\n    }\n    // Array filter, implicit 'any'\n    else if (Array.isArray(filter)) {\n        return [any(null, filter, options)];\n    }\n    // Null filter object\n    else if (filter == null) {\n        return ['true'];\n    }\n\n    // Object filter, e.g. implicit 'all'\n    var keys = Object.keys(filter);\n    for (var k=0; k < keys.length; k++) {\n        var key = keys[k];\n\n        var value = filter[key],\n            type  = typeof value;\n        if (type === 'string' || type === 'number') {\n            filterAST.push(propertyEqual(key, value));\n        } else if (type === 'boolean') {\n            filterAST.push(propertyMatchesBoolean(key, value));\n        } else if (key === 'not') {\n            filterAST.push(not(key, value, options));\n        } else if (key === 'any') {\n            filterAST.push(any(key, value, options));\n        } else if (key === 'all') {\n            filterAST.push(all(key, value, options));\n        } else if (key === 'none') {\n            filterAST.push(none(key, value, options));\n        } else if (Array.isArray(value)) {\n            filterAST.push(propertyOr(key, value));\n        } else if (type === 'object' && value != null) {\n            if (value.max || value.min) {\n                filterAST.push(rangeMatch(key, value, options));\n            }\n            else if (value.includes_any || value.includes_all) {\n                filterAST.push(includesMatch(key, value, options));\n            }\n        } else if (value == null) {\n            filterAST.push(nullValue(key, value));\n        } else {\n            throw new Error('Unknown Query syntax: ' + value);\n        }\n    }\n\n    return keys.length === 0 ? ['true'] : filterAST;\n}\n\nfunction filterToString(filterAST) {\n    return wrap(filterAST.join(' && '));\n}\n\nexport function buildFilter(filter, options) {\n    if (filter == null) { return function () { return true; }; }\n    // jshint evil: true\n    return new Function('context', 'return ' + filterToString(parseFilter(filter, options)) + ';');\n}\n","import StyleParser from './style_parser';\nimport { compileFunctionStrings } from '../utils/functions';\nimport log from '../utils/log';\nimport mergeObjects from '../utils/merge';\nimport Geo from '../utils/geo';\nimport { buildFilter } from './filter';\n\n// N.B.: 'visible' is legacy compatibility for 'enabled'\nconst reserved = ['filter', 'draw', 'visible', 'enabled', 'data', 'exclusive', 'priority'];\n\nlet layer_cache = {};\nexport function layerCache () {\n    return layer_cache;\n}\n\nfunction cacheKey (layers) {\n    if (layers.length > 1) {\n        var k = layers[0];\n        for (var i=1; i < layers.length; i++) {\n            k += '/' + layers[i];\n        }\n\n        return k;\n    }\n    return layers[0];\n}\n\n// Merge matching layer trees into a final draw group\nexport function mergeTrees(matchingTrees, group) {\n    let draws, treeDepth = 0;\n\n    // Find deepest tree\n    for (let t=0; t < matchingTrees.length; t++) {\n        if (matchingTrees[t].length > treeDepth) {\n            treeDepth = matchingTrees[t].length;\n        }\n    }\n\n    // No layers to parse\n    if (treeDepth === 0) {\n        return null;\n    }\n\n    // Merged draw group object\n    let draw = {\n        visible: true, // visible by default\n    };\n\n    // Iterate trees in parallel\n    for (let x=0; x < treeDepth; x++) {\n        // Pull out the requested draw group, for each tree, at this depth (avoiding duplicates at the same level in tree)\n        draws = [];\n        matchingTrees.forEach(tree => {\n            if (tree[x] && tree[x][group] && draws.indexOf(tree[x][group]) === -1) {\n                draws.push(tree[x][group]);\n            }\n        });\n        if (draws.length === 0) {\n            continue;\n        }\n\n        // Merge draw objects\n        mergeObjects(draw, ...draws);\n    }\n\n    // Short-circuit if not visible\n    if (draw.visible === false) {\n        return null;\n    }\n\n    return draw;\n}\n\nconst blacklist = ['any', 'all', 'not', 'none'];\n\nclass Layer {\n\n    constructor({ layer, name, parent, draw, visible, enabled, filter, exclusive, priority, styles }) {\n        this.id = Layer.id++;\n        this.config_data = layer.data;\n        this.parent = parent;\n        this.name = name;\n        this.full_name = this.parent ? (this.parent.full_name + ':' + this.name) : this.name;\n        this.draw = draw;\n        this.filter = filter;\n        this.exclusive = (exclusive === true);\n        this.priority = (priority != null ? priority : Number.MAX_SAFE_INTEGER);\n        this.styles = styles;\n        this.is_built = false;\n\n        enabled = (enabled === undefined) ? visible : enabled; // `visible` property is backwards compatible for `enabled`\n        this.enabled = (enabled !== false); // layer is enabled unless explicitly set to disabled\n\n        // Denormalize layer name to draw groups\n        if (this.draw) {\n            for (let group in this.draw) {\n                this.draw[group] = (this.draw[group] == null) ? {} : this.draw[group];\n                if (typeof this.draw[group] !== 'object') {\n                    // Invalid draw group\n                    let msg = `Draw group '${group}' for layer ${this.full_name} is invalid, must be an object, `;\n                    msg += `but was set to \\`${group}: ${this.draw[group]}\\` instead`;\n                    log('warn', msg); // TODO: fire external event that clients to subscribe to\n\n                    delete this.draw[group];\n                }\n            }\n        }\n    }\n\n    build () {\n        log('trace', `Building layer '${this.full_name}'`);\n        this.buildFilter();\n        this.buildDraw();\n        this.is_built = true;\n    }\n\n    buildDraw() {\n        this.draw = compileFunctionStrings(this.draw, StyleParser.wrapFunction);\n        this.calculatedDraw = calculateDraw(this);\n    }\n\n    buildFilter() {\n        this.filter_original = this.filter;\n        this.filter = compileFunctionStrings(this.filter, StyleParser.wrapFunction);\n\n        let type = typeof this.filter;\n        if (this.filter != null && type !== 'object' && type !== 'function') {\n            // Invalid filter\n            let msg = `Filter for layer ${this.full_name} is invalid, filter value must be an object or function, `;\n            msg += `but was set to \\`filter: ${this.filter}\\` instead`;\n            log('warn', msg); // TODO: fire external event that clients to subscribe to\n            return;\n        }\n\n        try {\n            this.buildZooms();\n            this.buildPropMatches();\n            if (this.filter != null && (typeof this.filter === 'function' || Object.keys(this.filter).length > 0)) {\n                this.filter = buildFilter(this.filter, FilterOptions);\n            }\n            else {\n                this.filter = null;\n            }\n        }\n        catch(e) {\n            // Invalid filter\n            let msg = `Filter for layer ${this.full_name} is invalid, \\`filter: ${JSON.stringify(this.filter)}\\` `;\n            msg += `failed with error '${e.message}', stack trace: ${e.stack}`;\n            log('warn', msg); // TODO: fire external event that clients to subscribe to\n        }\n    }\n\n    // Zooms often cull large swaths of the layer tree, so they get special treatment and are checked first\n    buildZooms() {\n        let zoom = this.filter && this.filter.$zoom; // has an explicit zoom filter\n        let ztype = typeof zoom;\n        if (zoom != null) {\n            this.zooms = {};\n\n            if (ztype === 'number') {\n                this.zooms[zoom] = true;\n            }\n            else if (Array.isArray(zoom)) {\n                for (let z=0; z < zoom.length; z++) {\n                    this.zooms[zoom[z]] = true;\n                }\n            }\n            else if (ztype === 'object' && (zoom.min != null || zoom.max != null)) {\n                let zmin = zoom.min || 0;\n                let zmax = zoom.max || Geo.max_style_zoom;\n                for (let z=zmin; z < zmax; z++) {\n                    this.zooms[z] = true;\n                }\n            }\n\n            delete this.filter.$zoom; // don't process zoom through usual generic filter logic\n        }\n    }\n\n    buildPropMatches() {\n        if (!this.filter || Array.isArray(this.filter) || typeof this.filter === 'function') {\n            return;\n        }\n\n        Object.keys(this.filter).forEach(key => {\n            if (blacklist.indexOf(key) === -1) {\n                let val = this.filter[key];\n                let type = typeof val;\n                let array = Array.isArray(val);\n\n                if (!(array || type === 'string' || type === 'number')) {\n                    return;\n                }\n\n                if (key[0] === '$') {\n                    // Context property\n                    this.context_prop_matches = this.context_prop_matches || [];\n                    this.context_prop_matches.push([key.substring(1), array ? val : [val]]);\n                    delete this.filter[key];\n                }\n                else if (key.indexOf('.') === -1) { // exclude nested feature properties\n                    // Single-level feature property\n                    this.feature_prop_matches = this.feature_prop_matches || [];\n                    this.feature_prop_matches.push([key, array ? val : [val]]);\n                    delete this.filter[key];\n                }\n            }\n        });\n    }\n\n    doPropMatches (context) {\n        if (this.feature_prop_matches) {\n            for (let r=0; r < this.feature_prop_matches.length; r++) {\n                let match = this.feature_prop_matches[r];\n                let val = context.feature.properties[match[0]];\n                if (val == null || match[1].indexOf(val) === -1) {\n                    return false;\n                }\n            }\n        }\n\n        if (this.context_prop_matches) {\n            for (let r=0; r < this.context_prop_matches.length; r++) {\n                let match = this.context_prop_matches[r];\n                let val = context[match[0]];\n                if (val == null || match[1].indexOf(val) === -1) {\n                    return false;\n                }\n            }\n        }\n\n        return true;\n    }\n\n    doesMatch (context) {\n        if (!this.enabled) {\n            return false;\n        }\n\n        if (!this.is_built) {\n            this.build();\n        }\n\n        // zoom pre-filter: skip rest of filter if out of layer zoom range\n        if (this.zooms != null && !this.zooms[context.zoom]) {\n            return false;\n        }\n\n        // direct feature property matches\n        if (!this.doPropMatches(context)) {\n            return false;\n        }\n\n        // any remaining filter (more complex matches or dynamic function)\n        let match;\n        if (this.filter instanceof Function){\n            try {\n                match = this.filter(context);\n            }\n            catch (error) {\n                // Filter function error\n                let msg = `Filter for this ${this.full_name}: \\`filter: ${this.filter_original}\\` `;\n                msg += `failed with error '${error.message}', stack trace: ${error.stack}`;\n                log('error', msg, context.feature);\n            }\n        }\n        else {\n            match = this.filter == null;\n        }\n\n        if (match) {\n            if (this.children_to_parse) {\n                parseLayerChildren(this, this.children_to_parse, this.styles);\n                delete this.children_to_parse;\n            }\n\n            return true;\n        }\n        return false;\n    }\n\n}\n\nLayer.id = 0;\n\n\nexport class LayerLeaf extends Layer {\n    constructor (config) {\n        super(config);\n        this.is_leaf = true;\n    }\n\n}\n\nexport class LayerTree extends Layer {\n    constructor (config) {\n        super(config);\n        this.is_tree = true;\n        this.layers = config.layers || [];\n    }\n\n    addLayer (layer) {\n        this.layers.push(layer);\n    }\n\n    buildDrawGroups (context) {\n        let layers = [], layer_ids = [];\n        matchFeature(context, [this], layers, layer_ids);\n\n        if (layers.length > 0) {\n            let cache_key = cacheKey(layer_ids);\n\n            // Only evaluate each layer combination once (undefined means not yet evaluated,\n            // null means evaluated with no draw object)\n            if (layer_cache[cache_key] === undefined) {\n                // Find all the unique visible draw blocks for this layer tree\n                let draw_groups = layers.map(x => x && x.visible !== false && x.calculatedDraw);\n                let draw_keys = {};\n\n                for (let r=0; r < draw_groups.length; r++) {\n                    let stack = draw_groups[r];\n                    if (!stack) {\n                        continue;\n                    }\n                    for (let g=0; g < stack.length; g++) {\n                        let group = stack[g];\n                        for (let key in group) {\n                            draw_keys[key] = true;\n                        }\n                    }\n                }\n\n                // Calculate each draw group\n                for (let draw_key in draw_keys) {\n                    layer_cache[cache_key] = layer_cache[cache_key] || {};\n                    layer_cache[cache_key][draw_key] = mergeTrees(draw_groups, draw_key);\n\n                    // Only save the ones that weren't null\n                    if (!layer_cache[cache_key][draw_key]) {\n                        delete layer_cache[cache_key][draw_key];\n                    }\n                    else {\n                        layer_cache[cache_key][draw_key].key = cache_key + '/' + draw_key;\n                        layer_cache[cache_key][draw_key].layers = layers.map(x => x && x.full_name);\n                        layer_cache[cache_key][draw_key].group = draw_key;\n                    }\n                }\n\n                // No layers evaluated\n                if (layer_cache[cache_key] && Object.keys(layer_cache[cache_key]).length === 0) {\n                    layer_cache[cache_key] = null;\n                }\n            }\n            return layer_cache[cache_key];\n        }\n    }\n\n}\n\nexport const FilterOptions = {\n    // Handle unit conversions on filter ranges\n    rangeTransform(val) {\n        if (typeof val === 'string' && val.trim().slice(-3) === 'px2') {\n            return `${parseFloat(val)} * context.meters_per_pixel_sq`;\n        }\n        return val;\n    }\n};\n\nexport function isReserved(key) {\n    return reserved.indexOf(key) > -1;\n}\n\nfunction isEmpty(obj) {\n    return Object.keys(obj).length === 0;\n}\n\nexport function groupProps(obj) {\n    let reserved = {}, children = {};\n\n    for (let key in obj) {\n        if (isReserved(key)) {\n            reserved[key] = obj[key];\n        } else {\n            children[key] = obj[key];\n        }\n    }\n    return [reserved, children];\n}\n\nexport function calculateDraw(layer) {\n\n    let draw  = [];\n\n    if (layer.parent) {\n        let cs = layer.parent.calculatedDraw || [];\n        draw.push(...cs);\n    }\n\n    draw.push(layer.draw);\n    return draw;\n}\n\nexport function parseLayerNode(name, layer, parent, styles) {\n\n    layer = (layer == null) ? {} : layer;\n\n    let properties = { name, layer, parent, styles };\n    let [reserved, children] = groupProps(layer);\n    let empty = isEmpty(children);\n    let Create;\n\n    if (empty && parent != null) {\n        Create = LayerLeaf;\n    } else {\n        Create = LayerTree;\n    }\n\n    let r = new Create(Object.assign(properties, reserved));\n\n    // only process child layers if this layer is enabled\n    if (r.enabled) {\n        if (parent) {\n            parent.addLayer(r);\n        }\n        r.children_to_parse = empty ? null : children;\n    }\n\n    return r;\n}\n\nfunction parseLayerChildren (parent, children, styles) {\n    for (let key in children) {\n        let child = children[key];\n        if (typeof child === 'object' && !Array.isArray(child)) {\n            parseLayerNode(key, child, parent, styles);\n        } else {\n            // Invalid layer\n            let msg = `Layer value must be an object: cannot create layer '${key}: ${JSON.stringify(child)}'`;\n            msg += `, under parent layer '${parent.full_name}'.`;\n\n            // If the parent is a style name, this may be an incorrectly nested layer\n            if (styles[parent.name]) {\n                msg += ` The parent name '${parent.name}' is also the name of a style, did you mean to create a 'draw' group`;\n                if (parent.parent) {\n                    msg += ` under '${parent.parent.name}'`;\n                }\n                msg += ' instead?';\n            }\n            log('warn', msg); // TODO: fire external event that clients to subscribe to\n        }\n    }\n\n    // Sort sub-layers so they are applied deterministically when multiple layers modify the same properties\n    // Sort order is: exclusive layers first, then by explicit layer priority, then by layer name\n    parent.layers.sort((a, b) => {\n        // Exclusive layers come first\n        // If an exclusive layer matches, no further sibling layers are matched\n        if (a.exclusive < b.exclusive) return 1;\n        else if (a.exclusive > b.exclusive) return -1;\n\n        // When sub-sorting exclusive layers, sort the higher priority layers first, since only one exlcusive layer\n        // can match and the first one that matches should be the highest priority.\n        // When sub-sorting non-exclusive layers, sort the lower priority layers first, since multiple layers may\n        // match, and when they are merged in order, the later layers will overwrite the earlier ones -- so we want\n        // the higher priority ones to match last so that they \"win\".\n        const direction = (a.exclusive ? 1 : -1);\n\n        // Sub-sort by explicit priority\n        if (a.priority > b.priority) return direction;\n        else if (a.priority < b.priority) return -direction;\n\n        // Sub-sort by layer name as last resort\n        if (a.full_name < b.full_name) return direction;\n        else if (a.full_name > b.full_name) return -direction;\n    });\n}\n\n\nexport function parseLayers (layers, styles) {\n    layer_cache = {}; // clear layer cache\n    let layer_trees = {};\n\n    for (let key in layers) {\n        let layer = layers[key];\n        if (layer) {\n            layer_trees[key] = parseLayerNode(key, layer, null, styles);\n        }\n    }\n\n    return layer_trees;\n}\n\nexport function matchFeature(context, layers, collected_layers, collected_layers_ids) {\n    let matched = false;\n    let child_matched = false;\n\n    if (layers.length === 0) {\n        return;\n    }\n\n    for (let r=0; r < layers.length; r++) {\n        let current = layers[r];\n\n        if (current.is_leaf) {\n            if (current.doesMatch(context)) {\n                matched = true;\n                collected_layers.push(current);\n                collected_layers_ids.push(current.id);\n\n                if (current.exclusive) {\n                    break; // only one exclusive layer can match, stop matching further sibling layers\n                }\n            }\n\n        } else if (current.is_tree) {\n            if (current.doesMatch(context)) {\n                matched = true;\n\n                child_matched = matchFeature(\n                    context,\n                    current.layers,\n                    collected_layers,\n                    collected_layers_ids\n                );\n\n                if (!child_matched) {\n                    collected_layers.push(current);\n                    collected_layers_ids.push(current.id);\n                }\n\n                if (current.exclusive) {\n                    break; // only one exclusive layer can match, stop matching further sibling layers\n                }\n            }\n        }\n    }\n\n    return matched;\n}\n","import log from '../utils/log';\nimport Utils from '../utils/utils';\nimport mergeObjects from '../utils/merge';\nimport Geo from '../utils/geo';\nimport {TileID} from './tile_id';\nimport {addLayerDebugEntry} from '../styles/style';\nimport StyleParser from '../styles/style_parser';\nimport Collision from '../labels/collision';\nimport WorkerBroker from '../utils/worker_broker';\nimport Task from '../utils/task';\nimport Texture from '../gl/texture';\n\nimport {mat4, vec3} from '../utils/gl-matrix';\n\nlet id = 0; // unique tile id\nlet build_id = 0; // id tracking order in which tiles were build\n\nexport default class Tile {\n\n    /**\n        Tile\n        @constructor\n        Required properties:\n        coords: object with {x, y, z} properties identifying tile coordinate location\n        worker: web worker to handle tile construction\n    */\n    constructor({ coords, style_z, source, workers, view }) {\n        this.id = id++;\n        this.view = view;\n        this.source = source;\n        this.generation = null;\n        this.valid = true;\n\n        this.visible = false;\n        this.proxy_for = null;\n        this.proxied_as = null;\n        this.proxy_level = 0;\n        this.proxy_order_offset = 0;\n        this.fade_in = true;\n        this.loading = false;\n        this.loaded = false;\n        this.built = false;\n        this.labeled = false;\n        this.error = null;\n        this.debug = {};\n\n        this.style_z = style_z; // zoom level to be used for styling\n        this.coords = TileID.normalizedCoord(coords, this.source);\n        this.key = TileID.key(this.coords, this.source, this.style_z);\n        this.overzoom = Math.max(this.style_z - this.coords.z, 0); // number of levels of overzooming\n        this.overzoom2 = Math.pow(2, this.overzoom);\n        this.min = Geo.metersForTile(this.coords);\n        this.max = Geo.metersForTile({x: this.coords.x + 1, y: this.coords.y + 1, z: this.coords.z }),\n        this.span = { x: (this.max.x - this.min.x), y: -(this.max.y - this.min.y) };\n        this.bounds = { sw: { x: this.min.x, y: this.max.y }, ne: { x: this.max.x, y: this.min.y } };\n\n        this.meters_per_pixel = Geo.metersPerPixel(this.style_z);\n        this.meters_per_pixel_sq = this.meters_per_pixel * this.meters_per_pixel;\n        this.units_per_pixel = Geo.units_per_pixel / this.overzoom2; // adjusted for overzoom\n        this.units_per_meter_overzoom = Geo.unitsPerMeter(this.coords.z) * this.overzoom2; // adjusted for overzoom\n        this.preserve_tiles_within_zoom = this.source.preserve_tiles_within_zoom; // source-specific tile retention policy\n\n        this.meshes = {}; // renderable VBO meshes keyed by style\n        this.new_mesh_styles = []; // meshes that have been built so far in current build generation\n        this.pending_label_meshes = null; // meshes that are pending collision (shouldn't be displayed yet)\n\n        this.setWorker(workers);\n    }\n\n    // Free resources owned by tile\n    freeResources () {\n        for (let m in this.meshes) {\n            this.meshes[m].forEach(m => m.destroy());\n        }\n        this.meshes = {};\n\n        if (this.pending_label_meshes) {\n            for (let m in this.pending_label_meshes) {\n                this.pending_label_meshes[m].forEach(m => m.destroy());\n            }\n        }\n        this.pending_label_meshes = null;\n    }\n\n    destroy() {\n        Task.removeForTile(this.id);\n        this.workerMessage('self.removeTile', this.key);\n        this.freeResources();\n        this.worker = null;\n        this.valid = false;\n    }\n\n    buildAsMessage() {\n        return {\n            id: this.id,\n            key: this.key,\n            source: this.source.name,\n            coords: this.coords,\n            min: this.min,\n            max: this.max,\n            units_per_pixel: this.units_per_pixel,\n            meters_per_pixel: this.meters_per_pixel,\n            meters_per_pixel_sq: this.meters_per_pixel_sq,\n            units_per_meter_overzoom: this.units_per_meter_overzoom,\n            style_z: this.style_z,\n            overzoom: this.overzoom,\n            overzoom2: this.overzoom2,\n            generation: this.generation,\n            debug: this.debug\n        };\n    }\n\n    // Find the appropriate worker thread for this tile\n    setWorker (workers) {\n        if (this.source.tiled) {\n            // Pin tile to a worker thread based on its coordinates\n            this.worker_id = Math.abs(this.coords.x + this.coords.y + this.coords.z) % workers.length;\n        }\n        else {\n            // Pin all tiles from each non-tiled source to a single worker\n            // Prevents data for these sources from being loaded more than once\n            this.worker_id = this.source.id % workers.length;\n        }\n\n        this.worker = workers[this.worker_id];\n    }\n\n    workerMessage (...message) {\n        return WorkerBroker.postMessage(this.worker, ...message);\n    }\n\n    build(generation, { fade_in = true } = {}) {\n        this.generation = generation;\n        this.fade_in = fade_in;\n        if (!this.loaded) {\n            this.loading = true;\n            this.built = false;\n            this.labeled = false;\n        }\n        return this.workerMessage('self.buildTile', { tile: this.buildAsMessage() }).catch(e => { throw e; });\n    }\n\n    /**\n        Called on worker to cancel loading\n        Static method because the worker only has object representations of tile data, there is no\n        tile instance created yet.\n    */\n    static cancel(tile) {\n        if (tile) {\n            tile.canceled = true;\n            if (tile.source_data && tile.source_data.request_id) {\n                Utils.cancelRequest(tile.source_data.request_id); // cancel pending tile network request\n                tile.source_data.request_id = null;\n            }\n\n            Tile.abortBuild(tile);\n        }\n    }\n\n    // Process geometry for tile - called by web worker\n    // Returns a set of tile keys that should be sent to the main thread (so that we can minimize data exchange between worker and main thread)\n    static buildGeometry (tile, { scene_id, layers, styles, global }) {\n        let data = tile.source_data;\n\n        tile.debug.building = +new Date();\n        tile.debug.feature_count = 0;\n        tile.debug.layers = null;\n\n        Collision.startTile(tile.id, { apply_repeat_groups: true });\n\n        // Process each top-level layer\n        for (let layer_name in layers) {\n            let layer = layers[layer_name];\n            // Skip layers with no data source defined\n            if (!layer || !layer.config_data) {\n                log('warn', `Layer ${layer_name} was defined without a geometry data source and will not be rendered.`);\n                continue;\n            }\n\n            // Source names don't match\n            if (layer.config_data.source !== tile.source) {\n                continue;\n            }\n\n            // Get data for one or more layers from source\n            let source_layers = Tile.getDataForSource(data, layer.config_data, layer_name);\n\n            // Build features in layer\n            for (let s=0; s < source_layers.length; s++) {\n                let source_layer = source_layers[s];\n                let geom = source_layer.geom;\n                if (!geom) {\n                    continue;\n                }\n\n                for (let f = 0; f < geom.features.length; f++) {\n                    let feature = geom.features[f];\n                    if (feature.geometry == null) {\n                        continue; // skip features w/o geometry (valid GeoJSON)\n                    }\n\n                    let context = StyleParser.getFeatureParseContext(feature, tile, global);\n                    context.winding = tile.default_winding;\n                    context.source = tile.source;        // add data source name\n                    context.layer = source_layer.layer;  // add data source layer name\n\n                    // Get draw groups for this feature\n                    let draw_groups = layer.buildDrawGroups(context, true);\n                    if (!draw_groups) {\n                        continue;\n                    }\n\n                    // Build draw groups\n                    for (let group_name in draw_groups) {\n                        let group = draw_groups[group_name];\n\n                        // Add to style\n                        let style_name = group.style || group_name;\n                        let style = styles[style_name];\n\n                        if (!style) {\n                            log('warn', `Style '${style_name}' not found, skipping layer '${layer_name}':`, group, feature);\n                            continue;\n                        }\n\n                        group = style.preprocess(group);\n                        if (group == null || group.visible === false) {\n                            continue;\n                        }\n\n                        context.layers = group.layers;  // add matching draw layers\n\n                        style.addFeature(feature, group, context);\n                    }\n\n                    tile.debug.feature_count++;\n                }\n            }\n        }\n        tile.debug.building = +new Date() - tile.debug.building;\n\n        // Send styles back to main thread as they finish building, in two groups: collision vs. non-collision\n        let tile_styles = this.stylesForTile(tile, styles).map(s => styles[s]);\n        Tile.buildStyleGroups(tile, tile_styles, scene_id, style => style.collision ? 'collision' : 'non-collision');\n        // Tile.buildStyleGroups(tile, tile_styles, scene_id, style => style.name); // call for each style\n        // Tile.buildStyleGroups(tile, tile_styles, scene_id, style => 'styles'); // all styles in single call (previous behavior)\n    }\n\n    static stylesForTile (tile, styles) {\n        let tile_styles = [];\n        for (let s in styles) {\n            if (styles[s].hasDataForTile(tile)) {\n                tile_styles.push(s);\n            }\n        }\n        return tile_styles;\n    }\n\n    // Build styles (grouped by the provided function) and send back to main thread as they finish building\n    static buildStyleGroups(tile, styles, scene_id, group_by) {\n        // Group the styles; each group will be sent to the main thread when the styles in the group finish building.\n        const groups = styles.reduce((groups, style) => {\n            const group = group_by(style);\n            groups[group] = groups[group] || [];\n            groups[group].push(style);\n            return groups;\n        }, {});\n\n        // If nothing to build, return empty tile to main thread\n        if (Object.keys(groups).length === 0) {\n            WorkerBroker.postMessage(\n                `TileManager_${scene_id}.buildTileStylesCompleted`,\n                WorkerBroker.withTransferables({ tile: Tile.slice(tile), progress: { start: true, done: true } })\n            );\n            Collision.resetTile(tile.id); // clear collision if we're done with the tile\n            return;\n        }\n\n        // Build each group of styles\n        const progress = {};\n        for (const group_name in groups) {\n            Tile.buildStyleGroup({ group_name, groups, tile, progress, scene_id });\n        }\n    }\n\n    // Build a single group of styles\n    static async buildStyleGroup({ group_name, groups, tile, progress, scene_id }) {\n        const group = groups[group_name];\n        const mesh_data = {};\n        try {\n            // For each group, build all styles in the group\n            await Promise.all(group.map(async (style) => {\n                const style_data = await style.endData(tile);\n                if (style_data) {\n                    mesh_data[style.name] = style_data;\n                }\n            }));\n\n            // Mark the group as done, and check if all groups have finished\n            log('trace', `Finished style group '${group_name}' for tile ${tile.key}`);\n            groups[group_name] = null;\n            if (Object.keys(groups).every(g => groups[g] == null)) {\n                progress.done = true;\n            }\n\n            // Send meshes to main thread\n            WorkerBroker.postMessage(\n                `TileManager_${scene_id}.buildTileStylesCompleted`,\n                WorkerBroker.withTransferables({ tile: { ...Tile.slice(tile), mesh_data }, progress })\n            );\n            if (progress.done) {\n                Collision.resetTile(tile.id); // clear collision if we're done with the tile\n            }\n        }\n        catch (e) {\n            log('error', `Error for style group '${group_name}' for tile ${tile.key}`, (e && e.stack) || e);\n        }\n    }\n\n    /**\n        Retrieves geometry from a tile according to a data source definition\n        Returns an array of objects with:\n            layer: source layer name\n            geom: GeoJSON FeatureCollection\n    */\n    static getDataForSource (source_data, source_config, scene_layer_name) {\n        var layers = [];\n\n        if (source_config != null && source_data != null && source_data.layers != null) {\n            // If source wildcard is specified, combine all source layers\n            if (source_config.all_layers === true) {\n                // Wildcard takes precedence over explicit source layer(s)\n                if (source_config.layer != null) {\n                    const msg = `Layer ${scene_layer_name} includes both 'all_layers: true' and an explicit ` +\n                        '\\'layer\\' keyword in its \\'data\\' block. \\'all_layers: true\\' takes precedence, \\'layer\\' ' +\n                        'will be ignored.';\n                    log({ level: 'warn', once: true }, msg);\n                }\n\n                for (const layer in source_data.layers) {\n                    layers.push({ layer, geom: source_data.layers[layer] });\n                }\n            }\n            // If no source layer specified, and a default data source layer exists\n            else if (!source_config.layer && source_data.layers._default) {\n                layers.push({\n                    geom: source_data.layers._default\n                });\n            }\n            // If no source layer is specified, and a layer for the scene layer name exists\n            else if (!source_config.layer && scene_layer_name) {\n                layers.push({\n                    layer: scene_layer_name,\n                    geom: source_data.layers[scene_layer_name]\n                });\n            }\n            // If a source layer is specified by name, use it\n            else if (typeof source_config.layer === 'string') {\n                layers.push({\n                    layer: source_config.layer,\n                    geom: source_data.layers[source_config.layer]\n                });\n            }\n            // If multiple source layers are specified by name, combine them\n            else if (Array.isArray(source_config.layer)) {\n                source_config.layer.forEach(layer => {\n                    layers.push({ layer, geom: source_data.layers[layer] });\n                });\n            }\n        }\n\n        return layers;\n    }\n\n    /**\n       Called on main thread when a web worker completes processing\n       for a single tile.\n    */\n    buildMeshes(styles, progress) {\n        if (this.error) {\n            return;\n        }\n\n        this.build_id = build_id++; // record order in which tile was built\n\n        // Debug\n        if (progress.start) {\n            this.debug.geometry_count = 0;\n            this.debug.buffer_size = 0;\n        }\n\n        // Create VBOs\n        let meshes = {}; // new data to be added to tile\n        let mesh_data = this.mesh_data;\n        if (mesh_data) {\n            for (let s in mesh_data) {\n                for (let variant in mesh_data[s].meshes) {\n                    let mesh_variant = mesh_data[s].meshes[variant];\n                    if (mesh_variant.vertex_data) {\n                        if (!styles[s]) {\n                            log('warn', `Could not create mesh because style '${s}' not found, for tile ${this.key}, aborting tile`);\n                            break;\n                        }\n\n                        // first add style-level uniforms, then add any mesh-specific ones\n                        let mesh_options = Object.assign({}, mesh_data[s]);\n                        mesh_options.uniforms = Object.assign({}, mesh_options.uniforms, mesh_variant.uniforms);\n                        mesh_options.variant = mesh_variant.variant;\n\n                        // for labels, keep buffer data on CPU so they can be modified later\n                        if (mesh_variant.labels) {\n                            mesh_options.retain = true;\n                        }\n\n                        let mesh = styles[s].makeMesh(mesh_variant.vertex_data, mesh_variant.vertex_elements, mesh_options);\n                        mesh.variant = mesh_options.variant;\n                        mesh.labels = mesh_variant.labels;\n                        meshes[s] = meshes[s] || [];\n                        meshes[s].push(mesh);\n                        if (mesh.variant.mesh_order == null) {\n                            mesh.variant.mesh_order = meshes[s].length - 1; // assign default variant render order\n                        }\n\n                        this.debug.buffer_size += mesh.buffer_size;\n                        this.debug.geometry_count += mesh.geometry_count;\n                    }\n                }\n\n                // Sort mesh variants by explicit render order (if present)\n                if (meshes[s]) {\n                    meshes[s].sort((a, b) => {\n                        // Sort variant order ascending if present, then all null values (where order is unspecified)\n                        let ao = a.variant.mesh_order, bo = b.variant.mesh_order;\n                        return (ao == null ? 1 : (bo == null ? -1 : (ao < bo ? -1 : 1)));\n                    });\n                }\n            }\n        }\n        delete this.mesh_data;\n\n        // New meshes\n        for (let m in meshes) {\n            // swap in non-collision meshes right away\n            if (!styles[m].collision) {\n                if (this.meshes[m]) {\n                    this.meshes[m].forEach(m => m.destroy()); // free old meshes\n                }\n\n                this.meshes[m] = meshes[m]; // set new mesh\n                this.new_mesh_styles.push(m);\n            }\n            // keep label meshes out of view until collision is complete\n            else {\n                this.pending_label_meshes = this.pending_label_meshes || {};\n                this.pending_label_meshes[m] = meshes[m];\n            }\n        }\n\n        if (progress.done) {\n            // Release un-replaced meshes (existing in previous generation, but weren't built for this one)\n            for (let m in this.meshes) {\n                if (this.new_mesh_styles.indexOf(m) === -1 && (!this.pending_label_meshes || this.pending_label_meshes[m] == null)) {\n                    this.meshes[m].forEach(m => m.destroy());\n                    delete this.meshes[m];\n                }\n            }\n            this.new_mesh_styles = [];\n\n            this.debug.geometry_ratio = (this.debug.geometry_count / this.debug.feature_count).toFixed(1);\n        }\n        this.printDebug(progress);\n    }\n\n    // How many styles are currently pending label collision\n    pendingLabelStyleCount () {\n        return this.pending_label_meshes ? Object.keys(this.pending_label_meshes).length : 0;\n    }\n\n    // Swap label style meshes after collision is complete\n    swapPendingLabels () {\n        this.labeled = true; // mark as labeled\n\n        if (this.pending_label_meshes) {\n            for (let m in this.pending_label_meshes) {\n                if (this.meshes[m]) {\n                    this.meshes[m].forEach(m => m.destroy()); // free old meshes\n                }\n\n                this.meshes[m] = this.pending_label_meshes[m]; // set new mesh\n            }\n            this.pending_label_meshes = null;\n        }\n    }\n\n    /**\n        Called on main thread when web worker completes processing, but tile has since been discarded\n        Frees resources that would have been transferred to the tile object.\n        Static method because the tile object no longer exists (the tile data returned by the worker is passed instead).\n    */\n    static abortBuild (tile) {\n        Task.removeForTile(tile.id);\n        Collision.abortTile(tile.id);\n\n        // Releases meshes\n        if (tile.mesh_data) {\n            for (let s in tile.mesh_data) {\n                let textures = tile.mesh_data[s].textures;\n                if (textures) {\n                    textures.forEach(t => {\n                        let texture = Texture.textures[t];\n                        if (texture) {\n                            log('trace', `releasing texture ${t} for tile ${tile.key}`);\n                            texture.release();\n                        }\n                    });\n                }\n            }\n        }\n    }\n\n    // Set as a proxy tile for another tile\n    setProxyFor (tile) {\n        if (tile) {\n            this.visible = true;\n            this.proxy_for = this.proxy_for || [];\n            this.proxy_for.push(tile);\n            this.proxy_order_offset = 1; // draw proxies a half-layer back (order is scaled 2x to avoid integer truncation)\n            tile.proxied_as = (tile.style_z > this.style_z ? 'child' : 'parent');\n            this.proxy_level = Math.abs(tile.style_z - this.style_z); // # of zoom levels proxy is above/below target tile\n        }\n        else {\n            this.proxy_for = null;\n            this.proxy_order_offset = 0;\n            this.proxy_level = 0;\n        }\n    }\n\n    isProxy () {\n        return this.proxy_for != null;\n    }\n\n    // Proxy tiles only need to render a specific style if any of the tiles they are proxying *for*\n    // haven't finished loading that style yet. If all proxied tiles *have* data for that style, then it's\n    // safe to hide the proxy tile's version.\n    shouldProxyForStyle (style) {\n        return !this.proxy_for || this.proxy_for.some(t => t.meshes[style] == null);\n    }\n\n    // Update model matrix and tile uniforms\n    setupProgram ({ model, model32 }, program) {\n        // Tile origin\n        program.uniform('4fv', 'u_tile_origin', [this.min.x, this.min.y, this.style_z, this.coords.z]);\n        program.uniform('1f', 'u_tile_proxy_order_offset', this.proxy_order_offset);\n\n        // Model - transform tile space into world space (meters, absolute mercator position)\n        mat4.identity(model);\n        mat4.translate(model, model, vec3.fromValues(this.min.x, this.min.y, 0));\n        mat4.scale(model, model, vec3.fromValues(this.span.x / Geo.tile_scale, this.span.y / Geo.tile_scale, 1)); // scale tile local coords to meters\n        mat4.copy(model32, model);\n        program.uniform('Matrix4fv', 'u_model', model32);\n\n        // Fade in labels according to proxy status, avoiding \"flickering\" where\n        // labels quickly go from invisible back to visible\n        program.uniform('1i', 'u_tile_fade_in', this.fade_in && this.proxied_as !== 'child');\n    }\n\n    // Slice a subset of keys out of a tile\n    // Includes a minimum set of pre-defined keys for load state, debug. etc.\n    // We use this to send a subset of the tile back to the main thread, to minimize unnecessary data transfer\n    // (e.g. very large items like feature geometry are not needed on the main thread)\n    static slice (tile, keys) {\n        let keep = [\n            'id',\n            'key',\n            'loading',\n            'loaded',\n            'generation',\n            'error',\n            'debug'\n        ];\n        if (Array.isArray(keys)) {\n            keep.push(...keys);\n        }\n\n        // Build the tile subset\n        var tile_subset = {};\n        for (let k=0; k < keep.length; k++) {\n            const key = keep[k];\n            tile_subset[key] = tile[key];\n        }\n\n        return tile_subset;\n    }\n\n    merge (other) {\n        this.loading = other.loading;\n        this.loaded = other.loaded;\n        this.generation = other.generation;\n        this.error = other.error;\n        this.mesh_data = other.mesh_data;\n        this.debug = mergeObjects(this.debug, other.debug);\n        return this;\n    }\n\n    printDebug (progress) {\n        const exclude = ['layers'];\n        let copy = {};\n        for (let key in this.debug) {\n            if (exclude.indexOf(key) === -1) {\n                copy[key] = this.debug[key];\n            }\n        }\n\n        log('debug', `Tile ${progress.done ? '(done)' : ''}: debug for ${this.key}: [  ${JSON.stringify(copy)} ]`);\n    }\n\n}\n\nTile.coord_children = {}; // only allocate children coordinates once per coordinate\n\n// Sum up layer feature/geometry stats from a set of tiles\nexport function debugSumLayerStats(tiles) {\n    let list = {}, tree = {};\n\n    tiles.filter(tile => tile.debug.layers).forEach(tile => {\n        // layer list\n        Object.keys(tile.debug.layers.list).forEach(layer => {\n            let counts = tile.debug.layers.list[layer];\n            addLayerDebugEntry(list, layer, counts.features, counts.geoms, counts.styles, counts.base);\n        });\n\n        // layer tree\n        addDebugLayers(tile.debug.layers.tree, tree);\n    });\n\n    return { list, tree };\n}\n\n// build debug stats layer tree\nfunction addDebugLayers (node, tree) {\n    for (let layer in node) {\n        let counts = node[layer];\n        addLayerDebugEntry(tree, layer, counts.features, counts.geoms, counts.styles, counts.base);\n        if (counts.layers) {\n            tree[layer].layers = tree[layer].layers || {};\n            addDebugLayers(counts.layers, tree[layer].layers); // process child layers\n        }\n    }\n}\n","exports.read = function (buffer, offset, isLE, mLen, nBytes) {\n  var e, m\n  var eLen = nBytes * 8 - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var nBits = -7\n  var i = isLE ? (nBytes - 1) : 0\n  var d = isLE ? -1 : 1\n  var s = buffer[offset + i]\n\n  i += d\n\n  e = s & ((1 << (-nBits)) - 1)\n  s >>= (-nBits)\n  nBits += eLen\n  for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n  m = e & ((1 << (-nBits)) - 1)\n  e >>= (-nBits)\n  nBits += mLen\n  for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n  if (e === 0) {\n    e = 1 - eBias\n  } else if (e === eMax) {\n    return m ? NaN : ((s ? -1 : 1) * Infinity)\n  } else {\n    m = m + Math.pow(2, mLen)\n    e = e - eBias\n  }\n  return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n  var e, m, c\n  var eLen = nBytes * 8 - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n  var i = isLE ? 0 : (nBytes - 1)\n  var d = isLE ? 1 : -1\n  var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n  value = Math.abs(value)\n\n  if (isNaN(value) || value === Infinity) {\n    m = isNaN(value) ? 1 : 0\n    e = eMax\n  } else {\n    e = Math.floor(Math.log(value) / Math.LN2)\n    if (value * (c = Math.pow(2, -e)) < 1) {\n      e--\n      c *= 2\n    }\n    if (e + eBias >= 1) {\n      value += rt / c\n    } else {\n      value += rt * Math.pow(2, 1 - eBias)\n    }\n    if (value * c >= 2) {\n      e++\n      c /= 2\n    }\n\n    if (e + eBias >= eMax) {\n      m = 0\n      e = eMax\n    } else if (e + eBias >= 1) {\n      m = (value * c - 1) * Math.pow(2, mLen)\n      e = e + eBias\n    } else {\n      m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n      e = 0\n    }\n  }\n\n  for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n  e = (e << mLen) | m\n  eLen += mLen\n  for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n  buffer[offset + i - d] |= s * 128\n}\n","'use strict';\n\nmodule.exports = Pbf;\n\nvar ieee754 = require('ieee754');\n\nfunction Pbf(buf) {\n    this.buf = ArrayBuffer.isView && ArrayBuffer.isView(buf) ? buf : new Uint8Array(buf || 0);\n    this.pos = 0;\n    this.type = 0;\n    this.length = this.buf.length;\n}\n\nPbf.Varint  = 0; // varint: int32, int64, uint32, uint64, sint32, sint64, bool, enum\nPbf.Fixed64 = 1; // 64-bit: double, fixed64, sfixed64\nPbf.Bytes   = 2; // length-delimited: string, bytes, embedded messages, packed repeated fields\nPbf.Fixed32 = 5; // 32-bit: float, fixed32, sfixed32\n\nvar SHIFT_LEFT_32 = (1 << 16) * (1 << 16),\n    SHIFT_RIGHT_32 = 1 / SHIFT_LEFT_32;\n\nPbf.prototype = {\n\n    destroy: function() {\n        this.buf = null;\n    },\n\n    // === READING =================================================================\n\n    readFields: function(readField, result, end) {\n        end = end || this.length;\n\n        while (this.pos < end) {\n            var val = this.readVarint(),\n                tag = val >> 3,\n                startPos = this.pos;\n\n            this.type = val & 0x7;\n            readField(tag, result, this);\n\n            if (this.pos === startPos) this.skip(val);\n        }\n        return result;\n    },\n\n    readMessage: function(readField, result) {\n        return this.readFields(readField, result, this.readVarint() + this.pos);\n    },\n\n    readFixed32: function() {\n        var val = readUInt32(this.buf, this.pos);\n        this.pos += 4;\n        return val;\n    },\n\n    readSFixed32: function() {\n        var val = readInt32(this.buf, this.pos);\n        this.pos += 4;\n        return val;\n    },\n\n    // 64-bit int handling is based on github.com/dpw/node-buffer-more-ints (MIT-licensed)\n\n    readFixed64: function() {\n        var val = readUInt32(this.buf, this.pos) + readUInt32(this.buf, this.pos + 4) * SHIFT_LEFT_32;\n        this.pos += 8;\n        return val;\n    },\n\n    readSFixed64: function() {\n        var val = readUInt32(this.buf, this.pos) + readInt32(this.buf, this.pos + 4) * SHIFT_LEFT_32;\n        this.pos += 8;\n        return val;\n    },\n\n    readFloat: function() {\n        var val = ieee754.read(this.buf, this.pos, true, 23, 4);\n        this.pos += 4;\n        return val;\n    },\n\n    readDouble: function() {\n        var val = ieee754.read(this.buf, this.pos, true, 52, 8);\n        this.pos += 8;\n        return val;\n    },\n\n    readVarint: function(isSigned) {\n        var buf = this.buf,\n            val, b;\n\n        b = buf[this.pos++]; val  =  b & 0x7f;        if (b < 0x80) return val;\n        b = buf[this.pos++]; val |= (b & 0x7f) << 7;  if (b < 0x80) return val;\n        b = buf[this.pos++]; val |= (b & 0x7f) << 14; if (b < 0x80) return val;\n        b = buf[this.pos++]; val |= (b & 0x7f) << 21; if (b < 0x80) return val;\n        b = buf[this.pos];   val |= (b & 0x0f) << 28;\n\n        return readVarintRemainder(val, isSigned, this);\n    },\n\n    readVarint64: function() { // for compatibility with v2.0.1\n        return this.readVarint(true);\n    },\n\n    readSVarint: function() {\n        var num = this.readVarint();\n        return num % 2 === 1 ? (num + 1) / -2 : num / 2; // zigzag encoding\n    },\n\n    readBoolean: function() {\n        return Boolean(this.readVarint());\n    },\n\n    readString: function() {\n        var end = this.readVarint() + this.pos,\n            str = readUtf8(this.buf, this.pos, end);\n        this.pos = end;\n        return str;\n    },\n\n    readBytes: function() {\n        var end = this.readVarint() + this.pos,\n            buffer = this.buf.subarray(this.pos, end);\n        this.pos = end;\n        return buffer;\n    },\n\n    // verbose for performance reasons; doesn't affect gzipped size\n\n    readPackedVarint: function(arr, isSigned) {\n        var end = readPackedEnd(this);\n        arr = arr || [];\n        while (this.pos < end) arr.push(this.readVarint(isSigned));\n        return arr;\n    },\n    readPackedSVarint: function(arr) {\n        var end = readPackedEnd(this);\n        arr = arr || [];\n        while (this.pos < end) arr.push(this.readSVarint());\n        return arr;\n    },\n    readPackedBoolean: function(arr) {\n        var end = readPackedEnd(this);\n        arr = arr || [];\n        while (this.pos < end) arr.push(this.readBoolean());\n        return arr;\n    },\n    readPackedFloat: function(arr) {\n        var end = readPackedEnd(this);\n        arr = arr || [];\n        while (this.pos < end) arr.push(this.readFloat());\n        return arr;\n    },\n    readPackedDouble: function(arr) {\n        var end = readPackedEnd(this);\n        arr = arr || [];\n        while (this.pos < end) arr.push(this.readDouble());\n        return arr;\n    },\n    readPackedFixed32: function(arr) {\n        var end = readPackedEnd(this);\n        arr = arr || [];\n        while (this.pos < end) arr.push(this.readFixed32());\n        return arr;\n    },\n    readPackedSFixed32: function(arr) {\n        var end = readPackedEnd(this);\n        arr = arr || [];\n        while (this.pos < end) arr.push(this.readSFixed32());\n        return arr;\n    },\n    readPackedFixed64: function(arr) {\n        var end = readPackedEnd(this);\n        arr = arr || [];\n        while (this.pos < end) arr.push(this.readFixed64());\n        return arr;\n    },\n    readPackedSFixed64: function(arr) {\n        var end = readPackedEnd(this);\n        arr = arr || [];\n        while (this.pos < end) arr.push(this.readSFixed64());\n        return arr;\n    },\n\n    skip: function(val) {\n        var type = val & 0x7;\n        if (type === Pbf.Varint) while (this.buf[this.pos++] > 0x7f) {}\n        else if (type === Pbf.Bytes) this.pos = this.readVarint() + this.pos;\n        else if (type === Pbf.Fixed32) this.pos += 4;\n        else if (type === Pbf.Fixed64) this.pos += 8;\n        else throw new Error('Unimplemented type: ' + type);\n    },\n\n    // === WRITING =================================================================\n\n    writeTag: function(tag, type) {\n        this.writeVarint((tag << 3) | type);\n    },\n\n    realloc: function(min) {\n        var length = this.length || 16;\n\n        while (length < this.pos + min) length *= 2;\n\n        if (length !== this.length) {\n            var buf = new Uint8Array(length);\n            buf.set(this.buf);\n            this.buf = buf;\n            this.length = length;\n        }\n    },\n\n    finish: function() {\n        this.length = this.pos;\n        this.pos = 0;\n        return this.buf.subarray(0, this.length);\n    },\n\n    writeFixed32: function(val) {\n        this.realloc(4);\n        writeInt32(this.buf, val, this.pos);\n        this.pos += 4;\n    },\n\n    writeSFixed32: function(val) {\n        this.realloc(4);\n        writeInt32(this.buf, val, this.pos);\n        this.pos += 4;\n    },\n\n    writeFixed64: function(val) {\n        this.realloc(8);\n        writeInt32(this.buf, val & -1, this.pos);\n        writeInt32(this.buf, Math.floor(val * SHIFT_RIGHT_32), this.pos + 4);\n        this.pos += 8;\n    },\n\n    writeSFixed64: function(val) {\n        this.realloc(8);\n        writeInt32(this.buf, val & -1, this.pos);\n        writeInt32(this.buf, Math.floor(val * SHIFT_RIGHT_32), this.pos + 4);\n        this.pos += 8;\n    },\n\n    writeVarint: function(val) {\n        val = +val || 0;\n\n        if (val > 0xfffffff || val < 0) {\n            writeBigVarint(val, this);\n            return;\n        }\n\n        this.realloc(4);\n\n        this.buf[this.pos++] =           val & 0x7f  | (val > 0x7f ? 0x80 : 0); if (val <= 0x7f) return;\n        this.buf[this.pos++] = ((val >>>= 7) & 0x7f) | (val > 0x7f ? 0x80 : 0); if (val <= 0x7f) return;\n        this.buf[this.pos++] = ((val >>>= 7) & 0x7f) | (val > 0x7f ? 0x80 : 0); if (val <= 0x7f) return;\n        this.buf[this.pos++] =   (val >>> 7) & 0x7f;\n    },\n\n    writeSVarint: function(val) {\n        this.writeVarint(val < 0 ? -val * 2 - 1 : val * 2);\n    },\n\n    writeBoolean: function(val) {\n        this.writeVarint(Boolean(val));\n    },\n\n    writeString: function(str) {\n        str = String(str);\n        this.realloc(str.length * 4);\n\n        this.pos++; // reserve 1 byte for short string length\n\n        var startPos = this.pos;\n        // write the string directly to the buffer and see how much was written\n        this.pos = writeUtf8(this.buf, str, this.pos);\n        var len = this.pos - startPos;\n\n        if (len >= 0x80) makeRoomForExtraLength(startPos, len, this);\n\n        // finally, write the message length in the reserved place and restore the position\n        this.pos = startPos - 1;\n        this.writeVarint(len);\n        this.pos += len;\n    },\n\n    writeFloat: function(val) {\n        this.realloc(4);\n        ieee754.write(this.buf, val, this.pos, true, 23, 4);\n        this.pos += 4;\n    },\n\n    writeDouble: function(val) {\n        this.realloc(8);\n        ieee754.write(this.buf, val, this.pos, true, 52, 8);\n        this.pos += 8;\n    },\n\n    writeBytes: function(buffer) {\n        var len = buffer.length;\n        this.writeVarint(len);\n        this.realloc(len);\n        for (var i = 0; i < len; i++) this.buf[this.pos++] = buffer[i];\n    },\n\n    writeRawMessage: function(fn, obj) {\n        this.pos++; // reserve 1 byte for short message length\n\n        // write the message directly to the buffer and see how much was written\n        var startPos = this.pos;\n        fn(obj, this);\n        var len = this.pos - startPos;\n\n        if (len >= 0x80) makeRoomForExtraLength(startPos, len, this);\n\n        // finally, write the message length in the reserved place and restore the position\n        this.pos = startPos - 1;\n        this.writeVarint(len);\n        this.pos += len;\n    },\n\n    writeMessage: function(tag, fn, obj) {\n        this.writeTag(tag, Pbf.Bytes);\n        this.writeRawMessage(fn, obj);\n    },\n\n    writePackedVarint:   function(tag, arr) { this.writeMessage(tag, writePackedVarint, arr);   },\n    writePackedSVarint:  function(tag, arr) { this.writeMessage(tag, writePackedSVarint, arr);  },\n    writePackedBoolean:  function(tag, arr) { this.writeMessage(tag, writePackedBoolean, arr);  },\n    writePackedFloat:    function(tag, arr) { this.writeMessage(tag, writePackedFloat, arr);    },\n    writePackedDouble:   function(tag, arr) { this.writeMessage(tag, writePackedDouble, arr);   },\n    writePackedFixed32:  function(tag, arr) { this.writeMessage(tag, writePackedFixed32, arr);  },\n    writePackedSFixed32: function(tag, arr) { this.writeMessage(tag, writePackedSFixed32, arr); },\n    writePackedFixed64:  function(tag, arr) { this.writeMessage(tag, writePackedFixed64, arr);  },\n    writePackedSFixed64: function(tag, arr) { this.writeMessage(tag, writePackedSFixed64, arr); },\n\n    writeBytesField: function(tag, buffer) {\n        this.writeTag(tag, Pbf.Bytes);\n        this.writeBytes(buffer);\n    },\n    writeFixed32Field: function(tag, val) {\n        this.writeTag(tag, Pbf.Fixed32);\n        this.writeFixed32(val);\n    },\n    writeSFixed32Field: function(tag, val) {\n        this.writeTag(tag, Pbf.Fixed32);\n        this.writeSFixed32(val);\n    },\n    writeFixed64Field: function(tag, val) {\n        this.writeTag(tag, Pbf.Fixed64);\n        this.writeFixed64(val);\n    },\n    writeSFixed64Field: function(tag, val) {\n        this.writeTag(tag, Pbf.Fixed64);\n        this.writeSFixed64(val);\n    },\n    writeVarintField: function(tag, val) {\n        this.writeTag(tag, Pbf.Varint);\n        this.writeVarint(val);\n    },\n    writeSVarintField: function(tag, val) {\n        this.writeTag(tag, Pbf.Varint);\n        this.writeSVarint(val);\n    },\n    writeStringField: function(tag, str) {\n        this.writeTag(tag, Pbf.Bytes);\n        this.writeString(str);\n    },\n    writeFloatField: function(tag, val) {\n        this.writeTag(tag, Pbf.Fixed32);\n        this.writeFloat(val);\n    },\n    writeDoubleField: function(tag, val) {\n        this.writeTag(tag, Pbf.Fixed64);\n        this.writeDouble(val);\n    },\n    writeBooleanField: function(tag, val) {\n        this.writeVarintField(tag, Boolean(val));\n    }\n};\n\nfunction readVarintRemainder(l, s, p) {\n    var buf = p.buf,\n        h, b;\n\n    b = buf[p.pos++]; h  = (b & 0x70) >> 4;  if (b < 0x80) return toNum(l, h, s);\n    b = buf[p.pos++]; h |= (b & 0x7f) << 3;  if (b < 0x80) return toNum(l, h, s);\n    b = buf[p.pos++]; h |= (b & 0x7f) << 10; if (b < 0x80) return toNum(l, h, s);\n    b = buf[p.pos++]; h |= (b & 0x7f) << 17; if (b < 0x80) return toNum(l, h, s);\n    b = buf[p.pos++]; h |= (b & 0x7f) << 24; if (b < 0x80) return toNum(l, h, s);\n    b = buf[p.pos++]; h |= (b & 0x01) << 31; if (b < 0x80) return toNum(l, h, s);\n\n    throw new Error('Expected varint not more than 10 bytes');\n}\n\nfunction readPackedEnd(pbf) {\n    return pbf.type === Pbf.Bytes ?\n        pbf.readVarint() + pbf.pos : pbf.pos + 1;\n}\n\nfunction toNum(low, high, isSigned) {\n    if (isSigned) {\n        return high * 0x100000000 + (low >>> 0);\n    }\n\n    return ((high >>> 0) * 0x100000000) + (low >>> 0);\n}\n\nfunction writeBigVarint(val, pbf) {\n    var low, high;\n\n    if (val >= 0) {\n        low  = (val % 0x100000000) | 0;\n        high = (val / 0x100000000) | 0;\n    } else {\n        low  = ~(-val % 0x100000000);\n        high = ~(-val / 0x100000000);\n\n        if (low ^ 0xffffffff) {\n            low = (low + 1) | 0;\n        } else {\n            low = 0;\n            high = (high + 1) | 0;\n        }\n    }\n\n    if (val >= 0x10000000000000000 || val < -0x10000000000000000) {\n        throw new Error('Given varint doesn\\'t fit into 10 bytes');\n    }\n\n    pbf.realloc(10);\n\n    writeBigVarintLow(low, high, pbf);\n    writeBigVarintHigh(high, pbf);\n}\n\nfunction writeBigVarintLow(low, high, pbf) {\n    pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;\n    pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;\n    pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;\n    pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7;\n    pbf.buf[pbf.pos]   = low & 0x7f;\n}\n\nfunction writeBigVarintHigh(high, pbf) {\n    var lsb = (high & 0x07) << 4;\n\n    pbf.buf[pbf.pos++] |= lsb         | ((high >>>= 3) ? 0x80 : 0); if (!high) return;\n    pbf.buf[pbf.pos++]  = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return;\n    pbf.buf[pbf.pos++]  = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return;\n    pbf.buf[pbf.pos++]  = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return;\n    pbf.buf[pbf.pos++]  = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return;\n    pbf.buf[pbf.pos++]  = high & 0x7f;\n}\n\nfunction makeRoomForExtraLength(startPos, len, pbf) {\n    var extraLen =\n        len <= 0x3fff ? 1 :\n        len <= 0x1fffff ? 2 :\n        len <= 0xfffffff ? 3 : Math.ceil(Math.log(len) / (Math.LN2 * 7));\n\n    // if 1 byte isn't enough for encoding message length, shift the data to the right\n    pbf.realloc(extraLen);\n    for (var i = pbf.pos - 1; i >= startPos; i--) pbf.buf[i + extraLen] = pbf.buf[i];\n}\n\nfunction writePackedVarint(arr, pbf)   { for (var i = 0; i < arr.length; i++) pbf.writeVarint(arr[i]);   }\nfunction writePackedSVarint(arr, pbf)  { for (var i = 0; i < arr.length; i++) pbf.writeSVarint(arr[i]);  }\nfunction writePackedFloat(arr, pbf)    { for (var i = 0; i < arr.length; i++) pbf.writeFloat(arr[i]);    }\nfunction writePackedDouble(arr, pbf)   { for (var i = 0; i < arr.length; i++) pbf.writeDouble(arr[i]);   }\nfunction writePackedBoolean(arr, pbf)  { for (var i = 0; i < arr.length; i++) pbf.writeBoolean(arr[i]);  }\nfunction writePackedFixed32(arr, pbf)  { for (var i = 0; i < arr.length; i++) pbf.writeFixed32(arr[i]);  }\nfunction writePackedSFixed32(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeSFixed32(arr[i]); }\nfunction writePackedFixed64(arr, pbf)  { for (var i = 0; i < arr.length; i++) pbf.writeFixed64(arr[i]);  }\nfunction writePackedSFixed64(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeSFixed64(arr[i]); }\n\n// Buffer code below from https://github.com/feross/buffer, MIT-licensed\n\nfunction readUInt32(buf, pos) {\n    return ((buf[pos]) |\n        (buf[pos + 1] << 8) |\n        (buf[pos + 2] << 16)) +\n        (buf[pos + 3] * 0x1000000);\n}\n\nfunction writeInt32(buf, val, pos) {\n    buf[pos] = val;\n    buf[pos + 1] = (val >>> 8);\n    buf[pos + 2] = (val >>> 16);\n    buf[pos + 3] = (val >>> 24);\n}\n\nfunction readInt32(buf, pos) {\n    return ((buf[pos]) |\n        (buf[pos + 1] << 8) |\n        (buf[pos + 2] << 16)) +\n        (buf[pos + 3] << 24);\n}\n\nfunction readUtf8(buf, pos, end) {\n    var str = '';\n    var i = pos;\n\n    while (i < end) {\n        var b0 = buf[i];\n        var c = null; // codepoint\n        var bytesPerSequence =\n            b0 > 0xEF ? 4 :\n            b0 > 0xDF ? 3 :\n            b0 > 0xBF ? 2 : 1;\n\n        if (i + bytesPerSequence > end) break;\n\n        var b1, b2, b3;\n\n        if (bytesPerSequence === 1) {\n            if (b0 < 0x80) {\n                c = b0;\n            }\n        } else if (bytesPerSequence === 2) {\n            b1 = buf[i + 1];\n            if ((b1 & 0xC0) === 0x80) {\n                c = (b0 & 0x1F) << 0x6 | (b1 & 0x3F);\n                if (c <= 0x7F) {\n                    c = null;\n                }\n            }\n        } else if (bytesPerSequence === 3) {\n            b1 = buf[i + 1];\n            b2 = buf[i + 2];\n            if ((b1 & 0xC0) === 0x80 && (b2 & 0xC0) === 0x80) {\n                c = (b0 & 0xF) << 0xC | (b1 & 0x3F) << 0x6 | (b2 & 0x3F);\n                if (c <= 0x7FF || (c >= 0xD800 && c <= 0xDFFF)) {\n                    c = null;\n                }\n            }\n        } else if (bytesPerSequence === 4) {\n            b1 = buf[i + 1];\n            b2 = buf[i + 2];\n            b3 = buf[i + 3];\n            if ((b1 & 0xC0) === 0x80 && (b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80) {\n                c = (b0 & 0xF) << 0x12 | (b1 & 0x3F) << 0xC | (b2 & 0x3F) << 0x6 | (b3 & 0x3F);\n                if (c <= 0xFFFF || c >= 0x110000) {\n                    c = null;\n                }\n            }\n        }\n\n        if (c === null) {\n            c = 0xFFFD;\n            bytesPerSequence = 1;\n\n        } else if (c > 0xFFFF) {\n            c -= 0x10000;\n            str += String.fromCharCode(c >>> 10 & 0x3FF | 0xD800);\n            c = 0xDC00 | c & 0x3FF;\n        }\n\n        str += String.fromCharCode(c);\n        i += bytesPerSequence;\n    }\n\n    return str;\n}\n\nfunction writeUtf8(buf, str, pos) {\n    for (var i = 0, c, lead; i < str.length; i++) {\n        c = str.charCodeAt(i); // code point\n\n        if (c > 0xD7FF && c < 0xE000) {\n            if (lead) {\n                if (c < 0xDC00) {\n                    buf[pos++] = 0xEF;\n                    buf[pos++] = 0xBF;\n                    buf[pos++] = 0xBD;\n                    lead = c;\n                    continue;\n                } else {\n                    c = lead - 0xD800 << 10 | c - 0xDC00 | 0x10000;\n                    lead = null;\n                }\n            } else {\n                if (c > 0xDBFF || (i + 1 === str.length)) {\n                    buf[pos++] = 0xEF;\n                    buf[pos++] = 0xBF;\n                    buf[pos++] = 0xBD;\n                } else {\n                    lead = c;\n                }\n                continue;\n            }\n        } else if (lead) {\n            buf[pos++] = 0xEF;\n            buf[pos++] = 0xBF;\n            buf[pos++] = 0xBD;\n            lead = null;\n        }\n\n        if (c < 0x80) {\n            buf[pos++] = c;\n        } else {\n            if (c < 0x800) {\n                buf[pos++] = c >> 0x6 | 0xC0;\n            } else {\n                if (c < 0x10000) {\n                    buf[pos++] = c >> 0xC | 0xE0;\n                } else {\n                    buf[pos++] = c >> 0x12 | 0xF0;\n                    buf[pos++] = c >> 0xC & 0x3F | 0x80;\n                }\n                buf[pos++] = c >> 0x6 & 0x3F | 0x80;\n            }\n            buf[pos++] = c & 0x3F | 0x80;\n        }\n    }\n    return pos;\n}\n","'use strict';\n\nmodule.exports = Point;\n\n/**\n * A standalone point geometry with useful accessor, comparison, and\n * modification methods.\n *\n * @class Point\n * @param {Number} x the x-coordinate. this could be longitude or screen\n * pixels, or any other sort of unit.\n * @param {Number} y the y-coordinate. this could be latitude or screen\n * pixels, or any other sort of unit.\n * @example\n * var point = new Point(-77, 38);\n */\nfunction Point(x, y) {\n    this.x = x;\n    this.y = y;\n}\n\nPoint.prototype = {\n\n    /**\n     * Clone this point, returning a new point that can be modified\n     * without affecting the old one.\n     * @return {Point} the clone\n     */\n    clone: function() { return new Point(this.x, this.y); },\n\n    /**\n     * Add this point's x & y coordinates to another point,\n     * yielding a new point.\n     * @param {Point} p the other point\n     * @return {Point} output point\n     */\n    add:     function(p) { return this.clone()._add(p); },\n\n    /**\n     * Subtract this point's x & y coordinates to from point,\n     * yielding a new point.\n     * @param {Point} p the other point\n     * @return {Point} output point\n     */\n    sub:     function(p) { return this.clone()._sub(p); },\n\n    /**\n     * Multiply this point's x & y coordinates by point,\n     * yielding a new point.\n     * @param {Point} p the other point\n     * @return {Point} output point\n     */\n    multByPoint:    function(p) { return this.clone()._multByPoint(p); },\n\n    /**\n     * Divide this point's x & y coordinates by point,\n     * yielding a new point.\n     * @param {Point} p the other point\n     * @return {Point} output point\n     */\n    divByPoint:     function(p) { return this.clone()._divByPoint(p); },\n\n    /**\n     * Multiply this point's x & y coordinates by a factor,\n     * yielding a new point.\n     * @param {Point} k factor\n     * @return {Point} output point\n     */\n    mult:    function(k) { return this.clone()._mult(k); },\n\n    /**\n     * Divide this point's x & y coordinates by a factor,\n     * yielding a new point.\n     * @param {Point} k factor\n     * @return {Point} output point\n     */\n    div:     function(k) { return this.clone()._div(k); },\n\n    /**\n     * Rotate this point around the 0, 0 origin by an angle a,\n     * given in radians\n     * @param {Number} a angle to rotate around, in radians\n     * @return {Point} output point\n     */\n    rotate:  function(a) { return this.clone()._rotate(a); },\n\n    /**\n     * Rotate this point around p point by an angle a,\n     * given in radians\n     * @param {Number} a angle to rotate around, in radians\n     * @param {Point} p Point to rotate around\n     * @return {Point} output point\n     */\n    rotateAround:  function(a,p) { return this.clone()._rotateAround(a,p); },\n\n    /**\n     * Multiply this point by a 4x1 transformation matrix\n     * @param {Array<Number>} m transformation matrix\n     * @return {Point} output point\n     */\n    matMult: function(m) { return this.clone()._matMult(m); },\n\n    /**\n     * Calculate this point but as a unit vector from 0, 0, meaning\n     * that the distance from the resulting point to the 0, 0\n     * coordinate will be equal to 1 and the angle from the resulting\n     * point to the 0, 0 coordinate will be the same as before.\n     * @return {Point} unit vector point\n     */\n    unit:    function() { return this.clone()._unit(); },\n\n    /**\n     * Compute a perpendicular point, where the new y coordinate\n     * is the old x coordinate and the new x coordinate is the old y\n     * coordinate multiplied by -1\n     * @return {Point} perpendicular point\n     */\n    perp:    function() { return this.clone()._perp(); },\n\n    /**\n     * Return a version of this point with the x & y coordinates\n     * rounded to integers.\n     * @return {Point} rounded point\n     */\n    round:   function() { return this.clone()._round(); },\n\n    /**\n     * Return the magitude of this point: this is the Euclidean\n     * distance from the 0, 0 coordinate to this point's x and y\n     * coordinates.\n     * @return {Number} magnitude\n     */\n    mag: function() {\n        return Math.sqrt(this.x * this.x + this.y * this.y);\n    },\n\n    /**\n     * Judge whether this point is equal to another point, returning\n     * true or false.\n     * @param {Point} other the other point\n     * @return {boolean} whether the points are equal\n     */\n    equals: function(other) {\n        return this.x === other.x &&\n               this.y === other.y;\n    },\n\n    /**\n     * Calculate the distance from this point to another point\n     * @param {Point} p the other point\n     * @return {Number} distance\n     */\n    dist: function(p) {\n        return Math.sqrt(this.distSqr(p));\n    },\n\n    /**\n     * Calculate the distance from this point to another point,\n     * without the square root step. Useful if you're comparing\n     * relative distances.\n     * @param {Point} p the other point\n     * @return {Number} distance\n     */\n    distSqr: function(p) {\n        var dx = p.x - this.x,\n            dy = p.y - this.y;\n        return dx * dx + dy * dy;\n    },\n\n    /**\n     * Get the angle from the 0, 0 coordinate to this point, in radians\n     * coordinates.\n     * @return {Number} angle\n     */\n    angle: function() {\n        return Math.atan2(this.y, this.x);\n    },\n\n    /**\n     * Get the angle from this point to another point, in radians\n     * @param {Point} b the other point\n     * @return {Number} angle\n     */\n    angleTo: function(b) {\n        return Math.atan2(this.y - b.y, this.x - b.x);\n    },\n\n    /**\n     * Get the angle between this point and another point, in radians\n     * @param {Point} b the other point\n     * @return {Number} angle\n     */\n    angleWith: function(b) {\n        return this.angleWithSep(b.x, b.y);\n    },\n\n    /*\n     * Find the angle of the two vectors, solving the formula for\n     * the cross product a x b = |a||b|sin(Î¸) for Î¸.\n     * @param {Number} x the x-coordinate\n     * @param {Number} y the y-coordinate\n     * @return {Number} the angle in radians\n     */\n    angleWithSep: function(x, y) {\n        return Math.atan2(\n            this.x * y - this.y * x,\n            this.x * x + this.y * y);\n    },\n\n    _matMult: function(m) {\n        var x = m[0] * this.x + m[1] * this.y,\n            y = m[2] * this.x + m[3] * this.y;\n        this.x = x;\n        this.y = y;\n        return this;\n    },\n\n    _add: function(p) {\n        this.x += p.x;\n        this.y += p.y;\n        return this;\n    },\n\n    _sub: function(p) {\n        this.x -= p.x;\n        this.y -= p.y;\n        return this;\n    },\n\n    _mult: function(k) {\n        this.x *= k;\n        this.y *= k;\n        return this;\n    },\n\n    _div: function(k) {\n        this.x /= k;\n        this.y /= k;\n        return this;\n    },\n\n    _multByPoint: function(p) {\n        this.x *= p.x;\n        this.y *= p.y;\n        return this;\n    },\n\n    _divByPoint: function(p) {\n        this.x /= p.x;\n        this.y /= p.y;\n        return this;\n    },\n\n    _unit: function() {\n        this._div(this.mag());\n        return this;\n    },\n\n    _perp: function() {\n        var y = this.y;\n        this.y = this.x;\n        this.x = -y;\n        return this;\n    },\n\n    _rotate: function(angle) {\n        var cos = Math.cos(angle),\n            sin = Math.sin(angle),\n            x = cos * this.x - sin * this.y,\n            y = sin * this.x + cos * this.y;\n        this.x = x;\n        this.y = y;\n        return this;\n    },\n\n    _rotateAround: function(angle, p) {\n        var cos = Math.cos(angle),\n            sin = Math.sin(angle),\n            x = p.x + cos * (this.x - p.x) - sin * (this.y - p.y),\n            y = p.y + sin * (this.x - p.x) + cos * (this.y - p.y);\n        this.x = x;\n        this.y = y;\n        return this;\n    },\n\n    _round: function() {\n        this.x = Math.round(this.x);\n        this.y = Math.round(this.y);\n        return this;\n    }\n};\n\n/**\n * Construct a point from an array if necessary, otherwise if the input\n * is already a Point, or an unknown type, return it unchanged\n * @param {Array<Number>|Point|*} a any kind of input value\n * @return {Point} constructed point, or passed-through value.\n * @example\n * // this\n * var point = Point.convert([0, 1]);\n * // is equivalent to\n * var point = new Point(0, 1);\n */\nPoint.convert = function (a) {\n    if (a instanceof Point) {\n        return a;\n    }\n    if (Array.isArray(a)) {\n        return new Point(a[0], a[1]);\n    }\n    return a;\n};\n","'use strict';\n\nvar Point = require('@mapbox/point-geometry');\n\nmodule.exports = VectorTileFeature;\n\nfunction VectorTileFeature(pbf, end, extent, keys, values) {\n    // Public\n    this.properties = {};\n    this.extent = extent;\n    this.type = 0;\n\n    // Private\n    this._pbf = pbf;\n    this._geometry = -1;\n    this._keys = keys;\n    this._values = values;\n\n    pbf.readFields(readFeature, this, end);\n}\n\nfunction readFeature(tag, feature, pbf) {\n    if (tag == 1) feature.id = pbf.readVarint();\n    else if (tag == 2) readTag(pbf, feature);\n    else if (tag == 3) feature.type = pbf.readVarint();\n    else if (tag == 4) feature._geometry = pbf.pos;\n}\n\nfunction readTag(pbf, feature) {\n    var end = pbf.readVarint() + pbf.pos;\n\n    while (pbf.pos < end) {\n        var key = feature._keys[pbf.readVarint()],\n            value = feature._values[pbf.readVarint()];\n        feature.properties[key] = value;\n    }\n}\n\nVectorTileFeature.types = ['Unknown', 'Point', 'LineString', 'Polygon'];\n\nVectorTileFeature.prototype.loadGeometry = function() {\n    var pbf = this._pbf;\n    pbf.pos = this._geometry;\n\n    var end = pbf.readVarint() + pbf.pos,\n        cmd = 1,\n        length = 0,\n        x = 0,\n        y = 0,\n        lines = [],\n        line;\n\n    while (pbf.pos < end) {\n        if (!length) {\n            var cmdLen = pbf.readVarint();\n            cmd = cmdLen & 0x7;\n            length = cmdLen >> 3;\n        }\n\n        length--;\n\n        if (cmd === 1 || cmd === 2) {\n            x += pbf.readSVarint();\n            y += pbf.readSVarint();\n\n            if (cmd === 1) { // moveTo\n                if (line) lines.push(line);\n                line = [];\n            }\n\n            line.push(new Point(x, y));\n\n        } else if (cmd === 7) {\n\n            // Workaround for https://github.com/mapbox/mapnik-vector-tile/issues/90\n            if (line) {\n                line.push(line[0].clone()); // closePolygon\n            }\n\n        } else {\n            throw new Error('unknown command ' + cmd);\n        }\n    }\n\n    if (line) lines.push(line);\n\n    return lines;\n};\n\nVectorTileFeature.prototype.bbox = function() {\n    var pbf = this._pbf;\n    pbf.pos = this._geometry;\n\n    var end = pbf.readVarint() + pbf.pos,\n        cmd = 1,\n        length = 0,\n        x = 0,\n        y = 0,\n        x1 = Infinity,\n        x2 = -Infinity,\n        y1 = Infinity,\n        y2 = -Infinity;\n\n    while (pbf.pos < end) {\n        if (!length) {\n            var cmdLen = pbf.readVarint();\n            cmd = cmdLen & 0x7;\n            length = cmdLen >> 3;\n        }\n\n        length--;\n\n        if (cmd === 1 || cmd === 2) {\n            x += pbf.readSVarint();\n            y += pbf.readSVarint();\n            if (x < x1) x1 = x;\n            if (x > x2) x2 = x;\n            if (y < y1) y1 = y;\n            if (y > y2) y2 = y;\n\n        } else if (cmd !== 7) {\n            throw new Error('unknown command ' + cmd);\n        }\n    }\n\n    return [x1, y1, x2, y2];\n};\n\nVectorTileFeature.prototype.toGeoJSON = function(x, y, z) {\n    var size = this.extent * Math.pow(2, z),\n        x0 = this.extent * x,\n        y0 = this.extent * y,\n        coords = this.loadGeometry(),\n        type = VectorTileFeature.types[this.type],\n        i, j;\n\n    function project(line) {\n        for (var j = 0; j < line.length; j++) {\n            var p = line[j], y2 = 180 - (p.y + y0) * 360 / size;\n            line[j] = [\n                (p.x + x0) * 360 / size - 180,\n                360 / Math.PI * Math.atan(Math.exp(y2 * Math.PI / 180)) - 90\n            ];\n        }\n    }\n\n    switch (this.type) {\n    case 1:\n        var points = [];\n        for (i = 0; i < coords.length; i++) {\n            points[i] = coords[i][0];\n        }\n        coords = points;\n        project(coords);\n        break;\n\n    case 2:\n        for (i = 0; i < coords.length; i++) {\n            project(coords[i]);\n        }\n        break;\n\n    case 3:\n        coords = classifyRings(coords);\n        for (i = 0; i < coords.length; i++) {\n            for (j = 0; j < coords[i].length; j++) {\n                project(coords[i][j]);\n            }\n        }\n        break;\n    }\n\n    if (coords.length === 1) {\n        coords = coords[0];\n    } else {\n        type = 'Multi' + type;\n    }\n\n    var result = {\n        type: \"Feature\",\n        geometry: {\n            type: type,\n            coordinates: coords\n        },\n        properties: this.properties\n    };\n\n    if ('id' in this) {\n        result.id = this.id;\n    }\n\n    return result;\n};\n\n// classifies an array of rings into polygons with outer rings and holes\n\nfunction classifyRings(rings) {\n    var len = rings.length;\n\n    if (len <= 1) return [rings];\n\n    var polygons = [],\n        polygon,\n        ccw;\n\n    for (var i = 0; i < len; i++) {\n        var area = signedArea(rings[i]);\n        if (area === 0) continue;\n\n        if (ccw === undefined) ccw = area < 0;\n\n        if (ccw === area < 0) {\n            if (polygon) polygons.push(polygon);\n            polygon = [rings[i]];\n\n        } else {\n            polygon.push(rings[i]);\n        }\n    }\n    if (polygon) polygons.push(polygon);\n\n    return polygons;\n}\n\nfunction signedArea(ring) {\n    var sum = 0;\n    for (var i = 0, len = ring.length, j = len - 1, p1, p2; i < len; j = i++) {\n        p1 = ring[i];\n        p2 = ring[j];\n        sum += (p2.x - p1.x) * (p1.y + p2.y);\n    }\n    return sum;\n}\n","'use strict';\n\nvar VectorTileFeature = require('./vectortilefeature.js');\n\nmodule.exports = VectorTileLayer;\n\nfunction VectorTileLayer(pbf, end) {\n    // Public\n    this.version = 1;\n    this.name = null;\n    this.extent = 4096;\n    this.length = 0;\n\n    // Private\n    this._pbf = pbf;\n    this._keys = [];\n    this._values = [];\n    this._features = [];\n\n    pbf.readFields(readLayer, this, end);\n\n    this.length = this._features.length;\n}\n\nfunction readLayer(tag, layer, pbf) {\n    if (tag === 15) layer.version = pbf.readVarint();\n    else if (tag === 1) layer.name = pbf.readString();\n    else if (tag === 5) layer.extent = pbf.readVarint();\n    else if (tag === 2) layer._features.push(pbf.pos);\n    else if (tag === 3) layer._keys.push(pbf.readString());\n    else if (tag === 4) layer._values.push(readValueMessage(pbf));\n}\n\nfunction readValueMessage(pbf) {\n    var value = null,\n        end = pbf.readVarint() + pbf.pos;\n\n    while (pbf.pos < end) {\n        var tag = pbf.readVarint() >> 3;\n\n        value = tag === 1 ? pbf.readString() :\n            tag === 2 ? pbf.readFloat() :\n            tag === 3 ? pbf.readDouble() :\n            tag === 4 ? pbf.readVarint64() :\n            tag === 5 ? pbf.readVarint() :\n            tag === 6 ? pbf.readSVarint() :\n            tag === 7 ? pbf.readBoolean() : null;\n    }\n\n    return value;\n}\n\n// return feature `i` from this layer as a `VectorTileFeature`\nVectorTileLayer.prototype.feature = function(i) {\n    if (i < 0 || i >= this._features.length) throw new Error('feature index out of bounds');\n\n    this._pbf.pos = this._features[i];\n\n    var end = this._pbf.readVarint() + this._pbf.pos;\n    return new VectorTileFeature(this._pbf, end, this.extent, this._keys, this._values);\n};\n","'use strict';\n\nvar VectorTileLayer = require('./vectortilelayer');\n\nmodule.exports = VectorTile;\n\nfunction VectorTile(pbf, end) {\n    this.layers = pbf.readFields(readTile, {}, end);\n}\n\nfunction readTile(tag, layers, pbf) {\n    if (tag === 3) {\n        var layer = new VectorTileLayer(pbf, pbf.readVarint() + pbf.pos);\n        if (layer.length) layers[layer.name] = layer;\n    }\n}\n\n","module.exports.VectorTile = require('./lib/vectortile.js');\nmodule.exports.VectorTileFeature = require('./lib/vectortilefeature.js');\nmodule.exports.VectorTileLayer = require('./lib/vectortilelayer.js');\n","import DataSource, {NetworkTileSource} from './data_source';\nimport Geo from '../utils/geo';\nimport log from '../utils/log';\n\nimport Pbf from 'pbf';\nimport {VectorTile, VectorTileFeature} from '@mapbox/vector-tile';\n\nconst PARSE_JSON_TYPE = {\n    NONE: 0,\n    ALL: 1,\n    SOME: 2\n};\n\nconst PARSE_JSON_TEST = ['{', '[']; // one-time allocated array/strings\n\n/**\n Mapbox Vector Tile format\n @class MVTSource\n*/\nexport class MVTSource extends NetworkTileSource {\n\n    constructor (source, sources) {\n        super(source, sources);\n        this.response_type = 'arraybuffer'; // binary data\n\n        // Optionally parse some or all properties from JSON strings\n        if (source.parse_json === true) {\n            // try to parse all properties (least efficient)\n            this.parse_json_type = PARSE_JSON_TYPE.ALL;\n        }\n        else if (Array.isArray(source.parse_json)) {\n            // try to parse a specific list of property names (more efficient)\n            this.parse_json_type = PARSE_JSON_TYPE.SOME;\n            this.parse_json_prop_list = source.parse_json;\n        }\n        else {\n            if (source.parse_json != null) {\n                let msg = `Data source '${this.name}': 'parse_json' parameter should be 'true', or an array of ` +\n                    `property names (was '${JSON.stringify(source.parse_json)}')`;\n                log({ level: 'warn', once: true }, msg);\n            }\n\n            // skip parsing entirely (default behavior)\n            this.parse_json_type = PARSE_JSON_TYPE.NONE;\n        }\n    }\n\n    parseSourceData (tile, source, response) {\n        // Convert Mapbox vector tile to GeoJSON\n        var data = new Uint8Array(response);\n        var buffer = new Pbf(data);\n        source.data = new VectorTile(buffer);\n        source.layers = this.toGeoJSON(source.data);\n\n        // Apply optional data transform\n        if (typeof this.transform === 'function') {\n            const tile_data = {\n                min: Object.assign({}, tile.min),\n                max: Object.assign({}, tile.max),\n                coords: Object.assign({}, tile.coords)\n            };\n            source.layers = this.transform(source.layers, this.extra_data, tile_data);\n        }\n\n        delete source.data; // comment out to save raw data for debugging\n    }\n\n    // Loop through layers/features using Mapbox lib API, convert to GeoJSON features\n    // Returns an object with keys for each layer, e.g. { layer: geojson }\n    toGeoJSON (tile) {\n        var layers = {};\n        for (var l in tile.layers) {\n            var layer = tile.layers[l];\n            var scale = Geo.tile_scale / layer.extent;\n            var layer_geojson = {\n                type: 'FeatureCollection',\n                features: []\n            };\n\n            for (var f=0; f < layer.length; f++) {\n                var feature = layer.feature(f);\n                var feature_geojson = {\n                    type: 'Feature',\n                    geometry: {},\n                    id: feature.id,\n                    properties: feature.properties\n                };\n\n                this.parseJSONProperties(feature_geojson);\n\n                var geometry = feature_geojson.geometry;\n                var coordinates = feature.loadGeometry();\n                for (var r=0; r < coordinates.length; r++) {\n                    var ring = coordinates[r];\n                    for (var c=0; c < ring.length; c++) {\n                        ring[c] = [\n                            ring[c].x * scale,\n                            ring[c].y * scale\n                        ];\n                    }\n                }\n                geometry.coordinates = coordinates;\n\n                if (VectorTileFeature.types[feature.type] === 'Point') {\n                    if (coordinates.length === 1) {\n                        geometry.type = 'Point';\n                        geometry.coordinates = geometry.coordinates[0][0];\n                    }\n                    else {\n                        geometry.type = 'MultiPoint';\n                        geometry.coordinates = geometry.coordinates[0];\n                    }\n                }\n                else if (VectorTileFeature.types[feature.type] === 'LineString') {\n                    if (coordinates.length === 1) {\n                        geometry.type = 'LineString';\n                        geometry.coordinates = geometry.coordinates[0];\n                    }\n                    else {\n                        geometry.type = 'MultiLineString';\n                    }\n                }\n                else if (VectorTileFeature.types[feature.type] === 'Polygon') {\n                    geometry = decodeMultiPolygon(geometry); // un-flatten rings\n                }\n\n                layer_geojson.features.push(feature_geojson);\n            }\n            layers[l] = layer_geojson;\n        }\n        return layers;\n    }\n\n    // Optionally parse some or all feature properties from JSON strings\n    parseJSONProperties (feature) {\n        if (this.parse_json_type !== PARSE_JSON_TYPE.NONE) {\n            const props = feature.properties;\n\n            // if specified, check list of explicit properties to parse\n            if (this.parse_json_type === PARSE_JSON_TYPE.SOME) {\n                this.parse_json_prop_list.forEach(p => {\n                    try {\n                        props[p] = JSON.parse(props[p]);\n                    } catch (e) {\n                        // continue with original value if couldn't parse as JSON\n                    }\n                });\n            }\n            // otherwise try to parse all properties\n            else {\n                for (const p in props) {\n                    // check if this property looks like JSON, and parse if so\n                    if (PARSE_JSON_TEST.indexOf(props[p][0]) > -1) {\n                        try {\n                            props[p] = JSON.parse(props[p]);\n                        } catch (e) {\n                            // continue with original value if couldn't parse as JSON\n                        }\n                    }\n                }\n            }\n        }\n    }\n}\n\n// Decode multipolygons, which are encoded as a single set of rings\n// Winding order of first ring is assumed to indicate exterior ring,\n// the opposite winding order indicates the start of a new polygon.\nexport function decodeMultiPolygon (geom) {\n    let polys = [];\n    let poly = [];\n    let outer_winding;\n    for (let r=0; r < geom.coordinates.length; r++) {\n        let ring = geom.coordinates[r];\n        let winding = Geo.ringWinding(ring);\n        if (winding == null) {\n            continue; // skip zero-area rings\n        }\n\n        outer_winding = outer_winding || winding; // assume first ring indicates outer ring winding\n\n        if (winding === outer_winding && poly.length > 0) {\n            polys.push(poly);\n            poly = [];\n        }\n        poly.push(ring);\n    }\n    if (poly.length > 0) {\n        polys.push(poly);\n    }\n\n    // Single or multi?\n    if (polys.length === 1) {\n        geom.type = 'Polygon';\n        geom.coordinates = polys[0];\n    }\n    else if (polys.length > 1) {\n        geom.type = 'MultiPolygon';\n        geom.coordinates = polys;\n    }\n    else {\n        geom = null;\n    }\n\n    return geom;\n}\n\nDataSource.register('MVT', () => MVTSource);\n","\n// calculate simplification data using optimized Douglas-Peucker algorithm\n\nexport default function simplify(coords, first, last, sqTolerance) {\n    var maxSqDist = sqTolerance;\n    var mid = (last - first) >> 1;\n    var minPosToMid = last - first;\n    var index;\n\n    var ax = coords[first];\n    var ay = coords[first + 1];\n    var bx = coords[last];\n    var by = coords[last + 1];\n\n    for (var i = first + 3; i < last; i += 3) {\n        var d = getSqSegDist(coords[i], coords[i + 1], ax, ay, bx, by);\n\n        if (d > maxSqDist) {\n            index = i;\n            maxSqDist = d;\n\n        } else if (d === maxSqDist) {\n            // a workaround to ensure we choose a pivot close to the middle of the list,\n            // reducing recursion depth, for certain degenerate inputs\n            // https://github.com/mapbox/geojson-vt/issues/104\n            var posToMid = Math.abs(i - mid);\n            if (posToMid < minPosToMid) {\n                index = i;\n                minPosToMid = posToMid;\n            }\n        }\n    }\n\n    if (maxSqDist > sqTolerance) {\n        if (index - first > 3) simplify(coords, first, index, sqTolerance);\n        coords[index + 2] = maxSqDist;\n        if (last - index > 3) simplify(coords, index, last, sqTolerance);\n    }\n}\n\n// square distance from a point to a segment\nfunction getSqSegDist(px, py, x, y, bx, by) {\n\n    var dx = bx - x;\n    var dy = by - y;\n\n    if (dx !== 0 || dy !== 0) {\n\n        var t = ((px - x) * dx + (py - y) * dy) / (dx * dx + dy * dy);\n\n        if (t > 1) {\n            x = bx;\n            y = by;\n\n        } else if (t > 0) {\n            x += dx * t;\n            y += dy * t;\n        }\n    }\n\n    dx = px - x;\n    dy = py - y;\n\n    return dx * dx + dy * dy;\n}\n","\nexport default function createFeature(id, type, geom, tags) {\n    var feature = {\n        id: typeof id === 'undefined' ? null : id,\n        type: type,\n        geometry: geom,\n        tags: tags,\n        minX: Infinity,\n        minY: Infinity,\n        maxX: -Infinity,\n        maxY: -Infinity\n    };\n    calcBBox(feature);\n    return feature;\n}\n\nfunction calcBBox(feature) {\n    var geom = feature.geometry;\n    var type = feature.type;\n\n    if (type === 'Point' || type === 'MultiPoint' || type === 'LineString') {\n        calcLineBBox(feature, geom);\n\n    } else if (type === 'Polygon' || type === 'MultiLineString') {\n        for (var i = 0; i < geom.length; i++) {\n            calcLineBBox(feature, geom[i]);\n        }\n\n    } else if (type === 'MultiPolygon') {\n        for (i = 0; i < geom.length; i++) {\n            for (var j = 0; j < geom[i].length; j++) {\n                calcLineBBox(feature, geom[i][j]);\n            }\n        }\n    }\n}\n\nfunction calcLineBBox(feature, geom) {\n    for (var i = 0; i < geom.length; i += 3) {\n        feature.minX = Math.min(feature.minX, geom[i]);\n        feature.minY = Math.min(feature.minY, geom[i + 1]);\n        feature.maxX = Math.max(feature.maxX, geom[i]);\n        feature.maxY = Math.max(feature.maxY, geom[i + 1]);\n    }\n}\n","\nimport simplify from './simplify';\nimport createFeature from './feature';\n\n// converts GeoJSON feature into an intermediate projected JSON vector format with simplification data\n\nexport default function convert(data, options) {\n    var features = [];\n    if (data.type === 'FeatureCollection') {\n        for (var i = 0; i < data.features.length; i++) {\n            convertFeature(features, data.features[i], options, i);\n        }\n\n    } else if (data.type === 'Feature') {\n        convertFeature(features, data, options);\n\n    } else {\n        // single geometry or a geometry collection\n        convertFeature(features, {geometry: data}, options);\n    }\n\n    return features;\n}\n\nfunction convertFeature(features, geojson, options, index) {\n    if (!geojson.geometry) return;\n\n    var coords = geojson.geometry.coordinates;\n    var type = geojson.geometry.type;\n    var tolerance = Math.pow(options.tolerance / ((1 << options.maxZoom) * options.extent), 2);\n    var geometry = [];\n    var id = geojson.id;\n    if (options.promoteId) {\n        id = geojson.properties[options.promoteId];\n    } else if (options.generateId) {\n        id = index || 0;\n    }\n    if (type === 'Point') {\n        convertPoint(coords, geometry);\n\n    } else if (type === 'MultiPoint') {\n        for (var i = 0; i < coords.length; i++) {\n            convertPoint(coords[i], geometry);\n        }\n\n    } else if (type === 'LineString') {\n        convertLine(coords, geometry, tolerance, false);\n\n    } else if (type === 'MultiLineString') {\n        if (options.lineMetrics) {\n            // explode into linestrings to be able to track metrics\n            for (i = 0; i < coords.length; i++) {\n                geometry = [];\n                convertLine(coords[i], geometry, tolerance, false);\n                features.push(createFeature(id, 'LineString', geometry, geojson.properties));\n            }\n            return;\n        } else {\n            convertLines(coords, geometry, tolerance, false);\n        }\n\n    } else if (type === 'Polygon') {\n        convertLines(coords, geometry, tolerance, true);\n\n    } else if (type === 'MultiPolygon') {\n        for (i = 0; i < coords.length; i++) {\n            var polygon = [];\n            convertLines(coords[i], polygon, tolerance, true);\n            geometry.push(polygon);\n        }\n    } else if (type === 'GeometryCollection') {\n        for (i = 0; i < geojson.geometry.geometries.length; i++) {\n            convertFeature(features, {\n                id: id,\n                geometry: geojson.geometry.geometries[i],\n                properties: geojson.properties\n            }, options, index);\n        }\n        return;\n    } else {\n        throw new Error('Input data is not a valid GeoJSON object.');\n    }\n\n    features.push(createFeature(id, type, geometry, geojson.properties));\n}\n\nfunction convertPoint(coords, out) {\n    out.push(projectX(coords[0]));\n    out.push(projectY(coords[1]));\n    out.push(0);\n}\n\nfunction convertLine(ring, out, tolerance, isPolygon) {\n    var x0, y0;\n    var size = 0;\n\n    for (var j = 0; j < ring.length; j++) {\n        var x = projectX(ring[j][0]);\n        var y = projectY(ring[j][1]);\n\n        out.push(x);\n        out.push(y);\n        out.push(0);\n\n        if (j > 0) {\n            if (isPolygon) {\n                size += (x0 * y - x * y0) / 2; // area\n            } else {\n                size += Math.sqrt(Math.pow(x - x0, 2) + Math.pow(y - y0, 2)); // length\n            }\n        }\n        x0 = x;\n        y0 = y;\n    }\n\n    var last = out.length - 3;\n    out[2] = 1;\n    simplify(out, 0, last, tolerance);\n    out[last + 2] = 1;\n\n    out.size = Math.abs(size);\n    out.start = 0;\n    out.end = out.size;\n}\n\nfunction convertLines(rings, out, tolerance, isPolygon) {\n    for (var i = 0; i < rings.length; i++) {\n        var geom = [];\n        convertLine(rings[i], geom, tolerance, isPolygon);\n        out.push(geom);\n    }\n}\n\nfunction projectX(x) {\n    return x / 360 + 0.5;\n}\n\nfunction projectY(y) {\n    var sin = Math.sin(y * Math.PI / 180);\n    var y2 = 0.5 - 0.25 * Math.log((1 + sin) / (1 - sin)) / Math.PI;\n    return y2 < 0 ? 0 : y2 > 1 ? 1 : y2;\n}\n","\nimport createFeature from './feature';\n\n/* clip features between two axis-parallel lines:\n *     |        |\n *  ___|___     |     /\n * /   |   \\____|____/\n *     |        |\n */\n\nexport default function clip(features, scale, k1, k2, axis, minAll, maxAll, options) {\n\n    k1 /= scale;\n    k2 /= scale;\n\n    if (minAll >= k1 && maxAll < k2) return features; // trivial accept\n    else if (maxAll < k1 || minAll >= k2) return null; // trivial reject\n\n    var clipped = [];\n\n    for (var i = 0; i < features.length; i++) {\n\n        var feature = features[i];\n        var geometry = feature.geometry;\n        var type = feature.type;\n\n        var min = axis === 0 ? feature.minX : feature.minY;\n        var max = axis === 0 ? feature.maxX : feature.maxY;\n\n        if (min >= k1 && max < k2) { // trivial accept\n            clipped.push(feature);\n            continue;\n        } else if (max < k1 || min >= k2) { // trivial reject\n            continue;\n        }\n\n        var newGeometry = [];\n\n        if (type === 'Point' || type === 'MultiPoint') {\n            clipPoints(geometry, newGeometry, k1, k2, axis);\n\n        } else if (type === 'LineString') {\n            clipLine(geometry, newGeometry, k1, k2, axis, false, options.lineMetrics);\n\n        } else if (type === 'MultiLineString') {\n            clipLines(geometry, newGeometry, k1, k2, axis, false);\n\n        } else if (type === 'Polygon') {\n            clipLines(geometry, newGeometry, k1, k2, axis, true);\n\n        } else if (type === 'MultiPolygon') {\n            for (var j = 0; j < geometry.length; j++) {\n                var polygon = [];\n                clipLines(geometry[j], polygon, k1, k2, axis, true);\n                if (polygon.length) {\n                    newGeometry.push(polygon);\n                }\n            }\n        }\n\n        if (newGeometry.length) {\n            if (options.lineMetrics && type === 'LineString') {\n                for (j = 0; j < newGeometry.length; j++) {\n                    clipped.push(createFeature(feature.id, type, newGeometry[j], feature.tags));\n                }\n                continue;\n            }\n\n            if (type === 'LineString' || type === 'MultiLineString') {\n                if (newGeometry.length === 1) {\n                    type = 'LineString';\n                    newGeometry = newGeometry[0];\n                } else {\n                    type = 'MultiLineString';\n                }\n            }\n            if (type === 'Point' || type === 'MultiPoint') {\n                type = newGeometry.length === 3 ? 'Point' : 'MultiPoint';\n            }\n\n            clipped.push(createFeature(feature.id, type, newGeometry, feature.tags));\n        }\n    }\n\n    return clipped.length ? clipped : null;\n}\n\nfunction clipPoints(geom, newGeom, k1, k2, axis) {\n    for (var i = 0; i < geom.length; i += 3) {\n        var a = geom[i + axis];\n\n        if (a >= k1 && a <= k2) {\n            newGeom.push(geom[i]);\n            newGeom.push(geom[i + 1]);\n            newGeom.push(geom[i + 2]);\n        }\n    }\n}\n\nfunction clipLine(geom, newGeom, k1, k2, axis, isPolygon, trackMetrics) {\n\n    var slice = newSlice(geom);\n    var intersect = axis === 0 ? intersectX : intersectY;\n    var len = geom.start;\n    var segLen, t;\n\n    for (var i = 0; i < geom.length - 3; i += 3) {\n        var ax = geom[i];\n        var ay = geom[i + 1];\n        var az = geom[i + 2];\n        var bx = geom[i + 3];\n        var by = geom[i + 4];\n        var a = axis === 0 ? ax : ay;\n        var b = axis === 0 ? bx : by;\n        var exited = false;\n\n        if (trackMetrics) segLen = Math.sqrt(Math.pow(ax - bx, 2) + Math.pow(ay - by, 2));\n\n        if (a < k1) {\n            // ---|-->  | (line enters the clip region from the left)\n            if (b > k1) {\n                t = intersect(slice, ax, ay, bx, by, k1);\n                if (trackMetrics) slice.start = len + segLen * t;\n            }\n        } else if (a > k2) {\n            // |  <--|--- (line enters the clip region from the right)\n            if (b < k2) {\n                t = intersect(slice, ax, ay, bx, by, k2);\n                if (trackMetrics) slice.start = len + segLen * t;\n            }\n        } else {\n            addPoint(slice, ax, ay, az);\n        }\n        if (b < k1 && a >= k1) {\n            // <--|---  | or <--|-----|--- (line exits the clip region on the left)\n            t = intersect(slice, ax, ay, bx, by, k1);\n            exited = true;\n        }\n        if (b > k2 && a <= k2) {\n            // |  ---|--> or ---|-----|--> (line exits the clip region on the right)\n            t = intersect(slice, ax, ay, bx, by, k2);\n            exited = true;\n        }\n\n        if (!isPolygon && exited) {\n            if (trackMetrics) slice.end = len + segLen * t;\n            newGeom.push(slice);\n            slice = newSlice(geom);\n        }\n\n        if (trackMetrics) len += segLen;\n    }\n\n    // add the last point\n    var last = geom.length - 3;\n    ax = geom[last];\n    ay = geom[last + 1];\n    az = geom[last + 2];\n    a = axis === 0 ? ax : ay;\n    if (a >= k1 && a <= k2) addPoint(slice, ax, ay, az);\n\n    // close the polygon if its endpoints are not the same after clipping\n    last = slice.length - 3;\n    if (isPolygon && last >= 3 && (slice[last] !== slice[0] || slice[last + 1] !== slice[1])) {\n        addPoint(slice, slice[0], slice[1], slice[2]);\n    }\n\n    // add the final slice\n    if (slice.length) {\n        newGeom.push(slice);\n    }\n}\n\nfunction newSlice(line) {\n    var slice = [];\n    slice.size = line.size;\n    slice.start = line.start;\n    slice.end = line.end;\n    return slice;\n}\n\nfunction clipLines(geom, newGeom, k1, k2, axis, isPolygon) {\n    for (var i = 0; i < geom.length; i++) {\n        clipLine(geom[i], newGeom, k1, k2, axis, isPolygon, false);\n    }\n}\n\nfunction addPoint(out, x, y, z) {\n    out.push(x);\n    out.push(y);\n    out.push(z);\n}\n\nfunction intersectX(out, ax, ay, bx, by, x) {\n    var t = (x - ax) / (bx - ax);\n    out.push(x);\n    out.push(ay + (by - ay) * t);\n    out.push(1);\n    return t;\n}\n\nfunction intersectY(out, ax, ay, bx, by, y) {\n    var t = (y - ay) / (by - ay);\n    out.push(ax + (bx - ax) * t);\n    out.push(y);\n    out.push(1);\n    return t;\n}\n","\nimport clip from './clip';\nimport createFeature from './feature';\n\nexport default function wrap(features, options) {\n    var buffer = options.buffer / options.extent;\n    var merged = features;\n    var left  = clip(features, 1, -1 - buffer, buffer,     0, -1, 2, options); // left world copy\n    var right = clip(features, 1,  1 - buffer, 2 + buffer, 0, -1, 2, options); // right world copy\n\n    if (left || right) {\n        merged = clip(features, 1, -buffer, 1 + buffer, 0, -1, 2, options) || []; // center world copy\n\n        if (left) merged = shiftFeatureCoords(left, 1).concat(merged); // merge left into center\n        if (right) merged = merged.concat(shiftFeatureCoords(right, -1)); // merge right into center\n    }\n\n    return merged;\n}\n\nfunction shiftFeatureCoords(features, offset) {\n    var newFeatures = [];\n\n    for (var i = 0; i < features.length; i++) {\n        var feature = features[i],\n            type = feature.type;\n\n        var newGeometry;\n\n        if (type === 'Point' || type === 'MultiPoint' || type === 'LineString') {\n            newGeometry = shiftCoords(feature.geometry, offset);\n\n        } else if (type === 'MultiLineString' || type === 'Polygon') {\n            newGeometry = [];\n            for (var j = 0; j < feature.geometry.length; j++) {\n                newGeometry.push(shiftCoords(feature.geometry[j], offset));\n            }\n        } else if (type === 'MultiPolygon') {\n            newGeometry = [];\n            for (j = 0; j < feature.geometry.length; j++) {\n                var newPolygon = [];\n                for (var k = 0; k < feature.geometry[j].length; k++) {\n                    newPolygon.push(shiftCoords(feature.geometry[j][k], offset));\n                }\n                newGeometry.push(newPolygon);\n            }\n        }\n\n        newFeatures.push(createFeature(feature.id, type, newGeometry, feature.tags));\n    }\n\n    return newFeatures;\n}\n\nfunction shiftCoords(points, offset) {\n    var newPoints = [];\n    newPoints.size = points.size;\n\n    if (points.start !== undefined) {\n        newPoints.start = points.start;\n        newPoints.end = points.end;\n    }\n\n    for (var i = 0; i < points.length; i += 3) {\n        newPoints.push(points[i] + offset, points[i + 1], points[i + 2]);\n    }\n    return newPoints;\n}\n","\n// Transforms the coordinates of each feature in the given tile from\n// mercator-projected space into (extent x extent) tile space.\nexport default function transformTile(tile, extent) {\n    if (tile.transformed) return tile;\n\n    var z2 = 1 << tile.z,\n        tx = tile.x,\n        ty = tile.y,\n        i, j, k;\n\n    for (i = 0; i < tile.features.length; i++) {\n        var feature = tile.features[i],\n            geom = feature.geometry,\n            type = feature.type;\n\n        feature.geometry = [];\n\n        if (type === 1) {\n            for (j = 0; j < geom.length; j += 2) {\n                feature.geometry.push(transformPoint(geom[j], geom[j + 1], extent, z2, tx, ty));\n            }\n        } else {\n            for (j = 0; j < geom.length; j++) {\n                var ring = [];\n                for (k = 0; k < geom[j].length; k += 2) {\n                    ring.push(transformPoint(geom[j][k], geom[j][k + 1], extent, z2, tx, ty));\n                }\n                feature.geometry.push(ring);\n            }\n        }\n    }\n\n    tile.transformed = true;\n\n    return tile;\n}\n\nfunction transformPoint(x, y, extent, z2, tx, ty) {\n    return [\n        Math.round(extent * (x * z2 - tx)),\n        Math.round(extent * (y * z2 - ty))];\n}\n","\nexport default function createTile(features, z, tx, ty, options) {\n    var tolerance = z === options.maxZoom ? 0 : options.tolerance / ((1 << z) * options.extent);\n    var tile = {\n        features: [],\n        numPoints: 0,\n        numSimplified: 0,\n        numFeatures: 0,\n        source: null,\n        x: tx,\n        y: ty,\n        z: z,\n        transformed: false,\n        minX: 2,\n        minY: 1,\n        maxX: -1,\n        maxY: 0\n    };\n    for (var i = 0; i < features.length; i++) {\n        tile.numFeatures++;\n        addFeature(tile, features[i], tolerance, options);\n\n        var minX = features[i].minX;\n        var minY = features[i].minY;\n        var maxX = features[i].maxX;\n        var maxY = features[i].maxY;\n\n        if (minX < tile.minX) tile.minX = minX;\n        if (minY < tile.minY) tile.minY = minY;\n        if (maxX > tile.maxX) tile.maxX = maxX;\n        if (maxY > tile.maxY) tile.maxY = maxY;\n    }\n    return tile;\n}\n\nfunction addFeature(tile, feature, tolerance, options) {\n\n    var geom = feature.geometry,\n        type = feature.type,\n        simplified = [];\n\n    if (type === 'Point' || type === 'MultiPoint') {\n        for (var i = 0; i < geom.length; i += 3) {\n            simplified.push(geom[i]);\n            simplified.push(geom[i + 1]);\n            tile.numPoints++;\n            tile.numSimplified++;\n        }\n\n    } else if (type === 'LineString') {\n        addLine(simplified, geom, tile, tolerance, false, false);\n\n    } else if (type === 'MultiLineString' || type === 'Polygon') {\n        for (i = 0; i < geom.length; i++) {\n            addLine(simplified, geom[i], tile, tolerance, type === 'Polygon', i === 0);\n        }\n\n    } else if (type === 'MultiPolygon') {\n\n        for (var k = 0; k < geom.length; k++) {\n            var polygon = geom[k];\n            for (i = 0; i < polygon.length; i++) {\n                addLine(simplified, polygon[i], tile, tolerance, true, i === 0);\n            }\n        }\n    }\n\n    if (simplified.length) {\n        var tags = feature.tags || null;\n        if (type === 'LineString' && options.lineMetrics) {\n            tags = {};\n            for (var key in feature.tags) tags[key] = feature.tags[key];\n            tags['mapbox_clip_start'] = geom.start / geom.size;\n            tags['mapbox_clip_end'] = geom.end / geom.size;\n        }\n        var tileFeature = {\n            geometry: simplified,\n            type: type === 'Polygon' || type === 'MultiPolygon' ? 3 :\n                type === 'LineString' || type === 'MultiLineString' ? 2 : 1,\n            tags: tags\n        };\n        if (feature.id !== null) {\n            tileFeature.id = feature.id;\n        }\n        tile.features.push(tileFeature);\n    }\n}\n\nfunction addLine(result, geom, tile, tolerance, isPolygon, isOuter) {\n    var sqTolerance = tolerance * tolerance;\n\n    if (tolerance > 0 && (geom.size < (isPolygon ? sqTolerance : tolerance))) {\n        tile.numPoints += geom.length / 3;\n        return;\n    }\n\n    var ring = [];\n\n    for (var i = 0; i < geom.length; i += 3) {\n        if (tolerance === 0 || geom[i + 2] > sqTolerance) {\n            tile.numSimplified++;\n            ring.push(geom[i]);\n            ring.push(geom[i + 1]);\n        }\n        tile.numPoints++;\n    }\n\n    if (isPolygon) rewind(ring, isOuter);\n\n    result.push(ring);\n}\n\nfunction rewind(ring, clockwise) {\n    var area = 0;\n    for (var i = 0, len = ring.length, j = len - 2; i < len; j = i, i += 2) {\n        area += (ring[i] - ring[j]) * (ring[i + 1] + ring[j + 1]);\n    }\n    if (area > 0 === clockwise) {\n        for (i = 0, len = ring.length; i < len / 2; i += 2) {\n            var x = ring[i];\n            var y = ring[i + 1];\n            ring[i] = ring[len - 2 - i];\n            ring[i + 1] = ring[len - 1 - i];\n            ring[len - 2 - i] = x;\n            ring[len - 1 - i] = y;\n        }\n    }\n}\n","\nimport convert from './convert';     // GeoJSON conversion and preprocessing\nimport clip from './clip';           // stripe clipping algorithm\nimport wrap from './wrap';           // date line processing\nimport transform from './transform'; // coordinate transformation\nimport createTile from './tile';     // final simplified tile generation\n\nexport default function geojsonvt(data, options) {\n    return new GeoJSONVT(data, options);\n}\n\nfunction GeoJSONVT(data, options) {\n    options = this.options = extend(Object.create(this.options), options);\n\n    var debug = options.debug;\n\n    if (debug) console.time('preprocess data');\n\n    if (options.maxZoom < 0 || options.maxZoom > 24) throw new Error('maxZoom should be in the 0-24 range');\n    if (options.promoteId && options.generateId) throw new Error('promoteId and generateId cannot be used together.');\n\n    var features = convert(data, options);\n\n    this.tiles = {};\n    this.tileCoords = [];\n\n    if (debug) {\n        console.timeEnd('preprocess data');\n        console.log('index: maxZoom: %d, maxPoints: %d', options.indexMaxZoom, options.indexMaxPoints);\n        console.time('generate tiles');\n        this.stats = {};\n        this.total = 0;\n    }\n\n    features = wrap(features, options);\n\n    // start slicing from the top tile down\n    if (features.length) this.splitTile(features, 0, 0, 0);\n\n    if (debug) {\n        if (features.length) console.log('features: %d, points: %d', this.tiles[0].numFeatures, this.tiles[0].numPoints);\n        console.timeEnd('generate tiles');\n        console.log('tiles generated:', this.total, JSON.stringify(this.stats));\n    }\n}\n\nGeoJSONVT.prototype.options = {\n    maxZoom: 14,            // max zoom to preserve detail on\n    indexMaxZoom: 5,        // max zoom in the tile index\n    indexMaxPoints: 100000, // max number of points per tile in the tile index\n    tolerance: 3,           // simplification tolerance (higher means simpler)\n    extent: 4096,           // tile extent\n    buffer: 64,             // tile buffer on each side\n    lineMetrics: false,     // whether to calculate line metrics\n    promoteId: null,        // name of a feature property to be promoted to feature.id\n    generateId: false,      // whether to generate feature ids. Cannot be used with promoteId\n    debug: 0                // logging level (0, 1 or 2)\n};\n\nGeoJSONVT.prototype.splitTile = function (features, z, x, y, cz, cx, cy) {\n\n    var stack = [features, z, x, y],\n        options = this.options,\n        debug = options.debug;\n\n    // avoid recursion by using a processing queue\n    while (stack.length) {\n        y = stack.pop();\n        x = stack.pop();\n        z = stack.pop();\n        features = stack.pop();\n\n        var z2 = 1 << z,\n            id = toID(z, x, y),\n            tile = this.tiles[id];\n\n        if (!tile) {\n            if (debug > 1) console.time('creation');\n\n            tile = this.tiles[id] = createTile(features, z, x, y, options);\n            this.tileCoords.push({z: z, x: x, y: y});\n\n            if (debug) {\n                if (debug > 1) {\n                    console.log('tile z%d-%d-%d (features: %d, points: %d, simplified: %d)',\n                        z, x, y, tile.numFeatures, tile.numPoints, tile.numSimplified);\n                    console.timeEnd('creation');\n                }\n                var key = 'z' + z;\n                this.stats[key] = (this.stats[key] || 0) + 1;\n                this.total++;\n            }\n        }\n\n        // save reference to original geometry in tile so that we can drill down later if we stop now\n        tile.source = features;\n\n        // if it's the first-pass tiling\n        if (!cz) {\n            // stop tiling if we reached max zoom, or if the tile is too simple\n            if (z === options.indexMaxZoom || tile.numPoints <= options.indexMaxPoints) continue;\n\n        // if a drilldown to a specific tile\n        } else {\n            // stop tiling if we reached base zoom or our target tile zoom\n            if (z === options.maxZoom || z === cz) continue;\n\n            // stop tiling if it's not an ancestor of the target tile\n            var m = 1 << (cz - z);\n            if (x !== Math.floor(cx / m) || y !== Math.floor(cy / m)) continue;\n        }\n\n        // if we slice further down, no need to keep source geometry\n        tile.source = null;\n\n        if (features.length === 0) continue;\n\n        if (debug > 1) console.time('clipping');\n\n        // values we'll use for clipping\n        var k1 = 0.5 * options.buffer / options.extent,\n            k2 = 0.5 - k1,\n            k3 = 0.5 + k1,\n            k4 = 1 + k1,\n            tl, bl, tr, br, left, right;\n\n        tl = bl = tr = br = null;\n\n        left  = clip(features, z2, x - k1, x + k3, 0, tile.minX, tile.maxX, options);\n        right = clip(features, z2, x + k2, x + k4, 0, tile.minX, tile.maxX, options);\n        features = null;\n\n        if (left) {\n            tl = clip(left, z2, y - k1, y + k3, 1, tile.minY, tile.maxY, options);\n            bl = clip(left, z2, y + k2, y + k4, 1, tile.minY, tile.maxY, options);\n            left = null;\n        }\n\n        if (right) {\n            tr = clip(right, z2, y - k1, y + k3, 1, tile.minY, tile.maxY, options);\n            br = clip(right, z2, y + k2, y + k4, 1, tile.minY, tile.maxY, options);\n            right = null;\n        }\n\n        if (debug > 1) console.timeEnd('clipping');\n\n        stack.push(tl || [], z + 1, x * 2,     y * 2);\n        stack.push(bl || [], z + 1, x * 2,     y * 2 + 1);\n        stack.push(tr || [], z + 1, x * 2 + 1, y * 2);\n        stack.push(br || [], z + 1, x * 2 + 1, y * 2 + 1);\n    }\n};\n\nGeoJSONVT.prototype.getTile = function (z, x, y) {\n    var options = this.options,\n        extent = options.extent,\n        debug = options.debug;\n\n    if (z < 0 || z > 24) return null;\n\n    var z2 = 1 << z;\n    x = ((x % z2) + z2) % z2; // wrap tile x coordinate\n\n    var id = toID(z, x, y);\n    if (this.tiles[id]) return transform(this.tiles[id], extent);\n\n    if (debug > 1) console.log('drilling down to z%d-%d-%d', z, x, y);\n\n    var z0 = z,\n        x0 = x,\n        y0 = y,\n        parent;\n\n    while (!parent && z0 > 0) {\n        z0--;\n        x0 = Math.floor(x0 / 2);\n        y0 = Math.floor(y0 / 2);\n        parent = this.tiles[toID(z0, x0, y0)];\n    }\n\n    if (!parent || !parent.source) return null;\n\n    // if we found a parent tile containing the original geometry, we can drill down from it\n    if (debug > 1) console.log('found parent tile z%d-%d-%d', z0, x0, y0);\n\n    if (debug > 1) console.time('drilling down');\n    this.splitTile(parent.source, z0, x0, y0, z, x, y);\n    if (debug > 1) console.timeEnd('drilling down');\n\n    return this.tiles[id] ? transform(this.tiles[id], extent) : null;\n};\n\nfunction toID(z, x, y) {\n    return (((1 << z) * y + x) * 32) + z;\n}\n\nfunction extend(dest, src) {\n    for (var i in src) dest[i] = src[i];\n    return dest;\n}\n","import log from '../utils/log';\nimport DataSource, {NetworkSource, NetworkTileSource} from './data_source';\nimport {decodeMultiPolygon} from './mvt';\nimport Geo from '../utils/geo';\n\n// For tiling GeoJSON client-side\nimport geojsonvt from 'geojson-vt';\n\n/**\n GeoJSON standalone (non-tiled) source\n Uses geojson-vt split into tiles client-side\n*/\n\nexport class GeoJSONSource extends NetworkSource {\n\n    constructor(source, sources) {\n        super(source, sources);\n        this.load_data = null;\n        this.tile_indexes = {}; // geojson-vt tile indices, by layer name\n        this.setTileSize(512); // auto-tile to 512px tiles for fewer internal tiles\n        this.pad_scale = 0; // we don't want padding on auto-tiled sources\n    }\n\n    _load(dest) {\n        if (!this.load_data) {\n            this.load_data = super._load({ source_data: { layers: {} } }).then(data => {\n                // Warn and continue on data source error\n                if (data.source_data.error) {\n                    log('warn', `data source load error(s) for source '${this.name}', URL '${this.url}': ${data.source_data.error}`);\n                }\n\n                let layers = data.source_data.layers;\n                for (let layer_name in layers) {\n                    this.tile_indexes[layer_name] = geojsonvt(layers[layer_name], {\n                        maxZoom: this.max_zoom,  // max zoom to preserve detail on\n                        tolerance: 1.5, // simplification tolerance (higher means simpler) NB: half the default to accomodate 512px tiles\n                        extent: Geo.tile_scale, // tile extent (both width and height)\n                        buffer: 0.0001     // tile buffer on each side\n                    });\n                }\n\n                this.loaded = true;\n                return data;\n            });\n        }\n\n        return this.load_data.then(() => {\n            for (let layer_name in this.tile_indexes) {\n                dest.source_data.layers[layer_name] = this.getTileFeatures(dest, layer_name);\n            }\n            return dest;\n        });\n    }\n\n    getTileFeatures(tile, layer_name) {\n        let coords = Geo.wrapTile(tile.coords, { x: true });\n\n        // request a particular tile\n        let t = this.tile_indexes[layer_name].getTile(coords.z, coords.x, coords.y);\n\n        // Convert from MVT-style JSON struct to GeoJSON\n        let collection;\n        if (t && t.features) {\n            collection = {\n                type: 'FeatureCollection',\n                features: []\n            };\n\n            for (let i=0; i < t.features.length; i++) {\n                const feature = t.features[i];\n\n                // GeoJSON feature\n                let f = {\n                    type: 'Feature',\n                    geometry: {},\n                    id: feature.id,\n                    properties: feature.tags\n                };\n\n                if (feature.type === 1) {\n                    f.geometry.coordinates = feature.geometry.map(coord => [coord[0], coord[1]]);\n                    f.geometry.type = 'MultiPoint';\n                }\n                else if (feature.type === 2 || feature.type === 3) {\n                    f.geometry.coordinates = feature.geometry.map(ring =>\n                        ring.map(coord => [coord[0], coord[1]])\n                    );\n\n                    if (feature.type === 2) {\n                        f.geometry.type = 'MultiLineString';\n                    }\n                    else  {\n                        f.geometry = decodeMultiPolygon(f.geometry); // un-flatten rings\n                        if (f.geometry == null) { // skip polys that couldn't be decoded (e.g. degenerate)\n                            continue;\n                        }\n                    }\n                }\n                else {\n                    continue;\n                }\n\n                collection.features.push(f);\n            }\n        }\n\n        return collection;\n    }\n\n    formatURL () {\n        return this.url;\n    }\n\n    parseSourceData (tile, source, response) {\n        let data = typeof response === 'string' ? JSON.parse(response) : response;\n        let layers = this.getLayers(data);\n        source.layers = this.preprocessLayers(layers, tile);\n    }\n\n    preprocessLayers (layers, tile){\n        for (let key in layers) {\n            let layer = layers[key];\n            layer.features = this.preprocessFeatures(layer.features);\n        }\n\n        // Apply optional data transform\n        if (typeof this.transform === 'function') {\n            const tile_data = {\n                min: Object.assign({}, tile.min),\n                max: Object.assign({}, tile.max),\n                coords: Object.assign({}, tile.coords)\n            };\n            if (Object.keys(layers).length === 1 && layers._default) {\n                layers._default = this.transform(layers._default, this.extra_data, tile_data); // single-layer\n            }\n            else {\n                layers = this.transform(layers, this.extra_data, tile_data); // multiple layers\n            }\n        }\n\n        return layers;\n    }\n\n    // Preprocess features. Currently used to add a new \"centroid\" feature for polygon labeling\n    preprocessFeatures (features) {\n        // Remove features without geometry (which is valid GeoJSON)\n        features = features.filter(f => f.geometry != null);\n\n        // Define centroids for polygons for centroid label placement\n        // Avoids redundant label placement for each generated tile at higher zoom levels\n        if (this.config.generate_label_centroids){\n            let features_centroid = [];\n            let centroid_properties = {'label_placement' : true};\n\n            features.forEach(feature => {\n                let coordinates, centroid_feature;\n                if (feature.geometry.type === 'Polygon') {\n                    coordinates = feature.geometry.coordinates;\n                    centroid_feature = getCentroidFeatureForPolygon(coordinates, feature.id, feature.properties, centroid_properties);\n                    features_centroid.push(centroid_feature);\n                }\n                else if (feature.geometry.type === 'MultiPolygon') {\n                    // Add centroid feature for largest polygon\n                    coordinates = feature.geometry.coordinates;\n                    let max_area = -Infinity;\n                    let max_area_index = 0;\n                    for (let index = 0; index < coordinates.length; index++) {\n                        let area = Geo.polygonArea(coordinates[index]);\n                        if (area > max_area) {\n                            max_area = area;\n                            max_area_index = index;\n                        }\n                    }\n                    centroid_feature = getCentroidFeatureForPolygon(coordinates[max_area_index], feature.id, feature.properties, centroid_properties);\n                    features_centroid.push(centroid_feature);\n                }\n            });\n\n            // append centroid features to features array\n            features_centroid = features_centroid.filter(x => x); // remove null features\n            Array.prototype.push.apply(features, features_centroid);\n        }\n\n        return features;\n    }\n\n    // Detect single or multiple layers in returned data\n    getLayers (data) {\n        if (data.type === 'Feature') {\n            return {\n                _default: {\n                    type: 'FeatureCollection',\n                    features: [data]\n                }\n            };\n        }\n        else if (data.type === 'FeatureCollection') {\n            return {\n                _default: data\n            };\n        }\n        else {\n            return data;\n        }\n    }\n\n}\n\n/**\n GeoJSON vector tiles\n @class GeoJSONTileSource\n*/\nexport class GeoJSONTileSource extends NetworkTileSource {\n\n    constructor(source, sources) {\n        super(source, sources);\n    }\n\n    parseSourceData (tile, source, response) {\n        let data = typeof response === 'string' ? JSON.parse(response) : response;\n        this.prepareGeoJSON(data, tile, source);\n    }\n\n    prepareGeoJSON (data, tile, source) {\n        // Apply optional data transform\n        if (typeof this.transform === 'function') {\n            const tile_data = {\n                min: Object.assign({}, tile.min),\n                max: Object.assign({}, tile.max),\n                coords: Object.assign({}, tile.coords)\n            };\n            data = this.transform(data, this.extra_data, tile_data);\n        }\n\n        source.layers = GeoJSONSource.prototype.getLayers(data);\n\n        // A \"synthetic\" tile that adjusts the tile min anchor to account for tile longitude wrapping\n        let anchor = {\n            coords: tile.coords,\n            min: Geo.metersForTile(Geo.wrapTile(tile.coords, { x: true }))\n        };\n\n        DataSource.projectData(source); // mercator projection\n        DataSource.scaleData(source, anchor); // re-scale from meters to local tile coords\n    }\n\n}\n\n// Check for URL tile pattern, if not found, treat as standalone GeoJSON/TopoJSON object\nDataSource.register('GeoJSON', source => {\n    return GeoJSONTileSource.urlHasTilePattern(source.url) ? GeoJSONTileSource : GeoJSONSource;\n});\n\n\n// Helper function to create centroid point feature from polygon coordinates and provided feature meta-data\nfunction getCentroidFeatureForPolygon (coordinates, id, properties, newProperties) {\n    let centroid = Geo.centroid(coordinates);\n    if (!centroid) {\n        return;\n    }\n\n    // clone properties and mixix newProperties\n    let centroid_properties = {};\n    Object.assign(centroid_properties, properties, newProperties);\n\n    return {\n        type: 'Feature',\n        id,\n        properties: centroid_properties,\n        geometry: {\n            type: 'Point',\n            coordinates: centroid\n        }\n    };\n}\n","export default function(array, n) {\n  var t, j = array.length, i = j - n;\n  while (i < --j) t = array[i], array[i++] = array[j], array[j] = t;\n}\n","export default function(x) {\n  return x;\n}\n","import identity from \"./identity\";\n\nexport default function(topology) {\n  if ((transform = topology.transform) == null) return identity;\n  var transform,\n      x0,\n      y0,\n      kx = transform.scale[0],\n      ky = transform.scale[1],\n      dx = transform.translate[0],\n      dy = transform.translate[1];\n  return function(point, i) {\n    if (!i) x0 = y0 = 0;\n    point[0] = (x0 += point[0]) * kx + dx;\n    point[1] = (y0 += point[1]) * ky + dy;\n    return point;\n  };\n}\n","import reverse from \"./reverse\";\nimport transform from \"./transform\";\n\nexport default function(topology, o) {\n  return o.type === \"GeometryCollection\"\n      ? {type: \"FeatureCollection\", features: o.geometries.map(function(o) { return feature(topology, o); })}\n      : feature(topology, o);\n}\n\nexport function feature(topology, o) {\n  var id = o.id,\n      bbox = o.bbox,\n      properties = o.properties == null ? {} : o.properties,\n      geometry = object(topology, o);\n  return id == null && bbox == null ? {type: \"Feature\", properties: properties, geometry: geometry}\n      : bbox == null ? {type: \"Feature\", id: id, properties: properties, geometry: geometry}\n      : {type: \"Feature\", id: id, bbox: bbox, properties: properties, geometry: geometry};\n}\n\nexport function object(topology, o) {\n  var transformPoint = transform(topology),\n      arcs = topology.arcs;\n\n  function arc(i, points) {\n    if (points.length) points.pop();\n    for (var a = arcs[i < 0 ? ~i : i], k = 0, n = a.length; k < n; ++k) {\n      points.push(transformPoint(a[k].slice(), k));\n    }\n    if (i < 0) reverse(points, n);\n  }\n\n  function point(p) {\n    return transformPoint(p.slice());\n  }\n\n  function line(arcs) {\n    var points = [];\n    for (var i = 0, n = arcs.length; i < n; ++i) arc(arcs[i], points);\n    if (points.length < 2) points.push(points[0].slice());\n    return points;\n  }\n\n  function ring(arcs) {\n    var points = line(arcs);\n    while (points.length < 4) points.push(points[0].slice());\n    return points;\n  }\n\n  function polygon(arcs) {\n    return arcs.map(ring);\n  }\n\n  function geometry(o) {\n    var type = o.type, coordinates;\n    switch (type) {\n      case \"GeometryCollection\": return {type: type, geometries: o.geometries.map(geometry)};\n      case \"Point\": coordinates = point(o.coordinates); break;\n      case \"MultiPoint\": coordinates = o.coordinates.map(point); break;\n      case \"LineString\": coordinates = line(o.arcs); break;\n      case \"MultiLineString\": coordinates = o.arcs.map(line); break;\n      case \"Polygon\": coordinates = polygon(o.arcs); break;\n      case \"MultiPolygon\": coordinates = o.arcs.map(polygon); break;\n      default: return null;\n    }\n    return {type: type, coordinates: coordinates};\n  }\n\n  return geometry(o);\n}\n","import DataSource from './data_source';\nimport {GeoJSONSource, GeoJSONTileSource} from './geojson';\n\nimport * as topojson from 'topojson-client';\n\n/**\n TopoJSON standalone (non-tiled) source\n Uses geojson-vt split into tiles client-side\n*/\n\nexport class TopoJSONSource extends GeoJSONSource {\n\n    parseSourceData (tile, source, response) {\n        let data = typeof response === 'string' ? JSON.parse(response) : response;\n        data = this.toGeoJSON(data);\n\n        let layers = this.getLayers(data);\n        super.preprocessLayers(layers, tile);\n        source.layers = layers;\n    }\n\n    toGeoJSON (data) {\n        // Single layer\n        if (data.objects &&\n            Object.keys(data.objects).length === 1) {\n            let layer = Object.keys(data.objects)[0];\n            data = getTopoJSONFeature(data, data.objects[layer]);\n        }\n        // Multiple layers\n        else {\n            let layers = {};\n            for (let key in data.objects) {\n                layers[key] = getTopoJSONFeature(data, data.objects[key]);\n            }\n            data = layers;\n        }\n        return data;\n    }\n\n}\n\nfunction getTopoJSONFeature (topology, object) {\n    let feature = topojson.feature(topology, object);\n\n    // Convert single feature to a feature collection\n    if (feature.type === 'Feature') {\n        feature = {\n            type: 'FeatureCollection',\n            features: [feature]\n        };\n    }\n    return feature;\n}\n\n\n/**\n TopoJSON vector tiles\n @class TopoJSONTileSource\n*/\nexport class TopoJSONTileSource extends GeoJSONTileSource {\n\n    constructor(source, sources) {\n        super(source, sources);\n    }\n\n    parseSourceData (tile, source, response) {\n        let data = typeof response === 'string' ? JSON.parse(response) : response;\n        data = TopoJSONSource.prototype.toGeoJSON(data);\n        this.prepareGeoJSON(data, tile, source);\n    }\n\n}\n\n// Check for URL tile pattern, if not found, treat as standalone GeoJSON/TopoJSON object\nDataSource.register('TopoJSON', source => {\n    return TopoJSONTileSource.urlHasTilePattern(source.url) ? TopoJSONTileSource : TopoJSONSource;\n});\n","/*jshint worker: true*/\n\nimport Utils from '../utils/utils';\nimport {compileFunctionStrings, functionStringCache, clearFunctionStringCache} from '../utils/functions';\nimport debugSettings, {mergeDebugSettings} from '../utils/debug_settings';\nimport log from '../utils/log';\nimport mergeObjects from '../utils/merge';\nimport WorkerBroker from '../utils/worker_broker'; // jshint ignore:line\nimport Tile from '../tile/tile';\nimport Geo from '../utils/geo';\nimport DataSource from '../sources/data_source';\nimport '../sources/sources';\nimport FeatureSelection from '../selection/selection';\nimport StyleParser from '../styles/style_parser';\nimport {StyleManager} from '../styles/style_manager';\nimport {parseLayers, FilterOptions, layerCache} from '../styles/layer';\nimport {buildFilter} from '../styles/filter';\nimport Texture from '../gl/texture';\nimport VertexElements from '../gl/vertex_elements';\nimport Label from '../labels/label';\n\nconst SceneWorker = Object.assign(self, {\n\n    FeatureSelection,\n\n    sources: {},\n    styles: {},\n    layers: {},\n    tiles: {},\n\n    // Initialize worker\n    init (scene_id, worker_id, num_workers, log_level, device_pixel_ratio, has_element_index_unit, external_scripts) {\n        this.scene_id = scene_id;\n        this._worker_id = worker_id;\n        this.num_workers = num_workers;\n        log.setLevel(log_level);\n        Utils.device_pixel_ratio = device_pixel_ratio;\n        VertexElements.setElementIndexUint(has_element_index_unit);\n        FeatureSelection.setPrefix(this._worker_id);\n        this.style_manager = new StyleManager();\n        this.importExternalScripts(external_scripts);\n        Label.id_prefix = worker_id;\n        Label.id_multiplier = num_workers;\n        return worker_id;\n    },\n\n    // Import custom external scripts\n    importExternalScripts(scripts) {\n        if (scripts.length === 0) {\n            return;\n        }\n        log('debug', 'loading custom data source scripts in worker:', scripts);\n\n        // `window` is already shimmed to allow compatibility with some other libraries (e.g. FontFaceObserver)\n        // So there's an extra dance here to look for any additional `window` properties added by these script imports,\n        // then add them to the worker `self` scope.\n        let prev_names = Object.getOwnPropertyNames(window);\n\n        importScripts(...scripts);\n\n        Object.getOwnPropertyNames(window).forEach(prop => {\n            if (prev_names.indexOf(prop) === -1) {\n                this[prop] = window[prop]; // new property added to window, also add it to self\n            }\n        });\n    },\n\n    // Starts a config refresh\n    updateConfig ({ config, generation, introspection }, debug) {\n        config = JSON.parse(config);\n        mergeDebugSettings(debug);\n\n        this.generation = generation;\n        this.introspection = introspection;\n\n        // Expand global properties\n        this.global = compileFunctionStrings(config.global);\n\n        // Create data sources\n        this.createDataSources(config);\n\n        // Expand styles\n        config.styles = compileFunctionStrings(config.styles, StyleParser.wrapFunction);\n        this.styles = this.style_manager.build(config.styles);\n        this.style_manager.initStyles({\n            generation: this.generation,\n            styles: this.styles,\n            sources: this.sources,\n            introspection: this.introspection\n        });\n\n        // Parse each top-level layer as a separate tree\n        this.layers = parseLayers(config.layers, this.style_manager.styles);\n\n        // Sync tetxure info from main thread\n        this.syncing_textures = this.syncTextures(config.textures);\n\n        // Return promise for when config refresh finishes\n        this.configuring = this.syncing_textures.then(() => {\n            log('debug', 'updated config');\n        });\n\n        return this.configuring;\n    },\n\n    // Create data sources and clear tile cache if necessary\n    createDataSources (config) {\n        // Save and compare previous sources\n        this.last_config_sources = this.config_sources || {};\n        this.config_sources = mergeObjects({}, config.sources); // deep copy the serialized config for the later existence comparison\n        let last_sources = this.sources;\n        let changed = [];\n\n        // Parse new sources\n        this.sources = {}; // clear previous sources\n        for (let name in config.sources) {\n            if (JSON.stringify(this.last_config_sources[name]) === JSON.stringify(config.sources[name])) {\n                this.sources[name] = last_sources[name];\n                continue;\n            }\n\n            // compile any user-defined JS functions\n            config.sources[name] = compileFunctionStrings(config.sources[name]);\n\n            let source;\n            try {\n                source = DataSource.create(Object.assign({}, config.sources[name], {name}), this.sources);\n            }\n            catch(e) {\n                continue;\n            }\n\n            if (!source) {\n                continue;\n            }\n            this.sources[name] = source;\n            changed.push(name);\n        }\n\n        // Clear tile cache for data sources that changed\n        changed.forEach(source => {\n            for (let t in this.tiles) {\n                if (this.tiles[t].source === source) {\n                    delete this.tiles[t];\n                }\n            }\n        });\n    },\n\n    // Returns a promise that fulfills when config refresh is finished\n    awaitConfiguration () {\n        return this.configuring;\n    },\n\n    // Build a tile: load from tile source if building for first time, otherwise rebuild with existing data\n    buildTile ({ tile }) {\n        // Tile cached?\n        if (this.getTile(tile.key) != null) {\n            // Already loading?\n            if (this.getTile(tile.key).loading === true) {\n                return;\n            }\n        }\n\n        // Update tile cache\n        tile = this.tiles[tile.key] = Object.assign(this.getTile(tile.key) || {}, tile);\n\n        // Update config (styles, etc.), then build tile\n        return this.awaitConfiguration().then(() => {\n            // First time building the tile\n            if (tile.loaded !== true) {\n\n                tile.loading = true;\n                tile.loaded = false;\n                tile.error = null;\n\n                this.loadTileSourceData(tile).then(() => {\n                    if (!this.getTile(tile.key)) {\n                        log('trace', `stop tile build after data source load because tile was removed: ${tile.key}`);\n                        return;\n                    }\n\n                    // Warn and continue on data source error\n                    if (tile.source_data.error) {\n                        log('warn', `tile load error(s) for ${tile.key}: ${tile.source_data.error}`);\n                    }\n\n                    tile.loading = false;\n                    tile.loaded = true;\n                    Tile.buildGeometry(tile, this);\n                }).catch((error) => {\n                    tile.loading = false;\n                    tile.loaded = false;\n                    tile.error = error.stack;\n                    log('error', `tile load error for ${tile.key}: ${tile.error}`);\n\n                    // Send error to main thread\n                    WorkerBroker.postMessage(`TileManager_${this.scene_id}.buildTileError`, Tile.slice(tile));\n                });\n            }\n            // Tile already loaded, just rebuild\n            else {\n                log('trace', `used worker cache for tile ${tile.key}`);\n\n                // Build geometry\n                try {\n                    Tile.buildGeometry(tile, this);\n                }\n                catch(error) {\n                    // Send error to main thread\n                    tile.error = error.toString();\n                    WorkerBroker.postMessage(`TileManager_${this.scene_id}.buildTileError`, Tile.slice(tile));\n                }\n            }\n        });\n    },\n\n    // Load this tile's data source, or copy from an existing tile's data\n    loadTileSourceData (tile) {\n        const source = this.sources[tile.source];\n        if (source) {\n            // Search existing tiles to see if we can reuse existing source data for this coordinate\n            for (const t in this.tiles) {\n                const ref = this.tiles[t];\n                if (ref.source === tile.source &&\n                    ref.coords.key === tile.coords.key &&\n                    ref.loaded) {\n                    return Promise.resolve(source.copyTileData(ref, tile));\n                }\n            }\n\n            // Load new tile data (no existing data found)\n            return source.load(tile);\n        }\n        else {\n            tile.source_data = {};\n            return Promise.resolve(tile);\n        }\n    },\n\n    getTile(key) {\n        return this.tiles[key];\n    },\n\n    // Remove tile\n    removeTile (key) {\n        var tile = this.tiles[key];\n\n        if (tile != null) {\n            // Cancel if loading\n            if (tile.loading === true) {\n                log('trace', `cancel tile load for ${key}`);\n                tile.loading = false;\n                Tile.cancel(tile);\n            }\n\n            // Remove from cache\n            FeatureSelection.clearTile(key);\n            delete this.tiles[key];\n            log('trace', `remove tile from cache for ${key}`);\n        }\n    },\n\n    // Query features within visible tiles, with optional filter conditions\n    queryFeatures ({ filter, visible, geometry, tile_keys }) {\n        let features = [];\n        let tiles = tile_keys\n            .map(t => this.tiles[t])\n            .filter(t => t && t.loaded);\n\n        // Compile feature filter\n        if (filter != null) {\n            filter = ['{', '['].indexOf(filter[0]) > -1 ? JSON.parse(filter) : filter; // de-serialize if looks like an object\n            filter = compileFunctionStrings(filter, StyleParser.wrapFunction);\n        }\n        filter = buildFilter(filter, FilterOptions);\n\n        tiles.forEach(tile => {\n            for (let layer in tile.source_data.layers) {\n                let data = tile.source_data.layers[layer];\n\n                if (data == null) {\n                    return;\n                }\n\n                data.features.forEach(feature => {\n                    // Optionally check if feature is visible (e.g. was rendered for current generation)\n                    const feature_visible = (feature.generation === this.generation);\n                    if ((visible === true && !feature_visible) ||\n                        (visible === false && feature_visible)) {\n                        return;\n                    }\n\n                    // Apply feature filter\n                    let context = StyleParser.getFeatureParseContext(feature, tile, this.global);\n                    context.source = tile.source;  // add data source name\n                    context.layer = layer;         // add data source layer name\n                    context.id = feature.id;       // add feature id\n\n                    if (!filter(context)) {\n                        return;\n                    }\n\n                    // Info to return with each feature\n                    let subset = {\n                        type: feature.type,\n                        id: feature.id,\n                        properties: Object.assign({}, feature.properties, {\n                            $source: context.source,\n                            $layer: context.layer,\n                            $geometry: context.geometry,\n                            $visible: feature_visible\n                        })\n                    };\n\n                    // Optionally include geometry in response\n                    if (geometry === true) {\n                        // Transform back to lat lng (copy geometry to avoid local modification)\n                        subset.geometry = Geo.copyGeometry(feature.geometry);\n                        Geo.tileSpaceToLatlng(subset.geometry, tile.coords.z, tile.min);\n                    }\n\n                    features.push(subset);\n                });\n            }\n        });\n        return features;\n    },\n\n    // Get a feature from the selection map\n    getFeatureSelection ({ id, key } = {}) {\n        var selection = FeatureSelection.map[key];\n\n        return {\n            id: id,\n            feature: (selection && selection.feature)\n        };\n    },\n\n    // Resets the feature selection state\n    resetFeatureSelection (sources = null) {\n        FeatureSelection.reset(sources);\n    },\n\n    // Selection map size for this worker\n    getFeatureSelectionMapSize () {\n        return FeatureSelection.getMapSize();\n    },\n\n    // Texture info needs to be synced from main thread, e.g. width/height, which we only know after the texture loads\n    syncTextures (tex_config) {\n        let textures = [];\n        if (tex_config) {\n            textures.push(...Object.keys(tex_config));\n        }\n\n        log('trace', 'sync textures to worker:', textures);\n        if (textures.length > 0) {\n            return Texture.syncTexturesToWorker(textures);\n        }\n        return Promise.resolve();\n    },\n\n    // Sync device pixel ratio from main thread\n    updateDevicePixelRatio (device_pixel_ratio) {\n        Utils.device_pixel_ratio = device_pixel_ratio;\n    },\n\n    clearFunctionStringCache () {\n        clearFunctionStringCache();\n    },\n\n    // Profiling helpers\n    profile (name) {\n        console.profile(`worker ${this._worker_id}: ${name}`); // eslint-disable-line no-console\n    },\n\n    profileEnd (name) {\n        console.profileEnd(`worker ${this._worker_id}: ${name}`); // eslint-disable-line no-console\n    },\n\n    debug: {\n        debugSettings,\n        layerCache,\n        functionStringCache\n    }\n\n});\n\nWorkerBroker.addTarget('self', SceneWorker);\n","// WebGL context wrapper\n\nvar Context;\nexport default Context = {};\n\nlet context_id = 0;\n\n// Setup a WebGL context\n// If no canvas element is provided, one is created and added to the document body\nContext.getContext = function getContext (canvas, options)\n{\n    var fullscreen = false;\n    if (canvas == null) {\n        canvas = document.createElement('canvas');\n        canvas.style.position = 'absolute';\n        canvas.style.top = 0;\n        canvas.style.left = 0;\n        canvas.style.zIndex = -1;\n        document.body.appendChild(canvas);\n        fullscreen = true;\n    }\n\n    // powerPreference context option spec requires listeners for context loss/restore,\n    // though it's not clear these are required in practice.\n    // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.2.1\n    canvas.addEventListener('webglcontextlost', () => {});\n    canvas.addEventListener('webglcontextrestored', () => {});\n\n    var gl = canvas.getContext('webgl', options) || canvas.getContext('experimental-webgl', options);\n    if (!gl) {\n        throw new Error('Couldn\\'t create WebGL context.');\n    }\n    gl._tangram_id = context_id++;\n\n    if (!fullscreen) {\n        Context.resize(gl, parseFloat(canvas.style.width), parseFloat(canvas.style.height), options.device_pixel_ratio);\n    }\n    else {\n        Context.resize(gl, window.innerWidth, window.innerHeight, options.device_pixel_ratio);\n        window.addEventListener('resize', function () {\n            Context.resize(gl, window.innerWidth, window.innerHeight, options.device_pixel_ratio);\n        });\n    }\n\n    return gl;\n};\n\nContext.resize = function (gl, width, height, device_pixel_ratio)\n{\n    device_pixel_ratio = device_pixel_ratio || window.devicePixelRatio || 1;\n    gl.canvas.style.width = width + 'px';\n    gl.canvas.style.height = height + 'px';\n    gl.canvas.width = Math.round(width * device_pixel_ratio);\n    gl.canvas.height = Math.round(height * device_pixel_ratio);\n    gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n    gl.viewport(0, 0, gl.canvas.width, gl.canvas.height);\n};\n","// Get a value for a nested property with path provided as an array (`a.b.c` => ['a', 'b', 'c'])\nexport function getPropertyPath (object, path) {\n    const prop = path[path.length - 1];\n    return getPropertyPathTarget(object, path)?.[prop];\n}\n\n// Set a value for a nested property with path provided as an array (`a.b.c` => ['a', 'b', 'c'])\nexport function setPropertyPath (object, path, value) {\n    const prop = path[path.length - 1];\n    const target = getPropertyPathTarget(object, path);\n    if (target) {\n        target[prop] = value;\n    }\n}\n\n// Get the immediate parent object for a property path name provided as an array\n// e.g. for a single-depth path, this is just `object`, for path ['a', 'b'], this is `object[a]`\nexport function getPropertyPathTarget (object, path) {\n    if (path.length === 0) {\n        return;\n    }\n\n    let target = object;\n    for (let i = 0; i < path.length - 1; i++) {\n        const prop = path[i];\n        target = target[prop];\n        if (target == null) {\n            return;\n        }\n    }\n    return target;\n}\n","import log from '../utils/log';\nimport { getPropertyPathTarget } from '../utils/props';\n\n// prefix used to identify global property references\nconst GLOBAL_PREFIX = 'global.';\nconst GLOBAL_PREFIX_LENGTH = GLOBAL_PREFIX.length;\n\n// name of 'hidden' (non-enumerable) property used to track global property references on an object\nconst GLOBAL_REGISTRY = '__global_prop';\n\n// Property name references a global property?\nexport function isGlobalReference (val) {\n    return val?.slice(0, GLOBAL_PREFIX_LENGTH) === GLOBAL_PREFIX;\n}\n\n// Has object property been substitued with a value from a global reference?\n// Property provided as a single-depth string name, or nested path array (`a.b.c` => ['a', 'b', 'c'])\nexport function isGlobalSubstitution (object, prop_or_path) {\n    const path = Array.isArray(prop_or_path) ? prop_or_path : [prop_or_path];\n    const target = getPropertyPathTarget(object, path);\n    const prop = path[path.length - 1];\n    return target?.[GLOBAL_REGISTRY]?.[prop] !== undefined;\n}\n\n// Flatten nested global properties for simpler string look-ups\nexport function flattenGlobalProperties (obj, prefix = null, globals = {}) {\n    prefix = prefix ? (prefix + '.') : GLOBAL_PREFIX;\n\n    for (const p in obj) {\n        const key = prefix + p;\n        const val = obj[p];\n        globals[key] = val;\n\n        if (typeof val === 'object' && !Array.isArray(val)) {\n            flattenGlobalProperties(val, key, globals);\n        }\n    }\n    return globals;\n}\n\n// Find and apply new global properties (and re-apply old ones)\nexport function applyGlobalProperties (globals, obj, target, key) {\n    let prop;\n\n    // Check for previously applied global substitution\n    if (target?.[GLOBAL_REGISTRY]?.[key]) {\n        prop = target[GLOBAL_REGISTRY][key];\n    }\n    // Check string for new global substitution\n    else if (typeof obj === 'string' && obj.slice(0, GLOBAL_PREFIX_LENGTH) === GLOBAL_PREFIX) {\n        prop = obj;\n    }\n\n    // Found global property to substitute\n    if (prop) {\n        // Mark property as global substitution\n        if (target[GLOBAL_REGISTRY] == null) {\n            Object.defineProperty(target, GLOBAL_REGISTRY, { value: {} });\n        }\n        target[GLOBAL_REGISTRY][key] = prop;\n\n        // Get current global value\n        let val = globals[prop];\n        let stack;\n        while (typeof val === 'string' && val.slice(0, GLOBAL_PREFIX_LENGTH) === GLOBAL_PREFIX) {\n            // handle globals that refer to other globals, detecting any cyclical references\n            stack = stack || [prop];\n            if (stack.indexOf(val) > -1) {\n                log({ level: 'warn', once: true }, 'Global properties: cyclical reference detected', stack);\n                val = null;\n                break;\n            }\n            stack.push(val);\n            val = globals[val];\n        }\n\n        // Create getter/setter\n        Object.defineProperty(target, key, {\n            enumerable: true,\n            get: function () {\n                return val; // return substituted value\n            },\n            set: function (v) {\n                // clear the global substitution and remove the getter/setter\n                delete target[GLOBAL_REGISTRY][key];\n                delete target[key];\n                target[key] = v; // save the new value\n            }\n        });\n    }\n    // Loop through object keys or array indices\n    else if (Array.isArray(obj)) {\n        for (let p = 0; p < obj.length; p++) {\n            applyGlobalProperties(globals, obj[p], obj, p);\n        }\n    }\n    else if (typeof obj === 'object') {\n        for (const p in obj) {\n            applyGlobalProperties(globals, obj[p], obj, p);\n        }\n    }\n    return obj;\n}\n","export default (typeof global !== \"undefined\" ? global :\n            typeof self !== \"undefined\" ? self :\n            typeof window !== \"undefined\" ? window : {});\n","\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\nvar inited = false;\nfunction init () {\n  inited = true;\n  var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\n  for (var i = 0, len = code.length; i < len; ++i) {\n    lookup[i] = code[i]\n    revLookup[code.charCodeAt(i)] = i\n  }\n\n  revLookup['-'.charCodeAt(0)] = 62\n  revLookup['_'.charCodeAt(0)] = 63\n}\n\nexport function toByteArray (b64) {\n  if (!inited) {\n    init();\n  }\n  var i, j, l, tmp, placeHolders, arr\n  var len = b64.length\n\n  if (len % 4 > 0) {\n    throw new Error('Invalid string. Length must be a multiple of 4')\n  }\n\n  // the number of equal signs (place holders)\n  // if there are two placeholders, than the two characters before it\n  // represent one byte\n  // if there is only one, then the three characters before it represent 2 bytes\n  // this is just a cheap hack to not do indexOf twice\n  placeHolders = b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0\n\n  // base64 is 4/3 + up to two characters of the original data\n  arr = new Arr(len * 3 / 4 - placeHolders)\n\n  // if there are placeholders, only get up to the last complete 4 chars\n  l = placeHolders > 0 ? len - 4 : len\n\n  var L = 0\n\n  for (i = 0, j = 0; i < l; i += 4, j += 3) {\n    tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]\n    arr[L++] = (tmp >> 16) & 0xFF\n    arr[L++] = (tmp >> 8) & 0xFF\n    arr[L++] = tmp & 0xFF\n  }\n\n  if (placeHolders === 2) {\n    tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)\n    arr[L++] = tmp & 0xFF\n  } else if (placeHolders === 1) {\n    tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)\n    arr[L++] = (tmp >> 8) & 0xFF\n    arr[L++] = tmp & 0xFF\n  }\n\n  return arr\n}\n\nfunction tripletToBase64 (num) {\n  return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n  var tmp\n  var output = []\n  for (var i = start; i < end; i += 3) {\n    tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])\n    output.push(tripletToBase64(tmp))\n  }\n  return output.join('')\n}\n\nexport function fromByteArray (uint8) {\n  if (!inited) {\n    init();\n  }\n  var tmp\n  var len = uint8.length\n  var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n  var output = ''\n  var parts = []\n  var maxChunkLength = 16383 // must be multiple of 3\n\n  // go through the array every three bytes, we'll deal with trailing stuff later\n  for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n    parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n  }\n\n  // pad the end with zeros, but make sure to not forget the extra bytes\n  if (extraBytes === 1) {\n    tmp = uint8[len - 1]\n    output += lookup[tmp >> 2]\n    output += lookup[(tmp << 4) & 0x3F]\n    output += '=='\n  } else if (extraBytes === 2) {\n    tmp = (uint8[len - 2] << 8) + (uint8[len - 1])\n    output += lookup[tmp >> 10]\n    output += lookup[(tmp >> 4) & 0x3F]\n    output += lookup[(tmp << 2) & 0x3F]\n    output += '='\n  }\n\n  parts.push(output)\n\n  return parts.join('')\n}\n","\nexport function read (buffer, offset, isLE, mLen, nBytes) {\n  var e, m\n  var eLen = nBytes * 8 - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var nBits = -7\n  var i = isLE ? (nBytes - 1) : 0\n  var d = isLE ? -1 : 1\n  var s = buffer[offset + i]\n\n  i += d\n\n  e = s & ((1 << (-nBits)) - 1)\n  s >>= (-nBits)\n  nBits += eLen\n  for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n  m = e & ((1 << (-nBits)) - 1)\n  e >>= (-nBits)\n  nBits += mLen\n  for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n  if (e === 0) {\n    e = 1 - eBias\n  } else if (e === eMax) {\n    return m ? NaN : ((s ? -1 : 1) * Infinity)\n  } else {\n    m = m + Math.pow(2, mLen)\n    e = e - eBias\n  }\n  return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexport function write (buffer, value, offset, isLE, mLen, nBytes) {\n  var e, m, c\n  var eLen = nBytes * 8 - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n  var i = isLE ? 0 : (nBytes - 1)\n  var d = isLE ? 1 : -1\n  var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n  value = Math.abs(value)\n\n  if (isNaN(value) || value === Infinity) {\n    m = isNaN(value) ? 1 : 0\n    e = eMax\n  } else {\n    e = Math.floor(Math.log(value) / Math.LN2)\n    if (value * (c = Math.pow(2, -e)) < 1) {\n      e--\n      c *= 2\n    }\n    if (e + eBias >= 1) {\n      value += rt / c\n    } else {\n      value += rt * Math.pow(2, 1 - eBias)\n    }\n    if (value * c >= 2) {\n      e++\n      c /= 2\n    }\n\n    if (e + eBias >= eMax) {\n      m = 0\n      e = eMax\n    } else if (e + eBias >= 1) {\n      m = (value * c - 1) * Math.pow(2, mLen)\n      e = e + eBias\n    } else {\n      m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n      e = 0\n    }\n  }\n\n  for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n  e = (e << mLen) | m\n  eLen += mLen\n  for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n  buffer[offset + i - d] |= s * 128\n}\n","var toString = {}.toString;\n\nexport default Array.isArray || function (arr) {\n  return toString.call(arr) == '[object Array]';\n};\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author   Feross Aboukhadijeh <feross@feross.org> <http://feross.org>\n * @license  MIT\n */\n/* eslint-disable no-proto */\n\n\nimport * as base64 from './base64'\nimport * as ieee754 from './ieee754'\nimport isArray from './isArray'\n\nexport var INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n *   === true    Use Uint8Array implementation (fastest)\n *   === false   Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n *   - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n *     See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n *   - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n *   - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n *     incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n  ? global.TYPED_ARRAY_SUPPORT\n  : true\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nvar _kMaxLength = kMaxLength()\nexport {_kMaxLength as kMaxLength};\nfunction typedArraySupport () {\n  return true;\n  // rollup issues\n  // try {\n  //   var arr = new Uint8Array(1)\n  //   arr.__proto__ = {\n  //     __proto__: Uint8Array.prototype,\n  //     foo: function () { return 42 }\n  //   }\n  //   return arr.foo() === 42 && // typed array instances can be augmented\n  //       typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n  //       arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n  // } catch (e) {\n  //   return false\n  // }\n}\n\nfunction kMaxLength () {\n  return Buffer.TYPED_ARRAY_SUPPORT\n    ? 0x7fffffff\n    : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n  if (kMaxLength() < length) {\n    throw new RangeError('Invalid typed array length')\n  }\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    // Return an augmented `Uint8Array` instance, for best performance\n    that = new Uint8Array(length)\n    that.__proto__ = Buffer.prototype\n  } else {\n    // Fallback: Return an object instance of the Buffer class\n    if (that === null) {\n      that = new Buffer(length)\n    }\n    that.length = length\n  }\n\n  return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nexport function Buffer (arg, encodingOrOffset, length) {\n  if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n    return new Buffer(arg, encodingOrOffset, length)\n  }\n\n  // Common case.\n  if (typeof arg === 'number') {\n    if (typeof encodingOrOffset === 'string') {\n      throw new Error(\n        'If encoding is specified then the first argument must be a string'\n      )\n    }\n    return allocUnsafe(this, arg)\n  }\n  return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n  arr.__proto__ = Buffer.prototype\n  return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n  if (typeof value === 'number') {\n    throw new TypeError('\"value\" argument must not be a number')\n  }\n\n  if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n    return fromArrayBuffer(that, value, encodingOrOffset, length)\n  }\n\n  if (typeof value === 'string') {\n    return fromString(that, value, encodingOrOffset)\n  }\n\n  return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n  return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n  Buffer.prototype.__proto__ = Uint8Array.prototype\n  Buffer.__proto__ = Uint8Array\n  if (typeof Symbol !== 'undefined' && Symbol.species &&\n      Buffer[Symbol.species] === Buffer) {\n    // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n    // Object.defineProperty(Buffer, Symbol.species, {\n    //   value: null,\n    //   configurable: true\n    // })\n  }\n}\n\nfunction assertSize (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('\"size\" argument must be a number')\n  } else if (size < 0) {\n    throw new RangeError('\"size\" argument must not be negative')\n  }\n}\n\nfunction alloc (that, size, fill, encoding) {\n  assertSize(size)\n  if (size <= 0) {\n    return createBuffer(that, size)\n  }\n  if (fill !== undefined) {\n    // Only pay attention to encoding if it's a string. This\n    // prevents accidentally sending in a number that would\n    // be interpretted as a start offset.\n    return typeof encoding === 'string'\n      ? createBuffer(that, size).fill(fill, encoding)\n      : createBuffer(that, size).fill(fill)\n  }\n  return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n  return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n  assertSize(size)\n  that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) {\n    for (var i = 0; i < size; ++i) {\n      that[i] = 0\n    }\n  }\n  return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n  return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n  return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n  if (typeof encoding !== 'string' || encoding === '') {\n    encoding = 'utf8'\n  }\n\n  if (!Buffer.isEncoding(encoding)) {\n    throw new TypeError('\"encoding\" must be a valid string encoding')\n  }\n\n  var length = byteLength(string, encoding) | 0\n  that = createBuffer(that, length)\n\n  var actual = that.write(string, encoding)\n\n  if (actual !== length) {\n    // Writing a hex string, for example, that contains invalid characters will\n    // cause everything after the first invalid character to be ignored. (e.g.\n    // 'abxxcd' will be treated as 'ab')\n    that = that.slice(0, actual)\n  }\n\n  return that\n}\n\nfunction fromArrayLike (that, array) {\n  var length = array.length < 0 ? 0 : checked(array.length) | 0\n  that = createBuffer(that, length)\n  for (var i = 0; i < length; i += 1) {\n    that[i] = array[i] & 255\n  }\n  return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n  array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n  if (byteOffset < 0 || array.byteLength < byteOffset) {\n    throw new RangeError('\\'offset\\' is out of bounds')\n  }\n\n  if (array.byteLength < byteOffset + (length || 0)) {\n    throw new RangeError('\\'length\\' is out of bounds')\n  }\n\n  if (byteOffset === undefined && length === undefined) {\n    array = new Uint8Array(array)\n  } else if (length === undefined) {\n    array = new Uint8Array(array, byteOffset)\n  } else {\n    array = new Uint8Array(array, byteOffset, length)\n  }\n\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    // Return an augmented `Uint8Array` instance, for best performance\n    that = array\n    that.__proto__ = Buffer.prototype\n  } else {\n    // Fallback: Return an object instance of the Buffer class\n    that = fromArrayLike(that, array)\n  }\n  return that\n}\n\nfunction fromObject (that, obj) {\n  if (internalIsBuffer(obj)) {\n    var len = checked(obj.length) | 0\n    that = createBuffer(that, len)\n\n    if (that.length === 0) {\n      return that\n    }\n\n    obj.copy(that, 0, 0, len)\n    return that\n  }\n\n  if (obj) {\n    if ((typeof ArrayBuffer !== 'undefined' &&\n        obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n      if (typeof obj.length !== 'number' || isnan(obj.length)) {\n        return createBuffer(that, 0)\n      }\n      return fromArrayLike(that, obj)\n    }\n\n    if (obj.type === 'Buffer' && isArray(obj.data)) {\n      return fromArrayLike(that, obj.data)\n    }\n  }\n\n  throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n  // Note: cannot use `length < kMaxLength()` here because that fails when\n  // length is NaN (which is otherwise coerced to zero.)\n  if (length >= kMaxLength()) {\n    throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n                         'size: 0x' + kMaxLength().toString(16) + ' bytes')\n  }\n  return length | 0\n}\n\nexport function SlowBuffer (length) {\n  if (+length != length) { // eslint-disable-line eqeqeq\n    length = 0\n  }\n  return Buffer.alloc(+length)\n}\nBuffer.isBuffer = isBuffer;\nfunction internalIsBuffer (b) {\n  return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n  if (!internalIsBuffer(a) || !internalIsBuffer(b)) {\n    throw new TypeError('Arguments must be Buffers')\n  }\n\n  if (a === b) return 0\n\n  var x = a.length\n  var y = b.length\n\n  for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n    if (a[i] !== b[i]) {\n      x = a[i]\n      y = b[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n  switch (String(encoding).toLowerCase()) {\n    case 'hex':\n    case 'utf8':\n    case 'utf-8':\n    case 'ascii':\n    case 'latin1':\n    case 'binary':\n    case 'base64':\n    case 'ucs2':\n    case 'ucs-2':\n    case 'utf16le':\n    case 'utf-16le':\n      return true\n    default:\n      return false\n  }\n}\n\nBuffer.concat = function concat (list, length) {\n  if (!isArray(list)) {\n    throw new TypeError('\"list\" argument must be an Array of Buffers')\n  }\n\n  if (list.length === 0) {\n    return Buffer.alloc(0)\n  }\n\n  var i\n  if (length === undefined) {\n    length = 0\n    for (i = 0; i < list.length; ++i) {\n      length += list[i].length\n    }\n  }\n\n  var buffer = Buffer.allocUnsafe(length)\n  var pos = 0\n  for (i = 0; i < list.length; ++i) {\n    var buf = list[i]\n    if (!internalIsBuffer(buf)) {\n      throw new TypeError('\"list\" argument must be an Array of Buffers')\n    }\n    buf.copy(buffer, pos)\n    pos += buf.length\n  }\n  return buffer\n}\n\nfunction byteLength (string, encoding) {\n  if (internalIsBuffer(string)) {\n    return string.length\n  }\n  if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n      (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n    return string.byteLength\n  }\n  if (typeof string !== 'string') {\n    string = '' + string\n  }\n\n  var len = string.length\n  if (len === 0) return 0\n\n  // Use a for loop to avoid recursion\n  var loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'ascii':\n      case 'latin1':\n      case 'binary':\n        return len\n      case 'utf8':\n      case 'utf-8':\n      case undefined:\n        return utf8ToBytes(string).length\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return len * 2\n      case 'hex':\n        return len >>> 1\n      case 'base64':\n        return base64ToBytes(string).length\n      default:\n        if (loweredCase) return utf8ToBytes(string).length // assume utf8\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n  var loweredCase = false\n\n  // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n  // property of a typed array.\n\n  // This behaves neither like String nor Uint8Array in that we set start/end\n  // to their upper/lower bounds if the value passed is out of range.\n  // undefined is handled specially as per ECMA-262 6th Edition,\n  // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n  if (start === undefined || start < 0) {\n    start = 0\n  }\n  // Return early if start > this.length. Done here to prevent potential uint32\n  // coercion fail below.\n  if (start > this.length) {\n    return ''\n  }\n\n  if (end === undefined || end > this.length) {\n    end = this.length\n  }\n\n  if (end <= 0) {\n    return ''\n  }\n\n  // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n  end >>>= 0\n  start >>>= 0\n\n  if (end <= start) {\n    return ''\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  while (true) {\n    switch (encoding) {\n      case 'hex':\n        return hexSlice(this, start, end)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Slice(this, start, end)\n\n      case 'ascii':\n        return asciiSlice(this, start, end)\n\n      case 'latin1':\n      case 'binary':\n        return latin1Slice(this, start, end)\n\n      case 'base64':\n        return base64Slice(this, start, end)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return utf16leSlice(this, start, end)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = (encoding + '').toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n  var i = b[n]\n  b[n] = b[m]\n  b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n  var len = this.length\n  if (len % 2 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 16-bits')\n  }\n  for (var i = 0; i < len; i += 2) {\n    swap(this, i, i + 1)\n  }\n  return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n  var len = this.length\n  if (len % 4 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 32-bits')\n  }\n  for (var i = 0; i < len; i += 4) {\n    swap(this, i, i + 3)\n    swap(this, i + 1, i + 2)\n  }\n  return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n  var len = this.length\n  if (len % 8 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 64-bits')\n  }\n  for (var i = 0; i < len; i += 8) {\n    swap(this, i, i + 7)\n    swap(this, i + 1, i + 6)\n    swap(this, i + 2, i + 5)\n    swap(this, i + 3, i + 4)\n  }\n  return this\n}\n\nBuffer.prototype.toString = function toString () {\n  var length = this.length | 0\n  if (length === 0) return ''\n  if (arguments.length === 0) return utf8Slice(this, 0, length)\n  return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n  if (!internalIsBuffer(b)) throw new TypeError('Argument must be a Buffer')\n  if (this === b) return true\n  return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n  var str = ''\n  var max = INSPECT_MAX_BYTES\n  if (this.length > 0) {\n    str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n    if (this.length > max) str += ' ... '\n  }\n  return '<Buffer ' + str + '>'\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n  if (!internalIsBuffer(target)) {\n    throw new TypeError('Argument must be a Buffer')\n  }\n\n  if (start === undefined) {\n    start = 0\n  }\n  if (end === undefined) {\n    end = target ? target.length : 0\n  }\n  if (thisStart === undefined) {\n    thisStart = 0\n  }\n  if (thisEnd === undefined) {\n    thisEnd = this.length\n  }\n\n  if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n    throw new RangeError('out of range index')\n  }\n\n  if (thisStart >= thisEnd && start >= end) {\n    return 0\n  }\n  if (thisStart >= thisEnd) {\n    return -1\n  }\n  if (start >= end) {\n    return 1\n  }\n\n  start >>>= 0\n  end >>>= 0\n  thisStart >>>= 0\n  thisEnd >>>= 0\n\n  if (this === target) return 0\n\n  var x = thisEnd - thisStart\n  var y = end - start\n  var len = Math.min(x, y)\n\n  var thisCopy = this.slice(thisStart, thisEnd)\n  var targetCopy = target.slice(start, end)\n\n  for (var i = 0; i < len; ++i) {\n    if (thisCopy[i] !== targetCopy[i]) {\n      x = thisCopy[i]\n      y = targetCopy[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n  // Empty buffer means no match\n  if (buffer.length === 0) return -1\n\n  // Normalize byteOffset\n  if (typeof byteOffset === 'string') {\n    encoding = byteOffset\n    byteOffset = 0\n  } else if (byteOffset > 0x7fffffff) {\n    byteOffset = 0x7fffffff\n  } else if (byteOffset < -0x80000000) {\n    byteOffset = -0x80000000\n  }\n  byteOffset = +byteOffset  // Coerce to Number.\n  if (isNaN(byteOffset)) {\n    // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n    byteOffset = dir ? 0 : (buffer.length - 1)\n  }\n\n  // Normalize byteOffset: negative offsets start from the end of the buffer\n  if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n  if (byteOffset >= buffer.length) {\n    if (dir) return -1\n    else byteOffset = buffer.length - 1\n  } else if (byteOffset < 0) {\n    if (dir) byteOffset = 0\n    else return -1\n  }\n\n  // Normalize val\n  if (typeof val === 'string') {\n    val = Buffer.from(val, encoding)\n  }\n\n  // Finally, search either indexOf (if dir is true) or lastIndexOf\n  if (internalIsBuffer(val)) {\n    // Special case: looking for empty string/buffer always fails\n    if (val.length === 0) {\n      return -1\n    }\n    return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n  } else if (typeof val === 'number') {\n    val = val & 0xFF // Search for a byte value [0-255]\n    if (Buffer.TYPED_ARRAY_SUPPORT &&\n        typeof Uint8Array.prototype.indexOf === 'function') {\n      if (dir) {\n        return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n      } else {\n        return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n      }\n    }\n    return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n  }\n\n  throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n  var indexSize = 1\n  var arrLength = arr.length\n  var valLength = val.length\n\n  if (encoding !== undefined) {\n    encoding = String(encoding).toLowerCase()\n    if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n        encoding === 'utf16le' || encoding === 'utf-16le') {\n      if (arr.length < 2 || val.length < 2) {\n        return -1\n      }\n      indexSize = 2\n      arrLength /= 2\n      valLength /= 2\n      byteOffset /= 2\n    }\n  }\n\n  function read (buf, i) {\n    if (indexSize === 1) {\n      return buf[i]\n    } else {\n      return buf.readUInt16BE(i * indexSize)\n    }\n  }\n\n  var i\n  if (dir) {\n    var foundIndex = -1\n    for (i = byteOffset; i < arrLength; i++) {\n      if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n        if (foundIndex === -1) foundIndex = i\n        if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n      } else {\n        if (foundIndex !== -1) i -= i - foundIndex\n        foundIndex = -1\n      }\n    }\n  } else {\n    if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n    for (i = byteOffset; i >= 0; i--) {\n      var found = true\n      for (var j = 0; j < valLength; j++) {\n        if (read(arr, i + j) !== read(val, j)) {\n          found = false\n          break\n        }\n      }\n      if (found) return i\n    }\n  }\n\n  return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n  return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n  offset = Number(offset) || 0\n  var remaining = buf.length - offset\n  if (!length) {\n    length = remaining\n  } else {\n    length = Number(length)\n    if (length > remaining) {\n      length = remaining\n    }\n  }\n\n  // must be an even number of digits\n  var strLen = string.length\n  if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n  if (length > strLen / 2) {\n    length = strLen / 2\n  }\n  for (var i = 0; i < length; ++i) {\n    var parsed = parseInt(string.substr(i * 2, 2), 16)\n    if (isNaN(parsed)) return i\n    buf[offset + i] = parsed\n  }\n  return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n  return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n  return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n  return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n  return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n  return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n  // Buffer#write(string)\n  if (offset === undefined) {\n    encoding = 'utf8'\n    length = this.length\n    offset = 0\n  // Buffer#write(string, encoding)\n  } else if (length === undefined && typeof offset === 'string') {\n    encoding = offset\n    length = this.length\n    offset = 0\n  // Buffer#write(string, offset[, length][, encoding])\n  } else if (isFinite(offset)) {\n    offset = offset | 0\n    if (isFinite(length)) {\n      length = length | 0\n      if (encoding === undefined) encoding = 'utf8'\n    } else {\n      encoding = length\n      length = undefined\n    }\n  // legacy write(string, encoding, offset, length) - remove in v0.13\n  } else {\n    throw new Error(\n      'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n    )\n  }\n\n  var remaining = this.length - offset\n  if (length === undefined || length > remaining) length = remaining\n\n  if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n    throw new RangeError('Attempt to write outside buffer bounds')\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  var loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'hex':\n        return hexWrite(this, string, offset, length)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Write(this, string, offset, length)\n\n      case 'ascii':\n        return asciiWrite(this, string, offset, length)\n\n      case 'latin1':\n      case 'binary':\n        return latin1Write(this, string, offset, length)\n\n      case 'base64':\n        // Warning: maxLength not taken into account in base64Write\n        return base64Write(this, string, offset, length)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return ucs2Write(this, string, offset, length)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n  return {\n    type: 'Buffer',\n    data: Array.prototype.slice.call(this._arr || this, 0)\n  }\n}\n\nfunction base64Slice (buf, start, end) {\n  if (start === 0 && end === buf.length) {\n    return base64.fromByteArray(buf)\n  } else {\n    return base64.fromByteArray(buf.slice(start, end))\n  }\n}\n\nfunction utf8Slice (buf, start, end) {\n  end = Math.min(buf.length, end)\n  var res = []\n\n  var i = start\n  while (i < end) {\n    var firstByte = buf[i]\n    var codePoint = null\n    var bytesPerSequence = (firstByte > 0xEF) ? 4\n      : (firstByte > 0xDF) ? 3\n      : (firstByte > 0xBF) ? 2\n      : 1\n\n    if (i + bytesPerSequence <= end) {\n      var secondByte, thirdByte, fourthByte, tempCodePoint\n\n      switch (bytesPerSequence) {\n        case 1:\n          if (firstByte < 0x80) {\n            codePoint = firstByte\n          }\n          break\n        case 2:\n          secondByte = buf[i + 1]\n          if ((secondByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n            if (tempCodePoint > 0x7F) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 3:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n            if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 4:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          fourthByte = buf[i + 3]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n            if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n              codePoint = tempCodePoint\n            }\n          }\n      }\n    }\n\n    if (codePoint === null) {\n      // we did not generate a valid codePoint so insert a\n      // replacement char (U+FFFD) and advance only 1 byte\n      codePoint = 0xFFFD\n      bytesPerSequence = 1\n    } else if (codePoint > 0xFFFF) {\n      // encode to utf16 (surrogate pair dance)\n      codePoint -= 0x10000\n      res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n      codePoint = 0xDC00 | codePoint & 0x3FF\n    }\n\n    res.push(codePoint)\n    i += bytesPerSequence\n  }\n\n  return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n  var len = codePoints.length\n  if (len <= MAX_ARGUMENTS_LENGTH) {\n    return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n  }\n\n  // Decode in chunks to avoid \"call stack size exceeded\".\n  var res = ''\n  var i = 0\n  while (i < len) {\n    res += String.fromCharCode.apply(\n      String,\n      codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n    )\n  }\n  return res\n}\n\nfunction asciiSlice (buf, start, end) {\n  var ret = ''\n  end = Math.min(buf.length, end)\n\n  for (var i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i] & 0x7F)\n  }\n  return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n  var ret = ''\n  end = Math.min(buf.length, end)\n\n  for (var i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i])\n  }\n  return ret\n}\n\nfunction hexSlice (buf, start, end) {\n  var len = buf.length\n\n  if (!start || start < 0) start = 0\n  if (!end || end < 0 || end > len) end = len\n\n  var out = ''\n  for (var i = start; i < end; ++i) {\n    out += toHex(buf[i])\n  }\n  return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n  var bytes = buf.slice(start, end)\n  var res = ''\n  for (var i = 0; i < bytes.length; i += 2) {\n    res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n  }\n  return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n  var len = this.length\n  start = ~~start\n  end = end === undefined ? len : ~~end\n\n  if (start < 0) {\n    start += len\n    if (start < 0) start = 0\n  } else if (start > len) {\n    start = len\n  }\n\n  if (end < 0) {\n    end += len\n    if (end < 0) end = 0\n  } else if (end > len) {\n    end = len\n  }\n\n  if (end < start) end = start\n\n  var newBuf\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    newBuf = this.subarray(start, end)\n    newBuf.__proto__ = Buffer.prototype\n  } else {\n    var sliceLen = end - start\n    newBuf = new Buffer(sliceLen, undefined)\n    for (var i = 0; i < sliceLen; ++i) {\n      newBuf[i] = this[i + start]\n    }\n  }\n\n  return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n  if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n  if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var val = this[offset]\n  var mul = 1\n  var i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) {\n    checkOffset(offset, byteLength, this.length)\n  }\n\n  var val = this[offset + --byteLength]\n  var mul = 1\n  while (byteLength > 0 && (mul *= 0x100)) {\n    val += this[offset + --byteLength] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return ((this[offset]) |\n      (this[offset + 1] << 8) |\n      (this[offset + 2] << 16)) +\n      (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] * 0x1000000) +\n    ((this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var val = this[offset]\n  var mul = 1\n  var i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var i = byteLength\n  var mul = 1\n  var val = this[offset + --i]\n  while (i > 0 && (mul *= 0x100)) {\n    val += this[offset + --i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  if (!(this[offset] & 0x80)) return (this[offset])\n  return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  var val = this[offset] | (this[offset + 1] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  var val = this[offset + 1] | (this[offset] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset]) |\n    (this[offset + 1] << 8) |\n    (this[offset + 2] << 16) |\n    (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] << 24) |\n    (this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n  if (!internalIsBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n  if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  var mul = 1\n  var i = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  var i = byteLength - 1\n  var mul = 1\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n  if (value < 0) value = 0xffff + value + 1\n  for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n    buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n      (littleEndian ? i : 1 - i) * 8\n  }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff)\n    this[offset + 1] = (value >>> 8)\n  } else {\n    objectWriteUInt16(this, value, offset, true)\n  }\n  return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 8)\n    this[offset + 1] = (value & 0xff)\n  } else {\n    objectWriteUInt16(this, value, offset, false)\n  }\n  return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n  if (value < 0) value = 0xffffffff + value + 1\n  for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n    buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n  }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset + 3] = (value >>> 24)\n    this[offset + 2] = (value >>> 16)\n    this[offset + 1] = (value >>> 8)\n    this[offset] = (value & 0xff)\n  } else {\n    objectWriteUInt32(this, value, offset, true)\n  }\n  return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 24)\n    this[offset + 1] = (value >>> 16)\n    this[offset + 2] = (value >>> 8)\n    this[offset + 3] = (value & 0xff)\n  } else {\n    objectWriteUInt32(this, value, offset, false)\n  }\n  return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) {\n    var limit = Math.pow(2, 8 * byteLength - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  var i = 0\n  var mul = 1\n  var sub = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) {\n    var limit = Math.pow(2, 8 * byteLength - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  var i = byteLength - 1\n  var mul = 1\n  var sub = 0\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n  if (value < 0) value = 0xff + value + 1\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff)\n    this[offset + 1] = (value >>> 8)\n  } else {\n    objectWriteUInt16(this, value, offset, true)\n  }\n  return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 8)\n    this[offset + 1] = (value & 0xff)\n  } else {\n    objectWriteUInt16(this, value, offset, false)\n  }\n  return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff)\n    this[offset + 1] = (value >>> 8)\n    this[offset + 2] = (value >>> 16)\n    this[offset + 3] = (value >>> 24)\n  } else {\n    objectWriteUInt32(this, value, offset, true)\n  }\n  return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  if (value < 0) value = 0xffffffff + value + 1\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 24)\n    this[offset + 1] = (value >>> 16)\n    this[offset + 2] = (value >>> 8)\n    this[offset + 3] = (value & 0xff)\n  } else {\n    objectWriteUInt32(this, value, offset, false)\n  }\n  return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n  if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 23, 4)\n  return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 52, 8)\n  return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n  if (!start) start = 0\n  if (!end && end !== 0) end = this.length\n  if (targetStart >= target.length) targetStart = target.length\n  if (!targetStart) targetStart = 0\n  if (end > 0 && end < start) end = start\n\n  // Copy 0 bytes; we're done\n  if (end === start) return 0\n  if (target.length === 0 || this.length === 0) return 0\n\n  // Fatal error conditions\n  if (targetStart < 0) {\n    throw new RangeError('targetStart out of bounds')\n  }\n  if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n  if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n  // Are we oob?\n  if (end > this.length) end = this.length\n  if (target.length - targetStart < end - start) {\n    end = target.length - targetStart + start\n  }\n\n  var len = end - start\n  var i\n\n  if (this === target && start < targetStart && targetStart < end) {\n    // descending copy from end\n    for (i = len - 1; i >= 0; --i) {\n      target[i + targetStart] = this[i + start]\n    }\n  } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n    // ascending copy from start\n    for (i = 0; i < len; ++i) {\n      target[i + targetStart] = this[i + start]\n    }\n  } else {\n    Uint8Array.prototype.set.call(\n      target,\n      this.subarray(start, start + len),\n      targetStart\n    )\n  }\n\n  return len\n}\n\n// Usage:\n//    buffer.fill(number[, offset[, end]])\n//    buffer.fill(buffer[, offset[, end]])\n//    buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n  // Handle string cases:\n  if (typeof val === 'string') {\n    if (typeof start === 'string') {\n      encoding = start\n      start = 0\n      end = this.length\n    } else if (typeof end === 'string') {\n      encoding = end\n      end = this.length\n    }\n    if (val.length === 1) {\n      var code = val.charCodeAt(0)\n      if (code < 256) {\n        val = code\n      }\n    }\n    if (encoding !== undefined && typeof encoding !== 'string') {\n      throw new TypeError('encoding must be a string')\n    }\n    if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n      throw new TypeError('Unknown encoding: ' + encoding)\n    }\n  } else if (typeof val === 'number') {\n    val = val & 255\n  }\n\n  // Invalid ranges are not set to a default, so can range check early.\n  if (start < 0 || this.length < start || this.length < end) {\n    throw new RangeError('Out of range index')\n  }\n\n  if (end <= start) {\n    return this\n  }\n\n  start = start >>> 0\n  end = end === undefined ? this.length : end >>> 0\n\n  if (!val) val = 0\n\n  var i\n  if (typeof val === 'number') {\n    for (i = start; i < end; ++i) {\n      this[i] = val\n    }\n  } else {\n    var bytes = internalIsBuffer(val)\n      ? val\n      : utf8ToBytes(new Buffer(val, encoding).toString())\n    var len = bytes.length\n    for (i = 0; i < end - start; ++i) {\n      this[i + start] = bytes[i % len]\n    }\n  }\n\n  return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n  // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n  str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n  // Node converts strings with length < 2 to ''\n  if (str.length < 2) return ''\n  // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n  while (str.length % 4 !== 0) {\n    str = str + '='\n  }\n  return str\n}\n\nfunction stringtrim (str) {\n  if (str.trim) return str.trim()\n  return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n  if (n < 16) return '0' + n.toString(16)\n  return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n  units = units || Infinity\n  var codePoint\n  var length = string.length\n  var leadSurrogate = null\n  var bytes = []\n\n  for (var i = 0; i < length; ++i) {\n    codePoint = string.charCodeAt(i)\n\n    // is surrogate component\n    if (codePoint > 0xD7FF && codePoint < 0xE000) {\n      // last char was a lead\n      if (!leadSurrogate) {\n        // no lead yet\n        if (codePoint > 0xDBFF) {\n          // unexpected trail\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        } else if (i + 1 === length) {\n          // unpaired lead\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        }\n\n        // valid lead\n        leadSurrogate = codePoint\n\n        continue\n      }\n\n      // 2 leads in a row\n      if (codePoint < 0xDC00) {\n        if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n        leadSurrogate = codePoint\n        continue\n      }\n\n      // valid surrogate pair\n      codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n    } else if (leadSurrogate) {\n      // valid bmp char, but last char was a lead\n      if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n    }\n\n    leadSurrogate = null\n\n    // encode utf8\n    if (codePoint < 0x80) {\n      if ((units -= 1) < 0) break\n      bytes.push(codePoint)\n    } else if (codePoint < 0x800) {\n      if ((units -= 2) < 0) break\n      bytes.push(\n        codePoint >> 0x6 | 0xC0,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x10000) {\n      if ((units -= 3) < 0) break\n      bytes.push(\n        codePoint >> 0xC | 0xE0,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x110000) {\n      if ((units -= 4) < 0) break\n      bytes.push(\n        codePoint >> 0x12 | 0xF0,\n        codePoint >> 0xC & 0x3F | 0x80,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else {\n      throw new Error('Invalid code point')\n    }\n  }\n\n  return bytes\n}\n\nfunction asciiToBytes (str) {\n  var byteArray = []\n  for (var i = 0; i < str.length; ++i) {\n    // Node's code seems to be doing this and not & 0x7F..\n    byteArray.push(str.charCodeAt(i) & 0xFF)\n  }\n  return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n  var c, hi, lo\n  var byteArray = []\n  for (var i = 0; i < str.length; ++i) {\n    if ((units -= 2) < 0) break\n\n    c = str.charCodeAt(i)\n    hi = c >> 8\n    lo = c % 256\n    byteArray.push(lo)\n    byteArray.push(hi)\n  }\n\n  return byteArray\n}\n\n\nfunction base64ToBytes (str) {\n  return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n  for (var i = 0; i < length; ++i) {\n    if ((i + offset >= dst.length) || (i >= src.length)) break\n    dst[i + offset] = src[i]\n  }\n  return i\n}\n\nfunction isnan (val) {\n  return val !== val // eslint-disable-line no-self-compare\n}\n\n\n// the following is from is-buffer, also by Feross Aboukhadijeh and with same lisence\n// The _isBuffer check is for Safari 5-7 support, because it's missing\n// Object.prototype.constructor. Remove this eventually\nexport function isBuffer(obj) {\n  return obj != null && (!!obj._isBuffer || isFastBuffer(obj) || isSlowBuffer(obj))\n}\n\nfunction isFastBuffer (obj) {\n  return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)\n}\n\n// For Node v0.10 support. Remove this eventually.\nfunction isSlowBuffer (obj) {\n  return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isFastBuffer(obj.slice(0, 0))\n}\n","// shim for using process in browser\n// based off https://github.com/defunctzombie/node-process/blob/master/browser.js\n\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\nvar cachedSetTimeout = defaultSetTimout;\nvar cachedClearTimeout = defaultClearTimeout;\nif (typeof global.setTimeout === 'function') {\n    cachedSetTimeout = setTimeout;\n}\nif (typeof global.clearTimeout === 'function') {\n    cachedClearTimeout = clearTimeout;\n}\n\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        //normal enviroments in sane situations\n        return setTimeout(fun, 0);\n    }\n    // if setTimeout wasn't available but was latter defined\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            // 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\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        //normal enviroments in sane situations\n        return clearTimeout(marker);\n    }\n    // if clearTimeout wasn't available but was latter defined\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            // 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.\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\nexport function nextTick(fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        runTimeout(drainQueue);\n    }\n}\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nexport var title = 'browser';\nexport var platform = 'browser';\nexport var browser = true;\nexport var env = {};\nexport var argv = [];\nexport var version = ''; // empty string to avoid regexp issues\nexport var versions = {};\nexport var release = {};\nexport var config = {};\n\nfunction noop() {}\n\nexport var on = noop;\nexport var addListener = noop;\nexport var once = noop;\nexport var off = noop;\nexport var removeListener = noop;\nexport var removeAllListeners = noop;\nexport var emit = noop;\n\nexport function binding(name) {\n    throw new Error('process.binding is not supported');\n}\n\nexport function cwd () { return '/' }\nexport function chdir (dir) {\n    throw new Error('process.chdir is not supported');\n};\nexport function umask() { return 0; }\n\n// from https://github.com/kumavis/browser-process-hrtime/blob/master/index.js\nvar performance = global.performance || {}\nvar performanceNow =\n  performance.now        ||\n  performance.mozNow     ||\n  performance.msNow      ||\n  performance.oNow       ||\n  performance.webkitNow  ||\n  function(){ return (new Date()).getTime() }\n\n// generate timestamp or delta\n// see http://nodejs.org/api/process.html#process_process_hrtime\nexport function hrtime(previousTimestamp){\n  var clocktime = performanceNow.call(performance)*1e-3\n  var seconds = Math.floor(clocktime)\n  var nanoseconds = Math.floor((clocktime%1)*1e9)\n  if (previousTimestamp) {\n    seconds = seconds - previousTimestamp[0]\n    nanoseconds = nanoseconds - previousTimestamp[1]\n    if (nanoseconds<0) {\n      seconds--\n      nanoseconds += 1e9\n    }\n  }\n  return [seconds,nanoseconds]\n}\n\nvar startTime = new Date();\nexport function uptime() {\n  var currentTime = new Date();\n  var dif = currentTime - startTime;\n  return dif / 1000;\n}\n\nexport default {\n  nextTick: nextTick,\n  title: title,\n  browser: browser,\n  env: env,\n  argv: argv,\n  version: version,\n  versions: versions,\n  on: on,\n  addListener: addListener,\n  once: once,\n  off: off,\n  removeListener: removeListener,\n  removeAllListeners: removeAllListeners,\n  emit: emit,\n  binding: binding,\n  cwd: cwd,\n  chdir: chdir,\n  umask: umask,\n  hrtime: hrtime,\n  platform: platform,\n  release: release,\n  config: config,\n  uptime: uptime\n};\n","/*!\n\nJSZip v3.10.1 - A JavaScript class for generating and reading zip files\n<http://stuartk.com/jszip>\n\n(c) 2009-2016 Stuart Knightley <stuart [at] stuartk.com>\nDual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip/main/LICENSE.markdown.\n\nJSZip uses the library pako released under the MIT license :\nhttps://github.com/nodeca/pako/blob/main/LICENSE\n*/\n\n!function(e){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=e();else if(\"function\"==typeof define&&define.amd)define([],e);else{(\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:this).JSZip=e()}}(function(){return function s(a,o,h){function u(r,e){if(!o[r]){if(!a[r]){var t=\"function\"==typeof require&&require;if(!e&&t)return t(r,!0);if(l)return l(r,!0);var n=new Error(\"Cannot find module '\"+r+\"'\");throw n.code=\"MODULE_NOT_FOUND\",n}var i=o[r]={exports:{}};a[r][0].call(i.exports,function(e){var t=a[r][1][e];return u(t||e)},i,i.exports,s,a,o,h)}return o[r].exports}for(var l=\"function\"==typeof require&&require,e=0;e<h.length;e++)u(h[e]);return u}({1:[function(e,t,r){\"use strict\";var d=e(\"./utils\"),c=e(\"./support\"),p=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";r.encode=function(e){for(var t,r,n,i,s,a,o,h=[],u=0,l=e.length,f=l,c=\"string\"!==d.getTypeOf(e);u<e.length;)f=l-u,n=c?(t=e[u++],r=u<l?e[u++]:0,u<l?e[u++]:0):(t=e.charCodeAt(u++),r=u<l?e.charCodeAt(u++):0,u<l?e.charCodeAt(u++):0),i=t>>2,s=(3&t)<<4|r>>4,a=1<f?(15&r)<<2|n>>6:64,o=2<f?63&n:64,h.push(p.charAt(i)+p.charAt(s)+p.charAt(a)+p.charAt(o));return h.join(\"\")},r.decode=function(e){var t,r,n,i,s,a,o=0,h=0,u=\"data:\";if(e.substr(0,u.length)===u)throw new Error(\"Invalid base64 input, it looks like a data url.\");var l,f=3*(e=e.replace(/[^A-Za-z0-9+/=]/g,\"\")).length/4;if(e.charAt(e.length-1)===p.charAt(64)&&f--,e.charAt(e.length-2)===p.charAt(64)&&f--,f%1!=0)throw new Error(\"Invalid base64 input, bad content length.\");for(l=c.uint8array?new Uint8Array(0|f):new Array(0|f);o<e.length;)t=p.indexOf(e.charAt(o++))<<2|(i=p.indexOf(e.charAt(o++)))>>4,r=(15&i)<<4|(s=p.indexOf(e.charAt(o++)))>>2,n=(3&s)<<6|(a=p.indexOf(e.charAt(o++))),l[h++]=t,64!==s&&(l[h++]=r),64!==a&&(l[h++]=n);return l}},{\"./support\":30,\"./utils\":32}],2:[function(e,t,r){\"use strict\";var n=e(\"./external\"),i=e(\"./stream/DataWorker\"),s=e(\"./stream/Crc32Probe\"),a=e(\"./stream/DataLengthProbe\");function o(e,t,r,n,i){this.compressedSize=e,this.uncompressedSize=t,this.crc32=r,this.compression=n,this.compressedContent=i}o.prototype={getContentWorker:function(){var e=new i(n.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new a(\"data_length\")),t=this;return e.on(\"end\",function(){if(this.streamInfo.data_length!==t.uncompressedSize)throw new Error(\"Bug : uncompressed data size mismatch\")}),e},getCompressedWorker:function(){return new i(n.Promise.resolve(this.compressedContent)).withStreamInfo(\"compressedSize\",this.compressedSize).withStreamInfo(\"uncompressedSize\",this.uncompressedSize).withStreamInfo(\"crc32\",this.crc32).withStreamInfo(\"compression\",this.compression)}},o.createWorkerFrom=function(e,t,r){return e.pipe(new s).pipe(new a(\"uncompressedSize\")).pipe(t.compressWorker(r)).pipe(new a(\"compressedSize\")).withStreamInfo(\"compression\",t)},t.exports=o},{\"./external\":6,\"./stream/Crc32Probe\":25,\"./stream/DataLengthProbe\":26,\"./stream/DataWorker\":27}],3:[function(e,t,r){\"use strict\";var n=e(\"./stream/GenericWorker\");r.STORE={magic:\"\\0\\0\",compressWorker:function(){return new n(\"STORE compression\")},uncompressWorker:function(){return new n(\"STORE decompression\")}},r.DEFLATE=e(\"./flate\")},{\"./flate\":7,\"./stream/GenericWorker\":28}],4:[function(e,t,r){\"use strict\";var n=e(\"./utils\");var o=function(){for(var e,t=[],r=0;r<256;r++){e=r;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t){return void 0!==e&&e.length?\"string\"!==n.getTypeOf(e)?function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a<s;a++)e=e>>>8^i[255&(e^t[a])];return-1^e}(0|t,e,e.length,0):function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a<s;a++)e=e>>>8^i[255&(e^t.charCodeAt(a))];return-1^e}(0|t,e,e.length,0):0}},{\"./utils\":32}],5:[function(e,t,r){\"use strict\";r.base64=!1,r.binary=!1,r.dir=!1,r.createFolders=!0,r.date=null,r.compression=null,r.compressionOptions=null,r.comment=null,r.unixPermissions=null,r.dosPermissions=null},{}],6:[function(e,t,r){\"use strict\";var n=null;n=\"undefined\"!=typeof Promise?Promise:e(\"lie\"),t.exports={Promise:n}},{lie:37}],7:[function(e,t,r){\"use strict\";var n=\"undefined\"!=typeof Uint8Array&&\"undefined\"!=typeof Uint16Array&&\"undefined\"!=typeof Uint32Array,i=e(\"pako\"),s=e(\"./utils\"),a=e(\"./stream/GenericWorker\"),o=n?\"uint8array\":\"array\";function h(e,t){a.call(this,\"FlateWorker/\"+e),this._pako=null,this._pakoAction=e,this._pakoOptions=t,this.meta={}}r.magic=\"\\b\\0\",s.inherits(h,a),h.prototype.processChunk=function(e){this.meta=e.meta,null===this._pako&&this._createPako(),this._pako.push(s.transformTo(o,e.data),!1)},h.prototype.flush=function(){a.prototype.flush.call(this),null===this._pako&&this._createPako(),this._pako.push([],!0)},h.prototype.cleanUp=function(){a.prototype.cleanUp.call(this),this._pako=null},h.prototype._createPako=function(){this._pako=new i[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var t=this;this._pako.onData=function(e){t.push({data:e,meta:t.meta})}},r.compressWorker=function(e){return new h(\"Deflate\",e)},r.uncompressWorker=function(){return new h(\"Inflate\",{})}},{\"./stream/GenericWorker\":28,\"./utils\":32,pako:38}],8:[function(e,t,r){\"use strict\";function A(e,t){var r,n=\"\";for(r=0;r<t;r++)n+=String.fromCharCode(255&e),e>>>=8;return n}function n(e,t,r,n,i,s){var a,o,h=e.file,u=e.compression,l=s!==O.utf8encode,f=I.transformTo(\"string\",s(h.name)),c=I.transformTo(\"string\",O.utf8encode(h.name)),d=h.comment,p=I.transformTo(\"string\",s(d)),m=I.transformTo(\"string\",O.utf8encode(d)),_=c.length!==h.name.length,g=m.length!==d.length,b=\"\",v=\"\",y=\"\",w=h.dir,k=h.date,x={crc32:0,compressedSize:0,uncompressedSize:0};t&&!r||(x.crc32=e.crc32,x.compressedSize=e.compressedSize,x.uncompressedSize=e.uncompressedSize);var S=0;t&&(S|=8),l||!_&&!g||(S|=2048);var z=0,C=0;w&&(z|=16),\"UNIX\"===i?(C=798,z|=function(e,t){var r=e;return e||(r=t?16893:33204),(65535&r)<<16}(h.unixPermissions,w)):(C=20,z|=function(e){return 63&(e||0)}(h.dosPermissions)),a=k.getUTCHours(),a<<=6,a|=k.getUTCMinutes(),a<<=5,a|=k.getUTCSeconds()/2,o=k.getUTCFullYear()-1980,o<<=4,o|=k.getUTCMonth()+1,o<<=5,o|=k.getUTCDate(),_&&(v=A(1,1)+A(B(f),4)+c,b+=\"up\"+A(v.length,2)+v),g&&(y=A(1,1)+A(B(p),4)+m,b+=\"uc\"+A(y.length,2)+y);var E=\"\";return E+=\"\\n\\0\",E+=A(S,2),E+=u.magic,E+=A(a,2),E+=A(o,2),E+=A(x.crc32,4),E+=A(x.compressedSize,4),E+=A(x.uncompressedSize,4),E+=A(f.length,2),E+=A(b.length,2),{fileRecord:R.LOCAL_FILE_HEADER+E+f+b,dirRecord:R.CENTRAL_FILE_HEADER+A(C,2)+E+A(p.length,2)+\"\\0\\0\\0\\0\"+A(z,4)+A(n,4)+f+b+p}}var I=e(\"../utils\"),i=e(\"../stream/GenericWorker\"),O=e(\"../utf8\"),B=e(\"../crc32\"),R=e(\"../signature\");function s(e,t,r,n){i.call(this,\"ZipFileWorker\"),this.bytesWritten=0,this.zipComment=t,this.zipPlatform=r,this.encodeFileName=n,this.streamFiles=e,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}I.inherits(s,i),s.prototype.push=function(e){var t=e.meta.percent||0,r=this.entriesCount,n=this._sources.length;this.accumulate?this.contentBuffer.push(e):(this.bytesWritten+=e.data.length,i.prototype.push.call(this,{data:e.data,meta:{currentFile:this.currentFile,percent:r?(t+100*(r-n-1))/r:100}}))},s.prototype.openedSource=function(e){this.currentSourceOffset=this.bytesWritten,this.currentFile=e.file.name;var t=this.streamFiles&&!e.file.dir;if(t){var r=n(e,t,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:r.fileRecord,meta:{percent:0}})}else this.accumulate=!0},s.prototype.closedSource=function(e){this.accumulate=!1;var t=this.streamFiles&&!e.file.dir,r=n(e,t,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(r.dirRecord),t)this.push({data:function(e){return R.DATA_DESCRIPTOR+A(e.crc32,4)+A(e.compressedSize,4)+A(e.uncompressedSize,4)}(e),meta:{percent:100}});else for(this.push({data:r.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},s.prototype.flush=function(){for(var e=this.bytesWritten,t=0;t<this.dirRecords.length;t++)this.push({data:this.dirRecords[t],meta:{percent:100}});var r=this.bytesWritten-e,n=function(e,t,r,n,i){var s=I.transformTo(\"string\",i(n));return R.CENTRAL_DIRECTORY_END+\"\\0\\0\\0\\0\"+A(e,2)+A(e,2)+A(t,4)+A(r,4)+A(s.length,2)+s}(this.dirRecords.length,r,e,this.zipComment,this.encodeFileName);this.push({data:n,meta:{percent:100}})},s.prototype.prepareNextSource=function(){this.previous=this._sources.shift(),this.openedSource(this.previous.streamInfo),this.isPaused?this.previous.pause():this.previous.resume()},s.prototype.registerPrevious=function(e){this._sources.push(e);var t=this;return e.on(\"data\",function(e){t.processChunk(e)}),e.on(\"end\",function(){t.closedSource(t.previous.streamInfo),t._sources.length?t.prepareNextSource():t.end()}),e.on(\"error\",function(e){t.error(e)}),this},s.prototype.resume=function(){return!!i.prototype.resume.call(this)&&(!this.previous&&this._sources.length?(this.prepareNextSource(),!0):this.previous||this._sources.length||this.generatedError?void 0:(this.end(),!0))},s.prototype.error=function(e){var t=this._sources;if(!i.prototype.error.call(this,e))return!1;for(var r=0;r<t.length;r++)try{t[r].error(e)}catch(e){}return!0},s.prototype.lock=function(){i.prototype.lock.call(this);for(var e=this._sources,t=0;t<e.length;t++)e[t].lock()},t.exports=s},{\"../crc32\":4,\"../signature\":23,\"../stream/GenericWorker\":28,\"../utf8\":31,\"../utils\":32}],9:[function(e,t,r){\"use strict\";var u=e(\"../compressions\"),n=e(\"./ZipFileWorker\");r.generateWorker=function(e,a,t){var o=new n(a.streamFiles,t,a.platform,a.encodeFileName),h=0;try{e.forEach(function(e,t){h++;var r=function(e,t){var r=e||t,n=u[r];if(!n)throw new Error(r+\" is not a valid compression method !\");return n}(t.options.compression,a.compression),n=t.options.compressionOptions||a.compressionOptions||{},i=t.dir,s=t.date;t._compressWorker(r,n).withStreamInfo(\"file\",{name:e,dir:i,date:s,comment:t.comment||\"\",unixPermissions:t.unixPermissions,dosPermissions:t.dosPermissions}).pipe(o)}),o.entriesCount=h}catch(e){o.error(e)}return o}},{\"../compressions\":3,\"./ZipFileWorker\":8}],10:[function(e,t,r){\"use strict\";function n(){if(!(this instanceof n))return new n;if(arguments.length)throw new Error(\"The constructor with parameters has been removed in JSZip 3.0, please check the upgrade guide.\");this.files=Object.create(null),this.comment=null,this.root=\"\",this.clone=function(){var e=new n;for(var t in this)\"function\"!=typeof this[t]&&(e[t]=this[t]);return e}}(n.prototype=e(\"./object\")).loadAsync=e(\"./load\"),n.support=e(\"./support\"),n.defaults=e(\"./defaults\"),n.version=\"3.10.1\",n.loadAsync=function(e,t){return(new n).loadAsync(e,t)},n.external=e(\"./external\"),t.exports=n},{\"./defaults\":5,\"./external\":6,\"./load\":11,\"./object\":15,\"./support\":30}],11:[function(e,t,r){\"use strict\";var u=e(\"./utils\"),i=e(\"./external\"),n=e(\"./utf8\"),s=e(\"./zipEntries\"),a=e(\"./stream/Crc32Probe\"),l=e(\"./nodejsUtils\");function f(n){return new i.Promise(function(e,t){var r=n.decompressed.getContentWorker().pipe(new a);r.on(\"error\",function(e){t(e)}).on(\"end\",function(){r.streamInfo.crc32!==n.decompressed.crc32?t(new Error(\"Corrupted zip : CRC32 mismatch\")):e()}).resume()})}t.exports=function(e,o){var h=this;return o=u.extend(o||{},{base64:!1,checkCRC32:!1,optimizedBinaryString:!1,createFolders:!1,decodeFileName:n.utf8decode}),l.isNode&&l.isStream(e)?i.Promise.reject(new Error(\"JSZip can't accept a stream when loading a zip file.\")):u.prepareContent(\"the loaded zip file\",e,!0,o.optimizedBinaryString,o.base64).then(function(e){var t=new s(o);return t.load(e),t}).then(function(e){var t=[i.Promise.resolve(e)],r=e.files;if(o.checkCRC32)for(var n=0;n<r.length;n++)t.push(f(r[n]));return i.Promise.all(t)}).then(function(e){for(var t=e.shift(),r=t.files,n=0;n<r.length;n++){var i=r[n],s=i.fileNameStr,a=u.resolve(i.fileNameStr);h.file(a,i.decompressed,{binary:!0,optimizedBinaryString:!0,date:i.date,dir:i.dir,comment:i.fileCommentStr.length?i.fileCommentStr:null,unixPermissions:i.unixPermissions,dosPermissions:i.dosPermissions,createFolders:o.createFolders}),i.dir||(h.file(a).unsafeOriginalName=s)}return t.zipComment.length&&(h.comment=t.zipComment),h})}},{\"./external\":6,\"./nodejsUtils\":14,\"./stream/Crc32Probe\":25,\"./utf8\":31,\"./utils\":32,\"./zipEntries\":33}],12:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"../stream/GenericWorker\");function s(e,t){i.call(this,\"Nodejs stream input adapter for \"+e),this._upstreamEnded=!1,this._bindStream(t)}n.inherits(s,i),s.prototype._bindStream=function(e){var t=this;(this._stream=e).pause(),e.on(\"data\",function(e){t.push({data:e,meta:{percent:0}})}).on(\"error\",function(e){t.isPaused?this.generatedError=e:t.error(e)}).on(\"end\",function(){t.isPaused?t._upstreamEnded=!0:t.end()})},s.prototype.pause=function(){return!!i.prototype.pause.call(this)&&(this._stream.pause(),!0)},s.prototype.resume=function(){return!!i.prototype.resume.call(this)&&(this._upstreamEnded?this.end():this._stream.resume(),!0)},t.exports=s},{\"../stream/GenericWorker\":28,\"../utils\":32}],13:[function(e,t,r){\"use strict\";var i=e(\"readable-stream\").Readable;function n(e,t,r){i.call(this,t),this._helper=e;var n=this;e.on(\"data\",function(e,t){n.push(e)||n._helper.pause(),r&&r(t)}).on(\"error\",function(e){n.emit(\"error\",e)}).on(\"end\",function(){n.push(null)})}e(\"../utils\").inherits(n,i),n.prototype._read=function(){this._helper.resume()},t.exports=n},{\"../utils\":32,\"readable-stream\":16}],14:[function(e,t,r){\"use strict\";t.exports={isNode:\"undefined\"!=typeof Buffer,newBufferFrom:function(e,t){if(Buffer.from&&Buffer.from!==Uint8Array.from)return Buffer.from(e,t);if(\"number\"==typeof e)throw new Error('The \"data\" argument must not be a number');return new Buffer(e,t)},allocBuffer:function(e){if(Buffer.alloc)return Buffer.alloc(e);var t=new Buffer(e);return t.fill(0),t},isBuffer:function(e){return Buffer.isBuffer(e)},isStream:function(e){return e&&\"function\"==typeof e.on&&\"function\"==typeof e.pause&&\"function\"==typeof e.resume}}},{}],15:[function(e,t,r){\"use strict\";function s(e,t,r){var n,i=u.getTypeOf(t),s=u.extend(r||{},f);s.date=s.date||new Date,null!==s.compression&&(s.compression=s.compression.toUpperCase()),\"string\"==typeof s.unixPermissions&&(s.unixPermissions=parseInt(s.unixPermissions,8)),s.unixPermissions&&16384&s.unixPermissions&&(s.dir=!0),s.dosPermissions&&16&s.dosPermissions&&(s.dir=!0),s.dir&&(e=g(e)),s.createFolders&&(n=_(e))&&b.call(this,n,!0);var a=\"string\"===i&&!1===s.binary&&!1===s.base64;r&&void 0!==r.binary||(s.binary=!a),(t instanceof c&&0===t.uncompressedSize||s.dir||!t||0===t.length)&&(s.base64=!1,s.binary=!0,t=\"\",s.compression=\"STORE\",i=\"string\");var o=null;o=t instanceof c||t instanceof l?t:p.isNode&&p.isStream(t)?new m(e,t):u.prepareContent(e,t,s.binary,s.optimizedBinaryString,s.base64);var h=new d(e,o,s);this.files[e]=h}var i=e(\"./utf8\"),u=e(\"./utils\"),l=e(\"./stream/GenericWorker\"),a=e(\"./stream/StreamHelper\"),f=e(\"./defaults\"),c=e(\"./compressedObject\"),d=e(\"./zipObject\"),o=e(\"./generate\"),p=e(\"./nodejsUtils\"),m=e(\"./nodejs/NodejsStreamInputAdapter\"),_=function(e){\"/\"===e.slice(-1)&&(e=e.substring(0,e.length-1));var t=e.lastIndexOf(\"/\");return 0<t?e.substring(0,t):\"\"},g=function(e){return\"/\"!==e.slice(-1)&&(e+=\"/\"),e},b=function(e,t){return t=void 0!==t?t:f.createFolders,e=g(e),this.files[e]||s.call(this,e,null,{dir:!0,createFolders:t}),this.files[e]};function h(e){return\"[object RegExp]\"===Object.prototype.toString.call(e)}var n={load:function(){throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\")},forEach:function(e){var t,r,n;for(t in this.files)n=this.files[t],(r=t.slice(this.root.length,t.length))&&t.slice(0,this.root.length)===this.root&&e(r,n)},filter:function(r){var n=[];return this.forEach(function(e,t){r(e,t)&&n.push(t)}),n},file:function(e,t,r){if(1!==arguments.length)return e=this.root+e,s.call(this,e,t,r),this;if(h(e)){var n=e;return this.filter(function(e,t){return!t.dir&&n.test(e)})}var i=this.files[this.root+e];return i&&!i.dir?i:null},folder:function(r){if(!r)return this;if(h(r))return this.filter(function(e,t){return t.dir&&r.test(e)});var e=this.root+r,t=b.call(this,e),n=this.clone();return n.root=t.name,n},remove:function(r){r=this.root+r;var e=this.files[r];if(e||(\"/\"!==r.slice(-1)&&(r+=\"/\"),e=this.files[r]),e&&!e.dir)delete this.files[r];else for(var t=this.filter(function(e,t){return t.name.slice(0,r.length)===r}),n=0;n<t.length;n++)delete this.files[t[n].name];return this},generate:function(){throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\")},generateInternalStream:function(e){var t,r={};try{if((r=u.extend(e||{},{streamFiles:!1,compression:\"STORE\",compressionOptions:null,type:\"\",platform:\"DOS\",comment:null,mimeType:\"application/zip\",encodeFileName:i.utf8encode})).type=r.type.toLowerCase(),r.compression=r.compression.toUpperCase(),\"binarystring\"===r.type&&(r.type=\"string\"),!r.type)throw new Error(\"No output type specified.\");u.checkSupport(r.type),\"darwin\"!==r.platform&&\"freebsd\"!==r.platform&&\"linux\"!==r.platform&&\"sunos\"!==r.platform||(r.platform=\"UNIX\"),\"win32\"===r.platform&&(r.platform=\"DOS\");var n=r.comment||this.comment||\"\";t=o.generateWorker(this,r,n)}catch(e){(t=new l(\"error\")).error(e)}return new a(t,r.type||\"string\",r.mimeType)},generateAsync:function(e,t){return this.generateInternalStream(e).accumulate(t)},generateNodeStream:function(e,t){return(e=e||{}).type||(e.type=\"nodebuffer\"),this.generateInternalStream(e).toNodejsStream(t)}};t.exports=n},{\"./compressedObject\":2,\"./defaults\":5,\"./generate\":9,\"./nodejs/NodejsStreamInputAdapter\":12,\"./nodejsUtils\":14,\"./stream/GenericWorker\":28,\"./stream/StreamHelper\":29,\"./utf8\":31,\"./utils\":32,\"./zipObject\":35}],16:[function(e,t,r){\"use strict\";t.exports=e(\"stream\")},{stream:void 0}],17:[function(e,t,r){\"use strict\";var n=e(\"./DataReader\");function i(e){n.call(this,e);for(var t=0;t<this.data.length;t++)e[t]=255&e[t]}e(\"../utils\").inherits(i,n),i.prototype.byteAt=function(e){return this.data[this.zero+e]},i.prototype.lastIndexOfSignature=function(e){for(var t=e.charCodeAt(0),r=e.charCodeAt(1),n=e.charCodeAt(2),i=e.charCodeAt(3),s=this.length-4;0<=s;--s)if(this.data[s]===t&&this.data[s+1]===r&&this.data[s+2]===n&&this.data[s+3]===i)return s-this.zero;return-1},i.prototype.readAndCheckSignature=function(e){var t=e.charCodeAt(0),r=e.charCodeAt(1),n=e.charCodeAt(2),i=e.charCodeAt(3),s=this.readData(4);return t===s[0]&&r===s[1]&&n===s[2]&&i===s[3]},i.prototype.readData=function(e){if(this.checkOffset(e),0===e)return[];var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./DataReader\":18}],18:[function(e,t,r){\"use strict\";var n=e(\"../utils\");function i(e){this.data=e,this.length=e.length,this.index=0,this.zero=0}i.prototype={checkOffset:function(e){this.checkIndex(this.index+e)},checkIndex:function(e){if(this.length<this.zero+e||e<0)throw new Error(\"End of data reached (data length = \"+this.length+\", asked index = \"+e+\"). Corrupted zip ?\")},setIndex:function(e){this.checkIndex(e),this.index=e},skip:function(e){this.setIndex(this.index+e)},byteAt:function(){},readInt:function(e){var t,r=0;for(this.checkOffset(e),t=this.index+e-1;t>=this.index;t--)r=(r<<8)+this.byteAt(t);return this.index+=e,r},readString:function(e){return n.transformTo(\"string\",this.readData(e))},readData:function(){},lastIndexOfSignature:function(){},readAndCheckSignature:function(){},readDate:function(){var e=this.readInt(4);return new Date(Date.UTC(1980+(e>>25&127),(e>>21&15)-1,e>>16&31,e>>11&31,e>>5&63,(31&e)<<1))}},t.exports=i},{\"../utils\":32}],19:[function(e,t,r){\"use strict\";var n=e(\"./Uint8ArrayReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./Uint8ArrayReader\":21}],20:[function(e,t,r){\"use strict\";var n=e(\"./DataReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.byteAt=function(e){return this.data.charCodeAt(this.zero+e)},i.prototype.lastIndexOfSignature=function(e){return this.data.lastIndexOf(e)-this.zero},i.prototype.readAndCheckSignature=function(e){return e===this.readData(4)},i.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./DataReader\":18}],21:[function(e,t,r){\"use strict\";var n=e(\"./ArrayReader\");function i(e){n.call(this,e)}e(\"../utils\").inherits(i,n),i.prototype.readData=function(e){if(this.checkOffset(e),0===e)return new Uint8Array(0);var t=this.data.subarray(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=i},{\"../utils\":32,\"./ArrayReader\":17}],22:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"../support\"),s=e(\"./ArrayReader\"),a=e(\"./StringReader\"),o=e(\"./NodeBufferReader\"),h=e(\"./Uint8ArrayReader\");t.exports=function(e){var t=n.getTypeOf(e);return n.checkSupport(t),\"string\"!==t||i.uint8array?\"nodebuffer\"===t?new o(e):i.uint8array?new h(n.transformTo(\"uint8array\",e)):new s(n.transformTo(\"array\",e)):new a(e)}},{\"../support\":30,\"../utils\":32,\"./ArrayReader\":17,\"./NodeBufferReader\":19,\"./StringReader\":20,\"./Uint8ArrayReader\":21}],23:[function(e,t,r){\"use strict\";r.LOCAL_FILE_HEADER=\"PK\u0003\u0004\",r.CENTRAL_FILE_HEADER=\"PK\u0001\u0002\",r.CENTRAL_DIRECTORY_END=\"PK\u0005\u0006\",r.ZIP64_CENTRAL_DIRECTORY_LOCATOR=\"PK\u0006\u0007\",r.ZIP64_CENTRAL_DIRECTORY_END=\"PK\u0006\u0006\",r.DATA_DESCRIPTOR=\"PK\u0007\\b\"},{}],24:[function(e,t,r){\"use strict\";var n=e(\"./GenericWorker\"),i=e(\"../utils\");function s(e){n.call(this,\"ConvertWorker to \"+e),this.destType=e}i.inherits(s,n),s.prototype.processChunk=function(e){this.push({data:i.transformTo(this.destType,e.data),meta:e.meta})},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],25:[function(e,t,r){\"use strict\";var n=e(\"./GenericWorker\"),i=e(\"../crc32\");function s(){n.call(this,\"Crc32Probe\"),this.withStreamInfo(\"crc32\",0)}e(\"../utils\").inherits(s,n),s.prototype.processChunk=function(e){this.streamInfo.crc32=i(e.data,this.streamInfo.crc32||0),this.push(e)},t.exports=s},{\"../crc32\":4,\"../utils\":32,\"./GenericWorker\":28}],26:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"./GenericWorker\");function s(e){i.call(this,\"DataLengthProbe for \"+e),this.propName=e,this.withStreamInfo(e,0)}n.inherits(s,i),s.prototype.processChunk=function(e){if(e){var t=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=t+e.data.length}i.prototype.processChunk.call(this,e)},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],27:[function(e,t,r){\"use strict\";var n=e(\"../utils\"),i=e(\"./GenericWorker\");function s(e){i.call(this,\"DataWorker\");var t=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type=\"\",this._tickScheduled=!1,e.then(function(e){t.dataIsReady=!0,t.data=e,t.max=e&&e.length||0,t.type=n.getTypeOf(e),t.isPaused||t._tickAndRepeat()},function(e){t.error(e)})}n.inherits(s,i),s.prototype.cleanUp=function(){i.prototype.cleanUp.call(this),this.data=null},s.prototype.resume=function(){return!!i.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,n.delay(this._tickAndRepeat,[],this)),!0)},s.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(n.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},s.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var e=null,t=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case\"string\":e=this.data.substring(this.index,t);break;case\"uint8array\":e=this.data.subarray(this.index,t);break;case\"array\":case\"nodebuffer\":e=this.data.slice(this.index,t)}return this.index=t,this.push({data:e,meta:{percent:this.max?this.index/this.max*100:0}})},t.exports=s},{\"../utils\":32,\"./GenericWorker\":28}],28:[function(e,t,r){\"use strict\";function n(e){this.name=e||\"default\",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}n.prototype={push:function(e){this.emit(\"data\",e)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit(\"end\"),this.cleanUp(),this.isFinished=!0}catch(e){this.emit(\"error\",e)}return!0},error:function(e){return!this.isFinished&&(this.isPaused?this.generatedError=e:(this.isFinished=!0,this.emit(\"error\",e),this.previous&&this.previous.error(e),this.cleanUp()),!0)},on:function(e,t){return this._listeners[e].push(t),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(e,t){if(this._listeners[e])for(var r=0;r<this._listeners[e].length;r++)this._listeners[e][r].call(this,t)},pipe:function(e){return e.registerPrevious(this)},registerPrevious:function(e){if(this.isLocked)throw new Error(\"The stream '\"+this+\"' has already been used.\");this.streamInfo=e.streamInfo,this.mergeStreamInfo(),this.previous=e;var t=this;return e.on(\"data\",function(e){t.processChunk(e)}),e.on(\"end\",function(){t.end()}),e.on(\"error\",function(e){t.error(e)}),this},pause:function(){return!this.isPaused&&!this.isFinished&&(this.isPaused=!0,this.previous&&this.previous.pause(),!0)},resume:function(){if(!this.isPaused||this.isFinished)return!1;var e=this.isPaused=!1;return this.generatedError&&(this.error(this.generatedError),e=!0),this.previous&&this.previous.resume(),!e},flush:function(){},processChunk:function(e){this.push(e)},withStreamInfo:function(e,t){return this.extraStreamInfo[e]=t,this.mergeStreamInfo(),this},mergeStreamInfo:function(){for(var e in this.extraStreamInfo)Object.prototype.hasOwnProperty.call(this.extraStreamInfo,e)&&(this.streamInfo[e]=this.extraStreamInfo[e])},lock:function(){if(this.isLocked)throw new Error(\"The stream '\"+this+\"' has already been used.\");this.isLocked=!0,this.previous&&this.previous.lock()},toString:function(){var e=\"Worker \"+this.name;return this.previous?this.previous+\" -> \"+e:e}},t.exports=n},{}],29:[function(e,t,r){\"use strict\";var h=e(\"../utils\"),i=e(\"./ConvertWorker\"),s=e(\"./GenericWorker\"),u=e(\"../base64\"),n=e(\"../support\"),a=e(\"../external\"),o=null;if(n.nodestream)try{o=e(\"../nodejs/NodejsStreamOutputAdapter\")}catch(e){}function l(e,o){return new a.Promise(function(t,r){var n=[],i=e._internalType,s=e._outputType,a=e._mimeType;e.on(\"data\",function(e,t){n.push(e),o&&o(t)}).on(\"error\",function(e){n=[],r(e)}).on(\"end\",function(){try{var e=function(e,t,r){switch(e){case\"blob\":return h.newBlob(h.transformTo(\"arraybuffer\",t),r);case\"base64\":return u.encode(t);default:return h.transformTo(e,t)}}(s,function(e,t){var r,n=0,i=null,s=0;for(r=0;r<t.length;r++)s+=t[r].length;switch(e){case\"string\":return t.join(\"\");case\"array\":return Array.prototype.concat.apply([],t);case\"uint8array\":for(i=new Uint8Array(s),r=0;r<t.length;r++)i.set(t[r],n),n+=t[r].length;return i;case\"nodebuffer\":return Buffer.concat(t);default:throw new Error(\"concat : unsupported type '\"+e+\"'\")}}(i,n),a);t(e)}catch(e){r(e)}n=[]}).resume()})}function f(e,t,r){var n=t;switch(t){case\"blob\":case\"arraybuffer\":n=\"uint8array\";break;case\"base64\":n=\"string\"}try{this._internalType=n,this._outputType=t,this._mimeType=r,h.checkSupport(n),this._worker=e.pipe(new i(n)),e.lock()}catch(e){this._worker=new s(\"error\"),this._worker.error(e)}}f.prototype={accumulate:function(e){return l(this,e)},on:function(e,t){var r=this;return\"data\"===e?this._worker.on(e,function(e){t.call(r,e.data,e.meta)}):this._worker.on(e,function(){h.delay(t,arguments,r)}),this},resume:function(){return h.delay(this._worker.resume,[],this._worker),this},pause:function(){return this._worker.pause(),this},toNodejsStream:function(e){if(h.checkSupport(\"nodestream\"),\"nodebuffer\"!==this._outputType)throw new Error(this._outputType+\" is not supported by this method\");return new o(this,{objectMode:\"nodebuffer\"!==this._outputType},e)}},t.exports=f},{\"../base64\":1,\"../external\":6,\"../nodejs/NodejsStreamOutputAdapter\":13,\"../support\":30,\"../utils\":32,\"./ConvertWorker\":24,\"./GenericWorker\":28}],30:[function(e,t,r){\"use strict\";if(r.base64=!0,r.array=!0,r.string=!0,r.arraybuffer=\"undefined\"!=typeof ArrayBuffer&&\"undefined\"!=typeof Uint8Array,r.nodebuffer=\"undefined\"!=typeof Buffer,r.uint8array=\"undefined\"!=typeof Uint8Array,\"undefined\"==typeof ArrayBuffer)r.blob=!1;else{var n=new ArrayBuffer(0);try{r.blob=0===new Blob([n],{type:\"application/zip\"}).size}catch(e){try{var i=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);i.append(n),r.blob=0===i.getBlob(\"application/zip\").size}catch(e){r.blob=!1}}}try{r.nodestream=!!e(\"readable-stream\").Readable}catch(e){r.nodestream=!1}},{\"readable-stream\":16}],31:[function(e,t,s){\"use strict\";for(var o=e(\"./utils\"),h=e(\"./support\"),r=e(\"./nodejsUtils\"),n=e(\"./stream/GenericWorker\"),u=new Array(256),i=0;i<256;i++)u[i]=252<=i?6:248<=i?5:240<=i?4:224<=i?3:192<=i?2:1;u[254]=u[254]=1;function a(){n.call(this,\"utf-8 decode\"),this.leftOver=null}function l(){n.call(this,\"utf-8 encode\")}s.utf8encode=function(e){return h.nodebuffer?r.newBufferFrom(e,\"utf-8\"):function(e){var t,r,n,i,s,a=e.length,o=0;for(i=0;i<a;i++)55296==(64512&(r=e.charCodeAt(i)))&&i+1<a&&56320==(64512&(n=e.charCodeAt(i+1)))&&(r=65536+(r-55296<<10)+(n-56320),i++),o+=r<128?1:r<2048?2:r<65536?3:4;for(t=h.uint8array?new Uint8Array(o):new Array(o),i=s=0;s<o;i++)55296==(64512&(r=e.charCodeAt(i)))&&i+1<a&&56320==(64512&(n=e.charCodeAt(i+1)))&&(r=65536+(r-55296<<10)+(n-56320),i++),r<128?t[s++]=r:(r<2048?t[s++]=192|r>>>6:(r<65536?t[s++]=224|r>>>12:(t[s++]=240|r>>>18,t[s++]=128|r>>>12&63),t[s++]=128|r>>>6&63),t[s++]=128|63&r);return t}(e)},s.utf8decode=function(e){return h.nodebuffer?o.transformTo(\"nodebuffer\",e).toString(\"utf-8\"):function(e){var t,r,n,i,s=e.length,a=new Array(2*s);for(t=r=0;t<s;)if((n=e[t++])<128)a[r++]=n;else if(4<(i=u[n]))a[r++]=65533,t+=i-1;else{for(n&=2===i?31:3===i?15:7;1<i&&t<s;)n=n<<6|63&e[t++],i--;1<i?a[r++]=65533:n<65536?a[r++]=n:(n-=65536,a[r++]=55296|n>>10&1023,a[r++]=56320|1023&n)}return a.length!==r&&(a.subarray?a=a.subarray(0,r):a.length=r),o.applyFromCharCode(a)}(e=o.transformTo(h.uint8array?\"uint8array\":\"array\",e))},o.inherits(a,n),a.prototype.processChunk=function(e){var t=o.transformTo(h.uint8array?\"uint8array\":\"array\",e.data);if(this.leftOver&&this.leftOver.length){if(h.uint8array){var r=t;(t=new Uint8Array(r.length+this.leftOver.length)).set(this.leftOver,0),t.set(r,this.leftOver.length)}else t=this.leftOver.concat(t);this.leftOver=null}var n=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0?t:0===r?t:r+u[e[r]]>t?r:t}(t),i=t;n!==t.length&&(h.uint8array?(i=t.subarray(0,n),this.leftOver=t.subarray(n,t.length)):(i=t.slice(0,n),this.leftOver=t.slice(n,t.length))),this.push({data:s.utf8decode(i),meta:e.meta})},a.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:s.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},s.Utf8DecodeWorker=a,o.inherits(l,n),l.prototype.processChunk=function(e){this.push({data:s.utf8encode(e.data),meta:e.meta})},s.Utf8EncodeWorker=l},{\"./nodejsUtils\":14,\"./stream/GenericWorker\":28,\"./support\":30,\"./utils\":32}],32:[function(e,t,a){\"use strict\";var o=e(\"./support\"),h=e(\"./base64\"),r=e(\"./nodejsUtils\"),u=e(\"./external\");function n(e){return e}function l(e,t){for(var r=0;r<e.length;++r)t[r]=255&e.charCodeAt(r);return t}e(\"setimmediate\"),a.newBlob=function(t,r){a.checkSupport(\"blob\");try{return new Blob([t],{type:r})}catch(e){try{var n=new(self.BlobBuilder||self.WebKitBlobBuilder||self.MozBlobBuilder||self.MSBlobBuilder);return n.append(t),n.getBlob(r)}catch(e){throw new Error(\"Bug : can't construct the Blob.\")}}};var i={stringifyByChunk:function(e,t,r){var n=[],i=0,s=e.length;if(s<=r)return String.fromCharCode.apply(null,e);for(;i<s;)\"array\"===t||\"nodebuffer\"===t?n.push(String.fromCharCode.apply(null,e.slice(i,Math.min(i+r,s)))):n.push(String.fromCharCode.apply(null,e.subarray(i,Math.min(i+r,s)))),i+=r;return n.join(\"\")},stringifyByChar:function(e){for(var t=\"\",r=0;r<e.length;r++)t+=String.fromCharCode(e[r]);return t},applyCanBeUsed:{uint8array:function(){try{return o.uint8array&&1===String.fromCharCode.apply(null,new Uint8Array(1)).length}catch(e){return!1}}(),nodebuffer:function(){try{return o.nodebuffer&&1===String.fromCharCode.apply(null,r.allocBuffer(1)).length}catch(e){return!1}}()}};function s(e){var t=65536,r=a.getTypeOf(e),n=!0;if(\"uint8array\"===r?n=i.applyCanBeUsed.uint8array:\"nodebuffer\"===r&&(n=i.applyCanBeUsed.nodebuffer),n)for(;1<t;)try{return i.stringifyByChunk(e,r,t)}catch(e){t=Math.floor(t/2)}return i.stringifyByChar(e)}function f(e,t){for(var r=0;r<e.length;r++)t[r]=e[r];return t}a.applyFromCharCode=s;var c={};c.string={string:n,array:function(e){return l(e,new Array(e.length))},arraybuffer:function(e){return c.string.uint8array(e).buffer},uint8array:function(e){return l(e,new Uint8Array(e.length))},nodebuffer:function(e){return l(e,r.allocBuffer(e.length))}},c.array={string:s,array:n,arraybuffer:function(e){return new Uint8Array(e).buffer},uint8array:function(e){return new Uint8Array(e)},nodebuffer:function(e){return r.newBufferFrom(e)}},c.arraybuffer={string:function(e){return s(new Uint8Array(e))},array:function(e){return f(new Uint8Array(e),new Array(e.byteLength))},arraybuffer:n,uint8array:function(e){return new Uint8Array(e)},nodebuffer:function(e){return r.newBufferFrom(new Uint8Array(e))}},c.uint8array={string:s,array:function(e){return f(e,new Array(e.length))},arraybuffer:function(e){return e.buffer},uint8array:n,nodebuffer:function(e){return r.newBufferFrom(e)}},c.nodebuffer={string:s,array:function(e){return f(e,new Array(e.length))},arraybuffer:function(e){return c.nodebuffer.uint8array(e).buffer},uint8array:function(e){return f(e,new Uint8Array(e.length))},nodebuffer:n},a.transformTo=function(e,t){if(t=t||\"\",!e)return t;a.checkSupport(e);var r=a.getTypeOf(t);return c[r][e](t)},a.resolve=function(e){for(var t=e.split(\"/\"),r=[],n=0;n<t.length;n++){var i=t[n];\".\"===i||\"\"===i&&0!==n&&n!==t.length-1||(\"..\"===i?r.pop():r.push(i))}return r.join(\"/\")},a.getTypeOf=function(e){return\"string\"==typeof e?\"string\":\"[object Array]\"===Object.prototype.toString.call(e)?\"array\":o.nodebuffer&&r.isBuffer(e)?\"nodebuffer\":o.uint8array&&e instanceof Uint8Array?\"uint8array\":o.arraybuffer&&e instanceof ArrayBuffer?\"arraybuffer\":void 0},a.checkSupport=function(e){if(!o[e.toLowerCase()])throw new Error(e+\" is not supported by this platform\")},a.MAX_VALUE_16BITS=65535,a.MAX_VALUE_32BITS=-1,a.pretty=function(e){var t,r,n=\"\";for(r=0;r<(e||\"\").length;r++)n+=\"\\\\x\"+((t=e.charCodeAt(r))<16?\"0\":\"\")+t.toString(16).toUpperCase();return n},a.delay=function(e,t,r){setImmediate(function(){e.apply(r||null,t||[])})},a.inherits=function(e,t){function r(){}r.prototype=t.prototype,e.prototype=new r},a.extend=function(){var e,t,r={};for(e=0;e<arguments.length;e++)for(t in arguments[e])Object.prototype.hasOwnProperty.call(arguments[e],t)&&void 0===r[t]&&(r[t]=arguments[e][t]);return r},a.prepareContent=function(r,e,n,i,s){return u.Promise.resolve(e).then(function(n){return o.blob&&(n instanceof Blob||-1!==[\"[object File]\",\"[object Blob]\"].indexOf(Object.prototype.toString.call(n)))&&\"undefined\"!=typeof FileReader?new u.Promise(function(t,r){var e=new FileReader;e.onload=function(e){t(e.target.result)},e.onerror=function(e){r(e.target.error)},e.readAsArrayBuffer(n)}):n}).then(function(e){var t=a.getTypeOf(e);return t?(\"arraybuffer\"===t?e=a.transformTo(\"uint8array\",e):\"string\"===t&&(s?e=h.decode(e):n&&!0!==i&&(e=function(e){return l(e,o.uint8array?new Uint8Array(e.length):new Array(e.length))}(e))),e):u.Promise.reject(new Error(\"Can't read the data of '\"+r+\"'. Is it in a supported JavaScript type (String, Blob, ArrayBuffer, etc) ?\"))})}},{\"./base64\":1,\"./external\":6,\"./nodejsUtils\":14,\"./support\":30,setimmediate:54}],33:[function(e,t,r){\"use strict\";var n=e(\"./reader/readerFor\"),i=e(\"./utils\"),s=e(\"./signature\"),a=e(\"./zipEntry\"),o=e(\"./support\");function h(e){this.files=[],this.loadOptions=e}h.prototype={checkSignature:function(e){if(!this.reader.readAndCheckSignature(e)){this.reader.index-=4;var t=this.reader.readString(4);throw new Error(\"Corrupted zip or bug: unexpected signature (\"+i.pretty(t)+\", expected \"+i.pretty(e)+\")\")}},isSignature:function(e,t){var r=this.reader.index;this.reader.setIndex(e);var n=this.reader.readString(4)===t;return this.reader.setIndex(r),n},readBlockEndOfCentral:function(){this.diskNumber=this.reader.readInt(2),this.diskWithCentralDirStart=this.reader.readInt(2),this.centralDirRecordsOnThisDisk=this.reader.readInt(2),this.centralDirRecords=this.reader.readInt(2),this.centralDirSize=this.reader.readInt(4),this.centralDirOffset=this.reader.readInt(4),this.zipCommentLength=this.reader.readInt(2);var e=this.reader.readData(this.zipCommentLength),t=o.uint8array?\"uint8array\":\"array\",r=i.transformTo(t,e);this.zipComment=this.loadOptions.decodeFileName(r)},readBlockZip64EndOfCentral:function(){this.zip64EndOfCentralSize=this.reader.readInt(8),this.reader.skip(4),this.diskNumber=this.reader.readInt(4),this.diskWithCentralDirStart=this.reader.readInt(4),this.centralDirRecordsOnThisDisk=this.reader.readInt(8),this.centralDirRecords=this.reader.readInt(8),this.centralDirSize=this.reader.readInt(8),this.centralDirOffset=this.reader.readInt(8),this.zip64ExtensibleData={};for(var e,t,r,n=this.zip64EndOfCentralSize-44;0<n;)e=this.reader.readInt(2),t=this.reader.readInt(4),r=this.reader.readData(t),this.zip64ExtensibleData[e]={id:e,length:t,value:r}},readBlockZip64EndOfCentralLocator:function(){if(this.diskWithZip64CentralDirStart=this.reader.readInt(4),this.relativeOffsetEndOfZip64CentralDir=this.reader.readInt(8),this.disksCount=this.reader.readInt(4),1<this.disksCount)throw new Error(\"Multi-volumes zip are not supported\")},readLocalFiles:function(){var e,t;for(e=0;e<this.files.length;e++)t=this.files[e],this.reader.setIndex(t.localHeaderOffset),this.checkSignature(s.LOCAL_FILE_HEADER),t.readLocalPart(this.reader),t.handleUTF8(),t.processAttributes()},readCentralDir:function(){var e;for(this.reader.setIndex(this.centralDirOffset);this.reader.readAndCheckSignature(s.CENTRAL_FILE_HEADER);)(e=new a({zip64:this.zip64},this.loadOptions)).readCentralPart(this.reader),this.files.push(e);if(this.centralDirRecords!==this.files.length&&0!==this.centralDirRecords&&0===this.files.length)throw new Error(\"Corrupted zip or bug: expected \"+this.centralDirRecords+\" records in central dir, got \"+this.files.length)},readEndOfCentral:function(){var e=this.reader.lastIndexOfSignature(s.CENTRAL_DIRECTORY_END);if(e<0)throw!this.isSignature(0,s.LOCAL_FILE_HEADER)?new Error(\"Can't find end of central directory : is this a zip file ? If it is, see https://stuk.github.io/jszip/documentation/howto/read_zip.html\"):new Error(\"Corrupted zip: can't find end of central directory\");this.reader.setIndex(e);var t=e;if(this.checkSignature(s.CENTRAL_DIRECTORY_END),this.readBlockEndOfCentral(),this.diskNumber===i.MAX_VALUE_16BITS||this.diskWithCentralDirStart===i.MAX_VALUE_16BITS||this.centralDirRecordsOnThisDisk===i.MAX_VALUE_16BITS||this.centralDirRecords===i.MAX_VALUE_16BITS||this.centralDirSize===i.MAX_VALUE_32BITS||this.centralDirOffset===i.MAX_VALUE_32BITS){if(this.zip64=!0,(e=this.reader.lastIndexOfSignature(s.ZIP64_CENTRAL_DIRECTORY_LOCATOR))<0)throw new Error(\"Corrupted zip: can't find the ZIP64 end of central directory locator\");if(this.reader.setIndex(e),this.checkSignature(s.ZIP64_CENTRAL_DIRECTORY_LOCATOR),this.readBlockZip64EndOfCentralLocator(),!this.isSignature(this.relativeOffsetEndOfZip64CentralDir,s.ZIP64_CENTRAL_DIRECTORY_END)&&(this.relativeOffsetEndOfZip64CentralDir=this.reader.lastIndexOfSignature(s.ZIP64_CENTRAL_DIRECTORY_END),this.relativeOffsetEndOfZip64CentralDir<0))throw new Error(\"Corrupted zip: can't find the ZIP64 end of central directory\");this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir),this.checkSignature(s.ZIP64_CENTRAL_DIRECTORY_END),this.readBlockZip64EndOfCentral()}var r=this.centralDirOffset+this.centralDirSize;this.zip64&&(r+=20,r+=12+this.zip64EndOfCentralSize);var n=t-r;if(0<n)this.isSignature(t,s.CENTRAL_FILE_HEADER)||(this.reader.zero=n);else if(n<0)throw new Error(\"Corrupted zip: missing \"+Math.abs(n)+\" bytes.\")},prepareReader:function(e){this.reader=n(e)},load:function(e){this.prepareReader(e),this.readEndOfCentral(),this.readCentralDir(),this.readLocalFiles()}},t.exports=h},{\"./reader/readerFor\":22,\"./signature\":23,\"./support\":30,\"./utils\":32,\"./zipEntry\":34}],34:[function(e,t,r){\"use strict\";var n=e(\"./reader/readerFor\"),s=e(\"./utils\"),i=e(\"./compressedObject\"),a=e(\"./crc32\"),o=e(\"./utf8\"),h=e(\"./compressions\"),u=e(\"./support\");function l(e,t){this.options=e,this.loadOptions=t}l.prototype={isEncrypted:function(){return 1==(1&this.bitFlag)},useUTF8:function(){return 2048==(2048&this.bitFlag)},readLocalPart:function(e){var t,r;if(e.skip(22),this.fileNameLength=e.readInt(2),r=e.readInt(2),this.fileName=e.readData(this.fileNameLength),e.skip(r),-1===this.compressedSize||-1===this.uncompressedSize)throw new Error(\"Bug or corrupted zip : didn't get enough information from the central directory (compressedSize === -1 || uncompressedSize === -1)\");if(null===(t=function(e){for(var t in h)if(Object.prototype.hasOwnProperty.call(h,t)&&h[t].magic===e)return h[t];return null}(this.compressionMethod)))throw new Error(\"Corrupted zip : compression \"+s.pretty(this.compressionMethod)+\" unknown (inner file : \"+s.transformTo(\"string\",this.fileName)+\")\");this.decompressed=new i(this.compressedSize,this.uncompressedSize,this.crc32,t,e.readData(this.compressedSize))},readCentralPart:function(e){this.versionMadeBy=e.readInt(2),e.skip(2),this.bitFlag=e.readInt(2),this.compressionMethod=e.readString(2),this.date=e.readDate(),this.crc32=e.readInt(4),this.compressedSize=e.readInt(4),this.uncompressedSize=e.readInt(4);var t=e.readInt(2);if(this.extraFieldsLength=e.readInt(2),this.fileCommentLength=e.readInt(2),this.diskNumberStart=e.readInt(2),this.internalFileAttributes=e.readInt(2),this.externalFileAttributes=e.readInt(4),this.localHeaderOffset=e.readInt(4),this.isEncrypted())throw new Error(\"Encrypted zip are not supported\");e.skip(t),this.readExtraFields(e),this.parseZIP64ExtraField(e),this.fileComment=e.readData(this.fileCommentLength)},processAttributes:function(){this.unixPermissions=null,this.dosPermissions=null;var e=this.versionMadeBy>>8;this.dir=!!(16&this.externalFileAttributes),0==e&&(this.dosPermissions=63&this.externalFileAttributes),3==e&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||\"/\"!==this.fileNameStr.slice(-1)||(this.dir=!0)},parseZIP64ExtraField:function(){if(this.extraFields[1]){var e=n(this.extraFields[1].value);this.uncompressedSize===s.MAX_VALUE_32BITS&&(this.uncompressedSize=e.readInt(8)),this.compressedSize===s.MAX_VALUE_32BITS&&(this.compressedSize=e.readInt(8)),this.localHeaderOffset===s.MAX_VALUE_32BITS&&(this.localHeaderOffset=e.readInt(8)),this.diskNumberStart===s.MAX_VALUE_32BITS&&(this.diskNumberStart=e.readInt(4))}},readExtraFields:function(e){var t,r,n,i=e.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});e.index+4<i;)t=e.readInt(2),r=e.readInt(2),n=e.readData(r),this.extraFields[t]={id:t,length:r,value:n};e.setIndex(i)},handleUTF8:function(){var e=u.uint8array?\"uint8array\":\"array\";if(this.useUTF8())this.fileNameStr=o.utf8decode(this.fileName),this.fileCommentStr=o.utf8decode(this.fileComment);else{var t=this.findExtraFieldUnicodePath();if(null!==t)this.fileNameStr=t;else{var r=s.transformTo(e,this.fileName);this.fileNameStr=this.loadOptions.decodeFileName(r)}var n=this.findExtraFieldUnicodeComment();if(null!==n)this.fileCommentStr=n;else{var i=s.transformTo(e,this.fileComment);this.fileCommentStr=this.loadOptions.decodeFileName(i)}}},findExtraFieldUnicodePath:function(){var e=this.extraFields[28789];if(e){var t=n(e.value);return 1!==t.readInt(1)?null:a(this.fileName)!==t.readInt(4)?null:o.utf8decode(t.readData(e.length-5))}return null},findExtraFieldUnicodeComment:function(){var e=this.extraFields[25461];if(e){var t=n(e.value);return 1!==t.readInt(1)?null:a(this.fileComment)!==t.readInt(4)?null:o.utf8decode(t.readData(e.length-5))}return null}},t.exports=l},{\"./compressedObject\":2,\"./compressions\":3,\"./crc32\":4,\"./reader/readerFor\":22,\"./support\":30,\"./utf8\":31,\"./utils\":32}],35:[function(e,t,r){\"use strict\";function n(e,t,r){this.name=e,this.dir=r.dir,this.date=r.date,this.comment=r.comment,this.unixPermissions=r.unixPermissions,this.dosPermissions=r.dosPermissions,this._data=t,this._dataBinary=r.binary,this.options={compression:r.compression,compressionOptions:r.compressionOptions}}var s=e(\"./stream/StreamHelper\"),i=e(\"./stream/DataWorker\"),a=e(\"./utf8\"),o=e(\"./compressedObject\"),h=e(\"./stream/GenericWorker\");n.prototype={internalStream:function(e){var t=null,r=\"string\";try{if(!e)throw new Error(\"No output type specified.\");var n=\"string\"===(r=e.toLowerCase())||\"text\"===r;\"binarystring\"!==r&&\"text\"!==r||(r=\"string\"),t=this._decompressWorker();var i=!this._dataBinary;i&&!n&&(t=t.pipe(new a.Utf8EncodeWorker)),!i&&n&&(t=t.pipe(new a.Utf8DecodeWorker))}catch(e){(t=new h(\"error\")).error(e)}return new s(t,r,\"\")},async:function(e,t){return this.internalStream(e).accumulate(t)},nodeStream:function(e,t){return this.internalStream(e||\"nodebuffer\").toNodejsStream(t)},_compressWorker:function(e,t){if(this._data instanceof o&&this._data.compression.magic===e.magic)return this._data.getCompressedWorker();var r=this._decompressWorker();return this._dataBinary||(r=r.pipe(new a.Utf8EncodeWorker)),o.createWorkerFrom(r,e,t)},_decompressWorker:function(){return this._data instanceof o?this._data.getContentWorker():this._data instanceof h?this._data:new i(this._data)}};for(var u=[\"asText\",\"asBinary\",\"asNodeBuffer\",\"asUint8Array\",\"asArrayBuffer\"],l=function(){throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\")},f=0;f<u.length;f++)n.prototype[u[f]]=l;t.exports=n},{\"./compressedObject\":2,\"./stream/DataWorker\":27,\"./stream/GenericWorker\":28,\"./stream/StreamHelper\":29,\"./utf8\":31}],36:[function(e,l,t){(function(t){\"use strict\";var r,n,e=t.MutationObserver||t.WebKitMutationObserver;if(e){var i=0,s=new e(u),a=t.document.createTextNode(\"\");s.observe(a,{characterData:!0}),r=function(){a.data=i=++i%2}}else if(t.setImmediate||void 0===t.MessageChannel)r=\"document\"in t&&\"onreadystatechange\"in t.document.createElement(\"script\")?function(){var e=t.document.createElement(\"script\");e.onreadystatechange=function(){u(),e.onreadystatechange=null,e.parentNode.removeChild(e),e=null},t.document.documentElement.appendChild(e)}:function(){setTimeout(u,0)};else{var o=new t.MessageChannel;o.port1.onmessage=u,r=function(){o.port2.postMessage(0)}}var h=[];function u(){var e,t;n=!0;for(var r=h.length;r;){for(t=h,h=[],e=-1;++e<r;)t[e]();r=h.length}n=!1}l.exports=function(e){1!==h.push(e)||n||r()}}).call(this,\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{}],37:[function(e,t,r){\"use strict\";var i=e(\"immediate\");function u(){}var l={},s=[\"REJECTED\"],a=[\"FULFILLED\"],n=[\"PENDING\"];function o(e){if(\"function\"!=typeof e)throw new TypeError(\"resolver must be a function\");this.state=n,this.queue=[],this.outcome=void 0,e!==u&&d(this,e)}function h(e,t,r){this.promise=e,\"function\"==typeof t&&(this.onFulfilled=t,this.callFulfilled=this.otherCallFulfilled),\"function\"==typeof r&&(this.onRejected=r,this.callRejected=this.otherCallRejected)}function f(t,r,n){i(function(){var e;try{e=r(n)}catch(e){return l.reject(t,e)}e===t?l.reject(t,new TypeError(\"Cannot resolve promise with itself\")):l.resolve(t,e)})}function c(e){var t=e&&e.then;if(e&&(\"object\"==typeof e||\"function\"==typeof e)&&\"function\"==typeof t)return function(){t.apply(e,arguments)}}function d(t,e){var r=!1;function n(e){r||(r=!0,l.reject(t,e))}function i(e){r||(r=!0,l.resolve(t,e))}var s=p(function(){e(i,n)});\"error\"===s.status&&n(s.value)}function p(e,t){var r={};try{r.value=e(t),r.status=\"success\"}catch(e){r.status=\"error\",r.value=e}return r}(t.exports=o).prototype.finally=function(t){if(\"function\"!=typeof t)return this;var r=this.constructor;return this.then(function(e){return r.resolve(t()).then(function(){return e})},function(e){return r.resolve(t()).then(function(){throw e})})},o.prototype.catch=function(e){return this.then(null,e)},o.prototype.then=function(e,t){if(\"function\"!=typeof e&&this.state===a||\"function\"!=typeof t&&this.state===s)return this;var r=new this.constructor(u);this.state!==n?f(r,this.state===a?e:t,this.outcome):this.queue.push(new h(r,e,t));return r},h.prototype.callFulfilled=function(e){l.resolve(this.promise,e)},h.prototype.otherCallFulfilled=function(e){f(this.promise,this.onFulfilled,e)},h.prototype.callRejected=function(e){l.reject(this.promise,e)},h.prototype.otherCallRejected=function(e){f(this.promise,this.onRejected,e)},l.resolve=function(e,t){var r=p(c,t);if(\"error\"===r.status)return l.reject(e,r.value);var n=r.value;if(n)d(e,n);else{e.state=a,e.outcome=t;for(var i=-1,s=e.queue.length;++i<s;)e.queue[i].callFulfilled(t)}return e},l.reject=function(e,t){e.state=s,e.outcome=t;for(var r=-1,n=e.queue.length;++r<n;)e.queue[r].callRejected(t);return e},o.resolve=function(e){if(e instanceof this)return e;return l.resolve(new this(u),e)},o.reject=function(e){var t=new this(u);return l.reject(t,e)},o.all=function(e){var r=this;if(\"[object Array]\"!==Object.prototype.toString.call(e))return this.reject(new TypeError(\"must be an array\"));var n=e.length,i=!1;if(!n)return this.resolve([]);var s=new Array(n),a=0,t=-1,o=new this(u);for(;++t<n;)h(e[t],t);return o;function h(e,t){r.resolve(e).then(function(e){s[t]=e,++a!==n||i||(i=!0,l.resolve(o,s))},function(e){i||(i=!0,l.reject(o,e))})}},o.race=function(e){var t=this;if(\"[object Array]\"!==Object.prototype.toString.call(e))return this.reject(new TypeError(\"must be an array\"));var r=e.length,n=!1;if(!r)return this.resolve([]);var i=-1,s=new this(u);for(;++i<r;)a=e[i],t.resolve(a).then(function(e){n||(n=!0,l.resolve(s,e))},function(e){n||(n=!0,l.reject(s,e))});var a;return s}},{immediate:36}],38:[function(e,t,r){\"use strict\";var n={};(0,e(\"./lib/utils/common\").assign)(n,e(\"./lib/deflate\"),e(\"./lib/inflate\"),e(\"./lib/zlib/constants\")),t.exports=n},{\"./lib/deflate\":39,\"./lib/inflate\":40,\"./lib/utils/common\":41,\"./lib/zlib/constants\":44}],39:[function(e,t,r){\"use strict\";var a=e(\"./zlib/deflate\"),o=e(\"./utils/common\"),h=e(\"./utils/strings\"),i=e(\"./zlib/messages\"),s=e(\"./zlib/zstream\"),u=Object.prototype.toString,l=0,f=-1,c=0,d=8;function p(e){if(!(this instanceof p))return new p(e);this.options=o.assign({level:f,method:d,chunkSize:16384,windowBits:15,memLevel:8,strategy:c,to:\"\"},e||{});var t=this.options;t.raw&&0<t.windowBits?t.windowBits=-t.windowBits:t.gzip&&0<t.windowBits&&t.windowBits<16&&(t.windowBits+=16),this.err=0,this.msg=\"\",this.ended=!1,this.chunks=[],this.strm=new s,this.strm.avail_out=0;var r=a.deflateInit2(this.strm,t.level,t.method,t.windowBits,t.memLevel,t.strategy);if(r!==l)throw new Error(i[r]);if(t.header&&a.deflateSetHeader(this.strm,t.header),t.dictionary){var n;if(n=\"string\"==typeof t.dictionary?h.string2buf(t.dictionary):\"[object ArrayBuffer]\"===u.call(t.dictionary)?new Uint8Array(t.dictionary):t.dictionary,(r=a.deflateSetDictionary(this.strm,n))!==l)throw new Error(i[r]);this._dict_set=!0}}function n(e,t){var r=new p(t);if(r.push(e,!0),r.err)throw r.msg||i[r.err];return r.result}p.prototype.push=function(e,t){var r,n,i=this.strm,s=this.options.chunkSize;if(this.ended)return!1;n=t===~~t?t:!0===t?4:0,\"string\"==typeof e?i.input=h.string2buf(e):\"[object ArrayBuffer]\"===u.call(e)?i.input=new Uint8Array(e):i.input=e,i.next_in=0,i.avail_in=i.input.length;do{if(0===i.avail_out&&(i.output=new o.Buf8(s),i.next_out=0,i.avail_out=s),1!==(r=a.deflate(i,n))&&r!==l)return this.onEnd(r),!(this.ended=!0);0!==i.avail_out&&(0!==i.avail_in||4!==n&&2!==n)||(\"string\"===this.options.to?this.onData(h.buf2binstring(o.shrinkBuf(i.output,i.next_out))):this.onData(o.shrinkBuf(i.output,i.next_out)))}while((0<i.avail_in||0===i.avail_out)&&1!==r);return 4===n?(r=a.deflateEnd(this.strm),this.onEnd(r),this.ended=!0,r===l):2!==n||(this.onEnd(l),!(i.avail_out=0))},p.prototype.onData=function(e){this.chunks.push(e)},p.prototype.onEnd=function(e){e===l&&(\"string\"===this.options.to?this.result=this.chunks.join(\"\"):this.result=o.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg},r.Deflate=p,r.deflate=n,r.deflateRaw=function(e,t){return(t=t||{}).raw=!0,n(e,t)},r.gzip=function(e,t){return(t=t||{}).gzip=!0,n(e,t)}},{\"./utils/common\":41,\"./utils/strings\":42,\"./zlib/deflate\":46,\"./zlib/messages\":51,\"./zlib/zstream\":53}],40:[function(e,t,r){\"use strict\";var c=e(\"./zlib/inflate\"),d=e(\"./utils/common\"),p=e(\"./utils/strings\"),m=e(\"./zlib/constants\"),n=e(\"./zlib/messages\"),i=e(\"./zlib/zstream\"),s=e(\"./zlib/gzheader\"),_=Object.prototype.toString;function a(e){if(!(this instanceof a))return new a(e);this.options=d.assign({chunkSize:16384,windowBits:0,to:\"\"},e||{});var t=this.options;t.raw&&0<=t.windowBits&&t.windowBits<16&&(t.windowBits=-t.windowBits,0===t.windowBits&&(t.windowBits=-15)),!(0<=t.windowBits&&t.windowBits<16)||e&&e.windowBits||(t.windowBits+=32),15<t.windowBits&&t.windowBits<48&&0==(15&t.windowBits)&&(t.windowBits|=15),this.err=0,this.msg=\"\",this.ended=!1,this.chunks=[],this.strm=new i,this.strm.avail_out=0;var r=c.inflateInit2(this.strm,t.windowBits);if(r!==m.Z_OK)throw new Error(n[r]);this.header=new s,c.inflateGetHeader(this.strm,this.header)}function o(e,t){var r=new a(t);if(r.push(e,!0),r.err)throw r.msg||n[r.err];return r.result}a.prototype.push=function(e,t){var r,n,i,s,a,o,h=this.strm,u=this.options.chunkSize,l=this.options.dictionary,f=!1;if(this.ended)return!1;n=t===~~t?t:!0===t?m.Z_FINISH:m.Z_NO_FLUSH,\"string\"==typeof e?h.input=p.binstring2buf(e):\"[object ArrayBuffer]\"===_.call(e)?h.input=new Uint8Array(e):h.input=e,h.next_in=0,h.avail_in=h.input.length;do{if(0===h.avail_out&&(h.output=new d.Buf8(u),h.next_out=0,h.avail_out=u),(r=c.inflate(h,m.Z_NO_FLUSH))===m.Z_NEED_DICT&&l&&(o=\"string\"==typeof l?p.string2buf(l):\"[object ArrayBuffer]\"===_.call(l)?new Uint8Array(l):l,r=c.inflateSetDictionary(this.strm,o)),r===m.Z_BUF_ERROR&&!0===f&&(r=m.Z_OK,f=!1),r!==m.Z_STREAM_END&&r!==m.Z_OK)return this.onEnd(r),!(this.ended=!0);h.next_out&&(0!==h.avail_out&&r!==m.Z_STREAM_END&&(0!==h.avail_in||n!==m.Z_FINISH&&n!==m.Z_SYNC_FLUSH)||(\"string\"===this.options.to?(i=p.utf8border(h.output,h.next_out),s=h.next_out-i,a=p.buf2string(h.output,i),h.next_out=s,h.avail_out=u-s,s&&d.arraySet(h.output,h.output,i,s,0),this.onData(a)):this.onData(d.shrinkBuf(h.output,h.next_out)))),0===h.avail_in&&0===h.avail_out&&(f=!0)}while((0<h.avail_in||0===h.avail_out)&&r!==m.Z_STREAM_END);return r===m.Z_STREAM_END&&(n=m.Z_FINISH),n===m.Z_FINISH?(r=c.inflateEnd(this.strm),this.onEnd(r),this.ended=!0,r===m.Z_OK):n!==m.Z_SYNC_FLUSH||(this.onEnd(m.Z_OK),!(h.avail_out=0))},a.prototype.onData=function(e){this.chunks.push(e)},a.prototype.onEnd=function(e){e===m.Z_OK&&(\"string\"===this.options.to?this.result=this.chunks.join(\"\"):this.result=d.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg},r.Inflate=a,r.inflate=o,r.inflateRaw=function(e,t){return(t=t||{}).raw=!0,o(e,t)},r.ungzip=o},{\"./utils/common\":41,\"./utils/strings\":42,\"./zlib/constants\":44,\"./zlib/gzheader\":47,\"./zlib/inflate\":49,\"./zlib/messages\":51,\"./zlib/zstream\":53}],41:[function(e,t,r){\"use strict\";var n=\"undefined\"!=typeof Uint8Array&&\"undefined\"!=typeof Uint16Array&&\"undefined\"!=typeof Int32Array;r.assign=function(e){for(var t=Array.prototype.slice.call(arguments,1);t.length;){var r=t.shift();if(r){if(\"object\"!=typeof r)throw new TypeError(r+\"must be non-object\");for(var n in r)r.hasOwnProperty(n)&&(e[n]=r[n])}}return e},r.shrinkBuf=function(e,t){return e.length===t?e:e.subarray?e.subarray(0,t):(e.length=t,e)};var i={arraySet:function(e,t,r,n,i){if(t.subarray&&e.subarray)e.set(t.subarray(r,r+n),i);else for(var s=0;s<n;s++)e[i+s]=t[r+s]},flattenChunks:function(e){var t,r,n,i,s,a;for(t=n=0,r=e.length;t<r;t++)n+=e[t].length;for(a=new Uint8Array(n),t=i=0,r=e.length;t<r;t++)s=e[t],a.set(s,i),i+=s.length;return a}},s={arraySet:function(e,t,r,n,i){for(var s=0;s<n;s++)e[i+s]=t[r+s]},flattenChunks:function(e){return[].concat.apply([],e)}};r.setTyped=function(e){e?(r.Buf8=Uint8Array,r.Buf16=Uint16Array,r.Buf32=Int32Array,r.assign(r,i)):(r.Buf8=Array,r.Buf16=Array,r.Buf32=Array,r.assign(r,s))},r.setTyped(n)},{}],42:[function(e,t,r){\"use strict\";var h=e(\"./common\"),i=!0,s=!0;try{String.fromCharCode.apply(null,[0])}catch(e){i=!1}try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(e){s=!1}for(var u=new h.Buf8(256),n=0;n<256;n++)u[n]=252<=n?6:248<=n?5:240<=n?4:224<=n?3:192<=n?2:1;function l(e,t){if(t<65537&&(e.subarray&&s||!e.subarray&&i))return String.fromCharCode.apply(null,h.shrinkBuf(e,t));for(var r=\"\",n=0;n<t;n++)r+=String.fromCharCode(e[n]);return r}u[254]=u[254]=1,r.string2buf=function(e){var t,r,n,i,s,a=e.length,o=0;for(i=0;i<a;i++)55296==(64512&(r=e.charCodeAt(i)))&&i+1<a&&56320==(64512&(n=e.charCodeAt(i+1)))&&(r=65536+(r-55296<<10)+(n-56320),i++),o+=r<128?1:r<2048?2:r<65536?3:4;for(t=new h.Buf8(o),i=s=0;s<o;i++)55296==(64512&(r=e.charCodeAt(i)))&&i+1<a&&56320==(64512&(n=e.charCodeAt(i+1)))&&(r=65536+(r-55296<<10)+(n-56320),i++),r<128?t[s++]=r:(r<2048?t[s++]=192|r>>>6:(r<65536?t[s++]=224|r>>>12:(t[s++]=240|r>>>18,t[s++]=128|r>>>12&63),t[s++]=128|r>>>6&63),t[s++]=128|63&r);return t},r.buf2binstring=function(e){return l(e,e.length)},r.binstring2buf=function(e){for(var t=new h.Buf8(e.length),r=0,n=t.length;r<n;r++)t[r]=e.charCodeAt(r);return t},r.buf2string=function(e,t){var r,n,i,s,a=t||e.length,o=new Array(2*a);for(r=n=0;r<a;)if((i=e[r++])<128)o[n++]=i;else if(4<(s=u[i]))o[n++]=65533,r+=s-1;else{for(i&=2===s?31:3===s?15:7;1<s&&r<a;)i=i<<6|63&e[r++],s--;1<s?o[n++]=65533:i<65536?o[n++]=i:(i-=65536,o[n++]=55296|i>>10&1023,o[n++]=56320|1023&i)}return l(o,n)},r.utf8border=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;0<=r&&128==(192&e[r]);)r--;return r<0?t:0===r?t:r+u[e[r]]>t?r:t}},{\"./common\":41}],43:[function(e,t,r){\"use strict\";t.exports=function(e,t,r,n){for(var i=65535&e|0,s=e>>>16&65535|0,a=0;0!==r;){for(r-=a=2e3<r?2e3:r;s=s+(i=i+t[n++]|0)|0,--a;);i%=65521,s%=65521}return i|s<<16|0}},{}],44:[function(e,t,r){\"use strict\";t.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},{}],45:[function(e,t,r){\"use strict\";var o=function(){for(var e,t=[],r=0;r<256;r++){e=r;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t,r,n){var i=o,s=n+r;e^=-1;for(var a=n;a<s;a++)e=e>>>8^i[255&(e^t[a])];return-1^e}},{}],46:[function(e,t,r){\"use strict\";var h,c=e(\"../utils/common\"),u=e(\"./trees\"),d=e(\"./adler32\"),p=e(\"./crc32\"),n=e(\"./messages\"),l=0,f=4,m=0,_=-2,g=-1,b=4,i=2,v=8,y=9,s=286,a=30,o=19,w=2*s+1,k=15,x=3,S=258,z=S+x+1,C=42,E=113,A=1,I=2,O=3,B=4;function R(e,t){return e.msg=n[t],t}function T(e){return(e<<1)-(4<e?9:0)}function D(e){for(var t=e.length;0<=--t;)e[t]=0}function F(e){var t=e.state,r=t.pending;r>e.avail_out&&(r=e.avail_out),0!==r&&(c.arraySet(e.output,t.pending_buf,t.pending_out,r,e.next_out),e.next_out+=r,t.pending_out+=r,e.total_out+=r,e.avail_out-=r,t.pending-=r,0===t.pending&&(t.pending_out=0))}function N(e,t){u._tr_flush_block(e,0<=e.block_start?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,F(e.strm)}function U(e,t){e.pending_buf[e.pending++]=t}function P(e,t){e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t}function L(e,t){var r,n,i=e.max_chain_length,s=e.strstart,a=e.prev_length,o=e.nice_match,h=e.strstart>e.w_size-z?e.strstart-(e.w_size-z):0,u=e.window,l=e.w_mask,f=e.prev,c=e.strstart+S,d=u[s+a-1],p=u[s+a];e.prev_length>=e.good_match&&(i>>=2),o>e.lookahead&&(o=e.lookahead);do{if(u[(r=t)+a]===p&&u[r+a-1]===d&&u[r]===u[s]&&u[++r]===u[s+1]){s+=2,r++;do{}while(u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&u[++s]===u[++r]&&s<c);if(n=S-(c-s),s=c-S,a<n){if(e.match_start=t,o<=(a=n))break;d=u[s+a-1],p=u[s+a]}}}while((t=f[t&l])>h&&0!=--i);return a<=e.lookahead?a:e.lookahead}function j(e){var t,r,n,i,s,a,o,h,u,l,f=e.w_size;do{if(i=e.window_size-e.lookahead-e.strstart,e.strstart>=f+(f-z)){for(c.arraySet(e.window,e.window,f,f,0),e.match_start-=f,e.strstart-=f,e.block_start-=f,t=r=e.hash_size;n=e.head[--t],e.head[t]=f<=n?n-f:0,--r;);for(t=r=f;n=e.prev[--t],e.prev[t]=f<=n?n-f:0,--r;);i+=f}if(0===e.strm.avail_in)break;if(a=e.strm,o=e.window,h=e.strstart+e.lookahead,u=i,l=void 0,l=a.avail_in,u<l&&(l=u),r=0===l?0:(a.avail_in-=l,c.arraySet(o,a.input,a.next_in,l,h),1===a.state.wrap?a.adler=d(a.adler,o,l,h):2===a.state.wrap&&(a.adler=p(a.adler,o,l,h)),a.next_in+=l,a.total_in+=l,l),e.lookahead+=r,e.lookahead+e.insert>=x)for(s=e.strstart-e.insert,e.ins_h=e.window[s],e.ins_h=(e.ins_h<<e.hash_shift^e.window[s+1])&e.hash_mask;e.insert&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[s+x-1])&e.hash_mask,e.prev[s&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=s,s++,e.insert--,!(e.lookahead+e.insert<x)););}while(e.lookahead<z&&0!==e.strm.avail_in)}function Z(e,t){for(var r,n;;){if(e.lookahead<z){if(j(e),e.lookahead<z&&t===l)return A;if(0===e.lookahead)break}if(r=0,e.lookahead>=x&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+x-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),0!==r&&e.strstart-r<=e.w_size-z&&(e.match_length=L(e,r)),e.match_length>=x)if(n=u._tr_tally(e,e.strstart-e.match_start,e.match_length-x),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=x){for(e.match_length--;e.strstart++,e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+x-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart,0!=--e.match_length;);e.strstart++}else e.strstart+=e.match_length,e.match_length=0,e.ins_h=e.window[e.strstart],e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+1])&e.hash_mask;else n=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++;if(n&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=e.strstart<x-1?e.strstart:x-1,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}function W(e,t){for(var r,n,i;;){if(e.lookahead<z){if(j(e),e.lookahead<z&&t===l)return A;if(0===e.lookahead)break}if(r=0,e.lookahead>=x&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+x-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),e.prev_length=e.match_length,e.prev_match=e.match_start,e.match_length=x-1,0!==r&&e.prev_length<e.max_lazy_match&&e.strstart-r<=e.w_size-z&&(e.match_length=L(e,r),e.match_length<=5&&(1===e.strategy||e.match_length===x&&4096<e.strstart-e.match_start)&&(e.match_length=x-1)),e.prev_length>=x&&e.match_length<=e.prev_length){for(i=e.strstart+e.lookahead-x,n=u._tr_tally(e,e.strstart-1-e.prev_match,e.prev_length-x),e.lookahead-=e.prev_length-1,e.prev_length-=2;++e.strstart<=i&&(e.ins_h=(e.ins_h<<e.hash_shift^e.window[e.strstart+x-1])&e.hash_mask,r=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),0!=--e.prev_length;);if(e.match_available=0,e.match_length=x-1,e.strstart++,n&&(N(e,!1),0===e.strm.avail_out))return A}else if(e.match_available){if((n=u._tr_tally(e,0,e.window[e.strstart-1]))&&N(e,!1),e.strstart++,e.lookahead--,0===e.strm.avail_out)return A}else e.match_available=1,e.strstart++,e.lookahead--}return e.match_available&&(n=u._tr_tally(e,0,e.window[e.strstart-1]),e.match_available=0),e.insert=e.strstart<x-1?e.strstart:x-1,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}function M(e,t,r,n,i){this.good_length=e,this.max_lazy=t,this.nice_length=r,this.max_chain=n,this.func=i}function H(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=v,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new c.Buf16(2*w),this.dyn_dtree=new c.Buf16(2*(2*a+1)),this.bl_tree=new c.Buf16(2*(2*o+1)),D(this.dyn_ltree),D(this.dyn_dtree),D(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new c.Buf16(k+1),this.heap=new c.Buf16(2*s+1),D(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new c.Buf16(2*s+1),D(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}function G(e){var t;return e&&e.state?(e.total_in=e.total_out=0,e.data_type=i,(t=e.state).pending=0,t.pending_out=0,t.wrap<0&&(t.wrap=-t.wrap),t.status=t.wrap?C:E,e.adler=2===t.wrap?0:1,t.last_flush=l,u._tr_init(t),m):R(e,_)}function K(e){var t=G(e);return t===m&&function(e){e.window_size=2*e.w_size,D(e.head),e.max_lazy_match=h[e.level].max_lazy,e.good_match=h[e.level].good_length,e.nice_match=h[e.level].nice_length,e.max_chain_length=h[e.level].max_chain,e.strstart=0,e.block_start=0,e.lookahead=0,e.insert=0,e.match_length=e.prev_length=x-1,e.match_available=0,e.ins_h=0}(e.state),t}function Y(e,t,r,n,i,s){if(!e)return _;var a=1;if(t===g&&(t=6),n<0?(a=0,n=-n):15<n&&(a=2,n-=16),i<1||y<i||r!==v||n<8||15<n||t<0||9<t||s<0||b<s)return R(e,_);8===n&&(n=9);var o=new H;return(e.state=o).strm=e,o.wrap=a,o.gzhead=null,o.w_bits=n,o.w_size=1<<o.w_bits,o.w_mask=o.w_size-1,o.hash_bits=i+7,o.hash_size=1<<o.hash_bits,o.hash_mask=o.hash_size-1,o.hash_shift=~~((o.hash_bits+x-1)/x),o.window=new c.Buf8(2*o.w_size),o.head=new c.Buf16(o.hash_size),o.prev=new c.Buf16(o.w_size),o.lit_bufsize=1<<i+6,o.pending_buf_size=4*o.lit_bufsize,o.pending_buf=new c.Buf8(o.pending_buf_size),o.d_buf=1*o.lit_bufsize,o.l_buf=3*o.lit_bufsize,o.level=t,o.strategy=s,o.method=r,K(e)}h=[new M(0,0,0,0,function(e,t){var r=65535;for(r>e.pending_buf_size-5&&(r=e.pending_buf_size-5);;){if(e.lookahead<=1){if(j(e),0===e.lookahead&&t===l)return A;if(0===e.lookahead)break}e.strstart+=e.lookahead,e.lookahead=0;var n=e.block_start+r;if((0===e.strstart||e.strstart>=n)&&(e.lookahead=e.strstart-n,e.strstart=n,N(e,!1),0===e.strm.avail_out))return A;if(e.strstart-e.block_start>=e.w_size-z&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):(e.strstart>e.block_start&&(N(e,!1),e.strm.avail_out),A)}),new M(4,4,8,4,Z),new M(4,5,16,8,Z),new M(4,6,32,32,Z),new M(4,4,16,16,W),new M(8,16,32,32,W),new M(8,16,128,128,W),new M(8,32,128,256,W),new M(32,128,258,1024,W),new M(32,258,258,4096,W)],r.deflateInit=function(e,t){return Y(e,t,v,15,8,0)},r.deflateInit2=Y,r.deflateReset=K,r.deflateResetKeep=G,r.deflateSetHeader=function(e,t){return e&&e.state?2!==e.state.wrap?_:(e.state.gzhead=t,m):_},r.deflate=function(e,t){var r,n,i,s;if(!e||!e.state||5<t||t<0)return e?R(e,_):_;if(n=e.state,!e.output||!e.input&&0!==e.avail_in||666===n.status&&t!==f)return R(e,0===e.avail_out?-5:_);if(n.strm=e,r=n.last_flush,n.last_flush=t,n.status===C)if(2===n.wrap)e.adler=0,U(n,31),U(n,139),U(n,8),n.gzhead?(U(n,(n.gzhead.text?1:0)+(n.gzhead.hcrc?2:0)+(n.gzhead.extra?4:0)+(n.gzhead.name?8:0)+(n.gzhead.comment?16:0)),U(n,255&n.gzhead.time),U(n,n.gzhead.time>>8&255),U(n,n.gzhead.time>>16&255),U(n,n.gzhead.time>>24&255),U(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),U(n,255&n.gzhead.os),n.gzhead.extra&&n.gzhead.extra.length&&(U(n,255&n.gzhead.extra.length),U(n,n.gzhead.extra.length>>8&255)),n.gzhead.hcrc&&(e.adler=p(e.adler,n.pending_buf,n.pending,0)),n.gzindex=0,n.status=69):(U(n,0),U(n,0),U(n,0),U(n,0),U(n,0),U(n,9===n.level?2:2<=n.strategy||n.level<2?4:0),U(n,3),n.status=E);else{var a=v+(n.w_bits-8<<4)<<8;a|=(2<=n.strategy||n.level<2?0:n.level<6?1:6===n.level?2:3)<<6,0!==n.strstart&&(a|=32),a+=31-a%31,n.status=E,P(n,a),0!==n.strstart&&(P(n,e.adler>>>16),P(n,65535&e.adler)),e.adler=1}if(69===n.status)if(n.gzhead.extra){for(i=n.pending;n.gzindex<(65535&n.gzhead.extra.length)&&(n.pending!==n.pending_buf_size||(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending!==n.pending_buf_size));)U(n,255&n.gzhead.extra[n.gzindex]),n.gzindex++;n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),n.gzindex===n.gzhead.extra.length&&(n.gzindex=0,n.status=73)}else n.status=73;if(73===n.status)if(n.gzhead.name){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending===n.pending_buf_size)){s=1;break}s=n.gzindex<n.gzhead.name.length?255&n.gzhead.name.charCodeAt(n.gzindex++):0,U(n,s)}while(0!==s);n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),0===s&&(n.gzindex=0,n.status=91)}else n.status=91;if(91===n.status)if(n.gzhead.comment){i=n.pending;do{if(n.pending===n.pending_buf_size&&(n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),F(e),i=n.pending,n.pending===n.pending_buf_size)){s=1;break}s=n.gzindex<n.gzhead.comment.length?255&n.gzhead.comment.charCodeAt(n.gzindex++):0,U(n,s)}while(0!==s);n.gzhead.hcrc&&n.pending>i&&(e.adler=p(e.adler,n.pending_buf,n.pending-i,i)),0===s&&(n.status=103)}else n.status=103;if(103===n.status&&(n.gzhead.hcrc?(n.pending+2>n.pending_buf_size&&F(e),n.pending+2<=n.pending_buf_size&&(U(n,255&e.adler),U(n,e.adler>>8&255),e.adler=0,n.status=E)):n.status=E),0!==n.pending){if(F(e),0===e.avail_out)return n.last_flush=-1,m}else if(0===e.avail_in&&T(t)<=T(r)&&t!==f)return R(e,-5);if(666===n.status&&0!==e.avail_in)return R(e,-5);if(0!==e.avail_in||0!==n.lookahead||t!==l&&666!==n.status){var o=2===n.strategy?function(e,t){for(var r;;){if(0===e.lookahead&&(j(e),0===e.lookahead)){if(t===l)return A;break}if(e.match_length=0,r=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,r&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}(n,t):3===n.strategy?function(e,t){for(var r,n,i,s,a=e.window;;){if(e.lookahead<=S){if(j(e),e.lookahead<=S&&t===l)return A;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=x&&0<e.strstart&&(n=a[i=e.strstart-1])===a[++i]&&n===a[++i]&&n===a[++i]){s=e.strstart+S;do{}while(n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&n===a[++i]&&i<s);e.match_length=S-(s-i),e.match_length>e.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=x?(r=u._tr_tally(e,1,e.match_length-x),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(r=u._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),r&&(N(e,!1),0===e.strm.avail_out))return A}return e.insert=0,t===f?(N(e,!0),0===e.strm.avail_out?O:B):e.last_lit&&(N(e,!1),0===e.strm.avail_out)?A:I}(n,t):h[n.level].func(n,t);if(o!==O&&o!==B||(n.status=666),o===A||o===O)return 0===e.avail_out&&(n.last_flush=-1),m;if(o===I&&(1===t?u._tr_align(n):5!==t&&(u._tr_stored_block(n,0,0,!1),3===t&&(D(n.head),0===n.lookahead&&(n.strstart=0,n.block_start=0,n.insert=0))),F(e),0===e.avail_out))return n.last_flush=-1,m}return t!==f?m:n.wrap<=0?1:(2===n.wrap?(U(n,255&e.adler),U(n,e.adler>>8&255),U(n,e.adler>>16&255),U(n,e.adler>>24&255),U(n,255&e.total_in),U(n,e.total_in>>8&255),U(n,e.total_in>>16&255),U(n,e.total_in>>24&255)):(P(n,e.adler>>>16),P(n,65535&e.adler)),F(e),0<n.wrap&&(n.wrap=-n.wrap),0!==n.pending?m:1)},r.deflateEnd=function(e){var t;return e&&e.state?(t=e.state.status)!==C&&69!==t&&73!==t&&91!==t&&103!==t&&t!==E&&666!==t?R(e,_):(e.state=null,t===E?R(e,-3):m):_},r.deflateSetDictionary=function(e,t){var r,n,i,s,a,o,h,u,l=t.length;if(!e||!e.state)return _;if(2===(s=(r=e.state).wrap)||1===s&&r.status!==C||r.lookahead)return _;for(1===s&&(e.adler=d(e.adler,t,l,0)),r.wrap=0,l>=r.w_size&&(0===s&&(D(r.head),r.strstart=0,r.block_start=0,r.insert=0),u=new c.Buf8(r.w_size),c.arraySet(u,t,l-r.w_size,r.w_size,0),t=u,l=r.w_size),a=e.avail_in,o=e.next_in,h=e.input,e.avail_in=l,e.next_in=0,e.input=t,j(r);r.lookahead>=x;){for(n=r.strstart,i=r.lookahead-(x-1);r.ins_h=(r.ins_h<<r.hash_shift^r.window[n+x-1])&r.hash_mask,r.prev[n&r.w_mask]=r.head[r.ins_h],r.head[r.ins_h]=n,n++,--i;);r.strstart=n,r.lookahead=x-1,j(r)}return r.strstart+=r.lookahead,r.block_start=r.strstart,r.insert=r.lookahead,r.lookahead=0,r.match_length=r.prev_length=x-1,r.match_available=0,e.next_in=o,e.input=h,e.avail_in=a,r.wrap=s,m},r.deflateInfo=\"pako deflate (from Nodeca project)\"},{\"../utils/common\":41,\"./adler32\":43,\"./crc32\":45,\"./messages\":51,\"./trees\":52}],47:[function(e,t,r){\"use strict\";t.exports=function(){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}},{}],48:[function(e,t,r){\"use strict\";t.exports=function(e,t){var r,n,i,s,a,o,h,u,l,f,c,d,p,m,_,g,b,v,y,w,k,x,S,z,C;r=e.state,n=e.next_in,z=e.input,i=n+(e.avail_in-5),s=e.next_out,C=e.output,a=s-(t-e.avail_out),o=s+(e.avail_out-257),h=r.dmax,u=r.wsize,l=r.whave,f=r.wnext,c=r.window,d=r.hold,p=r.bits,m=r.lencode,_=r.distcode,g=(1<<r.lenbits)-1,b=(1<<r.distbits)-1;e:do{p<15&&(d+=z[n++]<<p,p+=8,d+=z[n++]<<p,p+=8),v=m[d&g];t:for(;;){if(d>>>=y=v>>>24,p-=y,0===(y=v>>>16&255))C[s++]=65535&v;else{if(!(16&y)){if(0==(64&y)){v=m[(65535&v)+(d&(1<<y)-1)];continue t}if(32&y){r.mode=12;break e}e.msg=\"invalid literal/length code\",r.mode=30;break e}w=65535&v,(y&=15)&&(p<y&&(d+=z[n++]<<p,p+=8),w+=d&(1<<y)-1,d>>>=y,p-=y),p<15&&(d+=z[n++]<<p,p+=8,d+=z[n++]<<p,p+=8),v=_[d&b];r:for(;;){if(d>>>=y=v>>>24,p-=y,!(16&(y=v>>>16&255))){if(0==(64&y)){v=_[(65535&v)+(d&(1<<y)-1)];continue r}e.msg=\"invalid distance code\",r.mode=30;break e}if(k=65535&v,p<(y&=15)&&(d+=z[n++]<<p,(p+=8)<y&&(d+=z[n++]<<p,p+=8)),h<(k+=d&(1<<y)-1)){e.msg=\"invalid distance too far back\",r.mode=30;break e}if(d>>>=y,p-=y,(y=s-a)<k){if(l<(y=k-y)&&r.sane){e.msg=\"invalid distance too far back\",r.mode=30;break e}if(S=c,(x=0)===f){if(x+=u-y,y<w){for(w-=y;C[s++]=c[x++],--y;);x=s-k,S=C}}else if(f<y){if(x+=u+f-y,(y-=f)<w){for(w-=y;C[s++]=c[x++],--y;);if(x=0,f<w){for(w-=y=f;C[s++]=c[x++],--y;);x=s-k,S=C}}}else if(x+=f-y,y<w){for(w-=y;C[s++]=c[x++],--y;);x=s-k,S=C}for(;2<w;)C[s++]=S[x++],C[s++]=S[x++],C[s++]=S[x++],w-=3;w&&(C[s++]=S[x++],1<w&&(C[s++]=S[x++]))}else{for(x=s-k;C[s++]=C[x++],C[s++]=C[x++],C[s++]=C[x++],2<(w-=3););w&&(C[s++]=C[x++],1<w&&(C[s++]=C[x++]))}break}}break}}while(n<i&&s<o);n-=w=p>>3,d&=(1<<(p-=w<<3))-1,e.next_in=n,e.next_out=s,e.avail_in=n<i?i-n+5:5-(n-i),e.avail_out=s<o?o-s+257:257-(s-o),r.hold=d,r.bits=p}},{}],49:[function(e,t,r){\"use strict\";var I=e(\"../utils/common\"),O=e(\"./adler32\"),B=e(\"./crc32\"),R=e(\"./inffast\"),T=e(\"./inftrees\"),D=1,F=2,N=0,U=-2,P=1,n=852,i=592;function L(e){return(e>>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function s(){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 I.Buf16(320),this.work=new I.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function a(e){var t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg=\"\",t.wrap&&(e.adler=1&t.wrap),t.mode=P,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new I.Buf32(n),t.distcode=t.distdyn=new I.Buf32(i),t.sane=1,t.back=-1,N):U}function o(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,a(e)):U}function h(e,t){var r,n;return e&&e.state?(n=e.state,t<0?(r=0,t=-t):(r=1+(t>>4),t<48&&(t&=15)),t&&(t<8||15<t)?U:(null!==n.window&&n.wbits!==t&&(n.window=null),n.wrap=r,n.wbits=t,o(e))):U}function u(e,t){var r,n;return e?(n=new s,(e.state=n).window=null,(r=h(e,t))!==N&&(e.state=null),r):U}var l,f,c=!0;function j(e){if(c){var t;for(l=new I.Buf32(512),f=new I.Buf32(32),t=0;t<144;)e.lens[t++]=8;for(;t<256;)e.lens[t++]=9;for(;t<280;)e.lens[t++]=7;for(;t<288;)e.lens[t++]=8;for(T(D,e.lens,0,288,l,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;T(F,e.lens,0,32,f,0,e.work,{bits:5}),c=!1}e.lencode=l,e.lenbits=9,e.distcode=f,e.distbits=5}function Z(e,t,r,n){var i,s=e.state;return null===s.window&&(s.wsize=1<<s.wbits,s.wnext=0,s.whave=0,s.window=new I.Buf8(s.wsize)),n>=s.wsize?(I.arraySet(s.window,t,r-s.wsize,s.wsize,0),s.wnext=0,s.whave=s.wsize):(n<(i=s.wsize-s.wnext)&&(i=n),I.arraySet(s.window,t,r-n,i,s.wnext),(n-=i)?(I.arraySet(s.window,t,r-n,n,0),s.wnext=n,s.whave=s.wsize):(s.wnext+=i,s.wnext===s.wsize&&(s.wnext=0),s.whave<s.wsize&&(s.whave+=i))),0}r.inflateReset=o,r.inflateReset2=h,r.inflateResetKeep=a,r.inflateInit=function(e){return u(e,15)},r.inflateInit2=u,r.inflate=function(e,t){var r,n,i,s,a,o,h,u,l,f,c,d,p,m,_,g,b,v,y,w,k,x,S,z,C=0,E=new I.Buf8(4),A=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!e||!e.state||!e.output||!e.input&&0!==e.avail_in)return U;12===(r=e.state).mode&&(r.mode=13),a=e.next_out,i=e.output,h=e.avail_out,s=e.next_in,n=e.input,o=e.avail_in,u=r.hold,l=r.bits,f=o,c=h,x=N;e:for(;;)switch(r.mode){case P:if(0===r.wrap){r.mode=13;break}for(;l<16;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(2&r.wrap&&35615===u){E[r.check=0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0),l=u=0,r.mode=2;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&u)<<8)+(u>>8))%31){e.msg=\"incorrect header check\",r.mode=30;break}if(8!=(15&u)){e.msg=\"unknown compression method\",r.mode=30;break}if(l-=4,k=8+(15&(u>>>=4)),0===r.wbits)r.wbits=k;else if(k>r.wbits){e.msg=\"invalid window size\",r.mode=30;break}r.dmax=1<<k,e.adler=r.check=1,r.mode=512&u?10:12,l=u=0;break;case 2:for(;l<16;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(r.flags=u,8!=(255&r.flags)){e.msg=\"unknown compression method\",r.mode=30;break}if(57344&r.flags){e.msg=\"unknown header flags set\",r.mode=30;break}r.head&&(r.head.text=u>>8&1),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0,r.mode=3;case 3:for(;l<32;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.head&&(r.head.time=u),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,E[2]=u>>>16&255,E[3]=u>>>24&255,r.check=B(r.check,E,4,0)),l=u=0,r.mode=4;case 4:for(;l<16;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.head&&(r.head.xflags=255&u,r.head.os=u>>8),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0,r.mode=5;case 5:if(1024&r.flags){for(;l<16;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.length=u,r.head&&(r.head.extra_len=u),512&r.flags&&(E[0]=255&u,E[1]=u>>>8&255,r.check=B(r.check,E,2,0)),l=u=0}else r.head&&(r.head.extra=null);r.mode=6;case 6:if(1024&r.flags&&(o<(d=r.length)&&(d=o),d&&(r.head&&(k=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Array(r.head.extra_len)),I.arraySet(r.head.extra,n,s,d,k)),512&r.flags&&(r.check=B(r.check,n,d,s)),o-=d,s+=d,r.length-=d),r.length))break e;r.length=0,r.mode=7;case 7:if(2048&r.flags){if(0===o)break e;for(d=0;k=n[s+d++],r.head&&k&&r.length<65536&&(r.head.name+=String.fromCharCode(k)),k&&d<o;);if(512&r.flags&&(r.check=B(r.check,n,d,s)),o-=d,s+=d,k)break e}else r.head&&(r.head.name=null);r.length=0,r.mode=8;case 8:if(4096&r.flags){if(0===o)break e;for(d=0;k=n[s+d++],r.head&&k&&r.length<65536&&(r.head.comment+=String.fromCharCode(k)),k&&d<o;);if(512&r.flags&&(r.check=B(r.check,n,d,s)),o-=d,s+=d,k)break e}else r.head&&(r.head.comment=null);r.mode=9;case 9:if(512&r.flags){for(;l<16;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(u!==(65535&r.check)){e.msg=\"header crc mismatch\",r.mode=30;break}l=u=0}r.head&&(r.head.hcrc=r.flags>>9&1,r.head.done=!0),e.adler=r.check=0,r.mode=12;break;case 10:for(;l<32;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}e.adler=r.check=L(u),l=u=0,r.mode=11;case 11:if(0===r.havedict)return e.next_out=a,e.avail_out=h,e.next_in=s,e.avail_in=o,r.hold=u,r.bits=l,2;e.adler=r.check=1,r.mode=12;case 12:if(5===t||6===t)break e;case 13:if(r.last){u>>>=7&l,l-=7&l,r.mode=27;break}for(;l<3;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}switch(r.last=1&u,l-=1,3&(u>>>=1)){case 0:r.mode=14;break;case 1:if(j(r),r.mode=20,6!==t)break;u>>>=2,l-=2;break e;case 2:r.mode=17;break;case 3:e.msg=\"invalid block type\",r.mode=30}u>>>=2,l-=2;break;case 14:for(u>>>=7&l,l-=7&l;l<32;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if((65535&u)!=(u>>>16^65535)){e.msg=\"invalid stored block lengths\",r.mode=30;break}if(r.length=65535&u,l=u=0,r.mode=15,6===t)break e;case 15:r.mode=16;case 16:if(d=r.length){if(o<d&&(d=o),h<d&&(d=h),0===d)break e;I.arraySet(i,n,s,d,a),o-=d,s+=d,h-=d,a+=d,r.length-=d;break}r.mode=12;break;case 17:for(;l<14;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(r.nlen=257+(31&u),u>>>=5,l-=5,r.ndist=1+(31&u),u>>>=5,l-=5,r.ncode=4+(15&u),u>>>=4,l-=4,286<r.nlen||30<r.ndist){e.msg=\"too many length or distance symbols\",r.mode=30;break}r.have=0,r.mode=18;case 18:for(;r.have<r.ncode;){for(;l<3;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.lens[A[r.have++]]=7&u,u>>>=3,l-=3}for(;r.have<19;)r.lens[A[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,S={bits:r.lenbits},x=T(0,r.lens,0,19,r.lencode,0,r.work,S),r.lenbits=S.bits,x){e.msg=\"invalid code lengths set\",r.mode=30;break}r.have=0,r.mode=19;case 19:for(;r.have<r.nlen+r.ndist;){for(;g=(C=r.lencode[u&(1<<r.lenbits)-1])>>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(b<16)u>>>=_,l-=_,r.lens[r.have++]=b;else{if(16===b){for(z=_+2;l<z;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(u>>>=_,l-=_,0===r.have){e.msg=\"invalid bit length repeat\",r.mode=30;break}k=r.lens[r.have-1],d=3+(3&u),u>>>=2,l-=2}else if(17===b){for(z=_+3;l<z;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}l-=_,k=0,d=3+(7&(u>>>=_)),u>>>=3,l-=3}else{for(z=_+7;l<z;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}l-=_,k=0,d=11+(127&(u>>>=_)),u>>>=7,l-=7}if(r.have+d>r.nlen+r.ndist){e.msg=\"invalid bit length repeat\",r.mode=30;break}for(;d--;)r.lens[r.have++]=k}}if(30===r.mode)break;if(0===r.lens[256]){e.msg=\"invalid code -- missing end-of-block\",r.mode=30;break}if(r.lenbits=9,S={bits:r.lenbits},x=T(D,r.lens,0,r.nlen,r.lencode,0,r.work,S),r.lenbits=S.bits,x){e.msg=\"invalid literal/lengths set\",r.mode=30;break}if(r.distbits=6,r.distcode=r.distdyn,S={bits:r.distbits},x=T(F,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,S),r.distbits=S.bits,x){e.msg=\"invalid distances set\",r.mode=30;break}if(r.mode=20,6===t)break e;case 20:r.mode=21;case 21:if(6<=o&&258<=h){e.next_out=a,e.avail_out=h,e.next_in=s,e.avail_in=o,r.hold=u,r.bits=l,R(e,c),a=e.next_out,i=e.output,h=e.avail_out,s=e.next_in,n=e.input,o=e.avail_in,u=r.hold,l=r.bits,12===r.mode&&(r.back=-1);break}for(r.back=0;g=(C=r.lencode[u&(1<<r.lenbits)-1])>>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(g&&0==(240&g)){for(v=_,y=g,w=b;g=(C=r.lencode[w+((u&(1<<v+y)-1)>>v)])>>>16&255,b=65535&C,!(v+(_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}u>>>=v,l-=v,r.back+=v}if(u>>>=_,l-=_,r.back+=_,r.length=b,0===g){r.mode=26;break}if(32&g){r.back=-1,r.mode=12;break}if(64&g){e.msg=\"invalid literal/length code\",r.mode=30;break}r.extra=15&g,r.mode=22;case 22:if(r.extra){for(z=r.extra;l<z;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.length+=u&(1<<r.extra)-1,u>>>=r.extra,l-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=23;case 23:for(;g=(C=r.distcode[u&(1<<r.distbits)-1])>>>16&255,b=65535&C,!((_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(0==(240&g)){for(v=_,y=g,w=b;g=(C=r.distcode[w+((u&(1<<v+y)-1)>>v)])>>>16&255,b=65535&C,!(v+(_=C>>>24)<=l);){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}u>>>=v,l-=v,r.back+=v}if(u>>>=_,l-=_,r.back+=_,64&g){e.msg=\"invalid distance code\",r.mode=30;break}r.offset=b,r.extra=15&g,r.mode=24;case 24:if(r.extra){for(z=r.extra;l<z;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}r.offset+=u&(1<<r.extra)-1,u>>>=r.extra,l-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){e.msg=\"invalid distance too far back\",r.mode=30;break}r.mode=25;case 25:if(0===h)break e;if(d=c-h,r.offset>d){if((d=r.offset-d)>r.whave&&r.sane){e.msg=\"invalid distance too far back\",r.mode=30;break}p=d>r.wnext?(d-=r.wnext,r.wsize-d):r.wnext-d,d>r.length&&(d=r.length),m=r.window}else m=i,p=a-r.offset,d=r.length;for(h<d&&(d=h),h-=d,r.length-=d;i[a++]=m[p++],--d;);0===r.length&&(r.mode=21);break;case 26:if(0===h)break e;i[a++]=r.length,h--,r.mode=21;break;case 27:if(r.wrap){for(;l<32;){if(0===o)break e;o--,u|=n[s++]<<l,l+=8}if(c-=h,e.total_out+=c,r.total+=c,c&&(e.adler=r.check=r.flags?B(r.check,i,c,a-c):O(r.check,i,c,a-c)),c=h,(r.flags?u:L(u))!==r.check){e.msg=\"incorrect data check\",r.mode=30;break}l=u=0}r.mode=28;case 28:if(r.wrap&&r.flags){for(;l<32;){if(0===o)break e;o--,u+=n[s++]<<l,l+=8}if(u!==(4294967295&r.total)){e.msg=\"incorrect length check\",r.mode=30;break}l=u=0}r.mode=29;case 29:x=1;break e;case 30:x=-3;break e;case 31:return-4;case 32:default:return U}return e.next_out=a,e.avail_out=h,e.next_in=s,e.avail_in=o,r.hold=u,r.bits=l,(r.wsize||c!==e.avail_out&&r.mode<30&&(r.mode<27||4!==t))&&Z(e,e.output,e.next_out,c-e.avail_out)?(r.mode=31,-4):(f-=e.avail_in,c-=e.avail_out,e.total_in+=f,e.total_out+=c,r.total+=c,r.wrap&&c&&(e.adler=r.check=r.flags?B(r.check,i,c,e.next_out-c):O(r.check,i,c,e.next_out-c)),e.data_type=r.bits+(r.last?64:0)+(12===r.mode?128:0)+(20===r.mode||15===r.mode?256:0),(0==f&&0===c||4===t)&&x===N&&(x=-5),x)},r.inflateEnd=function(e){if(!e||!e.state)return U;var t=e.state;return t.window&&(t.window=null),e.state=null,N},r.inflateGetHeader=function(e,t){var r;return e&&e.state?0==(2&(r=e.state).wrap)?U:((r.head=t).done=!1,N):U},r.inflateSetDictionary=function(e,t){var r,n=t.length;return e&&e.state?0!==(r=e.state).wrap&&11!==r.mode?U:11===r.mode&&O(1,t,n,0)!==r.check?-3:Z(e,t,n,n)?(r.mode=31,-4):(r.havedict=1,N):U},r.inflateInfo=\"pako inflate (from Nodeca project)\"},{\"../utils/common\":41,\"./adler32\":43,\"./crc32\":45,\"./inffast\":48,\"./inftrees\":50}],50:[function(e,t,r){\"use strict\";var D=e(\"../utils/common\"),F=[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],N=[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],U=[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],P=[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];t.exports=function(e,t,r,n,i,s,a,o){var h,u,l,f,c,d,p,m,_,g=o.bits,b=0,v=0,y=0,w=0,k=0,x=0,S=0,z=0,C=0,E=0,A=null,I=0,O=new D.Buf16(16),B=new D.Buf16(16),R=null,T=0;for(b=0;b<=15;b++)O[b]=0;for(v=0;v<n;v++)O[t[r+v]]++;for(k=g,w=15;1<=w&&0===O[w];w--);if(w<k&&(k=w),0===w)return i[s++]=20971520,i[s++]=20971520,o.bits=1,0;for(y=1;y<w&&0===O[y];y++);for(k<y&&(k=y),b=z=1;b<=15;b++)if(z<<=1,(z-=O[b])<0)return-1;if(0<z&&(0===e||1!==w))return-1;for(B[1]=0,b=1;b<15;b++)B[b+1]=B[b]+O[b];for(v=0;v<n;v++)0!==t[r+v]&&(a[B[t[r+v]]++]=v);if(d=0===e?(A=R=a,19):1===e?(A=F,I-=257,R=N,T-=257,256):(A=U,R=P,-1),b=y,c=s,S=v=E=0,l=-1,f=(C=1<<(x=k))-1,1===e&&852<C||2===e&&592<C)return 1;for(;;){for(p=b-S,_=a[v]<d?(m=0,a[v]):a[v]>d?(m=R[T+a[v]],A[I+a[v]]):(m=96,0),h=1<<b-S,y=u=1<<x;i[c+(E>>S)+(u-=h)]=p<<24|m<<16|_|0,0!==u;);for(h=1<<b-1;E&h;)h>>=1;if(0!==h?(E&=h-1,E+=h):E=0,v++,0==--O[b]){if(b===w)break;b=t[r+a[v]]}if(k<b&&(E&f)!==l){for(0===S&&(S=k),c+=y,z=1<<(x=b-S);x+S<w&&!((z-=O[x+S])<=0);)x++,z<<=1;if(C+=1<<x,1===e&&852<C||2===e&&592<C)return 1;i[l=E&f]=k<<24|x<<16|c-s|0}}return 0!==E&&(i[c+E]=b-S<<24|64<<16|0),o.bits=k,0}},{\"../utils/common\":41}],51:[function(e,t,r){\"use strict\";t.exports={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\"}},{}],52:[function(e,t,r){\"use strict\";var i=e(\"../utils/common\"),o=0,h=1;function n(e){for(var t=e.length;0<=--t;)e[t]=0}var s=0,a=29,u=256,l=u+1+a,f=30,c=19,_=2*l+1,g=15,d=16,p=7,m=256,b=16,v=17,y=18,w=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],k=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],x=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],S=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],z=new Array(2*(l+2));n(z);var C=new Array(2*f);n(C);var E=new Array(512);n(E);var A=new Array(256);n(A);var I=new Array(a);n(I);var O,B,R,T=new Array(f);function D(e,t,r,n,i){this.static_tree=e,this.extra_bits=t,this.extra_base=r,this.elems=n,this.max_length=i,this.has_stree=e&&e.length}function F(e,t){this.dyn_tree=e,this.max_code=0,this.stat_desc=t}function N(e){return e<256?E[e]:E[256+(e>>>7)]}function U(e,t){e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255}function P(e,t,r){e.bi_valid>d-r?(e.bi_buf|=t<<e.bi_valid&65535,U(e,e.bi_buf),e.bi_buf=t>>d-e.bi_valid,e.bi_valid+=r-d):(e.bi_buf|=t<<e.bi_valid&65535,e.bi_valid+=r)}function L(e,t,r){P(e,r[2*t],r[2*t+1])}function j(e,t){for(var r=0;r|=1&e,e>>>=1,r<<=1,0<--t;);return r>>>1}function Z(e,t,r){var n,i,s=new Array(g+1),a=0;for(n=1;n<=g;n++)s[n]=a=a+r[n-1]<<1;for(i=0;i<=t;i++){var o=e[2*i+1];0!==o&&(e[2*i]=j(s[o]++,o))}}function W(e){var t;for(t=0;t<l;t++)e.dyn_ltree[2*t]=0;for(t=0;t<f;t++)e.dyn_dtree[2*t]=0;for(t=0;t<c;t++)e.bl_tree[2*t]=0;e.dyn_ltree[2*m]=1,e.opt_len=e.static_len=0,e.last_lit=e.matches=0}function M(e){8<e.bi_valid?U(e,e.bi_buf):0<e.bi_valid&&(e.pending_buf[e.pending++]=e.bi_buf),e.bi_buf=0,e.bi_valid=0}function H(e,t,r,n){var i=2*t,s=2*r;return e[i]<e[s]||e[i]===e[s]&&n[t]<=n[r]}function G(e,t,r){for(var n=e.heap[r],i=r<<1;i<=e.heap_len&&(i<e.heap_len&&H(t,e.heap[i+1],e.heap[i],e.depth)&&i++,!H(t,n,e.heap[i],e.depth));)e.heap[r]=e.heap[i],r=i,i<<=1;e.heap[r]=n}function K(e,t,r){var n,i,s,a,o=0;if(0!==e.last_lit)for(;n=e.pending_buf[e.d_buf+2*o]<<8|e.pending_buf[e.d_buf+2*o+1],i=e.pending_buf[e.l_buf+o],o++,0===n?L(e,i,t):(L(e,(s=A[i])+u+1,t),0!==(a=w[s])&&P(e,i-=I[s],a),L(e,s=N(--n),r),0!==(a=k[s])&&P(e,n-=T[s],a)),o<e.last_lit;);L(e,m,t)}function Y(e,t){var r,n,i,s=t.dyn_tree,a=t.stat_desc.static_tree,o=t.stat_desc.has_stree,h=t.stat_desc.elems,u=-1;for(e.heap_len=0,e.heap_max=_,r=0;r<h;r++)0!==s[2*r]?(e.heap[++e.heap_len]=u=r,e.depth[r]=0):s[2*r+1]=0;for(;e.heap_len<2;)s[2*(i=e.heap[++e.heap_len]=u<2?++u:0)]=1,e.depth[i]=0,e.opt_len--,o&&(e.static_len-=a[2*i+1]);for(t.max_code=u,r=e.heap_len>>1;1<=r;r--)G(e,s,r);for(i=h;r=e.heap[1],e.heap[1]=e.heap[e.heap_len--],G(e,s,1),n=e.heap[1],e.heap[--e.heap_max]=r,e.heap[--e.heap_max]=n,s[2*i]=s[2*r]+s[2*n],e.depth[i]=(e.depth[r]>=e.depth[n]?e.depth[r]:e.depth[n])+1,s[2*r+1]=s[2*n+1]=i,e.heap[1]=i++,G(e,s,1),2<=e.heap_len;);e.heap[--e.heap_max]=e.heap[1],function(e,t){var r,n,i,s,a,o,h=t.dyn_tree,u=t.max_code,l=t.stat_desc.static_tree,f=t.stat_desc.has_stree,c=t.stat_desc.extra_bits,d=t.stat_desc.extra_base,p=t.stat_desc.max_length,m=0;for(s=0;s<=g;s++)e.bl_count[s]=0;for(h[2*e.heap[e.heap_max]+1]=0,r=e.heap_max+1;r<_;r++)p<(s=h[2*h[2*(n=e.heap[r])+1]+1]+1)&&(s=p,m++),h[2*n+1]=s,u<n||(e.bl_count[s]++,a=0,d<=n&&(a=c[n-d]),o=h[2*n],e.opt_len+=o*(s+a),f&&(e.static_len+=o*(l[2*n+1]+a)));if(0!==m){do{for(s=p-1;0===e.bl_count[s];)s--;e.bl_count[s]--,e.bl_count[s+1]+=2,e.bl_count[p]--,m-=2}while(0<m);for(s=p;0!==s;s--)for(n=e.bl_count[s];0!==n;)u<(i=e.heap[--r])||(h[2*i+1]!==s&&(e.opt_len+=(s-h[2*i+1])*h[2*i],h[2*i+1]=s),n--)}}(e,t),Z(s,u,e.bl_count)}function X(e,t,r){var n,i,s=-1,a=t[1],o=0,h=7,u=4;for(0===a&&(h=138,u=3),t[2*(r+1)+1]=65535,n=0;n<=r;n++)i=a,a=t[2*(n+1)+1],++o<h&&i===a||(o<u?e.bl_tree[2*i]+=o:0!==i?(i!==s&&e.bl_tree[2*i]++,e.bl_tree[2*b]++):o<=10?e.bl_tree[2*v]++:e.bl_tree[2*y]++,s=i,u=(o=0)===a?(h=138,3):i===a?(h=6,3):(h=7,4))}function V(e,t,r){var n,i,s=-1,a=t[1],o=0,h=7,u=4;for(0===a&&(h=138,u=3),n=0;n<=r;n++)if(i=a,a=t[2*(n+1)+1],!(++o<h&&i===a)){if(o<u)for(;L(e,i,e.bl_tree),0!=--o;);else 0!==i?(i!==s&&(L(e,i,e.bl_tree),o--),L(e,b,e.bl_tree),P(e,o-3,2)):o<=10?(L(e,v,e.bl_tree),P(e,o-3,3)):(L(e,y,e.bl_tree),P(e,o-11,7));s=i,u=(o=0)===a?(h=138,3):i===a?(h=6,3):(h=7,4)}}n(T);var q=!1;function J(e,t,r,n){P(e,(s<<1)+(n?1:0),3),function(e,t,r,n){M(e),n&&(U(e,r),U(e,~r)),i.arraySet(e.pending_buf,e.window,t,r,e.pending),e.pending+=r}(e,t,r,!0)}r._tr_init=function(e){q||(function(){var e,t,r,n,i,s=new Array(g+1);for(n=r=0;n<a-1;n++)for(I[n]=r,e=0;e<1<<w[n];e++)A[r++]=n;for(A[r-1]=n,n=i=0;n<16;n++)for(T[n]=i,e=0;e<1<<k[n];e++)E[i++]=n;for(i>>=7;n<f;n++)for(T[n]=i<<7,e=0;e<1<<k[n]-7;e++)E[256+i++]=n;for(t=0;t<=g;t++)s[t]=0;for(e=0;e<=143;)z[2*e+1]=8,e++,s[8]++;for(;e<=255;)z[2*e+1]=9,e++,s[9]++;for(;e<=279;)z[2*e+1]=7,e++,s[7]++;for(;e<=287;)z[2*e+1]=8,e++,s[8]++;for(Z(z,l+1,s),e=0;e<f;e++)C[2*e+1]=5,C[2*e]=j(e,5);O=new D(z,w,u+1,l,g),B=new D(C,k,0,f,g),R=new D(new Array(0),x,0,c,p)}(),q=!0),e.l_desc=new F(e.dyn_ltree,O),e.d_desc=new F(e.dyn_dtree,B),e.bl_desc=new F(e.bl_tree,R),e.bi_buf=0,e.bi_valid=0,W(e)},r._tr_stored_block=J,r._tr_flush_block=function(e,t,r,n){var i,s,a=0;0<e.level?(2===e.strm.data_type&&(e.strm.data_type=function(e){var t,r=4093624447;for(t=0;t<=31;t++,r>>>=1)if(1&r&&0!==e.dyn_ltree[2*t])return o;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return h;for(t=32;t<u;t++)if(0!==e.dyn_ltree[2*t])return h;return o}(e)),Y(e,e.l_desc),Y(e,e.d_desc),a=function(e){var t;for(X(e,e.dyn_ltree,e.l_desc.max_code),X(e,e.dyn_dtree,e.d_desc.max_code),Y(e,e.bl_desc),t=c-1;3<=t&&0===e.bl_tree[2*S[t]+1];t--);return e.opt_len+=3*(t+1)+5+5+4,t}(e),i=e.opt_len+3+7>>>3,(s=e.static_len+3+7>>>3)<=i&&(i=s)):i=s=r+5,r+4<=i&&-1!==t?J(e,t,r,n):4===e.strategy||s===i?(P(e,2+(n?1:0),3),K(e,z,C)):(P(e,4+(n?1:0),3),function(e,t,r,n){var i;for(P(e,t-257,5),P(e,r-1,5),P(e,n-4,4),i=0;i<n;i++)P(e,e.bl_tree[2*S[i]+1],3);V(e,e.dyn_ltree,t-1),V(e,e.dyn_dtree,r-1)}(e,e.l_desc.max_code+1,e.d_desc.max_code+1,a+1),K(e,e.dyn_ltree,e.dyn_dtree)),W(e),n&&M(e)},r._tr_tally=function(e,t,r){return e.pending_buf[e.d_buf+2*e.last_lit]=t>>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&r,e.last_lit++,0===t?e.dyn_ltree[2*r]++:(e.matches++,t--,e.dyn_ltree[2*(A[r]+u+1)]++,e.dyn_dtree[2*N(t)]++),e.last_lit===e.lit_bufsize-1},r._tr_align=function(e){P(e,2,3),L(e,m,z),function(e){16===e.bi_valid?(U(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):8<=e.bi_valid&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)}(e)}},{\"../utils/common\":41}],53:[function(e,t,r){\"use strict\";t.exports=function(){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}},{}],54:[function(e,t,r){(function(e){!function(r,n){\"use strict\";if(!r.setImmediate){var i,s,t,a,o=1,h={},u=!1,l=r.document,e=Object.getPrototypeOf&&Object.getPrototypeOf(r);e=e&&e.setTimeout?e:r,i=\"[object process]\"==={}.toString.call(r.process)?function(e){process.nextTick(function(){c(e)})}:function(){if(r.postMessage&&!r.importScripts){var e=!0,t=r.onmessage;return r.onmessage=function(){e=!1},r.postMessage(\"\",\"*\"),r.onmessage=t,e}}()?(a=\"setImmediate$\"+Math.random()+\"$\",r.addEventListener?r.addEventListener(\"message\",d,!1):r.attachEvent(\"onmessage\",d),function(e){r.postMessage(a+e,\"*\")}):r.MessageChannel?((t=new MessageChannel).port1.onmessage=function(e){c(e.data)},function(e){t.port2.postMessage(e)}):l&&\"onreadystatechange\"in l.createElement(\"script\")?(s=l.documentElement,function(e){var t=l.createElement(\"script\");t.onreadystatechange=function(){c(e),t.onreadystatechange=null,s.removeChild(t),t=null},s.appendChild(t)}):function(e){setTimeout(c,0,e)},e.setImmediate=function(e){\"function\"!=typeof e&&(e=new Function(\"\"+e));for(var t=new Array(arguments.length-1),r=0;r<t.length;r++)t[r]=arguments[r+1];var n={callback:e,args:t};return h[o]=n,i(o),o++},e.clearImmediate=f}function f(e){delete h[e]}function c(e){if(u)setTimeout(c,0,e);else{var t=h[e];if(t){u=!0;try{!function(e){var t=e.callback,r=e.args;switch(r.length){case 0:t();break;case 1:t(r[0]);break;case 2:t(r[0],r[1]);break;case 3:t(r[0],r[1],r[2]);break;default:t.apply(n,r)}}(t)}finally{f(e),u=!1}}}}function d(e){e.source===r&&\"string\"==typeof e.data&&0===e.data.indexOf(a)&&c(+e.data.slice(a.length))}}(\"undefined\"==typeof self?void 0===e?this:e:self)}).call(this,\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{}]},{},[10])(10)});","'use strict';\n\n\nfunction isNothing(subject) {\n  return (typeof subject === 'undefined') || (subject === null);\n}\n\n\nfunction isObject(subject) {\n  return (typeof subject === 'object') && (subject !== null);\n}\n\n\nfunction toArray(sequence) {\n  if (Array.isArray(sequence)) return sequence;\n  else if (isNothing(sequence)) return [];\n\n  return [ sequence ];\n}\n\n\nfunction extend(target, source) {\n  var index, length, key, sourceKeys;\n\n  if (source) {\n    sourceKeys = Object.keys(source);\n\n    for (index = 0, length = sourceKeys.length; index < length; index += 1) {\n      key = sourceKeys[index];\n      target[key] = source[key];\n    }\n  }\n\n  return target;\n}\n\n\nfunction repeat(string, count) {\n  var result = '', cycle;\n\n  for (cycle = 0; cycle < count; cycle += 1) {\n    result += string;\n  }\n\n  return result;\n}\n\n\nfunction isNegativeZero(number) {\n  return (number === 0) && (Number.NEGATIVE_INFINITY === 1 / number);\n}\n\n\nmodule.exports.isNothing      = isNothing;\nmodule.exports.isObject       = isObject;\nmodule.exports.toArray        = toArray;\nmodule.exports.repeat         = repeat;\nmodule.exports.isNegativeZero = isNegativeZero;\nmodule.exports.extend         = extend;\n","// YAML error class. http://stackoverflow.com/questions/8458984\n//\n'use strict';\n\nfunction YAMLException(reason, mark) {\n  // Super constructor\n  Error.call(this);\n\n  // Include stack trace in error object\n  if (Error.captureStackTrace) {\n    // Chrome and NodeJS\n    Error.captureStackTrace(this, this.constructor);\n  } else {\n    // FF, IE 10+ and Safari 6+. Fallback for others\n    this.stack = (new Error()).stack || '';\n  }\n\n  this.name = 'YAMLException';\n  this.reason = reason;\n  this.mark = mark;\n  this.message = (this.reason || '(unknown reason)') + (this.mark ? ' ' + this.mark.toString() : '');\n}\n\n\n// Inherit from Error\nYAMLException.prototype = Object.create(Error.prototype);\nYAMLException.prototype.constructor = YAMLException;\n\n\nYAMLException.prototype.toString = function toString(compact) {\n  var result = this.name + ': ';\n\n  result += this.reason || '(unknown reason)';\n\n  if (!compact && this.mark) {\n    result += ' ' + this.mark.toString();\n  }\n\n  return result;\n};\n\n\nmodule.exports = YAMLException;\n","'use strict';\n\n\nvar common = require('./common');\n\n\nfunction Mark(name, buffer, position, line, column) {\n  this.name     = name;\n  this.buffer   = buffer;\n  this.position = position;\n  this.line     = line;\n  this.column   = column;\n}\n\n\nMark.prototype.getSnippet = function getSnippet(indent, maxLength) {\n  var head, start, tail, end, snippet;\n\n  if (!this.buffer) return null;\n\n  indent = indent || 4;\n  maxLength = maxLength || 75;\n\n  head = '';\n  start = this.position;\n\n  while (start > 0 && '\\x00\\r\\n\\x85\\u2028\\u2029'.indexOf(this.buffer.charAt(start - 1)) === -1) {\n    start -= 1;\n    if (this.position - start > (maxLength / 2 - 1)) {\n      head = ' ... ';\n      start += 5;\n      break;\n    }\n  }\n\n  tail = '';\n  end = this.position;\n\n  while (end < this.buffer.length && '\\x00\\r\\n\\x85\\u2028\\u2029'.indexOf(this.buffer.charAt(end)) === -1) {\n    end += 1;\n    if (end - this.position > (maxLength / 2 - 1)) {\n      tail = ' ... ';\n      end -= 5;\n      break;\n    }\n  }\n\n  snippet = this.buffer.slice(start, end);\n\n  return common.repeat(' ', indent) + head + snippet + tail + '\\n' +\n         common.repeat(' ', indent + this.position - start + head.length) + '^';\n};\n\n\nMark.prototype.toString = function toString(compact) {\n  var snippet, where = '';\n\n  if (this.name) {\n    where += 'in \"' + this.name + '\" ';\n  }\n\n  where += 'at line ' + (this.line + 1) + ', column ' + (this.column + 1);\n\n  if (!compact) {\n    snippet = this.getSnippet();\n\n    if (snippet) {\n      where += ':\\n' + snippet;\n    }\n  }\n\n  return where;\n};\n\n\nmodule.exports = Mark;\n","'use strict';\n\nvar YAMLException = require('./exception');\n\nvar TYPE_CONSTRUCTOR_OPTIONS = [\n  'kind',\n  'resolve',\n  'construct',\n  'instanceOf',\n  'predicate',\n  'represent',\n  'defaultStyle',\n  'styleAliases'\n];\n\nvar YAML_NODE_KINDS = [\n  'scalar',\n  'sequence',\n  'mapping'\n];\n\nfunction compileStyleAliases(map) {\n  var result = {};\n\n  if (map !== null) {\n    Object.keys(map).forEach(function (style) {\n      map[style].forEach(function (alias) {\n        result[String(alias)] = style;\n      });\n    });\n  }\n\n  return result;\n}\n\nfunction Type(tag, options) {\n  options = options || {};\n\n  Object.keys(options).forEach(function (name) {\n    if (TYPE_CONSTRUCTOR_OPTIONS.indexOf(name) === -1) {\n      throw new YAMLException('Unknown option \"' + name + '\" is met in definition of \"' + tag + '\" YAML type.');\n    }\n  });\n\n  // TODO: Add tag format check.\n  this.tag          = tag;\n  this.kind         = options['kind']         || null;\n  this.resolve      = options['resolve']      || function () { return true; };\n  this.construct    = options['construct']    || function (data) { return data; };\n  this.instanceOf   = options['instanceOf']   || null;\n  this.predicate    = options['predicate']    || null;\n  this.represent    = options['represent']    || null;\n  this.defaultStyle = options['defaultStyle'] || null;\n  this.styleAliases = compileStyleAliases(options['styleAliases'] || null);\n\n  if (YAML_NODE_KINDS.indexOf(this.kind) === -1) {\n    throw new YAMLException('Unknown kind \"' + this.kind + '\" is specified for \"' + tag + '\" YAML type.');\n  }\n}\n\nmodule.exports = Type;\n","'use strict';\n\n/*eslint-disable max-len*/\n\nvar common        = require('./common');\nvar YAMLException = require('./exception');\nvar Type          = require('./type');\n\n\nfunction compileList(schema, name, result) {\n  var exclude = [];\n\n  schema.include.forEach(function (includedSchema) {\n    result = compileList(includedSchema, name, result);\n  });\n\n  schema[name].forEach(function (currentType) {\n    result.forEach(function (previousType, previousIndex) {\n      if (previousType.tag === currentType.tag) {\n        exclude.push(previousIndex);\n      }\n    });\n\n    result.push(currentType);\n  });\n\n  return result.filter(function (type, index) {\n    return exclude.indexOf(index) === -1;\n  });\n}\n\n\nfunction compileMap(/* lists... */) {\n  var result = {}, index, length;\n\n  function collectType(type) {\n    result[type.tag] = type;\n  }\n\n  for (index = 0, length = arguments.length; index < length; index += 1) {\n    arguments[index].forEach(collectType);\n  }\n\n  return result;\n}\n\n\nfunction Schema(definition) {\n  this.include  = definition.include  || [];\n  this.implicit = definition.implicit || [];\n  this.explicit = definition.explicit || [];\n\n  this.implicit.forEach(function (type) {\n    if (type.loadKind && type.loadKind !== 'scalar') {\n      throw new YAMLException('There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.');\n    }\n  });\n\n  this.compiledImplicit = compileList(this, 'implicit', []);\n  this.compiledExplicit = compileList(this, 'explicit', []);\n  this.compiledTypeMap  = compileMap(this.compiledImplicit, this.compiledExplicit);\n}\n\n\nSchema.DEFAULT = null;\n\n\nSchema.create = function createSchema() {\n  var schemas, types;\n\n  switch (arguments.length) {\n    case 1:\n      schemas = Schema.DEFAULT;\n      types = arguments[0];\n      break;\n\n    case 2:\n      schemas = arguments[0];\n      types = arguments[1];\n      break;\n\n    default:\n      throw new YAMLException('Wrong number of arguments for Schema.create function');\n  }\n\n  schemas = common.toArray(schemas);\n  types = common.toArray(types);\n\n  if (!schemas.every(function (schema) { return schema instanceof Schema; })) {\n    throw new YAMLException('Specified list of super schemas (or a single Schema object) contains a non-Schema object.');\n  }\n\n  if (!types.every(function (type) { return type instanceof Type; })) {\n    throw new YAMLException('Specified list of YAML types (or a single Type object) contains a non-Type object.');\n  }\n\n  return new Schema({\n    include: schemas,\n    explicit: types\n  });\n};\n\n\nmodule.exports = Schema;\n","'use strict';\n\nvar Type = require('../type');\n\nmodule.exports = new Type('tag:yaml.org,2002:str', {\n  kind: 'scalar',\n  construct: function (data) { return data !== null ? data : ''; }\n});\n","'use strict';\n\nvar Type = require('../type');\n\nmodule.exports = new Type('tag:yaml.org,2002:seq', {\n  kind: 'sequence',\n  construct: function (data) { return data !== null ? data : []; }\n});\n","'use strict';\n\nvar Type = require('../type');\n\nmodule.exports = new Type('tag:yaml.org,2002:map', {\n  kind: 'mapping',\n  construct: function (data) { return data !== null ? data : {}; }\n});\n","// Standard YAML's Failsafe schema.\n// http://www.yaml.org/spec/1.2/spec.html#id2802346\n\n\n'use strict';\n\n\nvar Schema = require('../schema');\n\n\nmodule.exports = new Schema({\n  explicit: [\n    require('../type/str'),\n    require('../type/seq'),\n    require('../type/map')\n  ]\n});\n","'use strict';\n\nvar Type = require('../type');\n\nfunction resolveYamlNull(data) {\n  if (data === null) return true;\n\n  var max = data.length;\n\n  return (max === 1 && data === '~') ||\n         (max === 4 && (data === 'null' || data === 'Null' || data === 'NULL'));\n}\n\nfunction constructYamlNull() {\n  return null;\n}\n\nfunction isNull(object) {\n  return object === null;\n}\n\nmodule.exports = new Type('tag:yaml.org,2002:null', {\n  kind: 'scalar',\n  resolve: resolveYamlNull,\n  construct: constructYamlNull,\n  predicate: isNull,\n  represent: {\n    canonical: function () { return '~';    },\n    lowercase: function () { return 'null'; },\n    uppercase: function () { return 'NULL'; },\n    camelcase: function () { return 'Null'; }\n  },\n  defaultStyle: 'lowercase'\n});\n","'use strict';\n\nvar Type = require('../type');\n\nfunction resolveYamlBoolean(data) {\n  if (data === null) return false;\n\n  var max = data.length;\n\n  return (max === 4 && (data === 'true' || data === 'True' || data === 'TRUE')) ||\n         (max === 5 && (data === 'false' || data === 'False' || data === 'FALSE'));\n}\n\nfunction constructYamlBoolean(data) {\n  return data === 'true' ||\n         data === 'True' ||\n         data === 'TRUE';\n}\n\nfunction isBoolean(object) {\n  return Object.prototype.toString.call(object) === '[object Boolean]';\n}\n\nmodule.exports = new Type('tag:yaml.org,2002:bool', {\n  kind: 'scalar',\n  resolve: resolveYamlBoolean,\n  construct: constructYamlBoolean,\n  predicate: isBoolean,\n  represent: {\n    lowercase: function (object) { return object ? 'true' : 'false'; },\n    uppercase: function (object) { return object ? 'TRUE' : 'FALSE'; },\n    camelcase: function (object) { return object ? 'True' : 'False'; }\n  },\n  defaultStyle: 'lowercase'\n});\n","'use strict';\n\nvar common = require('../common');\nvar Type   = require('../type');\n\nfunction isHexCode(c) {\n  return ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) ||\n         ((0x41/* A */ <= c) && (c <= 0x46/* F */)) ||\n         ((0x61/* a */ <= c) && (c <= 0x66/* f */));\n}\n\nfunction isOctCode(c) {\n  return ((0x30/* 0 */ <= c) && (c <= 0x37/* 7 */));\n}\n\nfunction isDecCode(c) {\n  return ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */));\n}\n\nfunction resolveYamlInteger(data) {\n  if (data === null) return false;\n\n  var max = data.length,\n      index = 0,\n      hasDigits = false,\n      ch;\n\n  if (!max) return false;\n\n  ch = data[index];\n\n  // sign\n  if (ch === '-' || ch === '+') {\n    ch = data[++index];\n  }\n\n  if (ch === '0') {\n    // 0\n    if (index + 1 === max) return true;\n    ch = data[++index];\n\n    // base 2, base 8, base 16\n\n    if (ch === 'b') {\n      // base 2\n      index++;\n\n      for (; index < max; index++) {\n        ch = data[index];\n        if (ch === '_') continue;\n        if (ch !== '0' && ch !== '1') return false;\n        hasDigits = true;\n      }\n      return hasDigits;\n    }\n\n\n    if (ch === 'x') {\n      // base 16\n      index++;\n\n      for (; index < max; index++) {\n        ch = data[index];\n        if (ch === '_') continue;\n        if (!isHexCode(data.charCodeAt(index))) return false;\n        hasDigits = true;\n      }\n      return hasDigits;\n    }\n\n    // base 8\n    for (; index < max; index++) {\n      ch = data[index];\n      if (ch === '_') continue;\n      if (!isOctCode(data.charCodeAt(index))) return false;\n      hasDigits = true;\n    }\n    return hasDigits;\n  }\n\n  // base 10 (except 0) or base 60\n\n  for (; index < max; index++) {\n    ch = data[index];\n    if (ch === '_') continue;\n    if (ch === ':') break;\n    if (!isDecCode(data.charCodeAt(index))) {\n      return false;\n    }\n    hasDigits = true;\n  }\n\n  if (!hasDigits) return false;\n\n  // if !base60 - done;\n  if (ch !== ':') return true;\n\n  // base60 almost not used, no needs to optimize\n  return /^(:[0-5]?[0-9])+$/.test(data.slice(index));\n}\n\nfunction constructYamlInteger(data) {\n  var value = data, sign = 1, ch, base, digits = [];\n\n  if (value.indexOf('_') !== -1) {\n    value = value.replace(/_/g, '');\n  }\n\n  ch = value[0];\n\n  if (ch === '-' || ch === '+') {\n    if (ch === '-') sign = -1;\n    value = value.slice(1);\n    ch = value[0];\n  }\n\n  if (value === '0') return 0;\n\n  if (ch === '0') {\n    if (value[1] === 'b') return sign * parseInt(value.slice(2), 2);\n    if (value[1] === 'x') return sign * parseInt(value, 16);\n    return sign * parseInt(value, 8);\n  }\n\n  if (value.indexOf(':') !== -1) {\n    value.split(':').forEach(function (v) {\n      digits.unshift(parseInt(v, 10));\n    });\n\n    value = 0;\n    base = 1;\n\n    digits.forEach(function (d) {\n      value += (d * base);\n      base *= 60;\n    });\n\n    return sign * value;\n\n  }\n\n  return sign * parseInt(value, 10);\n}\n\nfunction isInteger(object) {\n  return (Object.prototype.toString.call(object)) === '[object Number]' &&\n         (object % 1 === 0 && !common.isNegativeZero(object));\n}\n\nmodule.exports = new Type('tag:yaml.org,2002:int', {\n  kind: 'scalar',\n  resolve: resolveYamlInteger,\n  construct: constructYamlInteger,\n  predicate: isInteger,\n  represent: {\n    binary:      function (object) { return '0b' + object.toString(2); },\n    octal:       function (object) { return '0'  + object.toString(8); },\n    decimal:     function (object) { return        object.toString(10); },\n    hexadecimal: function (object) { return '0x' + object.toString(16).toUpperCase(); }\n  },\n  defaultStyle: 'decimal',\n  styleAliases: {\n    binary:      [ 2,  'bin' ],\n    octal:       [ 8,  'oct' ],\n    decimal:     [ 10, 'dec' ],\n    hexadecimal: [ 16, 'hex' ]\n  }\n});\n","'use strict';\n\nvar common = require('../common');\nvar Type   = require('../type');\n\nvar YAML_FLOAT_PATTERN = new RegExp(\n  '^(?:[-+]?(?:[0-9][0-9_]*)\\\\.[0-9_]*(?:[eE][-+][0-9]+)?' +\n  '|\\\\.[0-9_]+(?:[eE][-+][0-9]+)?' +\n  '|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\\\.[0-9_]*' +\n  '|[-+]?\\\\.(?:inf|Inf|INF)' +\n  '|\\\\.(?:nan|NaN|NAN))$');\n\nfunction resolveYamlFloat(data) {\n  if (data === null) return false;\n\n  if (!YAML_FLOAT_PATTERN.test(data)) return false;\n\n  return true;\n}\n\nfunction constructYamlFloat(data) {\n  var value, sign, base, digits;\n\n  value  = data.replace(/_/g, '').toLowerCase();\n  sign   = value[0] === '-' ? -1 : 1;\n  digits = [];\n\n  if ('+-'.indexOf(value[0]) >= 0) {\n    value = value.slice(1);\n  }\n\n  if (value === '.inf') {\n    return (sign === 1) ? Number.POSITIVE_INFINITY : Number.NEGATIVE_INFINITY;\n\n  } else if (value === '.nan') {\n    return NaN;\n\n  } else if (value.indexOf(':') >= 0) {\n    value.split(':').forEach(function (v) {\n      digits.unshift(parseFloat(v, 10));\n    });\n\n    value = 0.0;\n    base = 1;\n\n    digits.forEach(function (d) {\n      value += d * base;\n      base *= 60;\n    });\n\n    return sign * value;\n\n  }\n  return sign * parseFloat(value, 10);\n}\n\n\nvar SCIENTIFIC_WITHOUT_DOT = /^[-+]?[0-9]+e/;\n\nfunction representYamlFloat(object, style) {\n  var res;\n\n  if (isNaN(object)) {\n    switch (style) {\n      case 'lowercase': return '.nan';\n      case 'uppercase': return '.NAN';\n      case 'camelcase': return '.NaN';\n    }\n  } else if (Number.POSITIVE_INFINITY === object) {\n    switch (style) {\n      case 'lowercase': return '.inf';\n      case 'uppercase': return '.INF';\n      case 'camelcase': return '.Inf';\n    }\n  } else if (Number.NEGATIVE_INFINITY === object) {\n    switch (style) {\n      case 'lowercase': return '-.inf';\n      case 'uppercase': return '-.INF';\n      case 'camelcase': return '-.Inf';\n    }\n  } else if (common.isNegativeZero(object)) {\n    return '-0.0';\n  }\n\n  res = object.toString(10);\n\n  // JS stringifier can build scientific format without dots: 5e-100,\n  // while YAML requres dot: 5.e-100. Fix it with simple hack\n\n  return SCIENTIFIC_WITHOUT_DOT.test(res) ? res.replace('e', '.e') : res;\n}\n\nfunction isFloat(object) {\n  return (Object.prototype.toString.call(object) === '[object Number]') &&\n         (object % 1 !== 0 || common.isNegativeZero(object));\n}\n\nmodule.exports = new Type('tag:yaml.org,2002:float', {\n  kind: 'scalar',\n  resolve: resolveYamlFloat,\n  construct: constructYamlFloat,\n  predicate: isFloat,\n  represent: representYamlFloat,\n  defaultStyle: 'lowercase'\n});\n","// Standard YAML's JSON schema.\n// http://www.yaml.org/spec/1.2/spec.html#id2803231\n//\n// NOTE: JS-YAML does not support schema-specific tag resolution restrictions.\n// So, this schema is not such strict as defined in the YAML specification.\n// It allows numbers in binary notaion, use `Null` and `NULL` as `null`, etc.\n\n\n'use strict';\n\n\nvar Schema = require('../schema');\n\n\nmodule.exports = new Schema({\n  include: [\n    require('./failsafe')\n  ],\n  implicit: [\n    require('../type/null'),\n    require('../type/bool'),\n    require('../type/int'),\n    require('../type/float')\n  ]\n});\n","// Standard YAML's Core schema.\n// http://www.yaml.org/spec/1.2/spec.html#id2804923\n//\n// NOTE: JS-YAML does not support schema-specific tag resolution restrictions.\n// So, Core schema has no distinctions from JSON schema is JS-YAML.\n\n\n'use strict';\n\n\nvar Schema = require('../schema');\n\n\nmodule.exports = new Schema({\n  include: [\n    require('./json')\n  ]\n});\n","'use strict';\n\nvar Type = require('../type');\n\nvar YAML_TIMESTAMP_REGEXP = new RegExp(\n  '^([0-9][0-9][0-9][0-9])'          + // [1] year\n  '-([0-9][0-9]?)'                   + // [2] month\n  '-([0-9][0-9]?)'                   + // [3] day\n  '(?:(?:[Tt]|[ \\\\t]+)'              + // ...\n  '([0-9][0-9]?)'                    + // [4] hour\n  ':([0-9][0-9])'                    + // [5] minute\n  ':([0-9][0-9])'                    + // [6] second\n  '(?:\\\\.([0-9]*))?'                 + // [7] fraction\n  '(?:[ \\\\t]*(Z|([-+])([0-9][0-9]?)' + // [8] tz [9] tz_sign [10] tz_hour\n  '(?::([0-9][0-9]))?))?)?$');         // [11] tz_minute\n\nfunction resolveYamlTimestamp(data) {\n  if (data === null) return false;\n  if (YAML_TIMESTAMP_REGEXP.exec(data) === null) return false;\n  return true;\n}\n\nfunction constructYamlTimestamp(data) {\n  var match, year, month, day, hour, minute, second, fraction = 0,\n      delta = null, tz_hour, tz_minute, date;\n\n  match = YAML_TIMESTAMP_REGEXP.exec(data);\n\n  if (match === null) throw new Error('Date resolve error');\n\n  // match: [1] year [2] month [3] day\n\n  year = +(match[1]);\n  month = +(match[2]) - 1; // JS month starts with 0\n  day = +(match[3]);\n\n  if (!match[4]) { // no hour\n    return new Date(Date.UTC(year, month, day));\n  }\n\n  // match: [4] hour [5] minute [6] second [7] fraction\n\n  hour = +(match[4]);\n  minute = +(match[5]);\n  second = +(match[6]);\n\n  if (match[7]) {\n    fraction = match[7].slice(0, 3);\n    while (fraction.length < 3) { // milli-seconds\n      fraction += '0';\n    }\n    fraction = +fraction;\n  }\n\n  // match: [8] tz [9] tz_sign [10] tz_hour [11] tz_minute\n\n  if (match[9]) {\n    tz_hour = +(match[10]);\n    tz_minute = +(match[11] || 0);\n    delta = (tz_hour * 60 + tz_minute) * 60000; // delta in mili-seconds\n    if (match[9] === '-') delta = -delta;\n  }\n\n  date = new Date(Date.UTC(year, month, day, hour, minute, second, fraction));\n\n  if (delta) date.setTime(date.getTime() - delta);\n\n  return date;\n}\n\nfunction representYamlTimestamp(object /*, style*/) {\n  return object.toISOString();\n}\n\nmodule.exports = new Type('tag:yaml.org,2002:timestamp', {\n  kind: 'scalar',\n  resolve: resolveYamlTimestamp,\n  construct: constructYamlTimestamp,\n  instanceOf: Date,\n  represent: representYamlTimestamp\n});\n","'use strict';\n\nvar Type = require('../type');\n\nfunction resolveYamlMerge(data) {\n  return data === '<<' || data === null;\n}\n\nmodule.exports = new Type('tag:yaml.org,2002:merge', {\n  kind: 'scalar',\n  resolve: resolveYamlMerge\n});\n","'use strict';\n\n/*eslint-disable no-bitwise*/\n\n// A trick for browserified version.\n// Since we make browserifier to ignore `buffer` module, NodeBuffer will be undefined\nvar NodeBuffer = require('buffer').Buffer;\nvar Type       = require('../type');\n\n\n// [ 64, 65, 66 ] -> [ padding, CR, LF ]\nvar BASE64_MAP = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\\n\\r';\n\n\nfunction resolveYamlBinary(data) {\n  if (data === null) return false;\n\n  var code, idx, bitlen = 0, max = data.length, map = BASE64_MAP;\n\n  // Convert one by one.\n  for (idx = 0; idx < max; idx++) {\n    code = map.indexOf(data.charAt(idx));\n\n    // Skip CR/LF\n    if (code > 64) continue;\n\n    // Fail on illegal characters\n    if (code < 0) return false;\n\n    bitlen += 6;\n  }\n\n  // If there are any bits left, source was corrupted\n  return (bitlen % 8) === 0;\n}\n\nfunction constructYamlBinary(data) {\n  var idx, tailbits,\n      input = data.replace(/[\\r\\n=]/g, ''), // remove CR/LF & padding to simplify scan\n      max = input.length,\n      map = BASE64_MAP,\n      bits = 0,\n      result = [];\n\n  // Collect by 6*4 bits (3 bytes)\n\n  for (idx = 0; idx < max; idx++) {\n    if ((idx % 4 === 0) && idx) {\n      result.push((bits >> 16) & 0xFF);\n      result.push((bits >> 8) & 0xFF);\n      result.push(bits & 0xFF);\n    }\n\n    bits = (bits << 6) | map.indexOf(input.charAt(idx));\n  }\n\n  // Dump tail\n\n  tailbits = (max % 4) * 6;\n\n  if (tailbits === 0) {\n    result.push((bits >> 16) & 0xFF);\n    result.push((bits >> 8) & 0xFF);\n    result.push(bits & 0xFF);\n  } else if (tailbits === 18) {\n    result.push((bits >> 10) & 0xFF);\n    result.push((bits >> 2) & 0xFF);\n  } else if (tailbits === 12) {\n    result.push((bits >> 4) & 0xFF);\n  }\n\n  // Wrap into Buffer for NodeJS and leave Array for browser\n  if (NodeBuffer) return new NodeBuffer(result);\n\n  return result;\n}\n\nfunction representYamlBinary(object /*, style*/) {\n  var result = '', bits = 0, idx, tail,\n      max = object.length,\n      map = BASE64_MAP;\n\n  // Convert every three bytes to 4 ASCII characters.\n\n  for (idx = 0; idx < max; idx++) {\n    if ((idx % 3 === 0) && idx) {\n      result += map[(bits >> 18) & 0x3F];\n      result += map[(bits >> 12) & 0x3F];\n      result += map[(bits >> 6) & 0x3F];\n      result += map[bits & 0x3F];\n    }\n\n    bits = (bits << 8) + object[idx];\n  }\n\n  // Dump tail\n\n  tail = max % 3;\n\n  if (tail === 0) {\n    result += map[(bits >> 18) & 0x3F];\n    result += map[(bits >> 12) & 0x3F];\n    result += map[(bits >> 6) & 0x3F];\n    result += map[bits & 0x3F];\n  } else if (tail === 2) {\n    result += map[(bits >> 10) & 0x3F];\n    result += map[(bits >> 4) & 0x3F];\n    result += map[(bits << 2) & 0x3F];\n    result += map[64];\n  } else if (tail === 1) {\n    result += map[(bits >> 2) & 0x3F];\n    result += map[(bits << 4) & 0x3F];\n    result += map[64];\n    result += map[64];\n  }\n\n  return result;\n}\n\nfunction isBinary(object) {\n  return NodeBuffer && NodeBuffer.isBuffer(object);\n}\n\nmodule.exports = new Type('tag:yaml.org,2002:binary', {\n  kind: 'scalar',\n  resolve: resolveYamlBinary,\n  construct: constructYamlBinary,\n  predicate: isBinary,\n  represent: representYamlBinary\n});\n","'use strict';\n\nvar Type = require('../type');\n\nvar _hasOwnProperty = Object.prototype.hasOwnProperty;\nvar _toString       = Object.prototype.toString;\n\nfunction resolveYamlOmap(data) {\n  if (data === null) return true;\n\n  var objectKeys = [], index, length, pair, pairKey, pairHasKey,\n      object = data;\n\n  for (index = 0, length = object.length; index < length; index += 1) {\n    pair = object[index];\n    pairHasKey = false;\n\n    if (_toString.call(pair) !== '[object Object]') return false;\n\n    for (pairKey in pair) {\n      if (_hasOwnProperty.call(pair, pairKey)) {\n        if (!pairHasKey) pairHasKey = true;\n        else return false;\n      }\n    }\n\n    if (!pairHasKey) return false;\n\n    if (objectKeys.indexOf(pairKey) === -1) objectKeys.push(pairKey);\n    else return false;\n  }\n\n  return true;\n}\n\nfunction constructYamlOmap(data) {\n  return data !== null ? data : [];\n}\n\nmodule.exports = new Type('tag:yaml.org,2002:omap', {\n  kind: 'sequence',\n  resolve: resolveYamlOmap,\n  construct: constructYamlOmap\n});\n","'use strict';\n\nvar Type = require('../type');\n\nvar _toString = Object.prototype.toString;\n\nfunction resolveYamlPairs(data) {\n  if (data === null) return true;\n\n  var index, length, pair, keys, result,\n      object = data;\n\n  result = new Array(object.length);\n\n  for (index = 0, length = object.length; index < length; index += 1) {\n    pair = object[index];\n\n    if (_toString.call(pair) !== '[object Object]') return false;\n\n    keys = Object.keys(pair);\n\n    if (keys.length !== 1) return false;\n\n    result[index] = [ keys[0], pair[keys[0]] ];\n  }\n\n  return true;\n}\n\nfunction constructYamlPairs(data) {\n  if (data === null) return [];\n\n  var index, length, pair, keys, result,\n      object = data;\n\n  result = new Array(object.length);\n\n  for (index = 0, length = object.length; index < length; index += 1) {\n    pair = object[index];\n\n    keys = Object.keys(pair);\n\n    result[index] = [ keys[0], pair[keys[0]] ];\n  }\n\n  return result;\n}\n\nmodule.exports = new Type('tag:yaml.org,2002:pairs', {\n  kind: 'sequence',\n  resolve: resolveYamlPairs,\n  construct: constructYamlPairs\n});\n","'use strict';\n\nvar Type = require('../type');\n\nvar _hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction resolveYamlSet(data) {\n  if (data === null) return true;\n\n  var key, object = data;\n\n  for (key in object) {\n    if (_hasOwnProperty.call(object, key)) {\n      if (object[key] !== null) return false;\n    }\n  }\n\n  return true;\n}\n\nfunction constructYamlSet(data) {\n  return data !== null ? data : {};\n}\n\nmodule.exports = new Type('tag:yaml.org,2002:set', {\n  kind: 'mapping',\n  resolve: resolveYamlSet,\n  construct: constructYamlSet\n});\n","// JS-YAML's default schema for `safeLoad` function.\n// It is not described in the YAML specification.\n//\n// This schema is based on standard YAML's Core schema and includes most of\n// extra types described at YAML tag repository. (http://yaml.org/type/)\n\n\n'use strict';\n\n\nvar Schema = require('../schema');\n\n\nmodule.exports = new Schema({\n  include: [\n    require('./core')\n  ],\n  implicit: [\n    require('../type/timestamp'),\n    require('../type/merge')\n  ],\n  explicit: [\n    require('../type/binary'),\n    require('../type/omap'),\n    require('../type/pairs'),\n    require('../type/set')\n  ]\n});\n","'use strict';\n\nvar Type = require('../../type');\n\nfunction resolveJavascriptUndefined() {\n  return true;\n}\n\nfunction constructJavascriptUndefined() {\n  /*eslint-disable no-undefined*/\n  return undefined;\n}\n\nfunction representJavascriptUndefined() {\n  return '';\n}\n\nfunction isUndefined(object) {\n  return typeof object === 'undefined';\n}\n\nmodule.exports = new Type('tag:yaml.org,2002:js/undefined', {\n  kind: 'scalar',\n  resolve: resolveJavascriptUndefined,\n  construct: constructJavascriptUndefined,\n  predicate: isUndefined,\n  represent: representJavascriptUndefined\n});\n","'use strict';\n\nvar Type = require('../../type');\n\nfunction resolveJavascriptRegExp(data) {\n  if (data === null) return false;\n  if (data.length === 0) return false;\n\n  var regexp = data,\n      tail   = /\\/([gim]*)$/.exec(data),\n      modifiers = '';\n\n  // if regexp starts with '/' it can have modifiers and must be properly closed\n  // `/foo/gim` - modifiers tail can be maximum 3 chars\n  if (regexp[0] === '/') {\n    if (tail) modifiers = tail[1];\n\n    if (modifiers.length > 3) return false;\n    // if expression starts with /, is should be properly terminated\n    if (regexp[regexp.length - modifiers.length - 1] !== '/') return false;\n  }\n\n  return true;\n}\n\nfunction constructJavascriptRegExp(data) {\n  var regexp = data,\n      tail   = /\\/([gim]*)$/.exec(data),\n      modifiers = '';\n\n  // `/foo/gim` - tail can be maximum 4 chars\n  if (regexp[0] === '/') {\n    if (tail) modifiers = tail[1];\n    regexp = regexp.slice(1, regexp.length - modifiers.length - 1);\n  }\n\n  return new RegExp(regexp, modifiers);\n}\n\nfunction representJavascriptRegExp(object /*, style*/) {\n  var result = '/' + object.source + '/';\n\n  if (object.global) result += 'g';\n  if (object.multiline) result += 'm';\n  if (object.ignoreCase) result += 'i';\n\n  return result;\n}\n\nfunction isRegExp(object) {\n  return Object.prototype.toString.call(object) === '[object RegExp]';\n}\n\nmodule.exports = new Type('tag:yaml.org,2002:js/regexp', {\n  kind: 'scalar',\n  resolve: resolveJavascriptRegExp,\n  construct: constructJavascriptRegExp,\n  predicate: isRegExp,\n  represent: representJavascriptRegExp\n});\n","'use strict';\n\nvar esprima;\n\n// Browserified version does not have esprima\n//\n// 1. For node.js just require module as deps\n// 2. For browser try to require mudule via external AMD system.\n//    If not found - try to fallback to window.esprima. If not\n//    found too - then fail to parse.\n//\ntry {\n  // workaround to exclude package from browserify list.\n  var _require = require;\n  esprima = _require('esprima');\n} catch (_) {\n  /*global window */\n  if (typeof window !== 'undefined') esprima = window.esprima;\n}\n\nvar Type = require('../../type');\n\nfunction resolveJavascriptFunction(data) {\n  if (data === null) return false;\n\n  try {\n    var source = '(' + data + ')',\n        ast    = esprima.parse(source, { range: true });\n\n    if (ast.type                    !== 'Program'             ||\n        ast.body.length             !== 1                     ||\n        ast.body[0].type            !== 'ExpressionStatement' ||\n        ast.body[0].expression.type !== 'FunctionExpression') {\n      return false;\n    }\n\n    return true;\n  } catch (err) {\n    return false;\n  }\n}\n\nfunction constructJavascriptFunction(data) {\n  /*jslint evil:true*/\n\n  var source = '(' + data + ')',\n      ast    = esprima.parse(source, { range: true }),\n      params = [],\n      body;\n\n  if (ast.type                    !== 'Program'             ||\n      ast.body.length             !== 1                     ||\n      ast.body[0].type            !== 'ExpressionStatement' ||\n      ast.body[0].expression.type !== 'FunctionExpression') {\n    throw new Error('Failed to resolve function');\n  }\n\n  ast.body[0].expression.params.forEach(function (param) {\n    params.push(param.name);\n  });\n\n  body = ast.body[0].expression.body.range;\n\n  // Esprima's ranges include the first '{' and the last '}' characters on\n  // function expressions. So cut them out.\n  /*eslint-disable no-new-func*/\n  return new Function(params, source.slice(body[0] + 1, body[1] - 1));\n}\n\nfunction representJavascriptFunction(object /*, style*/) {\n  return object.toString();\n}\n\nfunction isFunction(object) {\n  return Object.prototype.toString.call(object) === '[object Function]';\n}\n\nmodule.exports = new Type('tag:yaml.org,2002:js/function', {\n  kind: 'scalar',\n  resolve: resolveJavascriptFunction,\n  construct: constructJavascriptFunction,\n  predicate: isFunction,\n  represent: representJavascriptFunction\n});\n","// JS-YAML's default schema for `load` function.\n// It is not described in the YAML specification.\n//\n// This schema is based on JS-YAML's default safe schema and includes\n// JavaScript-specific types: !!js/undefined, !!js/regexp and !!js/function.\n//\n// Also this schema is used as default base schema at `Schema.create` function.\n\n\n'use strict';\n\n\nvar Schema = require('../schema');\n\n\nmodule.exports = Schema.DEFAULT = new Schema({\n  include: [\n    require('./default_safe')\n  ],\n  explicit: [\n    require('../type/js/undefined'),\n    require('../type/js/regexp'),\n    require('../type/js/function')\n  ]\n});\n","'use strict';\n\n/*eslint-disable max-len,no-use-before-define*/\n\nvar common              = require('./common');\nvar YAMLException       = require('./exception');\nvar Mark                = require('./mark');\nvar DEFAULT_SAFE_SCHEMA = require('./schema/default_safe');\nvar DEFAULT_FULL_SCHEMA = require('./schema/default_full');\n\n\nvar _hasOwnProperty = Object.prototype.hasOwnProperty;\n\n\nvar CONTEXT_FLOW_IN   = 1;\nvar CONTEXT_FLOW_OUT  = 2;\nvar CONTEXT_BLOCK_IN  = 3;\nvar CONTEXT_BLOCK_OUT = 4;\n\n\nvar CHOMPING_CLIP  = 1;\nvar CHOMPING_STRIP = 2;\nvar CHOMPING_KEEP  = 3;\n\n\nvar PATTERN_NON_PRINTABLE         = /[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F\\x7F-\\x84\\x86-\\x9F\\uFFFE\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/;\nvar PATTERN_NON_ASCII_LINE_BREAKS = /[\\x85\\u2028\\u2029]/;\nvar PATTERN_FLOW_INDICATORS       = /[,\\[\\]\\{\\}]/;\nvar PATTERN_TAG_HANDLE            = /^(?:!|!!|![a-z\\-]+!)$/i;\nvar PATTERN_TAG_URI               = /^(?:!|[^,\\[\\]\\{\\}])(?:%[0-9a-f]{2}|[0-9a-z\\-#;\\/\\?:@&=\\+\\$,_\\.!~\\*'\\(\\)\\[\\]])*$/i;\n\n\nfunction is_EOL(c) {\n  return (c === 0x0A/* LF */) || (c === 0x0D/* CR */);\n}\n\nfunction is_WHITE_SPACE(c) {\n  return (c === 0x09/* Tab */) || (c === 0x20/* Space */);\n}\n\nfunction is_WS_OR_EOL(c) {\n  return (c === 0x09/* Tab */) ||\n         (c === 0x20/* Space */) ||\n         (c === 0x0A/* LF */) ||\n         (c === 0x0D/* CR */);\n}\n\nfunction is_FLOW_INDICATOR(c) {\n  return c === 0x2C/* , */ ||\n         c === 0x5B/* [ */ ||\n         c === 0x5D/* ] */ ||\n         c === 0x7B/* { */ ||\n         c === 0x7D/* } */;\n}\n\nfunction fromHexCode(c) {\n  var lc;\n\n  if ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) {\n    return c - 0x30;\n  }\n\n  /*eslint-disable no-bitwise*/\n  lc = c | 0x20;\n\n  if ((0x61/* a */ <= lc) && (lc <= 0x66/* f */)) {\n    return lc - 0x61 + 10;\n  }\n\n  return -1;\n}\n\nfunction escapedHexLen(c) {\n  if (c === 0x78/* x */) { return 2; }\n  if (c === 0x75/* u */) { return 4; }\n  if (c === 0x55/* U */) { return 8; }\n  return 0;\n}\n\nfunction fromDecimalCode(c) {\n  if ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) {\n    return c - 0x30;\n  }\n\n  return -1;\n}\n\nfunction simpleEscapeSequence(c) {\n  return (c === 0x30/* 0 */) ? '\\x00' :\n        (c === 0x61/* a */) ? '\\x07' :\n        (c === 0x62/* b */) ? '\\x08' :\n        (c === 0x74/* t */) ? '\\x09' :\n        (c === 0x09/* Tab */) ? '\\x09' :\n        (c === 0x6E/* n */) ? '\\x0A' :\n        (c === 0x76/* v */) ? '\\x0B' :\n        (c === 0x66/* f */) ? '\\x0C' :\n        (c === 0x72/* r */) ? '\\x0D' :\n        (c === 0x65/* e */) ? '\\x1B' :\n        (c === 0x20/* Space */) ? ' ' :\n        (c === 0x22/* \" */) ? '\\x22' :\n        (c === 0x2F/* / */) ? '/' :\n        (c === 0x5C/* \\ */) ? '\\x5C' :\n        (c === 0x4E/* N */) ? '\\x85' :\n        (c === 0x5F/* _ */) ? '\\xA0' :\n        (c === 0x4C/* L */) ? '\\u2028' :\n        (c === 0x50/* P */) ? '\\u2029' : '';\n}\n\nfunction charFromCodepoint(c) {\n  if (c <= 0xFFFF) {\n    return String.fromCharCode(c);\n  }\n  // Encode UTF-16 surrogate pair\n  // https://en.wikipedia.org/wiki/UTF-16#Code_points_U.2B010000_to_U.2B10FFFF\n  return String.fromCharCode(((c - 0x010000) >> 10) + 0xD800,\n                             ((c - 0x010000) & 0x03FF) + 0xDC00);\n}\n\nvar simpleEscapeCheck = new Array(256); // integer, for fast access\nvar simpleEscapeMap = new Array(256);\nfor (var i = 0; i < 256; i++) {\n  simpleEscapeCheck[i] = simpleEscapeSequence(i) ? 1 : 0;\n  simpleEscapeMap[i] = simpleEscapeSequence(i);\n}\n\n\nfunction State(input, options) {\n  this.input = input;\n\n  this.filename  = options['filename']  || null;\n  this.schema    = options['schema']    || DEFAULT_FULL_SCHEMA;\n  this.onWarning = options['onWarning'] || null;\n  this.legacy    = options['legacy']    || false;\n  this.json      = options['json']      || false;\n  this.listener  = options['listener']  || null;\n\n  this.implicitTypes = this.schema.compiledImplicit;\n  this.typeMap       = this.schema.compiledTypeMap;\n\n  this.length     = input.length;\n  this.position   = 0;\n  this.line       = 0;\n  this.lineStart  = 0;\n  this.lineIndent = 0;\n\n  this.documents = [];\n\n  /*\n  this.version;\n  this.checkLineBreaks;\n  this.tagMap;\n  this.anchorMap;\n  this.tag;\n  this.anchor;\n  this.kind;\n  this.result;*/\n\n}\n\n\nfunction generateError(state, message) {\n  return new YAMLException(\n    message,\n    new Mark(state.filename, state.input, state.position, state.line, (state.position - state.lineStart)));\n}\n\nfunction throwError(state, message) {\n  throw generateError(state, message);\n}\n\nfunction throwWarning(state, message) {\n  if (state.onWarning) {\n    state.onWarning.call(null, generateError(state, message));\n  }\n}\n\n\nvar directiveHandlers = {\n\n  YAML: function handleYamlDirective(state, name, args) {\n\n    var match, major, minor;\n\n    if (state.version !== null) {\n      throwError(state, 'duplication of %YAML directive');\n    }\n\n    if (args.length !== 1) {\n      throwError(state, 'YAML directive accepts exactly one argument');\n    }\n\n    match = /^([0-9]+)\\.([0-9]+)$/.exec(args[0]);\n\n    if (match === null) {\n      throwError(state, 'ill-formed argument of the YAML directive');\n    }\n\n    major = parseInt(match[1], 10);\n    minor = parseInt(match[2], 10);\n\n    if (major !== 1) {\n      throwError(state, 'unacceptable YAML version of the document');\n    }\n\n    state.version = args[0];\n    state.checkLineBreaks = (minor < 2);\n\n    if (minor !== 1 && minor !== 2) {\n      throwWarning(state, 'unsupported YAML version of the document');\n    }\n  },\n\n  TAG: function handleTagDirective(state, name, args) {\n\n    var handle, prefix;\n\n    if (args.length !== 2) {\n      throwError(state, 'TAG directive accepts exactly two arguments');\n    }\n\n    handle = args[0];\n    prefix = args[1];\n\n    if (!PATTERN_TAG_HANDLE.test(handle)) {\n      throwError(state, 'ill-formed tag handle (first argument) of the TAG directive');\n    }\n\n    if (_hasOwnProperty.call(state.tagMap, handle)) {\n      throwError(state, 'there is a previously declared suffix for \"' + handle + '\" tag handle');\n    }\n\n    if (!PATTERN_TAG_URI.test(prefix)) {\n      throwError(state, 'ill-formed tag prefix (second argument) of the TAG directive');\n    }\n\n    state.tagMap[handle] = prefix;\n  }\n};\n\n\nfunction captureSegment(state, start, end, checkJson) {\n  var _position, _length, _character, _result;\n\n  if (start < end) {\n    _result = state.input.slice(start, end);\n\n    if (checkJson) {\n      for (_position = 0, _length = _result.length;\n           _position < _length;\n           _position += 1) {\n        _character = _result.charCodeAt(_position);\n        if (!(_character === 0x09 ||\n              (0x20 <= _character && _character <= 0x10FFFF))) {\n          throwError(state, 'expected valid JSON character');\n        }\n      }\n    } else if (PATTERN_NON_PRINTABLE.test(_result)) {\n      throwError(state, 'the stream contains non-printable characters');\n    }\n\n    state.result += _result;\n  }\n}\n\nfunction mergeMappings(state, destination, source, overridableKeys) {\n  var sourceKeys, key, index, quantity;\n\n  if (!common.isObject(source)) {\n    throwError(state, 'cannot merge mappings; the provided source object is unacceptable');\n  }\n\n  sourceKeys = Object.keys(source);\n\n  for (index = 0, quantity = sourceKeys.length; index < quantity; index += 1) {\n    key = sourceKeys[index];\n\n    if (!_hasOwnProperty.call(destination, key)) {\n      destination[key] = source[key];\n      overridableKeys[key] = true;\n    }\n  }\n}\n\nfunction storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode) {\n  var index, quantity;\n\n  keyNode = String(keyNode);\n\n  if (_result === null) {\n    _result = {};\n  }\n\n  if (keyTag === 'tag:yaml.org,2002:merge') {\n    if (Array.isArray(valueNode)) {\n      for (index = 0, quantity = valueNode.length; index < quantity; index += 1) {\n        mergeMappings(state, _result, valueNode[index], overridableKeys);\n      }\n    } else {\n      mergeMappings(state, _result, valueNode, overridableKeys);\n    }\n  } else {\n    if (!state.json &&\n        !_hasOwnProperty.call(overridableKeys, keyNode) &&\n        _hasOwnProperty.call(_result, keyNode)) {\n      throwError(state, 'duplicated mapping key');\n    }\n    _result[keyNode] = valueNode;\n    delete overridableKeys[keyNode];\n  }\n\n  return _result;\n}\n\nfunction readLineBreak(state) {\n  var ch;\n\n  ch = state.input.charCodeAt(state.position);\n\n  if (ch === 0x0A/* LF */) {\n    state.position++;\n  } else if (ch === 0x0D/* CR */) {\n    state.position++;\n    if (state.input.charCodeAt(state.position) === 0x0A/* LF */) {\n      state.position++;\n    }\n  } else {\n    throwError(state, 'a line break is expected');\n  }\n\n  state.line += 1;\n  state.lineStart = state.position;\n}\n\nfunction skipSeparationSpace(state, allowComments, checkIndent) {\n  var lineBreaks = 0,\n      ch = state.input.charCodeAt(state.position);\n\n  while (ch !== 0) {\n    while (is_WHITE_SPACE(ch)) {\n      ch = state.input.charCodeAt(++state.position);\n    }\n\n    if (allowComments && ch === 0x23/* # */) {\n      do {\n        ch = state.input.charCodeAt(++state.position);\n      } while (ch !== 0x0A/* LF */ && ch !== 0x0D/* CR */ && ch !== 0);\n    }\n\n    if (is_EOL(ch)) {\n      readLineBreak(state);\n\n      ch = state.input.charCodeAt(state.position);\n      lineBreaks++;\n      state.lineIndent = 0;\n\n      while (ch === 0x20/* Space */) {\n        state.lineIndent++;\n        ch = state.input.charCodeAt(++state.position);\n      }\n    } else {\n      break;\n    }\n  }\n\n  if (checkIndent !== -1 && lineBreaks !== 0 && state.lineIndent < checkIndent) {\n    throwWarning(state, 'deficient indentation');\n  }\n\n  return lineBreaks;\n}\n\nfunction testDocumentSeparator(state) {\n  var _position = state.position,\n      ch;\n\n  ch = state.input.charCodeAt(_position);\n\n  // Condition state.position === state.lineStart is tested\n  // in parent on each call, for efficiency. No needs to test here again.\n  if ((ch === 0x2D/* - */ || ch === 0x2E/* . */) &&\n      ch === state.input.charCodeAt(_position + 1) &&\n      ch === state.input.charCodeAt(_position + 2)) {\n\n    _position += 3;\n\n    ch = state.input.charCodeAt(_position);\n\n    if (ch === 0 || is_WS_OR_EOL(ch)) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\nfunction writeFoldedLines(state, count) {\n  if (count === 1) {\n    state.result += ' ';\n  } else if (count > 1) {\n    state.result += common.repeat('\\n', count - 1);\n  }\n}\n\n\nfunction readPlainScalar(state, nodeIndent, withinFlowCollection) {\n  var preceding,\n      following,\n      captureStart,\n      captureEnd,\n      hasPendingContent,\n      _line,\n      _lineStart,\n      _lineIndent,\n      _kind = state.kind,\n      _result = state.result,\n      ch;\n\n  ch = state.input.charCodeAt(state.position);\n\n  if (is_WS_OR_EOL(ch)      ||\n      is_FLOW_INDICATOR(ch) ||\n      ch === 0x23/* # */    ||\n      ch === 0x26/* & */    ||\n      ch === 0x2A/* * */    ||\n      ch === 0x21/* ! */    ||\n      ch === 0x7C/* | */    ||\n      ch === 0x3E/* > */    ||\n      ch === 0x27/* ' */    ||\n      ch === 0x22/* \" */    ||\n      ch === 0x25/* % */    ||\n      ch === 0x40/* @ */    ||\n      ch === 0x60/* ` */) {\n    return false;\n  }\n\n  if (ch === 0x3F/* ? */ || ch === 0x2D/* - */) {\n    following = state.input.charCodeAt(state.position + 1);\n\n    if (is_WS_OR_EOL(following) ||\n        withinFlowCollection && is_FLOW_INDICATOR(following)) {\n      return false;\n    }\n  }\n\n  state.kind = 'scalar';\n  state.result = '';\n  captureStart = captureEnd = state.position;\n  hasPendingContent = false;\n\n  while (ch !== 0) {\n    if (ch === 0x3A/* : */) {\n      following = state.input.charCodeAt(state.position + 1);\n\n      if (is_WS_OR_EOL(following) ||\n          withinFlowCollection && is_FLOW_INDICATOR(following)) {\n        break;\n      }\n\n    } else if (ch === 0x23/* # */) {\n      preceding = state.input.charCodeAt(state.position - 1);\n\n      if (is_WS_OR_EOL(preceding)) {\n        break;\n      }\n\n    } else if ((state.position === state.lineStart && testDocumentSeparator(state)) ||\n               withinFlowCollection && is_FLOW_INDICATOR(ch)) {\n      break;\n\n    } else if (is_EOL(ch)) {\n      _line = state.line;\n      _lineStart = state.lineStart;\n      _lineIndent = state.lineIndent;\n      skipSeparationSpace(state, false, -1);\n\n      if (state.lineIndent >= nodeIndent) {\n        hasPendingContent = true;\n        ch = state.input.charCodeAt(state.position);\n        continue;\n      } else {\n        state.position = captureEnd;\n        state.line = _line;\n        state.lineStart = _lineStart;\n        state.lineIndent = _lineIndent;\n        break;\n      }\n    }\n\n    if (hasPendingContent) {\n      captureSegment(state, captureStart, captureEnd, false);\n      writeFoldedLines(state, state.line - _line);\n      captureStart = captureEnd = state.position;\n      hasPendingContent = false;\n    }\n\n    if (!is_WHITE_SPACE(ch)) {\n      captureEnd = state.position + 1;\n    }\n\n    ch = state.input.charCodeAt(++state.position);\n  }\n\n  captureSegment(state, captureStart, captureEnd, false);\n\n  if (state.result) {\n    return true;\n  }\n\n  state.kind = _kind;\n  state.result = _result;\n  return false;\n}\n\nfunction readSingleQuotedScalar(state, nodeIndent) {\n  var ch,\n      captureStart, captureEnd;\n\n  ch = state.input.charCodeAt(state.position);\n\n  if (ch !== 0x27/* ' */) {\n    return false;\n  }\n\n  state.kind = 'scalar';\n  state.result = '';\n  state.position++;\n  captureStart = captureEnd = state.position;\n\n  while ((ch = state.input.charCodeAt(state.position)) !== 0) {\n    if (ch === 0x27/* ' */) {\n      captureSegment(state, captureStart, state.position, true);\n      ch = state.input.charCodeAt(++state.position);\n\n      if (ch === 0x27/* ' */) {\n        captureStart = captureEnd = state.position;\n        state.position++;\n      } else {\n        return true;\n      }\n\n    } else if (is_EOL(ch)) {\n      captureSegment(state, captureStart, captureEnd, true);\n      writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent));\n      captureStart = captureEnd = state.position;\n\n    } else if (state.position === state.lineStart && testDocumentSeparator(state)) {\n      throwError(state, 'unexpected end of the document within a single quoted scalar');\n\n    } else {\n      state.position++;\n      captureEnd = state.position;\n    }\n  }\n\n  throwError(state, 'unexpected end of the stream within a single quoted scalar');\n}\n\nfunction readDoubleQuotedScalar(state, nodeIndent) {\n  var captureStart,\n      captureEnd,\n      hexLength,\n      hexResult,\n      tmp,\n      ch;\n\n  ch = state.input.charCodeAt(state.position);\n\n  if (ch !== 0x22/* \" */) {\n    return false;\n  }\n\n  state.kind = 'scalar';\n  state.result = '';\n  state.position++;\n  captureStart = captureEnd = state.position;\n\n  while ((ch = state.input.charCodeAt(state.position)) !== 0) {\n    if (ch === 0x22/* \" */) {\n      captureSegment(state, captureStart, state.position, true);\n      state.position++;\n      return true;\n\n    } else if (ch === 0x5C/* \\ */) {\n      captureSegment(state, captureStart, state.position, true);\n      ch = state.input.charCodeAt(++state.position);\n\n      if (is_EOL(ch)) {\n        skipSeparationSpace(state, false, nodeIndent);\n\n        // TODO: rework to inline fn with no type cast?\n      } else if (ch < 256 && simpleEscapeCheck[ch]) {\n        state.result += simpleEscapeMap[ch];\n        state.position++;\n\n      } else if ((tmp = escapedHexLen(ch)) > 0) {\n        hexLength = tmp;\n        hexResult = 0;\n\n        for (; hexLength > 0; hexLength--) {\n          ch = state.input.charCodeAt(++state.position);\n\n          if ((tmp = fromHexCode(ch)) >= 0) {\n            hexResult = (hexResult << 4) + tmp;\n\n          } else {\n            throwError(state, 'expected hexadecimal character');\n          }\n        }\n\n        state.result += charFromCodepoint(hexResult);\n\n        state.position++;\n\n      } else {\n        throwError(state, 'unknown escape sequence');\n      }\n\n      captureStart = captureEnd = state.position;\n\n    } else if (is_EOL(ch)) {\n      captureSegment(state, captureStart, captureEnd, true);\n      writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent));\n      captureStart = captureEnd = state.position;\n\n    } else if (state.position === state.lineStart && testDocumentSeparator(state)) {\n      throwError(state, 'unexpected end of the document within a double quoted scalar');\n\n    } else {\n      state.position++;\n      captureEnd = state.position;\n    }\n  }\n\n  throwError(state, 'unexpected end of the stream within a double quoted scalar');\n}\n\nfunction readFlowCollection(state, nodeIndent) {\n  var readNext = true,\n      _line,\n      _tag     = state.tag,\n      _result,\n      _anchor  = state.anchor,\n      following,\n      terminator,\n      isPair,\n      isExplicitPair,\n      isMapping,\n      overridableKeys = {},\n      keyNode,\n      keyTag,\n      valueNode,\n      ch;\n\n  ch = state.input.charCodeAt(state.position);\n\n  if (ch === 0x5B/* [ */) {\n    terminator = 0x5D;/* ] */\n    isMapping = false;\n    _result = [];\n  } else if (ch === 0x7B/* { */) {\n    terminator = 0x7D;/* } */\n    isMapping = true;\n    _result = {};\n  } else {\n    return false;\n  }\n\n  if (state.anchor !== null) {\n    state.anchorMap[state.anchor] = _result;\n  }\n\n  ch = state.input.charCodeAt(++state.position);\n\n  while (ch !== 0) {\n    skipSeparationSpace(state, true, nodeIndent);\n\n    ch = state.input.charCodeAt(state.position);\n\n    if (ch === terminator) {\n      state.position++;\n      state.tag = _tag;\n      state.anchor = _anchor;\n      state.kind = isMapping ? 'mapping' : 'sequence';\n      state.result = _result;\n      return true;\n    } else if (!readNext) {\n      throwError(state, 'missed comma between flow collection entries');\n    }\n\n    keyTag = keyNode = valueNode = null;\n    isPair = isExplicitPair = false;\n\n    if (ch === 0x3F/* ? */) {\n      following = state.input.charCodeAt(state.position + 1);\n\n      if (is_WS_OR_EOL(following)) {\n        isPair = isExplicitPair = true;\n        state.position++;\n        skipSeparationSpace(state, true, nodeIndent);\n      }\n    }\n\n    _line = state.line;\n    composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true);\n    keyTag = state.tag;\n    keyNode = state.result;\n    skipSeparationSpace(state, true, nodeIndent);\n\n    ch = state.input.charCodeAt(state.position);\n\n    if ((isExplicitPair || state.line === _line) && ch === 0x3A/* : */) {\n      isPair = true;\n      ch = state.input.charCodeAt(++state.position);\n      skipSeparationSpace(state, true, nodeIndent);\n      composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true);\n      valueNode = state.result;\n    }\n\n    if (isMapping) {\n      storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode);\n    } else if (isPair) {\n      _result.push(storeMappingPair(state, null, overridableKeys, keyTag, keyNode, valueNode));\n    } else {\n      _result.push(keyNode);\n    }\n\n    skipSeparationSpace(state, true, nodeIndent);\n\n    ch = state.input.charCodeAt(state.position);\n\n    if (ch === 0x2C/* , */) {\n      readNext = true;\n      ch = state.input.charCodeAt(++state.position);\n    } else {\n      readNext = false;\n    }\n  }\n\n  throwError(state, 'unexpected end of the stream within a flow collection');\n}\n\nfunction readBlockScalar(state, nodeIndent) {\n  var captureStart,\n      folding,\n      chomping       = CHOMPING_CLIP,\n      detectedIndent = false,\n      textIndent     = nodeIndent,\n      emptyLines     = 0,\n      atMoreIndented = false,\n      tmp,\n      ch;\n\n  ch = state.input.charCodeAt(state.position);\n\n  if (ch === 0x7C/* | */) {\n    folding = false;\n  } else if (ch === 0x3E/* > */) {\n    folding = true;\n  } else {\n    return false;\n  }\n\n  state.kind = 'scalar';\n  state.result = '';\n\n  while (ch !== 0) {\n    ch = state.input.charCodeAt(++state.position);\n\n    if (ch === 0x2B/* + */ || ch === 0x2D/* - */) {\n      if (CHOMPING_CLIP === chomping) {\n        chomping = (ch === 0x2B/* + */) ? CHOMPING_KEEP : CHOMPING_STRIP;\n      } else {\n        throwError(state, 'repeat of a chomping mode identifier');\n      }\n\n    } else if ((tmp = fromDecimalCode(ch)) >= 0) {\n      if (tmp === 0) {\n        throwError(state, 'bad explicit indentation width of a block scalar; it cannot be less than one');\n      } else if (!detectedIndent) {\n        textIndent = nodeIndent + tmp - 1;\n        detectedIndent = true;\n      } else {\n        throwError(state, 'repeat of an indentation width identifier');\n      }\n\n    } else {\n      break;\n    }\n  }\n\n  if (is_WHITE_SPACE(ch)) {\n    do { ch = state.input.charCodeAt(++state.position); }\n    while (is_WHITE_SPACE(ch));\n\n    if (ch === 0x23/* # */) {\n      do { ch = state.input.charCodeAt(++state.position); }\n      while (!is_EOL(ch) && (ch !== 0));\n    }\n  }\n\n  while (ch !== 0) {\n    readLineBreak(state);\n    state.lineIndent = 0;\n\n    ch = state.input.charCodeAt(state.position);\n\n    while ((!detectedIndent || state.lineIndent < textIndent) &&\n           (ch === 0x20/* Space */)) {\n      state.lineIndent++;\n      ch = state.input.charCodeAt(++state.position);\n    }\n\n    if (!detectedIndent && state.lineIndent > textIndent) {\n      textIndent = state.lineIndent;\n    }\n\n    if (is_EOL(ch)) {\n      emptyLines++;\n      continue;\n    }\n\n    // End of the scalar.\n    if (state.lineIndent < textIndent) {\n\n      // Perform the chomping.\n      if (chomping === CHOMPING_KEEP) {\n        state.result += common.repeat('\\n', emptyLines);\n      } else if (chomping === CHOMPING_CLIP) {\n        if (detectedIndent) { // i.e. only if the scalar is not empty.\n          state.result += '\\n';\n        }\n      }\n\n      // Break this `while` cycle and go to the funciton's epilogue.\n      break;\n    }\n\n    // Folded style: use fancy rules to handle line breaks.\n    if (folding) {\n\n      // Lines starting with white space characters (more-indented lines) are not folded.\n      if (is_WHITE_SPACE(ch)) {\n        atMoreIndented = true;\n        state.result += common.repeat('\\n', emptyLines + 1);\n\n      // End of more-indented block.\n      } else if (atMoreIndented) {\n        atMoreIndented = false;\n        state.result += common.repeat('\\n', emptyLines + 1);\n\n      // Just one line break - perceive as the same line.\n      } else if (emptyLines === 0) {\n        if (detectedIndent) { // i.e. only if we have already read some scalar content.\n          state.result += ' ';\n        }\n\n      // Several line breaks - perceive as different lines.\n      } else {\n        state.result += common.repeat('\\n', emptyLines);\n      }\n\n    // Literal style: just add exact number of line breaks between content lines.\n    } else if (detectedIndent) {\n      // If current line isn't the first one - count line break from the last content line.\n      state.result += common.repeat('\\n', emptyLines + 1);\n    } else {\n      // In case of the first content line - count only empty lines.\n      state.result += common.repeat('\\n', emptyLines);\n    }\n\n    detectedIndent = true;\n    emptyLines = 0;\n    captureStart = state.position;\n\n    while (!is_EOL(ch) && (ch !== 0)) {\n      ch = state.input.charCodeAt(++state.position);\n    }\n\n    captureSegment(state, captureStart, state.position, false);\n  }\n\n  return true;\n}\n\nfunction readBlockSequence(state, nodeIndent) {\n  var _line,\n      _tag      = state.tag,\n      _anchor   = state.anchor,\n      _result   = [],\n      following,\n      detected  = false,\n      ch;\n\n  if (state.anchor !== null) {\n    state.anchorMap[state.anchor] = _result;\n  }\n\n  ch = state.input.charCodeAt(state.position);\n\n  while (ch !== 0) {\n\n    if (ch !== 0x2D/* - */) {\n      break;\n    }\n\n    following = state.input.charCodeAt(state.position + 1);\n\n    if (!is_WS_OR_EOL(following)) {\n      break;\n    }\n\n    detected = true;\n    state.position++;\n\n    if (skipSeparationSpace(state, true, -1)) {\n      if (state.lineIndent <= nodeIndent) {\n        _result.push(null);\n        ch = state.input.charCodeAt(state.position);\n        continue;\n      }\n    }\n\n    _line = state.line;\n    composeNode(state, nodeIndent, CONTEXT_BLOCK_IN, false, true);\n    _result.push(state.result);\n    skipSeparationSpace(state, true, -1);\n\n    ch = state.input.charCodeAt(state.position);\n\n    if ((state.line === _line || state.lineIndent > nodeIndent) && (ch !== 0)) {\n      throwError(state, 'bad indentation of a sequence entry');\n    } else if (state.lineIndent < nodeIndent) {\n      break;\n    }\n  }\n\n  if (detected) {\n    state.tag = _tag;\n    state.anchor = _anchor;\n    state.kind = 'sequence';\n    state.result = _result;\n    return true;\n  }\n  return false;\n}\n\nfunction readBlockMapping(state, nodeIndent, flowIndent) {\n  var following,\n      allowCompact,\n      _line,\n      _tag          = state.tag,\n      _anchor       = state.anchor,\n      _result       = {},\n      overridableKeys = {},\n      keyTag        = null,\n      keyNode       = null,\n      valueNode     = null,\n      atExplicitKey = false,\n      detected      = false,\n      ch;\n\n  if (state.anchor !== null) {\n    state.anchorMap[state.anchor] = _result;\n  }\n\n  ch = state.input.charCodeAt(state.position);\n\n  while (ch !== 0) {\n    following = state.input.charCodeAt(state.position + 1);\n    _line = state.line; // Save the current line.\n\n    //\n    // Explicit notation case. There are two separate blocks:\n    // first for the key (denoted by \"?\") and second for the value (denoted by \":\")\n    //\n    if ((ch === 0x3F/* ? */ || ch === 0x3A/* : */) && is_WS_OR_EOL(following)) {\n\n      if (ch === 0x3F/* ? */) {\n        if (atExplicitKey) {\n          storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null);\n          keyTag = keyNode = valueNode = null;\n        }\n\n        detected = true;\n        atExplicitKey = true;\n        allowCompact = true;\n\n      } else if (atExplicitKey) {\n        // i.e. 0x3A/* : */ === character after the explicit key.\n        atExplicitKey = false;\n        allowCompact = true;\n\n      } else {\n        throwError(state, 'incomplete explicit mapping pair; a key node is missed');\n      }\n\n      state.position += 1;\n      ch = following;\n\n    //\n    // Implicit notation case. Flow-style node as the key first, then \":\", and the value.\n    //\n    } else if (composeNode(state, flowIndent, CONTEXT_FLOW_OUT, false, true)) {\n\n      if (state.line === _line) {\n        ch = state.input.charCodeAt(state.position);\n\n        while (is_WHITE_SPACE(ch)) {\n          ch = state.input.charCodeAt(++state.position);\n        }\n\n        if (ch === 0x3A/* : */) {\n          ch = state.input.charCodeAt(++state.position);\n\n          if (!is_WS_OR_EOL(ch)) {\n            throwError(state, 'a whitespace character is expected after the key-value separator within a block mapping');\n          }\n\n          if (atExplicitKey) {\n            storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null);\n            keyTag = keyNode = valueNode = null;\n          }\n\n          detected = true;\n          atExplicitKey = false;\n          allowCompact = false;\n          keyTag = state.tag;\n          keyNode = state.result;\n\n        } else if (detected) {\n          throwError(state, 'can not read an implicit mapping pair; a colon is missed');\n\n        } else {\n          state.tag = _tag;\n          state.anchor = _anchor;\n          return true; // Keep the result of `composeNode`.\n        }\n\n      } else if (detected) {\n        throwError(state, 'can not read a block mapping entry; a multiline key may not be an implicit key');\n\n      } else {\n        state.tag = _tag;\n        state.anchor = _anchor;\n        return true; // Keep the result of `composeNode`.\n      }\n\n    } else {\n      break; // Reading is done. Go to the epilogue.\n    }\n\n    //\n    // Common reading code for both explicit and implicit notations.\n    //\n    if (state.line === _line || state.lineIndent > nodeIndent) {\n      if (composeNode(state, nodeIndent, CONTEXT_BLOCK_OUT, true, allowCompact)) {\n        if (atExplicitKey) {\n          keyNode = state.result;\n        } else {\n          valueNode = state.result;\n        }\n      }\n\n      if (!atExplicitKey) {\n        storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode);\n        keyTag = keyNode = valueNode = null;\n      }\n\n      skipSeparationSpace(state, true, -1);\n      ch = state.input.charCodeAt(state.position);\n    }\n\n    if (state.lineIndent > nodeIndent && (ch !== 0)) {\n      throwError(state, 'bad indentation of a mapping entry');\n    } else if (state.lineIndent < nodeIndent) {\n      break;\n    }\n  }\n\n  //\n  // Epilogue.\n  //\n\n  // Special case: last mapping's node contains only the key in explicit notation.\n  if (atExplicitKey) {\n    storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null);\n  }\n\n  // Expose the resulting mapping.\n  if (detected) {\n    state.tag = _tag;\n    state.anchor = _anchor;\n    state.kind = 'mapping';\n    state.result = _result;\n  }\n\n  return detected;\n}\n\nfunction readTagProperty(state) {\n  var _position,\n      isVerbatim = false,\n      isNamed    = false,\n      tagHandle,\n      tagName,\n      ch;\n\n  ch = state.input.charCodeAt(state.position);\n\n  if (ch !== 0x21/* ! */) return false;\n\n  if (state.tag !== null) {\n    throwError(state, 'duplication of a tag property');\n  }\n\n  ch = state.input.charCodeAt(++state.position);\n\n  if (ch === 0x3C/* < */) {\n    isVerbatim = true;\n    ch = state.input.charCodeAt(++state.position);\n\n  } else if (ch === 0x21/* ! */) {\n    isNamed = true;\n    tagHandle = '!!';\n    ch = state.input.charCodeAt(++state.position);\n\n  } else {\n    tagHandle = '!';\n  }\n\n  _position = state.position;\n\n  if (isVerbatim) {\n    do { ch = state.input.charCodeAt(++state.position); }\n    while (ch !== 0 && ch !== 0x3E/* > */);\n\n    if (state.position < state.length) {\n      tagName = state.input.slice(_position, state.position);\n      ch = state.input.charCodeAt(++state.position);\n    } else {\n      throwError(state, 'unexpected end of the stream within a verbatim tag');\n    }\n  } else {\n    while (ch !== 0 && !is_WS_OR_EOL(ch)) {\n\n      if (ch === 0x21/* ! */) {\n        if (!isNamed) {\n          tagHandle = state.input.slice(_position - 1, state.position + 1);\n\n          if (!PATTERN_TAG_HANDLE.test(tagHandle)) {\n            throwError(state, 'named tag handle cannot contain such characters');\n          }\n\n          isNamed = true;\n          _position = state.position + 1;\n        } else {\n          throwError(state, 'tag suffix cannot contain exclamation marks');\n        }\n      }\n\n      ch = state.input.charCodeAt(++state.position);\n    }\n\n    tagName = state.input.slice(_position, state.position);\n\n    if (PATTERN_FLOW_INDICATORS.test(tagName)) {\n      throwError(state, 'tag suffix cannot contain flow indicator characters');\n    }\n  }\n\n  if (tagName && !PATTERN_TAG_URI.test(tagName)) {\n    throwError(state, 'tag name cannot contain such characters: ' + tagName);\n  }\n\n  if (isVerbatim) {\n    state.tag = tagName;\n\n  } else if (_hasOwnProperty.call(state.tagMap, tagHandle)) {\n    state.tag = state.tagMap[tagHandle] + tagName;\n\n  } else if (tagHandle === '!') {\n    state.tag = '!' + tagName;\n\n  } else if (tagHandle === '!!') {\n    state.tag = 'tag:yaml.org,2002:' + tagName;\n\n  } else {\n    throwError(state, 'undeclared tag handle \"' + tagHandle + '\"');\n  }\n\n  return true;\n}\n\nfunction readAnchorProperty(state) {\n  var _position,\n      ch;\n\n  ch = state.input.charCodeAt(state.position);\n\n  if (ch !== 0x26/* & */) return false;\n\n  if (state.anchor !== null) {\n    throwError(state, 'duplication of an anchor property');\n  }\n\n  ch = state.input.charCodeAt(++state.position);\n  _position = state.position;\n\n  while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) {\n    ch = state.input.charCodeAt(++state.position);\n  }\n\n  if (state.position === _position) {\n    throwError(state, 'name of an anchor node must contain at least one character');\n  }\n\n  state.anchor = state.input.slice(_position, state.position);\n  return true;\n}\n\nfunction readAlias(state) {\n  var _position, alias,\n      ch;\n\n  ch = state.input.charCodeAt(state.position);\n\n  if (ch !== 0x2A/* * */) return false;\n\n  ch = state.input.charCodeAt(++state.position);\n  _position = state.position;\n\n  while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) {\n    ch = state.input.charCodeAt(++state.position);\n  }\n\n  if (state.position === _position) {\n    throwError(state, 'name of an alias node must contain at least one character');\n  }\n\n  alias = state.input.slice(_position, state.position);\n\n  if (!state.anchorMap.hasOwnProperty(alias)) {\n    throwError(state, 'unidentified alias \"' + alias + '\"');\n  }\n\n  state.result = state.anchorMap[alias];\n  skipSeparationSpace(state, true, -1);\n  return true;\n}\n\nfunction composeNode(state, parentIndent, nodeContext, allowToSeek, allowCompact) {\n  var allowBlockStyles,\n      allowBlockScalars,\n      allowBlockCollections,\n      indentStatus = 1, // 1: this>parent, 0: this=parent, -1: this<parent\n      atNewLine  = false,\n      hasContent = false,\n      typeIndex,\n      typeQuantity,\n      type,\n      flowIndent,\n      blockIndent;\n\n  if (state.listener !== null) {\n    state.listener('open', state);\n  }\n\n  state.tag    = null;\n  state.anchor = null;\n  state.kind   = null;\n  state.result = null;\n\n  allowBlockStyles = allowBlockScalars = allowBlockCollections =\n    CONTEXT_BLOCK_OUT === nodeContext ||\n    CONTEXT_BLOCK_IN  === nodeContext;\n\n  if (allowToSeek) {\n    if (skipSeparationSpace(state, true, -1)) {\n      atNewLine = true;\n\n      if (state.lineIndent > parentIndent) {\n        indentStatus = 1;\n      } else if (state.lineIndent === parentIndent) {\n        indentStatus = 0;\n      } else if (state.lineIndent < parentIndent) {\n        indentStatus = -1;\n      }\n    }\n  }\n\n  if (indentStatus === 1) {\n    while (readTagProperty(state) || readAnchorProperty(state)) {\n      if (skipSeparationSpace(state, true, -1)) {\n        atNewLine = true;\n        allowBlockCollections = allowBlockStyles;\n\n        if (state.lineIndent > parentIndent) {\n          indentStatus = 1;\n        } else if (state.lineIndent === parentIndent) {\n          indentStatus = 0;\n        } else if (state.lineIndent < parentIndent) {\n          indentStatus = -1;\n        }\n      } else {\n        allowBlockCollections = false;\n      }\n    }\n  }\n\n  if (allowBlockCollections) {\n    allowBlockCollections = atNewLine || allowCompact;\n  }\n\n  if (indentStatus === 1 || CONTEXT_BLOCK_OUT === nodeContext) {\n    if (CONTEXT_FLOW_IN === nodeContext || CONTEXT_FLOW_OUT === nodeContext) {\n      flowIndent = parentIndent;\n    } else {\n      flowIndent = parentIndent + 1;\n    }\n\n    blockIndent = state.position - state.lineStart;\n\n    if (indentStatus === 1) {\n      if (allowBlockCollections &&\n          (readBlockSequence(state, blockIndent) ||\n           readBlockMapping(state, blockIndent, flowIndent)) ||\n          readFlowCollection(state, flowIndent)) {\n        hasContent = true;\n      } else {\n        if ((allowBlockScalars && readBlockScalar(state, flowIndent)) ||\n            readSingleQuotedScalar(state, flowIndent) ||\n            readDoubleQuotedScalar(state, flowIndent)) {\n          hasContent = true;\n\n        } else if (readAlias(state)) {\n          hasContent = true;\n\n          if (state.tag !== null || state.anchor !== null) {\n            throwError(state, 'alias node should not have any properties');\n          }\n\n        } else if (readPlainScalar(state, flowIndent, CONTEXT_FLOW_IN === nodeContext)) {\n          hasContent = true;\n\n          if (state.tag === null) {\n            state.tag = '?';\n          }\n        }\n\n        if (state.anchor !== null) {\n          state.anchorMap[state.anchor] = state.result;\n        }\n      }\n    } else if (indentStatus === 0) {\n      // Special case: block sequences are allowed to have same indentation level as the parent.\n      // http://www.yaml.org/spec/1.2/spec.html#id2799784\n      hasContent = allowBlockCollections && readBlockSequence(state, blockIndent);\n    }\n  }\n\n  if (state.tag !== null && state.tag !== '!') {\n    if (state.tag === '?') {\n      for (typeIndex = 0, typeQuantity = state.implicitTypes.length;\n           typeIndex < typeQuantity;\n           typeIndex += 1) {\n        type = state.implicitTypes[typeIndex];\n\n        // Implicit resolving is not allowed for non-scalar types, and '?'\n        // non-specific tag is only assigned to plain scalars. So, it isn't\n        // needed to check for 'kind' conformity.\n\n        if (type.resolve(state.result)) { // `state.result` updated in resolver if matched\n          state.result = type.construct(state.result);\n          state.tag = type.tag;\n          if (state.anchor !== null) {\n            state.anchorMap[state.anchor] = state.result;\n          }\n          break;\n        }\n      }\n    } else if (_hasOwnProperty.call(state.typeMap, state.tag)) {\n      type = state.typeMap[state.tag];\n\n      if (state.result !== null && type.kind !== state.kind) {\n        throwError(state, 'unacceptable node kind for !<' + state.tag + '> tag; it should be \"' + type.kind + '\", not \"' + state.kind + '\"');\n      }\n\n      if (!type.resolve(state.result)) { // `state.result` updated in resolver if matched\n        throwError(state, 'cannot resolve a node with !<' + state.tag + '> explicit tag');\n      } else {\n        state.result = type.construct(state.result);\n        if (state.anchor !== null) {\n          state.anchorMap[state.anchor] = state.result;\n        }\n      }\n    } else {\n      throwError(state, 'unknown tag !<' + state.tag + '>');\n    }\n  }\n\n  if (state.listener !== null) {\n    state.listener('close', state);\n  }\n  return state.tag !== null ||  state.anchor !== null || hasContent;\n}\n\nfunction readDocument(state) {\n  var documentStart = state.position,\n      _position,\n      directiveName,\n      directiveArgs,\n      hasDirectives = false,\n      ch;\n\n  state.version = null;\n  state.checkLineBreaks = state.legacy;\n  state.tagMap = {};\n  state.anchorMap = {};\n\n  while ((ch = state.input.charCodeAt(state.position)) !== 0) {\n    skipSeparationSpace(state, true, -1);\n\n    ch = state.input.charCodeAt(state.position);\n\n    if (state.lineIndent > 0 || ch !== 0x25/* % */) {\n      break;\n    }\n\n    hasDirectives = true;\n    ch = state.input.charCodeAt(++state.position);\n    _position = state.position;\n\n    while (ch !== 0 && !is_WS_OR_EOL(ch)) {\n      ch = state.input.charCodeAt(++state.position);\n    }\n\n    directiveName = state.input.slice(_position, state.position);\n    directiveArgs = [];\n\n    if (directiveName.length < 1) {\n      throwError(state, 'directive name must not be less than one character in length');\n    }\n\n    while (ch !== 0) {\n      while (is_WHITE_SPACE(ch)) {\n        ch = state.input.charCodeAt(++state.position);\n      }\n\n      if (ch === 0x23/* # */) {\n        do { ch = state.input.charCodeAt(++state.position); }\n        while (ch !== 0 && !is_EOL(ch));\n        break;\n      }\n\n      if (is_EOL(ch)) break;\n\n      _position = state.position;\n\n      while (ch !== 0 && !is_WS_OR_EOL(ch)) {\n        ch = state.input.charCodeAt(++state.position);\n      }\n\n      directiveArgs.push(state.input.slice(_position, state.position));\n    }\n\n    if (ch !== 0) readLineBreak(state);\n\n    if (_hasOwnProperty.call(directiveHandlers, directiveName)) {\n      directiveHandlers[directiveName](state, directiveName, directiveArgs);\n    } else {\n      throwWarning(state, 'unknown document directive \"' + directiveName + '\"');\n    }\n  }\n\n  skipSeparationSpace(state, true, -1);\n\n  if (state.lineIndent === 0 &&\n      state.input.charCodeAt(state.position)     === 0x2D/* - */ &&\n      state.input.charCodeAt(state.position + 1) === 0x2D/* - */ &&\n      state.input.charCodeAt(state.position + 2) === 0x2D/* - */) {\n    state.position += 3;\n    skipSeparationSpace(state, true, -1);\n\n  } else if (hasDirectives) {\n    throwError(state, 'directives end mark is expected');\n  }\n\n  composeNode(state, state.lineIndent - 1, CONTEXT_BLOCK_OUT, false, true);\n  skipSeparationSpace(state, true, -1);\n\n  if (state.checkLineBreaks &&\n      PATTERN_NON_ASCII_LINE_BREAKS.test(state.input.slice(documentStart, state.position))) {\n    throwWarning(state, 'non-ASCII line breaks are interpreted as content');\n  }\n\n  state.documents.push(state.result);\n\n  if (state.position === state.lineStart && testDocumentSeparator(state)) {\n\n    if (state.input.charCodeAt(state.position) === 0x2E/* . */) {\n      state.position += 3;\n      skipSeparationSpace(state, true, -1);\n    }\n    return;\n  }\n\n  if (state.position < (state.length - 1)) {\n    throwError(state, 'end of the stream or a document separator is expected');\n  } else {\n    return;\n  }\n}\n\n\nfunction loadDocuments(input, options) {\n  input = String(input);\n  options = options || {};\n\n  if (input.length !== 0) {\n\n    // Add tailing `\\n` if not exists\n    if (input.charCodeAt(input.length - 1) !== 0x0A/* LF */ &&\n        input.charCodeAt(input.length - 1) !== 0x0D/* CR */) {\n      input += '\\n';\n    }\n\n    // Strip BOM\n    if (input.charCodeAt(0) === 0xFEFF) {\n      input = input.slice(1);\n    }\n  }\n\n  var state = new State(input, options);\n\n  // Use 0 as string terminator. That significantly simplifies bounds check.\n  state.input += '\\0';\n\n  while (state.input.charCodeAt(state.position) === 0x20/* Space */) {\n    state.lineIndent += 1;\n    state.position += 1;\n  }\n\n  while (state.position < (state.length - 1)) {\n    readDocument(state);\n  }\n\n  return state.documents;\n}\n\n\nfunction loadAll(input, iterator, options) {\n  var documents = loadDocuments(input, options), index, length;\n\n  for (index = 0, length = documents.length; index < length; index += 1) {\n    iterator(documents[index]);\n  }\n}\n\n\nfunction load(input, options) {\n  var documents = loadDocuments(input, options);\n\n  if (documents.length === 0) {\n    /*eslint-disable no-undefined*/\n    return undefined;\n  } else if (documents.length === 1) {\n    return documents[0];\n  }\n  throw new YAMLException('expected a single document in the stream, but found more');\n}\n\n\nfunction safeLoadAll(input, output, options) {\n  loadAll(input, output, common.extend({ schema: DEFAULT_SAFE_SCHEMA }, options));\n}\n\n\nfunction safeLoad(input, options) {\n  return load(input, common.extend({ schema: DEFAULT_SAFE_SCHEMA }, options));\n}\n\n\nmodule.exports.loadAll     = loadAll;\nmodule.exports.load        = load;\nmodule.exports.safeLoadAll = safeLoadAll;\nmodule.exports.safeLoad    = safeLoad;\n","'use strict';\n\n\nvar loader = require('./js-yaml/loader');\n// var dumper = require('./js-yaml/dumper');\n\n\nfunction deprecated(name) {\n  return function () {\n    throw new Error('Function ' + name + ' is deprecated and cannot be used.');\n  };\n}\n\n\nmodule.exports.Type                = require('./js-yaml/type');\nmodule.exports.Schema              = require('./js-yaml/schema');\nmodule.exports.FAILSAFE_SCHEMA     = require('./js-yaml/schema/failsafe');\nmodule.exports.JSON_SCHEMA         = require('./js-yaml/schema/json');\nmodule.exports.CORE_SCHEMA         = require('./js-yaml/schema/core');\nmodule.exports.DEFAULT_SAFE_SCHEMA = require('./js-yaml/schema/default_safe');\nmodule.exports.DEFAULT_FULL_SCHEMA = require('./js-yaml/schema/default_full');\nmodule.exports.load                = loader.load;\nmodule.exports.loadAll             = loader.loadAll;\nmodule.exports.safeLoad            = loader.safeLoad;\nmodule.exports.safeLoadAll         = loader.safeLoadAll;\n// module.exports.dump                = dumper.dump;\n// module.exports.safeDump            = dumper.safeDump;\nmodule.exports.YAMLException       = require('./js-yaml/exception');\n\n// Deprecated schema names from JS-YAML 2.0.x\nmodule.exports.MINIMAL_SCHEMA = require('./js-yaml/schema/failsafe');\nmodule.exports.SAFE_SCHEMA    = require('./js-yaml/schema/default_safe');\nmodule.exports.DEFAULT_SCHEMA = require('./js-yaml/schema/default_full');\n\n// Deprecated functions from JS-YAML 1.x.x\nmodule.exports.scan           = deprecated('scan');\nmodule.exports.parse          = deprecated('parse');\nmodule.exports.compose        = deprecated('compose');\nmodule.exports.addConstructor = deprecated('addConstructor');\n","'use strict';\n\n\nvar yaml = require('./lib/js-yaml.js');\n\n\nmodule.exports = yaml;\n","import Utils from '../utils/utils';\nimport * as URLs from '../utils/urls';\nimport { isGlobalReference } from './globals';\n\nimport JSZip from 'jszip';\nimport yaml from 'js-yaml';\n\nexport class SceneBundle {\n\n    constructor(url, path, parent = null) {\n        this.url = url;\n\n        // If a base path was provided, use it for resolving local bundle resources only if\n        // the base path is absolute, or this bundle's path is relative\n        if (path && (!URLs.isRelativeURL(path) || URLs.isRelativeURL(this.url))) {\n            this.path = path;\n        }\n        else {\n            this.path = URLs.pathForURL(this.url);\n        }\n\n        this.path_for_parent = path || this.path; // for resolving paths relative to a parent bundle\n        this.parent = parent;\n\n        // An ancestor bundle may be a container (e.g. zip file) that needs to resolve relative paths\n        // for any scenes it contains, e.g. `root.zip` has a `root.yaml` that includes a `folder/child.yaml`:\n        // resources within `child.yaml` must be resolved through the bundle for `root.zip`\n        this.container = null;\n        if (this.parent) {\n            if (this.parent.container) {\n                this.container = this.parent.container;\n            }\n            else if (this.parent.isContainer()) {\n                this.container = this.parent;\n            }\n        }\n    }\n\n    load() {\n        return loadResource(this.url);\n    }\n\n    // Info for retrieving a specific resource from this bundle\n    // url: fully qualified URL to retrieve the content of the resource (e.g. zips will transform this to blob URL)\n    // path: original path of the resource within the bundle (for resolving paths up the bundle tree)\n    // type: file extension (used for determining bundle type, `yaml` or `zip`)\n    resourceFor(url) {\n        return {\n            url: this.urlFor(url),\n            path: this.pathFor(url),\n            type: this.typeFor(url)\n        };\n    }\n\n    urlFor(url) {\n        if (isGlobalReference(url)) {\n            return url;\n        }\n\n        if (URLs.isRelativeURL(url) && this.container) {\n            return this.parent.urlFor(this.path_for_parent + url);\n        }\n        return URLs.addBaseURL(url, this.path);\n    }\n\n    pathFor(url) {\n        return URLs.pathForURL(url);\n    }\n\n    typeFor(url) {\n        return URLs.extensionForURL(url);\n    }\n\n    isContainer() {\n        return false;\n    }\n\n}\n\nexport class ZipSceneBundle extends SceneBundle {\n\n    constructor(url, path, parent) {\n        super(url, path, parent);\n        this.zip = null;\n        this.files = {};\n        this.root = null;\n        this.path = '';\n    }\n\n    isContainer() {\n        return true;\n    }\n\n    async load() {\n        this.zip = new JSZip();\n\n        if (typeof this.url === 'string') {\n            const { body } = await Utils.io(this.url, 60000, 'arraybuffer');\n            await this.zip.loadAsync(body);\n            await this.parseZipFiles();\n            return this.loadRoot();\n        } else {\n            return this;\n        }\n    }\n\n    urlFor(url) {\n        if (isGlobalReference(url)) {\n            return url;\n        }\n\n        if (URLs.isRelativeURL(url)) {\n            return this.urlForZipFile(URLs.flattenRelativeURL(url));\n        }\n        return super.urlFor(url);\n    }\n\n    typeFor(url) {\n        if (URLs.isRelativeURL(url)) {\n            return this.typeForZipFile(url);\n        }\n        return super.typeFor(url);\n    }\n\n    loadRoot() {\n        this.findRoot();\n        return loadResource(this.urlForZipFile(this.root));\n    }\n\n    findRoot() {\n        // There must be a single YAML file at the top level of the zip\n        const yamls = Object.keys(this.files)\n            .filter(path => this.files[path].depth === 0)\n            .filter(path => URLs.extensionForURL(path) === 'yaml');\n\n        if (yamls.length === 1) {\n            this.root = yamls[0];\n        }\n\n        // No root found\n        if (!this.root) {\n            let msg = `Could not find root scene for bundle '${this.url}': `;\n            msg += 'The zip archive\\'s root level must contain a single scene file with the \\'.yaml\\' extension. ';\n            if (yamls.length > 0) {\n                msg += `Found multiple YAML files at the root level: ${yamls.map(r => '\\'' + r + '\\'' ).join(', ')}.`;\n            }\n            else {\n                msg += 'Found NO YAML files at the root level.';\n            }\n            throw Error(msg);\n        }\n    }\n\n    async parseZipFiles() {\n        let paths = [];\n        let queue = [];\n        this.zip.forEach((path, file) => {\n            if (!file.dir) {\n                paths.push(path);\n                queue.push(file.async('arraybuffer'));\n            }\n        });\n\n        const data = await Promise.all(queue);\n        for (let i = 0; i < data.length; i++) {\n            let path = paths[i];\n            let depth = path.split('/').length - 1;\n            this.files[path] = {\n                data: data[i],\n                type: URLs.extensionForURL(path),\n                depth\n            };\n        }\n    }\n\n    urlForZipFile(file) {\n        if (this.files[file]) {\n            if (!this.files[file].url) {\n                this.files[file].url = URLs.createObjectURL(new Blob([this.files[file].data]));\n            }\n\n            return this.files[file].url;\n        }\n    }\n\n    typeForZipFile(file) {\n        return this.files[file] && this.files[file].type;\n    }\n\n}\n\nexport function createSceneBundle(url, path, parent, type = null) {\n    if ((type != null && type === 'zip') ||\n        (typeof url === 'string' && !URLs.isLocalURL(url) && URLs.extensionForURL(url) === 'zip')) {\n        return new ZipSceneBundle(url, path, parent);\n    }\n    return new SceneBundle(url, path, parent);\n}\n\nfunction parseResource (body) {\n    // jsyaml 'json' option allows duplicate keys\n    // Keeping this for backwards compatibility, but should consider migrating to requiring\n    // unique keys, as this is YAML spec. But Tangram ES currently accepts dupe keys as well,\n    // so should consider how best to unify.\n    return yaml.safeLoad(body, { json: true });\n}\n\nfunction loadResource (source) {\n    return new Promise((resolve, reject) => {\n        if (typeof source === 'string') {\n            Utils.io(source).then(({ body }) => {\n                try {\n                    resolve(parseResource(body));\n                }\n                catch(e) {\n                    reject(e);\n                }\n            }, reject);\n        } else {\n            // shallow copy to avoid modifying provided object, allowing a single config object to be loaded multiple times\n            // TODO: address possible modifications to nested properties (mostly harmless / due to data normalization)\n            source = Object.assign({}, source);\n            resolve(source);\n        }\n    });\n}\n","import log from '../utils/log';\nimport GLSL from '../gl/glsl';\nimport * as URLs from '../utils/urls';\nimport mergeObjects from '../utils/merge';\nimport subscribeMixin from '../utils/subscribe';\nimport { getPropertyPath, setPropertyPath } from '../utils/props';\nimport { flattenGlobalProperties, applyGlobalProperties, isGlobalSubstitution } from './globals';\nimport { createSceneBundle } from './scene_bundle';\nimport { isReserved } from '../styles/layer';\n\nconst SceneLoader = {\n\n    // Load scenes definitions from URL & proprocess\n    async loadScene(url, { path, type } = {}) {\n        const errors = [];\n        const texture_nodes = {};\n        const scene = await this.loadSceneRecursive({ url, path, type }, null, texture_nodes, errors);\n        const { config, bundle } = this.finalize(scene);\n        if (!config) {\n            // root scene failed to load, reject with first error\n            throw errors[0];\n        }\n        else if (errors.length > 0) {\n            // scene loaded, but some imports had errors\n            errors.forEach(error => {\n                const message = `Failed to import scene: ${error.url}`;\n                log('error', message, error);\n                this.trigger('error', { type: 'scene_import', message, error, url: error.url });\n            });\n        }\n        return { config, bundle, texture_nodes };\n    },\n\n    // Loads scene files from URL, recursively loading 'import' scenes\n    // Optional *initial* path only (won't be passed to recursive 'import' calls)\n    // Useful for loading resources in base scene file from a separate location\n    // (e.g. in Tangram Play, when modified local scene should still refer to original resource URLs)\n    async loadSceneRecursive({ url, path, type }, parent, texture_nodes = {}, errors = []) {\n        if (!url) {\n            return {};\n        }\n\n        const bundle = createSceneBundle(url, path, parent, type);\n\n        try {\n            let config = await bundle.load();\n            if (config.import == null) {\n                this.normalize(config, bundle, texture_nodes);\n                return { config, bundle };\n            }\n\n            // accept single entry or array\n            if (!Array.isArray(config.import)) {\n                config.import = [config.import]; // convert to array\n            }\n\n            // Collect URLs of scenes to import\n            const imports = [];\n            config.import.forEach(url => {\n                // Convert scene objects to URLs\n                if (typeof url === 'object') {\n                    url = URLs.createObjectURL(new Blob([JSON.stringify(url)]));\n                }\n                imports.push(bundle.resourceFor(url));\n            });\n            delete config.import; // don't want to merge this property\n\n            // load and normalize imports\n            const queue = imports.map(resource => this.loadSceneRecursive(resource, bundle, texture_nodes, errors));\n            const configs = (await Promise.all(queue))\n                .map(r => this.normalize(r.config, r.bundle, texture_nodes))\n                .map(r => r.config);\n\n            this.normalize(config, bundle, texture_nodes); // last normalize parent\n            config = mergeObjects(...configs, config);\n            return { config, bundle, texture_nodes };\n        }\n        catch (error) {\n            // Collect scene load errors as we go\n            error.url = url;\n            errors.push(error);\n            return {};\n        }\n    },\n\n    // Normalize properties that should be adjust within each local scene file (usually by path)\n    normalize(config, bundle, texture_nodes = {}) {\n        this.normalizeDataSources(config, bundle);\n        this.normalizeFonts(config, bundle);\n        this.normalizeTextures(config, bundle);\n        this.collectTextures(config, bundle, texture_nodes);\n        return { config, bundle, texture_nodes };\n    },\n\n    // Expand paths for data source\n    normalizeDataSources(config, bundle) {\n        config.sources = config.sources || {};\n\n        for (const sn in config.sources) {\n            this.normalizeDataSource(config.sources[sn], bundle);\n        }\n\n        return config;\n    },\n\n    normalizeDataSource(source, bundle) {\n        source.url = bundle.urlFor(source.url);\n\n        // composite untiled raster sources\n        if (Array.isArray(source.composite)) {\n            source.composite.forEach(c => c.url = bundle.urlFor(c.url));\n        }\n\n        // custom scripts\n        if (source.scripts) {\n            // convert legacy array-style scripts to object format (script URL is used as both key and value)\n            if (Array.isArray(source.scripts)) {\n                source.scripts = source.scripts.reduce((val, cur) => { val[cur] = cur; return val; }, {});\n            }\n\n            // resolve URLs for external scripts\n            for (const s in source.scripts) {\n                source.scripts[s] = bundle.urlFor(source.scripts[s]);\n            }\n        }\n\n        return source;\n    },\n\n    // Expand paths for fonts\n    normalizeFonts(config, bundle) {\n        config.fonts = config.fonts || {};\n\n        // Add scene base path for URL-based fonts (skip \"external\" fonts referencing CSS-loaded resources)\n        const fonts = Object.values(config.fonts).filter(face => face !== 'external');\n        for (const face of fonts) {\n            const faces = (Array.isArray(face) ? face : [face]); // can be single value or array\n            faces.forEach(face => face.url = bundle.urlFor(face.url));\n        }\n\n        return config;\n    },\n\n    // Expand paths and centralize texture definitions for a scene object\n    normalizeTextures(config, bundle) {\n        config.textures = config.textures || {};\n\n        // Add current scene's base path to globally defined textures\n        // Only adds path for textures with relative URLs, so textures in imported scenes get the base\n        // path of their immediate scene file\n        if (config.textures) {\n            for (const tn in config.textures) {\n                const texture = config.textures[tn];\n                if (texture.url) {\n                    texture.url = bundle.urlFor(texture.url);\n                }\n            }\n        }\n    },\n\n    // Move inline (URL string) textures to the scene's top-level set of textures (config.textures).\n    // There are 4 such cases of textures:\n    // - in a style's `texture` property\n    // - in a style's `material` properties\n    // - in a style's custom uniforms (`shaders.uniforms`)\n    // - in a draw groups `texture` property\n    collectTextures(config, bundle, texture_nodes) {\n        // Inline textures in styles\n        if (config.styles) {\n            for (const sn in config.styles) {\n                const style = config.styles[sn];\n\n                // Style `texture`\n                const tex = style.texture;\n                if (typeof tex === 'string' && !config.textures[tex]) {\n                    const path = ['styles', sn, 'texture'];\n                    this.addTextureNode(path, bundle, texture_nodes);\n                }\n\n                // Material\n                if (style.material) {\n                    ['emission', 'ambient', 'diffuse', 'specular', 'normal'].forEach(prop => {\n                        // Material property has a texture\n                        const tex = style.material[prop] != null && style.material[prop].texture;\n                        if (typeof tex === 'string' && !config.textures[tex]) {\n                            const path = ['styles', sn, 'material', prop, 'texture'];\n                            this.addTextureNode(path, bundle, texture_nodes);\n                        }\n                    });\n                }\n            }\n        }\n\n        // Inline textures in shader uniforms\n        if (config.styles) {\n            for (const sn in config.styles) {\n                const style = config.styles[sn];\n\n                if (style.shaders && style.shaders.uniforms) {\n                    GLSL.parseUniforms(style.shaders.uniforms).forEach(({ type, value, path }) => {\n                        // Texture by URL (string-named texture not referencing existing texture definition)\n                        if (type === 'sampler2D' && typeof value === 'string' && !config.textures[value]) {\n                            const texture_path = ['styles', sn, 'shaders', 'uniforms', ...path];\n                            this.addTextureNode(texture_path, bundle, texture_nodes);\n                        }\n                    });\n                }\n            }\n        }\n\n        // Inline textures in draw blocks\n        if (config.layers) {\n            const stack = [config.layers];\n            const path_stack = [['layers']];\n            while (stack.length > 0) {\n                const layer = stack.pop();\n                const layer_path = path_stack.pop();\n\n                // only recurse into objects\n                if (typeof layer !== 'object' || Array.isArray(layer)) {\n                    continue;\n                }\n\n                for (const prop in layer) {\n                    if (prop === 'draw') { // process draw groups for current layer\n                        const draws = layer[prop];\n                        for (const group in draws) {\n                            if (draws[group].texture) {\n                                const tex = draws[group].texture;\n                                if (typeof tex === 'string' && !config.textures[tex]) {\n                                    const path = [...layer_path, prop, 'draw', group, 'texture'];\n                                    this.addTextureNode(path, bundle, texture_nodes);\n                                }\n                            }\n\n                            // special handling for outlines :(\n                            if (draws[group].outline && draws[group].outline.texture) {\n                                const tex = draws[group].outline.texture;\n                                if (typeof tex === 'string' && !config.textures[tex]) {\n                                    const path = [...layer_path, prop, 'draw', group, 'outline', 'texture'];\n                                    this.addTextureNode(path, bundle, texture_nodes);\n                                }\n                            }\n                        }\n\n                    }\n                    else if (isReserved(prop)) {\n                        continue; // skip reserved keyword\n                    }\n                    else {\n                        stack.push(layer[prop]); // traverse sublayer\n                        path_stack.push([...layer_path, prop]);\n                    }\n                }\n            }\n        }\n    },\n\n    addTextureNode (path, bundle, texture_nodes) {\n        const pathKey = JSON.stringify(path);\n        texture_nodes[pathKey] = {\n            path,\n            bundle\n        };\n    },\n\n    // Hoist any remaining inline texture nodes that don't have a corresponding named texture\n    // base_bundle is the bundle for the root scene, for resolving textures from global properties\n    hoistTextureNodes (config, base_bundle, texture_nodes = {}) {\n        for(const { path, bundle } of Object.values(texture_nodes)) {\n            const curValue = getPropertyPath(config, path);\n\n            // Make sure current property values is a string to account for global property substitutions\n            // e.g. shader uniforms are ambiguous, could be replaced with string value indicating texture,\n            // but could also be a float, an array indicating vector, etc.\n            if (typeof curValue === 'string' && config.textures[curValue] == null) {\n                if (isGlobalSubstitution(config, path)) {\n                    // global substituions are resolved against the base scene path, not the import they came from\n                    const url = base_bundle.urlFor(curValue);\n                    config.textures[curValue] = { url };\n                }\n                else {\n                    // non-global textures are resolved against the import they came from\n                    const url = bundle.urlFor(curValue);\n                    config.textures[url] = { url };\n                    setPropertyPath(config, path, url);\n                }\n            }\n        }\n    },\n\n    // Substitutes global scene properties (those defined in the `config.global` object) for any style values\n    // of the form `global.`, for example `color: global.park_color` would be replaced with the value (if any)\n    // defined for the `park_color` property in `config.global.park_color`.\n    applyGlobalProperties(config) {\n        if (!config.global || Object.keys(config.global).length === 0) {\n            return config; // no global properties to transform\n        }\n\n        const globals = flattenGlobalProperties(config.global); // flatten nested globals for simpler string look-ups\n        return applyGlobalProperties(globals, config);\n    },\n\n    // Normalize some scene-wide settings that apply to the final, merged scene\n    finalize({ config, bundle }) {\n        if (!config) {\n            return {};\n        }\n\n        // Ensure top-level properties\n        config.global = config.global || {};\n        config.scene = config.scene || {};\n        config.cameras = config.cameras || {};\n        config.lights = config.lights || {};\n        config.styles = config.styles || {};\n        config.layers = config.layers || {};\n\n        // If only one camera specified, set it as default\n        if (config.camera) {\n            config.cameras.default = config.camera;\n        }\n\n        // If no cameras specified, create one\n        if (Object.keys(config.cameras).length === 0) {\n            config.cameras.default = {};\n        }\n\n        // If no lights specified, create default\n        if (Object.keys(config.lights).length === 0 ||\n            Object.keys(config.lights).every(i => config.lights[i].visible === false)) {\n            config.lights.default_light = {\n                type: 'directional'\n            };\n        }\n\n        return { config, bundle };\n    }\n\n};\n\nsubscribeMixin(SceneLoader);\n\nexport default SceneLoader;\n","import {TileID} from './tile_id';\n\nexport default class TilePyramid {\n\n    constructor() {\n        this.tiles = {};\n        this.max_proxy_descendant_depth = 6; // # of levels to search up/down for proxy tiles\n        this.max_proxy_ancestor_depth = 7;\n        this.children_cache = {}; // cache for children of coordinates\n    }\n\n    addTile(tile) {\n        // Add target tile\n        this.tiles[tile.key] = this.tiles[tile.key] || { descendants: 0 };\n        this.tiles[tile.key].tile = tile;\n\n        // Add to parents\n        while (tile.style_z >= 0) {\n            tile = TileID.parent(tile);\n            if (!tile) {\n                return;\n            }\n\n            if (!this.tiles[tile.key]) {\n                this.tiles[tile.key] = { descendants: 0 };\n            }\n            this.tiles[tile.key].descendants++;\n        }\n    }\n\n    removeTile(tile) {\n        // Remove target tile\n        if (this.tiles[tile.key]) {\n            delete this.tiles[tile.key].tile;\n\n            if (this.tiles[tile.key].descendants === 0) {\n                delete this.tiles[tile.key]; // remove whole tile in tree\n            }\n        }\n\n        // Decrement reference count up the tile pyramid\n        while (tile.style_z >= 0) {\n            tile = TileID.parent(tile);\n            if (!tile) {\n                return;\n            }\n\n            if (this.tiles[tile.key] && this.tiles[tile.key].descendants > 0) {\n                this.tiles[tile.key].descendants--;\n                if (this.tiles[tile.key].descendants === 0 && !this.tiles[tile.key].tile) {\n                    delete this.tiles[tile.key]; // remove whole tile in tree\n                }\n            }\n        }\n    }\n\n    // Find the parent tile for a given tile and style zoom level\n    getAncestor (tile) {\n        let level = 0;\n        while (level < this.max_proxy_ancestor_depth) {\n            tile = TileID.parent(tile);\n            if (!tile) {\n                return;\n            }\n\n            if (this.tiles[tile.key] &&\n                this.tiles[tile.key].tile &&\n                this.tiles[tile.key].tile.loaded) {\n                return this.tiles[tile.key].tile;\n            }\n\n            level++;\n        }\n    }\n\n    // Find the descendant tiles for a given tile and style zoom level\n    getDescendants (tile, level = 0) {\n        let descendants = [];\n        if (level < this.max_proxy_descendant_depth) {\n            let tiles = TileID.children(tile, this.children_cache);\n            if (!tiles) {\n                return;\n            }\n\n            tiles.forEach(t => {\n                if (this.tiles[t.key]) {\n                    if (this.tiles[t.key].tile &&\n                        this.tiles[t.key].tile.loaded) {\n                        descendants.push(this.tiles[t.key].tile);\n                    }\n                    else if (this.tiles[t.key].descendants > 0) { // didn't find any children, try next level\n                        descendants.push(...this.getDescendants(t, level + 1));\n                    }\n                }\n            });\n        }\n\n        return descendants;\n    }\n\n}\n","import Label from './label';\nimport LabelPoint from './label_point';\nimport {LabelLineStraight} from './label_line';\nimport Collision from './collision';\nimport OBB from '../utils/obb';\nimport Geo from '../utils/geo';\n\nlet visible = {};       // currently visible labels\nlet prev_visible = {};  // previously visible labels (in last collision run)\n\nexport default async function mainThreadLabelCollisionPass (tiles, view_zoom, hide_breach = false) {\n    // Swap/reset visible label set\n    prev_visible = visible; // save last visible label set\n    visible = {};           // initialize new visible label set\n\n    // Build label containers from tiles\n    let containers = buildLabels(tiles, view_zoom);\n\n    // Collide all labels in a single group\n    // TODO: maybe rename tile and style to group/subgroup?\n    Collision.startTile('main', { apply_repeat_groups: true, return_hidden: true });\n    Collision.addStyle('main', 'main');\n\n    // Adaptive collision grid, using a heuristic based on the tile with the most labels\n    const max_tile_label_count =\n        Math.max(0, ...Object.values(tiles)\n            .map(t => Object.values(t.meshes))\n            .flat()\n            .map(meshes => Math.max(0, ...meshes.map(mesh => mesh.labels ? Object.keys(mesh.labels).length : 0)))\n        );\n\n    const grid_divs = Math.floor(max_tile_label_count / Geo.tile_size); // heuristic of label density to tile size\n    if (grid_divs > 0) {\n        Collision.initGrid({\n            anchor: { x: Math.min(...tiles.map(t => t.min.x)), y: Math.min(...tiles.map(t => t.min.y)) },\n            span: tiles[0].span.x / grid_divs\n        });\n    }\n    else {\n        Collision.initGrid();\n    }\n\n    const labels = await Collision.collide(containers, 'main', 'main');\n\n    // Update label visiblity\n    let meshes = [];\n    labels.forEach(container => {\n        // Hide breach labels (those that cross tile boundaries) while tiles are loading, unless they\n        // were previously visible (otherwise fully loaded/collided breach labels will flicker in and out\n        // when new tiles load, even if they aren't adjacent)\n        let show = 0;\n        if (container.show === true &&\n            (!hide_breach || !container.label.breach || prev_visible[container.label.id])) {\n            show = 1;\n        }\n\n        if (show) {\n            visible[container.label.id] = true; // track visible labels\n        }\n\n        let changed = true; // check if label visibility changed on this collision pass\n\n        container.ranges.forEach(r => {\n            if (!changed) {\n                return; // skip rest of label if state hasn't changed\n            }\n\n            let mesh = container.mesh;\n            if (!mesh.valid) {\n                return;\n            }\n\n            let off = mesh.vertex_layout.offset.a_shape; // byte offset (within each vertex) of attribute\n            let stride = mesh.vertex_layout.stride;      // byte stride per vertex\n\n            for (let i=0; i < r[1]; i++) {\n                // NB: +6 is because attribute is a short int (2 bytes each), and we're skipping to 3rd element, 6=3*2\n                if (mesh.vertex_data[r[0] + i * stride + off + 6] === show) {\n                    changed = false;\n                    return; // label hasn't changed states, skip further updates\n                }\n                mesh.vertex_data[r[0] + i * stride + off + 6] = show;\n            }\n\n            if (meshes.indexOf(mesh) === -1) {\n                meshes.push(mesh);\n            }\n        });\n    });\n\n    // Upload updated meshes and make them visible\n    meshes.forEach(mesh => mesh.upload());\n    tiles.forEach(t => t.swapPendingLabels());\n\n    return { labels, containers }; // currently returned for debugging\n}\n\nfunction buildLabels (tiles, view_zoom) {\n    const labels = {};\n    let containers = {};\n\n    // Collect labels from each tile and turn into new label instances\n    tiles.forEach(tile => {\n        const units_per_meter = Geo.unitsPerMeter(tile.coords.z); // scale from tile units to mercator meters\n        const zoom_scale = Math.pow(2, view_zoom - tile.style_z); // adjust label size by view zoom\n        const size_scale = units_per_meter * zoom_scale; // scale from tile units to zoom-adjusted meters\n        const meters_per_pixel = Geo.metersPerPixel(view_zoom);\n\n        // First pass: create label instances and centralize collision containers\n        // Combine existing (previously collided) and pending (waiting to be collided for first time) meshes\n        const tile_meshes = Object.assign({}, tile.meshes, tile.pending_label_meshes);\n        for (let style in tile_meshes) {\n            const meshes = tile_meshes[style];\n            meshes.forEach(mesh => {\n                if (mesh.labels) {\n                    for (let label_id in mesh.labels) {\n                        // For proxy tiles, only allow visible labels to be *hidden* by further collisions,\n                        // don't allow new ones to appear. Promotes label stability and prevents thrash\n                        // from different labels (often not thematically relevant given the different zoom level of\n                        // the proxy tile content, e.g. random POIs popping in/out when zooming out to city-wide view).\n                        if (tile.isProxy() && !prev_visible[label_id]) {\n                            continue;\n                        }\n\n                        const params = mesh.labels[label_id].container.label;\n                        const linked = mesh.labels[label_id].container.linked;\n                        const ranges = mesh.labels[label_id].ranges;\n                        // const debug = Object.assign({}, mesh.labels[label_id].debug, { tile, params, label_id });\n\n                        let label = labels[label_id] = {};\n                        label.discard = discard.bind(label);\n                        label.build_id = tile.build_id; // original order in which tiles were built\n\n                        Object.assign(label, params);\n                        label.layout = Object.assign({}, params.layout); // TODO: ideally remove need to copy props here\n                        label.layout.repeat_scale = 0.75; // looser second pass on repeat groups, to weed out repeats near tile edges\n                        label.layout.repeat_distance = label.layout.repeat_distance || 0;\n                        label.layout.repeat_distance /= size_scale; // TODO: where should this be scaled?\n                        label.position = [ // don't overwrite referenced values\n                            label.position[0] / units_per_meter + tile.min.x,\n                            label.position[1] / units_per_meter + tile.min.y\n                        ];\n                        label.unit_scale = meters_per_pixel;\n\n                        if (label.type === 'point') { // TODO: move to integer constants to avoid excess string copies\n                            LabelPoint.prototype.updateBBoxes.call(label);\n                        }\n                        else if (label.type === 'straight') {\n                            LabelLineStraight.prototype.updateBBoxes.call(label, label.position, label.size, label.angle, label.angle, label.offset);\n                        }\n                        else if (params.obbs) {\n                            // NB: this is a very rough approximation of curved label collision at intermediate zooms,\n                            // because the position/scale of each collision box isn't correctly updated; however,\n                            // it's good enough to provide some additional label coverage, with less overhead\n                            const obbs = params.obbs.map(o => {\n                                let { x, y, a, w, h } = o;\n                                x = x / units_per_meter + tile.min.x;\n                                y = y / units_per_meter + tile.min.y;\n                                w /= size_scale;\n                                h /= size_scale;\n                                return new OBB(x, y, a, w, h);\n                            });\n                            label.obbs = obbs;\n                            label.aabbs = obbs.map(o => o.getExtent());\n                        }\n\n                        containers[label_id] = {\n                            label,\n                            linked,\n                            ranges,\n                            mesh,\n                            // debug\n                        };\n                    }\n                }\n            });\n        }\n    });\n\n    // Resolve links between label containers\n    for (let c in containers) {\n        const container = containers[c];\n        if (container.linked) {\n            container.linked = containers[container.linked];\n        }\n        // NB: if linked label not found, it was discarded in initial tile collision pass\n    }\n\n    // Convert container map to array\n    containers = Object.keys(containers).map(k => containers[k]);\n    return containers;\n}\n\n// Generic discard function for labels, does simple occlusion with one or more bounding boxes\n// (no additional logic to try alternate anchors or other layout options, etc.)\nfunction discard (bboxes, exclude = null) {\n    if (this.obb) { // single collision box\n        return Label.prototype.occluded.call(this, bboxes, exclude);\n    }\n    else if (this.obbs) { // mutliple collision boxes\n        for (let i = 0; i < this.obbs.length; i++){\n            let aabb = this.aabbs[i];\n            let obb = this.obbs[i];\n            let obj = { aabb, obb };\n\n            let should_discard = Label.prototype.occluded.call(obj, bboxes, exclude);\n            if (should_discard) {\n                return true;\n            }\n        }\n    }\n    return false;\n}\n","import Tile from './tile';\nimport {TileID} from './tile_id';\nimport TilePyramid from './tile_pyramid';\nimport Geo from '../utils/geo';\nimport mainThreadLabelCollisionPass from '../labels/main_pass';\nimport log from '../utils/log';\nimport WorkerBroker from '../utils/worker_broker';\nimport Task from '../utils/task';\n\nexport default class TileManager {\n\n    constructor({ scene }) {\n        this.scene = scene;\n        this.tiles = {};\n        this.pyramid = new TilePyramid();\n        this.visible_coords = {};\n        this.queued_coords = [];\n        this.building_tiles = null;\n        this.renderable_tiles = [];\n        this.collision = {\n            tile_keys: null,\n            mesh_set: null,\n            zoom: null,\n            zoom_steps: 3 // divisions per zoom at which labels are re-collided (e.g. 0, 0.33, 0.66)\n        };\n\n        // Provide a hook for this object to be called from worker threads\n        this.main_thread_target = ['TileManager', this.scene.id].join('_');\n        WorkerBroker.addTarget(this.main_thread_target, this);\n    }\n\n    destroy() {\n        this.forEachTile(tile => tile.destroy());\n        this.tiles = {};\n        this.pyramid = null;\n        this.visible_coords = {};\n        this.queued_coords = [];\n        this.scene = null;\n        WorkerBroker.removeTarget(this.main_thread_target);\n    }\n\n    get view () {\n        return this.scene.view;\n    }\n\n    get style_manager () {\n        return this.scene.style_manager;\n    }\n\n    keepTile(tile) {\n        this.tiles[tile.key] = tile;\n        this.pyramid.addTile(tile);\n    }\n\n    hasTile(key) {\n        return this.tiles[key] !== undefined;\n    }\n\n    forgetTile(key) {\n        if (this.hasTile(key)) {\n            let tile = this.tiles[key];\n            this.pyramid.removeTile(tile);\n        }\n\n        delete this.tiles[key];\n        this.tileBuildStop(key);\n    }\n\n    // Remove a single tile\n    removeTile(key) {\n        log('trace', `tile unload for ${key}`);\n\n        var tile = this.tiles[key];\n\n        if (tile != null) {\n            tile.destroy();\n        }\n\n        this.forgetTile(tile.key);\n        this.scene.requestRedraw();\n    }\n\n    // Run a function on each tile\n    forEachTile(func) {\n        for (let t in this.tiles) {\n            func(this.tiles[t]);\n        }\n    }\n\n    // Remove tiles that pass a filter condition\n    removeTiles(filter) {\n        let remove_tiles = [];\n        for (let t in this.tiles) {\n            let tile = this.tiles[t];\n            if (filter(tile)) {\n                remove_tiles.push(t);\n            }\n        }\n        for (let r=0; r < remove_tiles.length; r++) {\n            let key = remove_tiles[r];\n            this.removeTile(key);\n        }\n    }\n\n    updateTilesForView() {\n        // Find visible tiles and load new ones\n        this.visible_coords = {};\n        let tile_coords = this.view.findVisibleTileCoordinates();\n        for (let c=0; c < tile_coords.length; c++) {\n            const coords = tile_coords[c];\n            this.queueCoordinate(coords);\n            this.visible_coords[coords.key] = coords;\n        }\n\n        this.updateTileStates();\n    }\n\n    updateTileStates () {\n        this.forEachTile(tile => {\n            this.updateVisibility(tile);\n        });\n\n        this.loadQueuedCoordinates();\n        this.updateProxyTiles();\n        this.view.pruneTilesForView();\n        this.updateRenderableTiles();\n        this.style_manager.updateActiveStyles(this.renderable_tiles);\n        this.style_manager.updateActiveBlendOrders(this.renderable_tiles);\n        return this.updateLabels();\n    }\n\n    updateLabels () {\n        if (this.scene.building && !this.scene.building.initial) {\n            // log('debug', `Skip label layout due to on-going scene rebuild`);\n            return Promise.resolve({});\n        }\n\n        // get current visible tiles and sort by key for consistency collision order\n        const tiles = this.renderable_tiles\n            .filter(t => t.valid)\n            .filter(t => t.built);\n\n        if (tiles.length === 0) {\n            return Promise.resolve({});\n        }\n\n        // Evaluate labels in order of tile build, to prevent previously visible labels\n        // from disappearing, e.g. due to a newly loaded repeat label nearby\n        tiles.sort((a, b) => a.build_id < b.build_id ? -1 : (a.build_id > b.build_id ? 1 : 0));\n\n        // check if tile set has changed (in ways that affect collision)\n        // if not, bail so that the existing collision task can carry on\n        // if so, carry on and start a new collision task\n        if (// 1st: check if same zoom level (rounded to a configurable precision)\n            this.collision.zoom === roundPrecision(this.view.zoom, this.collision.zoom_steps) &&\n            // 2nd: check if same set of tiles\n            this.collision.tile_keys === JSON.stringify(tiles.map(t => t.key)) &&\n            // 3rd: check if same set of meshes\n            this.collision.mesh_set === meshSetString(tiles)) {\n            // log('debug', `Skip label layout due to same tile/meshes (zoom ${this.view.zoom.toFixed(2)}, tiles ${this.collision.tile_keys})`);\n            return Promise.resolve({});\n        }\n\n        // update collision if not already updating\n        if (!this.collision.task) {\n            this.collision.zoom = roundPrecision(this.view.zoom, this.collision.zoom_steps);\n            this.collision.tile_keys = JSON.stringify(tiles.map(t => t.key));\n            this.collision.mesh_set = meshSetString(tiles);\n            // log('debug', `Update label collisions (zoom ${this.collision.zoom}, ${this.collision.tile_keys})`);\n\n            // make a new collision task\n            this.collision.task = {\n                type: 'tileManagerUpdateLabels',\n                run: async task => {\n                    // Do collision pass, then update view\n                    const results = await mainThreadLabelCollisionPass(tiles, this.collision.zoom, this.isLoadingVisibleTiles());\n                    this.scene.requestRedraw();\n\n                    // Clear state to allow another collision pass to start\n                    this.collision.task = null;\n                    Task.finish(task, results);\n\n                    // Check if tiles changed during previous collision pass - will start new pass if so\n                    this.updateTileStates();\n                },\n                immediate: true\n            };\n            Task.add(this.collision.task);\n        }\n        // else {\n        //     log('debug', `Skip label layout due to on-going layout (zoom ${this.view.zoom.toFixed(2)}, tiles ${this.collision.tile_keys})`);\n        // }\n        return this.collision.task.promise;\n    }\n\n    updateProxyTiles () {\n        if (this.view.zoom_direction === 0) {\n            return;\n        }\n\n        // Clear previous proxies\n        this.forEachTile(tile => tile.setProxyFor(null));\n\n        let proxy = false;\n        this.forEachTile(tile => {\n            if (tile.visible && !tile.labeled) {\n                const parent = this.pyramid.getAncestor(tile);\n                if (parent) {\n                    parent.setProxyFor(tile);\n                    proxy = true;\n                } else {\n                    const descendants = this.pyramid.getDescendants(tile);\n                    for (let i=0; i < descendants.length; i++) {\n                        descendants[i].setProxyFor(tile);\n                        proxy = true;\n                    }\n                }\n            }\n        });\n\n        if (!proxy) {\n            this.view.zoom_direction = 0;\n        }\n    }\n\n    updateVisibility(tile) {\n        tile.visible = false;\n        if (tile.style_z === this.view.tile_zoom) {\n            if (this.visible_coords[tile.coords.key]) {\n                tile.visible = true;\n            }\n            else {\n                // brute force\n                for (let key in this.visible_coords) {\n                    if (TileID.isDescendant(tile.coords, this.visible_coords[key])) {\n                        tile.visible = true;\n                        break;\n                    }\n                }\n            }\n        }\n    }\n\n    // Remove tiles that aren't visible, and flag remaining visible ones to be updated (for loading, proxy, etc.)\n    pruneToVisibleTiles () {\n        this.removeTiles(tile => !tile.visible);\n    }\n\n    getRenderableTiles () {\n        return this.renderable_tiles;\n    }\n\n    updateRenderableTiles() {\n        this.renderable_tiles = [];\n        for (let t in this.tiles) {\n            let tile = this.tiles[t];\n            if (tile.visible && tile.loaded) {\n                this.renderable_tiles.push(tile);\n            }\n        }\n        return this.renderable_tiles;\n    }\n\n    isLoadingVisibleTiles () {\n        return Object.keys(this.tiles).some(k => this.tiles[k].visible && !this.tiles[k].built);\n    }\n\n    allVisibleTilesLabeled () {\n        return this.renderable_tiles.every(t => t.labeled);\n    }\n\n    // Queue a tile for load\n    queueCoordinate(coords) {\n        this.queued_coords[this.queued_coords.length] = coords;\n    }\n\n    // Load all queued tiles\n    loadQueuedCoordinates() {\n        if (this.queued_coords.length === 0) {\n            return;\n        }\n\n        // Sort queued tiles from center tile\n        this.queued_coords.sort((a, b) => {\n            let center = this.view.center.meters;\n            let half_span = Geo.metersPerTile(a.z) / 2;\n\n            let ac = Geo.metersForTile(a);\n            ac.x += half_span;\n            ac.y -= half_span;\n\n            let bc = Geo.metersForTile(b);\n            bc.x += half_span;\n            bc.y -= half_span;\n\n            let ad = Math.abs(center.x - ac.x) + Math.abs(center.y - ac.y);\n            let bd = Math.abs(center.x - bc.x) + Math.abs(center.y - bc.y);\n\n            a.center_dist = ad;\n            b.center_dist = bd;\n\n            return (bd > ad ? -1 : (bd === ad ? 0 : 1));\n        });\n        this.queued_coords.forEach(coords => this.loadCoordinate(coords));\n        this.queued_coords = [];\n    }\n\n    // Load all tiles to cover a given logical tile coordinate\n    loadCoordinate(coords) {\n        // Skip if not at current scene zoom\n        if (coords.z !== this.view.center.tile.z) {\n            return;\n        }\n\n        // Determine necessary tiles for each source\n        for (let s in this.scene.sources) {\n            let source = this.scene.sources[s];\n            // Check if data source should build this tile\n            if (!source.builds_geometry_tiles || !source.includesTile(coords, this.view.tile_zoom)) {\n                continue;\n            }\n\n            let key = TileID.normalizedKey(coords, source, this.view.tile_zoom);\n            if (key && !this.hasTile(key)) {\n                log('trace', `load tile ${key}, distance from view center: ${coords.center_dist}`);\n                let tile = new Tile({\n                    source,\n                    coords,\n                    workers: this.scene.workers,\n                    style_z: this.view.baseZoom(coords.z),\n                    view: this.view\n                });\n\n                this.keepTile(tile);\n                this.buildTile(tile);\n            }\n        }\n    }\n\n    // Start tile build process\n    buildTile(tile, options) {\n        this.tileBuildStart(tile.key);\n        this.updateVisibility(tile);\n        tile.build(this.scene.generation, options);\n    }\n\n    // Called on main thread when a web worker completes processing for a single tile (initial load, or rebuild)\n    buildTileStylesCompleted({ tile, progress }) {\n        // Removed this tile during load?\n        if (this.tiles[tile.key] == null) {\n            log('trace', `discarded tile ${tile.key} in TileManager.buildTileStylesCompleted because previously removed`);\n            Tile.abortBuild(tile);\n            this.updateTileStates();\n        }\n        // Built with an outdated scene configuration?\n        else if (tile.generation !== this.scene.generation) {\n            log('trace', `discarded tile ${tile.key} in TileManager.buildTileStylesCompleted because built with ` +\n                `scene config gen ${tile.generation}, current ${this.scene.generation}`);\n            Tile.abortBuild(tile);\n            this.updateTileStates();\n        }\n        else {\n            // Update tile with properties from worker\n            if (this.tiles[tile.key]) {\n                // Ignore if from a previously discarded tile\n                if (tile.id < this.tiles[tile.key].id) {\n                    log('trace', `discarded tile ${tile.key} for id ${tile.id} in TileManager.buildTileStylesCompleted because built for discarded tile id`);\n                    Tile.abortBuild(tile);\n                    return;\n                }\n\n                tile = this.tiles[tile.key].merge(tile);\n            }\n\n            if (progress.done) {\n                tile.built = true;\n            }\n\n            tile.buildMeshes(this.scene.styles, progress);\n            this.updateTileStates();\n            this.scene.requestRedraw();\n        }\n\n        if (progress.done) {\n            this.tileBuildStop(tile.key);\n        }\n    }\n\n    // Called on main thread when web worker encounters an error building a tile\n    buildTileError(tile) {\n        log('error', `Error building tile ${tile.key}:`, tile.error);\n        this.forgetTile(tile.key);\n        Tile.abortBuild(tile);\n    }\n\n    // Track tile build state\n    tileBuildStart(key) {\n        this.building_tiles = this.building_tiles || {};\n        this.building_tiles[key] = true;\n        log('trace', `tileBuildStart for ${key}: ${Object.keys(this.building_tiles).length}`);\n    }\n\n    tileBuildStop(key) {\n        // Done building?\n        if (this.building_tiles) {\n            log('trace', `tileBuildStop for ${key}: ${Object.keys(this.building_tiles).length}`);\n            delete this.building_tiles[key];\n            this.checkBuildQueue();\n        }\n    }\n\n    // Check status of tile building queue and notify scene when we're done\n    checkBuildQueue() {\n        if (!this.building_tiles || Object.keys(this.building_tiles).length === 0) {\n            this.building_tiles = null;\n            this.scene.tileManagerBuildDone();\n        }\n    }\n\n    // Get a debug property across tiles\n    getDebugProp(prop, filter) {\n        var vals = [];\n        for (var t in this.tiles) {\n            if (this.tiles[t].debug[prop] != null && (typeof filter !== 'function' || filter(this.tiles[t]) === true)) {\n                vals.push(this.tiles[t].debug[prop]);\n            }\n        }\n        return vals;\n    }\n\n    // Sum of a debug property across tiles\n    getDebugSum(prop, filter) {\n        var sum = 0;\n        for (var t in this.tiles) {\n            if (this.tiles[t].debug[prop] != null && (typeof filter !== 'function' || filter(this.tiles[t]) === true)) {\n                sum += this.tiles[t].debug[prop];\n            }\n        }\n        return sum;\n    }\n\n    // Average of a debug property across tiles\n    getDebugAverage(prop, filter) {\n        return this.getDebugSum(prop, filter) / Object.keys(this.tiles).length;\n    }\n\n}\n\n// Round a number to given number of decimal divisions\n// e.g. roundPrecision(x, 4) rounds a number to increments of 0.25\nfunction roundPrecision (x, d, places = 2) {\n    return (Math.floor(x * d) / d).toFixed(places);\n}\n\n// Create a string representing the current set of meshes for a given set of tiles,\n// based on their created timestamp. Used to determine when tiles should be re-collided.\nfunction meshSetString (tiles) {\n    return JSON.stringify(\n        Object.entries(tiles).map(([,t]) => {\n            return Object.entries(t.meshes).map(([,s]) => {\n                return s.map(m => m.created_at);\n            });\n        })\n    );\n}\n","\nexport class RenderState {\n    constructor (value, setup) {\n        setup(value);\n        this.value = value;\n        this.setup = setup;\n    }\n\n    set (value) {\n        // if the states are different, call the GL context for a state change\n        if (JSON.stringify(this.value) !== JSON.stringify(value)) {\n            this.setup(value);\n            this.value = value;\n        }\n    }\n}\n\nexport default class RenderStateManager {\n\n    constructor (gl) {\n        this.defaults = {};\n\n        // Culling\n        this.defaults.culling = true;\n        this.defaults.culling_face = gl.BACK;\n\n        // Blending\n        this.defaults.blending = false;\n        this.defaults.blending_src = gl.ONE_MINUS_SRC_ALPHA;\n        this.defaults.blending_dst = gl.ONE_MINUS_SRC_ALPHA;\n        this.defaults.blending_src_alpha = gl.ONE;\n        this.defaults.blending_dst_alpha = gl.ONE_MINUS_SRC_ALPHA;\n\n        // Depth test/write\n        this.defaults.depth_write = true;\n        this.defaults.depth_test = true;\n        gl.depthFunc(gl.LESS); // depth function only needs to be set once\n\n        // Culling\n        this.culling = new RenderState(\n            { cull: this.defaults.culling, face: this.defaults.culling_face },\n            (value) => {\n                if (value.cull) {\n                    gl.enable(gl.CULL_FACE);\n                    gl.cullFace(value.face);\n                } else {\n                    gl.disable(gl.CULL_FACE);\n                }\n            }\n        );\n\n        // Blending mode\n        this.blending = new RenderState({\n            blend: this.defaults.blending,\n            src: this.defaults.blending_src,\n            dst: this.defaults.blending_dst,\n            src_alpha: this.defaults.blending_src_alpha,\n            dst_alpha: this.defaults.blending_dst_alpha\n        },\n        (value) => {\n            if (value.blend) {\n                gl.enable(gl.BLEND);\n\n                if (value.src_alpha && value.dst_alpha) {\n                    gl.blendFuncSeparate(value.src, value.dst, value.src_alpha, value.dst_alpha);\n                }\n                else {\n                    gl.blendFunc(value.src, value.dst);\n                }\n            } else {\n                gl.disable(gl.BLEND);\n            }\n        }\n        );\n\n        // Depth write\n        this.depth_write = new RenderState(\n            { depth_write: this.defaults.depth_write },\n            (value) => {\n                gl.depthMask(value.depth_write);\n            }\n        );\n\n        // Depth test\n        this.depth_test = new RenderState(\n            { depth_test: this.defaults.depth_test },\n            (value) => {\n                if (value.depth_test) {\n                    gl.enable(gl.DEPTH_TEST);\n                } else {\n                    gl.disable(gl.DEPTH_TEST);\n                }\n            }\n        );\n\n    }\n\n}\n","import log from './log';\nimport {createObjectURL} from './urls';\nimport StyleParser from '../styles/style_parser';\n\nexport default class MediaCapture {\n\n    constructor() {\n        this.canvas = null;\n        this.gl = null;\n        this.screenshot_canvas = null;\n        this.screenshot_context = null;\n        this.queue_screenshot = null;\n        this.video_capture = null;\n    }\n\n    setCanvas (canvas, gl) {\n        this.canvas = canvas;\n        this.gl = gl;\n    }\n\n    // Take a screenshot, returns a promise that resolves with the screenshot data when available\n    // `background`: optional background color to blend screenshot with\n    screenshot ({ background } = {}) {\n        if (this.queue_screenshot != null) {\n            return this.queue_screenshot.promise; // only capture one screenshot at a time\n        }\n\n        // Will resolve once rendering is complete and render buffer is captured\n        this.queue_screenshot = { background };\n        this.queue_screenshot.promise = new Promise((resolve, reject) => {\n            this.queue_screenshot.resolve = resolve;\n            this.queue_screenshot.reject = reject;\n        });\n        return this.queue_screenshot.promise;\n    }\n\n    // Called after rendering, captures render buffer and resolves promise with the image data\n    completeScreenshot () {\n        if (this.queue_screenshot != null) {\n            // Firefox appears to have an issue where its alpha conversion overflows some channels when\n            // the WebGL canvas content is captured. To get around this, we read pixels from the GL buffer\n            // directly, then flip and unmulitply the alpha on each pixel to get the desired RGB values.\n            // See https://github.com/tangrams/tangram/issues/551\n\n            // Get raw pixels from GL\n            let w = this.canvas.width;\n            let h = this.canvas.height;\n            let pixels = new Uint8Array(w * h * 4);\n            this.gl.readPixels(0, 0, w, h, this.gl.RGBA, this.gl.UNSIGNED_BYTE, pixels);\n\n            // Optional background to blend with (only RGB, alpha is ignored)\n            let background = this.queue_screenshot.background;\n            if (background && background !== 'transparent') {\n                background = StyleParser.parseColor(background).slice(0, 3).map(c => c * 255);\n            }\n            else {\n                background = null; // skip blend if transparent\n            }\n\n            // Flip Y (GL buffer is upside down)\n            let flip = new Uint8ClampedArray(w * h * 4);    // canvas requires 'clamped' array type\n            for (let y=0; y < h; y++) {\n                for (let x=0; x < w; x++) {\n                    let s = ((h - y - 1) * w + x) * 4;      // source offset\n                    let d = (y * w + x) * 4;                // destination offset\n                    let a = pixels[s + 3];                  // unmultiply alpha\n                    flip[d + 0] = pixels[s + 0] * 255 / a;\n                    flip[d + 1] = pixels[s + 1] * 255 / a;\n                    flip[d + 2] = pixels[s + 2] * 255 / a;\n                    flip[d + 3] = a;\n\n                    if (background) {\n                        a /= 255;\n                        flip[d + 0] = (flip[d + 0] * a) + (background[0] * (1 - a));\n                        flip[d + 1] = (flip[d + 1] * a) + (background[1] * (1 - a));\n                        flip[d + 2] = (flip[d + 2] * a) + (background[2] * (1 - a));\n                        flip[d + 3] = 255;\n                    }\n                }\n            }\n\n            // Draw flipped pixels to a canvas\n            this.screenshot_canvas = this.screenshot_canvas || document.createElement('canvas');\n            let canvas = this.screenshot_canvas;\n            canvas.width = w;\n            canvas.height = h;\n\n            this.screenshot_context = this.screenshot_context || canvas.getContext('2d');\n            let ctx = this.screenshot_context;\n            let image = new ImageData(flip, w, h);\n            ctx.putImageData(image, 0, 0);\n\n            // Get data URL from canvas and convert to blob\n            // Strip host/mimetype/etc., convert base64 to binary without UTF-8 mangling\n            // Adapted from: https://gist.github.com/unconed/4370822\n            const url = canvas.toDataURL('image/png');\n            const data = atob(url.slice(22));\n            const buffer = new Uint8Array(data.length);\n            for (let i = 0; i < data.length; ++i) {\n                buffer[i] = data.charCodeAt(i);\n            }\n            const blob = new Blob([buffer], { type: 'image/png' });\n\n            // Resolve with screenshot data\n            this.queue_screenshot.resolve({ url, blob, type: 'png' });\n            this.queue_screenshot = null;\n        }\n    }\n\n    // Starts capturing a video stream from the canvas\n    startVideoCapture () {\n        if (typeof window.MediaRecorder !== 'function' || !this.canvas || typeof this.canvas.captureStream !== 'function') {\n            log('warn', 'Video capture (Canvas.captureStream and/or MediaRecorder APIs) not supported by browser');\n            return false;\n        }\n        else if (this.video_capture) {\n            log('warn', 'Video capture already in progress, call Scene.stopVideoCapture() first');\n            return false;\n        }\n\n        // Start a new capture\n        try {\n            let cap = this.video_capture = {};\n            cap.chunks = [];\n            cap.stream = this.canvas.captureStream();\n            cap.options = { mimeType: 'video/webm' }; // TODO: support other format options\n            cap.media_recorder = new MediaRecorder(cap.stream, cap.options);\n            cap.media_recorder.ondataavailable = (event) => {\n                if (event.data.size > 0) {\n                    cap.chunks.push(event.data);\n                }\n\n                // Stopped recording? Create the final capture file blob\n                if (cap.resolve) {\n                    let blob = new Blob(cap.chunks, { type: cap.options.mimeType });\n                    let url = createObjectURL(blob);\n\n                    // Explicitly remove all stream tracks, and set objects to null\n                    if (cap.stream) {\n                        let tracks = cap.stream.getTracks() || [];\n                        tracks.forEach(track => {\n                            track.stop();\n                            cap.stream.removeTrack(track);\n                        });\n                    }\n                    cap.stream = null;\n                    cap.media_recorder = null;\n                    this.video_capture = null;\n\n                    cap.resolve({ url, blob, type: 'webm' });\n                }\n            };\n            cap.media_recorder.start();\n        }\n        catch (e) {\n            this.video_capture = null;\n            log('error', 'Scene video capture failed', e);\n            return false;\n        }\n        return true;\n    }\n\n    // Stops capturing a video stream from the canvas, returns a promise that resolves with the video when available\n    stopVideoCapture () {\n        if (!this.video_capture) {\n            log('warn', 'No scene video capture in progress, call Scene.startVideoCapture() first');\n            return Promise.resolve({});\n        }\n\n        // Promise that will resolve when final stream is available\n        this.video_capture.promise = new Promise((resolve, reject) => {\n            this.video_capture.resolve = resolve;\n            this.video_capture.reject = reject;\n        });\n\n        // Stop recording\n        this.video_capture.media_recorder.stop();\n\n        return this.video_capture.promise;\n    }\n\n}\n","import log from '../utils/log';\nimport WorkerBroker from '../utils/worker_broker';\nimport debugSettings from '../utils/debug_settings';\nimport { debugSumLayerStats } from '../tile/tile';\nimport Texture from '../gl/texture';\n\n// Debug config and functions\nexport default function setupSceneDebug (scene) {\n    scene.debug = {\n        // Profile helpers, issues a profile on main thread & all workers\n        profile(name) {\n            console.profile(`main thread: ${name}`); // eslint-disable-line no-console\n            WorkerBroker.postMessage(scene.workers, 'self.profile', name);\n        },\n\n        profileEnd(name) {\n            console.profileEnd(`main thread: ${name}`); // eslint-disable-line no-console\n            WorkerBroker.postMessage(scene.workers, 'self.profileEnd', name);\n        },\n\n        // Rebuild geometry a given # of times and print average, min, max timings\n        timeRebuild (num = 1, options = {}) {\n            let times = [];\n            let cycle = () => {\n                let start = +new Date();\n                scene.rebuild(options).then(() => {\n                    times.push(+new Date() - start);\n\n                    if (times.length < num) {\n                        cycle();\n                    }\n                    else {\n                        let avg = ~~(times.reduce((a, b) => a + b) / times.length);\n                        log('info', `Profiled rebuild ${num} times: ${avg} avg (${Math.min(...times)} min, ${Math.max(...times)} max)`);\n                    }\n                });\n            };\n            cycle();\n        },\n\n        // Return geometry counts of visible tiles, grouped by style name\n        geometryCountByStyle () {\n            let counts = {};\n            scene.tile_manager.getRenderableTiles().forEach(tile => {\n                for (let style in tile.meshes) {\n                    counts[style] = counts[style] || 0;\n                    tile.meshes[style].forEach(mesh => {\n                        counts[style] += mesh.geometry_count;\n                    });\n                }\n            });\n            return counts;\n        },\n\n        // Return geometry counts of visible tiles, grouped by base style name\n        geometryCountByBaseStyle () {\n            let style_counts = scene.debug.geometryCountByStyle();\n            let counts = {};\n            for (let style in style_counts) {\n                let base = scene.styles[style].baseStyle();\n                counts[base] = counts[base] || 0;\n                counts[base] += style_counts[style];\n            }\n            return counts;\n        },\n\n        // Return sum of all geometry counts for visible tiles\n        geometryCountTotal () {\n            const styles = scene.debug.geometryCountByStyle();\n            return Object.keys(styles).reduce((p, c) => styles[c] + p, 0);\n        },\n\n        // Return geometry GL buffer sizes for visible tiles, grouped by style name\n        geometrySizeByStyle () {\n            let sizes = {};\n            scene.tile_manager.getRenderableTiles().forEach(tile => {\n                for (let style in tile.meshes) {\n                    sizes[style] = sizes[style] || 0;\n                    tile.meshes[style].forEach(mesh => {\n                        sizes[style] += mesh.buffer_size;\n                    });\n                }\n            });\n            return sizes;\n        },\n\n        // Return geometry GL buffer sizes for visible tiles, grouped by base style name\n        geometrySizeByBaseStyle () {\n            let style_sizes = scene.debug.geometrySizeByStyle();\n            let sizes = {};\n            for (let style in style_sizes) {\n                let base = scene.styles[style].baseStyle();\n                sizes[base] = sizes[base] || 0;\n                sizes[base] += style_sizes[style];\n            }\n            return sizes;\n        },\n\n        // Return sum of all geometry GL buffer sizes for visible tiles\n        geometrySizeTotal () {\n            const styles = scene.debug.geometrySizeByStyle();\n            return Object.keys(styles).reduce((p, c) => styles[c] + p, 0);\n        },\n\n        // Return sum of all texture memory usage\n        textureSizeTotal() {\n            return Object.values(Texture.textures).map(t => t.byteSize()).reduce((p, c) => p + c);\n        },\n\n        layerStats () {\n            if (debugSettings.layer_stats) {\n                return debugSumLayerStats(scene.tile_manager.getRenderableTiles());\n            }\n            else {\n                log('warn', 'Enable the \\'layer_stats\\' debug setting to collect layer stats');\n                return {};\n            }\n        },\n\n        renderableTilesCount () {\n            return scene.tile_manager.getRenderableTiles().length;\n        }\n    };\n}\n","import log from '../utils/log';\nimport Utils from '../utils/utils';\nimport debugSettings from '../utils/debug_settings';\nimport * as URLs from '../utils/urls';\nimport WorkerBroker from '../utils/worker_broker';\nimport Task from '../utils/task';\nimport subscribeMixin from '../utils/subscribe';\nimport sliceObject from '../utils/slice';\nimport Context from '../gl/context';\nimport Texture from '../gl/texture';\nimport ShaderProgram from '../gl/shader_program';\nimport VertexArrayObject from '../gl/vao';\nimport {StyleManager} from '../styles/style_manager';\nimport {Style} from '../styles/style';\nimport StyleParser from '../styles/style_parser';\nimport SceneLoader from './scene_loader';\nimport View from './view';\nimport Light from '../lights/light';\nimport TileManager from '../tile/tile_manager';\nimport DataSource from '../sources/data_source';\nimport '../sources/sources';\nimport FeatureSelection from '../selection/selection';\nimport RenderStateManager from '../gl/render_state';\nimport TextCanvas from '../styles/text/text_canvas';\nimport FontManager from '../styles/text/font_manager';\nimport MediaCapture from '../utils/media_capture';\nimport setupSceneDebug from './scene_debug';\n\n// Load scene definition: pass an object directly, or a URL as string to load remotely\nexport default class Scene {\n\n    constructor(config_source, options) {\n        options = options || {};\n        subscribeMixin(this);\n\n        this.id = Scene.id++;\n        this.initialized = false;\n        this.initializing = null; // will be a promise that resolves when scene is loaded\n        this.sources = {};\n\n        this.view = new View(this, options);\n        this.tile_manager = new TileManager({ scene: this });\n        this.num_workers = options.numWorkers || 2;\n        if (options.disableVertexArrayObjects === true) {\n            VertexArrayObject.disabled = true;\n        }\n\n        Utils.use_high_density_display = options.highDensityDisplay !== undefined ? options.highDensityDisplay : true;\n        Utils.updateDevicePixelRatio();\n\n        this.config = null;\n        this.config_source = config_source;\n        this.config_bundle = null;\n        this.last_valid_config_source = null;\n\n        this.styles = null;\n        this.style_manager = new StyleManager();\n\n        this.building = null;                           // tracks current scene building state (tiles being built, etc.)\n        this.dirty = true;                              // request a redraw\n\n        if (options.preUpdate){\n            // optional pre-render loop hook\n            this.subscribe({'pre_update': options.preUpdate});\n        }\n\n        if (options.postUpdate){\n            // optional post-render loop hook\n            this.subscribe({'post_update': options.postUpdate});\n        }\n\n        this.render_loop = !options.disableRenderLoop;  // disable render loop - app will have to manually call Scene.render() per frame\n        this.render_loop_active = false;\n        this.render_loop_stop = false;\n        this.render_count = 0;\n        this.last_render_count = 0;\n        this.render_count_changed = false;\n        this.frame = 0;\n        this.last_main_render = -1;         // frame counter for last main render pass\n        this.last_selection_render = -1;    // frame counter for last selection render pass\n        this.media_capture = new MediaCapture();\n        this.selection = null;\n        this.selection_feature_count = 0;\n        this.fetching_selection_map = null;\n        this.prev_textures = null; // textures from previously loaded scene (used for cleanup)\n        this.introspection = (options.introspection === true) ? true : false;\n        this.times = {}; // internal time logs (mostly for dev/profiling)\n        this.resetTime();\n\n        this.container = options.container;\n        this.canvas = null;\n        this.contextOptions = options.webGLContextOptions;\n\n        this.lights = null;\n        this.background = null;\n\n        this.createListeners();\n        this.updating = 0;\n        this.generation = Scene.generation; // an id that is incremented each time the scene config is invalidated\n        this.last_complete_generation = Scene.generation; // last generation id with a complete view\n        setupSceneDebug(this);\n\n        this.log_level = options.logLevel || 'warn';\n        log.setLevel(this.log_level);\n        log.reset();\n    }\n\n    static create (config, options = {}) {\n        return new Scene(config, options);\n    }\n\n    // Load scene (or reload existing scene if no new source specified)\n    // Options:\n    //   `base_path`: base URL against which scene resources should be resolved (useful for Play) (default nulll)\n    //   `blocking`: should rendering block on scene load completion (default true)\n    load (config_source = null, options = {}) {\n        if (this.initializing) {\n            return this.initializing;\n        }\n        log.reset();\n\n        this.updating++;\n        this.initialized = false;\n        this.view_complete = false; // track if a view complete event has been triggered yet\n        this.times.frame = null; // clear first frame time\n        this.times.build = null; // clear first scene build time\n\n        // Backwards compatibilty for passing `base_path` string as second argument\n        // (since transitioned to using options argument to accept more parameters)\n        options = (typeof options === 'string') ? { base_path: options } : options;\n\n        // Should rendering block on load (not desirable for initial load, often desired for live style-switching)\n        options.blocking = (options.blocking !== undefined) ? options.blocking : true;\n\n        if (this.render_loop !== false) {\n            this.setupRenderLoop();\n        }\n\n        // Load scene definition (sources, styles, etc.), then create styles & workers\n        this.createCanvas();\n        this.prev_textures = this.config && Object.keys(this.config.textures); // save textures from last scene\n        this.initializing = this.loadScene(config_source, options)\n            .then(async ({ texture_nodes }) => {\n                await this.createWorkers();\n\n                // Clean up resources from prior scene\n                this.destroyFeatureSelection();\n                WorkerBroker.postMessage(this.workers, 'self.clearFunctionStringCache');\n\n                // Scene loaded from a JS object, or modified by a `load` event, may contain compiled JS functions\n                // which need to be serialized, while one loaded only from a URL does not.\n                const serialize_funcs = ((typeof this.config_source === 'object') || this.hasSubscribersFor('load'));\n\n                const updating = this.updateConfig({\n                    texture_nodes,\n                    serialize_funcs,\n                    normalize: false,\n                    loading: true,\n                    fade_in: true });\n\n                if (options.blocking === true) {\n                    await updating;\n                }\n\n                this.freePreviousTextures();\n                this.updating--;\n                this.initializing = null;\n                this.initialized = true;\n                this.last_valid_config_source = this.config_source;\n                this.last_valid_options = { base_path: options.base_path, file_type: options.file_type };\n\n                this.requestRedraw();\n            }).catch(error => {\n                this.initializing = null;\n                this.updating = 0;\n\n                // Report and revert to last valid config if available\n                let type, message;\n                if (error.name === 'YAMLException') {\n                    type = 'yaml';\n                    message = 'Error parsing scene YAML';\n                }\n                else {\n                // TODO: more error types\n                    message = 'Error initializing scene';\n                }\n                this.trigger('error', { type, message, error, url: this.config_source });\n\n                message = `Scene.load() failed to load ${JSON.stringify(this.config_source)}: ${error.message}`;\n                if (this.last_valid_config_source) {\n                    log('warn', message, error);\n                    log('info', 'Scene.load() reverting to last valid configuration');\n                    return this.load(this.last_valid_config_source, this.last_valid_base_path);\n                }\n                log('error', message, error);\n                throw error;\n            });\n\n        return this.initializing;\n    }\n\n    destroy() {\n        this.initialized = false;\n        this.render_loop_stop = true; // schedule render loop to stop\n\n        this.destroyListeners();\n        this.destroyFeatureSelection();\n\n        if (this.canvas && this.canvas.parentNode) {\n            this.canvas.parentNode.removeChild(this.canvas);\n            this.canvas = null;\n        }\n        this.container = null;\n\n        if (this.gl) {\n            Texture.destroy(this.gl);\n            this.style_manager.destroy(this.gl);\n            this.styles = {};\n\n            ShaderProgram.reset();\n\n            // Force context loss\n            let ext = this.gl.getExtension('WEBGL_lose_context');\n            if (ext) {\n                ext.loseContext();\n            }\n\n            this.gl = null;\n        }\n\n        this.sources = {};\n\n        this.destroyWorkers();\n        this.tile_manager.destroy();\n        this.tile_manager = null;\n        log.reset();\n    }\n\n    createCanvas() {\n        if (this.canvas) {\n            return;\n        }\n\n        this.container = this.container || document.body;\n        this.canvas = document.createElement('canvas');\n        this.canvas.style.position = 'absolute';\n        this.canvas.style.top = 0;\n        this.canvas.style.left = 0;\n\n        // Force tangram canvas underneath all leaflet layers, and set background to transparent\n        this.container.style.backgroundColor = 'transparent';\n        this.container.appendChild(this.canvas);\n\n        try {\n            this.gl = Context.getContext(this.canvas, Object.assign({\n                alpha: true, premultipliedAlpha: true,\n                stencil: true,\n                device_pixel_ratio: Utils.device_pixel_ratio,\n                powerPreference: 'high-performance'\n            }, this.contextOptions));\n        }\n        catch(e) {\n            throw new Error(\n                'Couldn\\'t create WebGL context. ' +\n                'Your browser may not support WebGL, or it\\'s turned off? ' +\n                'Visit http://webglreport.com/ for more info.'\n            );\n        }\n\n        this.resizeMap(this.container.clientWidth, this.container.clientHeight);\n        VertexArrayObject.init(this.gl);\n        this.render_states = new RenderStateManager(this.gl);\n        this.media_capture.setCanvas(this.canvas, this.gl);\n    }\n\n    // Update list of any custom scripts (either at scene-level or data-source-level)\n    updateExternalScripts () {\n        let prev_scripts = [...(this.external_scripts||[])]; // save list of previously loaded scripts\n        let scripts = [];\n\n        // scene-level scripts\n        if (this.config.scene.scripts) {\n            for (let f in this.config.scene.scripts) {\n                if (scripts.indexOf(this.config.scene.scripts[f]) === -1) {\n                    scripts.push(this.config.scene.scripts[f]);\n                }\n            }\n        }\n\n        // data-source-level scripts\n        for (let s in this.config.sources) {\n            let source = this.config.sources[s];\n            if (source.scripts) {\n                for (let f in source.scripts) {\n                    if (scripts.indexOf(source.scripts[f]) === -1) {\n                        scripts.push(source.scripts[f]);\n                    }\n                }\n            }\n        }\n\n        this.external_scripts = scripts;\n\n        // Scripts changed?\n        return !(this.external_scripts.length === prev_scripts.length &&\n            this.external_scripts.every((v, i) => v === prev_scripts[i]));\n    }\n\n    // Web workers handle heavy duty tile construction: networking, geometry processing, etc.\n    createWorkers() {\n        // Reset old workers (if any) if we need to re-instantiate with new external scripts\n        if (this.updateExternalScripts()) {\n            this.destroyWorkers();\n        }\n\n        if (!this.workers) {\n            return this.makeWorkers();\n        }\n        return Promise.resolve();\n    }\n\n    // Instantiate workers from URL, init event handlers\n    makeWorkers() {\n        // Let VertexElements know if 32 bit indices for element arrays are available\n        let has_element_index_uint = this.gl.getExtension('OES_element_index_uint') ? true : false;\n\n        let queue = [];\n        this.workers = [];\n        for (let id=0; id < this.num_workers; id++) {\n            let worker = new Worker(Tangram.workerURL); // eslint-disable-line no-undef\n            this.workers[id] = worker;\n\n            WorkerBroker.addWorker(worker);\n\n            log('debug', `Scene.makeWorkers: initializing worker ${id}`);\n            let _id = id;\n            queue.push(WorkerBroker.postMessage(worker, 'self.init', this.id, id, this.num_workers, this.log_level, Utils.device_pixel_ratio, has_element_index_uint, this.external_scripts).then(\n                (id) => {\n                    log('debug', `Scene.makeWorkers: initialized worker ${id}`);\n                    return id;\n                },\n                (error) => {\n                    log('error', `Scene.makeWorkers: failed to initialize worker ${_id}:`, error);\n                    return Promise.reject(error);\n                })\n            );\n        }\n\n        this.next_worker = 0;\n        return Promise.all(queue).then(() => {\n            log.setWorkers(this.workers);\n        });\n    }\n\n    destroyWorkers() {\n        this.selection = null; // selection needs to be re-initialized when workers are\n        if (Array.isArray(this.workers)) {\n            log.setWorkers(null);\n            this.workers.forEach((worker) => {\n                worker.terminate();\n            });\n            this.workers = null;\n        }\n    }\n\n    // Scene is ready for rendering\n    ready() {\n        if (!this.view.ready() || Object.keys(this.sources).length === 0) {\n            return false;\n        }\n        return true;\n    }\n\n    // Resize the map when device pixel ratio changes, e.g. when switching between displays\n    updateDevicePixelRatio () {\n        if (Utils.updateDevicePixelRatio()) {\n            WorkerBroker.postMessage(this.workers, 'self.updateDevicePixelRatio', Utils.device_pixel_ratio)\n                .then(() => this.rebuild())\n                .then(() => this.resizeMap(this.view.size.css.width, this.view.size.css.height));\n        }\n    }\n\n    resizeMap(width, height) {\n        if (width === 0 && height === 0) {\n            return;\n        }\n\n        this.dirty = true;\n        this.view.setViewportSize(width, height);\n        if (this.gl) {\n            Context.resize(this.gl, width, height, Utils.device_pixel_ratio);\n        }\n    }\n\n    // Request scene be redrawn at next animation loop\n    requestRedraw() {\n        this.dirty = true;\n    }\n\n    // Redraw scene immediately - don't wait for animation loop\n    // Use sparingly, but for cases where you need the closest possible sync with other UI elements,\n    // such as other, non-WebGL map layers (e.g. Leaflet raster layers, markers, etc.)\n    immediateRedraw() {\n        this.dirty = true;\n        this.update();\n    }\n\n    renderLoop () {\n        this.render_loop_active = true; // only let the render loop instantiate once\n\n        // Update and render the scene\n        this.update();\n\n        // Pending background tasks\n        Task.setState({ user_moving_view: this.view.user_input_active });\n        Task.processAll();\n\n        // Request the next frame if not scheduled to stop\n        if (!this.render_loop_stop) {\n            window.requestAnimationFrame(this.renderLoop.bind(this));\n        }\n        else {\n            this.render_loop_stop = false;\n            this.render_loop_active = false;\n        }\n    }\n\n    // Setup the render loop\n    setupRenderLoop() {\n        if (!this.render_loop_active) {\n            setTimeout(() => { this.renderLoop(); }, 0); // delay start by one tick\n        }\n    }\n\n    update() {\n        // Determine which passes (if any) to render\n        let main = this.dirty;\n        let selection = this.selection ? this.selection.hasPendingRequests() : false;\n        var will_render = !(\n            (main === false && selection === false) ||\n            this.initialized === false ||\n            this.updating > 0 ||\n            this.ready() === false\n        );\n\n        // Pre-render loop hook\n        this.trigger('pre_update', will_render);\n\n        // Update view (needs to update user input timer even if no render will occur)\n        this.view.update();\n\n        // Bail if no need to render\n        if (!will_render) {\n            return false;\n        }\n        this.dirty = false; // subclasses can set this back to true when animation is needed\n\n        // Render the scene\n        this.updateDevicePixelRatio();\n        this.render({ main, selection });\n        this.updateViewComplete(); // fires event when rendered tile set or style changes\n        this.media_capture.completeScreenshot(); // completes screenshot capture if requested\n\n        // Post-render loop hook\n        this.trigger('post_update', will_render);\n\n        // Redraw every frame if animating\n        if (this.animated === true || this.view.isAnimating()) {\n            this.dirty = true;\n        }\n\n        this.frame++;\n        log('trace', 'Scene.render()');\n        return true;\n    }\n\n    // Accepts flags indicating which render passes should be made\n    render({ main, selection }) {\n        var gl = this.gl;\n\n        this.updateBackground();\n        Object.keys(this.lights).forEach(i => this.lights[i].update());\n\n        // Render main pass\n        this.render_count_changed = false;\n        if (main) {\n            this.render_count = this.renderPass();\n            this.last_main_render = this.frame;\n\n            // Update feature selection map if necessary\n            if (this.render_count !== this.last_render_count) {\n                this.render_count_changed = true;\n                this.logFirstFrame();\n\n                this.getFeatureSelectionMapSize().then(size => {\n                    this.selection_feature_count = size;\n                    log('info', `Scene: rendered ${this.render_count} primitives (${size} features in selection map)`);\n                });\n            }\n            this.last_render_count = this.render_count;\n        }\n\n        // Render selection pass (if needed)\n        if (selection) {\n            if (this.view.panning || this.view.user_input_active) {\n                this.selection.clearPendingRequests();\n                return;\n            }\n\n            // Only re-render if selection buffer is out of date (relative to main render buffer)\n            // and not locked (e.g. no tiles are actively building)\n            if (!this.selection.locked && this.last_selection_render < this.last_main_render) {\n                this.selection.bind();          // switch to FBO\n                this.renderPass(\n                    'selection_program',        // render w/alternate program\n                    { allow_blend: false });\n\n                // Reset to screen buffer\n                gl.bindFramebuffer(gl.FRAMEBUFFER, null);\n                gl.viewport(0, 0, this.canvas.width, this.canvas.height);\n                gl.clearColor(...this.background.computed_color); // restore scene background color\n                this.last_selection_render = this.frame;\n            }\n\n            this.selection.read(); // process any pending results from selection buffer\n        }\n\n        return true;\n    }\n\n    // Render all active styles, grouped by blend/depth type (opaque, overlay, etc.) and by program (style)\n    // Called both for main render pass, and for secondary passes like selection buffer\n    renderPass(program_key = 'program', { allow_blend } = {}) {\n        // optionally force alpha off (e.g. for selection pass)\n        allow_blend = (allow_blend == null) ? true : allow_blend;\n\n        this.clearFrame();\n\n        let count = 0; // how many primitives were rendered\n        let last_blend; // blend mode active in last render pass\n\n        // Get sorted list of current blend orders, with accompanying list of styles to render for each\n        const blend_orders = this.style_manager.getActiveBlendOrders();\n        for (const { blend_order, styles } of blend_orders) {\n            // Render each style\n            for (let s=0; s < styles.length; s++) {\n                let style = this.styles[styles[s]];\n                if (style == null) {\n                    continue;\n                }\n\n                // Only update render state when blend mode changes\n                if (style.blend !== last_blend) {\n                    let state = Object.assign({},\n                        Style.render_states[style.blend],       // render state for blend mode\n                        { blend: (allow_blend && style.blend) } // enable/disable blending (e.g. no blend for selection)\n                    );\n                    this.setRenderState(state);\n                }\n\n                const blend = allow_blend && style.blend;\n                if (blend === 'translucent') {\n                    // Depth pre-pass for translucency\n                    this.gl.colorMask(false, false, false, false);\n                    this.renderStyle(style.name, program_key, blend_order);\n\n                    this.gl.colorMask(true, true, true, true);\n                    this.gl.depthFunc(this.gl.EQUAL);\n\n                    // Stencil buffer mask prevents overlap/flicker from compounding alpha of overlapping polys\n                    this.gl.enable(this.gl.STENCIL_TEST);\n                    this.gl.clearStencil(0);\n                    this.gl.clear(this.gl.STENCIL_BUFFER_BIT);\n                    this.gl.stencilFunc(this.gl.EQUAL, this.gl.ZERO, 0xFF);\n                    this.gl.stencilOp(this.gl.KEEP, this.gl.KEEP, this.gl.INCR);\n\n                    // Main render pass\n                    count += this.renderStyle(style.name, program_key, blend_order);\n\n                    // Disable translucency-specific settings\n                    this.gl.disable(this.gl.STENCIL_TEST);\n                    this.gl.depthFunc(this.gl.LESS);\n                }\n                else if (blend !== 'opaque' && style.stencil_proxy_tiles === true) {\n                    // Mask proxy tiles to with stencil buffer to avoid overlap/flicker from compounding alpha\n                    // Find unique levels of proxy tiles to render for this style\n                    const proxy_levels = this.tile_manager.getRenderableTiles()\n                        .filter(t => t.meshes[style.name]) // must have meshes for this style\n                        .map(t => t.proxy_level) // get the proxy depth\n                        .reduce((levels, level) => { // count unique proxy depths\n                            levels.indexOf(level) > -1 || levels.push(level);\n                            return levels;\n                        }, [])\n                        .sort(); // sort by lower depth first\n\n                    if (proxy_levels.length > 1) {\n                        // When there are multiple \"levels\" of tiles to render (e.g. non-proxy and one or more proxy\n                        // tile levels, or multiple proxy tile levels but no non-proxy tiles, etc.):\n                        // Render each proxy tile level to stencil buffer, masking each level such that it will not\n                        // render over any pixel rendered by a previous proxy tile level.\n                        this.gl.enable(this.gl.STENCIL_TEST);\n                        this.gl.clearStencil(0);\n                        this.gl.clear(this.gl.STENCIL_BUFFER_BIT);\n                        this.gl.stencilOp(this.gl.KEEP, this.gl.KEEP, this.gl.REPLACE);\n\n                        for (let i = 0; i < proxy_levels.length; i++) {\n                            // stencil test passes either for zero (not-yet-rendered),\n                            // or for other pixels at this proxy level (but not previous proxy levels)\n                            this.gl.stencilFunc(this.gl.GEQUAL, proxy_levels.length - i, 0xFF);\n                            count += this.renderStyle(style.name, program_key, blend_order, proxy_levels[i]);\n                        }\n                        this.gl.disable(this.gl.STENCIL_TEST);\n                    }\n                    else {\n                        // No special render handling needed when there are no proxy tiles,\n                        // or if there is ONLY a single proxy tile level (e.g. with no non-proxy tiles)\n                        count += this.renderStyle(style.name, program_key, blend_order);\n                    }\n                }\n                else {\n                    // Regular render pass (no special blend handling, or selection buffer pass)\n                    count += this.renderStyle(style.name, program_key, blend_order);\n                }\n\n                last_blend = style.blend;\n            }\n        }\n\n        return count;\n    }\n\n    renderStyle(style_name, program_key, blend_order, proxy_level = null) {\n        let style = this.styles[style_name];\n        let first_for_style = true; // TODO: allow this state to be passed in (for multilpe blend orders, stencil tests, etc)\n        let render_count = 0;\n        let program;\n\n        // Render tile GL geometries\n        let renderable_tiles = this.tile_manager.getRenderableTiles();\n\n        // For each tile, only include meshes for the blend order currently being rendered\n        // Builds an array tiles and their associated meshes, each as a [tile, meshes] 2-element array\n        let tile_meshes = renderable_tiles\n            .filter(t => typeof proxy_level !== 'number' || t.proxy_level === proxy_level) // optional filter by proxy level\n            .map(t => {\n                if (t.meshes[style_name]) {\n                    return [t, t.meshes[style_name].filter(m => m.variant.blend_order === blend_order)];\n                }\n            })\n            .filter(x => x); // skip tiles with no meshes for this blend order\n\n        // Mesh variants must be rendered in requested order across tiles, to prevent labels that cross\n        // tile boundaries from rendering over adjacent tile features meant to be underneath\n        let max_mesh_order =\n            Math.max(...tile_meshes.map(([, meshes]) => {\n                return Math.max(...meshes.map(m => m.variant.mesh_order));\n            }));\n\n        // One pass per mesh variant order (loop goes to max value +1 because 0 is a valid order value)\n        for (let mo=0; mo < max_mesh_order + 1; mo++) {\n            // Loop over tiles, with meshes pre-filtered by current blend order\n            for (let [tile, meshes] of tile_meshes) {\n                let first_for_tile = true;\n\n                // Skip proxy tiles if new tiles have finished loading this style\n                if (!tile.shouldProxyForStyle(style_name)) {\n                    // log('trace', `Scene.renderStyle(): Skip proxy tile for style '${style_name}' `, tile, tile.proxy_for);\n                    continue;\n                }\n\n                // Filter meshes further by current variant order\n                const order_meshes = meshes.filter(m => m.variant.mesh_order === mo);\n                if (order_meshes.length === 0) {\n                    continue;\n                }\n\n                // Style-specific state\n                // Only setup style if rendering for first time this frame\n                // (lazy init, not all styles will be used in all screen views; some styles might be defined but never used)\n                if (first_for_style === true) {\n                    first_for_style = false;\n                    program = this.setupStyle(style, program_key);\n                    if (!program) {\n                        // no program found, e.g. happens when rendering selection pass, but style doesn't support selection\n                        return 0;\n                    }\n                }\n\n                // Render each mesh (for current variant order)\n                order_meshes.forEach(mesh => {\n                    // Tile-specific state\n                    if (first_for_tile === true) {\n                        first_for_tile = false;\n                        this.view.setupTile(tile, program);\n                    }\n\n                    // Render this mesh variant\n                    if (style.render(mesh)) {\n                        this.requestRedraw();\n                    }\n                    render_count += mesh.geometry_count;\n                });\n            }\n        }\n\n        return render_count;\n    }\n\n    setupStyle(style, program_key) {\n        // Get shader program from style, lazily compiling if necessary\n        let program;\n        try {\n            program = style.getProgram(program_key);\n            if (!program) {\n                return;\n            }\n        }\n        catch(error) {\n            this.trigger('warning', {\n                type: 'styles',\n                message: `Error compiling style ${style.name}`,\n                style,\n                shader_errors: style.program && style.program.shader_errors\n            });\n            return;\n        }\n\n        program.use();\n        style.setup();\n\n        program.uniform('1f', 'u_time', this.animated ? (((+new Date()) - this.start_time) / 1000) : 0);\n        this.view.setupProgram(program);\n\n        for (let i in this.lights) {\n            this.lights[i].setupProgram(program);\n        }\n\n        return program;\n    }\n\n    clearFrame() {\n        if (!this.initialized) {\n            return;\n        }\n        this.render_states.depth_write.set({ depth_write: true });\n        this.gl.clear(this.gl.COLOR_BUFFER_BIT | this.gl.DEPTH_BUFFER_BIT | this.gl.STENCIL_BUFFER_BIT);\n    }\n\n    setRenderState({ depth_test, depth_write, cull_face, blend } = {}) {\n        if (!this.initialized) {\n            return;\n        }\n\n        // Defaults\n        // TODO: when we abstract out support for multiple render passes, these can be per-pass config options\n        let render_states = this.render_states;\n        depth_test = (depth_test === false) ? false : render_states.defaults.depth_test;      // default true\n        depth_write = (depth_write === false) ? false : render_states.defaults.depth_write;   // default true\n        cull_face = (cull_face === false) ? false : render_states.defaults.culling;           // default true\n        blend = (blend != null) ? blend : render_states.defaults.blending;                    // default false\n\n        // Reset frame state\n        let gl = this.gl;\n\n        render_states.depth_test.set({ depth_test });\n        render_states.depth_write.set({ depth_write });\n        render_states.culling.set({ cull: cull_face, face: render_states.defaults.culling_face });\n\n        // Blending of alpha channel is modified to account for WebGL alpha behavior, see:\n        // http://webglfundamentals.org/webgl/lessons/webgl-and-alpha.html\n        // http://stackoverflow.com/a/11533416\n        if (blend) {\n            // Opaque: all source, no destination\n            if (blend === 'opaque') {\n                render_states.blending.set({\n                    blend: false\n                });\n            }\n            // Traditional alpha blending\n            else if (blend === 'overlay' || blend === 'inlay' || blend === 'translucent') {\n                render_states.blending.set({\n                    blend: true,\n                    src: gl.SRC_ALPHA, dst: gl.ONE_MINUS_SRC_ALPHA,\n                    src_alpha: gl.ONE, dst_alpha: gl.ONE_MINUS_SRC_ALPHA\n                });\n            }\n            // Additive blending\n            else if (blend === 'add') {\n                render_states.blending.set({\n                    blend: true,\n                    src: gl.ONE, dst: gl.ONE\n                });\n            }\n            // Multiplicative blending\n            else if (blend === 'multiply') {\n                render_states.blending.set({\n                    blend: true,\n                    src: gl.ZERO, dst: gl.SRC_COLOR\n                });\n            }\n        }\n        else {\n            render_states.blending.set({ blend: false });\n        }\n    }\n\n    // Request feature selection at given pixel. Runs async and returns results via a promise.\n    getFeatureAt(pixel, { radius } = {}) {\n        if (!this.initialized) {\n            log('debug', 'Scene.getFeatureAt() called before scene was initialized');\n            return Promise.resolve();\n        }\n\n        // skip selection if no interactive features\n        if (this.selection_feature_count === 0) {\n            return Promise.resolve();\n        }\n\n        // only instantiate feature selection on-demand\n        if (!this.selection) {\n            this.resetFeatureSelection();\n        }\n\n        // Scale point and radius to [0..1] range\n        let point = {\n            x: pixel.x / this.view.size.css.width,\n            y: pixel.y / this.view.size.css.height\n        };\n\n        if (radius > 0) {\n            radius  = {\n                x: radius / this.view.size.css.width,\n                y: radius / this.view.size.css.height\n            };\n        }\n        else {\n            radius = null;\n        }\n\n        return this.selection.getFeatureAt(point, { radius }).\n            then(selection => Object.assign(selection, { pixel })).\n            catch(error => Promise.resolve({ error }));\n    }\n\n    // Query features within visible tiles, with optional filter conditions\n    async queryFeatures({ filter, unique = true, group_by = null, visible = null, geometry = false } = {}) {\n        if (!this.initialized) {\n            return [];\n        }\n\n        filter = Utils.serializeWithFunctions(filter);\n\n        // Optional uniqueify criteria\n        // Valid values: true, false/null, single property name, or array of property names\n        unique = (typeof unique === 'string') ? [unique] : unique;\n        const uniqueify_on_id = (unique === true || (Array.isArray(unique) && unique.indexOf('$id') > -1));\n        const uniqueify = unique && (obj => {\n            const properties = Array.isArray(unique) ? sliceObject(obj.properties, unique) : obj.properties;\n            const id = uniqueify_on_id ? obj.id : null;\n            if (geometry) {\n                // when `geometry` flag is set, we need to uniqueify based on *both* feature properties and geometry\n                return JSON.stringify({ geometry: obj.geometry, properties, id });\n            }\n            return JSON.stringify({ properties, id });\n        });\n\n        // Optional grouping criteria\n        // Valid values: false/null, single property name, or array of property names\n        group_by = (typeof group_by === 'string' || Array.isArray(group_by)) && group_by;\n        const group = group_by && (obj => {\n            return Array.isArray(group_by) ? JSON.stringify(sliceObject(obj, group_by)) : obj[group_by];\n        });\n\n        const tile_keys = this.tile_manager.getRenderableTiles().map(t => t.key);\n        const results = await WorkerBroker.postMessage(this.workers, 'self.queryFeatures', { filter, visible, geometry, tile_keys });\n        const features = [];\n        const keys = {};\n        const groups = {};\n\n        results.forEach(r => r.forEach(feature => {\n            if (uniqueify) {\n                const str = uniqueify(feature);\n                if (keys[str]) {\n                    return;\n                }\n                keys[str] = true;\n            }\n\n            if (group) {\n                const str = group(feature.properties);\n                groups[str] = groups[str] || [];\n                groups[str].push(feature);\n            }\n            else {\n                features.push(feature);\n            }\n        }));\n        return group ? groups : features; // returned grouped results, or all results\n    }\n\n    // Rebuild all tiles, without re-parsing the config or re-compiling styles\n    // sync: boolean of whether to sync the config object to the worker\n    // sources: optional array of data sources to selectively rebuild (by default all our rebuilt)\n    rebuild({ initial = false, new_generation = true, sources = null, serialize_funcs, profile = false, fade_in = false } = {}) {\n        return new Promise((resolve, reject) => {\n            // Skip rebuild if already in progress\n            if (this.building) {\n                // Queue up to one rebuild call at a time, only save last request\n                if (this.building.queued && this.building.queued.reject) {\n                    // notify previous request that it did not complete\n                    log('debug', 'Scene.rebuild: request superceded by a newer call');\n                    this.building.queued.resolve(false); // false flag indicates rebuild request was superceded\n                }\n\n                // Save queued request\n                let options = { initial, new_generation, sources, serialize_funcs, profile, fade_in };\n                this.building.queued = { resolve, reject, options };\n                log('trace', 'Scene.rebuild(): queuing request');\n                return;\n            }\n\n            // Track tile build state\n            this.building = { resolve, reject, initial };\n\n            // Profiling\n            if (profile) {\n                this.debug.profile('Scene.rebuild');\n            }\n\n            // Increment generation to ensure style/tile building stay in sync\n            // (skipped if calling function already incremented)\n            if (new_generation) {\n                this.generation = ++Scene.generation;\n                for (let style in this.styles) {\n                    this.styles[style].setGeneration(this.generation);\n                }\n            }\n\n            // Update config (in case JS objects were manipulated directly)\n            this.syncConfigToWorker({ serialize_funcs });\n            this.resetWorkerFeatureSelection(sources);\n            this.resetTime();\n\n            // Rebuild visible tiles\n            this.tile_manager.pruneToVisibleTiles();\n            this.tile_manager.forEachTile(tile => {\n                if (!sources || sources.indexOf(tile.source.name) > -1) {\n                    this.tile_manager.buildTile(tile, { fade_in });\n                }\n            });\n            this.tile_manager.updateTilesForView(); // picks up additional tiles for any new/changed data sources\n            this.tile_manager.checkBuildQueue();    // resolve immediately if no tiles to build\n        }).then(() => {\n            // Profiling\n            if (profile) {\n                this.debug.profileEnd('Scene.rebuild');\n            }\n        });\n    }\n\n    // Tile manager finished building tiles\n    // TODO move to tile manager\n    tileManagerBuildDone() {\n        TextCanvas.pruneTextCache();\n\n        if (this.building) {\n            log('info', 'Scene: build geometry finished');\n            if (this.building.resolve) {\n                this.logFirstBuild();\n                this.building.resolve(true);\n            }\n\n            // Another rebuild queued?\n            var queued = this.building.queued;\n            this.building = null;\n            if (queued) {\n                log('debug', 'Scene: starting queued rebuild() request');\n                this.rebuild(queued.options).then(queued.resolve, queued.reject);\n            }\n            else {\n                this.tile_manager.updateLabels(); // refresh label if nothing to rebuild\n            }\n        }\n    }\n\n    /**\n       Load (or reload) the scene config\n       @return {Promise}\n    */\n    async loadScene(config_source = null, { base_path, file_type } = {}) {\n        this.config_source = config_source || this.config_source;\n\n        if (typeof this.config_source === 'string') {\n            this.base_path = URLs.pathForURL(base_path || this.config_source);\n        }\n        else {\n            this.base_path = URLs.pathForURL(base_path);\n        }\n\n        // backwards compatibility for accessing base path under previous name\n        // TODO: schedule for deprecation\n        this.config_path = this.base_path;\n\n        const { config, bundle, texture_nodes } = await SceneLoader.loadScene(\n            this.config_source,\n            { path: this.base_path, type: file_type });\n\n        this.config = config;\n        this.config_bundle = bundle;\n        return { texture_nodes }; // pass along texture nodes for resolution after global property subtistution\n    }\n\n    // Add source to a scene, arguments `name` and `config` need to be provided:\n    //  - If the name doesn't match a sources it will create it\n    //  - the `config` obj follow the YAML scene spec, ex: ```{type: 'TopoJSON', url: \"//tile.mapzen.com/mapzen/vector/v1/all/{z}/{x}/{y}.topojson\"]}```\n    //    that looks like:\n    //\n    //      scene.setDataSource(\"osm\", {type: 'TopoJSON', url: \"//tile.mapzen.com/mapzen/vector/v1/all/{z}/{x}/{y}.topojson\" });\n    //\n    //  - also can be pass a ```data``` obj: ```{type: 'GeoJSON', data: JSObj ]}```\n    //\n    //      var geojson_data = {};\n    //      ...\n    //      scene.setDataSource(\"dynamic_data\", {type: 'GeoJSON', data: geojson_data });\n    //\n    setDataSource (name, config) {\n        if (!name || !config || !config.type || (!config.url && !config.data)) {\n            log('error', 'No name provided or not a valid config:', name, config);\n            return;\n        }\n\n        let load = (this.config.sources[name] == null);\n        let source = this.config.sources[name] = Object.assign({}, config);\n\n        // Convert raw data into blob URL\n        if (source.data && typeof source.data === 'object') {\n            source.url = URLs.createObjectURL(new Blob([JSON.stringify(source.data)], { type: 'application/json' }));\n            delete source.data;\n        }\n\n        if (load) {\n            return this.updateConfig({ rebuild: { sources: [name] } });\n        } else {\n            return this.rebuild({ sources: [name] });\n        }\n    }\n\n    // (Re-)create all data sources. Re-layout view and rebuild tiles when either:\n    // 1) all tiles if `rebuild_all` parameter is specified (used when loading a new scene)\n    // 2) the data source has changed in a way that affects tile layout (e.g. tile size, max_zoom, etc.)\n    createDataSources(rebuild_all = false) {\n        const reset = []; // sources to reset\n        const prev_source_names = Object.keys(this.sources);\n        let source_id = 0;\n\n        for (var name in this.config.sources) {\n            const source = this.config.sources[name];\n            const prev_source = this.sources[name];\n\n            try {\n                const config = { ...source, name, id: source_id++ };\n                this.sources[name] = DataSource.create(config, this.sources);\n                if (!this.sources[name]) {\n                    throw {};\n                }\n            }\n            catch(e) {\n                delete this.sources[name];\n                const message = `Could not create data source: ${e.message}`;\n                log('warn', `Scene: ${message}`, source);\n                this.trigger('warning', { type: 'sources', source, message });\n            }\n\n            // Data source changed in a way that affects tile layout?\n            // If so, we'll re-calculate the tiles in view for this source and rebuild them\n            if (rebuild_all || DataSource.tileLayoutChanged(this.sources[name], prev_source)) {\n                reset.push(name);\n            }\n        }\n\n        // Sources that were removed\n        prev_source_names.forEach(s => {\n            if (!this.config.sources[s]) {\n                delete this.sources[s]; // TODO: remove from workers too?\n                reset.push(s);\n            }\n        });\n\n        // Remove tiles from sources that have changed\n        if (reset.length > 0) {\n            this.tile_manager.removeTiles(tile => {\n                return (reset.indexOf(tile.source.name) > -1);\n            });\n        }\n\n        // Mark sources that will generate geometry tiles (any that are referenced in scene layers)\n        for (let ln in this.config.layers) {\n            let layer = this.config.layers[ln];\n            if (layer.enabled !== false && layer.data && this.sources[layer.data.source]) {\n                this.sources[layer.data.source].builds_geometry_tiles = true;\n            }\n        }\n    }\n\n    // Load all textures in the scene definition\n    loadTextures() {\n        return Texture.createFromObject(this.gl, this.config.textures)\n            .then(() => Texture.createDefault(this.gl)); // create a 'default' texture for placeholders\n    }\n\n    // Free textures from previously loaded scene\n    freePreviousTextures() {\n        if (!this.prev_textures) {\n            return;\n        }\n\n        this.prev_textures.forEach(t => {\n            // free textures that aren't in the new scene, but are still in the global texture set\n            if (!this.config.textures[t] && Texture.textures[t]) {\n                Texture.textures[t].destroy();\n            }\n        });\n        this.prev_textures = null;\n    }\n\n    // Called (currently manually) after styles are updated in stylesheet\n    updateStyles() {\n        if (!this.initialized && !this.initializing) {\n            throw new Error('Scene.updateStyles() called before scene was initialized');\n        }\n\n        // (Re)build styles from config\n        this.styles = this.style_manager.build(this.config.styles);\n        this.style_manager.initStyles(this);\n\n        // Optionally set GL context (used when initializing or re-initializing GL resources)\n        for (let style in this.styles) {\n            this.styles[style].setGL(this.gl);\n        }\n\n        this.dirty = true;\n    }\n\n    // Is scene currently animating?\n    get animated () {\n        // Disable animation is scene flag requests it, otherwise enable animation if any animated styles are in view\n        return (this.config.scene.animated === false ?\n            false :\n            this.style_manager.getActiveStyles().some(s => this.styles[s].animated));\n    }\n\n    // Get active camera - for public API\n    getActiveCamera() {\n        return this.view.getActiveCamera();\n    }\n\n    // Set active camera - for public API\n    setActiveCamera(name) {\n        return this.view.setActiveCamera(name);\n    }\n\n    // Create lighting\n    createLights() {\n        this.lights = {};\n\n        if (debugSettings.wireframe) {\n            Light.enabled = false; // disable lighting for wireframe mode\n        }\n\n        for (let i in this.config.lights) {\n            if (!this.config.lights[i] || typeof this.config.lights[i] !== 'object') {\n                continue;\n            }\n            let light = this.config.lights[i];\n            light.name = i.replace('-', '_'); // light names are injected in shaders, can't have hyphens\n            light.visible = (light.visible === false) ? false : true;\n            if (light.visible) {\n                this.lights[light.name] = Light.create(this.view, light);\n            }\n        }\n        Light.inject(this.lights);\n    }\n\n    // Set background color from scene config\n    setBackground() {\n        const bg = this.config.scene.background;\n\n        this.background = {};\n        if (bg && bg.color) {\n            this.background.color = StyleParser.createColorPropertyCache(bg.color);\n        }\n        if (!this.background.color) {\n            this.background.color = StyleParser.createColorPropertyCache([0, 0, 0, 0]); // default background TODO: vary w/scene alpha\n        }\n    }\n\n    // Update background color each frame as needed (e.g. may be zoom-interpolated)\n    updateBackground () {\n        const last_color = this.background.computed_color;\n        const color = this.background.computed_color = StyleParser.evalCachedColorProperty(this.background.color, { zoom: this.view.tile_zoom });\n\n        // update GL/canvas if color has changed\n        if (!last_color || color.some((v, i) => last_color[i] !== v)) {\n            // if background is fully opaque, set canvas background to match\n            if (color[3] === 1) {\n                this.canvas.style.backgroundColor =\n                    `rgba(${color.map(c => Math.floor(c * 255)).join(', ')})`;\n            }\n            else {\n                this.canvas.style.backgroundColor = 'transparent';\n            }\n\n            this.gl.clearColor(...color);\n        }\n    }\n\n    // Turn introspection mode on/off\n    setIntrospection (val) {\n        if (val !== this.introspection) {\n            this.introspection = (val != null) ? val : false;\n            this.updating++;\n            return this.updateConfig({ normalize: false }).then(() => this.updating--);\n        }\n        return Promise.resolve();\n    }\n\n    // Update scene config, and optionally rebuild geometry\n    // rebuild can be boolean, or an object containing rebuild options to passthrough\n    updateConfig({ loading = false, rebuild = true, serialize_funcs, texture_nodes = {}, normalize = true, fade_in = false } = {}) {\n        this.generation = ++Scene.generation;\n        this.updating++;\n\n        // Apply globals, finalize textures and other resource paths if needed\n        this.config = SceneLoader.applyGlobalProperties(this.config);\n        if (normalize) {\n            // normalize whole scene if requested - usually when user is making run-time updates to scene\n            SceneLoader.normalize(this.config, this.config_bundle, texture_nodes);\n        }\n        SceneLoader.hoistTextureNodes(this.config, this.config_bundle, texture_nodes);\n\n        this.trigger(loading ? 'load' : 'update', { config: this.config });\n\n        this.style_manager.init();\n        this.view.reset();\n        this.createLights();\n        this.createDataSources(loading);\n        this.loadTextures();\n        this.setBackground();\n        FontManager.loadFonts(this.config.fonts);\n\n        // TODO: detect changes to styles? already (currently) need to recompile anyway when camera or lights change\n        this.updateStyles();\n\n        // Optionally rebuild geometry\n        let done = rebuild ?\n            this.rebuild(Object.assign({ initial: loading, new_generation: false, serialize_funcs, fade_in }, typeof rebuild === 'object' && rebuild)) :\n            this.syncConfigToWorker({ serialize_funcs }); // rebuild() also syncs config\n\n        // Finish by updating bounds and re-rendering\n        this.updating--;\n        this.view.updateBounds();\n        this.requestRedraw();\n\n        return done.then(() => {\n            this.last_render_count = 0; // force re-evaluation of selection map\n            this.requestRedraw();\n        });\n    }\n\n    // Serialize config and send to worker\n    syncConfigToWorker({ serialize_funcs = true } = {}) {\n        // Tell workers we're about to rebuild (so they can update styles, etc.)\n        let config_serialized =\n            serialize_funcs ? Utils.serializeWithFunctions(this.config) : JSON.stringify(this.config);\n        return WorkerBroker.postMessage(this.workers, 'self.updateConfig', {\n            config: config_serialized,\n            generation: this.generation,\n            introspection: this.introspection\n        }, debugSettings);\n    }\n\n    // Listen to related objects\n    createListeners () {\n        this.listeners = {};\n\n        this.listeners.view = {\n            move: () => this.trigger('move')\n        };\n        this.view.subscribe(this.listeners.view);\n\n        this.listeners.texture = {\n            update: () => this.dirty = true,\n            warning: (data) => this.trigger('warning', Object.assign({ type: 'textures' }, data))\n        };\n        Texture.subscribe(this.listeners.texture);\n\n        this.listeners.scene_loader = {\n            error: (data) => this.trigger('error', Object.assign({ type: 'scene' }, data))\n        };\n        SceneLoader.subscribe(this.listeners.scene_loader);\n    }\n\n    destroyListeners () {\n        this.unsubscribeAll();\n        this.view.unsubscribe(this.listeners.view);\n        Texture.unsubscribe(this.listeners.texture);\n        SceneLoader.unsubscribe(this.listeners.scene_loader);\n        this.listeners = null;\n    }\n\n    destroyFeatureSelection() {\n        if (this.selection) {\n            this.selection.destroy();\n            this.selection = null;\n        }\n    }\n\n    resetFeatureSelection() {\n        this.selection = new FeatureSelection(this.gl, this.workers, () => this.building);\n        this.last_render_count = 0; // force re-evaluation of selection map\n    }\n\n    resetWorkerFeatureSelection(sources = null) {\n        if (this.workers) {\n            WorkerBroker.postMessage(this.workers, 'self.resetFeatureSelection', sources);\n        }\n    }\n\n    // Gets the current feature selection map size across all workers. Returns a promise.\n    getFeatureSelectionMapSize() {\n        // Only allow one fetch process to run at a time\n        if (this.fetching_selection_map == null) {\n            this.fetching_selection_map = WorkerBroker.postMessage(this.workers, 'self.getFeatureSelectionMapSize')\n                .then(sizes => {\n                    this.fetching_selection_map = null;\n                    return sizes.reduce((a, b) => a + b);\n                });\n        }\n        return this.fetching_selection_map;\n    }\n\n    // Reset internal clock, mostly useful for consistent experience when changing styles/debugging\n    resetTime() {\n        this.start_time = +new Date();\n    }\n\n    // Fires event when rendered tile set or style changes\n    updateViewComplete () {\n        if ((this.render_count_changed || this.generation !== this.last_complete_generation) &&\n            !this.building &&\n            !this.tile_manager.isLoadingVisibleTiles() &&\n            this.tile_manager.allVisibleTilesLabeled()) {\n            this.tile_manager.updateLabels();\n            this.last_complete_generation = this.generation;\n            this.trigger('view_complete', { first: (this.view_complete !== true) });\n            this.view_complete = true;\n        }\n    }\n\n    resetViewComplete () {\n        this.last_complete_generation = null;\n    }\n\n    // Take a screenshot\n    // Asynchronous because we have to wait for next render to capture buffer\n    // Returns a promise\n    screenshot ({ background = 'white' } = {}) {\n        this.requestRedraw();\n        return this.media_capture.screenshot({background});\n    }\n\n    startVideoCapture () {\n        this.requestRedraw();\n        return this.media_capture.startVideoCapture();\n    }\n\n    stopVideoCapture () {\n        return this.media_capture.stopVideoCapture();\n    }\n\n    // Log first frame rendered (with any geometry)\n    logFirstFrame() {\n        if (this.last_render_count === 0 && !this.times.first_frame) {\n            this.times.first_frame = (+new Date()) - this.start_time;\n            log('debug', `Scene: initial frame time: ${this.times.first_frame}`);\n        }\n    }\n\n    // Log completion of first scene build\n    logFirstBuild() {\n        if (this.times.first_build == null) {\n            this.times.first_build = (+new Date()) - this.start_time;\n            log('debug', `Scene: initial build time: ${this.times.first_build}`);\n        }\n    }\n\n}\n\nScene.id = 0;         // unique id for a scene instance\nScene.generation = 0; // id that is incremented each time a scene config is re-parsed\n","// Debounce a function\n// https://davidwalsh.name/javascript-debounce-function\nexport default function debounce (func, wait) {\n    var timeout;\n    return function() {\n        var context = this, args = arguments;\n        var later = function() {\n            timeout = null;\n            func.apply(context, args);\n        };\n        clearTimeout(timeout);\n        timeout = setTimeout(later, wait);\n    };\n}\n","import Thread from './utils/thread';\nimport Scene from './scene/scene';\nimport Geo from './utils/geo';\nimport debounce from './utils/debounce';\nimport {mergeDebugSettings} from './utils/debug_settings';\n\n// Exports must appear outside a function, but will only be defined in main thread (below)\nexport var LeafletLayer;\nexport function leafletLayer(options) {\n    return extendLeaflet(options);\n}\n\n// save references to overloaded Leaflet methods\nconst originalHandlers = {\n    map: {},\n    scrollWheelZoom: {},\n    doubleClickZoom: {}\n};\n\nfunction extendLeaflet(options) {\n\n    // If LeafletLayer is already defined when this is called just return that immediately\n    // e.g. if you call leafletLayer multiple times (which is valid)\n    if (typeof LeafletLayer !== 'undefined') {\n        return new LeafletLayer(options);\n    }\n\n    // Leaflet layer functionality is only defined in main thread\n    if (Thread.is_main) {\n\n        let L = options.leaflet || window.L;\n\n        // Determine if we are extending the leaflet 0.7.x TileLayer class, or the newer\n        // leaflet 1.x GridLayer class.\n        let layerBaseClass = L.GridLayer ? L.GridLayer : L.TileLayer;\n        let leafletVersion = layerBaseClass === L.GridLayer ? '1.x' : '0.7.x';\n        let layerClassConfig = {};\n        let setZoomAroundNoMoveEnd; // alternate zoom functions defined below\n\n        // If extending leaflet 0.7.x TileLayer, additional modifications are needed\n        if (layerBaseClass === L.TileLayer) {\n            layerClassConfig._addTile = function(){};\n            layerClassConfig._removeTile = function(){};\n            layerClassConfig._reset = function() {\n                layerBaseClass.prototype._reset.apply(this, arguments);\n                // re-add the canvas since base class `viewreset` event can remove it\n                if (this.scene && this.scene.container && this.scene.canvas) {\n                    this.scene.container.appendChild(this.scene.canvas);\n                }\n            };\n        }\n\n        // Define custom layer methods\n        Object.assign(layerClassConfig, {\n\n            initialize (options) {\n                // Defaults\n                options.showDebug = (!options.showDebug ? false : true);\n\n                L.setOptions(this, options);\n                this.updateTangramDebugSettings();\n                this.createScene();\n                this.hooks = {};\n                this._updating_tangram = false;\n            },\n\n            createScene () {\n                this.scene = Scene.create(\n                    this.options.scene,\n                    {\n                        numWorkers: this.options.numWorkers,\n                        preUpdate: this.options.preUpdate,\n                        postUpdate: this.options.postUpdate,\n                        continuousZoom: (LeafletLayer.leafletVersion === '1.x'),\n                        wrapView: (this.options.noWrap === true ? false : true),\n                        highDensityDisplay: this.options.highDensityDisplay,\n                        logLevel: this.options.logLevel,\n                        introspection: this.options.introspection, // turn scene introspection on/off\n                        webGLContextOptions: this.options.webGLContextOptions, // override/supplement WebGL context options\n                        disableRenderLoop: this.options.disableRenderLoop // app must call scene.update() per frame\n                    });\n            },\n\n            // Finish initializing scene and setup events when layer is added to map\n            onAdd (map) {\n                if (!this.scene) {\n                    this.createScene();\n                }\n\n                layerBaseClass.prototype.onAdd.apply(this, arguments);\n\n                this.hooks.resize = () => {\n                    this._updating_tangram = true;\n                    this.updateSize();\n                    this._updating_tangram = false;\n                };\n                map.on('resize', this.hooks.resize);\n\n                this.hooks.move = () => {\n                    if (this._updating_tangram) {\n                        return;\n                    }\n                    this._updating_tangram = true;\n\n                    this.scene.view.setPanning(true);\n                    var view = map.getCenter();\n                    view.zoom = Math.max(Math.min(map.getZoom(), map.getMaxZoom() || Geo.default_view_max_zoom), map.getMinZoom());\n\n                    this.scene.view.setView(view);\n                    if (this._mapLayerCount > 1) {\n                        // if there are other map pane layers active, redraw immediately to stay in better visual sync\n                        // otherwise, wait until next regular animation loop iteration\n                        this.scene.immediateRedraw();\n                    }\n\n                    this._updating_tangram = false;\n                };\n                map.on('move', this.hooks.move);\n\n                this.hooks.moveend = () => {\n                    this.scene.view.setPanning(false);\n                    this.scene.requestRedraw();\n                };\n                map.on('moveend', this.hooks.moveend);\n\n                this.hooks.drag = () => {\n                    this.scene.view.markUserInput();\n                };\n                map.on('drag', this.hooks.drag);\n\n                // keep Tangram layer in sync with view via mutation observer\n                this._map_pane_observer = new MutationObserver(mutations => {\n                    mutations.forEach(() => this.reverseTransform());\n                });\n                this._map_pane_observer.observe(map.getPanes().mapPane, { attributes: true });\n\n                // Modify default Leaflet behaviors\n                this.modifyScrollWheelBehavior(map);\n                this.modifyZoomBehavior(map);\n\n                this.trackMapLayerCounts(map);\n\n                // Setup feature selection\n                this.setupSelectionEventHandlers(map);\n                this.setSelectionEvents(this.options.events, { radius: this.options.selectionRadius });\n\n                // Add GL canvas to layer container\n                this.scene.container = this.getContainer();\n                this.updateSize();\n\n                // Initial view\n                this.updateView();\n                this.resizeOnFirstVisible();\n\n                // Subscribe to tangram events\n                this.scene.subscribe({\n                    move: this.onTangramViewUpdate.bind(this)\n                });\n\n                // Use leaflet's existing event system as the callback mechanism\n                this.scene.load(\n                    this.options.scene,\n                    {\n                        base_path: this.options.sceneBasePath,\n                        file_type: this.options.sceneFileType,\n                        blocking: false\n                    }).then(() => {\n\n                    if (!this.options.attribution) {\n                        for (const [, value] of Object.entries(this.scene.config.sources)) {\n                            if (value.attribution) {\n                                map.attributionControl.addAttribution(value.attribution);\n                            }\n                        }\n                    }\n\n                    this._updating_tangram = true;\n\n                    this.updateSize();\n                    this.updateView();\n                    this.reverseTransform();\n\n                    this._updating_tangram = false;\n\n                    this.fire('init');\n                }).catch(error => {\n                    this.fire('error', error);\n                });\n            },\n\n            onRemove (map) {\n                layerBaseClass.prototype.onRemove.apply(this, arguments);\n\n                map.off('layeradd layerremove overlayadd overlayremove', this._updateMapLayerCount);\n                map.off('resize', this.hooks.resize);\n                map.off('move', this.hooks.move);\n                map.off('moveend', this.hooks.moveend);\n                map.off('drag', this.hooks.drag);\n                map.off('click', this.hooks.click);\n                map.off('mousemove', this.hooks.mousemove);\n                map.off('mouseout', this.hooks.mouseout);\n                document.removeEventListener('visibilitychange', this.hooks.visibilitychange);\n                this.hooks = {};\n\n                this._map_pane_observer.disconnect();\n\n                if (this.scene) {\n                    this.scene.destroy();\n                    this.scene = null;\n                }\n            },\n\n            createTile (coords) {\n                var key = coords.x + '/' + coords.y + '/' + coords.z;\n                var div = document.createElement('div');\n                div.setAttribute('data-tile-key', key);\n                div.style.width = '256px';\n                div.style.height = '256px';\n\n                if (this.options.showDebug) {\n                    var debug_overlay = document.createElement('div');\n                    debug_overlay.textContent = key;\n                    debug_overlay.style.position = 'absolute';\n                    debug_overlay.style.left = 0;\n                    debug_overlay.style.top = 0;\n                    debug_overlay.style.color = 'white';\n                    debug_overlay.style.fontSize = '16px';\n                    debug_overlay.style.textOutline = '1px #000000';\n                    debug_overlay.style.padding = '8px';\n\n                    div.appendChild(debug_overlay);\n                    div.style.borderStyle = 'solid';\n                    div.style.borderColor = 'white';\n                    div.style.borderWidth = '1px';\n                }\n\n                return div;\n            },\n\n            // Modify leaflet's default scroll wheel behavior to render frames more frequently\n            // (should generally lead to smoother scroll with Tangram frame re-render)\n            modifyScrollWheelBehavior (map) {\n                if (this.scene.view.continuous_zoom && map.scrollWheelZoom && this.options.modifyScrollWheel !== false) {\n                    map.options.zoomSnap = 0;\n\n                    const enabled = map.scrollWheelZoom.enabled();\n                    map.scrollWheelZoom.disable();\n\n                    // Chrome and Safari have smoother scroll-zoom without actively throttling the mouse wheel,\n                    // while FF and Edge/IE do better with throttling.\n                    // TODO: may be related to syncing differences with requestAnimationFrame loop, investigate further\n                    if (L.Browser.chrome || L.Browser.safari) {\n                        map.scrollWheelZoom._onWheelScroll = function (e) {\n                            var delta = L.DomEvent.getWheelDelta(e);\n                            this._delta += delta;\n                            this._lastMousePos = this._map.mouseEventToContainerPoint(e);\n                            this._performZoom();\n                            L.DomEvent.stop(e);\n                        };\n                    }\n                    else {\n                        map.options.wheelDebounceTime = 20; // better default for FF and Edge/IE\n                    }\n\n                    const debounceMoveEnd = debounce(\n                        function(map) {\n                            map._moveEnd(true);\n                            map.fire('viewreset'); // keep other leaflet layers in sync\n                        },\n                        map.options.wheelDebounceTime * 2\n                    );\n\n                    // save reference to overloaded method\n                    if (!originalHandlers.scrollWheelZoom._performZoom) {\n                        originalHandlers.scrollWheelZoom._performZoom = map.scrollWheelZoom._performZoom;\n                    }\n\n                    var layer = this;\n                    map.scrollWheelZoom._performZoom = function () {\n                        if (this._map !== layer._map) { // only call overloaded method on a tangram layer\n                            originalHandlers.scrollWheelZoom._performZoom.call(this);\n                            return;\n                        }\n\n                        var map = this._map,\n                            zoom = map.getZoom();\n\n                        map._stop(); // stop panning and fly animations if any\n\n                        var delta = this._delta / (this._map.options.wheelPxPerZoomLevel * 4);\n                        this._delta = 0;\n\n                        if ((zoom + delta) >= this._map.getMaxZoom()) {\n                            delta = this._map.getMaxZoom() - zoom; // don't go past max zoom\n                        }\n                        else if ((zoom + delta) <= this._map.getMinZoom()) {\n                            delta = this._map.getMinZoom() - zoom; // don't go past min zoom\n                        }\n\n                        if (!delta) { return; }\n\n                        if (map.options.scrollWheelZoom === 'center') {\n                            setZoomAroundNoMoveEnd(layer, map.getCenter(), zoom + delta);\n                        } else {\n                            setZoomAroundNoMoveEnd(layer, this._lastMousePos, zoom + delta);\n                        }\n                        debounceMoveEnd(map);\n                    };\n\n                    if (enabled) {\n                        map.scrollWheelZoom.enable();\n                    }\n                }\n            },\n\n            // Modify leaflet's default double-click and zoom in/out behavior, to better keep Tangram layer in sync with marker/SVG layers\n            modifyZoomBehavior (map) {\n                if (this.scene.view.continuous_zoom && this.options.modifyZoomBehavior !== false) {\n                    var layer = this;\n\n                    // Simplified version of Leaflet's flyTo, for short animations zooming around a point\n                    const flyAround = function (layer, targetCenter, targetZoom) {\n                        map._stop();\n\n                        var startZoom = map._zoom;\n\n                        targetCenter = L.latLng(targetCenter);\n                        targetZoom = targetZoom === undefined ? startZoom : targetZoom;\n                        targetZoom = Math.min(targetZoom, map.getMaxZoom()); // don't go past max zoom\n\n                        var start = Date.now(),\n                            duration = 75;\n\n                        function frame() {\n                            var t = (Date.now() - start) / duration;\n\n                            if (t <= 1) {\n                                // reuse internal flyTo frame to ensure these animations are canceled like others\n                                map._flyToFrame = L.Util.requestAnimFrame(frame, map);\n                                setZoomAroundNoMoveEnd(layer, targetCenter, startZoom + (targetZoom - startZoom) * t);\n                            } else {\n                                setZoomAroundNoMoveEnd(layer, targetCenter, targetZoom)\n                                    ._moveEnd(true);\n                            }\n                        }\n\n                        map._moveStart(true);\n\n                        frame.call(map);\n                        return map;\n                    };\n\n                    // Modify the double-click zoom handler to do a short zoom animation\n                    // See original: https://github.com/Leaflet/Leaflet/blob/cf518ff1a5e0e54a2f63faa144aeaa50888e0bc6/src/map/handler/Map.DoubleClickZoom.js#L29\n                    if (map.doubleClickZoom) {\n                        const enabled = map.doubleClickZoom.enabled();\n                        map.doubleClickZoom.disable();\n\n                        // save reference to overloaded method\n                        if (!originalHandlers.doubleClickZoom._onDoubleClick) {\n                            originalHandlers.doubleClickZoom._onDoubleClick = map.doubleClickZoom._onDoubleClick;\n                        }\n\n                        map.doubleClickZoom._onDoubleClick = function (e) {\n                            if (this._map !== layer._map) { // only call overloaded method on a tangram layer\n                                originalHandlers.doubleClickZoom._onDoubleClick.call(this, e);\n                                return;\n                            }\n\n                            var map = this._map,\n                                oldZoom = map.getZoom(),\n                                delta = map.options.zoomDelta,\n                                zoom = e.originalEvent.shiftKey ? oldZoom - delta : oldZoom + delta;\n\n                            if (map.options.doubleClickZoom === 'center') {\n                                flyAround(layer, map.getCenter(), zoom);\n                            } else {\n                                flyAround(layer, map.containerPointToLatLng(e.containerPoint), zoom);\n                            }\n                        };\n\n                        if (enabled) {\n                            map.doubleClickZoom.enable();\n                        }\n                    }\n\n                    // Modify the zoom in/out behavior\n                    // NOTE: this will NOT fire the 'zoomanim' event, so this modification should be disabled for apps that depend on it\n                    // See original: https://github.com/Leaflet/Leaflet/blob/cf518ff1a5e0e54a2f63faa144aeaa50888e0bc6/src/map/Map.js#L1610\n                    if (map._zoomAnimated) {\n                        // save reference to overloaded method\n                        if (!originalHandlers.map._animateZoom) {\n                            originalHandlers.map._animateZoom = map._animateZoom;\n                        }\n\n                        map._animateZoom = function (center, zoom, startAnim, noUpdate) {\n                            if (this !== layer._map) { // only call overloaded method on a tangram layer\n                                originalHandlers.map._animateZoom.call(this, center, zoom, startAnim, noUpdate);\n                                return;\n                            }\n\n                            if (startAnim) {\n                                this._animatingZoom = true;\n\n                                // remember what center/zoom to set after animation\n                                this._animateToCenter = center;\n                                this._animateToZoom = zoom;\n\n                                // replace leaflet CSS animation with Tangram animation to keep markers/SVG in sync\n                                // (this is a workaround from not being able to easily track/sync to on-going CSS animations in JS)\n                                flyAround(layer, center, zoom);\n                            }\n\n                            // Work around webkit not firing 'transitionend', see https://github.com/Leaflet/Leaflet/issues/3689, 2693\n                            setTimeout(L.Util.bind(this._onZoomTransitionEnd, this), 250);\n                        };\n                    }\n                }\n            },\n\n            updateView () {\n                var view = this._map.getCenter();\n                view.zoom = Math.max(Math.min(this._map.getZoom(), this._map.getMaxZoom() || Geo.default_view_max_zoom), this._map.getMinZoom());\n                this.scene.view.setView(view);\n            },\n\n            updateSize () {\n                var size = this._map.getSize();\n                this.scene.resizeMap(size.x, size.y);\n            },\n\n            resizeOnFirstVisible () {\n                let first_visibility = true;\n                this.hooks.visibilitychange = () => {\n                    if (first_visibility) {\n                        first_visibility = false;\n                        this.updateSize();\n                    }\n                };\n\n                document.addEventListener('visibilitychange', this.hooks.visibilitychange);\n            },\n\n            onTangramViewUpdate () {\n                if (!this._map || this._updating_tangram) {\n                    return;\n                }\n\n                // View changed?\n                let map_center = this._map.getCenter();\n                let view_center = this.scene.view.center;\n                if (map_center.lng === view_center.lng &&\n                    map_center.lat === view_center.lat &&\n                    this._map.getZoom() === this.scene.view.zoom) {\n                    return;\n                }\n\n                this._updating_tangram = true;\n                this._map.setView([this.scene.view.center.lat, this.scene.view.center.lng], this.scene.view.zoom, { animate: false });\n                this._updating_tangram = false;\n            },\n\n            render () {\n                if (!this.scene) {\n                    return;\n                }\n                this.scene.update();\n            },\n\n            // Reverse the CSS positioning Leaflet applies to the layer, since Tangram's WebGL canvas\n            // is expected to be 'absolutely' positioned.\n            reverseTransform () {\n                if (!this._map || !this.scene || !this.scene.container) {\n                    return;\n                }\n\n                var top_left = this._map.containerPointToLayerPoint([0, 0]);\n                L.DomUtil.setPosition(this.scene.container, top_left);\n            },\n\n            // Tie Leaflet event handlers to Tangram feature selection\n            setupSelectionEventHandlers (map) {\n                this._selection_events = {};\n                this._selection_radius = null; // optional radius\n\n                this.hooks.click = (event) => {\n                    if (typeof this._selection_events.click === 'function') {\n                        this.scene.getFeatureAt(event.containerPoint, { radius: this._selection_radius }).\n                            then(selection => {\n                                let results = Object.assign({}, selection, { leaflet_event: event });\n                                this._selection_events.click(results);\n                            });\n                    }\n                };\n                map.on('click', this.hooks.click);\n\n                this.hooks.mousemove = (event) => {\n                    if (typeof this._selection_events.hover === 'function') {\n                        this.scene.getFeatureAt(event.containerPoint, { radius: this._selection_radius }).\n                            then(selection => {\n                                let results = Object.assign({}, selection, { leaflet_event: event });\n                                this._selection_events.hover(results);\n                            });\n                    }\n                };\n                map.on('mousemove', this.hooks.mousemove);\n\n                this.hooks.mouseout = (event) => {\n                    // When mouse leaves map, send an additional selection event to indicate no feature is selected\n                    if (typeof this._selection_events.hover === 'function') {\n                        this._selection_events.hover({ changed: true, leaflet_event: event });\n                    }\n                };\n                map.on('mouseout', this.hooks.mouseout);\n            },\n\n            // Set user-defined handlers for feature selection events\n            // Currently only one handler can be defined for each event type\n            // Event types are: `click`, `hover` (leaflet `mousemove`)\n            setSelectionEvents (events, { radius } = {}) {\n                this._selection_events = Object.assign(this._selection_events, events);\n                this._selection_radius = (radius !== undefined) ? radius : this._selection_radius;\n            },\n\n            // Track the # of layers in the map pane\n            // Used to optimize Tangram redraw sensitivity (redraw more frequently when needing to sync w/other layers)\n            trackMapLayerCounts (map) {\n                this._updateMapLayerCount = () => {\n                    let nodes = map.getPanes().mapPane.childNodes;\n                    this._mapLayerCount = 0;\n                    for (let i=0; i < nodes.length; i++) {\n                        this._mapLayerCount += nodes[i].childNodes.length;\n                    }\n                };\n\n                map.on('layeradd layerremove overlayadd overlayremove', this._updateMapLayerCount);\n                this._updateMapLayerCount();\n            },\n\n            updateTangramDebugSettings () {\n                mergeDebugSettings(this.options.debug || {});\n            }\n\n        });\n\n        // Modified version of Leaflet's setZoomAround that doesn't trigger a moveEnd event\n        setZoomAroundNoMoveEnd = function (layer, latlng, zoom) {\n            var map = layer._map,\n                scene = layer.scene,\n                scale = map.getZoomScale(zoom),\n                viewHalf = map.getSize().divideBy(2),\n                containerPoint = latlng instanceof L.Point ? latlng : map.latLngToContainerPoint(latlng),\n\n                centerOffset = containerPoint.subtract(viewHalf).multiplyBy(1 - 1 / scale),\n                newCenter = map.containerPointToLatLng(viewHalf.add(centerOffset));\n\n            if (scene) {\n                scene.view.markUserInput();\n            }\n            return map._move(newCenter, zoom, { flyTo: true });\n        };\n\n        // Create the layer class\n        LeafletLayer = layerBaseClass.extend(layerClassConfig);\n\n        // Polyfill some 1.0 methods\n        if (typeof LeafletLayer.remove !== 'function') {\n            LeafletLayer.prototype.remove = function() {\n                if (this._map) {\n                    this._map.removeLayer(this);\n                }\n                this.fire('remove');\n            };\n        }\n\n        LeafletLayer.layerBaseClass = layerBaseClass;\n        LeafletLayer.leafletVersion = leafletVersion;\n\n        return new LeafletLayer(options);\n    }\n}\n","/*jshint worker: true*/\n\n// The leaflet layer plugin is currently the primary public API\nimport {leafletLayer} from './leaflet_layer';\nimport Scene from './scene/scene';\n\n// Additional modules are exposed for debugging\nimport version from './utils/version';\nimport log from './utils/log';\nimport Utils from './utils/utils';\nimport Geo from './utils/geo';\nimport Vector from './utils/vector';\nimport DataSource from './sources/data_source';\nimport GLSL from './gl/glsl';\nimport ShaderProgram from './gl/shader_program';\nimport VertexData from './gl/vertex_data';\nimport Texture from './gl/texture';\nimport Material from './lights/material';\nimport Light from './lights/light';\nimport WorkerBroker from './utils/worker_broker';\nimport Task from './utils/task';\nimport {StyleManager} from './styles/style_manager';\nimport StyleParser from './styles/style_parser';\nimport {TileID} from './tile/tile_id';\nimport Collision from './labels/collision';\nimport FeatureSelection from './selection/selection';\nimport TextCanvas from './styles/text/text_canvas';\nimport debugSettings from './utils/debug_settings';\n\nimport yaml from 'js-yaml';\n\n// Make some modules accessible for debugging\nconst debug = {\n    log,\n    yaml,\n    Utils,\n    Geo,\n    Vector,\n    DataSource,\n    GLSL,\n    ShaderProgram,\n    VertexData,\n    Texture,\n    Material,\n    Light,\n    Scene,\n    WorkerBroker,\n    Task,\n    StyleManager,\n    StyleParser,\n    TileID,\n    Collision,\n    FeatureSelection,\n    TextCanvas,\n    debugSettings\n};\n\nexport default {\n    leafletLayer,\n    debug,\n    version\n};\n","// Loads each of the chunks produced by the first Rollup pass.\n// The custom AMD define() in intro.js will combined the shared\n// and worker chunks into a worker bundle that can be instantiated\n// via blob URL.\n\nimport './shared';          // shared code between main and worker threads\nimport './scene_worker';    // worker code, gets turned into a blob URL used to instantiate workers\nimport './index';          \t// main thread code, gets exported as main library below\n\n// This allows the rollup ESM build to work within a <script type=\"module\"> tag\n// Script modules can't expose exports\ntry {\n\tTangram.debug.ESM = _ESM; // mark build as ES module\n\tTangram.debug.SHA = _SHA;\n\tif (_ESM === true && typeof window === 'object') {\n\t    window.Tangram = Tangram;\n\t}\n} catch(e) {}\n\nexport default Tangram;\n"],"names":["Thread","window","Window","document","HTMLDocument","is_worker","is_main","e","self","version","WorkerBroker","message_id","messages","targets","addTarget","name","target","removeTarget","findTarget","method","chain","split","pop","m","length","setupMainThread","postMessage","worker","message","Array","isArray","Promise","all","map","w","options","promise","resolve","reject","payload","transferables","withTransferables","value","type","stringify","JSON","t","object","freeTransferables","log","addWorker","Worker","Error","addEventListener","WorkerBrokerMainThreadHandler","event","data","parse","id","error","result","method_name","apply","then","stack","getMessages","getMessageId","setupWorkerThread","WorkerBrokerWorkerThreadHandler","findTransferables","source","parent","property","list","forEach","x","i","ArrayBuffer","push","buffer","prop","filter","LEVELS","silent","warn","info","debug","trace","methods","logged_once","methodForLevel","level","console","bind","opts","msg","once","logger","slice","workers","setLevel","setWorkers","reset","Utils","isSafari","test","navigator","userAgent","isMicrosoft","_requests","_proxy_requests","io","url","timeout","responseType","headers","request_key","proxy","request","XMLHttpRequest","open","key","setRequestHeader","onload","status","indexOf","body","responseText","response","statusText","onerror","evt","toString","ontimeout","send","cancelRequest","req","abort","serializeWithFunctions","obj","serialized","k","v","use_high_density_display","updateDevicePixelRatio","prev","device_pixel_ratio","devicePixelRatio","isPowerOf2","interpolate","points","transform","x1","x2","d","y","y1","y2","c","toCSSColor","color","Math","round","join","debugSettings","draw_label_collision_boxes","draw_label_texture_boxes","suppress_label_fade_in","suppress_label_snap_animation","show_hidden_labels","layer_stats","wireframe","mergeDebugSettings","settings","Object","assign","addBaseURL","base","isRelativeURL","relative_path","base_info","createElement","href","location","path","pathForURL","origin","protocol","host","search","qs","substr","hash","lastIndexOf","extensionForURL","last_dot","substring","isLocalURL","flattenRelativeURL","dirs","splice","addParamsToURL","params","keys","qs_index","hash_index","url_params","dupes","p","getURLParameter","_createObjectURL","createObjectURL","undefined","URL","webkitURL","replace","regex","RegExp","results","exec","decodeURIComponent","Task","queue","max_time","start_time","state","add","task","pause_factor","elapsed","total_elapsed","stats","calls","performance","now","immediate","process","remove","idx","user_moving_view","pause","run","processAll","finish","cancel","val","Function","shouldContinue","removeForTile","tile_id","setState","subscribeMixin","listeners","subscribe","listener","unsubscribe","index","unsubscribeAll","trigger","hasSubscribersFor","has","sliceObject","sliced","Texture","constructor","gl","sliceOptions","texture","createTexture","valid","retain_count","config_type","loading","loaded","filtering","density","sprites","texcoords","sizes","css_sizes","aspects","setData","Uint8Array","textures","destroy","texture_configs","load","force","deleteTexture","retain","release","unit","activeUnit","activeTexture","TEXTURE0","boundTexture","bindTexture","TEXTURE_2D","setUrl","element","setElement","width","height","calculateSprites","image","Image","canvas","ctx","getContext","drawImage","crossOrigin","src","update","setFiltering","el","querySelector","HTMLCanvasElement","HTMLImageElement","HTMLVideoElement","complete","pixelStorei","UNPACK_FLIP_Y_WEBGL","UNPACK_PREMULTIPLY_ALPHA_WEBGL","texImage2D","RGBA","UNSIGNED_BYTE","power_of_2","texParameteri","TEXTURE_WRAP_S","repeat","REPEAT","CLAMP_TO_EDGE","TEXTURE_WRAP_T","TEXTURE_MIN_FILTER","LINEAR_MIPMAP_LINEAR","TEXTURE_MAG_FILTER","LINEAR","generateMipmap","NEAREST","s","sprite","getTexcoordsForSprite","byteSize","create","getSpriteInfo","texname","size","css_size","aspect","area_origin","area_size","tex_size","area_origin_y","createFromObject","config","skip_create","changed","default","createDefault","getInfo","n","tex","syncTexturesToWorker","names","getMaxTextureSize","getParameter","MAX_TEXTURE_SIZE","GLSL","parseUniforms","uniforms","parsed","uniform","entries","u","defineVariable","array","variable","defineUniform","def","expandVec3","z","parseFloat","every","isNaN","expandVec4","extensions","getExtension","exts","hashString","string","chr","len","charCodeAt","re_pragma","re_continue_line","ShaderProgram","vertex_source","fragment_source","program","compiled","compiling","defines","blocks","block_scopes","dependent_uniforms","attribs","useProgram","deleteProgram","use","current","compile","computed_vertex_source","computed_fragment_source","checkExtensions","buildDefineList","buildShaderBlockList","regexp","block","inject_vertex","match","inject_fragment","mark","scope","num","toUpperCase","ensureUniforms","precision","high","getShaderPrecisionFormat","FRAGMENT_SHADER","HIGH_FLOAT","buildDefineString","buildExtensionString","updateProgram","vertex_shader_source","fragment_shader_source","shader_errors","errors","line","refreshUniforms","refreshAttributes","scopes","cur_scope","b","inject","setUniforms","reset_texture_unit","texture_unit","setTextureUniform","saveUniforms","subset","saved_value","saved_texture_unit","restoreUniforms","updateUniform","uniform_name","texture_name","getUniformLocation","commitUniform","uniform1i","uniform1f","uniform2f","uniform3f","uniform4f","uniform1iv","uniform3iv","uniform1fv","uniform2fv","uniform3fv","uniform4fv","uniformMatrix3fv","uniformMatrix4fv","attribute","attrib","getAttribLocation","lines","ext","programs_by_source","shaders_by_source","define_str","floor","toFixed","str","addBlock","removeBlock","replaceBlock","_tangram_id","vertex_shader","createShader","VERTEX_SHADER","fragment_shader","old_shaders","getAttachedShaders","detachShader","createProgram","attachShader","bindAttribLocation","linkProgram","getProgramParameter","LINK_STATUS","VALIDATE_STATUS","getError","stype","shader","shaderSource","compileShader","getShaderParameter","COMPILE_STATUS","getShaderInfoLog","parseShaderErrors","disabled","bound_vao","init","ext_name","setup","teardown","vao","_vao","createVertexArrayOES","bindVertexArrayOES","getCurrentBinding","bound","setCurrentBinding","binding","deleteVertexArrayOES","mergeObjects","dest","sources","Geo","default_source_max_zoom","default_view_max_zoom","max_style_zoom","tile_size","half_circumference_meters","circumference_meters","min_zoom_meters_per_pixel","meters_per_pixel","metersPerPixel","pow","meters_per_tile","metersPerTile","tile_scale","units_per_pixel","height_scale","units_per_meter","unitsPerMeter","metersForTile","tile","tileForMeters","zoom","wrapTile","mask","metersToLatLng","atan","exp","PI","latLngToMeters","tan","tileSpaceToLatlng","geometry","min","transformGeometry","coord","copyGeometry","copy","coordinates","ring","polygon","boxIntersect","b1","b2","sw","ne","findBoundingBox","min_x","Infinity","max_x","min_y","max_y","num_coords","geometryType","centroid","relative","area","j","p0","p1","f","multiCentroid","polygons","signedPolygonRingAreaSum","polygonRingArea","abs","polygonArea","multiPolygonArea","ringWinding","cache","functions","num_functions","num_cached","clearFunctionStringCache","compileFunctionStrings","wrap","compileFunctionString","fmatch","args","trim","StyleParser","clampPositive","max","noNaN","parseNumber","parsePositiveNumber","wrapFunction","func","zeroPair","freeze","defaults","extrude","min_height","order","outline","material","ambient","diffuse","macros","parseInt","feature","random","getFeatureParseContext","global","style_z","meters_per_pixel_sq","units_per_meter_overzoom","CACHE_TYPE","STATIC","DYNAMIC","ZOOM","createPropertyCache","dynamic_transform","createColorPropertyCache","isPercent","isRatio","isComputed","dualRatioError","createPointSizePropertyCache","has_pct","has_ratio","some","evalCachedPointSizeProperty","sprite_info","texture_info","context","evalCachedProperty","createPointSizeCacheEntry","image_info","dynamic","tryEval","static","convertUnits","units","parseUnits","evalCachedDistanceProperty","string_colors","colorForString","parseCSSColor","evalCachedColorProperty","zoom_preprocessed","evalCachedColorPropertyWithAlpha","alpha_prop","alpha","parseColor","calculateOrder","properties","evalProperty","layers","FeatureSelection","lock_fn","_lock_fn","requests","read_delay","read_delay_timer","pixels","fbo","createFramebuffer","bindFramebuffer","FRAMEBUFFER","fbo_size","fbo_texture","framebufferTexture2D","COLOR_ATTACHMENT0","fbo_depth_rb","createRenderbuffer","bindRenderbuffer","RENDERBUFFER","renderbufferStorage","DEPTH_COMPONENT16","framebufferRenderbuffer","DEPTH_ATTACHMENT","deleteFramebuffer","locked","viewport","clearColor","defaultColor","getFeatureAt","point","radius","selection_request_id","pendingRequests","hasPendingRequests","clearPendingRequests","r","sent","read","clearTimeout","setTimeout","feature_key","worker_id","diam_px","max_radius","ceil","byteLength","fill","readPixels","min_dist","dist","finishRead","makeEntry","map_entry","ir","ig","ib","ia","map_prefix","g","a","map_size","tiles","coords","generation","makeColor","selector","source_name","source_layer","layer","clearSource","clearTile","getMapSize","setPrefix","prefix","BYTE","SHORT","UNSIGNED_SHORT","INT","UNSIGNED_INT","FLOAT","VBOMesh","vertex_data","element_data","vertex_layout","vertex_buffer","createBuffer","buffer_size","draw_mode","TRIANGLES","data_usage","STATIC_DRAW","vertices_per_geometry","created_at","Date","fade_in_time","vertex_count","stride","element_count","vaos","toggle_element_array","geometry_count","element_type","Uint16Array","element_buffer","bindBuffer","ELEMENT_ARRAY_BUFFER","bufferData","upload","render","visible_time","drawElements","drawArrays","VertexArrayObject","ARRAY_BUFFER","enableDynamicAttributes","enableStaticAttributes","deleteBuffer","material_props","Material","mapping","scale","amount","specular","shininess","normal","isValid","emission","style","texdef","replaceShaderBlock","material_source","addShaderBlock","setupProgram","_program","Vector","V","lim","neg","v1","v2","sub","signed_area","v3","mult","div","perp","rot","cos","sin","angle","atan2","angleBetween","A","B","delta","dot","normalize","acos","isEqual","lengthSq","sqrt","cross","Light","view","types","setMode","mode","enabled","lights","calculateLights","light_name","calculateFunction","instance","struct_name","AmbientLight","ambient_source","DirectionalLight","direction","_direction","theta","directional_source","PointLight","position","position_eye","attenuation","point_source","updateEyePosition","camera","position_meters","SpotLight","exponent","spot_source","MethodNotImplemented","methodName","DataSource","validate","pad_scale","default_winding","rasters","preprocess","extra_data","scripts","setZooms","zoom_offset","setTileSize","min_display_zoom","zooms","max_display_zoom","register","type_name","type_func","source_class","tileLayoutChanged","prev_source","rebuild_params","cur","projectData","timer","num_features","features","projectCoord","projection","scaleData","source_data","_load","updateDefaultWinding","copyTileData","max_zoom","zoom_bias","log2","geom","includesTile","network_request_id","NetworkSource","response_type","URLs","param","request_headers","formatURL","network","request_id","response_size","parsing","parseSourceData","catch","NetworkTileSource","tiled","bounds","parseBounds","builds_geometry_tiles","tms","url_subdomains","next_url_subdomain","url_density_scales","latlng","meters","checkBounds","url_template","getDensityModifier","toQuadKey","dpr","reverse","quadkey","urlHasTilePattern","TileID","coordKey","normalizedKey","normalizedCoord","coordAtZoom","coordForTileZooms","zscale","nz","findZoomInRange","isDescendant","descendant","sz","children","CACHE","span","nx","ny","nc","RasterTileSource","unshift","_default","tileTexture","adjustRasterTileZoom","tile_source","zdiff","RasterSource","load_image","mask_alpha","preserve_tiles_within_zoom","max_display_density","composite","images","blend","use_alpha","imageSmoothingEnabled","loadImage","mpp","dx","dy","sx","sy","globalAlpha","prototype","call","is_composite","url_msg","bounds_msg","mutex_msg","makeWireframeForTriangleElementData","wireframe_data","set","Style","styles","introspection","setGeneration","hasOwnProperty","shaders","selection","compile_setup","selection_program","feature_style","vertex_template","tile_data","stencil_proxy_tiles","variants","vertex_layouts","TANGRAM_WORLD_POSITION_WRAP","blend_order","default_blend_orders","removeShaderBlock","lighting","setupRasters","setupCustomAttributes","initialized","main_thread_target","baseStyle","startData","meshes","endData","variant","mesh","end","vertex_elements","buildRasterTextures","hasDataForTile","getTileMesh","vertexLayoutForMeshVariant","createVertexData","meshVariantTypeForDraw","addFeature","draw","parseFeature","buildGeometry","geom_count","buildPolygons","buildLines","buildPoints","tree","ftree","addLayerDebugEntry","node","fnode","levels","geoms","parseOrder","group","_parseFeature","attributes","aname","interactive","selection_color","preprocessed","_preprocess","scaleOrder","setGL","max_texture_size","makeMesh","_objectSpread","LINES","getProgram","compileSetup","selection_defines","TANGRAM_FEATURE_SELECTION","vertex_shader_src","fragment_shader_src","selection_fragment_source","hasRasters","raster","TANGRAM_RASTER_TEXTURE_COLOR","TANGRAM_RASTER_TEXTURE_NORMAL","num_raster_sources","TANGRAM_NUM_RASTER_SOURCES","num_masked_rasters","TANGRAM_HAS_MASKED_RASTERS","TANGRAM_ALL_MASKED_RASTERS","TANGRAM_MODEL_POSITION_BASE_ZOOM_VARYING","rasters_source","u_samplers","u_sizes","u_offsets","dz","dz2","loadTextures","configs","varying","addCustomAttributesToAttributeList","normalized","addCustomAttributesToVertexTemplate","_this$shaders","render_states","opaque","depth_test","depth_write","translucent","multiply","inlay","overlay","Number","MIN_SAFE_INTEGER","getBlendOrderForDraw","faeture_count","bases","MAX_VALUE","has_element_index_uint","VertexElements","has_overflown","setElementIndexUint","flag","overflown","typedArray","Uint32Array","array_types","Float32Array","Int8Array","Int32Array","Int16Array","VertexData","prealloc","array_pool","byte_length","offset","realloc_count","setBufferViews","setAddVertexFunction","views","dynamic_attribs","array_type","checkBufferSize","new_view","vertexLayoutAddVertex","getAddVertexFunction","addVertex","vertex","subarray","VertexLayout","static_attribs","components","count","byte_size","shift","offset_typed","enabled_attribs","disableVertexAttribArray","enableVertexAttribArray","vertexAttribPointer","createAddVertexFunction","add_vertex_funcs","last_type","sort","component","tile_bounds","default_uvs","outsideTile","_a","_b","tolerance","tile_min","tile_max","isCoordOutsideTile","earcutModule","up_vec3","texcoord_index","texcoord_scale","texcoord_normalize","num_polygons","min_u","min_v","max_u","max_v","span_x","span_y","scale_u","scale_v","max_rings","quickselect","indices","triangulatePolygon","earcut","flatten","num_indices","element_offset","ring_index","polygon_ring","buildExtrudedPolygons","normal_index","normal_normalize","remove_tile_edges","tile_edge_tolerance","winding","min_z","max_z","q","contour","w0","w1","wall_vertices","wall_vec","wv","vertices","holes","dimensions","Polygons","built_in","polygons_vs","polygons_fs","arguments","TANGRAM_NORMAL_ATTRIBUTE","TANGRAM_TEXTURE_COORDS","tile_edges","computeVariant","mesh_order","makeVertexTemplate","a_texcoord","a_normal","zero_vec2","CAP_TYPE","butt","square","JOIN_TYPE","miter","bevel","DEFAULT_MITER_LIMIT","MIN_FAN_WIDTH","TEXCOORD_NORMALIZE","V_SCALE_ADJUST","zero_v","one_v","mid_v","buildPolylines","vindex","closed_polygon","cap_type","cap","join_type","miter_limit","miter_len_sq","v_scale","texcoord_width","half_width","extrude_index","a_extrude","offset_index","a_offset","buildPolyline","extra_lines","coordCurr","coordNext","normPrev","normNext","has_texcoord","boundaryIndex","getTileBoundaryIndex","permutedLine","permuteLine","index_start","index_end","ignored_indices_count","nonBoundarySegment","getNextNonBoundarySegment","startPolygon","addCap","currIndex","nextIndex","indexPairs","nonBoundaryLines","addMiter","addJoin","endPolygon","backIndex","startIndex","endIndex","miterVec","createMiterVec","isBeginning","isClockwise","addFan","num_pairs","num_vertices","flip","uvCurr","eA","eC","eB","uvA","uvC","uvB","isCap","isBevel","numTriangles","trianglesPerArc","pivotIndex","blade","affine_uvCurr","uv_delta","angle_step","neg_normal","tangent","nA","nB","newLine","default_dash_color","default_background_color","renderDashArray","pattern","dash_pixel","dash_color","background_color","dashes","dash","segment","Lines","DASH_SCALE","TANGRAM_EXTRUDE_LINES","outline_feature_style","inline_feature_style","dash_textures","calcDistance","calcDistanceNextZoom","calcWidth","next_width","width_unscaled","next_width_unscaled","mid_width","width_scale","inline_texcoord_width","overzoom2","calcOffset","offset_precalc","offset_scale","offset_scale_precalc","next_offset","visible","outline_width","outline_next_width","dash_key","dashTextureKey","dash_background_color","texture_merged","is_outline","outline_style","getDashTexture","dash_texture","u_has_line_texture","u_texture","u_v_scale_adjust","pending","u_texture_ratio","u_has_dash","u_dash_background_color","z_or_offset","pre_angles_normalize","angles_normalize","offsets_normalize","size_normalize","ix","iy","shape","buildQuadForPoint","offsets","pre_angles","angles","curve","w2","h2","uvs","a_position","a_shape","a_pre_angles","a_angles","a_offsets","lefts","rights","tops","bottoms","PointAnchor","computeOffset","anchor","offset2","default_buffer","isLeftAnchor","isRightAnchor","isTopAnchor","isBottomAnchor","alignForAnchor","zero_buffer","boxIntersectsBox","boxIntersectsList","boxes","callback","ZERO_AXES","proj_a","proj_b","d0","d1","d2","d3","OBB","h","dimension","quad","axis_0","axis_1","toJSON","getExtent","aabb","updateAxes","x0","y0","projectToAxis","obb","axis","proj","axisCollide","obb_a","obb_b","intersect","Label","layout","nextLabelId","placed","unit_scale","align","throw_away","breach","may_repeat_across_tiles","textLayoutToJSON","occluded","bboxes","exclude","aabbs","obbs","inTileBounds","mayRepeatAcrossTiles","collide","repeat_distance","discard","label","id_prefix","id_multiplier","epsilon","priority","repeat_group","italic","RepeatGroup","repeat_dist","repeat_dist_sq","positions","check","p2","dist_sq","clear","groups","repeat_scale","CollisionGrid","cells","addLabel","addLabelBboxes","cell_bounds","gy","gx","Collision","grid","initGrid","startTile","apply_repeat_groups","return_hidden","objects","labels","resetTile","abortTile","addStyle","tile_objects","endTile","addLabelsToGrid","priorities","style_objects","canBePlaced","linked","show","place","placeable","reduce","keep","cell","LabelPoint","start_anchor_index","degenerate","updateBBoxes","PLACEMENT","VERTEX","MIDPOINT","SPACED","CENTROID","default_spacing","placePointsOnLine","strategy","placement","min_length","placement_min_length_ratio","getPositionsAndAngles","getAngle","norm","upp","spacing","placement_spacing","getLineLength","num_labels","remainder","distance","interpolateLine","sum","interpolateSegment","ratio","TextSettings","weight","family","px_size","stroke","stroke_width","underline_width","background_width","background_stroke_color","background_stroke_width","text_wrap","max_lines","supersample","compute","font","supersample_text","can_articulate","underline","background","font_css","fontCSS","FontManager","fonts_loaded","last_loaded","loadFonts","fonts","same","face","loadFontFace","injectFontFace","observer","FontFaceObserver","supports_native_font_loading","FontFace","bytes","String","fromCharCode","btoa","encodeURI","css","style_el","appendChild","createTextNode","head","sheet","insertRule","rtl_test","isTextRTL","neutral_chars","neutral_test","isTextNeutral","RTL_MARKER","arabic_range","arabic_splitters","arabic_vowels","accents_and_vowels","combo_characters","grapheme_match","curve_blacklist","Mongolian","curve_blacklist_range","curve_blacklist_test","isTextCurveBlacklisted","default_segment_length","splitLabelText","text","rtl","segment_length","segment_hits","segments","carryover_vowels","test_text","grapheme_count","grapheme_cluster","segment_misses","MultiLine","createLine","line_height","Line","line_width","measureText","addEllipsis","advance","can_push","last_line","ellipsis_width","ellipsis","append","words","multiline","breaks","new_line","word","spaced_word","exceedsTextwrap","chars","TextCanvas","createCanvas","vertical_text_buffer","horizontal_text_buffer","background_size","backgroundColor","resize","clearRect","setFont","strokeStyle","lineWidth","fillStyle","miterLimit","textSizes","texts","processTextSizesTask","cursor","style_idx","text_idx","text_infos","first","text_info","text_settings","textSize","bidi","isRTL","no_curving","vertical_buffer","segment_sizes","text_hits","text_misses","text_count","applyTextTransform","horizontal_buffer","leading","collision_size","texture_size","logical_size","drawTextMultiLine","label_type","save","fillRect","strokeRect","restore","voffset","ty","line_num","drawTextLine","drawTextDebug","tx","uy","beginPath","moveTo","lineTo","strokeText","fillText","rasterize","texture_prefix","processRasterizeTask","cancelRasterizeTask","texture_idx","texture_resize","texture_names","texcoord_cache","texcoord","texture_position","texture_id","curved","texcoords_stroke","texcoord_stroke","texture_position_stroke","aligned_text_settings","tname","setTextureTextPositions","cx","cy","column_width","placeText","text_width","text_height","txt","charAt","toLowerCase","fontPixelSize","font_size_re","pruneTextCache","text_count_max","segment_count_max","text_texture_id","TextLabels","resetText","freeText","parseTextFeature","parseTextSource","text_settings_key","repeat_group_prefix","left","right","current_text","computeTextLayout","ref","text_source","parseTextSourceValue","prepareTextLabels","canceled","buildTextLabels","collideAndRenderTextLabels","collision_group","cullTextStyles","rasterized","calcTextSizes","rasterizeTexts","tile_key","preprocessText","orientation","computeLayout","subdiv","require$$0","vec3","fromValues","out","Float64Array","mat3","normalFromMat4","mat3_normalFromMat4","invert","mat3_invert","mat4","mat4_multiply","translate","mat4_translate","mat4_scale","perspective","mat4_perspective","lookAt","mat4_lookAt","identity","mat4_identity","mat4_copy","Camera","IsometricCamera","FlatCamera","PerspectiveCamera","updateView","lng","lat","setView","setupMatrices","matrices","model_view32","view_matrix","model","normal32","inverse_normal32","focal_length","fov","vanishing_point","vanishing_point_skew","projection_matrix","constrainCamera","view_height","updateMatrices","viewport_height","center","VIEW_PAN_SNAP_TIME","View","scene","createMatrices","panning","panning_stop_at","pan_snap_timer","zoom_direction","user_input_at","user_input_timeout","user_input_active","device","continuous_zoom","continuousZoom","wrapView","createCamera","active_camera","getActiveCamera","cameras","active","setActiveCamera","updateConfig","rebuild","ready","setViewportSize","updateBounds","setZoom","last_tile_zoom","tile_zoom","baseZoom","requestRedraw","setPanning","markUserInput","tile_manager","updateTilesForView","findVisibleTileCoordinates","range","tmax","pruneTilesForView","removeTiles","isProxy","view_buffer","view_tile_min","view_tile_max","model32","model_view","setupTile","isAnimating","Points","SHADER_POINT_VARIANT","TANGRAM_POINT_TYPE_TEXTURE","TANGRAM_POINT_TYPE_LABEL","TANGRAM_POINT_TYPE_SHADER","DEFAULT_POINT_SIZE","points_vs","points_fs","collision","setupDefines","TANGRAM_HAS_SHADER_POINTS","collision_group_points","collision_group_text","TANGRAM_LAYER_ORDER","TANGRAM_FADE_IN_RATE","TANGRAM_VIEW_PAN_SNAP_RATE","TANGRAM_SHOW_HIDDEN_LABELS","TANGRAM_WIREFRAME","queues","texture_missing_sprites","label_texture","hasSprites","parseSprite","logged","calcSize","outline_color","outline_edge_pct","outline_alpha","tf","queueFeature","text_feature","sprite_default","text_objs","point_objs","feature_labels","buildLabels","point_obj","text_obj","point_label","optional","angle_func","default_anchor","feature_queue","fq","point_labels","ln","rings","polys","add_custom_attribs","shader_point","buildQuad","build","buildCurvedLabel","buildStraightLabel","u_point_type","u_apply_color_blocks","trackLabel","num_segments","label_textures","seg_count","container","ranges","start","STOPS","LINE_EXCEED_STRAIGHT","LINE_EXCEED_STRAIGHT_NO_CURVE","LINE_EXCEED_STAIGHT_LOOSE","STRAIGHT_ANGLE_TOLERANCE","CURVE_MIN_TOTAL_COST","CURVE_MIN_AVG_COST","CURVE_MAX_ANGLE","ORIENTED_LABEL_OFFSET_FACTOR","VERTICAL_ANGLE_TOLERANCE","LabelLine","total_size","passes","LabelLineStraight","LabelLineCurved","LabelLineBase","splitLineByOrientation","current_line","current_length","max_length","longest_line","pt","prev_pt","shouldDiscard","in_bounds","createOBB","angle_offset","fit","flipped","line_lengths","getLineLengths","label_length","curr","curve_tolerance","ahead_index","prev_angle","ahead_curr","ahead_next","next_angle","getAngleForSegment","getAbsAngleDiff","calcFitness","curr_midpt","o","height_px","label_lengths","total_line_length","next","total_label_length","start_index","end_index","anchor_index","curvaturePlacement","stop","scaleLine","placeAtIndex","offsets1d","pre_angle","angle_segment","curvatures","norm_1","norm_2","curvature","total_costs","avg_costs","line_index","window_start","window_end","line_position","cost","avg_cost","min_total_cost","min_index","min_avg_cost","relative_offsets","getIndicesAndOffsets","getPositionsFromIndicesAndOffsets","getAnglesFromIndicesAndOffsets","label_index","label_offset","line_offset","offset2d","offset_angle","getTextAngleForSegment","prev_pre_angle","line_length","pq","pt1","pt2","lengths","hypot","angle1","angle2","small","big","TextStyle","super","TANGRAM_CURVED_LABEL","straight","fql","buildLineLabels","seg_per_div","line_segment","RasterStyle","StyleManager","base_styles","active_styles","active_blend_orders","style_globals_source","selection_globals_source","selection_vertex_source","TANGRAM_EPSILON","TANGRAM_LAYER_DELTA","TANGRAM_TILE_SCALE","TANGRAM_HEIGHT_SCALE","TANGRAM_ALPHA_TEST","_name","getActiveStyles","updateActiveStyles","getActiveBlendOrders","updateActiveBlendOrders","orders","style_meshes","oi","findIndex","mix","mixed","animated","draws","mixShaders","shader_merges","_uniforms","_uniform_scopes","defineProperty","enumerable","configurable","get","mixed_source","block_scope","styles_defs","values","blends","style_deps","inheritanceDepth","sname","ws","initStyles","parents","notNull","maybeQuote","lookUp","nullValue","propertyEqual","propertyOr","arr","printNested","joiner","any","_","parseFilter","not","none","propertyMatchesBoolean","rangeMatch","expressions","rangeTransform","includesMatch","includes_any","vals","includes_all","filterAST","filterToString","buildFilter","reserved","layer_cache","layerCache","cacheKey","mergeTrees","matchingTrees","treeDepth","blacklist","Layer","exclusive","config_data","full_name","MAX_SAFE_INTEGER","is_built","buildDraw","calculatedDraw","calculateDraw","filter_original","buildZooms","buildPropMatches","FilterOptions","$zoom","ztype","zmin","zmax","context_prop_matches","feature_prop_matches","doPropMatches","doesMatch","children_to_parse","parseLayerChildren","LayerLeaf","is_leaf","LayerTree","is_tree","addLayer","buildDrawGroups","layer_ids","matchFeature","cache_key","draw_groups","draw_keys","draw_key","isReserved","isEmpty","groupProps","cs","parseLayerNode","empty","Create","child","parseLayers","layer_trees","collected_layers","collected_layers_ids","matched","child_matched","build_id","Tile","proxy_for","proxied_as","proxy_level","proxy_order_offset","fade_in","built","labeled","overzoom","new_mesh_styles","pending_label_meshes","setWorker","freeResources","workerMessage","buildAsMessage","abortBuild","scene_id","building","feature_count","layer_name","source_layers","getDataForSource","group_name","style_name","tile_styles","stylesForTile","buildStyleGroups","group_by","progress","done","buildStyleGroup","mesh_data","style_data","source_config","scene_layer_name","all_layers","buildMeshes","mesh_variant","mesh_options","ao","bo","geometry_ratio","printDebug","pendingLabelStyleCount","swapPendingLabels","setProxyFor","shouldProxyForStyle","tile_subset","merge","other","coord_children","debugSumLayerStats","counts","addDebugLayers","require$$1","require$$2","PARSE_JSON_TYPE","NONE","ALL","SOME","PARSE_JSON_TEST","MVTSource","parse_json","parse_json_type","parse_json_prop_list","Pbf","VectorTile","toGeoJSON","l","extent","layer_geojson","feature_geojson","parseJSONProperties","loadGeometry","VectorTileFeature","decodeMultiPolygon","props","poly","outer_winding","GeoJSONSource","load_data","tile_indexes","geojsonvt","maxZoom","getTileFeatures","getTile","collection","tags","getLayers","preprocessLayers","preprocessFeatures","generate_label_centroids","features_centroid","centroid_properties","centroid_feature","getCentroidFeatureForPolygon","max_area","max_area_index","GeoJSONTileSource","prepareGeoJSON","newProperties","TopoJSONSource","getTopoJSONFeature","topology","topojson","TopoJSONTileSource","SceneWorker","num_workers","log_level","has_element_index_unit","external_scripts","_worker_id","style_manager","importExternalScripts","prev_names","getOwnPropertyNames","importScripts","createDataSources","syncing_textures","syncTextures","configuring","last_config_sources","config_sources","last_sources","awaitConfiguration","buildTile","loadTileSourceData","removeTile","queryFeatures","tile_keys","feature_visible","$source","$layer","$geometry","$visible","getFeatureSelection","resetFeatureSelection","getFeatureSelectionMapSize","tex_config","profile","profileEnd","functionStringCache","Context","context_id","fullscreen","top","zIndex","innerWidth","innerHeight","getPropertyPath","_getPropertyPathTarge","getPropertyPathTarget","setPropertyPath","GLOBAL_PREFIX","GLOBAL_PREFIX_LENGTH","GLOBAL_REGISTRY","isGlobalReference","isGlobalSubstitution","prop_or_path","_target$GLOBAL_REGIST","flattenGlobalProperties","globals","applyGlobalProperties","_target$GLOBAL_REGIST2","base64.fromByteArray","ieee754.read","ieee754.write","base64.toByteArray","require","Buffer.isBuffer","process.nextTick","require$$3","require$$4","require$$5","require$$6","require$$7","jsYaml","require$$8","SceneBundle","path_for_parent","isContainer","loadResource","resourceFor","urlFor","pathFor","typeFor","ZipSceneBundle","zip","files","root","JSZip","loadAsync","parseZipFiles","loadRoot","urlForZipFile","typeForZipFile","findRoot","yamls","depth","paths","file","dir","async","Blob","createSceneBundle","parseResource","yaml","safeLoad","json","SceneLoader","loadScene","texture_nodes","loadSceneRecursive","bundle","finalize","import","imports","resource","normalizeDataSources","normalizeFonts","normalizeTextures","collectTextures","sn","normalizeDataSource","faces","tn","addTextureNode","texture_path","path_stack","layer_path","pathKey","hoistTextureNodes","base_bundle","curValue","default_light","TilePyramid","max_proxy_descendant_depth","max_proxy_ancestor_depth","children_cache","addTile","descendants","getAncestor","getDescendants","prev_visible","mainThreadLabelCollisionPass","view_zoom","hide_breach","containers","max_tile_label_count","flat","grid_divs","off","zoom_scale","size_scale","tile_meshes","label_id","should_discard","TileManager","pyramid","visible_coords","queued_coords","building_tiles","renderable_tiles","mesh_set","zoom_steps","forEachTile","keepTile","hasTile","forgetTile","tileBuildStop","remove_tiles","tile_coords","queueCoordinate","updateTileStates","updateVisibility","loadQueuedCoordinates","updateProxyTiles","updateRenderableTiles","updateLabels","_this","initial","roundPrecision","meshSetString","isLoadingVisibleTiles","pruneToVisibleTiles","getRenderableTiles","allVisibleTilesLabeled","half_span","ac","bc","ad","bd","center_dist","loadCoordinate","tileBuildStart","buildTileStylesCompleted","buildTileError","checkBuildQueue","tileManagerBuildDone","getDebugProp","getDebugSum","getDebugAverage","places","RenderState","RenderStateManager","culling","culling_face","BACK","blending","blending_src","ONE_MINUS_SRC_ALPHA","blending_dst","blending_src_alpha","ONE","blending_dst_alpha","depthFunc","LESS","cull","enable","CULL_FACE","cullFace","disable","dst","src_alpha","dst_alpha","BLEND","blendFuncSeparate","blendFunc","depthMask","DEPTH_TEST","MediaCapture","screenshot_canvas","screenshot_context","queue_screenshot","video_capture","setCanvas","screenshot","completeScreenshot","Uint8ClampedArray","ImageData","putImageData","toDataURL","atob","blob","startVideoCapture","MediaRecorder","captureStream","chunks","stream","mimeType","media_recorder","ondataavailable","tracks","getTracks","track","removeTrack","stopVideoCapture","setupSceneDebug","timeRebuild","times","cycle","avg","geometryCountByStyle","geometryCountByBaseStyle","style_counts","geometryCountTotal","geometrySizeByStyle","geometrySizeByBaseStyle","style_sizes","geometrySizeTotal","textureSizeTotal","layerStats","renderableTilesCount","Scene","config_source","initializing","numWorkers","disableVertexArrayObjects","highDensityDisplay","config_bundle","last_valid_config_source","dirty","preUpdate","postUpdate","render_loop","disableRenderLoop","render_loop_active","render_loop_stop","render_count","last_render_count","render_count_changed","frame","last_main_render","last_selection_render","media_capture","selection_feature_count","fetching_selection_map","prev_textures","resetTime","contextOptions","webGLContextOptions","createListeners","updating","last_complete_generation","logLevel","view_complete","base_path","blocking","setupRenderLoop","createWorkers","destroyFeatureSelection","serialize_funcs","freePreviousTextures","last_valid_options","file_type","last_valid_base_path","destroyListeners","parentNode","removeChild","loseContext","destroyWorkers","premultipliedAlpha","stencil","powerPreference","resizeMap","clientWidth","clientHeight","updateExternalScripts","prev_scripts","makeWorkers","Tangram","workerURL","_id","next_worker","terminate","immediateRedraw","renderLoop","requestAnimationFrame","main","will_render","updateViewComplete","updateBackground","renderPass","logFirstFrame","allow_blend","computed_color","program_key","clearFrame","last_blend","blend_orders","setRenderState","colorMask","renderStyle","EQUAL","STENCIL_TEST","clearStencil","STENCIL_BUFFER_BIT","stencilFunc","ZERO","stencilOp","KEEP","INCR","proxy_levels","REPLACE","GEQUAL","first_for_style","max_mesh_order","mo","first_for_tile","order_meshes","setupStyle","COLOR_BUFFER_BIT","DEPTH_BUFFER_BIT","cull_face","SRC_ALPHA","SRC_COLOR","pixel","unique","uniqueify_on_id","uniqueify","new_generation","queued","syncConfigToWorker","resetWorkerFeatureSelection","logFirstBuild","config_path","setDataSource","rebuild_all","prev_source_names","source_id","updateStyles","createLights","light","setBackground","bg","last_color","setIntrospection","config_serialized","move","warning","scene_loader","resetViewComplete","first_frame","first_build","debounce","wait","later","LeafletLayer","leafletLayer","extendLeaflet","originalHandlers","scrollWheelZoom","doubleClickZoom","L","leaflet","layerBaseClass","GridLayer","TileLayer","leafletVersion","layerClassConfig","setZoomAroundNoMoveEnd","_addTile","_removeTile","_reset","initialize","showDebug","setOptions","updateTangramDebugSettings","createScene","hooks","_updating_tangram","noWrap","onAdd","updateSize","on","getCenter","getZoom","getMaxZoom","getMinZoom","_mapLayerCount","moveend","drag","_map_pane_observer","MutationObserver","mutations","reverseTransform","observe","getPanes","mapPane","modifyScrollWheelBehavior","modifyZoomBehavior","trackMapLayerCounts","setupSelectionEventHandlers","setSelectionEvents","events","selectionRadius","getContainer","resizeOnFirstVisible","onTangramViewUpdate","sceneBasePath","sceneFileType","attribution","attributionControl","addAttribution","fire","onRemove","_updateMapLayerCount","click","mousemove","mouseout","removeEventListener","visibilitychange","disconnect","createTile","setAttribute","debug_overlay","textContent","fontSize","textOutline","padding","borderStyle","borderColor","borderWidth","modifyScrollWheel","zoomSnap","Browser","chrome","safari","_onWheelScroll","DomEvent","getWheelDelta","_delta","_lastMousePos","_map","mouseEventToContainerPoint","_performZoom","wheelDebounceTime","debounceMoveEnd","_moveEnd","_stop","wheelPxPerZoomLevel","flyAround","targetCenter","targetZoom","startZoom","_zoom","latLng","duration","_flyToFrame","Util","requestAnimFrame","_moveStart","_onDoubleClick","oldZoom","zoomDelta","originalEvent","shiftKey","containerPointToLatLng","containerPoint","_zoomAnimated","_animateZoom","startAnim","noUpdate","_animatingZoom","_animateToCenter","_animateToZoom","_onZoomTransitionEnd","getSize","first_visibility","map_center","view_center","animate","top_left","containerPointToLayerPoint","DomUtil","setPosition","_selection_events","_selection_radius","leaflet_event","hover","nodes","childNodes","getZoomScale","viewHalf","divideBy","Point","latLngToContainerPoint","centerOffset","subtract","multiplyBy","newCenter","_move","flyTo","extend","removeLayer"],"mappings":"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C,KAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;AAC9C,KAAI,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAA;AAC9C,KAAI,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAA;AAC9C,KAAI,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAA;AAC9C,KAAI,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAA;;AAE9C,KAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAA;AAChD,KAAI,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAA;AAC9C,KAAI,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAA;AAC9C,KAAI,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAA;AAC/C,KAAI,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,EAA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,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA,CAAC,KAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,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Q,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAA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AAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,C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CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAA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,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,OAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,OAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,CAAC,CAAC,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAc,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAA,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAc,IAAI,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,MAAA,CAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAA,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAA,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAA,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAA,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAA,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAA,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAA,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAI,EAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CA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","x_google_ignoreList":[1,2,3,4,18,24,42,43,60,66,67,68,69,70,71,72,73,74,86,87,88,89,90,91,92,94,95,96,97,98,99,100,101,103,104,105,106,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147]}