From b1215c256303e9b44481e59202bb59f6b43d0eec Mon Sep 17 00:00:00 2001 From: Arnau Alier Torres Date: Sun, 27 Apr 2025 01:36:11 +0200 Subject: [PATCH] Model loading fully working and tools for workbench --- Deer/Include/DeerRender/Components.h | 3 + Deer/Include/DeerRender/Mesh.h | 29 +- Deer/Include/DeerRender/Render/VertexArray.h | 1 - Deer/src/DeerRender/Mesh/MeshExampleData.cpp | 15 +- Deer/src/DeerRender/Mesh/MeshGPULoader.cpp | 34 + .../VertexPositionSerialization.h | 6 - Deer/src/DeerRender/Scene/Environment.cpp | 25 +- .../MeshRenderComponentSerialization.h | 2 +- DeerStudio/src/DeerStudio/DeerStudio.cpp | 12 +- .../DeerStudio/Editor/PropertiesPannel.cpp | 2 +- DeerStudio/src/DeerStudio/Editor/Viewport.cpp | 56 +- Tools/Blockbench/deer_engine_exporter.js | 244 + Tools/Blockbench/exporter.js | 8 + roe/3dMesh.dmesh | 3011 ++++++++++ roe/imgui.ini | 22 +- roe/meshes/3dMesh.dmesh | 466 ++ roe/meshes/Mesh.dmesh | 5206 +++++++++++++++++ roe/meshes/example.dmesh | 1667 ++++++ roe/meshes/mainObject | 466 ++ roe/meshes/voxels/vaspect.example | 18 + roe/meshes/voxels/voxel.example | 6 + roe/shaders/shader.glsl | 37 + 22 files changed, 11264 insertions(+), 72 deletions(-) create mode 100644 Deer/src/DeerRender/Mesh/MeshGPULoader.cpp create mode 100644 Tools/Blockbench/deer_engine_exporter.js create mode 100644 Tools/Blockbench/exporter.js create mode 100644 roe/3dMesh.dmesh create mode 100644 roe/meshes/3dMesh.dmesh create mode 100644 roe/meshes/Mesh.dmesh create mode 100644 roe/meshes/example.dmesh create mode 100644 roe/meshes/mainObject create mode 100644 roe/meshes/voxels/vaspect.example create mode 100644 roe/meshes/voxels/voxel.example create mode 100644 roe/shaders/shader.glsl diff --git a/Deer/Include/DeerRender/Components.h b/Deer/Include/DeerRender/Components.h index 04721a3..c06d4c2 100755 --- a/Deer/Include/DeerRender/Components.h +++ b/Deer/Include/DeerRender/Components.h @@ -17,6 +17,9 @@ namespace Deer { MeshRenderComponent(const MeshRenderComponent&) = default; MeshRenderComponent(uint32_t _mesh, uint32_t _shader) : shaderAssetID(_shader), meshAssetID(_mesh) { } + Ref shader; + Ref vertexArray; + uint32_t shaderAssetID = 0; uint32_t meshAssetID = 0; }; diff --git a/Deer/Include/DeerRender/Mesh.h b/Deer/Include/DeerRender/Mesh.h index a6b5ca3..163cb60 100644 --- a/Deer/Include/DeerRender/Mesh.h +++ b/Deer/Include/DeerRender/Mesh.h @@ -2,30 +2,17 @@ #include #include "Deer/Path.h" +#include "DeerRender/Render/VertexArray.h" namespace Deer { - - // This struct represents the data save in a position vertex, this is - // defined by: integerPart.decimalPart, where each decimal part represents - // 1 / 256. And the integer part is substracted 128 - // Example: integerPart = 129; decimalPart = 32; - // Result = (129-128).(32/256) = 1.125f - struct PositionAxis { - uint8_t integerPart = 0; - uint8_t decimalPart = 0; - - PositionAxis() = default; - PositionAxis(uint8_t ip, uint8_t dp) - : integerPart(ip), decimalPart(dp) {} - }; - + // The real position is the axis divided by 256, the model precition is 1 / 256.0f struct VertexPosition { - PositionAxis x; - PositionAxis y; - PositionAxis z; + int16_t x; + int16_t y; + int16_t z; VertexPosition() = default; - VertexPosition(PositionAxis _x, PositionAxis _y, PositionAxis _z) + VertexPosition(int16_t _x, int16_t _y, int16_t _z) : x(_x), y(_y), z(_z) {} }; @@ -69,6 +56,10 @@ namespace Deer { } }; + namespace Mesh { + Ref loadModelToGPU(const MeshData&); + } + namespace DataStore { void saveModel(const MeshData&, const Path& name); void loadModel(MeshData&, const Path& name); diff --git a/Deer/Include/DeerRender/Render/VertexArray.h b/Deer/Include/DeerRender/Render/VertexArray.h index 3c7be47..78807ec 100755 --- a/Deer/Include/DeerRender/Render/VertexArray.h +++ b/Deer/Include/DeerRender/Render/VertexArray.h @@ -6,7 +6,6 @@ namespace Deer { class VertexArray; - using Mesh = VertexArray; class VertexArray { public: diff --git a/Deer/src/DeerRender/Mesh/MeshExampleData.cpp b/Deer/src/DeerRender/Mesh/MeshExampleData.cpp index 3fa9abb..99dd495 100644 --- a/Deer/src/DeerRender/Mesh/MeshExampleData.cpp +++ b/Deer/src/DeerRender/Mesh/MeshExampleData.cpp @@ -2,17 +2,18 @@ namespace Deer { void DataStore::createExampleMeshData() { + /* MeshData meshData; meshData.vertexCount = 3; // Triangle meshData.vertexPositionsData = new VertexPosition[3]{ - VertexPosition(PositionAxis(0 + 128, 0), PositionAxis(0 + 128, 0), - PositionAxis(0 + 128, 0)), - VertexPosition(PositionAxis(0 + 128, 64), PositionAxis(0 + 128, 0), - PositionAxis(1 + 128, 0)), - VertexPosition(PositionAxis(1 + 128, 0), PositionAxis(0 + 128, 0), - PositionAxis(0 + 128, 0))}; + VertexPosition(PositionAxis(0 * 128, 0), PositionAxis(0 + 128, 0), + PositionAxis(0 * 128, 0)), + VertexPosition(PositionAxis(0 * 128, 64), PositionAxis(0 + 128, 0), + PositionAxis(1 * 128, 0)), + VertexPosition(PositionAxis(1 * 128, 0), PositionAxis(0 + 128, 0), + PositionAxis(0 * 128, 0))}; meshData.vertexNormalData = new VertexNormal[3]{VertexNormal(0, 64, 0), VertexNormal(0, 64, 0), VertexNormal(0, 64, 0)}; @@ -21,6 +22,6 @@ namespace Deer { meshData.indexData = new uint16_t[3]{0, 1, 2}; DataStore::saveModel(meshData, "exampleTriangle"); - DataStore::saveBinModel(meshData, "exampleTriangle"); + DataStore::saveBinModel(meshData, "exampleTriangle");*/ } } // namespace Deer \ No newline at end of file diff --git a/Deer/src/DeerRender/Mesh/MeshGPULoader.cpp b/Deer/src/DeerRender/Mesh/MeshGPULoader.cpp new file mode 100644 index 0000000..05ef863 --- /dev/null +++ b/Deer/src/DeerRender/Mesh/MeshGPULoader.cpp @@ -0,0 +1,34 @@ +#include "DeerRender/Mesh.h" +#include "Deer/Log.h" +#include "DeerRender/Render/Buffer.h" + +namespace Deer{ + Ref Mesh::loadModelToGPU(const MeshData& data) { + Ref vertexArray = VertexArray::create(); + vertexArray->bind(); + + Ref vertexPositionBuffer = VertexBuffer::create(data.vertexPositionsData, data.vertexCount * sizeof(VertexPosition)); + + BufferLayout positionLayout({ + {"v_position", DataType::Short3, ShaderDataType::FloatingPoint} + }, sizeof(VertexPosition)); // + BufferLayout normalLayout({ + {"v_normal", DataType::Byte3, ShaderDataType::NormalizedFloatingPoint} + }, sizeof(VertexNormal)); + + vertexPositionBuffer->bind(); + vertexPositionBuffer->setLayout(positionLayout); + vertexArray->addVertexBuffer(vertexPositionBuffer); + + Ref vertexNormalBuffer = VertexBuffer::create(data.vertexNormalData, data.vertexCount * sizeof(VertexNormal)); + vertexNormalBuffer->bind(); + vertexNormalBuffer->setLayout(normalLayout); + vertexArray->addVertexBuffer(vertexNormalBuffer); + + Ref indexBuffer = IndexBuffer::create(data.indexData, data.indexCount * sizeof(uint16_t), IndexDataType::Unsigned_Short); + indexBuffer->bind(); + vertexArray->setIndexBuffer(indexBuffer); + + return vertexArray; + } +} \ No newline at end of file diff --git a/Deer/src/DeerRender/Mesh/Serialization/VertexPositionSerialization.h b/Deer/src/DeerRender/Mesh/Serialization/VertexPositionSerialization.h index e57178f..d889632 100644 --- a/Deer/src/DeerRender/Mesh/Serialization/VertexPositionSerialization.h +++ b/Deer/src/DeerRender/Mesh/Serialization/VertexPositionSerialization.h @@ -5,12 +5,6 @@ #include "cereal/cereal.hpp" namespace Deer { - template - void serialize(Archive& archive, PositionAxis& positionAxis) { - archive(cereal::make_nvp("int", positionAxis.integerPart)); - archive(cereal::make_nvp("dec", positionAxis.decimalPart)); - } - template void serialize(Archive& archive, VertexPosition& vertexPosition) { archive(cereal::make_nvp("x", vertexPosition.x)); diff --git a/Deer/src/DeerRender/Scene/Environment.cpp b/Deer/src/DeerRender/Scene/Environment.cpp index 6e79d87..411b74a 100755 --- a/Deer/src/DeerRender/Scene/Environment.cpp +++ b/Deer/src/DeerRender/Scene/Environment.cpp @@ -24,11 +24,11 @@ namespace Deer { auto view = m_registry.view(); for (auto entityId : view) { auto& meshRender = view.get(entityId); - if (meshRender.shaderAssetID == 0) - continue; + //if (meshRender.shaderAssetID == 0) + // continue; - if (meshRender.meshAssetID == 0) - continue; + //if (meshRender.meshAssetID == 0) + // continue; auto& tag = view.get(entityId); Entity& entity = getEntity(tag.entityUID); @@ -46,16 +46,17 @@ namespace Deer { } glm::mat4 matrix = entity.getWorldMatrix(); - Asset& shaderAsset = AssetManager::getAsset(meshRender.shaderAssetID); - shaderAsset.value->bind(); - shaderAsset.value->uploadUniformMat4("u_viewMatrix", cameraProjectionMatrix); - shaderAsset.value->uploadUniformMat4("u_worldMatrix", matrix); - shaderAsset.value->uploadUniformInt("u_objectID", tag.entityUID); + //Asset& shaderAsset = AssetManager::getAsset(meshRender.shaderAssetID); + + meshRender.shader->bind(); + meshRender.shader->uploadUniformMat4("u_viewMatrix", cameraProjectionMatrix); + meshRender.shader->uploadUniformMat4("u_worldMatrix", matrix); + meshRender.shader->uploadUniformInt("u_objectID", tag.entityUID); - Asset& meshAsset = AssetManager::getAsset(meshRender.meshAssetID); - meshAsset.value->bind(); + //Asset meshAsset = AssetManager::getAsset(meshRender.meshAssetID); + meshRender.vertexArray->bind(); - Render::submit(meshAsset.value); + Render::submit(meshRender.vertexArray); } } diff --git a/Deer/src/DeerRender/Scene/Serialization/Components/MeshRenderComponentSerialization.h b/Deer/src/DeerRender/Scene/Serialization/Components/MeshRenderComponentSerialization.h index 18636cd..4a70a2b 100755 --- a/Deer/src/DeerRender/Scene/Serialization/Components/MeshRenderComponentSerialization.h +++ b/Deer/src/DeerRender/Scene/Serialization/Components/MeshRenderComponentSerialization.h @@ -22,7 +22,7 @@ namespace Deer{ std::string shaderLocation; archive(cereal::make_nvp("shader", shaderLocation)); - meshRender.meshAssetID = AssetManager::loadAsset(std::filesystem::path(meshLocation)); + meshRender.meshAssetID = AssetManager::loadAsset(std::filesystem::path(meshLocation)); meshRender.shaderAssetID = AssetManager::loadAsset(std::filesystem::path(shaderLocation)); } } \ No newline at end of file diff --git a/DeerStudio/src/DeerStudio/DeerStudio.cpp b/DeerStudio/src/DeerStudio/DeerStudio.cpp index 983d6d5..ac8237c 100755 --- a/DeerStudio/src/DeerStudio/DeerStudio.cpp +++ b/DeerStudio/src/DeerStudio/DeerStudio.cpp @@ -56,7 +56,17 @@ namespace Deer { auto m_gamePannel = Ref(new GamePannel()); pannels.push_back(m_gamePannel); - DataStore::createExampleMeshData(); + Environment& env = Project::m_scene.getMainEnviroment(); + + Entity& exampleObject = env.createEntity("Example"); + MeshRenderComponent& renderComponent = exampleObject.addComponent(); + + MeshData meshData; + DataStore::loadModel(meshData, "example"); + + renderComponent.shader = Shader::create(DataStore::rootPath / DEER_SHADER_PATH / "shader.glsl"); + renderComponent.vertexArray = Mesh::loadModelToGPU(meshData); + return 0; } diff --git a/DeerStudio/src/DeerStudio/Editor/PropertiesPannel.cpp b/DeerStudio/src/DeerStudio/Editor/PropertiesPannel.cpp index 98e5579..2d1cc07 100755 --- a/DeerStudio/src/DeerStudio/Editor/PropertiesPannel.cpp +++ b/DeerStudio/src/DeerStudio/Editor/PropertiesPannel.cpp @@ -124,7 +124,7 @@ namespace Deer { std::string receivedData = std::string((const char*)payload->Data); mesh.meshAssetID = - AssetManager::loadAsset(receivedData); + AssetManager::loadAsset(receivedData); } ImGui::EndDragDropTarget(); } diff --git a/DeerStudio/src/DeerStudio/Editor/Viewport.cpp b/DeerStudio/src/DeerStudio/Editor/Viewport.cpp index 7e1c1df..1b7c210 100755 --- a/DeerStudio/src/DeerStudio/Editor/Viewport.cpp +++ b/DeerStudio/src/DeerStudio/Editor/Viewport.cpp @@ -5,6 +5,7 @@ #include "Deer/Enviroment.h" #include "Deer/Scene.h" #include "DeerRender/Events/KeyEvent.h" +#include "Deer/Log.h" #include "DeerRender/Events/MouseEvent.h" #include "DeerRender/GizmoRenderer.h" #include "DeerRender/Input.h" @@ -38,6 +39,9 @@ namespace Deer { enum class TransformMode { Translate = 0, Rotate = 1, Scale = 2 }; TransformMode m_transformMode = TransformMode::Translate; + + float pitch = 0.0f; // global for the camera + float yaw = 0.0f; // global for the camera void processMovment(); bool viewport_onClickEvent(MouseButtonPressedEvent mouseEvent); @@ -132,15 +136,20 @@ namespace Deer { void processMovment() { if (!viewport_isActive) return; - if (!Input::isKeyPressed(DEER_KEY_LEFT_CONTROL)) { - float vel = 1.5f; - if (Input::isKeyPressed(DEER_KEY_LEFT_SHIFT)) vel = 8; - if (Input::isKeyPressed(DEER_KEY_LEFT_ALT)) vel = 1.0f; + if (!Input::isKeyPressed(DEER_KEY_LEFT_SHIFT)) { + float vel = 0.6f; + static float w_vel = 1; + //if (Input::isKeyPressed(DEER_KEY_LEFT_SHIFT)) vel = 8; + if (Input::isKeyPressed(DEER_KEY_LEFT_ALT)) vel = 0.1f; - if (Input::isKeyPressed(DEER_KEY_W)) + if (Input::isKeyPressed(DEER_KEY_W)){ viewport_sceneCamera.transform.position += viewport_sceneCamera.transform.rotation * - glm::vec3(0, 0, 1) * 0.02f * vel; + glm::vec3(0, 0, 1) * 0.02f * vel * w_vel; + w_vel += 0.025f; + } else { + w_vel = 1; + } if (Input::isKeyPressed(DEER_KEY_S)) viewport_sceneCamera.transform.position += @@ -159,26 +168,43 @@ namespace Deer { if (Input::isKeyPressed(DEER_KEY_SPACE)) viewport_sceneCamera.transform.position.y += 0.02f; + + if (Input::isKeyPressed(DEER_KEY_LEFT_CONTROL)) + viewport_sceneCamera.transform.position.y -= 0.02f; } if (Input::isMouseButtonPressed(DEER_MOUSE_BUTTON_2)) { float posX, posY; Input::getMousePos(posX, posY); glm::vec2 newMousePos = glm::vec2(posX, posY); + static bool lastShift = false; if (m_lastMousePressedButton1) { glm::vec2 mouseDiff = newMousePos - m_lastMousePos; - glm::quat pitchQuat = glm::angleAxis( - mouseDiff.y * m_sensitivity, glm::vec3(1, 0, 0)); - glm::quat yawQuat = glm::angleAxis(mouseDiff.x * m_sensitivity, - glm::vec3(0, 1, 0)); + if (lastShift) { + glm::vec4 movePosition = glm::vec4(-mouseDiff.x * 0.007f, mouseDiff.y * 0.007f, 0, 1); + movePosition = viewport_sceneCamera.transform.getMatrix() * movePosition; + movePosition.x -= viewport_sceneCamera.transform.position.x; + movePosition.y -= viewport_sceneCamera.transform.position.y; + movePosition.z -= viewport_sceneCamera.transform.position.z; - viewport_sceneCamera.transform.rotation = - yawQuat * viewport_sceneCamera.transform.rotation * - pitchQuat; + viewport_sceneCamera.transform.position += movePosition; + } else { + glm::quat pitchQuat = glm::angleAxis( + mouseDiff.y * m_sensitivity, glm::vec3(1, 0, 0)); + glm::quat yawQuat = glm::angleAxis(mouseDiff.x * m_sensitivity, + glm::vec3(0, 1, 0)); + + viewport_sceneCamera.transform.rotation = + yawQuat * viewport_sceneCamera.transform.rotation * + pitchQuat; + } + } else { + lastShift = Input::isKeyPressed(DEER_KEY_LEFT_SHIFT); } + m_lastMousePos = newMousePos; m_lastMousePressedButton1 = true; } else @@ -222,6 +248,10 @@ namespace Deer { glm::decompose(relativeMatrix, t.scale, t.rotation, t.position, skew, perspective); + t.position.x = glm::round(t.position.x * 16) / 16; + t.position.y = glm::round(t.position.y * 16) / 16; + t.position.z = glm::round(t.position.z * 16) / 16; + return true; } } diff --git a/Tools/Blockbench/deer_engine_exporter.js b/Tools/Blockbench/deer_engine_exporter.js new file mode 100644 index 0000000..bd7761b --- /dev/null +++ b/Tools/Blockbench/deer_engine_exporter.js @@ -0,0 +1,244 @@ +let exporterAction; + +function exportToDeerEngine() { + // Build your JSON structure and trigger download + var json = { + mesh: { + hasNormalData: true, + vertexPositions: [], + vertexNormals: [], + indices: [], + }, + }; + + function addVertex(vector) { + json.mesh.vertexPositions.push({ + x: Math.round((vector[0] / 16) * 256), + y: Math.round((vector[1] / 16) * 256), + z: Math.round((vector[2] / 16) * 256), + }); + + return json.mesh.vertexPositions.length - 1; + } + + function addIndex(indexID) { + json.mesh.indices.push(indexID); + } + + function addNormal(normal) { + json.mesh.vertexNormals.push({ + x: Math.round(normal[0] * 64), + y: Math.round(normal[1] * 64), + z: Math.round(normal[2] * 64), + }); + } + + Mesh.all.forEach((mesh) => { + function getWorldPosition(v) { + const mat = mesh.mesh.matrixWorld; // mat4 (THREE.Matrix4) + const vec = new THREE.Vector3(v[0], v[1], v[2]); + vec.applyMatrix4(mat); + + // Convert to your engine’s left-handed space: flip Y and Z + return [vec.x, vec.y, -vec.z]; + } + + for (const fkey in mesh.faces) { + const face = mesh.faces[fkey]; + var verticesIDs = []; + + for (const vKey of face.vertices) { + const position = getWorldPosition(mesh.vertices[vKey]); + verticesIDs.push(addVertex(position)); + } + + // DEER ENGINE IS CLOCK FACE + //for (var i = 0; i < verticesIDs.length; i++) { + // addIndex(verticesIDs[i]); + //} + + if (verticesIDs.length == 3) { + addIndex(verticesIDs[0]); + addIndex(verticesIDs[2]); + addIndex(verticesIDs[1]); + } else if (verticesIDs.length == 4) { + addIndex(verticesIDs[0]); + addIndex(verticesIDs[2]); + addIndex(verticesIDs[1]); + + addIndex(verticesIDs[1]); + addIndex(verticesIDs[2]); + addIndex(verticesIDs[3]); + } + + // Normal calulation + var origin = getWorldPosition(mesh.vertices[face.vertices[0]]); + var dirBRef = getWorldPosition(mesh.vertices[face.vertices[1]]); + var dirARef = getWorldPosition(mesh.vertices[face.vertices[2]]); + var dirA = [0, 0, 0]; + var dirB = [0, 0, 0]; + for (var i = 0; i < 3; i++) { + dirB[i] = dirARef[i] - origin[i]; + dirA[i] = dirBRef[i] - origin[i]; + } + + var normalDir = [0, 0, 0]; + normalDir[0] = dirB[1] * dirA[2] - dirB[2] * dirA[1]; + normalDir[1] = dirB[2] * dirA[0] - dirB[0] * dirA[2]; + normalDir[2] = dirB[0] * dirA[1] - dirB[1] * dirA[0]; + + var normalMagnitude = Math.sqrt( + normalDir[0] * normalDir[0] + + normalDir[1] * normalDir[1] + + normalDir[2] * normalDir[2] + ); + + for (var i = 0; i < 3; i++) { + normalDir[i] = normalDir[i] / normalMagnitude; + } + + for (var i = 0; i < verticesIDs.length; i++) { + addNormal(normalDir); + } + } + }); + + const face_corners = { + north: [5, 4, 7, 6], + east: [1, 5, 3, 7], + south: [0, 1, 2, 3], + west: [4, 0, 6, 2], + up: [2, 3, 6, 7], + down: [4, 5, 0, 1], + }; + + Cube.all.forEach((cube) => { + // Cubes are simpler: they have 6 faces and 8 vertices + const mat = cube.mesh.matrixWorld; + + function getWorldPosition(v) { + const vec = new THREE.Vector3(v[0], v[1], v[2]); + vec.applyMatrix4(mat); + return [vec.x, vec.y, -vec.z]; // Flip Z to match left-handed + } + + // cube.from and cube.to define the min and max corners + const from = cube.from; // [x, y, z] + const to = cube.to; // [x, y, z] + const corners = [ + [from[0], from[1], from[2]], + [to[0], from[1], from[2]], + [from[0], to[1], from[2]], + [to[0], to[1], from[2]], + [from[0], from[1], to[2]], + [to[0], from[1], to[2]], + [from[0], to[1], to[2]], + [to[0], to[1], to[2]], + ]; + + for (var i = 0; i < corners.length; i++) { + corners[i][0] -= cube.origin[0]; + corners[i][1] -= cube.origin[1]; + corners[i][2] -= cube.origin[2]; + } + + for (const fkey in cube.faces) { + const face = cube.faces[fkey]; + const verticesIDs = []; + + const corner_indices = face_corners[fkey]; // get the right 4 corner indices + if (!corner_indices) continue; // just in case + + const face_vertices = corner_indices.map((i) => corners[i]); + + for (const v of face_vertices) { + const position = getWorldPosition(v); + verticesIDs.push(addVertex(position)); + } + + if (verticesIDs.length == 4) { + addIndex(verticesIDs[0]); + addIndex(verticesIDs[1]); + addIndex(verticesIDs[2]); + + addIndex(verticesIDs[1]); + addIndex(verticesIDs[3]); + addIndex(verticesIDs[2]); + } + + // Calculate normal like in your mesh code + var origin = getWorldPosition(face_vertices[0]); + var dirBRef = getWorldPosition(face_vertices[1]); + var dirARef = getWorldPosition(face_vertices[2]); + var dirA = [0, 0, 0]; + var dirB = [0, 0, 0]; + for (var i = 0; i < 3; i++) { + dirA[i] = dirARef[i] - origin[i]; + dirB[i] = dirBRef[i] - origin[i]; + } + + var normalDir = [0, 0, 0]; + normalDir[0] = dirB[1] * dirA[2] - dirB[2] * dirA[1]; + normalDir[1] = dirB[2] * dirA[0] - dirB[0] * dirA[2]; + normalDir[2] = dirB[0] * dirA[1] - dirB[1] * dirA[0]; + + var normalMagnitude = Math.sqrt( + normalDir[0] * normalDir[0] + + normalDir[1] * normalDir[1] + + normalDir[2] * normalDir[2] + ); + + for (var i = 0; i < 3; i++) { + normalDir[i] = normalDir[i] / normalMagnitude; + } + + for (var i = 0; i < verticesIDs.length; i++) { + addNormal(normalDir); + } + } + }); + + Blockbench.export({ + type: "DeerMesh", + extensions: ["dmesh"], + name: Project.name, + content: autoStringify(json), + }); + + /* + Blockbench.showQuickMessage( + PathModule.join(folder, Project.name + ".dmesh"), + 10000 + ); + Blockbench.writeFile(PathModule.join(folder, Project.name + ".dmesh"), { + content: autoStringify(json), + });*/ +} + +Plugin.register("deer_engine_exporter", { + title: "Deer Engine", + author: "Chewico", + description: "Utilities to work with Deer Engine", + icon: "export", // any valid Blockbench icon :contentReference[oaicite:5]{index=5} + version: "1.0.0", + variant: "both", // supports desktop & web + + onload() { + // (1) Create the export action + exporterAction = new Action("export_deer_engine_json", { + name: "Export to Deer Engine Mesh Format", + icon: "export", + click() { + //visibleOverridesDialog.show(); + exportToDeerEngine(); + }, + }); + // (2) Add it under File → Export (top position) + MenuBar.addAction(exporterAction, "file.export.0"); // “export” submenu, index 0 :contentReference[oaicite:6]{index=6} + }, + + onunload() { + // Remove the action when plugin unloads + exporterAction.delete(); + }, +}); diff --git a/Tools/Blockbench/exporter.js b/Tools/Blockbench/exporter.js new file mode 100644 index 0000000..bb2289e --- /dev/null +++ b/Tools/Blockbench/exporter.js @@ -0,0 +1,8 @@ +!function(t){var e={};function r(n){if(e[n])return e[n].exports;var i=e[n]={i:n,l:!1,exports:{}};return t[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}r.m=t,r.c=e,r.d=function(t,e,n){r.o(t,e)||Object.defineProperty(t,e,{configurable:!1,enumerable:!0,get:n})},r.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(e,"a",e),e},r.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r.p="",r(r.s=1)}([function(t,e){var r;r=function(){return this}();try{r=r||Function("return this")()||(0,eval)("this")}catch(t){"object"==typeof window&&(r=window)}t.exports=r},function(t,e,r){"use strict";var n=function(t){return t&&t.__esModule?t:{default:t}}(r(2));(()=>{let t=null;Plugin.register("blockmodels-exporter",{title:"Export to BlockModels.com",icon:"web",author:"TheDestruc7i0n",description:"Export models from Blockbench directly to BlockModels.com",version:"1.0.2",variant:"both",onload(){t=new Action("export-blockmodels",{name:"Export to BlockModels.com",icon:"web",click:()=>{"java_block"===Format.id?(0,n.default)(t=>{$.ajax({type:"POST",url:"https://blockmodels.com/api/submit",data:t,contentType:!1,processData:!1,xhr:function(){let t=$.ajaxSettings.xhr();return t.upload&&t.upload.addEventListener("progress",function(t){t.lengthComputable&&$("#blockmodels_upload_progress .progress_bar .progress_bar_inner").last().css("width",100*t.loaded/t.total+"%")},!1),t},success:t=>{t.error?alert(`An error occurred in uploading: ${t.error}`):(alert(`Model uploaded! https://blockmodels.com/model/${t.id}`),hideDialog()),window.blockmodels_confirming=!1},error:()=>{alert("An error occurred in uploading."),window.blockmodels_confirming=!1}})}):alert("This type of model is not supported yet!")}}),MenuBar.addAction(t,"filter")},onunload(){MenuBar.removeAction("filter.export-blockmodels"),$(".blockmodels_css").remove(),localStorage&&localStorage.getItem("blockmodels_api_key")&&localStorage.removeItem("blockmodels_api_key")}}),window.blockmodels_confirming=!1})()},function(t,e,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var n=a(r(3)),i=a(r(11));function a(t){return t&&t.__esModule?t:{default:t}}e.default=(t=>{const e=t=>{let e=document.createElement("canvas");return e.width=t.width,e.height=t.height,e.getContext("2d").drawImage(t,0,0),e.toDataURL("image/png").replace(/^data:image\/(png|jpg);base64,/,"")};(0,i.default)(async()=>{if(window.blockmodels_confirming)return void alert("Already uploading. Please wait.");window.blockmodels_confirming=!0;const r=$("[name=blockmodels__creation_title]").last().val(),i=$("[name=blockmodels__short]").last().val(),a=$("[name=blockmodels__long]").last().val(),s=$("[name=blockmodels__category]").last().val(),o=$("[name=blockmodels__minecraft_version]").last().val(),u=$("[name=blockmodels__api_key]").last().val();u&&localStorage&&localStorage.setItem("blockmodels_api_key",u);const l=JSON.parse(Codecs.java_block.compile());if(console.log("inputs: ",r,i,a,s,o,u,"bb","bb"),r&&i&&a&&s&&o&&u){const h=(()=>{const t=Blockbench.textures,r=new n.default;for(let n of t)if(!n.error){let t=n.img;const i=e(t);let a=n.name;r.file(a,i,{base64:!0})}return r})();(t=>{Screencam.cleanCanvas({width:512,height:512},e=>{e=e.replace(/^data:image\/(png|jpg);base64,/,""),t(e)})})(async e=>{h.file("imagelink.png",e,{base64:!0}),h.file("upload.json",JSON.stringify(l)),console.log("zipped file",h.files);let n=new FormData;n.append("uploadlink",!1),n.append("short",i),n.append("long",a),n.append("title",r),n.append("category",s),n.append("mcver",o),n.append("programused","bb"),n.append("source","bb"),n.append("api",u),n.append("files",await h.generateAsync({type:"blob"})),t(n)})}else alert("Please fill all fields."),window.blockmodels_confirming=!1})})},function(t,e,r){(function(e,r,n){var i;!function(e){t.exports=e()}(function(){return function t(e,r,n){function a(o,u){if(!r[o]){if(!e[o]){if(!u&&("function"==typeof i&&i))return i(o,!0);if(s)return s(o,!0);var l=new Error("Cannot find module '"+o+"'");throw l.code="MODULE_NOT_FOUND",l}var h=r[o]={exports:{}};e[o][0].call(h.exports,function(t){return a(e[o][1][t]||t)},h,h.exports,t,e,r,n)}return r[o].exports}for(var s="function"==typeof i&&i,o=0;o>2,o=(3&e)<<4|r>>4,u=1>6:64,l=2>4,r=(15&s)<<4|(o=a.indexOf(t.charAt(l++)))>>2,n=(3&o)<<6|(u=a.indexOf(t.charAt(l++))),c[h++]=e,64!==o&&(c[h++]=r),64!==u&&(c[h++]=n);return c}},{"./support":30,"./utils":32}],2:[function(t,e,r){"use strict";var n=t("./external"),i=t("./stream/DataWorker"),a=t("./stream/DataLengthProbe"),s=t("./stream/Crc32Probe");function o(t,e,r,n,i){this.compressedSize=t,this.uncompressedSize=e,this.crc32=r,this.compression=n,this.compressedContent=i}a=t("./stream/DataLengthProbe"),o.prototype={getContentWorker:function(){var t=new i(n.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new a("data_length")),e=this;return t.on("end",function(){if(this.streamInfo.data_length!==e.uncompressedSize)throw new Error("Bug : uncompressed data size mismatch")}),t},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(t,e,r){return t.pipe(new s).pipe(new a("uncompressedSize")).pipe(e.compressWorker(r)).pipe(new a("compressedSize")).withStreamInfo("compression",e)},e.exports=o},{"./external":6,"./stream/Crc32Probe":25,"./stream/DataLengthProbe":26,"./stream/DataWorker":27}],3:[function(t,e,r){"use strict";var n=t("./stream/GenericWorker");r.STORE={magic:"\0\0",compressWorker:function(t){return new n("STORE compression")},uncompressWorker:function(){return new n("STORE decompression")}},r.DEFLATE=t("./flate")},{"./flate":7,"./stream/GenericWorker":28}],4:[function(t,e,r){"use strict";var n=t("./utils"),i=function(){for(var t,e=[],r=0;r<256;r++){t=r;for(var n=0;n<8;n++)t=1&t?3988292384^t>>>1:t>>>1;e[r]=t}return e}();e.exports=function(t,e){return void 0!==t&&t.length?"string"!==n.getTypeOf(t)?function(t,e,r,n){var a=i,s=0+r;t^=-1;for(var o=0;o>>8^a[255&(t^e[o])];return-1^t}(0|e,t,t.length):function(t,e,r,n){var a=i,s=0+r;t^=-1;for(var o=0;o>>8^a[255&(t^e.charCodeAt(o))];return-1^t}(0|e,t,t.length):0}},{"./utils":32}],5:[function(t,e,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(t,e,r){"use strict";var n;n="undefined"!=typeof Promise?Promise:t("lie"),e.exports={Promise:n}},{lie:37}],7:[function(t,e,r){"use strict";var n="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Uint32Array,i=t("pako"),a=t("./utils"),s=t("./stream/GenericWorker"),o=n?"uint8array":"array";function u(t,e){s.call(this,"FlateWorker/"+t),this._pako=null,this._pakoAction=t,this._pakoOptions=e,this.meta={}}r.magic="\b\0",a.inherits(u,s),u.prototype.processChunk=function(t){this.meta=t.meta,null===this._pako&&this._createPako(),this._pako.push(a.transformTo(o,t.data),!1)},u.prototype.flush=function(){s.prototype.flush.call(this),null===this._pako&&this._createPako(),this._pako.push([],!0)},u.prototype.cleanUp=function(){s.prototype.cleanUp.call(this),this._pako=null},u.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(t){return new u("Deflate",t)},r.uncompressWorker=function(){return new u("Inflate",{})}},{"./stream/GenericWorker":28,"./utils":32,pako:38}],8:[function(t,e,r){"use strict";function n(t,e){var r,n="";for(r=0;r>>=8;return n}function i(t,e,r,i,s,h){var f,c,d=t.file,p=t.compression,m=h!==o.utf8encode,_=a.transformTo("string",h(d.name)),g=a.transformTo("string",o.utf8encode(d.name)),v=d.comment,b=a.transformTo("string",h(v)),y=a.transformTo("string",o.utf8encode(v)),w=g.length!==d.name.length,k=y.length!==v.length,x="",E="",A="",S=d.dir,C=d.date,z={crc32:0,compressedSize:0,uncompressedSize:0};e&&!r||(z.crc32=t.crc32,z.compressedSize=t.compressedSize,z.uncompressedSize=t.uncompressedSize);var T=0;e&&(T|=8),m||!w&&!k||(T|=2048);var I=0,R=0;S&&(I|=16),"UNIX"===s?(R=798,I|=function(t,e){var r=t;return t||(r=S?16893:33204),(65535&r)<<16}(d.unixPermissions)):(R=20,I|=63&(d.dosPermissions||0)),f=C.getUTCHours(),f<<=6,f|=C.getUTCMinutes(),f<<=5,f|=C.getUTCSeconds()/2,c=C.getUTCFullYear()-1980,c<<=4,c|=C.getUTCMonth()+1,c<<=5,c|=C.getUTCDate(),w&&(x+="up"+n((E=n(1,1)+n(u(_),4)+g).length,2)+E),k&&(x+="uc"+n((A=n(1,1)+n(u(b),4)+y).length,2)+A);var B="";return B+="\n\0",B+=n(T,2),B+=p.magic,B+=n(f,2),B+=n(c,2),B+=n(z.crc32,4),B+=n(z.compressedSize,4),B+=n(z.uncompressedSize,4),B+=n(_.length,2),B+=n(x.length,2),{fileRecord:l.LOCAL_FILE_HEADER+B+_+x,dirRecord:l.CENTRAL_FILE_HEADER+n(R,2)+B+n(b.length,2)+"\0\0\0\0"+n(I,4)+n(i,4)+_+x+b}}var a=t("../utils"),s=t("../stream/GenericWorker"),o=t("../utf8"),u=t("../crc32"),l=t("../signature");function h(t,e,r,n){s.call(this,"ZipFileWorker"),this.bytesWritten=0,this.zipComment=e,this.zipPlatform=r,this.encodeFileName=n,this.streamFiles=t,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}a.inherits(h,s),h.prototype.push=function(t){var e=t.meta.percent||0,r=this.entriesCount,n=this._sources.length;this.accumulate?this.contentBuffer.push(t):(this.bytesWritten+=t.data.length,s.prototype.push.call(this,{data:t.data,meta:{currentFile:this.currentFile,percent:r?(e+100*(r-n-1))/r:100}}))},h.prototype.openedSource=function(t){this.currentSourceOffset=this.bytesWritten,this.currentFile=t.file.name;var e=this.streamFiles&&!t.file.dir;if(e){var r=i(t,e,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:r.fileRecord,meta:{percent:0}})}else this.accumulate=!0},h.prototype.closedSource=function(t){this.accumulate=!1;var e=this.streamFiles&&!t.file.dir,r=i(t,e,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(r.dirRecord),e)this.push({data:function(t){return l.DATA_DESCRIPTOR+n(t.crc32,4)+n(t.compressedSize,4)+n(t.uncompressedSize,4)}(t),meta:{percent:100}});else for(this.push({data:r.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},h.prototype.flush=function(){for(var t=this.bytesWritten,e=0;e=this.index;e--)r=(r<<8)+this.byteAt(e);return this.index+=t,r},readString:function(t){return n.transformTo("string",this.readData(t))},readData:function(t){},lastIndexOfSignature:function(t){},readAndCheckSignature:function(t){},readDate:function(){var t=this.readInt(4);return new Date(Date.UTC(1980+(t>>25&127),(t>>21&15)-1,t>>16&31,t>>11&31,t>>5&63,(31&t)<<1))}},e.exports=i},{"../utils":32}],19:[function(t,e,r){"use strict";var n=t("./Uint8ArrayReader");function i(t){n.call(this,t)}t("../utils").inherits(i,n),i.prototype.readData=function(t){this.checkOffset(t);var e=this.data.slice(this.zero+this.index,this.zero+this.index+t);return this.index+=t,e},e.exports=i},{"../utils":32,"./Uint8ArrayReader":21}],20:[function(t,e,r){"use strict";var n=t("./DataReader");function i(t){n.call(this,t)}t("../utils").inherits(i,n),i.prototype.byteAt=function(t){return this.data.charCodeAt(this.zero+t)},i.prototype.lastIndexOfSignature=function(t){return this.data.lastIndexOf(t)-this.zero},i.prototype.readAndCheckSignature=function(t){return t===this.readData(4)},i.prototype.readData=function(t){this.checkOffset(t);var e=this.data.slice(this.zero+this.index,this.zero+this.index+t);return this.index+=t,e},e.exports=i},{"../utils":32,"./DataReader":18}],21:[function(t,e,r){"use strict";var n=t("./ArrayReader");function i(t){n.call(this,t)}t("../utils").inherits(i,n),i.prototype.readData=function(t){if(this.checkOffset(t),0===t)return new Uint8Array(0);var e=this.data.subarray(this.zero+this.index,this.zero+this.index+t);return this.index+=t,e},e.exports=i},{"../utils":32,"./ArrayReader":17}],22:[function(t,e,r){"use strict";var n=t("../utils"),i=t("../support"),a=t("./ArrayReader"),s=t("./StringReader"),o=t("./NodeBufferReader"),u=t("./Uint8ArrayReader");e.exports=function(t){var e=n.getTypeOf(t);return n.checkSupport(e),"string"!==e||i.uint8array?"nodebuffer"===e?new o(t):i.uint8array?new u(n.transformTo("uint8array",t)):new a(n.transformTo("array",t)):new s(t)}},{"../support":30,"../utils":32,"./ArrayReader":17,"./NodeBufferReader":19,"./StringReader":20,"./Uint8ArrayReader":21}],23:[function(t,e,r){"use strict";r.LOCAL_FILE_HEADER="PK",r.CENTRAL_FILE_HEADER="PK",r.CENTRAL_DIRECTORY_END="PK",r.ZIP64_CENTRAL_DIRECTORY_LOCATOR="PK",r.ZIP64_CENTRAL_DIRECTORY_END="PK",r.DATA_DESCRIPTOR="PK\b"},{}],24:[function(t,e,r){"use strict";var n=t("./GenericWorker"),i=t("../utils");function a(t){n.call(this,"ConvertWorker to "+t),this.destType=t}i.inherits(a,n),a.prototype.processChunk=function(t){this.push({data:i.transformTo(this.destType,t.data),meta:t.meta})},e.exports=a},{"../utils":32,"./GenericWorker":28}],25:[function(t,e,r){"use strict";var n=t("./GenericWorker"),i=t("../crc32");function a(){n.call(this,"Crc32Probe"),this.withStreamInfo("crc32",0)}t("../utils").inherits(a,n),a.prototype.processChunk=function(t){this.streamInfo.crc32=i(t.data,this.streamInfo.crc32||0),this.push(t)},e.exports=a},{"../crc32":4,"../utils":32,"./GenericWorker":28}],26:[function(t,e,r){"use strict";var n=t("../utils"),i=t("./GenericWorker");function a(t){i.call(this,"DataLengthProbe for "+t),this.propName=t,this.withStreamInfo(t,0)}n.inherits(a,i),a.prototype.processChunk=function(t){if(t){var e=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=e+t.data.length}i.prototype.processChunk.call(this,t)},e.exports=a},{"../utils":32,"./GenericWorker":28}],27:[function(t,e,r){"use strict";var n=t("../utils"),i=t("./GenericWorker");function a(t){i.call(this,"DataWorker");var e=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type="",this._tickScheduled=!1,t.then(function(t){e.dataIsReady=!0,e.data=t,e.max=t&&t.length||0,e.type=n.getTypeOf(t),e.isPaused||e._tickAndRepeat()},function(t){e.error(t)})}n.inherits(a,i),a.prototype.cleanUp=function(){i.prototype.cleanUp.call(this),this.data=null},a.prototype.resume=function(){return!!i.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,n.delay(this._tickAndRepeat,[],this)),!0)},a.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(n.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},a.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var t=null,e=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case"string":t=this.data.substring(this.index,e);break;case"uint8array":t=this.data.subarray(this.index,e);break;case"array":case"nodebuffer":t=this.data.slice(this.index,e)}return this.index=e,this.push({data:t,meta:{percent:this.max?this.index/this.max*100:0}})},e.exports=a},{"../utils":32,"./GenericWorker":28}],28:[function(t,e,r){"use strict";function n(t){this.name=t||"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(t){this.emit("data",t)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit("end"),this.cleanUp(),this.isFinished=!0}catch(t){this.emit("error",t)}return!0},error:function(t){return!this.isFinished&&(this.isPaused?this.generatedError=t:(this.isFinished=!0,this.emit("error",t),this.previous&&this.previous.error(t),this.cleanUp()),!0)},on:function(t,e){return this._listeners[t].push(e),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(t,e){if(this._listeners[t])for(var r=0;r "+t:t}},e.exports=n},{}],29:[function(t,r,n){"use strict";var i=t("../utils"),a=t("./ConvertWorker"),s=t("./GenericWorker"),o=t("../base64"),u=t("../support"),l=t("../external"),h=null;if(u.nodestream)try{h=t("../nodejs/NodejsStreamOutputAdapter")}catch(t){}function f(t,e,r){var n=e;switch(e){case"blob":case"arraybuffer":n="uint8array";break;case"base64":n="string"}try{this._internalType=n,this._outputType=e,this._mimeType=r,i.checkSupport(n),this._worker=t.pipe(new a(n)),t.lock()}catch(t){this._worker=new s("error"),this._worker.error(t)}}f.prototype={accumulate:function(t){return function(t,r){return new l.Promise(function(n,a){var s=[],u=t._internalType,l=t._outputType,h=t._mimeType;t.on("data",function(t,e){s.push(t),r&&r(e)}).on("error",function(t){s=[],a(t)}).on("end",function(){try{var t=function(t,e,r){switch(t){case"blob":return i.newBlob(i.transformTo("arraybuffer",e),r);case"base64":return o.encode(e);default:return i.transformTo(t,e)}}(l,function(t,r){var n,i=0,a=null,s=0;for(n=0;n>>6:(r<65536?e[s++]=224|r>>>12:(e[s++]=240|r>>>18,e[s++]=128|r>>>12&63),e[s++]=128|r>>>6&63),e[s++]=128|63&r);return e}(t)},r.utf8decode=function(t){return i.nodebuffer?n.transformTo("nodebuffer",t).toString("utf-8"):function(t){var e,r,i,a,s=t.length,u=new Array(2*s);for(e=r=0;e>10&1023,u[r++]=56320|1023&i)}return u.length!==r&&(u.subarray?u=u.subarray(0,r):u.length=r),n.applyFromCharCode(u)}(t=n.transformTo(i.uint8array?"uint8array":"array",t))},n.inherits(l,s),l.prototype.processChunk=function(t){var e=n.transformTo(i.uint8array?"uint8array":"array",t.data);if(this.leftOver&&this.leftOver.length){if(i.uint8array){var a=e;(e=new Uint8Array(a.length+this.leftOver.length)).set(this.leftOver,0),e.set(a,this.leftOver.length)}else e=this.leftOver.concat(e);this.leftOver=null}var s=function(t,e){var r;for((e=e||t.length)>t.length&&(e=t.length),r=e-1;0<=r&&128==(192&t[r]);)r--;return r<0?e:0===r?e:r+o[t[r]]>e?r:e}(e),u=e;s!==e.length&&(i.uint8array?(u=e.subarray(0,s),this.leftOver=e.subarray(s,e.length)):(u=e.slice(0,s),this.leftOver=e.slice(s,e.length))),this.push({data:r.utf8decode(u),meta:t.meta})},l.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:r.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},r.Utf8DecodeWorker=l,n.inherits(h,s),h.prototype.processChunk=function(t){this.push({data:r.utf8encode(t.data),meta:t.meta})},r.Utf8EncodeWorker=h},{"./nodejsUtils":14,"./stream/GenericWorker":28,"./support":30,"./utils":32}],32:[function(t,e,r){"use strict";var n=t("./support"),i=t("./base64"),a=t("./nodejsUtils"),s=t("set-immediate-shim"),o=t("./external");function u(t){return t}function l(t,e){for(var r=0;r>8;this.dir=!!(16&this.externalFileAttributes),0==t&&(this.dosPermissions=63&this.externalFileAttributes),3==t&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||"/"!==this.fileNameStr.slice(-1)||(this.dir=!0)},parseZIP64ExtraField:function(t){if(this.extraFields[1]){var e=n(this.extraFields[1].value);this.uncompressedSize===i.MAX_VALUE_32BITS&&(this.uncompressedSize=e.readInt(8)),this.compressedSize===i.MAX_VALUE_32BITS&&(this.compressedSize=e.readInt(8)),this.localHeaderOffset===i.MAX_VALUE_32BITS&&(this.localHeaderOffset=e.readInt(8)),this.diskNumberStart===i.MAX_VALUE_32BITS&&(this.diskNumberStart=e.readInt(4))}},readExtraFields:function(t){var e,r,n,i=t.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});t.index>>6:(r<65536?e[s++]=224|r>>>12:(e[s++]=240|r>>>18,e[s++]=128|r>>>12&63),e[s++]=128|r>>>6&63),e[s++]=128|63&r);return e},r.buf2binstring=function(t){return u(t,t.length)},r.binstring2buf=function(t){for(var e=new n.Buf8(t.length),r=0,i=e.length;r>10&1023,l[n++]=56320|1023&i)}return u(l,n)},r.utf8border=function(t,e){var r;for((e=e||t.length)>t.length&&(e=t.length),r=e-1;0<=r&&128==(192&t[r]);)r--;return r<0?e:0===r?e:r+s[t[r]]>e?r:e}},{"./common":41}],43:[function(t,e,r){"use strict";e.exports=function(t,e,r,n){for(var i=65535&t|0,a=t>>>16&65535|0,s=0;0!==r;){for(r-=s=2e3>>1:t>>>1;e[r]=t}return e}();e.exports=function(t,e,r,i){var a=n,s=i+r;t^=-1;for(var o=i;o>>8^a[255&(t^e[o])];return-1^t}},{}],46:[function(t,e,r){"use strict";var n,i=t("../utils/common"),a=t("./trees"),s=t("./adler32"),o=t("./crc32"),u=t("./messages"),l=0,h=4,f=0,c=-2,d=-1,p=4,m=2,_=8,g=9,v=286,b=30,y=19,w=2*v+1,k=15,x=3,E=258,A=E+x+1,S=42,C=113,z=1,T=2,I=3,R=4;function B(t,e){return t.msg=u[e],e}function O(t){return(t<<1)-(4t.avail_out&&(r=t.avail_out),0!==r&&(i.arraySet(t.output,e.pending_buf,e.pending_out,r,t.next_out),t.next_out+=r,e.pending_out+=r,t.total_out+=r,t.avail_out-=r,e.pending-=r,0===e.pending&&(e.pending_out=0))}function U(t,e){a._tr_flush_block(t,0<=t.block_start?t.block_start:-1,t.strstart-t.block_start,e),t.block_start=t.strstart,D(t.strm)}function F(t,e){t.pending_buf[t.pending++]=e}function L(t,e){t.pending_buf[t.pending++]=e>>>8&255,t.pending_buf[t.pending++]=255&e}function N(t,e){var r,n,i=t.max_chain_length,a=t.strstart,s=t.prev_length,o=t.nice_match,u=t.strstart>t.w_size-A?t.strstart-(t.w_size-A):0,l=t.window,h=t.w_mask,f=t.prev,c=t.strstart+E,d=l[a+s-1],p=l[a+s];t.prev_length>=t.good_match&&(i>>=2),o>t.lookahead&&(o=t.lookahead);do{if(l[(r=e)+s]===p&&l[r+s-1]===d&&l[r]===l[a]&&l[++r]===l[a+1]){a+=2,r++;do{}while(l[++a]===l[++r]&&l[++a]===l[++r]&&l[++a]===l[++r]&&l[++a]===l[++r]&&l[++a]===l[++r]&&l[++a]===l[++r]&&l[++a]===l[++r]&&l[++a]===l[++r]&&au&&0!=--i);return s<=t.lookahead?s:t.lookahead}function M(t){var e,r,n,a,u,l,h,f,c,d,p=t.w_size;do{if(a=t.window_size-t.lookahead-t.strstart,t.strstart>=p+(p-A)){for(i.arraySet(t.window,t.window,p,p,0),t.match_start-=p,t.strstart-=p,t.block_start-=p,e=r=t.hash_size;n=t.head[--e],t.head[e]=p<=n?n-p:0,--r;);for(e=r=p;n=t.prev[--e],t.prev[e]=p<=n?n-p:0,--r;);a+=p}if(0===t.strm.avail_in)break;if(l=t.strm,h=t.window,f=t.strstart+t.lookahead,d=void 0,(c=a)<(d=l.avail_in)&&(d=c),r=0===d?0:(l.avail_in-=d,i.arraySet(h,l.input,l.next_in,d,f),1===l.state.wrap?l.adler=s(l.adler,h,d,f):2===l.state.wrap&&(l.adler=o(l.adler,h,d,f)),l.next_in+=d,l.total_in+=d,d),t.lookahead+=r,t.lookahead+t.insert>=x)for(u=t.strstart-t.insert,t.ins_h=t.window[u],t.ins_h=(t.ins_h<=x&&(t.ins_h=(t.ins_h<=x)if(n=a._tr_tally(t,t.strstart-t.match_start,t.match_length-x),t.lookahead-=t.match_length,t.match_length<=t.max_lazy_match&&t.lookahead>=x){for(t.match_length--;t.strstart++,t.ins_h=(t.ins_h<=x&&(t.ins_h=(t.ins_h<=x&&t.match_length<=t.prev_length){for(i=t.strstart+t.lookahead-x,n=a._tr_tally(t,t.strstart-1-t.prev_match,t.prev_length-x),t.lookahead-=t.prev_length-1,t.prev_length-=2;++t.strstart<=i&&(t.ins_h=(t.ins_h<t.pending_buf_size-5&&(r=t.pending_buf_size-5);;){if(t.lookahead<=1){if(M(t),0===t.lookahead&&e===l)return z;if(0===t.lookahead)break}t.strstart+=t.lookahead,t.lookahead=0;var n=t.block_start+r;if((0===t.strstart||t.strstart>=n)&&(t.lookahead=t.strstart-n,t.strstart=n,U(t,!1),0===t.strm.avail_out))return z;if(t.strstart-t.block_start>=t.w_size-A&&(U(t,!1),0===t.strm.avail_out))return z}return t.insert=0,e===h?(U(t,!0),0===t.strm.avail_out?I:R):(t.strstart>t.block_start&&(U(t,!1),t.strm.avail_out),z)}),new W(4,4,8,4,j),new W(4,5,16,8,j),new W(4,6,32,32,j),new W(4,4,16,16,Z),new W(8,16,32,32,Z),new W(8,16,128,128,Z),new W(8,32,128,256,Z),new W(32,128,258,1024,Z),new W(32,258,258,4096,Z)],r.deflateInit=function(t,e){return K(t,e,_,15,8,0)},r.deflateInit2=K,r.deflateReset=G,r.deflateResetKeep=H,r.deflateSetHeader=function(t,e){return t&&t.state?2!==t.state.wrap?c:(t.state.gzhead=e,f):c},r.deflate=function(t,e){var r,i,s,u;if(!t||!t.state||5>8&255),F(i,i.gzhead.time>>16&255),F(i,i.gzhead.time>>24&255),F(i,9===i.level?2:2<=i.strategy||i.level<2?4:0),F(i,255&i.gzhead.os),i.gzhead.extra&&i.gzhead.extra.length&&(F(i,255&i.gzhead.extra.length),F(i,i.gzhead.extra.length>>8&255)),i.gzhead.hcrc&&(t.adler=o(t.adler,i.pending_buf,i.pending,0)),i.gzindex=0,i.status=69):(F(i,0),F(i,0),F(i,0),F(i,0),F(i,0),F(i,9===i.level?2:2<=i.strategy||i.level<2?4:0),F(i,3),i.status=C);else{var d=_+(i.w_bits-8<<4)<<8;d|=(2<=i.strategy||i.level<2?0:i.level<6?1:6===i.level?2:3)<<6,0!==i.strstart&&(d|=32),d+=31-d%31,i.status=C,L(i,d),0!==i.strstart&&(L(i,t.adler>>>16),L(i,65535&t.adler)),t.adler=1}if(69===i.status)if(i.gzhead.extra){for(s=i.pending;i.gzindex<(65535&i.gzhead.extra.length)&&(i.pending!==i.pending_buf_size||(i.gzhead.hcrc&&i.pending>s&&(t.adler=o(t.adler,i.pending_buf,i.pending-s,s)),D(t),s=i.pending,i.pending!==i.pending_buf_size));)F(i,255&i.gzhead.extra[i.gzindex]),i.gzindex++;i.gzhead.hcrc&&i.pending>s&&(t.adler=o(t.adler,i.pending_buf,i.pending-s,s)),i.gzindex===i.gzhead.extra.length&&(i.gzindex=0,i.status=73)}else i.status=73;if(73===i.status)if(i.gzhead.name){s=i.pending;do{if(i.pending===i.pending_buf_size&&(i.gzhead.hcrc&&i.pending>s&&(t.adler=o(t.adler,i.pending_buf,i.pending-s,s)),D(t),s=i.pending,i.pending===i.pending_buf_size)){u=1;break}u=i.gzindexs&&(t.adler=o(t.adler,i.pending_buf,i.pending-s,s)),0===u&&(i.gzindex=0,i.status=91)}else i.status=91;if(91===i.status)if(i.gzhead.comment){s=i.pending;do{if(i.pending===i.pending_buf_size&&(i.gzhead.hcrc&&i.pending>s&&(t.adler=o(t.adler,i.pending_buf,i.pending-s,s)),D(t),s=i.pending,i.pending===i.pending_buf_size)){u=1;break}u=i.gzindexs&&(t.adler=o(t.adler,i.pending_buf,i.pending-s,s)),0===u&&(i.status=103)}else i.status=103;if(103===i.status&&(i.gzhead.hcrc?(i.pending+2>i.pending_buf_size&&D(t),i.pending+2<=i.pending_buf_size&&(F(i,255&t.adler),F(i,t.adler>>8&255),t.adler=0,i.status=C)):i.status=C),0!==i.pending){if(D(t),0===t.avail_out)return i.last_flush=-1,f}else if(0===t.avail_in&&O(e)<=O(r)&&e!==h)return B(t,-5);if(666===i.status&&0!==t.avail_in)return B(t,-5);if(0!==t.avail_in||0!==i.lookahead||e!==l&&666!==i.status){var p=2===i.strategy?function(t,e){for(var r;;){if(0===t.lookahead&&(M(t),0===t.lookahead)){if(e===l)return z;break}if(t.match_length=0,r=a._tr_tally(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++,r&&(U(t,!1),0===t.strm.avail_out))return z}return t.insert=0,e===h?(U(t,!0),0===t.strm.avail_out?I:R):t.last_lit&&(U(t,!1),0===t.strm.avail_out)?z:T}(i,e):3===i.strategy?function(t,e){for(var r,n,i,s,o=t.window;;){if(t.lookahead<=E){if(M(t),t.lookahead<=E&&e===l)return z;if(0===t.lookahead)break}if(t.match_length=0,t.lookahead>=x&&0t.lookahead&&(t.match_length=t.lookahead)}if(t.match_length>=x?(r=a._tr_tally(t,1,t.match_length-x),t.lookahead-=t.match_length,t.strstart+=t.match_length,t.match_length=0):(r=a._tr_tally(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++),r&&(U(t,!1),0===t.strm.avail_out))return z}return t.insert=0,e===h?(U(t,!0),0===t.strm.avail_out?I:R):t.last_lit&&(U(t,!1),0===t.strm.avail_out)?z:T}(i,e):n[i.level].func(i,e);if(p!==I&&p!==R||(i.status=666),p===z||p===I)return 0===t.avail_out&&(i.last_flush=-1),f;if(p===T&&(1===e?a._tr_align(i):5!==e&&(a._tr_stored_block(i,0,0,!1),3===e&&(P(i.head),0===i.lookahead&&(i.strstart=0,i.block_start=0,i.insert=0))),D(t),0===t.avail_out))return i.last_flush=-1,f}return e!==h?f:i.wrap<=0?1:(2===i.wrap?(F(i,255&t.adler),F(i,t.adler>>8&255),F(i,t.adler>>16&255),F(i,t.adler>>24&255),F(i,255&t.total_in),F(i,t.total_in>>8&255),F(i,t.total_in>>16&255),F(i,t.total_in>>24&255)):(L(i,t.adler>>>16),L(i,65535&t.adler)),D(t),0=r.w_size&&(0===o&&(P(r.head),r.strstart=0,r.block_start=0,r.insert=0),d=new i.Buf8(r.w_size),i.arraySet(d,e,p-r.w_size,r.w_size,0),e=d,p=r.w_size),u=t.avail_in,l=t.next_in,h=t.input,t.avail_in=p,t.next_in=0,t.input=e,M(r);r.lookahead>=x;){for(n=r.strstart,a=r.lookahead-(x-1);r.ins_h=(r.ins_h<>>=y=b>>>24,p-=y,0==(y=b>>>16&255))S[a++]=65535&b;else{if(!(16&y)){if(0==(64&y)){b=m[(65535&b)+(d&(1<>>=y,p-=y),p<15&&(d+=A[n++]<>>=y=b>>>24,p-=y,!(16&(y=b>>>16&255))){if(0==(64&y)){b=_[(65535&b)+(d&(1<>>=y,p-=y,(y=a-s)>3,d&=(1<<(p-=w<<3))-1,t.next_in=n,t.next_out=a,t.avail_in=n>>24&255)+(t>>>8&65280)+((65280&t)<<8)+((255&t)<<24)}function _(t){var e;return t&&t.state?(e=t.state,t.total_in=t.total_out=e.total=0,t.msg="",e.wrap&&(t.adler=1&e.wrap),e.mode=c,e.last=0,e.havedict=0,e.dmax=32768,e.head=null,e.hold=0,e.bits=0,e.lencode=e.lendyn=new n.Buf32(d),e.distcode=e.distdyn=new n.Buf32(p),e.sane=1,e.back=-1,h):f}function g(t){var e;return t&&t.state?((e=t.state).wsize=0,e.whave=0,e.wnext=0,_(t)):f}function v(t,e){var r,n;return t&&t.state?(n=t.state,e<0?(r=0,e=-e):(r=1+(e>>4),e<48&&(e&=15)),e&&(e<8||15=s.wsize?(n.arraySet(s.window,e,r-s.wsize,s.wsize,0),s.wnext=0,s.whave=s.wsize):(i<(a=s.wsize-s.wnext)&&(a=i),n.arraySet(s.window,e,r-i,a,s.wnext),(i-=a)?(n.arraySet(s.window,e,r-i,i,0),s.wnext=i,s.whave=s.wsize):(s.wnext+=a,s.wnext===s.wsize&&(s.wnext=0),s.whave>>8&255,r.check=a(r.check,M,2,0),w=y=0,r.mode=2;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&y)<<8)+(y>>8))%31){t.msg="incorrect header check",r.mode=30;break}if(8!=(15&y)){t.msg="unknown compression method",r.mode=30;break}if(w-=4,D=8+(15&(y>>>=4)),0===r.wbits)r.wbits=D;else if(D>r.wbits){t.msg="invalid window size",r.mode=30;break}r.dmax=1<>8&1),512&r.flags&&(M[0]=255&y,M[1]=y>>>8&255,r.check=a(r.check,M,2,0)),w=y=0,r.mode=3;case 3:for(;w<32;){if(0===v)break t;v--,y+=d[_++]<>>8&255,M[2]=y>>>16&255,M[3]=y>>>24&255,r.check=a(r.check,M,4,0)),w=y=0,r.mode=4;case 4:for(;w<16;){if(0===v)break t;v--,y+=d[_++]<>8),512&r.flags&&(M[0]=255&y,M[1]=y>>>8&255,r.check=a(r.check,M,2,0)),w=y=0,r.mode=5;case 5:if(1024&r.flags){for(;w<16;){if(0===v)break t;v--,y+=d[_++]<>>8&255,r.check=a(r.check,M,2,0)),w=y=0}else r.head&&(r.head.extra=null);r.mode=6;case 6:if(1024&r.flags&&(v<(S=r.length)&&(S=v),S&&(r.head&&(D=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Array(r.head.extra_len)),n.arraySet(r.head.extra,d,_,S,D)),512&r.flags&&(r.check=a(r.check,d,S,_)),v-=S,_+=S,r.length-=S),r.length))break t;r.length=0,r.mode=7;case 7:if(2048&r.flags){if(0===v)break t;for(S=0;D=d[_+S++],r.head&&D&&r.length<65536&&(r.head.name+=String.fromCharCode(D)),D&&S>9&1,r.head.done=!0),t.adler=r.check=0,r.mode=12;break;case 10:for(;w<32;){if(0===v)break t;v--,y+=d[_++]<>>=7&w,w-=7&w,r.mode=27;break}for(;w<3;){if(0===v)break t;v--,y+=d[_++]<>>=1)){case 0:r.mode=14;break;case 1:if(x(r),r.mode=20,6!==e)break;y>>>=2,w-=2;break t;case 2:r.mode=17;break;case 3:t.msg="invalid block type",r.mode=30}y>>>=2,w-=2;break;case 14:for(y>>>=7&w,w-=7&w;w<32;){if(0===v)break t;v--,y+=d[_++]<>>16^65535)){t.msg="invalid stored block lengths",r.mode=30;break}if(r.length=65535&y,w=y=0,r.mode=15,6===e)break t;case 15:r.mode=16;case 16:if(S=r.length){if(v>>=5,w-=5,r.ndist=1+(31&y),y>>>=5,w-=5,r.ncode=4+(15&y),y>>>=4,w-=4,286>>=3,w-=3}for(;r.have<19;)r.lens[j[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,F={bits:r.lenbits},U=o(0,r.lens,0,19,r.lencode,0,r.work,F),r.lenbits=F.bits,U){t.msg="invalid code lengths set",r.mode=30;break}r.have=0,r.mode=19;case 19:for(;r.have>>16&255,R=65535&N,!((T=N>>>24)<=w);){if(0===v)break t;v--,y+=d[_++]<>>=T,w-=T,r.lens[r.have++]=R;else{if(16===R){for(L=T+2;w>>=T,w-=T,0===r.have){t.msg="invalid bit length repeat",r.mode=30;break}D=r.lens[r.have-1],S=3+(3&y),y>>>=2,w-=2}else if(17===R){for(L=T+3;w>>=T)),y>>>=3,w-=3}else{for(L=T+7;w>>=T)),y>>>=7,w-=7}if(r.have+S>r.nlen+r.ndist){t.msg="invalid bit length repeat",r.mode=30;break}for(;S--;)r.lens[r.have++]=D}}if(30===r.mode)break;if(0===r.lens[256]){t.msg="invalid code -- missing end-of-block",r.mode=30;break}if(r.lenbits=9,F={bits:r.lenbits},U=o(u,r.lens,0,r.nlen,r.lencode,0,r.work,F),r.lenbits=F.bits,U){t.msg="invalid literal/lengths set",r.mode=30;break}if(r.distbits=6,r.distcode=r.distdyn,F={bits:r.distbits},U=o(l,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,F),r.distbits=F.bits,U){t.msg="invalid distances set",r.mode=30;break}if(r.mode=20,6===e)break t;case 20:r.mode=21;case 21:if(6<=v&&258<=b){t.next_out=g,t.avail_out=b,t.next_in=_,t.avail_in=v,r.hold=y,r.bits=w,s(t,A),g=t.next_out,p=t.output,b=t.avail_out,_=t.next_in,d=t.input,v=t.avail_in,y=r.hold,w=r.bits,12===r.mode&&(r.back=-1);break}for(r.back=0;I=(N=r.lencode[y&(1<>>16&255,R=65535&N,!((T=N>>>24)<=w);){if(0===v)break t;v--,y+=d[_++]<>B)])>>>16&255,R=65535&N,!(B+(T=N>>>24)<=w);){if(0===v)break t;v--,y+=d[_++]<>>=B,w-=B,r.back+=B}if(y>>>=T,w-=T,r.back+=T,r.length=R,0===I){r.mode=26;break}if(32&I){r.back=-1,r.mode=12;break}if(64&I){t.msg="invalid literal/length code",r.mode=30;break}r.extra=15&I,r.mode=22;case 22:if(r.extra){for(L=r.extra;w>>=r.extra,w-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=23;case 23:for(;I=(N=r.distcode[y&(1<>>16&255,R=65535&N,!((T=N>>>24)<=w);){if(0===v)break t;v--,y+=d[_++]<>B)])>>>16&255,R=65535&N,!(B+(T=N>>>24)<=w);){if(0===v)break t;v--,y+=d[_++]<>>=B,w-=B,r.back+=B}if(y>>>=T,w-=T,r.back+=T,64&I){t.msg="invalid distance code",r.mode=30;break}r.offset=R,r.extra=15&I,r.mode=24;case 24:if(r.extra){for(L=r.extra;w>>=r.extra,w-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){t.msg="invalid distance too far back",r.mode=30;break}r.mode=25;case 25:if(0===b)break t;if(S=A-b,r.offset>S){if((S=r.offset-S)>r.whave&&r.sane){t.msg="invalid distance too far back",r.mode=30;break}C=S>r.wnext?(S-=r.wnext,r.wsize-S):r.wnext-S,S>r.length&&(S=r.length),z=r.window}else z=p,C=g-r.offset,S=r.length;for(bv?(y=F[L+f[E]],O[P+f[E]]):(y=96,0),d=1<>T)+(p-=d)]=b<<24|y<<16|w|0,0!==p;);for(d=1<>=1;if(0!==d?(B&=d-1,B+=d):B=0,E++,0==--D[x]){if(x===S)break;x=e[r+f[E]]}if(C>>7)]}function O(t,e){t.pending_buf[t.pending++]=255&e,t.pending_buf[t.pending++]=e>>>8&255}function P(t,e,r){t.bi_valid>c-r?(t.bi_buf|=e<>c-t.bi_valid,t.bi_valid+=r-c):(t.bi_buf|=e<>>=1,r<<=1,0<--e;);return r>>>1}function F(t,e,r){var n,i,a=new Array(f+1),s=0;for(n=1;n<=f;n++)a[n]=s=s+r[n-1]<<1;for(i=0;i<=e;i++){var o=t[2*i+1];0!==o&&(t[2*i]=U(a[o]++,o))}}function L(t){var e;for(e=0;e>1;1<=r;r--)j(t,a,r);for(i=u;r=t.heap[1],t.heap[1]=t.heap[t.heap_len--],j(t,a,1),n=t.heap[1],t.heap[--t.heap_max]=r,t.heap[--t.heap_max]=n,a[2*i]=a[2*r]+a[2*n],t.depth[i]=(t.depth[r]>=t.depth[n]?t.depth[r]:t.depth[n])+1,a[2*r+1]=a[2*n+1]=i,t.heap[1]=i++,j(t,a,1),2<=t.heap_len;);t.heap[--t.heap_max]=t.heap[1],function(t,e){var r,n,i,a,s,o,u=e.dyn_tree,l=e.max_code,c=e.stat_desc.static_tree,d=e.stat_desc.has_stree,p=e.stat_desc.extra_bits,m=e.stat_desc.extra_base,_=e.stat_desc.max_length,g=0;for(a=0;a<=f;a++)t.bl_count[a]=0;for(u[2*t.heap[t.heap_max]+1]=0,r=t.heap_max+1;r>=7;n>>=1)if(1&r&&0!==t.dyn_ltree[2*e])return 0;if(0!==t.dyn_ltree[18]||0!==t.dyn_ltree[20]||0!==t.dyn_ltree[26])return 1;for(e=32;e>>3,(a=t.static_len+3+7>>>3)<=i&&(i=a)):i=a=r+5,r+4<=i&&-1!==e?K(t,e,r,n):4===t.strategy||a===i?(P(t,2+(n?1:0),3),Z(t,w,k)):(P(t,4+(n?1:0),3),function(t,e,r,n){var i;for(P(t,e-257,5),P(t,r-1,5),P(t,n-4,4),i=0;i>>8&255,t.pending_buf[t.d_buf+2*t.last_lit+1]=255&e,t.pending_buf[t.l_buf+t.last_lit]=255&r,t.last_lit++,0===e?t.dyn_ltree[2*r]++:(t.matches++,e--,t.dyn_ltree[2*(E[r]+s+1)]++,t.dyn_dtree[2*B(e)]++),t.last_lit===t.lit_bufsize-1},r._tr_align=function(t){P(t,2,3),D(t,d,w),function(t){16===t.bi_valid?(O(t,t.bi_buf),t.bi_buf=0,t.bi_valid=0):8<=t.bi_valid&&(t.pending_buf[t.pending++]=255&t.bi_buf,t.bi_buf>>=8,t.bi_valid-=8)}(t)}},{"../utils/common":41}],53:[function(t,e,r){"use strict";e.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(t,e,r){"use strict";e.exports="function"==typeof n?n:function(){var t=[].slice.apply(arguments);t.splice(1,0,0),setTimeout.apply(null,t)}},{}]},{},[10])(10)})}).call(e,r(4).Buffer,r(0),r(8).setImmediate)},function(t,e,r){"use strict";(function(t){ +/*! + * The buffer module from node.js, for the browser. + * + * @author Feross Aboukhadijeh + * @license MIT + */ +var n=r(5),i=r(6),a=r(7);function s(){return u.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function o(t,e){if(s()=s())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+s().toString(16)+" bytes");return 0|t}function p(t,e){if(u.isBuffer(t))return t.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(t)||t instanceof ArrayBuffer))return t.byteLength;"string"!=typeof t&&(t=""+t);var r=t.length;if(0===r)return 0;for(var n=!1;;)switch(e){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":case void 0:return M(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return j(t).length;default:if(n)return M(t).length;e=(""+e).toLowerCase(),n=!0}}function m(t,e,r){var n=t[e];t[e]=t[r],t[r]=n}function _(t,e,r,n,i){if(0===t.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),r=+r,isNaN(r)&&(r=i?0:t.length-1),r<0&&(r=t.length+r),r>=t.length){if(i)return-1;r=t.length-1}else if(r<0){if(!i)return-1;r=0}if("string"==typeof e&&(e=u.from(e,n)),u.isBuffer(e))return 0===e.length?-1:g(t,e,r,n,i);if("number"==typeof e)return e&=255,u.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(t,e,r):Uint8Array.prototype.lastIndexOf.call(t,e,r):g(t,[e],r,n,i);throw new TypeError("val must be string, number or Buffer")}function g(t,e,r,n,i){var a,s=1,o=t.length,u=e.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(t.length<2||e.length<2)return-1;s=2,o/=2,u/=2,r/=2}function l(t,e){return 1===s?t[e]:t.readUInt16BE(e*s)}if(i){var h=-1;for(a=r;ao&&(r=o-u),a=r;a>=0;a--){for(var f=!0,c=0;ci&&(n=i):n=i;var a=e.length;if(a%2!=0)throw new TypeError("Invalid hex string");n>a/2&&(n=a/2);for(var s=0;s>8,i=r%256,a.push(i),a.push(n);return a}(e,t.length-r),t,r,n)}function E(t,e,r){return 0===e&&r===t.length?n.fromByteArray(t):n.fromByteArray(t.slice(e,r))}function A(t,e,r){r=Math.min(t.length,r);for(var n=[],i=e;i239?4:l>223?3:l>191?2:1;if(i+f<=r)switch(f){case 1:l<128&&(h=l);break;case 2:128==(192&(a=t[i+1]))&&(u=(31&l)<<6|63&a)>127&&(h=u);break;case 3:a=t[i+1],s=t[i+2],128==(192&a)&&128==(192&s)&&(u=(15&l)<<12|(63&a)<<6|63&s)>2047&&(u<55296||u>57343)&&(h=u);break;case 4:a=t[i+1],s=t[i+2],o=t[i+3],128==(192&a)&&128==(192&s)&&128==(192&o)&&(u=(15&l)<<18|(63&a)<<12|(63&s)<<6|63&o)>65535&&u<1114112&&(h=u)}null===h?(h=65533,f=1):h>65535&&(h-=65536,n.push(h>>>10&1023|55296),h=56320|1023&h),n.push(h),i+=f}return function(t){var e=t.length;if(e<=S)return String.fromCharCode.apply(String,t);var r="",n=0;for(;nthis.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(e>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return T(this,e,r);case"utf8":case"utf-8":return A(this,e,r);case"ascii":return C(this,e,r);case"latin1":case"binary":return z(this,e,r);case"base64":return E(this,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return I(this,e,r);default:if(n)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),n=!0}}.apply(this,arguments)},u.prototype.equals=function(t){if(!u.isBuffer(t))throw new TypeError("Argument must be a Buffer");return this===t||0===u.compare(this,t)},u.prototype.inspect=function(){var t="",r=e.INSPECT_MAX_BYTES;return this.length>0&&(t=this.toString("hex",0,r).match(/.{2}/g).join(" "),this.length>r&&(t+=" ... ")),""},u.prototype.compare=function(t,e,r,n,i){if(!u.isBuffer(t))throw new TypeError("Argument must be a Buffer");if(void 0===e&&(e=0),void 0===r&&(r=t?t.length:0),void 0===n&&(n=0),void 0===i&&(i=this.length),e<0||r>t.length||n<0||i>this.length)throw new RangeError("out of range index");if(n>=i&&e>=r)return 0;if(n>=i)return-1;if(e>=r)return 1;if(e>>>=0,r>>>=0,n>>>=0,i>>>=0,this===t)return 0;for(var a=i-n,s=r-e,o=Math.min(a,s),l=this.slice(n,i),h=t.slice(e,r),f=0;fi)&&(r=i),t.length>0&&(r<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var a=!1;;)switch(n){case"hex":return v(this,t,e,r);case"utf8":case"utf-8":return b(this,t,e,r);case"ascii":return y(this,t,e,r);case"latin1":case"binary":return w(this,t,e,r);case"base64":return k(this,t,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return x(this,t,e,r);default:if(a)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),a=!0}},u.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var S=4096;function C(t,e,r){var n="";r=Math.min(t.length,r);for(var i=e;in)&&(r=n);for(var i="",a=e;ar)throw new RangeError("Trying to access beyond buffer length")}function B(t,e,r,n,i,a){if(!u.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>i||et.length)throw new RangeError("Index out of range")}function O(t,e,r,n){e<0&&(e=65535+e+1);for(var i=0,a=Math.min(t.length-r,2);i>>8*(n?i:1-i)}function P(t,e,r,n){e<0&&(e=4294967295+e+1);for(var i=0,a=Math.min(t.length-r,4);i>>8*(n?i:3-i)&255}function D(t,e,r,n,i,a){if(r+n>t.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function U(t,e,r,n,a){return a||D(t,0,r,4),i.write(t,e,r,n,23,4),r+4}function F(t,e,r,n,a){return a||D(t,0,r,8),i.write(t,e,r,n,52,8),r+8}u.prototype.slice=function(t,e){var r,n=this.length;if(t=~~t,e=void 0===e?n:~~e,t<0?(t+=n)<0&&(t=0):t>n&&(t=n),e<0?(e+=n)<0&&(e=0):e>n&&(e=n),e0&&(i*=256);)n+=this[t+--e]*i;return n},u.prototype.readUInt8=function(t,e){return e||R(t,1,this.length),this[t]},u.prototype.readUInt16LE=function(t,e){return e||R(t,2,this.length),this[t]|this[t+1]<<8},u.prototype.readUInt16BE=function(t,e){return e||R(t,2,this.length),this[t]<<8|this[t+1]},u.prototype.readUInt32LE=function(t,e){return e||R(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},u.prototype.readUInt32BE=function(t,e){return e||R(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},u.prototype.readIntLE=function(t,e,r){t|=0,e|=0,r||R(t,e,this.length);for(var n=this[t],i=1,a=0;++a=(i*=128)&&(n-=Math.pow(2,8*e)),n},u.prototype.readIntBE=function(t,e,r){t|=0,e|=0,r||R(t,e,this.length);for(var n=e,i=1,a=this[t+--n];n>0&&(i*=256);)a+=this[t+--n]*i;return a>=(i*=128)&&(a-=Math.pow(2,8*e)),a},u.prototype.readInt8=function(t,e){return e||R(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},u.prototype.readInt16LE=function(t,e){e||R(t,2,this.length);var r=this[t]|this[t+1]<<8;return 32768&r?4294901760|r:r},u.prototype.readInt16BE=function(t,e){e||R(t,2,this.length);var r=this[t+1]|this[t]<<8;return 32768&r?4294901760|r:r},u.prototype.readInt32LE=function(t,e){return e||R(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},u.prototype.readInt32BE=function(t,e){return e||R(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},u.prototype.readFloatLE=function(t,e){return e||R(t,4,this.length),i.read(this,t,!0,23,4)},u.prototype.readFloatBE=function(t,e){return e||R(t,4,this.length),i.read(this,t,!1,23,4)},u.prototype.readDoubleLE=function(t,e){return e||R(t,8,this.length),i.read(this,t,!0,52,8)},u.prototype.readDoubleBE=function(t,e){return e||R(t,8,this.length),i.read(this,t,!1,52,8)},u.prototype.writeUIntLE=function(t,e,r,n){(t=+t,e|=0,r|=0,n)||B(this,t,e,r,Math.pow(2,8*r)-1,0);var i=1,a=0;for(this[e]=255&t;++a=0&&(a*=256);)this[e+i]=t/a&255;return e+r},u.prototype.writeUInt8=function(t,e,r){return t=+t,e|=0,r||B(this,t,e,1,255,0),u.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),this[e]=255&t,e+1},u.prototype.writeUInt16LE=function(t,e,r){return t=+t,e|=0,r||B(this,t,e,2,65535,0),u.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):O(this,t,e,!0),e+2},u.prototype.writeUInt16BE=function(t,e,r){return t=+t,e|=0,r||B(this,t,e,2,65535,0),u.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):O(this,t,e,!1),e+2},u.prototype.writeUInt32LE=function(t,e,r){return t=+t,e|=0,r||B(this,t,e,4,4294967295,0),u.TYPED_ARRAY_SUPPORT?(this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t):P(this,t,e,!0),e+4},u.prototype.writeUInt32BE=function(t,e,r){return t=+t,e|=0,r||B(this,t,e,4,4294967295,0),u.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):P(this,t,e,!1),e+4},u.prototype.writeIntLE=function(t,e,r,n){if(t=+t,e|=0,!n){var i=Math.pow(2,8*r-1);B(this,t,e,r,i-1,-i)}var a=0,s=1,o=0;for(this[e]=255&t;++a>0)-o&255;return e+r},u.prototype.writeIntBE=function(t,e,r,n){if(t=+t,e|=0,!n){var i=Math.pow(2,8*r-1);B(this,t,e,r,i-1,-i)}var a=r-1,s=1,o=0;for(this[e+a]=255&t;--a>=0&&(s*=256);)t<0&&0===o&&0!==this[e+a+1]&&(o=1),this[e+a]=(t/s>>0)-o&255;return e+r},u.prototype.writeInt8=function(t,e,r){return t=+t,e|=0,r||B(this,t,e,1,127,-128),u.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),t<0&&(t=255+t+1),this[e]=255&t,e+1},u.prototype.writeInt16LE=function(t,e,r){return t=+t,e|=0,r||B(this,t,e,2,32767,-32768),u.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):O(this,t,e,!0),e+2},u.prototype.writeInt16BE=function(t,e,r){return t=+t,e|=0,r||B(this,t,e,2,32767,-32768),u.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):O(this,t,e,!1),e+2},u.prototype.writeInt32LE=function(t,e,r){return t=+t,e|=0,r||B(this,t,e,4,2147483647,-2147483648),u.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24):P(this,t,e,!0),e+4},u.prototype.writeInt32BE=function(t,e,r){return t=+t,e|=0,r||B(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),u.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):P(this,t,e,!1),e+4},u.prototype.writeFloatLE=function(t,e,r){return U(this,t,e,!0,r)},u.prototype.writeFloatBE=function(t,e,r){return U(this,t,e,!1,r)},u.prototype.writeDoubleLE=function(t,e,r){return F(this,t,e,!0,r)},u.prototype.writeDoubleBE=function(t,e,r){return F(this,t,e,!1,r)},u.prototype.copy=function(t,e,r,n){if(r||(r=0),n||0===n||(n=this.length),e>=t.length&&(e=t.length),e||(e=0),n>0&&n=this.length)throw new RangeError("sourceStart out of bounds");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),t.length-e=0;--i)t[i+e]=this[i+r];else if(a<1e3||!u.TYPED_ARRAY_SUPPORT)for(i=0;i>>=0,r=void 0===r?this.length:r>>>0,t||(t=0),"number"==typeof t)for(a=e;a55295&&r<57344){if(!i){if(r>56319){(e-=3)>-1&&a.push(239,191,189);continue}if(s+1===n){(e-=3)>-1&&a.push(239,191,189);continue}i=r;continue}if(r<56320){(e-=3)>-1&&a.push(239,191,189),i=r;continue}r=65536+(i-55296<<10|r-56320)}else i&&(e-=3)>-1&&a.push(239,191,189);if(i=null,r<128){if((e-=1)<0)break;a.push(r)}else if(r<2048){if((e-=2)<0)break;a.push(r>>6|192,63&r|128)}else if(r<65536){if((e-=3)<0)break;a.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;a.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return a}function j(t){return n.toByteArray(function(t){if((t=function(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}(t).replace(L,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function Z(t,e,r,n){for(var i=0;i=e.length||i>=t.length);++i)e[i+r]=t[i];return i}}).call(e,r(0))},function(t,e,r){"use strict";e.byteLength=function(t){var e=l(t),r=e[0],n=e[1];return 3*(r+n)/4-n},e.toByteArray=function(t){var e,r,n=l(t),s=n[0],o=n[1],u=new a(function(t,e,r){return 3*(e+r)/4-r}(0,s,o)),h=0,f=o>0?s-4:s;for(r=0;r>16&255,u[h++]=e>>8&255,u[h++]=255&e;2===o&&(e=i[t.charCodeAt(r)]<<2|i[t.charCodeAt(r+1)]>>4,u[h++]=255&e);1===o&&(e=i[t.charCodeAt(r)]<<10|i[t.charCodeAt(r+1)]<<4|i[t.charCodeAt(r+2)]>>2,u[h++]=e>>8&255,u[h++]=255&e);return u},e.fromByteArray=function(t){for(var e,r=t.length,i=r%3,a=[],s=0,o=r-i;so?o:s+16383));1===i?(e=t[r-1],a.push(n[e>>2]+n[e<<4&63]+"==")):2===i&&(e=(t[r-2]<<8)+t[r-1],a.push(n[e>>10]+n[e>>4&63]+n[e<<2&63]+"="));return a.join("")};for(var n=[],i=[],a="undefined"!=typeof Uint8Array?Uint8Array:Array,s="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",o=0,u=s.length;o0)throw new Error("Invalid string. Length must be a multiple of 4");var r=t.indexOf("=");return-1===r&&(r=e),[r,r===e?0:4-r%4]}function h(t){return n[t>>18&63]+n[t>>12&63]+n[t>>6&63]+n[63&t]}function f(t,e,r){for(var n,i=[],a=e;a>1,h=-7,f=r?i-1:0,c=r?-1:1,d=t[e+f];for(f+=c,a=d&(1<<-h)-1,d>>=-h,h+=o;h>0;a=256*a+t[e+f],f+=c,h-=8);for(s=a&(1<<-h)-1,a>>=-h,h+=n;h>0;s=256*s+t[e+f],f+=c,h-=8);if(0===a)a=1-l;else{if(a===u)return s?NaN:1/0*(d?-1:1);s+=Math.pow(2,n),a-=l}return(d?-1:1)*s*Math.pow(2,a-n)},e.write=function(t,e,r,n,i,a){var s,o,u,l=8*a-i-1,h=(1<>1,c=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,d=n?0:a-1,p=n?1:-1,m=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(o=isNaN(e)?1:0,s=h):(s=Math.floor(Math.log(e)/Math.LN2),e*(u=Math.pow(2,-s))<1&&(s--,u*=2),(e+=s+f>=1?c/u:c*Math.pow(2,1-f))*u>=2&&(s++,u/=2),s+f>=h?(o=0,s=h):s+f>=1?(o=(e*u-1)*Math.pow(2,i),s+=f):(o=e*Math.pow(2,f-1)*Math.pow(2,i),s=0));i>=8;t[r+d]=255&o,d+=p,o/=256,i-=8);for(s=s<0;t[r+d]=255&s,d+=p,s/=256,l-=8);t[r+d-p]|=128*m}},function(t,e){var r={}.toString;t.exports=Array.isArray||function(t){return"[object Array]"==r.call(t)}},function(t,e,r){(function(t){var n=void 0!==t&&t||"undefined"!=typeof self&&self||window,i=Function.prototype.apply;function a(t,e){this._id=t,this._clearFn=e}e.setTimeout=function(){return new a(i.call(setTimeout,n,arguments),clearTimeout)},e.setInterval=function(){return new a(i.call(setInterval,n,arguments),clearInterval)},e.clearTimeout=e.clearInterval=function(t){t&&t.close()},a.prototype.unref=a.prototype.ref=function(){},a.prototype.close=function(){this._clearFn.call(n,this._id)},e.enroll=function(t,e){clearTimeout(t._idleTimeoutId),t._idleTimeout=e},e.unenroll=function(t){clearTimeout(t._idleTimeoutId),t._idleTimeout=-1},e._unrefActive=e.active=function(t){clearTimeout(t._idleTimeoutId);var e=t._idleTimeout;e>=0&&(t._idleTimeoutId=setTimeout(function(){t._onTimeout&&t._onTimeout()},e))},r(9),e.setImmediate="undefined"!=typeof self&&self.setImmediate||void 0!==t&&t.setImmediate||this&&this.setImmediate,e.clearImmediate="undefined"!=typeof self&&self.clearImmediate||void 0!==t&&t.clearImmediate||this&&this.clearImmediate}).call(e,r(0))},function(t,e,r){(function(t,e){!function(t,r){"use strict";if(!t.setImmediate){var n,i=1,a={},s=!1,o=t.document,u=Object.getPrototypeOf&&Object.getPrototypeOf(t);u=u&&u.setTimeout?u:t,"[object process]"==={}.toString.call(t.process)?n=function(t){e.nextTick(function(){h(t)})}:function(){if(t.postMessage&&!t.importScripts){var e=!0,r=t.onmessage;return t.onmessage=function(){e=!1},t.postMessage("","*"),t.onmessage=r,e}}()?function(){var e="setImmediate$"+Math.random()+"$",r=function(r){r.source===t&&"string"==typeof r.data&&0===r.data.indexOf(e)&&h(+r.data.slice(e.length))};t.addEventListener?t.addEventListener("message",r,!1):t.attachEvent("onmessage",r),n=function(r){t.postMessage(e+r,"*")}}():t.MessageChannel?function(){var t=new MessageChannel;t.port1.onmessage=function(t){h(t.data)},n=function(e){t.port2.postMessage(e)}}():o&&"onreadystatechange"in o.createElement("script")?function(){var t=o.documentElement;n=function(e){var r=o.createElement("script");r.onreadystatechange=function(){h(e),r.onreadystatechange=null,t.removeChild(r),r=null},t.appendChild(r)}}():n=function(t){setTimeout(h,0,t)},u.setImmediate=function(t){"function"!=typeof t&&(t=new Function(""+t));for(var e=new Array(arguments.length-1),r=0;r1)for(var r=1;rnull))=>{$('