add .bullet loader for GPU demo
This commit is contained in:
@@ -113,6 +113,8 @@
|
|||||||
include "../src/Bullet3Common"
|
include "../src/Bullet3Common"
|
||||||
include "../src/Bullet3Geometry"
|
include "../src/Bullet3Geometry"
|
||||||
include "../src/Bullet3Collision"
|
include "../src/Bullet3Collision"
|
||||||
|
include "../src/Bullet3Serialize/Bullet2FileLoader"
|
||||||
|
|
||||||
include "../test/b3DynamicBvhBroadphase"
|
include "../test/b3DynamicBvhBroadphase"
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|||||||
BIN
data/testFile.bullet
Normal file
BIN
data/testFile.bullet
Normal file
Binary file not shown.
@@ -30,7 +30,7 @@
|
|||||||
#include "rigidbody/GpuConvexScene.h"
|
#include "rigidbody/GpuConvexScene.h"
|
||||||
#include "rigidbody/GpuCompoundScene.h"
|
#include "rigidbody/GpuCompoundScene.h"
|
||||||
#include "rigidbody/GpuSphereScene.h"
|
#include "rigidbody/GpuSphereScene.h"
|
||||||
|
#include "rigidbody/Bullet2FileDemo.h"
|
||||||
//#include "BroadphaseBenchmark.h"
|
//#include "BroadphaseBenchmark.h"
|
||||||
|
|
||||||
int g_OpenGLWidth=1024;
|
int g_OpenGLWidth=1024;
|
||||||
@@ -68,7 +68,7 @@ GpuDemo::CreateFunc* allDemos[]=
|
|||||||
// ConcaveCompound2Scene::MyCreateFunc,
|
// ConcaveCompound2Scene::MyCreateFunc,
|
||||||
|
|
||||||
|
|
||||||
|
Bullet2FileDemo::MyCreateFunc,
|
||||||
GpuBoxPlaneScene::MyCreateFunc,
|
GpuBoxPlaneScene::MyCreateFunc,
|
||||||
GpuConvexPlaneScene::MyCreateFunc,
|
GpuConvexPlaneScene::MyCreateFunc,
|
||||||
|
|
||||||
|
|||||||
@@ -29,7 +29,8 @@ function createProject(vendor)
|
|||||||
"Bullet3Common",
|
"Bullet3Common",
|
||||||
"Bullet3Geometry",
|
"Bullet3Geometry",
|
||||||
"Bullet3Collision",
|
"Bullet3Collision",
|
||||||
"Bullet3Dynamics"
|
"Bullet3Dynamics",
|
||||||
|
"Bullet2FileLoader"
|
||||||
}
|
}
|
||||||
|
|
||||||
files {
|
files {
|
||||||
|
|||||||
40
demo/gpudemo/rigidbody/Bullet2FileDemo.cpp
Normal file
40
demo/gpudemo/rigidbody/Bullet2FileDemo.cpp
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
|
||||||
|
#include "Bullet2FileDemo.h"
|
||||||
|
#include "BulletDataExtractor.h"
|
||||||
|
#include "GpuRigidBodyDemoInternalData.h"
|
||||||
|
|
||||||
|
|
||||||
|
Bullet2FileDemo::Bullet2FileDemo()
|
||||||
|
{
|
||||||
|
m_loader = 0;
|
||||||
|
}
|
||||||
|
Bullet2FileDemo::~Bullet2FileDemo()
|
||||||
|
{
|
||||||
|
delete m_loader;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Bullet2FileDemo::setupScene(const ConstructionInfo& ci)
|
||||||
|
{
|
||||||
|
btAssert(ci.m_instancingRenderer);
|
||||||
|
|
||||||
|
const char* fileName="data/testFile.bullet";
|
||||||
|
|
||||||
|
FILE* f = 0;
|
||||||
|
|
||||||
|
const char* prefix[]={"./","../","../../","../../../","../../../../"};
|
||||||
|
int numPrefixes = sizeof(prefix)/sizeof(const char*);
|
||||||
|
char relativeFileName[1024];
|
||||||
|
|
||||||
|
for (int i=0;!f && i<numPrefixes;i++)
|
||||||
|
{
|
||||||
|
sprintf(relativeFileName,"%s%s",prefix[i],fileName);
|
||||||
|
f = fopen(relativeFileName,"rb");
|
||||||
|
}
|
||||||
|
if (f)
|
||||||
|
{
|
||||||
|
fclose(f);
|
||||||
|
createScene(*ci.m_instancingRenderer,*m_data->m_np,*m_data->m_rigidBodyPipeline,relativeFileName);
|
||||||
|
}
|
||||||
|
// m_loader = new btBulletDataExtractor(*ci.m_instancingRenderer,*m_data->m_np,*m_data->m_rigidBodyPipeline);
|
||||||
|
// m_loader->convertAllObjects(bulletFile);
|
||||||
|
}
|
||||||
32
demo/gpudemo/rigidbody/Bullet2FileDemo.h
Normal file
32
demo/gpudemo/rigidbody/Bullet2FileDemo.h
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
#ifndef BULLET2_FILE_DEMO_H
|
||||||
|
#define BULLET2_FILE_DEMO_H
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#include "GpuRigidBodyDemo.h"
|
||||||
|
|
||||||
|
class Bullet2FileDemo : public GpuRigidBodyDemo
|
||||||
|
{
|
||||||
|
class btBulletDataExtractor* m_loader;
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
Bullet2FileDemo();
|
||||||
|
virtual ~Bullet2FileDemo();
|
||||||
|
virtual const char* getName()
|
||||||
|
{
|
||||||
|
return "Bullet2File";
|
||||||
|
}
|
||||||
|
|
||||||
|
static GpuDemo* MyCreateFunc()
|
||||||
|
{
|
||||||
|
GpuDemo* demo = new Bullet2FileDemo;
|
||||||
|
return demo;
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void setupScene(const ConstructionInfo& ci);
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif//BULLET2_FILE_DEMO_H
|
||||||
|
|
||||||
768
demo/gpudemo/rigidbody/BulletDataExtractor.cpp
Normal file
768
demo/gpudemo/rigidbody/BulletDataExtractor.cpp
Normal file
@@ -0,0 +1,768 @@
|
|||||||
|
int NUM_OBJECTS_X = 20;
|
||||||
|
int NUM_OBJECTS_Y = 20;
|
||||||
|
int NUM_OBJECTS_Z = 20;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
float X_GAP = 2.3f;
|
||||||
|
float Y_GAP = 2.f;
|
||||||
|
float Z_GAP = 2.3f;
|
||||||
|
|
||||||
|
#include "BulletDataExtractor.h"
|
||||||
|
#include "Bullet3Serialize/Bullet2FileLoader/btBulletFile.h"
|
||||||
|
bool keepStaticObjects = true;
|
||||||
|
extern bool enableExperimentalCpuConcaveCollision;
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#include "OpenGLWindow/OpenGLInclude.h"
|
||||||
|
|
||||||
|
|
||||||
|
#include "OpenGLWindow/GLInstancingRenderer.h"
|
||||||
|
//#include "LinearMath/btQuickprof.h"
|
||||||
|
#include "Bullet3Common/b3Quaternion.h"
|
||||||
|
#include "Bullet3Common/b3Matrix3x3.h"
|
||||||
|
#include "gpu_narrowphase/host/b3ConvexUtility.h"
|
||||||
|
#include "OpenGLWindow/ShapeData.h"
|
||||||
|
#include "../../ObjLoader/objLoader.h"
|
||||||
|
#include "gpu_rigidbody/host/b3GpuRigidBodyPipeline.h"
|
||||||
|
#include "gpu_rigidbody/host/b3GpuNarrowPhase.h"
|
||||||
|
|
||||||
|
///work-in-progress
|
||||||
|
///This ReadBulletSample is kept as simple as possible without dependencies to the Bullet SDK.
|
||||||
|
///It can be used to load .bullet data for other physics SDKs
|
||||||
|
///For a more complete example how to load and convert Bullet data using the Bullet SDK check out
|
||||||
|
///the Bullet/Demos/SerializeDemo and Bullet/Serialize/BulletWorldImporter
|
||||||
|
|
||||||
|
|
||||||
|
//using namespace Bullet;
|
||||||
|
|
||||||
|
struct GraphicsVertex
|
||||||
|
{
|
||||||
|
float xyzw[4];
|
||||||
|
float normal[3];
|
||||||
|
float uv[2];
|
||||||
|
};
|
||||||
|
struct GraphicsShape
|
||||||
|
{
|
||||||
|
const float* m_vertices;
|
||||||
|
int m_numvertices;
|
||||||
|
const int* m_indices;
|
||||||
|
int m_numIndices;
|
||||||
|
float m_scaling[4];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct InstanceGroup
|
||||||
|
{
|
||||||
|
Bullet::btCollisionShapeData* m_shape;
|
||||||
|
int m_collisionShapeIndex;
|
||||||
|
|
||||||
|
b3AlignedObjectArray<bParse::bStructHandle*> m_rigidBodies;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
void createScene( GLInstancingRenderer& renderer,b3GpuNarrowPhase& np, b3GpuRigidBodyPipeline& rbWorld, const char* fileName)
|
||||||
|
{
|
||||||
|
//const char* fileName="../../bin/convex-trimesh.bullet";
|
||||||
|
//const char* fileName="../../bin/1000 convex.bullet";
|
||||||
|
//const char* fileName="../../bin/1000 stack.bullet";
|
||||||
|
//const char* fileName="../../bin/3000 fall.bullet";
|
||||||
|
|
||||||
|
|
||||||
|
//const char* fileName="../../bin/testFile.bullet";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
FILE* f = fopen(fileName,"rb");
|
||||||
|
if (f)
|
||||||
|
{
|
||||||
|
fclose(f);
|
||||||
|
|
||||||
|
bool verboseDumpAllTypes = false;
|
||||||
|
|
||||||
|
bParse::btBulletFile* bulletFile2 = new bParse::btBulletFile(fileName);
|
||||||
|
|
||||||
|
bool ok = (bulletFile2->getFlags()& bParse::FD_OK)!=0;
|
||||||
|
|
||||||
|
if (ok)
|
||||||
|
bulletFile2->parse(verboseDumpAllTypes);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf("Error loading file %s.\n",fileName);
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
ok = (bulletFile2->getFlags()& bParse::FD_OK)!=0;
|
||||||
|
|
||||||
|
if (!(bulletFile2->getFlags() & bParse::FD_DOUBLE_PRECISION))
|
||||||
|
{
|
||||||
|
if (!ok)
|
||||||
|
{
|
||||||
|
printf("Error parsing file %s.\n",fileName);
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (verboseDumpAllTypes)
|
||||||
|
{
|
||||||
|
bulletFile2->dumpChunks(bulletFile2->getFileDNA());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
btBulletDataExtractor extractor(renderer,np,rbWorld);
|
||||||
|
|
||||||
|
extractor.convertAllObjects(bulletFile2);
|
||||||
|
delete bulletFile2;
|
||||||
|
return;
|
||||||
|
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
printf("Error: double precision .bullet files not supported in this demo\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
delete bulletFile2;
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
printf("Warning: cannot find file %s, using programmatically created scene instead.\n",fileName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
enum LocalBroadphaseNativeTypes
|
||||||
|
{
|
||||||
|
// polyhedral convex shapes
|
||||||
|
BOX_SHAPE_PROXYTYPE,
|
||||||
|
TRIANGLE_SHAPE_PROXYTYPE,
|
||||||
|
TETRAHEDRAL_SHAPE_PROXYTYPE,
|
||||||
|
CONVEX_TRIANGLEMESH_SHAPE_PROXYTYPE,
|
||||||
|
CONVEX_HULL_SHAPE_PROXYTYPE,
|
||||||
|
CONVEX_POINT_CLOUD_SHAPE_PROXYTYPE,
|
||||||
|
CUSTOM_POLYHEDRAL_SHAPE_TYPE,
|
||||||
|
//implicit convex shapes
|
||||||
|
IMPLICIT_CONVEX_SHAPES_START_HERE,
|
||||||
|
SPHERE_SHAPE_PROXYTYPE,
|
||||||
|
MULTI_SPHERE_SHAPE_PROXYTYPE,
|
||||||
|
CAPSULE_SHAPE_PROXYTYPE,
|
||||||
|
CONE_SHAPE_PROXYTYPE,
|
||||||
|
CONVEX_SHAPE_PROXYTYPE,
|
||||||
|
CYLINDER_SHAPE_PROXYTYPE,
|
||||||
|
UNIFORM_SCALING_SHAPE_PROXYTYPE,
|
||||||
|
MINKOWSKI_SUM_SHAPE_PROXYTYPE,
|
||||||
|
MINKOWSKI_DIFFERENCE_SHAPE_PROXYTYPE,
|
||||||
|
BOX_2D_SHAPE_PROXYTYPE,
|
||||||
|
CONVEX_2D_SHAPE_PROXYTYPE,
|
||||||
|
CUSTOM_CONVEX_SHAPE_TYPE,
|
||||||
|
//concave shapes
|
||||||
|
CONCAVE_SHAPES_START_HERE,
|
||||||
|
//keep all the convex shapetype below here, for the check IsConvexShape in broadphase proxy!
|
||||||
|
TRIANGLE_MESH_SHAPE_PROXYTYPE,
|
||||||
|
SCALED_TRIANGLE_MESH_SHAPE_PROXYTYPE,
|
||||||
|
///used for demo integration FAST/Swift collision library and Bullet
|
||||||
|
FAST_CONCAVE_MESH_PROXYTYPE,
|
||||||
|
//terrain
|
||||||
|
TERRAIN_SHAPE_PROXYTYPE,
|
||||||
|
///Used for GIMPACT Trimesh integration
|
||||||
|
GIMPACT_SHAPE_PROXYTYPE,
|
||||||
|
///Multimaterial mesh
|
||||||
|
MULTIMATERIAL_TRIANGLE_MESH_PROXYTYPE,
|
||||||
|
|
||||||
|
EMPTY_SHAPE_PROXYTYPE,
|
||||||
|
STATIC_PLANE_PROXYTYPE,
|
||||||
|
CUSTOM_CONCAVE_SHAPE_TYPE,
|
||||||
|
CONCAVE_SHAPES_END_HERE,
|
||||||
|
|
||||||
|
COMPOUND_SHAPE_PROXYTYPE,
|
||||||
|
|
||||||
|
SOFTBODY_SHAPE_PROXYTYPE,
|
||||||
|
HFFLUID_SHAPE_PROXYTYPE,
|
||||||
|
HFFLUID_BUOYANT_CONVEX_SHAPE_PROXYTYPE,
|
||||||
|
INVALID_SHAPE_PROXYTYPE,
|
||||||
|
|
||||||
|
MAX_BROADPHASE_COLLISION_TYPES
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
btBulletDataExtractor::btBulletDataExtractor(GLInstancingRenderer& renderer, b3GpuNarrowPhase& np, b3GpuRigidBodyPipeline& rbWorld)
|
||||||
|
:m_renderer(renderer), m_np(np), m_rbPipeline(rbWorld)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
btBulletDataExtractor::~btBulletDataExtractor()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void btBulletDataExtractor::convertAllObjects(bParse::btBulletFile* bulletFile2)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i=0;i<bulletFile2->m_collisionShapes.size();i++)
|
||||||
|
{
|
||||||
|
Bullet::btCollisionShapeData* shapeData = (Bullet::btCollisionShapeData*)bulletFile2->m_collisionShapes[i];
|
||||||
|
if (shapeData->m_name)
|
||||||
|
printf("converting shape %s\n", shapeData->m_name);
|
||||||
|
int shapeIndex = convertCollisionShape(shapeData);
|
||||||
|
//valid conversion?
|
||||||
|
if (shapeIndex>=0)
|
||||||
|
{
|
||||||
|
InstanceGroup* group = new InstanceGroup;
|
||||||
|
group->m_shape = shapeData;
|
||||||
|
group->m_collisionShapeIndex = shapeIndex;
|
||||||
|
m_instanceGroups.push_back(group);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i=0;i<bulletFile2->m_rigidBodies.size();i++)
|
||||||
|
{
|
||||||
|
|
||||||
|
Bullet::btRigidBodyFloatData* colObjData = (Bullet::btRigidBodyFloatData*)bulletFile2->m_rigidBodies[i];
|
||||||
|
Bullet::btCollisionShapeData* shapeData = (Bullet::btCollisionShapeData*)colObjData->m_collisionObjectData.m_collisionShape;
|
||||||
|
for (int j=0;j<m_instanceGroups.size();j++)
|
||||||
|
{
|
||||||
|
if (m_instanceGroups[j]->m_shape == shapeData)
|
||||||
|
{
|
||||||
|
m_instanceGroups[j]->m_rigidBodies.push_back(bulletFile2->m_rigidBodies[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//now register all objects in order
|
||||||
|
for (int i=0;i<m_instanceGroups.size();i++)
|
||||||
|
{
|
||||||
|
if (m_instanceGroups[i]->m_rigidBodies.size()>0)
|
||||||
|
{
|
||||||
|
|
||||||
|
m_renderer.registerShape(m_graphicsShapes[i]->m_vertices,m_graphicsShapes[i]->m_numvertices,m_graphicsShapes[i]->m_indices,m_graphicsShapes[i]->m_numIndices);
|
||||||
|
|
||||||
|
for (int j=0;j<m_instanceGroups[i]->m_rigidBodies.size();j++)
|
||||||
|
{
|
||||||
|
Bullet::btRigidBodyFloatData* colObjData = (Bullet::btRigidBodyFloatData*)m_instanceGroups[i]->m_rigidBodies[j];
|
||||||
|
|
||||||
|
b3Matrix3x3 mat;
|
||||||
|
mat.deSerializeFloat((const btMatrix3x3FloatData&)colObjData->m_collisionObjectData.m_worldTransform.m_basis);
|
||||||
|
b3Quaternion orn;
|
||||||
|
mat.getRotation(orn);
|
||||||
|
float quaternion[4] = {orn[0],orn[1],orn[2],orn[3]};
|
||||||
|
float pos[4] = {colObjData->m_collisionObjectData.m_worldTransform.m_origin.m_floats[0],
|
||||||
|
colObjData->m_collisionObjectData.m_worldTransform.m_origin.m_floats[1],
|
||||||
|
colObjData->m_collisionObjectData.m_worldTransform.m_origin.m_floats[2],
|
||||||
|
0.f};
|
||||||
|
float color[4] = {0,0,0,1};
|
||||||
|
float mass = 0.f;
|
||||||
|
if (colObjData->m_inverseMass==0.f)
|
||||||
|
{
|
||||||
|
color[1] = 1;
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
mass = 1.f/colObjData->m_inverseMass;
|
||||||
|
color[2] = 1;
|
||||||
|
}
|
||||||
|
if (keepStaticObjects || colObjData->m_inverseMass!=0.f)
|
||||||
|
{
|
||||||
|
|
||||||
|
m_rbPipeline.registerPhysicsInstance(mass,pos,quaternion,m_instanceGroups[i]->m_collisionShapeIndex,0,true);
|
||||||
|
m_renderer.registerGraphicsInstance(m_instanceGroups[i]->m_collisionShapeIndex,pos,quaternion,color,m_graphicsShapes[i]->m_scaling);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i=0;i<bulletFile2->m_collisionObjects.size();i++)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
m_rbPipeline.writeAllInstancesToGpu();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int btBulletDataExtractor::convertCollisionShape( Bullet::btCollisionShapeData* shapeData )
|
||||||
|
{
|
||||||
|
int shapeIndex = -1;
|
||||||
|
|
||||||
|
switch (shapeData->m_shapeType)
|
||||||
|
{
|
||||||
|
case STATIC_PLANE_PROXYTYPE:
|
||||||
|
{
|
||||||
|
Bullet::btStaticPlaneShapeData* planeData = (Bullet::btStaticPlaneShapeData*)shapeData;
|
||||||
|
shapeIndex = createPlaneShape(planeData->m_planeNormal,planeData->m_planeConstant, planeData->m_localScaling);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case CYLINDER_SHAPE_PROXYTYPE:
|
||||||
|
case CAPSULE_SHAPE_PROXYTYPE:
|
||||||
|
case BOX_SHAPE_PROXYTYPE:
|
||||||
|
case SPHERE_SHAPE_PROXYTYPE:
|
||||||
|
case MULTI_SPHERE_SHAPE_PROXYTYPE:
|
||||||
|
case CONVEX_HULL_SHAPE_PROXYTYPE:
|
||||||
|
{
|
||||||
|
Bullet::btConvexInternalShapeData* bsd = (Bullet::btConvexInternalShapeData*)shapeData;
|
||||||
|
|
||||||
|
switch (shapeData->m_shapeType)
|
||||||
|
{
|
||||||
|
case BOX_SHAPE_PROXYTYPE:
|
||||||
|
{
|
||||||
|
shapeIndex = createBoxShape(bsd->m_implicitShapeDimensions, bsd->m_localScaling,bsd->m_collisionMargin);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case SPHERE_SHAPE_PROXYTYPE:
|
||||||
|
{
|
||||||
|
shapeIndex = createSphereShape(bsd->m_implicitShapeDimensions.m_floats[0],bsd->m_localScaling, bsd->m_collisionMargin);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case CONVEX_HULL_SHAPE_PROXYTYPE:
|
||||||
|
{
|
||||||
|
Bullet::btConvexHullShapeData* convexData = (Bullet::btConvexHullShapeData*)bsd;
|
||||||
|
int numPoints = convexData->m_numUnscaledPoints;
|
||||||
|
b3Vector3 localScaling;
|
||||||
|
localScaling.deSerializeFloat((btVector3FloatData&)bsd->m_localScaling);
|
||||||
|
b3AlignedObjectArray<b3Vector3> tmpPoints;
|
||||||
|
int i;
|
||||||
|
if (convexData->m_unscaledPointsFloatPtr)
|
||||||
|
{
|
||||||
|
for ( i=0;i<numPoints;i++)
|
||||||
|
{
|
||||||
|
b3Vector3 pt = b3Vector3(convexData->m_unscaledPointsFloatPtr[i].m_floats[0],
|
||||||
|
convexData->m_unscaledPointsFloatPtr[i].m_floats[1],
|
||||||
|
convexData->m_unscaledPointsFloatPtr[i].m_floats[2]);//convexData->m_unscaledPointsFloatPtr[i].m_floats[3]);
|
||||||
|
|
||||||
|
tmpPoints.push_back(pt*localScaling);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
float unitScaling[4] = {1,1,1,1};
|
||||||
|
|
||||||
|
|
||||||
|
int strideInBytes = sizeof(b3Vector3);
|
||||||
|
strideInBytes = 4*sizeof(float);
|
||||||
|
int noHeightField = 1;
|
||||||
|
shapeIndex = m_np.registerConvexHullShape(&tmpPoints[0].m_floats[0],strideInBytes, numPoints,&unitScaling[0]);
|
||||||
|
|
||||||
|
printf("createConvexHull with %d vertices\n",numPoints);
|
||||||
|
|
||||||
|
GraphicsShape* gfxShape = createGraphicsShapeFromConvexHull(&tmpPoints[0],tmpPoints.size());
|
||||||
|
m_graphicsShapes.push_back(gfxShape);
|
||||||
|
|
||||||
|
return shapeIndex;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
#if 0
|
||||||
|
case CAPSULE_SHAPE_PROXYTYPE:
|
||||||
|
{
|
||||||
|
btCapsuleShapeData* capData = (btCapsuleShapeData*)shapeData;
|
||||||
|
switch (capData->m_upAxis)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
{
|
||||||
|
shape = createCapsuleShapeX(implicitShapeDimensions.getY(),2*implicitShapeDimensions.getX());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 1:
|
||||||
|
{
|
||||||
|
shape = createCapsuleShapeY(implicitShapeDimensions.getX(),2*implicitShapeDimensions.getY());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 2:
|
||||||
|
{
|
||||||
|
shape = createCapsuleShapeZ(implicitShapeDimensions.getX(),2*implicitShapeDimensions.getZ());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
printf("error: wrong up axis for btCapsuleShape\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case CYLINDER_SHAPE_PROXYTYPE:
|
||||||
|
{
|
||||||
|
btCylinderShapeData* cylData = (btCylinderShapeData*) shapeData;
|
||||||
|
b3Vector3 halfExtents = implicitShapeDimensions+margin;
|
||||||
|
switch (cylData->m_upAxis)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
{
|
||||||
|
shape = createCylinderShapeX(halfExtents.getY(),halfExtents.getX());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 1:
|
||||||
|
{
|
||||||
|
shape = createCylinderShapeY(halfExtents.getX(),halfExtents.getY());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 2:
|
||||||
|
{
|
||||||
|
shape = createCylinderShapeZ(halfExtents.getX(),halfExtents.getZ());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
printf("unknown Cylinder up axis\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case MULTI_SPHERE_SHAPE_PROXYTYPE:
|
||||||
|
{
|
||||||
|
btMultiSphereShapeData* mss = (btMultiSphereShapeData*)bsd;
|
||||||
|
int numSpheres = mss->m_localPositionArraySize;
|
||||||
|
int i;
|
||||||
|
for ( i=0;i<numSpheres;i++)
|
||||||
|
{
|
||||||
|
tmpPos[i].deSerializeFloat(mss->m_localPositionArrayPtr[i].m_pos);
|
||||||
|
radii[i] = mss->m_localPositionArrayPtr[i].m_radius;
|
||||||
|
}
|
||||||
|
shape = new btMultiSphereShape(&tmpPos[0],&radii[0],numSpheres);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
printf("error: cannot create shape type (%d)\n",shapeData->m_shapeType);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case TRIANGLE_MESH_SHAPE_PROXYTYPE:
|
||||||
|
{
|
||||||
|
Bullet::btTriangleMeshShapeData* trimesh = (Bullet::btTriangleMeshShapeData*)shapeData;
|
||||||
|
printf("numparts = %d\n",trimesh->m_meshInterface.m_numMeshParts);
|
||||||
|
if (trimesh->m_meshInterface.m_numMeshParts)
|
||||||
|
{
|
||||||
|
for (int i=0;i<trimesh->m_meshInterface.m_numMeshParts;i++)
|
||||||
|
{
|
||||||
|
Bullet::btMeshPartData& dat = trimesh->m_meshInterface.m_meshPartsPtr[i];
|
||||||
|
printf("numtris = %d, numverts = %d\n", dat.m_numTriangles,dat.m_numVertices);//,dat.m_vertices3f,dat.m_3indices16
|
||||||
|
printf("scaling = %f,%f,%f\n", trimesh->m_meshInterface.m_scaling.m_floats[0],trimesh->m_meshInterface.m_scaling.m_floats[1],trimesh->m_meshInterface.m_scaling.m_floats[2]);
|
||||||
|
// dat.
|
||||||
|
//dat.
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
///trimesh->m_meshInterface.m_meshPartsPtr
|
||||||
|
//trimesh->m_meshInterface.m_scaling
|
||||||
|
}
|
||||||
|
//trimesh->m_meshInterface
|
||||||
|
//btTriangleIndexVertexArray* meshInterface = createMeshInterface(trimesh->m_meshInterface);
|
||||||
|
|
||||||
|
|
||||||
|
//scaling
|
||||||
|
//b3Vector3 scaling; scaling.deSerializeFloat(trimesh->m_meshInterface.m_scaling);
|
||||||
|
//meshInterface->setScaling(scaling);
|
||||||
|
|
||||||
|
//printf("trimesh->m_collisionMargin=%f\n",trimesh->m_collisionMargin);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
case COMPOUND_SHAPE_PROXYTYPE:
|
||||||
|
{
|
||||||
|
btCompoundShapeData* compoundData = (btCompoundShapeData*)shapeData;
|
||||||
|
btCompoundShape* compoundShape = createCompoundShape();
|
||||||
|
|
||||||
|
|
||||||
|
b3AlignedObjectArray<btCollisionShape*> childShapes;
|
||||||
|
for (int i=0;i<compoundData->m_numChildShapes;i++)
|
||||||
|
{
|
||||||
|
btCollisionShape* childShape = convertCollisionShape(compoundData->m_childShapePtr[i].m_childShape);
|
||||||
|
if (childShape)
|
||||||
|
{
|
||||||
|
btTransform localTransform;
|
||||||
|
localTransform.deSerializeFloat(compoundData->m_childShapePtr[i].m_transform);
|
||||||
|
compoundShape->addChildShape(localTransform,childShape);
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
printf("error: couldn't create childShape for compoundShape\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
shape = compoundShape;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case GIMPACT_SHAPE_PROXYTYPE:
|
||||||
|
{
|
||||||
|
btGImpactMeshShapeData* gimpactData = (btGImpactMeshShapeData*) shapeData;
|
||||||
|
if (gimpactData->m_gimpactSubType == CONST_GIMPACT_TRIMESH_SHAPE)
|
||||||
|
{
|
||||||
|
btTriangleIndexVertexArray* meshInterface = createMeshInterface(gimpactData->m_meshInterface);
|
||||||
|
btGImpactMeshShape* gimpactShape = createGimpactShape(meshInterface);
|
||||||
|
b3Vector3 localScaling;
|
||||||
|
localScaling.deSerializeFloat(gimpactData->m_localScaling);
|
||||||
|
gimpactShape->setLocalScaling(localScaling);
|
||||||
|
gimpactShape->setMargin(b3Scalar(gimpactData->m_collisionMargin));
|
||||||
|
gimpactShape->updateBound();
|
||||||
|
shape = gimpactShape;
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
printf("unsupported gimpact sub type\n");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case SOFTBODY_SHAPE_PROXYTYPE:
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
printf("unsupported shape type (%d)\n",shapeData->m_shapeType);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return shapeIndex;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
int btBulletDataExtractor::createBoxShape( const Bullet::btVector3FloatData& halfDimensions, const Bullet::btVector3FloatData& localScaling, float collisionMargin)
|
||||||
|
{
|
||||||
|
float cubeScaling[4] = {
|
||||||
|
halfDimensions.m_floats[0]*localScaling.m_floats[0]+collisionMargin,
|
||||||
|
halfDimensions.m_floats[1]*localScaling.m_floats[1]+collisionMargin,
|
||||||
|
halfDimensions.m_floats[2]*localScaling.m_floats[2]+collisionMargin,
|
||||||
|
1};
|
||||||
|
int strideInBytes = sizeof(float)*9;
|
||||||
|
int noHeightField = 1;
|
||||||
|
int cubeCollisionShapeIndex = m_np.registerConvexHullShape(&cube_vertices[0],strideInBytes, sizeof(cube_vertices)/strideInBytes,&cubeScaling[0]);
|
||||||
|
|
||||||
|
{
|
||||||
|
int numVertices = sizeof(cube_vertices)/strideInBytes;
|
||||||
|
int numIndices = sizeof(cube_indices)/sizeof(int);
|
||||||
|
|
||||||
|
GraphicsShape* gfxShape = new GraphicsShape;
|
||||||
|
gfxShape->m_vertices = cube_vertices;
|
||||||
|
gfxShape->m_numvertices = numVertices;
|
||||||
|
gfxShape->m_indices = cube_indices;
|
||||||
|
gfxShape->m_numIndices = numIndices;
|
||||||
|
for (int i=0;i<4;i++)
|
||||||
|
gfxShape->m_scaling[i] = cubeScaling[i];
|
||||||
|
m_graphicsShapes.push_back(gfxShape);
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("createBoxShape with half extents %f,%f,%f\n",cubeScaling[0], cubeScaling[1],cubeScaling[2]);
|
||||||
|
//halfDimensions * localScaling
|
||||||
|
return cubeCollisionShapeIndex;
|
||||||
|
}
|
||||||
|
|
||||||
|
int btBulletDataExtractor::createSphereShape( float radius, const Bullet::btVector3FloatData& localScaling, float collisionMargin)
|
||||||
|
{
|
||||||
|
printf("createSphereShape with radius %f\n",radius);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int btBulletDataExtractor::createPlaneShape( const Bullet::btVector3FloatData& planeNormal, float planeConstant, const Bullet::btVector3FloatData& localScaling)
|
||||||
|
{
|
||||||
|
printf("createPlaneShape with normal %f,%f,%f and planeConstant\n",planeNormal.m_floats[0], planeNormal.m_floats[1],planeNormal.m_floats[2],planeConstant);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
GraphicsShape* btBulletDataExtractor::createGraphicsShapeFromWavefrontObj(objLoader* obj)
|
||||||
|
{
|
||||||
|
b3AlignedObjectArray<GraphicsVertex>* vertices = new b3AlignedObjectArray<GraphicsVertex>;
|
||||||
|
{
|
||||||
|
// int numVertices = obj->vertexCount;
|
||||||
|
// int numIndices = 0;
|
||||||
|
b3AlignedObjectArray<int>* indicesPtr = new b3AlignedObjectArray<int>;
|
||||||
|
/*
|
||||||
|
for (int v=0;v<obj->vertexCount;v++)
|
||||||
|
{
|
||||||
|
vtx.xyzw[0] = obj->vertexList[v]->e[0];
|
||||||
|
vtx.xyzw[1] = obj->vertexList[v]->e[1];
|
||||||
|
vtx.xyzw[2] = obj->vertexList[v]->e[2];
|
||||||
|
b3Vector3 n(vtx.xyzw[0],vtx.xyzw[1],vtx.xyzw[2]);
|
||||||
|
if (n.length2()>SIMD_EPSILON)
|
||||||
|
{
|
||||||
|
n.normalize();
|
||||||
|
vtx.normal[0] = n[0];
|
||||||
|
vtx.normal[1] = n[1];
|
||||||
|
vtx.normal[2] = n[2];
|
||||||
|
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
vtx.normal[0] = 0; //todo
|
||||||
|
vtx.normal[1] = 1;
|
||||||
|
vtx.normal[2] = 0;
|
||||||
|
}
|
||||||
|
vtx.uv[0] = 0.5f;vtx.uv[1] = 0.5f; //todo
|
||||||
|
vertices->push_back(vtx);
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
for (int f=0;f<obj->faceCount;f++)
|
||||||
|
{
|
||||||
|
obj_face* face = obj->faceList[f];
|
||||||
|
//b3Vector3 normal(face.m_plane[0],face.m_plane[1],face.m_plane[2]);
|
||||||
|
if (face->vertex_count>=3)
|
||||||
|
{
|
||||||
|
b3Vector3 normal(0,1,0);
|
||||||
|
int vtxBaseIndex = vertices->size();
|
||||||
|
|
||||||
|
if (face->vertex_count<=4)
|
||||||
|
{
|
||||||
|
indicesPtr->push_back(vtxBaseIndex);
|
||||||
|
indicesPtr->push_back(vtxBaseIndex+1);
|
||||||
|
indicesPtr->push_back(vtxBaseIndex+2);
|
||||||
|
|
||||||
|
GraphicsVertex vtx0;
|
||||||
|
vtx0.xyzw[0] = obj->vertexList[face->vertex_index[0]]->e[0];
|
||||||
|
vtx0.xyzw[1] = obj->vertexList[face->vertex_index[0]]->e[1];
|
||||||
|
vtx0.xyzw[2] = obj->vertexList[face->vertex_index[0]]->e[2];
|
||||||
|
vtx0.uv[0] = 0.5;
|
||||||
|
vtx0.uv[1] = 0.5;
|
||||||
|
|
||||||
|
GraphicsVertex vtx1;
|
||||||
|
vtx1.xyzw[0] = obj->vertexList[face->vertex_index[1]]->e[0];
|
||||||
|
vtx1.xyzw[1] = obj->vertexList[face->vertex_index[1]]->e[1];
|
||||||
|
vtx1.xyzw[2] = obj->vertexList[face->vertex_index[1]]->e[2];
|
||||||
|
vtx1.uv[0] = 0.5;
|
||||||
|
vtx1.uv[1] = 0.5;
|
||||||
|
|
||||||
|
GraphicsVertex vtx2;
|
||||||
|
vtx2.xyzw[0] = obj->vertexList[face->vertex_index[2]]->e[0];
|
||||||
|
vtx2.xyzw[1] = obj->vertexList[face->vertex_index[2]]->e[1];
|
||||||
|
vtx2.xyzw[2] = obj->vertexList[face->vertex_index[2]]->e[2];
|
||||||
|
vtx2.uv[0] = 0.5;
|
||||||
|
vtx2.uv[1] = 0.5;
|
||||||
|
|
||||||
|
b3Vector3 v0(vtx0.xyzw[0],vtx0.xyzw[1],vtx0.xyzw[2]);
|
||||||
|
b3Vector3 v1(vtx1.xyzw[0],vtx1.xyzw[1],vtx1.xyzw[2]);
|
||||||
|
b3Vector3 v2(vtx2.xyzw[0],vtx2.xyzw[1],vtx2.xyzw[2]);
|
||||||
|
|
||||||
|
normal = (v1-v0).cross(v2-v0);
|
||||||
|
normal.normalize();
|
||||||
|
vtx0.normal[0] = normal[0];
|
||||||
|
vtx0.normal[1] = normal[1];
|
||||||
|
vtx0.normal[2] = normal[2];
|
||||||
|
vtx1.normal[0] = normal[0];
|
||||||
|
vtx1.normal[1] = normal[1];
|
||||||
|
vtx1.normal[2] = normal[2];
|
||||||
|
vtx2.normal[0] = normal[0];
|
||||||
|
vtx2.normal[1] = normal[1];
|
||||||
|
vtx2.normal[2] = normal[2];
|
||||||
|
vertices->push_back(vtx0);
|
||||||
|
vertices->push_back(vtx1);
|
||||||
|
vertices->push_back(vtx2);
|
||||||
|
}
|
||||||
|
if (face->vertex_count==4)
|
||||||
|
{
|
||||||
|
|
||||||
|
indicesPtr->push_back(vtxBaseIndex);
|
||||||
|
indicesPtr->push_back(vtxBaseIndex+1);
|
||||||
|
indicesPtr->push_back(vtxBaseIndex+2);
|
||||||
|
indicesPtr->push_back(vtxBaseIndex+3);
|
||||||
|
//
|
||||||
|
GraphicsVertex vtx3;
|
||||||
|
vtx3.xyzw[0] = obj->vertexList[face->vertex_index[3]]->e[0];
|
||||||
|
vtx3.xyzw[1] = obj->vertexList[face->vertex_index[3]]->e[1];
|
||||||
|
vtx3.xyzw[2] = obj->vertexList[face->vertex_index[3]]->e[2];
|
||||||
|
vtx3.uv[0] = 0.5;
|
||||||
|
vtx3.uv[1] = 0.5;
|
||||||
|
|
||||||
|
vtx3.normal[0] = normal[0];
|
||||||
|
vtx3.normal[1] = normal[1];
|
||||||
|
vtx3.normal[2] = normal[2];
|
||||||
|
|
||||||
|
vertices->push_back(vtx3);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
GraphicsShape* gfxShape = new GraphicsShape;
|
||||||
|
gfxShape->m_vertices = &vertices->at(0).xyzw[0];
|
||||||
|
gfxShape->m_numvertices = vertices->size();
|
||||||
|
gfxShape->m_indices = &indicesPtr->at(0);
|
||||||
|
gfxShape->m_numIndices = indicesPtr->size();
|
||||||
|
for (int i=0;i<4;i++)
|
||||||
|
gfxShape->m_scaling[i] = 1;//bake the scaling into the vertices
|
||||||
|
return gfxShape;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
GraphicsShape* btBulletDataExtractor::createGraphicsShapeFromConvexHull(const b3Vector3* tmpPoints, int numPoints)
|
||||||
|
{
|
||||||
|
b3ConvexUtility* utilPtr = new b3ConvexUtility();
|
||||||
|
bool merge = true;
|
||||||
|
utilPtr->initializePolyhedralFeatures(tmpPoints,numPoints,merge);
|
||||||
|
|
||||||
|
b3AlignedObjectArray<GraphicsVertex>* vertices = new b3AlignedObjectArray<GraphicsVertex>;
|
||||||
|
{
|
||||||
|
int numVertices = utilPtr->m_vertices.size();
|
||||||
|
int numIndices = 0;
|
||||||
|
b3AlignedObjectArray<int>* indicesPtr = new b3AlignedObjectArray<int>;
|
||||||
|
for (int f=0;f<utilPtr->m_faces.size();f++)
|
||||||
|
{
|
||||||
|
const btMyFace& face = utilPtr->m_faces[f];
|
||||||
|
b3Vector3 normal(face.m_plane[0],face.m_plane[1],face.m_plane[2]);
|
||||||
|
if (face.m_indices.size()>2)
|
||||||
|
{
|
||||||
|
|
||||||
|
GraphicsVertex vtx;
|
||||||
|
const b3Vector3& orgVertex = utilPtr->m_vertices[face.m_indices[0]];
|
||||||
|
vtx.xyzw[0] = orgVertex[0];vtx.xyzw[1] = orgVertex[1];vtx.xyzw[2] = orgVertex[2];vtx.xyzw[3] = 0.f;
|
||||||
|
vtx.normal[0] = normal[0];vtx.normal[1] = normal[1];vtx.normal[2] = normal[2];
|
||||||
|
vtx.uv[0] = 0.5f;vtx.uv[1] = 0.5f;
|
||||||
|
int newvtxindex0 = vertices->size();
|
||||||
|
vertices->push_back(vtx);
|
||||||
|
|
||||||
|
for (int j=1;j<face.m_indices.size()-1;j++)
|
||||||
|
{
|
||||||
|
indicesPtr->push_back(newvtxindex0);
|
||||||
|
{
|
||||||
|
GraphicsVertex vtx;
|
||||||
|
const b3Vector3& orgVertex = utilPtr->m_vertices[face.m_indices[j]];
|
||||||
|
vtx.xyzw[0] = orgVertex[0];vtx.xyzw[1] = orgVertex[1];vtx.xyzw[2] = orgVertex[2];vtx.xyzw[3] = 0.f;
|
||||||
|
vtx.normal[0] = normal[0];vtx.normal[1] = normal[1];vtx.normal[2] = normal[2];
|
||||||
|
vtx.uv[0] = 0.5f;vtx.uv[1] = 0.5f;
|
||||||
|
int newvtxindexj = vertices->size();
|
||||||
|
vertices->push_back(vtx);
|
||||||
|
indicesPtr->push_back(newvtxindexj);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
GraphicsVertex vtx;
|
||||||
|
const b3Vector3& orgVertex = utilPtr->m_vertices[face.m_indices[j+1]];
|
||||||
|
vtx.xyzw[0] = orgVertex[0];vtx.xyzw[1] = orgVertex[1];vtx.xyzw[2] = orgVertex[2];vtx.xyzw[3] = 0.f;
|
||||||
|
vtx.normal[0] = normal[0];vtx.normal[1] = normal[1];vtx.normal[2] = normal[2];
|
||||||
|
vtx.uv[0] = 0.5f;vtx.uv[1] = 0.5f;
|
||||||
|
int newvtxindexj1 = vertices->size();
|
||||||
|
vertices->push_back(vtx);
|
||||||
|
indicesPtr->push_back(newvtxindexj1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
GraphicsShape* gfxShape = new GraphicsShape;
|
||||||
|
gfxShape->m_vertices = &vertices->at(0).xyzw[0];
|
||||||
|
gfxShape->m_numvertices = vertices->size();
|
||||||
|
gfxShape->m_indices = &indicesPtr->at(0);
|
||||||
|
gfxShape->m_numIndices = indicesPtr->size();
|
||||||
|
for (int i=0;i<4;i++)
|
||||||
|
gfxShape->m_scaling[i] = 1;//bake the scaling into the vertices
|
||||||
|
return gfxShape;
|
||||||
|
}
|
||||||
|
}
|
||||||
53
demo/gpudemo/rigidbody/BulletDataExtractor.h
Normal file
53
demo/gpudemo/rigidbody/BulletDataExtractor.h
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
#ifndef BULLET_DATA_EXTRACTOR_H
|
||||||
|
#define BULLET_DATA_EXTRACTOR_H
|
||||||
|
|
||||||
|
|
||||||
|
#include "Bullet3Serialize/Bullet2FileLoader/autogenerated/bullet2.h"
|
||||||
|
#include "Bullet3Common/b3AlignedObjectArray.h"
|
||||||
|
#include "Bullet3Common/b3Vector3.h"
|
||||||
|
|
||||||
|
class GLInstancingRenderer;
|
||||||
|
class b3GpuRigidBodyPipeline;
|
||||||
|
class b3GpuNarrowPhase;
|
||||||
|
|
||||||
|
void createScene(GLInstancingRenderer& renderer,b3GpuNarrowPhase& np, b3GpuRigidBodyPipeline& rbWorld, const char* fileName);
|
||||||
|
|
||||||
|
namespace bParse
|
||||||
|
{
|
||||||
|
class btBulletFile;
|
||||||
|
};
|
||||||
|
|
||||||
|
class btBulletDataExtractor
|
||||||
|
{
|
||||||
|
GLInstancingRenderer& m_renderer;
|
||||||
|
b3GpuNarrowPhase& m_np;
|
||||||
|
b3GpuRigidBodyPipeline& m_rbPipeline;
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
b3AlignedObjectArray<struct InstanceGroup*> m_instanceGroups;
|
||||||
|
b3AlignedObjectArray<struct GraphicsShape*> m_graphicsShapes;
|
||||||
|
|
||||||
|
btBulletDataExtractor(GLInstancingRenderer& renderer, b3GpuNarrowPhase& np, b3GpuRigidBodyPipeline& rbPipeline);
|
||||||
|
|
||||||
|
virtual ~btBulletDataExtractor();
|
||||||
|
|
||||||
|
virtual void convertAllObjects(bParse::btBulletFile* bulletFile);
|
||||||
|
|
||||||
|
//return -1 for invalid
|
||||||
|
virtual int convertCollisionShape( Bullet::btCollisionShapeData* shapeData );
|
||||||
|
|
||||||
|
virtual int createPlaneShape( const Bullet::btVector3FloatData& planeNormal, float planeConstant, const Bullet::btVector3FloatData& localScaling);
|
||||||
|
|
||||||
|
virtual int createBoxShape( const Bullet::btVector3FloatData& halfDimensions, const Bullet::btVector3FloatData& localScaling, float collisionMargin);
|
||||||
|
|
||||||
|
virtual int createSphereShape( float radius, const Bullet::btVector3FloatData& localScaling, float collisionMargin);
|
||||||
|
|
||||||
|
static GraphicsShape* createGraphicsShapeFromConvexHull(const b3Vector3* tmpPoints, int numPoints);
|
||||||
|
static GraphicsShape* createGraphicsShapeFromWavefrontObj(class objLoader* obj);
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif //BULLET_DATA_EXTRACTOR_H
|
||||||
@@ -17,7 +17,7 @@ subject to the following restrictions:
|
|||||||
#include "b3Solver.h"
|
#include "b3Solver.h"
|
||||||
|
|
||||||
///useNewBatchingKernel is a rewritten kernel using just a single thread of the warp, for experiments
|
///useNewBatchingKernel is a rewritten kernel using just a single thread of the warp, for experiments
|
||||||
bool useNewBatchingKernel = false;
|
bool useNewBatchingKernel = true;
|
||||||
|
|
||||||
#define SOLVER_SETUP_KERNEL_PATH "opencl/gpu_rigidbody/kernels/solverSetup.cl"
|
#define SOLVER_SETUP_KERNEL_PATH "opencl/gpu_rigidbody/kernels/solverSetup.cl"
|
||||||
#define SOLVER_SETUP2_KERNEL_PATH "opencl/gpu_rigidbody/kernels/solverSetup2.cl"
|
#define SOLVER_SETUP2_KERNEL_PATH "opencl/gpu_rigidbody/kernels/solverSetup2.cl"
|
||||||
|
|||||||
@@ -1,277 +0,0 @@
|
|||||||
#include "btGpuDynamicsWorld.h"
|
|
||||||
#include "gpu_rigidbody/host/btRigidBody.h"
|
|
||||||
|
|
||||||
|
|
||||||
#include "BulletCollision/CollisionShapes/btPolyhedralConvexShape.h"
|
|
||||||
#include "BulletCollision/CollisionShapes/btBvhTriangleMeshShape.h"
|
|
||||||
#include "BulletCollision/CollisionShapes/btCompoundShape.h"
|
|
||||||
#include "BulletCollision/CollisionShapes/btSphereShape.h"
|
|
||||||
#include "BulletCollision/CollisionShapes/btStaticPlaneShape.h"
|
|
||||||
|
|
||||||
#include "BulletCommon/btQuickprof.h"
|
|
||||||
|
|
||||||
#include "gpu_rigidbody/host/btGpuRigidBodyPipeline.h"
|
|
||||||
|
|
||||||
#include "gpu_rigidbody/host/btGpuRigidBodyPipeline.h"
|
|
||||||
#include "gpu_rigidbody/host/btGpuNarrowPhase.h"
|
|
||||||
|
|
||||||
#ifdef _WIN32
|
|
||||||
#include <wiNdOws.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
btGpuDynamicsWorld::btGpuDynamicsWorld(btGpuSapBroadphase*bp, btGpuNarrowPhase* np, btGpuRigidBodyPipeline* rb)
|
|
||||||
:m_gravity(0,-10,0),
|
|
||||||
m_once(true)
|
|
||||||
{
|
|
||||||
m_bp = bp;
|
|
||||||
m_np=np;
|
|
||||||
m_rigidBodyPipeline = rb;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
btGpuDynamicsWorld::~btGpuDynamicsWorld()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int btGpuDynamicsWorld::stepSimulation( btScalar timeStep,int maxSubSteps, btScalar fixedTimeStep)
|
|
||||||
{
|
|
||||||
#ifndef BT_NO_PROFILE
|
|
||||||
// CProfileManager::Reset();
|
|
||||||
#endif //BT_NO_PROFILE
|
|
||||||
|
|
||||||
BT_PROFILE("stepSimulation");
|
|
||||||
|
|
||||||
m_rigidBodyPipeline->stepSimulation(timeStep);
|
|
||||||
|
|
||||||
{
|
|
||||||
BT_PROFILE("scatter transforms into rigidbody (CPU)");
|
|
||||||
for (int i=0;i<this->m_collisionObjects.size();i++)
|
|
||||||
{
|
|
||||||
btVector3 pos;
|
|
||||||
btQuaternion orn;
|
|
||||||
cl_mem gpuBodies = m_rigidBodyPipeline->getBodyBuffer();
|
|
||||||
btTransform newTrans;
|
|
||||||
newTrans.setOrigin(pos);
|
|
||||||
newTrans.setRotation(orn);
|
|
||||||
this->m_collisionObjects[i]->setWorldTransform(newTrans);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef BT_NO_PROFILE
|
|
||||||
//CProfileManager::Increment_Frame_Counter();
|
|
||||||
#endif //BT_NO_PROFILE
|
|
||||||
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void btGpuDynamicsWorld::setGravity(const btVector3& gravity)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
int btGpuDynamicsWorld::findOrRegisterCollisionShape(const btCollisionShape* colShape)
|
|
||||||
{
|
|
||||||
int index = m_uniqueShapes.findLinearSearch(colShape);
|
|
||||||
if (index==m_uniqueShapes.size())
|
|
||||||
{
|
|
||||||
if (colShape->isPolyhedral())
|
|
||||||
{
|
|
||||||
m_uniqueShapes.push_back(colShape);
|
|
||||||
|
|
||||||
btPolyhedralConvexShape* convex = (btPolyhedralConvexShape*)colShape;
|
|
||||||
int numVertices=convex->getNumVertices();
|
|
||||||
|
|
||||||
int strideInBytes=sizeof(btVector3);
|
|
||||||
btAlignedObjectArray<btVector3> tmpVertices;
|
|
||||||
tmpVertices.resize(numVertices);
|
|
||||||
for (int i=0;i<numVertices;i++)
|
|
||||||
convex->getVertex(i,tmpVertices[i]);
|
|
||||||
const float scaling[4]={1,1,1,1};
|
|
||||||
bool noHeightField=true;
|
|
||||||
|
|
||||||
int gpuShapeIndex = m_np->registerConvexHullShape(&tmpVertices[0].getX(), strideInBytes, numVertices, scaling);
|
|
||||||
m_uniqueShapeMapping.push_back(gpuShapeIndex);
|
|
||||||
} else
|
|
||||||
{
|
|
||||||
if (colShape->getShapeType()==TRIANGLE_MESH_SHAPE_PROXYTYPE)
|
|
||||||
{
|
|
||||||
m_uniqueShapes.push_back(colShape);
|
|
||||||
|
|
||||||
btBvhTriangleMeshShape* trimesh = (btBvhTriangleMeshShape*) colShape;
|
|
||||||
btStridingMeshInterface* meshInterface = trimesh->getMeshInterface();
|
|
||||||
btAlignedObjectArray<btVector3> vertices;
|
|
||||||
btAlignedObjectArray<int> indices;
|
|
||||||
|
|
||||||
btVector3 trimeshScaling(1,1,1);
|
|
||||||
for (int partId=0;partId<meshInterface->getNumSubParts();partId++)
|
|
||||||
{
|
|
||||||
|
|
||||||
const unsigned char *vertexbase = 0;
|
|
||||||
int numverts = 0;
|
|
||||||
PHY_ScalarType type = PHY_INTEGER;
|
|
||||||
int stride = 0;
|
|
||||||
const unsigned char *indexbase = 0;
|
|
||||||
int indexstride = 0;
|
|
||||||
int numfaces = 0;
|
|
||||||
PHY_ScalarType indicestype = PHY_INTEGER;
|
|
||||||
//PHY_ScalarType indexType=0;
|
|
||||||
|
|
||||||
btVector3 triangleVerts[3];
|
|
||||||
meshInterface->getLockedReadOnlyVertexIndexBase(&vertexbase,numverts, type,stride,&indexbase,indexstride,numfaces,indicestype,partId);
|
|
||||||
btVector3 aabbMin,aabbMax;
|
|
||||||
|
|
||||||
for (int triangleIndex = 0 ; triangleIndex < numfaces;triangleIndex++)
|
|
||||||
{
|
|
||||||
unsigned int* gfxbase = (unsigned int*)(indexbase+triangleIndex*indexstride);
|
|
||||||
|
|
||||||
for (int j=2;j>=0;j--)
|
|
||||||
{
|
|
||||||
|
|
||||||
int graphicsindex = indicestype==PHY_SHORT?((unsigned short*)gfxbase)[j]:gfxbase[j];
|
|
||||||
if (type == PHY_FLOAT)
|
|
||||||
{
|
|
||||||
float* graphicsbase = (float*)(vertexbase+graphicsindex*stride);
|
|
||||||
triangleVerts[j] = btVector3(
|
|
||||||
graphicsbase[0]*trimeshScaling.getX(),
|
|
||||||
graphicsbase[1]*trimeshScaling.getY(),
|
|
||||||
graphicsbase[2]*trimeshScaling.getZ());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
double* graphicsbase = (double*)(vertexbase+graphicsindex*stride);
|
|
||||||
triangleVerts[j] = btVector3( btScalar(graphicsbase[0]*trimeshScaling.getX()),
|
|
||||||
btScalar(graphicsbase[1]*trimeshScaling.getY()),
|
|
||||||
btScalar(graphicsbase[2]*trimeshScaling.getZ()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
vertices.push_back(triangleVerts[0]);
|
|
||||||
vertices.push_back(triangleVerts[1]);
|
|
||||||
vertices.push_back(triangleVerts[2]);
|
|
||||||
indices.push_back(indices.size());
|
|
||||||
indices.push_back(indices.size());
|
|
||||||
indices.push_back(indices.size());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//GraphicsShape* gfxShape = 0;//btBulletDataExtractor::createGraphicsShapeFromWavefrontObj(objData);
|
|
||||||
|
|
||||||
//GraphicsShape* gfxShape = btBulletDataExtractor::createGraphicsShapeFromConvexHull(&sUnitSpherePoints[0],MY_UNITSPHERE_POINTS);
|
|
||||||
float meshScaling[4] = {1,1,1,1};
|
|
||||||
//int shapeIndex = renderer.registerShape(gfxShape->m_vertices,gfxShape->m_numvertices,gfxShape->m_indices,gfxShape->m_numIndices);
|
|
||||||
float groundPos[4] = {0,0,0,0};
|
|
||||||
|
|
||||||
//renderer.registerGraphicsInstance(shapeIndex,groundPos,rotOrn,color,meshScaling);
|
|
||||||
if (vertices.size() && indices.size())
|
|
||||||
{
|
|
||||||
int gpuShapeIndex = m_np->registerConcaveMesh(&vertices,&indices, meshScaling);
|
|
||||||
m_uniqueShapeMapping.push_back(gpuShapeIndex);
|
|
||||||
} else
|
|
||||||
{
|
|
||||||
printf("Error: no vertices in mesh in btGpuDynamicsWorld::addRigidBody\n");
|
|
||||||
index = -1;
|
|
||||||
btAssert(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
} else
|
|
||||||
{
|
|
||||||
if (colShape->getShapeType()==COMPOUND_SHAPE_PROXYTYPE)
|
|
||||||
{
|
|
||||||
|
|
||||||
btCompoundShape* compound = (btCompoundShape*) colShape;
|
|
||||||
btAlignedObjectArray<btGpuChildShape> childShapes;
|
|
||||||
|
|
||||||
for (int i=0;i<compound->getNumChildShapes();i++)
|
|
||||||
{
|
|
||||||
//for now, only support polyhedral child shapes
|
|
||||||
btAssert(compound->getChildShape(i)->isPolyhedral());
|
|
||||||
btGpuChildShape child;
|
|
||||||
child.m_shapeIndex = findOrRegisterCollisionShape(compound->getChildShape(i));
|
|
||||||
btVector3 pos = compound->getChildTransform(i).getOrigin();
|
|
||||||
btQuaternion orn = compound->getChildTransform(i).getRotation();
|
|
||||||
for (int v=0;v<4;v++)
|
|
||||||
{
|
|
||||||
child.m_childPosition[v] = pos[v];
|
|
||||||
child.m_childOrientation[v] = orn[v];
|
|
||||||
}
|
|
||||||
childShapes.push_back(child);
|
|
||||||
}
|
|
||||||
index = m_uniqueShapes.size();
|
|
||||||
m_uniqueShapes.push_back(colShape);
|
|
||||||
|
|
||||||
int gpuShapeIndex = m_np->registerCompoundShape(&childShapes);
|
|
||||||
m_uniqueShapeMapping.push_back(gpuShapeIndex);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*printf("Error: unsupported compound type (%d) in btGpuDynamicsWorld::addRigidBody\n",colShape->getShapeType());
|
|
||||||
index = -1;
|
|
||||||
btAssert(0);
|
|
||||||
*/
|
|
||||||
} else
|
|
||||||
{
|
|
||||||
if (colShape->getShapeType()==SPHERE_SHAPE_PROXYTYPE)
|
|
||||||
{
|
|
||||||
m_uniqueShapes.push_back(colShape);
|
|
||||||
btSphereShape* sphere = (btSphereShape*)colShape;
|
|
||||||
|
|
||||||
int gpuShapeIndex = m_np->registerSphereShape(sphere->getRadius());
|
|
||||||
m_uniqueShapeMapping.push_back(gpuShapeIndex);
|
|
||||||
} else
|
|
||||||
{
|
|
||||||
if (colShape->getShapeType()==STATIC_PLANE_PROXYTYPE)
|
|
||||||
{
|
|
||||||
m_uniqueShapes.push_back(colShape);
|
|
||||||
btStaticPlaneShape* plane = (btStaticPlaneShape*)colShape;
|
|
||||||
|
|
||||||
int gpuShapeIndex = m_np->registerPlaneShape(plane->getPlaneNormal(),plane->getPlaneConstant());
|
|
||||||
m_uniqueShapeMapping.push_back(gpuShapeIndex);
|
|
||||||
} else
|
|
||||||
{
|
|
||||||
printf("Error: unsupported shape type (%d) in btGpuDynamicsWorld::addRigidBody\n",colShape->getShapeType());
|
|
||||||
index = -1;
|
|
||||||
btAssert(0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
return index;
|
|
||||||
}
|
|
||||||
|
|
||||||
void btGpuDynamicsWorld::addRigidBody(btRigidBody* body)
|
|
||||||
{
|
|
||||||
|
|
||||||
body->setMotionState(0);
|
|
||||||
|
|
||||||
|
|
||||||
int index = findOrRegisterCollisionShape(body->getCollisionShape());
|
|
||||||
|
|
||||||
if (index>=0)
|
|
||||||
{
|
|
||||||
int gpuShapeIndex= m_uniqueShapeMapping[index];
|
|
||||||
float mass = body->getInvMass() ? 1.f/body->getInvMass() : 0.f;
|
|
||||||
btVector3 pos = body->getWorldTransform().getOrigin();
|
|
||||||
btQuaternion orn = body->getWorldTransform().getRotation();
|
|
||||||
|
|
||||||
m_rigidBodyPipeline->registerPhysicsInstance(mass,&pos.getX(),&orn.getX(),gpuShapeIndex,m_collisionObjects.size());
|
|
||||||
|
|
||||||
m_collisionObjects.push_back(body);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void btGpuDynamicsWorld::removeCollisionObject(btCollisionObject* colObj)
|
|
||||||
{
|
|
||||||
btAssert(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,89 +0,0 @@
|
|||||||
#ifndef BT_GPU_DYNAMICS_WORLD_H
|
|
||||||
#define BT_GPU_DYNAMICS_WORLD_H
|
|
||||||
|
|
||||||
class btVector3;
|
|
||||||
class btRigidBody;
|
|
||||||
class btCollisionObject;
|
|
||||||
struct btGpuInternalData;//use this struct to avoid 'leaking' all OpenCL headers into clients code base
|
|
||||||
|
|
||||||
#include "BulletCommon/btAlignedObjectArray.h"
|
|
||||||
//#include "BulletDynamics/Dynamics/btDynamicsWorld.h"
|
|
||||||
#include "BulletCommon/btTransform.h"
|
|
||||||
|
|
||||||
class btGpuDynamicsWorld
|
|
||||||
{
|
|
||||||
|
|
||||||
btAlignedObjectArray<const class btCollisionShape*> m_uniqueShapes;
|
|
||||||
btAlignedObjectArray<int> m_uniqueShapeMapping;
|
|
||||||
|
|
||||||
btAlignedObjectArray<btCollisionObject*> m_collisionObjects;
|
|
||||||
|
|
||||||
class btGpuSapBroadphase* m_bp;
|
|
||||||
class btGpuNarrowPhase* m_np;
|
|
||||||
class btGpuRigidBodyPipeline* m_rigidBodyPipeline;
|
|
||||||
|
|
||||||
|
|
||||||
btVector3 m_gravity;
|
|
||||||
bool m_once;
|
|
||||||
|
|
||||||
bool initOpenCL(int preferredDeviceIndex, int preferredPlatformIndex, bool useInterop);
|
|
||||||
void exitOpenCL();
|
|
||||||
|
|
||||||
int findOrRegisterCollisionShape(const btCollisionShape* colShape);
|
|
||||||
|
|
||||||
|
|
||||||
public:
|
|
||||||
btGpuDynamicsWorld(btGpuSapBroadphase*bp, btGpuNarrowPhase* np, btGpuRigidBodyPipeline* rb);
|
|
||||||
|
|
||||||
virtual ~btGpuDynamicsWorld();
|
|
||||||
|
|
||||||
virtual int stepSimulation( btScalar timeStep,int maxSubSteps=1, btScalar fixedTimeStep=btScalar(1.)/btScalar(60.));
|
|
||||||
|
|
||||||
virtual void synchronizeMotionStates()
|
|
||||||
{
|
|
||||||
btAssert(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
void debugDrawWorld() {}
|
|
||||||
|
|
||||||
void setGravity(const btVector3& gravity);
|
|
||||||
|
|
||||||
void addRigidBody(btRigidBody* body);
|
|
||||||
|
|
||||||
void removeCollisionObject(btCollisionObject* colObj);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
btAlignedObjectArray<class btCollisionObject*>& getCollisionObjectArray();
|
|
||||||
|
|
||||||
const btAlignedObjectArray<class btCollisionObject*>& getCollisionObjectArray() const;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
btVector3 getGravity () const
|
|
||||||
{
|
|
||||||
return m_gravity;
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual void addRigidBody(btRigidBody* body, short group, short mask)
|
|
||||||
{
|
|
||||||
addRigidBody(body);
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual void removeRigidBody(btRigidBody* body)
|
|
||||||
{
|
|
||||||
btAssert(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
virtual void clearForces()
|
|
||||||
{
|
|
||||||
btAssert(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
#endif //BT_GPU_DYNAMICS_WORLD_H
|
|
||||||
1053
src/Bullet3Serialize/Bullet2FileLoader/autogenerated/bullet2.h
Normal file
1053
src/Bullet3Serialize/Bullet2FileLoader/autogenerated/bullet2.h
Normal file
File diff suppressed because it is too large
Load Diff
75
src/Bullet3Serialize/Bullet2FileLoader/bChunk.cpp
Normal file
75
src/Bullet3Serialize/Bullet2FileLoader/bChunk.cpp
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
/*
|
||||||
|
bParse
|
||||||
|
Copyright (c) 2006-2009 Charlie C & Erwin Coumans http://gamekit.googlecode.com
|
||||||
|
|
||||||
|
This software is provided 'as-is', without any express or implied warranty.
|
||||||
|
In no event will the authors be held liable for any damages arising from the use of this software.
|
||||||
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
|
including commercial applications, and to alter it and redistribute it freely,
|
||||||
|
subject to the following restrictions:
|
||||||
|
|
||||||
|
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
||||||
|
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
|
||||||
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "bChunk.h"
|
||||||
|
#include "bDefines.h"
|
||||||
|
#include "bFile.h"
|
||||||
|
|
||||||
|
#if !defined( __CELLOS_LV2__) && !defined(__MWERKS__)
|
||||||
|
#include <memory.h>
|
||||||
|
#endif
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
|
||||||
|
using namespace bParse;
|
||||||
|
|
||||||
|
|
||||||
|
// ----------------------------------------------------- //
|
||||||
|
short ChunkUtils::swapShort(short sht)
|
||||||
|
{
|
||||||
|
SWITCH_SHORT(sht);
|
||||||
|
return sht;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------- //
|
||||||
|
int ChunkUtils::swapInt(int inte)
|
||||||
|
{
|
||||||
|
SWITCH_INT(inte);
|
||||||
|
return inte;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------- //
|
||||||
|
long64 ChunkUtils::swapLong64(long64 lng)
|
||||||
|
{
|
||||||
|
SWITCH_LONGINT(lng);
|
||||||
|
return lng;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------- //
|
||||||
|
int ChunkUtils::getOffset(int flags)
|
||||||
|
{
|
||||||
|
// if the file is saved in a
|
||||||
|
// different format, get the
|
||||||
|
// file's chunk size
|
||||||
|
int res = CHUNK_HEADER_LEN;
|
||||||
|
|
||||||
|
if (VOID_IS_8)
|
||||||
|
{
|
||||||
|
if (flags &FD_BITS_VARIES)
|
||||||
|
res = sizeof(bChunkPtr4);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (flags &FD_BITS_VARIES)
|
||||||
|
res = sizeof(bChunkPtr8);
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//eof
|
||||||
92
src/Bullet3Serialize/Bullet2FileLoader/bChunk.h
Normal file
92
src/Bullet3Serialize/Bullet2FileLoader/bChunk.h
Normal file
@@ -0,0 +1,92 @@
|
|||||||
|
/*
|
||||||
|
bParse
|
||||||
|
Copyright (c) 2006-2009 Charlie C & Erwin Coumans http://gamekit.googlecode.com
|
||||||
|
|
||||||
|
This software is provided 'as-is', without any express or implied warranty.
|
||||||
|
In no event will the authors be held liable for any damages arising from the use of this software.
|
||||||
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
|
including commercial applications, and to alter it and redistribute it freely,
|
||||||
|
subject to the following restrictions:
|
||||||
|
|
||||||
|
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
||||||
|
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
|
||||||
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __BCHUNK_H__
|
||||||
|
#define __BCHUNK_H__
|
||||||
|
|
||||||
|
#if defined (_WIN32) && ! defined (__MINGW32__)
|
||||||
|
#define long64 __int64
|
||||||
|
#elif defined (__MINGW32__)
|
||||||
|
#include <stdint.h>
|
||||||
|
#define long64 int64_t
|
||||||
|
#else
|
||||||
|
#define long64 long long
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
namespace bParse {
|
||||||
|
|
||||||
|
|
||||||
|
// ----------------------------------------------------- //
|
||||||
|
class bChunkPtr4
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
bChunkPtr4(){}
|
||||||
|
int code;
|
||||||
|
int len;
|
||||||
|
union
|
||||||
|
{
|
||||||
|
int m_uniqueInt;
|
||||||
|
};
|
||||||
|
int dna_nr;
|
||||||
|
int nr;
|
||||||
|
};
|
||||||
|
|
||||||
|
// ----------------------------------------------------- //
|
||||||
|
class bChunkPtr8
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
bChunkPtr8(){}
|
||||||
|
int code, len;
|
||||||
|
union
|
||||||
|
{
|
||||||
|
long64 oldPrev;
|
||||||
|
int m_uniqueInts[2];
|
||||||
|
};
|
||||||
|
int dna_nr, nr;
|
||||||
|
};
|
||||||
|
|
||||||
|
// ----------------------------------------------------- //
|
||||||
|
class bChunkInd
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
bChunkInd(){}
|
||||||
|
int code, len;
|
||||||
|
void *oldPtr;
|
||||||
|
int dna_nr, nr;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// ----------------------------------------------------- //
|
||||||
|
class ChunkUtils
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
// file chunk offset
|
||||||
|
static int getOffset(int flags);
|
||||||
|
|
||||||
|
// endian utils
|
||||||
|
static short swapShort(short sht);
|
||||||
|
static int swapInt(int inte);
|
||||||
|
static long64 swapLong64(long64 lng);
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
const int CHUNK_HEADER_LEN = ((sizeof(bChunkInd)));
|
||||||
|
const bool VOID_IS_8 = ((sizeof(void*)==8));
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif//__BCHUNK_H__
|
||||||
39
src/Bullet3Serialize/Bullet2FileLoader/bCommon.h
Normal file
39
src/Bullet3Serialize/Bullet2FileLoader/bCommon.h
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
/*
|
||||||
|
bParse
|
||||||
|
Copyright (c) 2006-2009 Charlie C & Erwin Coumans http://gamekit.googlecode.com
|
||||||
|
|
||||||
|
This software is provided 'as-is', without any express or implied warranty.
|
||||||
|
In no event will the authors be held liable for any damages arising from the use of this software.
|
||||||
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
|
including commercial applications, and to alter it and redistribute it freely,
|
||||||
|
subject to the following restrictions:
|
||||||
|
|
||||||
|
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
||||||
|
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
|
||||||
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __BCOMMON_H__
|
||||||
|
#define __BCOMMON_H__
|
||||||
|
|
||||||
|
|
||||||
|
#include <assert.h>
|
||||||
|
//#include "bLog.h"
|
||||||
|
#include "Bullet3Common/b3AlignedObjectArray.h"
|
||||||
|
#include "Bullet3Common/b3HashMap.h"
|
||||||
|
|
||||||
|
namespace bParse {
|
||||||
|
|
||||||
|
class bMain;
|
||||||
|
class bFileData;
|
||||||
|
class bFile;
|
||||||
|
class bDNA;
|
||||||
|
|
||||||
|
// delete void* undefined
|
||||||
|
typedef struct bStructHandle {int unused;}bStructHandle;
|
||||||
|
typedef b3AlignedObjectArray<bStructHandle*> bListBasePtr;
|
||||||
|
typedef b3HashMap<btHashPtr, bStructHandle*> bPtrMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#endif//__BCOMMON_H__
|
||||||
644
src/Bullet3Serialize/Bullet2FileLoader/bDNA.cpp
Normal file
644
src/Bullet3Serialize/Bullet2FileLoader/bDNA.cpp
Normal file
@@ -0,0 +1,644 @@
|
|||||||
|
/*
|
||||||
|
bParse
|
||||||
|
Copyright (c) 2006-2009 Charlie C & Erwin Coumans http://gamekit.googlecode.com
|
||||||
|
|
||||||
|
This software is provided 'as-is', without any express or implied warranty.
|
||||||
|
In no event will the authors be held liable for any damages arising from the use of this software.
|
||||||
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
|
including commercial applications, and to alter it and redistribute it freely,
|
||||||
|
subject to the following restrictions:
|
||||||
|
|
||||||
|
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
||||||
|
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
|
||||||
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
|
*/
|
||||||
|
#include <assert.h>
|
||||||
|
|
||||||
|
#include "bDNA.h"
|
||||||
|
#include "bChunk.h"
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
//this define will force traversal of structures, to check backward (and forward) compatibility
|
||||||
|
//#define TEST_BACKWARD_FORWARD_COMPATIBILITY
|
||||||
|
|
||||||
|
|
||||||
|
using namespace bParse;
|
||||||
|
|
||||||
|
|
||||||
|
// ----------------------------------------------------- //
|
||||||
|
bDNA::bDNA()
|
||||||
|
: mPtrLen(0)
|
||||||
|
{
|
||||||
|
// --
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------- //
|
||||||
|
bDNA::~bDNA()
|
||||||
|
{
|
||||||
|
// --
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------- //
|
||||||
|
bool bDNA::lessThan(bDNA *file)
|
||||||
|
{
|
||||||
|
return ( m_Names.size() < file->m_Names.size());
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------- //
|
||||||
|
char *bDNA::getName(int ind)
|
||||||
|
{
|
||||||
|
assert(ind <= (int)m_Names.size());
|
||||||
|
return m_Names[ind].m_name;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ----------------------------------------------------- //
|
||||||
|
char *bDNA::getType(int ind)
|
||||||
|
{
|
||||||
|
assert(ind<= (int)mTypes.size());
|
||||||
|
return mTypes[ind];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ----------------------------------------------------- //
|
||||||
|
short *bDNA::getStruct(int ind)
|
||||||
|
{
|
||||||
|
assert(ind <= (int)mStructs.size());
|
||||||
|
return mStructs[ind];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ----------------------------------------------------- //
|
||||||
|
short bDNA::getLength(int ind)
|
||||||
|
{
|
||||||
|
assert(ind <= (int)mTlens.size());
|
||||||
|
return mTlens[ind];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ----------------------------------------------------- //
|
||||||
|
int bDNA::getReverseType(short type)
|
||||||
|
{
|
||||||
|
|
||||||
|
int* intPtr = mStructReverse.find(type);
|
||||||
|
if (intPtr)
|
||||||
|
return *intPtr;
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------- //
|
||||||
|
int bDNA::getReverseType(const char *type)
|
||||||
|
{
|
||||||
|
|
||||||
|
btHashString key(type);
|
||||||
|
int* valuePtr = mTypeLookup.find(key);
|
||||||
|
if (valuePtr)
|
||||||
|
return *valuePtr;
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------- //
|
||||||
|
int bDNA::getNumStructs()
|
||||||
|
{
|
||||||
|
return (int)mStructs.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------- //
|
||||||
|
bool bDNA::flagNotEqual(int dna_nr)
|
||||||
|
{
|
||||||
|
assert(dna_nr <= (int)mCMPFlags.size());
|
||||||
|
return mCMPFlags[dna_nr] == FDF_STRUCT_NEQU;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------- //
|
||||||
|
bool bDNA::flagEqual(int dna_nr)
|
||||||
|
{
|
||||||
|
assert(dna_nr <= (int)mCMPFlags.size());
|
||||||
|
int flag = mCMPFlags[dna_nr];
|
||||||
|
return flag == FDF_STRUCT_EQU;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------- //
|
||||||
|
bool bDNA::flagNone(int dna_nr)
|
||||||
|
{
|
||||||
|
assert(dna_nr <= (int)mCMPFlags.size());
|
||||||
|
return mCMPFlags[dna_nr] == FDF_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------- //
|
||||||
|
int bDNA::getPointerSize()
|
||||||
|
{
|
||||||
|
return mPtrLen;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------- //
|
||||||
|
void bDNA::initRecurseCmpFlags(int iter)
|
||||||
|
{
|
||||||
|
// iter is FDF_STRUCT_NEQU
|
||||||
|
|
||||||
|
short *oldStrc = mStructs[iter];
|
||||||
|
short type = oldStrc[0];
|
||||||
|
|
||||||
|
for (int i=0; i<(int)mStructs.size(); i++)
|
||||||
|
{
|
||||||
|
if (i != iter && mCMPFlags[i] == FDF_STRUCT_EQU )
|
||||||
|
{
|
||||||
|
short *curStruct = mStructs[i];
|
||||||
|
int eleLen = curStruct[1];
|
||||||
|
curStruct+=2;
|
||||||
|
|
||||||
|
for (int j=0; j<eleLen; j++, curStruct+=2)
|
||||||
|
{
|
||||||
|
if (curStruct[0] == type)
|
||||||
|
{
|
||||||
|
//char *name = m_Names[curStruct[1]].m_name;
|
||||||
|
//if (name[0] != '*')
|
||||||
|
if (m_Names[curStruct[1]].m_isPointer)
|
||||||
|
{
|
||||||
|
mCMPFlags[i] = FDF_STRUCT_NEQU;
|
||||||
|
initRecurseCmpFlags(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------- //
|
||||||
|
void bDNA::initCmpFlags(bDNA *memDNA)
|
||||||
|
{
|
||||||
|
|
||||||
|
// compare the file to memory
|
||||||
|
// this ptr should be the file data
|
||||||
|
|
||||||
|
|
||||||
|
assert(!m_Names.size() == 0 && "SDNA empty!");
|
||||||
|
mCMPFlags.resize(mStructs.size(), FDF_NONE);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int i;
|
||||||
|
for ( i=0; i<(int)mStructs.size(); i++)
|
||||||
|
{
|
||||||
|
short *oldStruct = mStructs[i];
|
||||||
|
|
||||||
|
int oldLookup = getReverseType(oldStruct[0]);
|
||||||
|
if (oldLookup == -1)
|
||||||
|
{
|
||||||
|
mCMPFlags[i] = FDF_NONE;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
//char* typeName = mTypes[oldStruct[0]];
|
||||||
|
|
||||||
|
//#define SLOW_FORWARD_COMPATIBLE 1
|
||||||
|
#ifdef SLOW_FORWARD_COMPATIBLE
|
||||||
|
char* typeName = mTypes[oldLookup];
|
||||||
|
int newLookup = memDNA->getReverseType(typeName);
|
||||||
|
if (newLookup == -1)
|
||||||
|
{
|
||||||
|
mCMPFlags[i] = FDF_NONE;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
short *curStruct = memDNA->mStructs[newLookup];
|
||||||
|
#else
|
||||||
|
// memory for file
|
||||||
|
|
||||||
|
if (oldLookup < memDNA->mStructs.size())
|
||||||
|
{
|
||||||
|
short *curStruct = memDNA->mStructs[oldLookup];
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// rebuild...
|
||||||
|
mCMPFlags[i] = FDF_STRUCT_NEQU;
|
||||||
|
|
||||||
|
#ifndef TEST_BACKWARD_FORWARD_COMPATIBILITY
|
||||||
|
|
||||||
|
if (curStruct[1] == oldStruct[1])
|
||||||
|
{
|
||||||
|
// type len same ...
|
||||||
|
if (mTlens[oldStruct[0]] == memDNA->mTlens[curStruct[0]])
|
||||||
|
{
|
||||||
|
bool isSame = true;
|
||||||
|
int elementLength = oldStruct[1];
|
||||||
|
|
||||||
|
|
||||||
|
curStruct+=2;
|
||||||
|
oldStruct+=2;
|
||||||
|
|
||||||
|
|
||||||
|
for (int j=0; j<elementLength; j++, curStruct+=2, oldStruct+=2)
|
||||||
|
{
|
||||||
|
// type the same
|
||||||
|
//const char* typeFileDNA = mTypes[oldStruct[0]];
|
||||||
|
//const char* typeMemDNA = mTypes[curStruct[0]];
|
||||||
|
if (strcmp(mTypes[oldStruct[0]], memDNA->mTypes[curStruct[0]])!=0)
|
||||||
|
{
|
||||||
|
isSame=false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// name the same
|
||||||
|
if (strcmp(m_Names[oldStruct[1]].m_name, memDNA->m_Names[curStruct[1]].m_name)!=0)
|
||||||
|
{
|
||||||
|
isSame=false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// flag valid ==
|
||||||
|
if (isSame)
|
||||||
|
mCMPFlags[i] = FDF_STRUCT_EQU;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// recurse in
|
||||||
|
for ( i=0; i<(int)mStructs.size(); i++)
|
||||||
|
{
|
||||||
|
if (mCMPFlags[i] == FDF_STRUCT_NEQU)
|
||||||
|
initRecurseCmpFlags(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static int name_is_array(char* name, int* dim1, int* dim2) {
|
||||||
|
int len = strlen(name);
|
||||||
|
/*fprintf(stderr,"[%s]",name);*/
|
||||||
|
/*if (len >= 1) {
|
||||||
|
if (name[len-1] != ']')
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;*/
|
||||||
|
char *bp;
|
||||||
|
int num;
|
||||||
|
if (dim1) {
|
||||||
|
*dim1 = 1;
|
||||||
|
}
|
||||||
|
if (dim2) {
|
||||||
|
*dim2 = 1;
|
||||||
|
}
|
||||||
|
bp = strchr(name, '[');
|
||||||
|
if (!bp) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
num = 0;
|
||||||
|
while (++bp < name+len-1) {
|
||||||
|
const char c = *bp;
|
||||||
|
if (c == ']') {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (c <= '9' && c >= '0') {
|
||||||
|
num *= 10;
|
||||||
|
num += (c - '0');
|
||||||
|
} else {
|
||||||
|
printf("array parse error.\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (dim2) {
|
||||||
|
*dim2 = num;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* find second dim, if any. */
|
||||||
|
bp = strchr(bp, '[');
|
||||||
|
if (!bp) {
|
||||||
|
return 1; /* at least we got the first dim. */
|
||||||
|
}
|
||||||
|
num = 0;
|
||||||
|
while (++bp < name+len-1) {
|
||||||
|
const char c = *bp;
|
||||||
|
if (c == ']') {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (c <= '9' && c >= '0') {
|
||||||
|
num *= 10;
|
||||||
|
num += (c - '0');
|
||||||
|
} else {
|
||||||
|
printf("array2 parse error.\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (dim1) {
|
||||||
|
if (dim2) {
|
||||||
|
*dim1 = *dim2;
|
||||||
|
*dim2 = num;
|
||||||
|
} else {
|
||||||
|
*dim1 = num;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ----------------------------------------------------- //
|
||||||
|
void bDNA::init(char *data, int len, bool swap)
|
||||||
|
{
|
||||||
|
int *intPtr=0;short *shtPtr=0;
|
||||||
|
char *cp = 0;int dataLen =0;long nr=0;
|
||||||
|
intPtr = (int*)data;
|
||||||
|
|
||||||
|
/*
|
||||||
|
SDNA (4 bytes) (magic number)
|
||||||
|
NAME (4 bytes)
|
||||||
|
<nr> (4 bytes) amount of names (int)
|
||||||
|
<string>
|
||||||
|
<string>
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (strncmp(data, "SDNA", 4)==0)
|
||||||
|
{
|
||||||
|
// skip ++ NAME
|
||||||
|
intPtr++; intPtr++;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Parse names
|
||||||
|
if (swap)
|
||||||
|
{
|
||||||
|
*intPtr = ChunkUtils::swapInt(*intPtr);
|
||||||
|
}
|
||||||
|
dataLen = *intPtr;
|
||||||
|
intPtr++;
|
||||||
|
|
||||||
|
cp = (char*)intPtr;
|
||||||
|
int i;
|
||||||
|
for ( i=0; i<dataLen; i++)
|
||||||
|
{
|
||||||
|
bNameInfo info;
|
||||||
|
info.m_name = cp;
|
||||||
|
info.m_isPointer = (info.m_name[0] == '*') || (info.m_name[1] == '*');
|
||||||
|
name_is_array(info.m_name,&info.m_dim0,&info.m_dim1);
|
||||||
|
m_Names.push_back(info);
|
||||||
|
while (*cp)cp++;
|
||||||
|
cp++;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
{
|
||||||
|
nr= (long)cp;
|
||||||
|
//long mask=3;
|
||||||
|
nr= ((nr+3)&~3)-nr;
|
||||||
|
while (nr--)
|
||||||
|
{
|
||||||
|
cp++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
TYPE (4 bytes)
|
||||||
|
<nr> amount of types (int)
|
||||||
|
<string>
|
||||||
|
<string>
|
||||||
|
*/
|
||||||
|
|
||||||
|
intPtr = (int*)cp;
|
||||||
|
assert(strncmp(cp, "TYPE", 4)==0); intPtr++;
|
||||||
|
|
||||||
|
if (swap)
|
||||||
|
{
|
||||||
|
*intPtr = ChunkUtils::swapInt(*intPtr);
|
||||||
|
}
|
||||||
|
dataLen = *intPtr;
|
||||||
|
intPtr++;
|
||||||
|
|
||||||
|
cp = (char*)intPtr;
|
||||||
|
for ( i=0; i<dataLen; i++)
|
||||||
|
{
|
||||||
|
mTypes.push_back(cp);
|
||||||
|
while (*cp)cp++;
|
||||||
|
cp++;
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
nr= (long)cp;
|
||||||
|
// long mask=3;
|
||||||
|
nr= ((nr+3)&~3)-nr;
|
||||||
|
while (nr--)
|
||||||
|
{
|
||||||
|
cp++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
TLEN (4 bytes)
|
||||||
|
<len> (short) the lengths of types
|
||||||
|
<len>
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Parse type lens
|
||||||
|
intPtr = (int*)cp;
|
||||||
|
assert(strncmp(cp, "TLEN", 4)==0); intPtr++;
|
||||||
|
|
||||||
|
dataLen = (int)mTypes.size();
|
||||||
|
|
||||||
|
shtPtr = (short*)intPtr;
|
||||||
|
for ( i=0; i<dataLen; i++, shtPtr++)
|
||||||
|
{
|
||||||
|
if (swap)
|
||||||
|
shtPtr[0] = ChunkUtils::swapShort(shtPtr[0]);
|
||||||
|
mTlens.push_back(shtPtr[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dataLen & 1) shtPtr++;
|
||||||
|
|
||||||
|
/*
|
||||||
|
STRC (4 bytes)
|
||||||
|
<nr> amount of structs (int)
|
||||||
|
<typenr>
|
||||||
|
<nr_of_elems>
|
||||||
|
<typenr>
|
||||||
|
<namenr>
|
||||||
|
<typenr>
|
||||||
|
<namenr>
|
||||||
|
*/
|
||||||
|
|
||||||
|
intPtr = (int*)shtPtr;
|
||||||
|
cp = (char*)intPtr;
|
||||||
|
assert(strncmp(cp, "STRC", 4)==0); intPtr++;
|
||||||
|
|
||||||
|
if (swap)
|
||||||
|
{
|
||||||
|
*intPtr = ChunkUtils::swapInt(*intPtr);
|
||||||
|
}
|
||||||
|
dataLen = *intPtr;
|
||||||
|
intPtr++;
|
||||||
|
|
||||||
|
|
||||||
|
shtPtr = (short*)intPtr;
|
||||||
|
for ( i=0; i<dataLen; i++)
|
||||||
|
{
|
||||||
|
mStructs.push_back (shtPtr);
|
||||||
|
if (swap)
|
||||||
|
{
|
||||||
|
shtPtr[0]= ChunkUtils::swapShort(shtPtr[0]);
|
||||||
|
shtPtr[1]= ChunkUtils::swapShort(shtPtr[1]);
|
||||||
|
|
||||||
|
int len = shtPtr[1];
|
||||||
|
shtPtr+= 2;
|
||||||
|
|
||||||
|
for (int a=0; a<len; a++, shtPtr+=2)
|
||||||
|
{
|
||||||
|
shtPtr[0]= ChunkUtils::swapShort(shtPtr[0]);
|
||||||
|
shtPtr[1]= ChunkUtils::swapShort(shtPtr[1]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
shtPtr+= (2*shtPtr[1])+2;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// build reverse lookups
|
||||||
|
for ( i=0; i<(int)mStructs.size(); i++)
|
||||||
|
{
|
||||||
|
short *strc = mStructs.at(i);
|
||||||
|
if (!mPtrLen && strcmp(mTypes[strc[0]],"ListBase")==0)
|
||||||
|
{
|
||||||
|
mPtrLen = mTlens[strc[0]]/2;
|
||||||
|
}
|
||||||
|
|
||||||
|
mStructReverse.insert(strc[0], i);
|
||||||
|
mTypeLookup.insert(btHashString(mTypes[strc[0]]),i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ----------------------------------------------------- //
|
||||||
|
int bDNA::getArraySize(char* string)
|
||||||
|
{
|
||||||
|
int ret = 1;
|
||||||
|
int len = strlen(string);
|
||||||
|
|
||||||
|
|
||||||
|
char* next = 0;
|
||||||
|
for (int i=0; i<len; i++)
|
||||||
|
{
|
||||||
|
char c = string[i];
|
||||||
|
|
||||||
|
if (c == '[')
|
||||||
|
next = &string[i+1];
|
||||||
|
else if (c==']')
|
||||||
|
if (next)
|
||||||
|
ret *= atoi(next);
|
||||||
|
}
|
||||||
|
|
||||||
|
// print (string << ' ' << ret);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void bDNA::dumpTypeDefinitions()
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
int numTypes = mTypes.size();
|
||||||
|
|
||||||
|
for (i=0;i<numTypes;i++)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
for ( i=0; i<(int)mStructs.size(); i++)
|
||||||
|
{
|
||||||
|
int totalBytes=0;
|
||||||
|
short *oldStruct = mStructs[i];
|
||||||
|
|
||||||
|
int oldLookup = getReverseType(oldStruct[0]);
|
||||||
|
if (oldLookup == -1)
|
||||||
|
{
|
||||||
|
mCMPFlags[i] = FDF_NONE;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
short* newStruct = mStructs[oldLookup];
|
||||||
|
char* typeName = mTypes[newStruct[0]];
|
||||||
|
printf("%3d: %s ",i,typeName);
|
||||||
|
|
||||||
|
//char *name = mNames[oldStruct[1]];
|
||||||
|
int len = oldStruct[1];
|
||||||
|
printf(" (%d fields) ",len);
|
||||||
|
oldStruct+=2;
|
||||||
|
|
||||||
|
printf("{");
|
||||||
|
int j;
|
||||||
|
for (j=0; j<len; ++j,oldStruct+=2) {
|
||||||
|
const char* name = m_Names[oldStruct[1]].m_name;
|
||||||
|
printf("%s %s", mTypes[oldStruct[0]],name);
|
||||||
|
int elemNumBytes= 0;
|
||||||
|
int arrayDimensions = getArraySizeNew(oldStruct[1]);
|
||||||
|
|
||||||
|
if (m_Names[oldStruct[1]].m_isPointer)
|
||||||
|
{
|
||||||
|
elemNumBytes = VOID_IS_8 ? 8 : 4;
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
elemNumBytes = getLength(oldStruct[0]);
|
||||||
|
}
|
||||||
|
printf(" /* %d bytes */",elemNumBytes*arrayDimensions);
|
||||||
|
|
||||||
|
if (j == len-1) {
|
||||||
|
printf(";}");
|
||||||
|
} else {
|
||||||
|
printf("; ");
|
||||||
|
}
|
||||||
|
totalBytes+=elemNumBytes*arrayDimensions;
|
||||||
|
}
|
||||||
|
printf("\ntotalBytes=%d\n\n",totalBytes);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
/* dump out display of types and their sizes */
|
||||||
|
for (i=0; i<bf->types_count; ++i) {
|
||||||
|
/* if (!bf->types[i].is_struct)*/
|
||||||
|
{
|
||||||
|
printf("%3d: sizeof(%s%s)=%d",
|
||||||
|
i,
|
||||||
|
bf->types[i].is_struct ? "struct " : "atomic ",
|
||||||
|
bf->types[i].name, bf->types[i].size);
|
||||||
|
if (bf->types[i].is_struct) {
|
||||||
|
int j;
|
||||||
|
printf(", %d fields: { ", bf->types[i].fieldtypes_count);
|
||||||
|
for (j=0; j<bf->types[i].fieldtypes_count; ++j) {
|
||||||
|
printf("%s %s",
|
||||||
|
bf->types[bf->types[i].fieldtypes[j]].name,
|
||||||
|
bf->names[bf->types[i].fieldnames[j]]);
|
||||||
|
if (j == bf->types[i].fieldtypes_count-1) {
|
||||||
|
printf(";}");
|
||||||
|
} else {
|
||||||
|
printf("; ");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("\n\n");
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//eof
|
||||||
|
|
||||||
|
|
||||||
110
src/Bullet3Serialize/Bullet2FileLoader/bDNA.h
Normal file
110
src/Bullet3Serialize/Bullet2FileLoader/bDNA.h
Normal file
@@ -0,0 +1,110 @@
|
|||||||
|
/*
|
||||||
|
bParse
|
||||||
|
Copyright (c) 2006-2009 Charlie C & Erwin Coumans http://gamekit.googlecode.com
|
||||||
|
|
||||||
|
This software is provided 'as-is', without any express or implied warranty.
|
||||||
|
In no event will the authors be held liable for any damages arising from the use of this software.
|
||||||
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
|
including commercial applications, and to alter it and redistribute it freely,
|
||||||
|
subject to the following restrictions:
|
||||||
|
|
||||||
|
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
||||||
|
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
|
||||||
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __BDNA_H__
|
||||||
|
#define __BDNA_H__
|
||||||
|
|
||||||
|
|
||||||
|
#include "bCommon.h"
|
||||||
|
|
||||||
|
namespace bParse {
|
||||||
|
|
||||||
|
struct bNameInfo
|
||||||
|
{
|
||||||
|
char* m_name;
|
||||||
|
bool m_isPointer;
|
||||||
|
int m_dim0;
|
||||||
|
int m_dim1;
|
||||||
|
};
|
||||||
|
|
||||||
|
class bDNA
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
bDNA();
|
||||||
|
~bDNA();
|
||||||
|
|
||||||
|
void init(char *data, int len, bool swap=false);
|
||||||
|
|
||||||
|
int getArraySize(char* str);
|
||||||
|
int getArraySizeNew(short name)
|
||||||
|
{
|
||||||
|
const bNameInfo& nameInfo = m_Names[name];
|
||||||
|
return nameInfo.m_dim0*nameInfo.m_dim1;
|
||||||
|
}
|
||||||
|
int getElementSize(short type, short name)
|
||||||
|
{
|
||||||
|
const bNameInfo& nameInfo = m_Names[name];
|
||||||
|
int size = nameInfo.m_isPointer ? mPtrLen*nameInfo.m_dim0*nameInfo.m_dim1 : mTlens[type]*nameInfo.m_dim0*nameInfo.m_dim1;
|
||||||
|
return size;
|
||||||
|
}
|
||||||
|
|
||||||
|
int getNumNames() const
|
||||||
|
{
|
||||||
|
return m_Names.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
char *getName(int ind);
|
||||||
|
char *getType(int ind);
|
||||||
|
short *getStruct(int ind);
|
||||||
|
short getLength(int ind);
|
||||||
|
int getReverseType(short type);
|
||||||
|
int getReverseType(const char *type);
|
||||||
|
|
||||||
|
|
||||||
|
int getNumStructs();
|
||||||
|
|
||||||
|
//
|
||||||
|
bool lessThan(bDNA* other);
|
||||||
|
|
||||||
|
void initCmpFlags(bDNA *memDNA);
|
||||||
|
bool flagNotEqual(int dna_nr);
|
||||||
|
bool flagEqual(int dna_nr);
|
||||||
|
bool flagNone(int dna_nr);
|
||||||
|
|
||||||
|
|
||||||
|
int getPointerSize();
|
||||||
|
|
||||||
|
void dumpTypeDefinitions();
|
||||||
|
|
||||||
|
|
||||||
|
private:
|
||||||
|
enum FileDNAFlags
|
||||||
|
{
|
||||||
|
FDF_NONE=0,
|
||||||
|
FDF_STRUCT_NEQU,
|
||||||
|
FDF_STRUCT_EQU
|
||||||
|
};
|
||||||
|
|
||||||
|
void initRecurseCmpFlags(int i);
|
||||||
|
|
||||||
|
b3AlignedObjectArray<int> mCMPFlags;
|
||||||
|
|
||||||
|
b3AlignedObjectArray<bNameInfo> m_Names;
|
||||||
|
b3AlignedObjectArray<char*> mTypes;
|
||||||
|
b3AlignedObjectArray<short*> mStructs;
|
||||||
|
b3AlignedObjectArray<short> mTlens;
|
||||||
|
b3HashMap<btHashInt, int> mStructReverse;
|
||||||
|
b3HashMap<btHashString,int> mTypeLookup;
|
||||||
|
|
||||||
|
int mPtrLen;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#endif//__BDNA_H__
|
||||||
140
src/Bullet3Serialize/Bullet2FileLoader/bDefines.h
Normal file
140
src/Bullet3Serialize/Bullet2FileLoader/bDefines.h
Normal file
@@ -0,0 +1,140 @@
|
|||||||
|
/* Copyright (C) 2006-2009 Charlie C & Erwin Coumans http://gamekit.googlecode.com
|
||||||
|
*
|
||||||
|
* This software is provided 'as-is', without any express or implied
|
||||||
|
* warranty. In no event will the authors be held liable for any damages
|
||||||
|
* arising from the use of this software.
|
||||||
|
*
|
||||||
|
* Permission is granted to anyone to use this software for any purpose,
|
||||||
|
* including commercial applications, and to alter it and redistribute it
|
||||||
|
* freely, subject to the following restrictions:
|
||||||
|
*
|
||||||
|
* 1. The origin of this software must not be misrepresented; you must not
|
||||||
|
* claim that you wrote the original software. If you use this software
|
||||||
|
* in a product, an acknowledgment in the product documentation would be
|
||||||
|
* appreciated but is not required.
|
||||||
|
* 2. Altered source versions must be plainly marked as such, and must not be
|
||||||
|
* misrepresented as being the original software.
|
||||||
|
* 3. This notice may not be removed or altered from any source distribution.
|
||||||
|
*/
|
||||||
|
#ifndef __B_DEFINES_H__
|
||||||
|
#define __B_DEFINES_H__
|
||||||
|
|
||||||
|
|
||||||
|
// MISC defines, see BKE_global.h, BKE_utildefines.h
|
||||||
|
#define SIZEOFBLENDERHEADER 12
|
||||||
|
|
||||||
|
|
||||||
|
// ------------------------------------------------------------
|
||||||
|
#if defined(__sgi) || defined (__sparc) || defined (__sparc__) || defined (__PPC__) || defined (__ppc__) || defined (__BIG_ENDIAN__)
|
||||||
|
# define MAKE_ID(a,b,c,d) ( (int)(a)<<24 | (int)(b)<<16 | (c)<<8 | (d) )
|
||||||
|
#else
|
||||||
|
# define MAKE_ID(a,b,c,d) ( (int)(d)<<24 | (int)(c)<<16 | (b)<<8 | (a) )
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
// ------------------------------------------------------------
|
||||||
|
#if defined(__sgi) || defined(__sparc) || defined(__sparc__) || defined (__PPC__) || defined (__ppc__) || defined (__BIG_ENDIAN__)
|
||||||
|
# define MAKE_ID2(c, d) ( (c)<<8 | (d) )
|
||||||
|
# define MOST_SIG_BYTE 0
|
||||||
|
# define BBIG_ENDIAN
|
||||||
|
#else
|
||||||
|
# define MAKE_ID2(c, d) ( (d)<<8 | (c) )
|
||||||
|
# define MOST_SIG_BYTE 1
|
||||||
|
# define BLITTLE_ENDIAN
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ------------------------------------------------------------
|
||||||
|
#define ID_SCE MAKE_ID2('S', 'C')
|
||||||
|
#define ID_LI MAKE_ID2('L', 'I')
|
||||||
|
#define ID_OB MAKE_ID2('O', 'B')
|
||||||
|
#define ID_ME MAKE_ID2('M', 'E')
|
||||||
|
#define ID_CU MAKE_ID2('C', 'U')
|
||||||
|
#define ID_MB MAKE_ID2('M', 'B')
|
||||||
|
#define ID_MA MAKE_ID2('M', 'A')
|
||||||
|
#define ID_TE MAKE_ID2('T', 'E')
|
||||||
|
#define ID_IM MAKE_ID2('I', 'M')
|
||||||
|
#define ID_IK MAKE_ID2('I', 'K')
|
||||||
|
#define ID_WV MAKE_ID2('W', 'V')
|
||||||
|
#define ID_LT MAKE_ID2('L', 'T')
|
||||||
|
#define ID_SE MAKE_ID2('S', 'E')
|
||||||
|
#define ID_LF MAKE_ID2('L', 'F')
|
||||||
|
#define ID_LA MAKE_ID2('L', 'A')
|
||||||
|
#define ID_CA MAKE_ID2('C', 'A')
|
||||||
|
#define ID_IP MAKE_ID2('I', 'P')
|
||||||
|
#define ID_KE MAKE_ID2('K', 'E')
|
||||||
|
#define ID_WO MAKE_ID2('W', 'O')
|
||||||
|
#define ID_SCR MAKE_ID2('S', 'R')
|
||||||
|
#define ID_VF MAKE_ID2('V', 'F')
|
||||||
|
#define ID_TXT MAKE_ID2('T', 'X')
|
||||||
|
#define ID_SO MAKE_ID2('S', 'O')
|
||||||
|
#define ID_SAMPLE MAKE_ID2('S', 'A')
|
||||||
|
#define ID_GR MAKE_ID2('G', 'R')
|
||||||
|
#define ID_ID MAKE_ID2('I', 'D')
|
||||||
|
#define ID_AR MAKE_ID2('A', 'R')
|
||||||
|
#define ID_AC MAKE_ID2('A', 'C')
|
||||||
|
#define ID_SCRIPT MAKE_ID2('P', 'Y')
|
||||||
|
#define ID_FLUIDSIM MAKE_ID2('F', 'S')
|
||||||
|
#define ID_NT MAKE_ID2('N', 'T')
|
||||||
|
#define ID_BR MAKE_ID2('B', 'R')
|
||||||
|
|
||||||
|
|
||||||
|
#define ID_SEQ MAKE_ID2('S', 'Q')
|
||||||
|
#define ID_CO MAKE_ID2('C', 'O')
|
||||||
|
#define ID_PO MAKE_ID2('A', 'C')
|
||||||
|
#define ID_NLA MAKE_ID2('N', 'L')
|
||||||
|
|
||||||
|
#define ID_VS MAKE_ID2('V', 'S')
|
||||||
|
#define ID_VN MAKE_ID2('V', 'N')
|
||||||
|
|
||||||
|
|
||||||
|
// ------------------------------------------------------------
|
||||||
|
#define FORM MAKE_ID('F','O','R','M')
|
||||||
|
#define DDG1 MAKE_ID('3','D','G','1')
|
||||||
|
#define DDG2 MAKE_ID('3','D','G','2')
|
||||||
|
#define DDG3 MAKE_ID('3','D','G','3')
|
||||||
|
#define DDG4 MAKE_ID('3','D','G','4')
|
||||||
|
#define GOUR MAKE_ID('G','O','U','R')
|
||||||
|
#define BLEN MAKE_ID('B','L','E','N')
|
||||||
|
#define DER_ MAKE_ID('D','E','R','_')
|
||||||
|
#define V100 MAKE_ID('V','1','0','0')
|
||||||
|
#define DATA MAKE_ID('D','A','T','A')
|
||||||
|
#define GLOB MAKE_ID('G','L','O','B')
|
||||||
|
#define IMAG MAKE_ID('I','M','A','G')
|
||||||
|
#define TEST MAKE_ID('T','E','S','T')
|
||||||
|
#define USER MAKE_ID('U','S','E','R')
|
||||||
|
|
||||||
|
|
||||||
|
// ------------------------------------------------------------
|
||||||
|
#define DNA1 MAKE_ID('D','N','A','1')
|
||||||
|
#define REND MAKE_ID('R','E','N','D')
|
||||||
|
#define ENDB MAKE_ID('E','N','D','B')
|
||||||
|
#define NAME MAKE_ID('N','A','M','E')
|
||||||
|
#define SDNA MAKE_ID('S','D','N','A')
|
||||||
|
#define TYPE MAKE_ID('T','Y','P','E')
|
||||||
|
#define TLEN MAKE_ID('T','L','E','N')
|
||||||
|
#define STRC MAKE_ID('S','T','R','C')
|
||||||
|
|
||||||
|
|
||||||
|
// ------------------------------------------------------------
|
||||||
|
#define SWITCH_INT(a) { \
|
||||||
|
char s_i, *p_i; \
|
||||||
|
p_i= (char *)&(a); \
|
||||||
|
s_i=p_i[0]; p_i[0]=p_i[3]; p_i[3]=s_i; \
|
||||||
|
s_i=p_i[1]; p_i[1]=p_i[2]; p_i[2]=s_i; }
|
||||||
|
|
||||||
|
// ------------------------------------------------------------
|
||||||
|
#define SWITCH_SHORT(a) { \
|
||||||
|
char s_i, *p_i; \
|
||||||
|
p_i= (char *)&(a); \
|
||||||
|
s_i=p_i[0]; p_i[0]=p_i[1]; p_i[1]=s_i; }
|
||||||
|
|
||||||
|
// ------------------------------------------------------------
|
||||||
|
#define SWITCH_LONGINT(a) { \
|
||||||
|
char s_i, *p_i; \
|
||||||
|
p_i= (char *)&(a); \
|
||||||
|
s_i=p_i[0]; p_i[0]=p_i[7]; p_i[7]=s_i; \
|
||||||
|
s_i=p_i[1]; p_i[1]=p_i[6]; p_i[6]=s_i; \
|
||||||
|
s_i=p_i[2]; p_i[2]=p_i[5]; p_i[5]=s_i; \
|
||||||
|
s_i=p_i[3]; p_i[3]=p_i[4]; p_i[4]=s_i; }
|
||||||
|
|
||||||
|
#endif//__B_DEFINES_H__
|
||||||
1757
src/Bullet3Serialize/Bullet2FileLoader/bFile.cpp
Normal file
1757
src/Bullet3Serialize/Bullet2FileLoader/bFile.cpp
Normal file
File diff suppressed because it is too large
Load Diff
165
src/Bullet3Serialize/Bullet2FileLoader/bFile.h
Normal file
165
src/Bullet3Serialize/Bullet2FileLoader/bFile.h
Normal file
@@ -0,0 +1,165 @@
|
|||||||
|
/*
|
||||||
|
bParse
|
||||||
|
Copyright (c) 2006-2009 Charlie C & Erwin Coumans http://gamekit.googlecode.com
|
||||||
|
|
||||||
|
This software is provided 'as-is', without any express or implied warranty.
|
||||||
|
In no event will the authors be held liable for any damages arising from the use of this software.
|
||||||
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
|
including commercial applications, and to alter it and redistribute it freely,
|
||||||
|
subject to the following restrictions:
|
||||||
|
|
||||||
|
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
||||||
|
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
|
||||||
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __BFILE_H__
|
||||||
|
#define __BFILE_H__
|
||||||
|
|
||||||
|
#include "bCommon.h"
|
||||||
|
#include "bChunk.h"
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
namespace bParse {
|
||||||
|
|
||||||
|
// ----------------------------------------------------- //
|
||||||
|
enum bFileFlags
|
||||||
|
{
|
||||||
|
FD_INVALID =0,
|
||||||
|
FD_OK =1,
|
||||||
|
FD_VOID_IS_8 =2,
|
||||||
|
FD_ENDIAN_SWAP =4,
|
||||||
|
FD_FILE_64 =8,
|
||||||
|
FD_BITS_VARIES =16,
|
||||||
|
FD_VERSION_VARIES = 32,
|
||||||
|
FD_DOUBLE_PRECISION =64,
|
||||||
|
FD_BROKEN_DNA = 128
|
||||||
|
};
|
||||||
|
|
||||||
|
enum bFileVerboseMode
|
||||||
|
{
|
||||||
|
FD_VERBOSE_EXPORT_XML = 1,
|
||||||
|
FD_VERBOSE_DUMP_DNA_TYPE_DEFINITIONS = 2,
|
||||||
|
FD_VERBOSE_DUMP_CHUNKS = 4,
|
||||||
|
FD_VERBOSE_DUMP_FILE_INFO=8,
|
||||||
|
};
|
||||||
|
// ----------------------------------------------------- //
|
||||||
|
class bFile
|
||||||
|
{
|
||||||
|
protected:
|
||||||
|
|
||||||
|
char m_headerString[7];
|
||||||
|
|
||||||
|
bool mOwnsBuffer;
|
||||||
|
char* mFileBuffer;
|
||||||
|
int mFileLen;
|
||||||
|
int mVersion;
|
||||||
|
|
||||||
|
|
||||||
|
bPtrMap mLibPointers;
|
||||||
|
|
||||||
|
int mDataStart;
|
||||||
|
bDNA* mFileDNA;
|
||||||
|
bDNA* mMemoryDNA;
|
||||||
|
|
||||||
|
b3AlignedObjectArray<char*> m_pointerFixupArray;
|
||||||
|
b3AlignedObjectArray<char*> m_pointerPtrFixupArray;
|
||||||
|
|
||||||
|
b3AlignedObjectArray<bChunkInd> m_chunks;
|
||||||
|
b3HashMap<btHashPtr, bChunkInd> m_chunkPtrPtrMap;
|
||||||
|
|
||||||
|
//
|
||||||
|
|
||||||
|
bPtrMap mDataPointers;
|
||||||
|
|
||||||
|
|
||||||
|
int mFlags;
|
||||||
|
|
||||||
|
// ////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
// buffer offset util
|
||||||
|
int getNextBlock(bChunkInd *dataChunk, const char *dataPtr, const int flags);
|
||||||
|
void safeSwapPtr(char *dst, const char *src);
|
||||||
|
|
||||||
|
virtual void parseHeader();
|
||||||
|
|
||||||
|
virtual void parseData() = 0;
|
||||||
|
|
||||||
|
void resolvePointersMismatch();
|
||||||
|
void resolvePointersChunk(const bChunkInd& dataChunk, int verboseMode);
|
||||||
|
|
||||||
|
int resolvePointersStructRecursive(char *strcPtr, int old_dna, int verboseMode, int recursion);
|
||||||
|
//void swapPtr(char *dst, char *src);
|
||||||
|
|
||||||
|
void parseStruct(char *strcPtr, char *dtPtr, int old_dna, int new_dna, bool fixupPointers);
|
||||||
|
void getMatchingFileDNA(short* old, const char* lookupName, const char* lookupType, char *strcData, char *data, bool fixupPointers);
|
||||||
|
char* getFileElement(short *firstStruct, char *lookupName, char *lookupType, char *data, short **foundPos);
|
||||||
|
|
||||||
|
|
||||||
|
void swap(char *head, class bChunkInd& ch, bool ignoreEndianFlag);
|
||||||
|
void swapData(char *data, short type, int arraySize, bool ignoreEndianFlag);
|
||||||
|
void swapStruct(int dna_nr, char *data, bool ignoreEndianFlag);
|
||||||
|
void swapLen(char *dataPtr);
|
||||||
|
void swapDNA(char* ptr);
|
||||||
|
|
||||||
|
|
||||||
|
char* readStruct(char *head, class bChunkInd& chunk);
|
||||||
|
char *getAsString(int code);
|
||||||
|
|
||||||
|
void parseInternal(int verboseMode, char* memDna,int memDnaLength);
|
||||||
|
|
||||||
|
public:
|
||||||
|
bFile(const char *filename, const char headerString[7]);
|
||||||
|
|
||||||
|
//todo: make memoryBuffer const char
|
||||||
|
//bFile( const char *memoryBuffer, int len);
|
||||||
|
bFile( char *memoryBuffer, int len, const char headerString[7]);
|
||||||
|
virtual ~bFile();
|
||||||
|
|
||||||
|
bDNA* getFileDNA()
|
||||||
|
{
|
||||||
|
return mFileDNA;
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void addDataBlock(char* dataBlock) = 0;
|
||||||
|
|
||||||
|
int getFlags() const
|
||||||
|
{
|
||||||
|
return mFlags;
|
||||||
|
}
|
||||||
|
|
||||||
|
bPtrMap& getLibPointers()
|
||||||
|
{
|
||||||
|
return mLibPointers;
|
||||||
|
}
|
||||||
|
|
||||||
|
void* findLibPointer(void *ptr);
|
||||||
|
|
||||||
|
bool ok();
|
||||||
|
|
||||||
|
virtual void parse(int verboseMode) = 0;
|
||||||
|
|
||||||
|
virtual int write(const char* fileName, bool fixupPointers=false) = 0;
|
||||||
|
|
||||||
|
virtual void writeChunks(FILE* fp, bool fixupPointers );
|
||||||
|
|
||||||
|
virtual void writeDNA(FILE* fp) = 0;
|
||||||
|
|
||||||
|
void updateOldPointers();
|
||||||
|
void resolvePointers(int verboseMode);
|
||||||
|
|
||||||
|
void dumpChunks(bDNA* dna);
|
||||||
|
|
||||||
|
int getVersion() const
|
||||||
|
{
|
||||||
|
return mVersion;
|
||||||
|
}
|
||||||
|
//pre-swap the endianness, so that data loaded on a target with different endianness doesn't need to be swapped
|
||||||
|
void preSwap();
|
||||||
|
void writeFile(const char* fileName);
|
||||||
|
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#endif//__BFILE_H__
|
||||||
423
src/Bullet3Serialize/Bullet2FileLoader/btBulletFile.cpp
Normal file
423
src/Bullet3Serialize/Bullet2FileLoader/btBulletFile.cpp
Normal file
@@ -0,0 +1,423 @@
|
|||||||
|
/*
|
||||||
|
bParse
|
||||||
|
Copyright (c) 2006-2010 Erwin Coumans http://gamekit.googlecode.com
|
||||||
|
|
||||||
|
This software is provided 'as-is', without any express or implied warranty.
|
||||||
|
In no event will the authors be held liable for any damages arising from the use of this software.
|
||||||
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
|
including commercial applications, and to alter it and redistribute it freely,
|
||||||
|
subject to the following restrictions:
|
||||||
|
|
||||||
|
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
||||||
|
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
|
||||||
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "btBulletFile.h"
|
||||||
|
#include "bDefines.h"
|
||||||
|
#include "bDNA.h"
|
||||||
|
|
||||||
|
#if !defined( __CELLOS_LV2__) && !defined(__MWERKS__)
|
||||||
|
#include <memory.h>
|
||||||
|
#endif
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
|
||||||
|
// 32 && 64 bit versions
|
||||||
|
#ifdef BT_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES
|
||||||
|
#ifdef _WIN64
|
||||||
|
extern char sBulletDNAstr64[];
|
||||||
|
extern int sBulletDNAlen64;
|
||||||
|
#else
|
||||||
|
extern char sBulletDNAstr[];
|
||||||
|
extern int sBulletDNAlen;
|
||||||
|
#endif //_WIN64
|
||||||
|
#else//BT_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES
|
||||||
|
|
||||||
|
extern char sBulletDNAstr64[];
|
||||||
|
extern int sBulletDNAlen64;
|
||||||
|
extern char sBulletDNAstr[];
|
||||||
|
extern int sBulletDNAlen;
|
||||||
|
|
||||||
|
#endif //BT_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES
|
||||||
|
|
||||||
|
using namespace bParse;
|
||||||
|
|
||||||
|
btBulletFile::btBulletFile()
|
||||||
|
:bFile("", "BULLET ")
|
||||||
|
{
|
||||||
|
mMemoryDNA = new bDNA(); //this memory gets released in the bFile::~bFile destructor,@todo not consistent with the rule 'who allocates it, has to deallocate it"
|
||||||
|
|
||||||
|
m_DnaCopy = 0;
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef BT_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES
|
||||||
|
#ifdef _WIN64
|
||||||
|
m_DnaCopy = (char*)btAlignedAlloc(sBulletDNAlen64,16);
|
||||||
|
memcpy(m_DnaCopy,sBulletDNAstr64,sBulletDNAlen64);
|
||||||
|
mMemoryDNA->init(m_DnaCopy,sBulletDNAlen64);
|
||||||
|
#else//_WIN64
|
||||||
|
m_DnaCopy = (char*)btAlignedAlloc(sBulletDNAlen,16);
|
||||||
|
memcpy(m_DnaCopy,sBulletDNAstr,sBulletDNAlen);
|
||||||
|
mMemoryDNA->init(m_DnaCopy,sBulletDNAlen);
|
||||||
|
#endif//_WIN64
|
||||||
|
#else//BT_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES
|
||||||
|
if (VOID_IS_8)
|
||||||
|
{
|
||||||
|
m_DnaCopy = (char*) btAlignedAlloc(sBulletDNAlen64,16);
|
||||||
|
memcpy(m_DnaCopy,sBulletDNAstr64,sBulletDNAlen64);
|
||||||
|
mMemoryDNA->init(m_DnaCopy,sBulletDNAlen64);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_DnaCopy =(char*) btAlignedAlloc(sBulletDNAlen,16);
|
||||||
|
memcpy(m_DnaCopy,sBulletDNAstr,sBulletDNAlen);
|
||||||
|
mMemoryDNA->init(m_DnaCopy,sBulletDNAlen);
|
||||||
|
}
|
||||||
|
#endif//BT_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
btBulletFile::btBulletFile(const char* fileName)
|
||||||
|
:bFile(fileName, "BULLET ")
|
||||||
|
{
|
||||||
|
m_DnaCopy = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
btBulletFile::btBulletFile(char *memoryBuffer, int len)
|
||||||
|
:bFile(memoryBuffer,len, "BULLET ")
|
||||||
|
{
|
||||||
|
m_DnaCopy = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
btBulletFile::~btBulletFile()
|
||||||
|
{
|
||||||
|
if (m_DnaCopy)
|
||||||
|
btAlignedFree(m_DnaCopy);
|
||||||
|
|
||||||
|
|
||||||
|
while (m_dataBlocks.size())
|
||||||
|
{
|
||||||
|
char* dataBlock = m_dataBlocks[m_dataBlocks.size()-1];
|
||||||
|
delete[] dataBlock;
|
||||||
|
m_dataBlocks.pop_back();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// ----------------------------------------------------- //
|
||||||
|
void btBulletFile::parseData()
|
||||||
|
{
|
||||||
|
// printf ("Building datablocks");
|
||||||
|
// printf ("Chunk size = %d",CHUNK_HEADER_LEN);
|
||||||
|
// printf ("File chunk size = %d",ChunkUtils::getOffset(mFlags));
|
||||||
|
|
||||||
|
const bool brokenDNA = (mFlags&FD_BROKEN_DNA)!=0;
|
||||||
|
|
||||||
|
//const bool swap = (mFlags&FD_ENDIAN_SWAP)!=0;
|
||||||
|
|
||||||
|
|
||||||
|
mDataStart = 12;
|
||||||
|
|
||||||
|
char *dataPtr = mFileBuffer+mDataStart;
|
||||||
|
|
||||||
|
bChunkInd dataChunk;
|
||||||
|
dataChunk.code = 0;
|
||||||
|
|
||||||
|
|
||||||
|
//dataPtr += ChunkUtils::getNextBlock(&dataChunk, dataPtr, mFlags);
|
||||||
|
int seek = getNextBlock(&dataChunk, dataPtr, mFlags);
|
||||||
|
|
||||||
|
|
||||||
|
if (mFlags &FD_ENDIAN_SWAP)
|
||||||
|
swapLen(dataPtr);
|
||||||
|
|
||||||
|
//dataPtr += ChunkUtils::getOffset(mFlags);
|
||||||
|
char *dataPtrHead = 0;
|
||||||
|
|
||||||
|
while (dataChunk.code != DNA1)
|
||||||
|
{
|
||||||
|
if (!brokenDNA || (dataChunk.code != BT_QUANTIZED_BVH_CODE) )
|
||||||
|
{
|
||||||
|
|
||||||
|
// one behind
|
||||||
|
if (dataChunk.code == SDNA) break;
|
||||||
|
//if (dataChunk.code == DNA1) break;
|
||||||
|
|
||||||
|
// same as (BHEAD+DATA dependency)
|
||||||
|
dataPtrHead = dataPtr+ChunkUtils::getOffset(mFlags);
|
||||||
|
if (dataChunk.dna_nr>=0)
|
||||||
|
{
|
||||||
|
char *id = readStruct(dataPtrHead, dataChunk);
|
||||||
|
|
||||||
|
// lookup maps
|
||||||
|
if (id)
|
||||||
|
{
|
||||||
|
m_chunkPtrPtrMap.insert(dataChunk.oldPtr, dataChunk);
|
||||||
|
mLibPointers.insert(dataChunk.oldPtr, (bStructHandle*)id);
|
||||||
|
|
||||||
|
m_chunks.push_back(dataChunk);
|
||||||
|
// block it
|
||||||
|
//bListBasePtr *listID = mMain->getListBasePtr(dataChunk.code);
|
||||||
|
//if (listID)
|
||||||
|
// listID->push_back((bStructHandle*)id);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dataChunk.code == BT_SOFTBODY_CODE)
|
||||||
|
{
|
||||||
|
m_softBodies.push_back((bStructHandle*) id);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dataChunk.code == BT_RIGIDBODY_CODE)
|
||||||
|
{
|
||||||
|
m_rigidBodies.push_back((bStructHandle*) id);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dataChunk.code == BT_DYNAMICSWORLD_CODE)
|
||||||
|
{
|
||||||
|
m_dynamicsWorldInfo.push_back((bStructHandle*) id);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dataChunk.code == BT_CONSTRAINT_CODE)
|
||||||
|
{
|
||||||
|
m_constraints.push_back((bStructHandle*) id);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dataChunk.code == BT_QUANTIZED_BVH_CODE)
|
||||||
|
{
|
||||||
|
m_bvhs.push_back((bStructHandle*) id);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dataChunk.code == BT_TRIANLGE_INFO_MAP)
|
||||||
|
{
|
||||||
|
m_triangleInfoMaps.push_back((bStructHandle*) id);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dataChunk.code == BT_COLLISIONOBJECT_CODE)
|
||||||
|
{
|
||||||
|
m_collisionObjects.push_back((bStructHandle*) id);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dataChunk.code == BT_SHAPE_CODE)
|
||||||
|
{
|
||||||
|
m_collisionShapes.push_back((bStructHandle*) id);
|
||||||
|
}
|
||||||
|
|
||||||
|
// if (dataChunk.code == GLOB)
|
||||||
|
// {
|
||||||
|
// m_glob = (bStructHandle*) id;
|
||||||
|
// }
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
printf("unknown chunk\n");
|
||||||
|
|
||||||
|
mLibPointers.insert(dataChunk.oldPtr, (bStructHandle*)dataPtrHead);
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
printf("skipping BT_QUANTIZED_BVH_CODE due to broken DNA\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
dataPtr += seek;
|
||||||
|
|
||||||
|
seek = getNextBlock(&dataChunk, dataPtr, mFlags);
|
||||||
|
if (mFlags &FD_ENDIAN_SWAP)
|
||||||
|
swapLen(dataPtr);
|
||||||
|
|
||||||
|
if (seek < 0)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void btBulletFile::addDataBlock(char* dataBlock)
|
||||||
|
{
|
||||||
|
m_dataBlocks.push_back(dataBlock);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void btBulletFile::writeDNA(FILE* fp)
|
||||||
|
{
|
||||||
|
|
||||||
|
bChunkInd dataChunk;
|
||||||
|
dataChunk.code = DNA1;
|
||||||
|
dataChunk.dna_nr = 0;
|
||||||
|
dataChunk.nr = 1;
|
||||||
|
#ifdef BT_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES
|
||||||
|
if (VOID_IS_8)
|
||||||
|
{
|
||||||
|
#ifdef _WIN64
|
||||||
|
dataChunk.len = sBulletDNAlen64;
|
||||||
|
dataChunk.oldPtr = sBulletDNAstr64;
|
||||||
|
fwrite(&dataChunk,sizeof(bChunkInd),1,fp);
|
||||||
|
fwrite(sBulletDNAstr64, sBulletDNAlen64,1,fp);
|
||||||
|
#else
|
||||||
|
btAssert(0);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
#ifndef _WIN64
|
||||||
|
dataChunk.len = sBulletDNAlen;
|
||||||
|
dataChunk.oldPtr = sBulletDNAstr;
|
||||||
|
fwrite(&dataChunk,sizeof(bChunkInd),1,fp);
|
||||||
|
fwrite(sBulletDNAstr, sBulletDNAlen,1,fp);
|
||||||
|
#else//_WIN64
|
||||||
|
btAssert(0);
|
||||||
|
#endif//_WIN64
|
||||||
|
}
|
||||||
|
#else//BT_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES
|
||||||
|
if (VOID_IS_8)
|
||||||
|
{
|
||||||
|
dataChunk.len = sBulletDNAlen64;
|
||||||
|
dataChunk.oldPtr = sBulletDNAstr64;
|
||||||
|
fwrite(&dataChunk,sizeof(bChunkInd),1,fp);
|
||||||
|
fwrite(sBulletDNAstr64, sBulletDNAlen64,1,fp);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
dataChunk.len = sBulletDNAlen;
|
||||||
|
dataChunk.oldPtr = sBulletDNAstr;
|
||||||
|
fwrite(&dataChunk,sizeof(bChunkInd),1,fp);
|
||||||
|
fwrite(sBulletDNAstr, sBulletDNAlen,1,fp);
|
||||||
|
}
|
||||||
|
#endif//BT_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void btBulletFile::parse(int verboseMode)
|
||||||
|
{
|
||||||
|
#ifdef BT_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES
|
||||||
|
if (VOID_IS_8)
|
||||||
|
{
|
||||||
|
#ifdef _WIN64
|
||||||
|
|
||||||
|
if (m_DnaCopy)
|
||||||
|
delete m_DnaCopy;
|
||||||
|
m_DnaCopy = (char*)btAlignedAlloc(sBulletDNAlen64,16);
|
||||||
|
memcpy(m_DnaCopy,sBulletDNAstr64,sBulletDNAlen64);
|
||||||
|
parseInternal(verboseMode,(char*)sBulletDNAstr64,sBulletDNAlen64);
|
||||||
|
#else
|
||||||
|
btAssert(0);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
#ifndef _WIN64
|
||||||
|
|
||||||
|
if (m_DnaCopy)
|
||||||
|
delete m_DnaCopy;
|
||||||
|
m_DnaCopy = (char*)btAlignedAlloc(sBulletDNAlen,16);
|
||||||
|
memcpy(m_DnaCopy,sBulletDNAstr,sBulletDNAlen);
|
||||||
|
parseInternal(verboseMode,m_DnaCopy,sBulletDNAlen);
|
||||||
|
#else
|
||||||
|
btAssert(0);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
#else//BT_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES
|
||||||
|
if (VOID_IS_8)
|
||||||
|
{
|
||||||
|
if (m_DnaCopy)
|
||||||
|
delete m_DnaCopy;
|
||||||
|
m_DnaCopy = (char*)btAlignedAlloc(sBulletDNAlen64,16);
|
||||||
|
memcpy(m_DnaCopy,sBulletDNAstr64,sBulletDNAlen64);
|
||||||
|
parseInternal(verboseMode,m_DnaCopy,sBulletDNAlen64);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (m_DnaCopy)
|
||||||
|
delete m_DnaCopy;
|
||||||
|
m_DnaCopy = (char*)btAlignedAlloc(sBulletDNAlen,16);
|
||||||
|
memcpy(m_DnaCopy,sBulletDNAstr,sBulletDNAlen);
|
||||||
|
parseInternal(verboseMode,m_DnaCopy,sBulletDNAlen);
|
||||||
|
}
|
||||||
|
#endif//BT_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES
|
||||||
|
|
||||||
|
//the parsing will convert to cpu endian
|
||||||
|
mFlags &=~FD_ENDIAN_SWAP;
|
||||||
|
|
||||||
|
int littleEndian= 1;
|
||||||
|
littleEndian= ((char*)&littleEndian)[0];
|
||||||
|
|
||||||
|
mFileBuffer[8] = littleEndian?'v':'V';
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// experimental
|
||||||
|
int btBulletFile::write(const char* fileName, bool fixupPointers)
|
||||||
|
{
|
||||||
|
FILE *fp = fopen(fileName, "wb");
|
||||||
|
if (fp)
|
||||||
|
{
|
||||||
|
char header[SIZEOFBLENDERHEADER] ;
|
||||||
|
memcpy(header, m_headerString, 7);
|
||||||
|
int endian= 1;
|
||||||
|
endian= ((char*)&endian)[0];
|
||||||
|
|
||||||
|
if (endian)
|
||||||
|
{
|
||||||
|
header[7] = '_';
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
header[7] = '-';
|
||||||
|
}
|
||||||
|
if (VOID_IS_8)
|
||||||
|
{
|
||||||
|
header[8]='V';
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
header[8]='v';
|
||||||
|
}
|
||||||
|
|
||||||
|
header[9] = '2';
|
||||||
|
header[10] = '7';
|
||||||
|
header[11] = '5';
|
||||||
|
|
||||||
|
fwrite(header,SIZEOFBLENDERHEADER,1,fp);
|
||||||
|
|
||||||
|
writeChunks(fp, fixupPointers);
|
||||||
|
|
||||||
|
writeDNA(fp);
|
||||||
|
|
||||||
|
fclose(fp);
|
||||||
|
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
printf("Error: cannot open file %s for writing\n",fileName);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void btBulletFile::addStruct(const char* structType,void* data, int len, void* oldPtr, int code)
|
||||||
|
{
|
||||||
|
|
||||||
|
bParse::bChunkInd dataChunk;
|
||||||
|
dataChunk.code = code;
|
||||||
|
dataChunk.nr = 1;
|
||||||
|
dataChunk.len = len;
|
||||||
|
dataChunk.dna_nr = mMemoryDNA->getReverseType(structType);
|
||||||
|
dataChunk.oldPtr = oldPtr;
|
||||||
|
|
||||||
|
///Perform structure size validation
|
||||||
|
short* structInfo= mMemoryDNA->getStruct(dataChunk.dna_nr);
|
||||||
|
int elemBytes;
|
||||||
|
elemBytes= mMemoryDNA->getLength(structInfo[0]);
|
||||||
|
// int elemBytes = mMemoryDNA->getElementSize(structInfo[0],structInfo[1]);
|
||||||
|
assert(len==elemBytes);
|
||||||
|
|
||||||
|
mLibPointers.insert(dataChunk.oldPtr, (bStructHandle*)data);
|
||||||
|
m_chunks.push_back(dataChunk);
|
||||||
|
}
|
||||||
83
src/Bullet3Serialize/Bullet2FileLoader/btBulletFile.h
Normal file
83
src/Bullet3Serialize/Bullet2FileLoader/btBulletFile.h
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
/*
|
||||||
|
bParse
|
||||||
|
Copyright (c) 2006-2010 Charlie C & Erwin Coumans http://gamekit.googlecode.com
|
||||||
|
|
||||||
|
This software is provided 'as-is', without any express or implied warranty.
|
||||||
|
In no event will the authors be held liable for any damages arising from the use of this software.
|
||||||
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
|
including commercial applications, and to alter it and redistribute it freely,
|
||||||
|
subject to the following restrictions:
|
||||||
|
|
||||||
|
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
||||||
|
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
|
||||||
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BT_BULLET_FILE_H
|
||||||
|
#define BT_BULLET_FILE_H
|
||||||
|
|
||||||
|
|
||||||
|
#include "bFile.h"
|
||||||
|
#include "Bullet3Common/b3AlignedObjectArray.h"
|
||||||
|
#include "bDefines.h"
|
||||||
|
|
||||||
|
#include "Bullet3Serialize/Bullet2FileLoader/btSerializer.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
namespace bParse {
|
||||||
|
|
||||||
|
// ----------------------------------------------------- //
|
||||||
|
class btBulletFile : public bFile
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
char* m_DnaCopy;
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
b3AlignedObjectArray<bStructHandle*> m_softBodies;
|
||||||
|
|
||||||
|
b3AlignedObjectArray<bStructHandle*> m_rigidBodies;
|
||||||
|
|
||||||
|
b3AlignedObjectArray<bStructHandle*> m_collisionObjects;
|
||||||
|
|
||||||
|
b3AlignedObjectArray<bStructHandle*> m_collisionShapes;
|
||||||
|
|
||||||
|
b3AlignedObjectArray<bStructHandle*> m_constraints;
|
||||||
|
|
||||||
|
b3AlignedObjectArray<bStructHandle*> m_bvhs;
|
||||||
|
|
||||||
|
b3AlignedObjectArray<bStructHandle*> m_triangleInfoMaps;
|
||||||
|
|
||||||
|
b3AlignedObjectArray<bStructHandle*> m_dynamicsWorldInfo;
|
||||||
|
|
||||||
|
b3AlignedObjectArray<char*> m_dataBlocks;
|
||||||
|
btBulletFile();
|
||||||
|
|
||||||
|
btBulletFile(const char* fileName);
|
||||||
|
|
||||||
|
btBulletFile(char *memoryBuffer, int len);
|
||||||
|
|
||||||
|
virtual ~btBulletFile();
|
||||||
|
|
||||||
|
virtual void addDataBlock(char* dataBlock);
|
||||||
|
|
||||||
|
|
||||||
|
// experimental
|
||||||
|
virtual int write(const char* fileName, bool fixupPointers=false);
|
||||||
|
|
||||||
|
virtual void parse(int verboseMode);
|
||||||
|
|
||||||
|
virtual void parseData();
|
||||||
|
|
||||||
|
virtual void writeDNA(FILE* fp);
|
||||||
|
|
||||||
|
void addStruct(const char* structType,void* data, int len, void* oldPtr, int code);
|
||||||
|
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif //BT_BULLET_FILE_H
|
||||||
908
src/Bullet3Serialize/Bullet2FileLoader/btSerializer.cpp
Normal file
908
src/Bullet3Serialize/Bullet2FileLoader/btSerializer.cpp
Normal file
@@ -0,0 +1,908 @@
|
|||||||
|
char sBulletDNAstr[]= {
|
||||||
|
char(83),char(68),char(78),char(65),char(78),char(65),char(77),char(69),char(63),char(1),char(0),char(0),char(109),char(95),char(115),char(105),char(122),char(101),char(0),char(109),
|
||||||
|
char(95),char(99),char(97),char(112),char(97),char(99),char(105),char(116),char(121),char(0),char(42),char(109),char(95),char(100),char(97),char(116),char(97),char(0),char(109),char(95),
|
||||||
|
char(99),char(111),char(108),char(108),char(105),char(115),char(105),char(111),char(110),char(83),char(104),char(97),char(112),char(101),char(115),char(0),char(109),char(95),char(99),char(111),
|
||||||
|
char(108),char(108),char(105),char(115),char(105),char(111),char(110),char(79),char(98),char(106),char(101),char(99),char(116),char(115),char(0),char(109),char(95),char(99),char(111),char(110),
|
||||||
|
char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(115),char(0),char(42),char(102),char(105),char(114),char(115),char(116),char(0),char(42),char(108),char(97),char(115),
|
||||||
|
char(116),char(0),char(109),char(95),char(102),char(108),char(111),char(97),char(116),char(115),char(91),char(52),char(93),char(0),char(109),char(95),char(101),char(108),char(91),char(51),
|
||||||
|
char(93),char(0),char(109),char(95),char(98),char(97),char(115),char(105),char(115),char(0),char(109),char(95),char(111),char(114),char(105),char(103),char(105),char(110),char(0),char(109),
|
||||||
|
char(95),char(114),char(111),char(111),char(116),char(78),char(111),char(100),char(101),char(73),char(110),char(100),char(101),char(120),char(0),char(109),char(95),char(115),char(117),char(98),
|
||||||
|
char(116),char(114),char(101),char(101),char(83),char(105),char(122),char(101),char(0),char(109),char(95),char(113),char(117),char(97),char(110),char(116),char(105),char(122),char(101),char(100),
|
||||||
|
char(65),char(97),char(98),char(98),char(77),char(105),char(110),char(91),char(51),char(93),char(0),char(109),char(95),char(113),char(117),char(97),char(110),char(116),char(105),char(122),
|
||||||
|
char(101),char(100),char(65),char(97),char(98),char(98),char(77),char(97),char(120),char(91),char(51),char(93),char(0),char(109),char(95),char(97),char(97),char(98),char(98),char(77),
|
||||||
|
char(105),char(110),char(79),char(114),char(103),char(0),char(109),char(95),char(97),char(97),char(98),char(98),char(77),char(97),char(120),char(79),char(114),char(103),char(0),char(109),
|
||||||
|
char(95),char(101),char(115),char(99),char(97),char(112),char(101),char(73),char(110),char(100),char(101),char(120),char(0),char(109),char(95),char(115),char(117),char(98),char(80),char(97),
|
||||||
|
char(114),char(116),char(0),char(109),char(95),char(116),char(114),char(105),char(97),char(110),char(103),char(108),char(101),char(73),char(110),char(100),char(101),char(120),char(0),char(109),
|
||||||
|
char(95),char(112),char(97),char(100),char(91),char(52),char(93),char(0),char(109),char(95),char(101),char(115),char(99),char(97),char(112),char(101),char(73),char(110),char(100),char(101),
|
||||||
|
char(120),char(79),char(114),char(84),char(114),char(105),char(97),char(110),char(103),char(108),char(101),char(73),char(110),char(100),char(101),char(120),char(0),char(109),char(95),char(98),
|
||||||
|
char(118),char(104),char(65),char(97),char(98),char(98),char(77),char(105),char(110),char(0),char(109),char(95),char(98),char(118),char(104),char(65),char(97),char(98),char(98),char(77),
|
||||||
|
char(97),char(120),char(0),char(109),char(95),char(98),char(118),char(104),char(81),char(117),char(97),char(110),char(116),char(105),char(122),char(97),char(116),char(105),char(111),char(110),
|
||||||
|
char(0),char(109),char(95),char(99),char(117),char(114),char(78),char(111),char(100),char(101),char(73),char(110),char(100),char(101),char(120),char(0),char(109),char(95),char(117),char(115),
|
||||||
|
char(101),char(81),char(117),char(97),char(110),char(116),char(105),char(122),char(97),char(116),char(105),char(111),char(110),char(0),char(109),char(95),char(110),char(117),char(109),char(67),
|
||||||
|
char(111),char(110),char(116),char(105),char(103),char(117),char(111),char(117),char(115),char(76),char(101),char(97),char(102),char(78),char(111),char(100),char(101),char(115),char(0),char(109),
|
||||||
|
char(95),char(110),char(117),char(109),char(81),char(117),char(97),char(110),char(116),char(105),char(122),char(101),char(100),char(67),char(111),char(110),char(116),char(105),char(103),char(117),
|
||||||
|
char(111),char(117),char(115),char(78),char(111),char(100),char(101),char(115),char(0),char(42),char(109),char(95),char(99),char(111),char(110),char(116),char(105),char(103),char(117),char(111),
|
||||||
|
char(117),char(115),char(78),char(111),char(100),char(101),char(115),char(80),char(116),char(114),char(0),char(42),char(109),char(95),char(113),char(117),char(97),char(110),char(116),char(105),
|
||||||
|
char(122),char(101),char(100),char(67),char(111),char(110),char(116),char(105),char(103),char(117),char(111),char(117),char(115),char(78),char(111),char(100),char(101),char(115),char(80),char(116),
|
||||||
|
char(114),char(0),char(42),char(109),char(95),char(115),char(117),char(98),char(84),char(114),char(101),char(101),char(73),char(110),char(102),char(111),char(80),char(116),char(114),char(0),
|
||||||
|
char(109),char(95),char(116),char(114),char(97),char(118),char(101),char(114),char(115),char(97),char(108),char(77),char(111),char(100),char(101),char(0),char(109),char(95),char(110),char(117),
|
||||||
|
char(109),char(83),char(117),char(98),char(116),char(114),char(101),char(101),char(72),char(101),char(97),char(100),char(101),char(114),char(115),char(0),char(42),char(109),char(95),char(110),
|
||||||
|
char(97),char(109),char(101),char(0),char(109),char(95),char(115),char(104),char(97),char(112),char(101),char(84),char(121),char(112),char(101),char(0),char(109),char(95),char(112),char(97),
|
||||||
|
char(100),char(100),char(105),char(110),char(103),char(91),char(52),char(93),char(0),char(109),char(95),char(99),char(111),char(108),char(108),char(105),char(115),char(105),char(111),char(110),
|
||||||
|
char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),char(97),char(0),char(109),char(95),char(108),char(111),char(99),char(97),char(108),char(83),char(99),char(97),
|
||||||
|
char(108),char(105),char(110),char(103),char(0),char(109),char(95),char(112),char(108),char(97),char(110),char(101),char(78),char(111),char(114),char(109),char(97),char(108),char(0),char(109),
|
||||||
|
char(95),char(112),char(108),char(97),char(110),char(101),char(67),char(111),char(110),char(115),char(116),char(97),char(110),char(116),char(0),char(109),char(95),char(105),char(109),char(112),
|
||||||
|
char(108),char(105),char(99),char(105),char(116),char(83),char(104),char(97),char(112),char(101),char(68),char(105),char(109),char(101),char(110),char(115),char(105),char(111),char(110),char(115),
|
||||||
|
char(0),char(109),char(95),char(99),char(111),char(108),char(108),char(105),char(115),char(105),char(111),char(110),char(77),char(97),char(114),char(103),char(105),char(110),char(0),char(109),
|
||||||
|
char(95),char(112),char(97),char(100),char(100),char(105),char(110),char(103),char(0),char(109),char(95),char(112),char(111),char(115),char(0),char(109),char(95),char(114),char(97),char(100),
|
||||||
|
char(105),char(117),char(115),char(0),char(109),char(95),char(99),char(111),char(110),char(118),char(101),char(120),char(73),char(110),char(116),char(101),char(114),char(110),char(97),char(108),
|
||||||
|
char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),char(97),char(0),char(42),char(109),char(95),char(108),char(111),char(99),char(97),char(108),char(80),char(111),
|
||||||
|
char(115),char(105),char(116),char(105),char(111),char(110),char(65),char(114),char(114),char(97),char(121),char(80),char(116),char(114),char(0),char(109),char(95),char(108),char(111),char(99),
|
||||||
|
char(97),char(108),char(80),char(111),char(115),char(105),char(116),char(105),char(111),char(110),char(65),char(114),char(114),char(97),char(121),char(83),char(105),char(122),char(101),char(0),
|
||||||
|
char(109),char(95),char(118),char(97),char(108),char(117),char(101),char(0),char(109),char(95),char(112),char(97),char(100),char(91),char(50),char(93),char(0),char(109),char(95),char(118),
|
||||||
|
char(97),char(108),char(117),char(101),char(115),char(91),char(51),char(93),char(0),char(109),char(95),char(112),char(97),char(100),char(0),char(42),char(109),char(95),char(118),char(101),
|
||||||
|
char(114),char(116),char(105),char(99),char(101),char(115),char(51),char(102),char(0),char(42),char(109),char(95),char(118),char(101),char(114),char(116),char(105),char(99),char(101),char(115),
|
||||||
|
char(51),char(100),char(0),char(42),char(109),char(95),char(105),char(110),char(100),char(105),char(99),char(101),char(115),char(51),char(50),char(0),char(42),char(109),char(95),char(51),
|
||||||
|
char(105),char(110),char(100),char(105),char(99),char(101),char(115),char(49),char(54),char(0),char(42),char(109),char(95),char(51),char(105),char(110),char(100),char(105),char(99),char(101),
|
||||||
|
char(115),char(56),char(0),char(42),char(109),char(95),char(105),char(110),char(100),char(105),char(99),char(101),char(115),char(49),char(54),char(0),char(109),char(95),char(110),char(117),
|
||||||
|
char(109),char(84),char(114),char(105),char(97),char(110),char(103),char(108),char(101),char(115),char(0),char(109),char(95),char(110),char(117),char(109),char(86),char(101),char(114),char(116),
|
||||||
|
char(105),char(99),char(101),char(115),char(0),char(42),char(109),char(95),char(109),char(101),char(115),char(104),char(80),char(97),char(114),char(116),char(115),char(80),char(116),char(114),
|
||||||
|
char(0),char(109),char(95),char(115),char(99),char(97),char(108),char(105),char(110),char(103),char(0),char(109),char(95),char(110),char(117),char(109),char(77),char(101),char(115),char(104),
|
||||||
|
char(80),char(97),char(114),char(116),char(115),char(0),char(109),char(95),char(109),char(101),char(115),char(104),char(73),char(110),char(116),char(101),char(114),char(102),char(97),char(99),
|
||||||
|
char(101),char(0),char(42),char(109),char(95),char(113),char(117),char(97),char(110),char(116),char(105),char(122),char(101),char(100),char(70),char(108),char(111),char(97),char(116),char(66),
|
||||||
|
char(118),char(104),char(0),char(42),char(109),char(95),char(113),char(117),char(97),char(110),char(116),char(105),char(122),char(101),char(100),char(68),char(111),char(117),char(98),char(108),
|
||||||
|
char(101),char(66),char(118),char(104),char(0),char(42),char(109),char(95),char(116),char(114),char(105),char(97),char(110),char(103),char(108),char(101),char(73),char(110),char(102),char(111),
|
||||||
|
char(77),char(97),char(112),char(0),char(109),char(95),char(112),char(97),char(100),char(51),char(91),char(52),char(93),char(0),char(109),char(95),char(116),char(114),char(105),char(109),
|
||||||
|
char(101),char(115),char(104),char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),char(97),char(0),char(109),char(95),char(116),char(114),char(97),char(110),char(115),
|
||||||
|
char(102),char(111),char(114),char(109),char(0),char(42),char(109),char(95),char(99),char(104),char(105),char(108),char(100),char(83),char(104),char(97),char(112),char(101),char(0),char(109),
|
||||||
|
char(95),char(99),char(104),char(105),char(108),char(100),char(83),char(104),char(97),char(112),char(101),char(84),char(121),char(112),char(101),char(0),char(109),char(95),char(99),char(104),
|
||||||
|
char(105),char(108),char(100),char(77),char(97),char(114),char(103),char(105),char(110),char(0),char(42),char(109),char(95),char(99),char(104),char(105),char(108),char(100),char(83),char(104),
|
||||||
|
char(97),char(112),char(101),char(80),char(116),char(114),char(0),char(109),char(95),char(110),char(117),char(109),char(67),char(104),char(105),char(108),char(100),char(83),char(104),char(97),
|
||||||
|
char(112),char(101),char(115),char(0),char(109),char(95),char(117),char(112),char(65),char(120),char(105),char(115),char(0),char(109),char(95),char(102),char(108),char(97),char(103),char(115),
|
||||||
|
char(0),char(109),char(95),char(101),char(100),char(103),char(101),char(86),char(48),char(86),char(49),char(65),char(110),char(103),char(108),char(101),char(0),char(109),char(95),char(101),
|
||||||
|
char(100),char(103),char(101),char(86),char(49),char(86),char(50),char(65),char(110),char(103),char(108),char(101),char(0),char(109),char(95),char(101),char(100),char(103),char(101),char(86),
|
||||||
|
char(50),char(86),char(48),char(65),char(110),char(103),char(108),char(101),char(0),char(42),char(109),char(95),char(104),char(97),char(115),char(104),char(84),char(97),char(98),char(108),
|
||||||
|
char(101),char(80),char(116),char(114),char(0),char(42),char(109),char(95),char(110),char(101),char(120),char(116),char(80),char(116),char(114),char(0),char(42),char(109),char(95),char(118),
|
||||||
|
char(97),char(108),char(117),char(101),char(65),char(114),char(114),char(97),char(121),char(80),char(116),char(114),char(0),char(42),char(109),char(95),char(107),char(101),char(121),char(65),
|
||||||
|
char(114),char(114),char(97),char(121),char(80),char(116),char(114),char(0),char(109),char(95),char(99),char(111),char(110),char(118),char(101),char(120),char(69),char(112),char(115),char(105),
|
||||||
|
char(108),char(111),char(110),char(0),char(109),char(95),char(112),char(108),char(97),char(110),char(97),char(114),char(69),char(112),char(115),char(105),char(108),char(111),char(110),char(0),
|
||||||
|
char(109),char(95),char(101),char(113),char(117),char(97),char(108),char(86),char(101),char(114),char(116),char(101),char(120),char(84),char(104),char(114),char(101),char(115),char(104),char(111),
|
||||||
|
char(108),char(100),char(0),char(109),char(95),char(101),char(100),char(103),char(101),char(68),char(105),char(115),char(116),char(97),char(110),char(99),char(101),char(84),char(104),char(114),
|
||||||
|
char(101),char(115),char(104),char(111),char(108),char(100),char(0),char(109),char(95),char(122),char(101),char(114),char(111),char(65),char(114),char(101),char(97),char(84),char(104),char(114),
|
||||||
|
char(101),char(115),char(104),char(111),char(108),char(100),char(0),char(109),char(95),char(110),char(101),char(120),char(116),char(83),char(105),char(122),char(101),char(0),char(109),char(95),
|
||||||
|
char(104),char(97),char(115),char(104),char(84),char(97),char(98),char(108),char(101),char(83),char(105),char(122),char(101),char(0),char(109),char(95),char(110),char(117),char(109),char(86),
|
||||||
|
char(97),char(108),char(117),char(101),char(115),char(0),char(109),char(95),char(110),char(117),char(109),char(75),char(101),char(121),char(115),char(0),char(109),char(95),char(103),char(105),
|
||||||
|
char(109),char(112),char(97),char(99),char(116),char(83),char(117),char(98),char(84),char(121),char(112),char(101),char(0),char(42),char(109),char(95),char(117),char(110),char(115),char(99),
|
||||||
|
char(97),char(108),char(101),char(100),char(80),char(111),char(105),char(110),char(116),char(115),char(70),char(108),char(111),char(97),char(116),char(80),char(116),char(114),char(0),char(42),
|
||||||
|
char(109),char(95),char(117),char(110),char(115),char(99),char(97),char(108),char(101),char(100),char(80),char(111),char(105),char(110),char(116),char(115),char(68),char(111),char(117),char(98),
|
||||||
|
char(108),char(101),char(80),char(116),char(114),char(0),char(109),char(95),char(110),char(117),char(109),char(85),char(110),char(115),char(99),char(97),char(108),char(101),char(100),char(80),
|
||||||
|
char(111),char(105),char(110),char(116),char(115),char(0),char(109),char(95),char(112),char(97),char(100),char(100),char(105),char(110),char(103),char(51),char(91),char(52),char(93),char(0),
|
||||||
|
char(42),char(109),char(95),char(98),char(114),char(111),char(97),char(100),char(112),char(104),char(97),char(115),char(101),char(72),char(97),char(110),char(100),char(108),char(101),char(0),
|
||||||
|
char(42),char(109),char(95),char(99),char(111),char(108),char(108),char(105),char(115),char(105),char(111),char(110),char(83),char(104),char(97),char(112),char(101),char(0),char(42),char(109),
|
||||||
|
char(95),char(114),char(111),char(111),char(116),char(67),char(111),char(108),char(108),char(105),char(115),char(105),char(111),char(110),char(83),char(104),char(97),char(112),char(101),char(0),
|
||||||
|
char(109),char(95),char(119),char(111),char(114),char(108),char(100),char(84),char(114),char(97),char(110),char(115),char(102),char(111),char(114),char(109),char(0),char(109),char(95),char(105),
|
||||||
|
char(110),char(116),char(101),char(114),char(112),char(111),char(108),char(97),char(116),char(105),char(111),char(110),char(87),char(111),char(114),char(108),char(100),char(84),char(114),char(97),
|
||||||
|
char(110),char(115),char(102),char(111),char(114),char(109),char(0),char(109),char(95),char(105),char(110),char(116),char(101),char(114),char(112),char(111),char(108),char(97),char(116),char(105),
|
||||||
|
char(111),char(110),char(76),char(105),char(110),char(101),char(97),char(114),char(86),char(101),char(108),char(111),char(99),char(105),char(116),char(121),char(0),char(109),char(95),char(105),
|
||||||
|
char(110),char(116),char(101),char(114),char(112),char(111),char(108),char(97),char(116),char(105),char(111),char(110),char(65),char(110),char(103),char(117),char(108),char(97),char(114),char(86),
|
||||||
|
char(101),char(108),char(111),char(99),char(105),char(116),char(121),char(0),char(109),char(95),char(97),char(110),char(105),char(115),char(111),char(116),char(114),char(111),char(112),char(105),
|
||||||
|
char(99),char(70),char(114),char(105),char(99),char(116),char(105),char(111),char(110),char(0),char(109),char(95),char(99),char(111),char(110),char(116),char(97),char(99),char(116),char(80),
|
||||||
|
char(114),char(111),char(99),char(101),char(115),char(115),char(105),char(110),char(103),char(84),char(104),char(114),char(101),char(115),char(104),char(111),char(108),char(100),char(0),char(109),
|
||||||
|
char(95),char(100),char(101),char(97),char(99),char(116),char(105),char(118),char(97),char(116),char(105),char(111),char(110),char(84),char(105),char(109),char(101),char(0),char(109),char(95),
|
||||||
|
char(102),char(114),char(105),char(99),char(116),char(105),char(111),char(110),char(0),char(109),char(95),char(114),char(111),char(108),char(108),char(105),char(110),char(103),char(70),char(114),
|
||||||
|
char(105),char(99),char(116),char(105),char(111),char(110),char(0),char(109),char(95),char(114),char(101),char(115),char(116),char(105),char(116),char(117),char(116),char(105),char(111),char(110),
|
||||||
|
char(0),char(109),char(95),char(104),char(105),char(116),char(70),char(114),char(97),char(99),char(116),char(105),char(111),char(110),char(0),char(109),char(95),char(99),char(99),char(100),
|
||||||
|
char(83),char(119),char(101),char(112),char(116),char(83),char(112),char(104),char(101),char(114),char(101),char(82),char(97),char(100),char(105),char(117),char(115),char(0),char(109),char(95),
|
||||||
|
char(99),char(99),char(100),char(77),char(111),char(116),char(105),char(111),char(110),char(84),char(104),char(114),char(101),char(115),char(104),char(111),char(108),char(100),char(0),char(109),
|
||||||
|
char(95),char(104),char(97),char(115),char(65),char(110),char(105),char(115),char(111),char(116),char(114),char(111),char(112),char(105),char(99),char(70),char(114),char(105),char(99),char(116),
|
||||||
|
char(105),char(111),char(110),char(0),char(109),char(95),char(99),char(111),char(108),char(108),char(105),char(115),char(105),char(111),char(110),char(70),char(108),char(97),char(103),char(115),
|
||||||
|
char(0),char(109),char(95),char(105),char(115),char(108),char(97),char(110),char(100),char(84),char(97),char(103),char(49),char(0),char(109),char(95),char(99),char(111),char(109),char(112),
|
||||||
|
char(97),char(110),char(105),char(111),char(110),char(73),char(100),char(0),char(109),char(95),char(97),char(99),char(116),char(105),char(118),char(97),char(116),char(105),char(111),char(110),
|
||||||
|
char(83),char(116),char(97),char(116),char(101),char(49),char(0),char(109),char(95),char(105),char(110),char(116),char(101),char(114),char(110),char(97),char(108),char(84),char(121),char(112),
|
||||||
|
char(101),char(0),char(109),char(95),char(99),char(104),char(101),char(99),char(107),char(67),char(111),char(108),char(108),char(105),char(100),char(101),char(87),char(105),char(116),char(104),
|
||||||
|
char(0),char(109),char(95),char(115),char(111),char(108),char(118),char(101),char(114),char(73),char(110),char(102),char(111),char(0),char(109),char(95),char(103),char(114),char(97),char(118),
|
||||||
|
char(105),char(116),char(121),char(0),char(109),char(95),char(99),char(111),char(108),char(108),char(105),char(115),char(105),char(111),char(110),char(79),char(98),char(106),char(101),char(99),
|
||||||
|
char(116),char(68),char(97),char(116),char(97),char(0),char(109),char(95),char(105),char(110),char(118),char(73),char(110),char(101),char(114),char(116),char(105),char(97),char(84),char(101),
|
||||||
|
char(110),char(115),char(111),char(114),char(87),char(111),char(114),char(108),char(100),char(0),char(109),char(95),char(108),char(105),char(110),char(101),char(97),char(114),char(86),char(101),
|
||||||
|
char(108),char(111),char(99),char(105),char(116),char(121),char(0),char(109),char(95),char(97),char(110),char(103),char(117),char(108),char(97),char(114),char(86),char(101),char(108),char(111),
|
||||||
|
char(99),char(105),char(116),char(121),char(0),char(109),char(95),char(97),char(110),char(103),char(117),char(108),char(97),char(114),char(70),char(97),char(99),char(116),char(111),char(114),
|
||||||
|
char(0),char(109),char(95),char(108),char(105),char(110),char(101),char(97),char(114),char(70),char(97),char(99),char(116),char(111),char(114),char(0),char(109),char(95),char(103),char(114),
|
||||||
|
char(97),char(118),char(105),char(116),char(121),char(95),char(97),char(99),char(99),char(101),char(108),char(101),char(114),char(97),char(116),char(105),char(111),char(110),char(0),char(109),
|
||||||
|
char(95),char(105),char(110),char(118),char(73),char(110),char(101),char(114),char(116),char(105),char(97),char(76),char(111),char(99),char(97),char(108),char(0),char(109),char(95),char(116),
|
||||||
|
char(111),char(116),char(97),char(108),char(70),char(111),char(114),char(99),char(101),char(0),char(109),char(95),char(116),char(111),char(116),char(97),char(108),char(84),char(111),char(114),
|
||||||
|
char(113),char(117),char(101),char(0),char(109),char(95),char(105),char(110),char(118),char(101),char(114),char(115),char(101),char(77),char(97),char(115),char(115),char(0),char(109),char(95),
|
||||||
|
char(108),char(105),char(110),char(101),char(97),char(114),char(68),char(97),char(109),char(112),char(105),char(110),char(103),char(0),char(109),char(95),char(97),char(110),char(103),char(117),
|
||||||
|
char(108),char(97),char(114),char(68),char(97),char(109),char(112),char(105),char(110),char(103),char(0),char(109),char(95),char(97),char(100),char(100),char(105),char(116),char(105),char(111),
|
||||||
|
char(110),char(97),char(108),char(68),char(97),char(109),char(112),char(105),char(110),char(103),char(70),char(97),char(99),char(116),char(111),char(114),char(0),char(109),char(95),char(97),
|
||||||
|
char(100),char(100),char(105),char(116),char(105),char(111),char(110),char(97),char(108),char(76),char(105),char(110),char(101),char(97),char(114),char(68),char(97),char(109),char(112),char(105),
|
||||||
|
char(110),char(103),char(84),char(104),char(114),char(101),char(115),char(104),char(111),char(108),char(100),char(83),char(113),char(114),char(0),char(109),char(95),char(97),char(100),char(100),
|
||||||
|
char(105),char(116),char(105),char(111),char(110),char(97),char(108),char(65),char(110),char(103),char(117),char(108),char(97),char(114),char(68),char(97),char(109),char(112),char(105),char(110),
|
||||||
|
char(103),char(84),char(104),char(114),char(101),char(115),char(104),char(111),char(108),char(100),char(83),char(113),char(114),char(0),char(109),char(95),char(97),char(100),char(100),char(105),
|
||||||
|
char(116),char(105),char(111),char(110),char(97),char(108),char(65),char(110),char(103),char(117),char(108),char(97),char(114),char(68),char(97),char(109),char(112),char(105),char(110),char(103),
|
||||||
|
char(70),char(97),char(99),char(116),char(111),char(114),char(0),char(109),char(95),char(108),char(105),char(110),char(101),char(97),char(114),char(83),char(108),char(101),char(101),char(112),
|
||||||
|
char(105),char(110),char(103),char(84),char(104),char(114),char(101),char(115),char(104),char(111),char(108),char(100),char(0),char(109),char(95),char(97),char(110),char(103),char(117),char(108),
|
||||||
|
char(97),char(114),char(83),char(108),char(101),char(101),char(112),char(105),char(110),char(103),char(84),char(104),char(114),char(101),char(115),char(104),char(111),char(108),char(100),char(0),
|
||||||
|
char(109),char(95),char(97),char(100),char(100),char(105),char(116),char(105),char(111),char(110),char(97),char(108),char(68),char(97),char(109),char(112),char(105),char(110),char(103),char(0),
|
||||||
|
char(109),char(95),char(110),char(117),char(109),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(82),char(111),char(119),char(115),char(0),
|
||||||
|
char(110),char(117),char(98),char(0),char(42),char(109),char(95),char(114),char(98),char(65),char(0),char(42),char(109),char(95),char(114),char(98),char(66),char(0),char(109),char(95),
|
||||||
|
char(111),char(98),char(106),char(101),char(99),char(116),char(84),char(121),char(112),char(101),char(0),char(109),char(95),char(117),char(115),char(101),char(114),char(67),char(111),char(110),
|
||||||
|
char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(84),char(121),char(112),char(101),char(0),char(109),char(95),char(117),char(115),char(101),char(114),char(67),char(111),
|
||||||
|
char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(73),char(100),char(0),char(109),char(95),char(110),char(101),char(101),char(100),char(115),char(70),char(101),
|
||||||
|
char(101),char(100),char(98),char(97),char(99),char(107),char(0),char(109),char(95),char(97),char(112),char(112),char(108),char(105),char(101),char(100),char(73),char(109),char(112),char(117),
|
||||||
|
char(108),char(115),char(101),char(0),char(109),char(95),char(100),char(98),char(103),char(68),char(114),char(97),char(119),char(83),char(105),char(122),char(101),char(0),char(109),char(95),
|
||||||
|
char(100),char(105),char(115),char(97),char(98),char(108),char(101),char(67),char(111),char(108),char(108),char(105),char(115),char(105),char(111),char(110),char(115),char(66),char(101),char(116),
|
||||||
|
char(119),char(101),char(101),char(110),char(76),char(105),char(110),char(107),char(101),char(100),char(66),char(111),char(100),char(105),char(101),char(115),char(0),char(109),char(95),char(111),
|
||||||
|
char(118),char(101),char(114),char(114),char(105),char(100),char(101),char(78),char(117),char(109),char(83),char(111),char(108),char(118),char(101),char(114),char(73),char(116),char(101),char(114),
|
||||||
|
char(97),char(116),char(105),char(111),char(110),char(115),char(0),char(109),char(95),char(98),char(114),char(101),char(97),char(107),char(105),char(110),char(103),char(73),char(109),char(112),
|
||||||
|
char(117),char(108),char(115),char(101),char(84),char(104),char(114),char(101),char(115),char(104),char(111),char(108),char(100),char(0),char(109),char(95),char(105),char(115),char(69),char(110),
|
||||||
|
char(97),char(98),char(108),char(101),char(100),char(0),char(109),char(95),char(116),char(121),char(112),char(101),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),
|
||||||
|
char(110),char(116),char(68),char(97),char(116),char(97),char(0),char(109),char(95),char(112),char(105),char(118),char(111),char(116),char(73),char(110),char(65),char(0),char(109),char(95),
|
||||||
|
char(112),char(105),char(118),char(111),char(116),char(73),char(110),char(66),char(0),char(109),char(95),char(114),char(98),char(65),char(70),char(114),char(97),char(109),char(101),char(0),
|
||||||
|
char(109),char(95),char(114),char(98),char(66),char(70),char(114),char(97),char(109),char(101),char(0),char(109),char(95),char(117),char(115),char(101),char(82),char(101),char(102),char(101),
|
||||||
|
char(114),char(101),char(110),char(99),char(101),char(70),char(114),char(97),char(109),char(101),char(65),char(0),char(109),char(95),char(97),char(110),char(103),char(117),char(108),char(97),
|
||||||
|
char(114),char(79),char(110),char(108),char(121),char(0),char(109),char(95),char(101),char(110),char(97),char(98),char(108),char(101),char(65),char(110),char(103),char(117),char(108),char(97),
|
||||||
|
char(114),char(77),char(111),char(116),char(111),char(114),char(0),char(109),char(95),char(109),char(111),char(116),char(111),char(114),char(84),char(97),char(114),char(103),char(101),char(116),
|
||||||
|
char(86),char(101),char(108),char(111),char(99),char(105),char(116),char(121),char(0),char(109),char(95),char(109),char(97),char(120),char(77),char(111),char(116),char(111),char(114),char(73),
|
||||||
|
char(109),char(112),char(117),char(108),char(115),char(101),char(0),char(109),char(95),char(108),char(111),char(119),char(101),char(114),char(76),char(105),char(109),char(105),char(116),char(0),
|
||||||
|
char(109),char(95),char(117),char(112),char(112),char(101),char(114),char(76),char(105),char(109),char(105),char(116),char(0),char(109),char(95),char(108),char(105),char(109),char(105),char(116),
|
||||||
|
char(83),char(111),char(102),char(116),char(110),char(101),char(115),char(115),char(0),char(109),char(95),char(98),char(105),char(97),char(115),char(70),char(97),char(99),char(116),char(111),
|
||||||
|
char(114),char(0),char(109),char(95),char(114),char(101),char(108),char(97),char(120),char(97),char(116),char(105),char(111),char(110),char(70),char(97),char(99),char(116),char(111),char(114),
|
||||||
|
char(0),char(109),char(95),char(115),char(119),char(105),char(110),char(103),char(83),char(112),char(97),char(110),char(49),char(0),char(109),char(95),char(115),char(119),char(105),char(110),
|
||||||
|
char(103),char(83),char(112),char(97),char(110),char(50),char(0),char(109),char(95),char(116),char(119),char(105),char(115),char(116),char(83),char(112),char(97),char(110),char(0),char(109),
|
||||||
|
char(95),char(100),char(97),char(109),char(112),char(105),char(110),char(103),char(0),char(109),char(95),char(108),char(105),char(110),char(101),char(97),char(114),char(85),char(112),char(112),
|
||||||
|
char(101),char(114),char(76),char(105),char(109),char(105),char(116),char(0),char(109),char(95),char(108),char(105),char(110),char(101),char(97),char(114),char(76),char(111),char(119),char(101),
|
||||||
|
char(114),char(76),char(105),char(109),char(105),char(116),char(0),char(109),char(95),char(97),char(110),char(103),char(117),char(108),char(97),char(114),char(85),char(112),char(112),char(101),
|
||||||
|
char(114),char(76),char(105),char(109),char(105),char(116),char(0),char(109),char(95),char(97),char(110),char(103),char(117),char(108),char(97),char(114),char(76),char(111),char(119),char(101),
|
||||||
|
char(114),char(76),char(105),char(109),char(105),char(116),char(0),char(109),char(95),char(117),char(115),char(101),char(76),char(105),char(110),char(101),char(97),char(114),char(82),char(101),
|
||||||
|
char(102),char(101),char(114),char(101),char(110),char(99),char(101),char(70),char(114),char(97),char(109),char(101),char(65),char(0),char(109),char(95),char(117),char(115),char(101),char(79),
|
||||||
|
char(102),char(102),char(115),char(101),char(116),char(70),char(111),char(114),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(70),char(114),
|
||||||
|
char(97),char(109),char(101),char(0),char(109),char(95),char(54),char(100),char(111),char(102),char(68),char(97),char(116),char(97),char(0),char(109),char(95),char(115),char(112),char(114),
|
||||||
|
char(105),char(110),char(103),char(69),char(110),char(97),char(98),char(108),char(101),char(100),char(91),char(54),char(93),char(0),char(109),char(95),char(101),char(113),char(117),char(105),
|
||||||
|
char(108),char(105),char(98),char(114),char(105),char(117),char(109),char(80),char(111),char(105),char(110),char(116),char(91),char(54),char(93),char(0),char(109),char(95),char(115),char(112),
|
||||||
|
char(114),char(105),char(110),char(103),char(83),char(116),char(105),char(102),char(102),char(110),char(101),char(115),char(115),char(91),char(54),char(93),char(0),char(109),char(95),char(115),
|
||||||
|
char(112),char(114),char(105),char(110),char(103),char(68),char(97),char(109),char(112),char(105),char(110),char(103),char(91),char(54),char(93),char(0),char(109),char(95),char(116),char(97),
|
||||||
|
char(117),char(0),char(109),char(95),char(116),char(105),char(109),char(101),char(83),char(116),char(101),char(112),char(0),char(109),char(95),char(109),char(97),char(120),char(69),char(114),
|
||||||
|
char(114),char(111),char(114),char(82),char(101),char(100),char(117),char(99),char(116),char(105),char(111),char(110),char(0),char(109),char(95),char(115),char(111),char(114),char(0),char(109),
|
||||||
|
char(95),char(101),char(114),char(112),char(0),char(109),char(95),char(101),char(114),char(112),char(50),char(0),char(109),char(95),char(103),char(108),char(111),char(98),char(97),char(108),
|
||||||
|
char(67),char(102),char(109),char(0),char(109),char(95),char(115),char(112),char(108),char(105),char(116),char(73),char(109),char(112),char(117),char(108),char(115),char(101),char(80),char(101),
|
||||||
|
char(110),char(101),char(116),char(114),char(97),char(116),char(105),char(111),char(110),char(84),char(104),char(114),char(101),char(115),char(104),char(111),char(108),char(100),char(0),char(109),
|
||||||
|
char(95),char(115),char(112),char(108),char(105),char(116),char(73),char(109),char(112),char(117),char(108),char(115),char(101),char(84),char(117),char(114),char(110),char(69),char(114),char(112),
|
||||||
|
char(0),char(109),char(95),char(108),char(105),char(110),char(101),char(97),char(114),char(83),char(108),char(111),char(112),char(0),char(109),char(95),char(119),char(97),char(114),char(109),
|
||||||
|
char(115),char(116),char(97),char(114),char(116),char(105),char(110),char(103),char(70),char(97),char(99),char(116),char(111),char(114),char(0),char(109),char(95),char(109),char(97),char(120),
|
||||||
|
char(71),char(121),char(114),char(111),char(115),char(99),char(111),char(112),char(105),char(99),char(70),char(111),char(114),char(99),char(101),char(0),char(109),char(95),char(115),char(105),
|
||||||
|
char(110),char(103),char(108),char(101),char(65),char(120),char(105),char(115),char(82),char(111),char(108),char(108),char(105),char(110),char(103),char(70),char(114),char(105),char(99),char(116),
|
||||||
|
char(105),char(111),char(110),char(84),char(104),char(114),char(101),char(115),char(104),char(111),char(108),char(100),char(0),char(109),char(95),char(110),char(117),char(109),char(73),char(116),
|
||||||
|
char(101),char(114),char(97),char(116),char(105),char(111),char(110),char(115),char(0),char(109),char(95),char(115),char(111),char(108),char(118),char(101),char(114),char(77),char(111),char(100),
|
||||||
|
char(101),char(0),char(109),char(95),char(114),char(101),char(115),char(116),char(105),char(110),char(103),char(67),char(111),char(110),char(116),char(97),char(99),char(116),char(82),char(101),
|
||||||
|
char(115),char(116),char(105),char(116),char(117),char(116),char(105),char(111),char(110),char(84),char(104),char(114),char(101),char(115),char(104),char(111),char(108),char(100),char(0),char(109),
|
||||||
|
char(95),char(109),char(105),char(110),char(105),char(109),char(117),char(109),char(83),char(111),char(108),char(118),char(101),char(114),char(66),char(97),char(116),char(99),char(104),char(83),
|
||||||
|
char(105),char(122),char(101),char(0),char(109),char(95),char(115),char(112),char(108),char(105),char(116),char(73),char(109),char(112),char(117),char(108),char(115),char(101),char(0),char(109),
|
||||||
|
char(95),char(108),char(105),char(110),char(101),char(97),char(114),char(83),char(116),char(105),char(102),char(102),char(110),char(101),char(115),char(115),char(0),char(109),char(95),char(97),
|
||||||
|
char(110),char(103),char(117),char(108),char(97),char(114),char(83),char(116),char(105),char(102),char(102),char(110),char(101),char(115),char(115),char(0),char(109),char(95),char(118),char(111),
|
||||||
|
char(108),char(117),char(109),char(101),char(83),char(116),char(105),char(102),char(102),char(110),char(101),char(115),char(115),char(0),char(42),char(109),char(95),char(109),char(97),char(116),
|
||||||
|
char(101),char(114),char(105),char(97),char(108),char(0),char(109),char(95),char(112),char(111),char(115),char(105),char(116),char(105),char(111),char(110),char(0),char(109),char(95),char(112),
|
||||||
|
char(114),char(101),char(118),char(105),char(111),char(117),char(115),char(80),char(111),char(115),char(105),char(116),char(105),char(111),char(110),char(0),char(109),char(95),char(118),char(101),
|
||||||
|
char(108),char(111),char(99),char(105),char(116),char(121),char(0),char(109),char(95),char(97),char(99),char(99),char(117),char(109),char(117),char(108),char(97),char(116),char(101),char(100),
|
||||||
|
char(70),char(111),char(114),char(99),char(101),char(0),char(109),char(95),char(110),char(111),char(114),char(109),char(97),char(108),char(0),char(109),char(95),char(97),char(114),char(101),
|
||||||
|
char(97),char(0),char(109),char(95),char(97),char(116),char(116),char(97),char(99),char(104),char(0),char(109),char(95),char(110),char(111),char(100),char(101),char(73),char(110),char(100),
|
||||||
|
char(105),char(99),char(101),char(115),char(91),char(50),char(93),char(0),char(109),char(95),char(114),char(101),char(115),char(116),char(76),char(101),char(110),char(103),char(116),char(104),
|
||||||
|
char(0),char(109),char(95),char(98),char(98),char(101),char(110),char(100),char(105),char(110),char(103),char(0),char(109),char(95),char(110),char(111),char(100),char(101),char(73),char(110),
|
||||||
|
char(100),char(105),char(99),char(101),char(115),char(91),char(51),char(93),char(0),char(109),char(95),char(114),char(101),char(115),char(116),char(65),char(114),char(101),char(97),char(0),
|
||||||
|
char(109),char(95),char(99),char(48),char(91),char(52),char(93),char(0),char(109),char(95),char(110),char(111),char(100),char(101),char(73),char(110),char(100),char(105),char(99),char(101),
|
||||||
|
char(115),char(91),char(52),char(93),char(0),char(109),char(95),char(114),char(101),char(115),char(116),char(86),char(111),char(108),char(117),char(109),char(101),char(0),char(109),char(95),
|
||||||
|
char(99),char(49),char(0),char(109),char(95),char(99),char(50),char(0),char(109),char(95),char(99),char(48),char(0),char(109),char(95),char(108),char(111),char(99),char(97),char(108),
|
||||||
|
char(70),char(114),char(97),char(109),char(101),char(0),char(42),char(109),char(95),char(114),char(105),char(103),char(105),char(100),char(66),char(111),char(100),char(121),char(0),char(109),
|
||||||
|
char(95),char(110),char(111),char(100),char(101),char(73),char(110),char(100),char(101),char(120),char(0),char(109),char(95),char(97),char(101),char(114),char(111),char(77),char(111),char(100),
|
||||||
|
char(101),char(108),char(0),char(109),char(95),char(98),char(97),char(117),char(109),char(103),char(97),char(114),char(116),char(101),char(0),char(109),char(95),char(100),char(114),char(97),
|
||||||
|
char(103),char(0),char(109),char(95),char(108),char(105),char(102),char(116),char(0),char(109),char(95),char(112),char(114),char(101),char(115),char(115),char(117),char(114),char(101),char(0),
|
||||||
|
char(109),char(95),char(118),char(111),char(108),char(117),char(109),char(101),char(0),char(109),char(95),char(100),char(121),char(110),char(97),char(109),char(105),char(99),char(70),char(114),
|
||||||
|
char(105),char(99),char(116),char(105),char(111),char(110),char(0),char(109),char(95),char(112),char(111),char(115),char(101),char(77),char(97),char(116),char(99),char(104),char(0),char(109),
|
||||||
|
char(95),char(114),char(105),char(103),char(105),char(100),char(67),char(111),char(110),char(116),char(97),char(99),char(116),char(72),char(97),char(114),char(100),char(110),char(101),char(115),
|
||||||
|
char(115),char(0),char(109),char(95),char(107),char(105),char(110),char(101),char(116),char(105),char(99),char(67),char(111),char(110),char(116),char(97),char(99),char(116),char(72),char(97),
|
||||||
|
char(114),char(100),char(110),char(101),char(115),char(115),char(0),char(109),char(95),char(115),char(111),char(102),char(116),char(67),char(111),char(110),char(116),char(97),char(99),char(116),
|
||||||
|
char(72),char(97),char(114),char(100),char(110),char(101),char(115),char(115),char(0),char(109),char(95),char(97),char(110),char(99),char(104),char(111),char(114),char(72),char(97),char(114),
|
||||||
|
char(100),char(110),char(101),char(115),char(115),char(0),char(109),char(95),char(115),char(111),char(102),char(116),char(82),char(105),char(103),char(105),char(100),char(67),char(108),char(117),
|
||||||
|
char(115),char(116),char(101),char(114),char(72),char(97),char(114),char(100),char(110),char(101),char(115),char(115),char(0),char(109),char(95),char(115),char(111),char(102),char(116),char(75),
|
||||||
|
char(105),char(110),char(101),char(116),char(105),char(99),char(67),char(108),char(117),char(115),char(116),char(101),char(114),char(72),char(97),char(114),char(100),char(110),char(101),char(115),
|
||||||
|
char(115),char(0),char(109),char(95),char(115),char(111),char(102),char(116),char(83),char(111),char(102),char(116),char(67),char(108),char(117),char(115),char(116),char(101),char(114),char(72),
|
||||||
|
char(97),char(114),char(100),char(110),char(101),char(115),char(115),char(0),char(109),char(95),char(115),char(111),char(102),char(116),char(82),char(105),char(103),char(105),char(100),char(67),
|
||||||
|
char(108),char(117),char(115),char(116),char(101),char(114),char(73),char(109),char(112),char(117),char(108),char(115),char(101),char(83),char(112),char(108),char(105),char(116),char(0),char(109),
|
||||||
|
char(95),char(115),char(111),char(102),char(116),char(75),char(105),char(110),char(101),char(116),char(105),char(99),char(67),char(108),char(117),char(115),char(116),char(101),char(114),char(73),
|
||||||
|
char(109),char(112),char(117),char(108),char(115),char(101),char(83),char(112),char(108),char(105),char(116),char(0),char(109),char(95),char(115),char(111),char(102),char(116),char(83),char(111),
|
||||||
|
char(102),char(116),char(67),char(108),char(117),char(115),char(116),char(101),char(114),char(73),char(109),char(112),char(117),char(108),char(115),char(101),char(83),char(112),char(108),char(105),
|
||||||
|
char(116),char(0),char(109),char(95),char(109),char(97),char(120),char(86),char(111),char(108),char(117),char(109),char(101),char(0),char(109),char(95),char(116),char(105),char(109),char(101),
|
||||||
|
char(83),char(99),char(97),char(108),char(101),char(0),char(109),char(95),char(118),char(101),char(108),char(111),char(99),char(105),char(116),char(121),char(73),char(116),char(101),char(114),
|
||||||
|
char(97),char(116),char(105),char(111),char(110),char(115),char(0),char(109),char(95),char(112),char(111),char(115),char(105),char(116),char(105),char(111),char(110),char(73),char(116),char(101),
|
||||||
|
char(114),char(97),char(116),char(105),char(111),char(110),char(115),char(0),char(109),char(95),char(100),char(114),char(105),char(102),char(116),char(73),char(116),char(101),char(114),char(97),
|
||||||
|
char(116),char(105),char(111),char(110),char(115),char(0),char(109),char(95),char(99),char(108),char(117),char(115),char(116),char(101),char(114),char(73),char(116),char(101),char(114),char(97),
|
||||||
|
char(116),char(105),char(111),char(110),char(115),char(0),char(109),char(95),char(114),char(111),char(116),char(0),char(109),char(95),char(115),char(99),char(97),char(108),char(101),char(0),
|
||||||
|
char(109),char(95),char(97),char(113),char(113),char(0),char(109),char(95),char(99),char(111),char(109),char(0),char(42),char(109),char(95),char(112),char(111),char(115),char(105),char(116),
|
||||||
|
char(105),char(111),char(110),char(115),char(0),char(42),char(109),char(95),char(119),char(101),char(105),char(103),char(104),char(116),char(115),char(0),char(109),char(95),char(110),char(117),
|
||||||
|
char(109),char(80),char(111),char(115),char(105),char(116),char(105),char(111),char(110),char(115),char(0),char(109),char(95),char(110),char(117),char(109),char(87),char(101),char(105),char(103),
|
||||||
|
char(116),char(115),char(0),char(109),char(95),char(98),char(118),char(111),char(108),char(117),char(109),char(101),char(0),char(109),char(95),char(98),char(102),char(114),char(97),char(109),
|
||||||
|
char(101),char(0),char(109),char(95),char(102),char(114),char(97),char(109),char(101),char(120),char(102),char(111),char(114),char(109),char(0),char(109),char(95),char(108),char(111),char(99),
|
||||||
|
char(105),char(105),char(0),char(109),char(95),char(105),char(110),char(118),char(119),char(105),char(0),char(109),char(95),char(118),char(105),char(109),char(112),char(117),char(108),char(115),
|
||||||
|
char(101),char(115),char(91),char(50),char(93),char(0),char(109),char(95),char(100),char(105),char(109),char(112),char(117),char(108),char(115),char(101),char(115),char(91),char(50),char(93),
|
||||||
|
char(0),char(109),char(95),char(108),char(118),char(0),char(109),char(95),char(97),char(118),char(0),char(42),char(109),char(95),char(102),char(114),char(97),char(109),char(101),char(114),
|
||||||
|
char(101),char(102),char(115),char(0),char(42),char(109),char(95),char(110),char(111),char(100),char(101),char(73),char(110),char(100),char(105),char(99),char(101),char(115),char(0),char(42),
|
||||||
|
char(109),char(95),char(109),char(97),char(115),char(115),char(101),char(115),char(0),char(109),char(95),char(110),char(117),char(109),char(70),char(114),char(97),char(109),char(101),char(82),
|
||||||
|
char(101),char(102),char(115),char(0),char(109),char(95),char(110),char(117),char(109),char(78),char(111),char(100),char(101),char(115),char(0),char(109),char(95),char(110),char(117),char(109),
|
||||||
|
char(77),char(97),char(115),char(115),char(101),char(115),char(0),char(109),char(95),char(105),char(100),char(109),char(97),char(115),char(115),char(0),char(109),char(95),char(105),char(109),
|
||||||
|
char(97),char(115),char(115),char(0),char(109),char(95),char(110),char(118),char(105),char(109),char(112),char(117),char(108),char(115),char(101),char(115),char(0),char(109),char(95),char(110),
|
||||||
|
char(100),char(105),char(109),char(112),char(117),char(108),char(115),char(101),char(115),char(0),char(109),char(95),char(110),char(100),char(97),char(109),char(112),char(105),char(110),char(103),
|
||||||
|
char(0),char(109),char(95),char(108),char(100),char(97),char(109),char(112),char(105),char(110),char(103),char(0),char(109),char(95),char(97),char(100),char(97),char(109),char(112),char(105),
|
||||||
|
char(110),char(103),char(0),char(109),char(95),char(109),char(97),char(116),char(99),char(104),char(105),char(110),char(103),char(0),char(109),char(95),char(109),char(97),char(120),char(83),
|
||||||
|
char(101),char(108),char(102),char(67),char(111),char(108),char(108),char(105),char(115),char(105),char(111),char(110),char(73),char(109),char(112),char(117),char(108),char(115),char(101),char(0),
|
||||||
|
char(109),char(95),char(115),char(101),char(108),char(102),char(67),char(111),char(108),char(108),char(105),char(115),char(105),char(111),char(110),char(73),char(109),char(112),char(117),char(108),
|
||||||
|
char(115),char(101),char(70),char(97),char(99),char(116),char(111),char(114),char(0),char(109),char(95),char(99),char(111),char(110),char(116),char(97),char(105),char(110),char(115),char(65),
|
||||||
|
char(110),char(99),char(104),char(111),char(114),char(0),char(109),char(95),char(99),char(111),char(108),char(108),char(105),char(100),char(101),char(0),char(109),char(95),char(99),char(108),
|
||||||
|
char(117),char(115),char(116),char(101),char(114),char(73),char(110),char(100),char(101),char(120),char(0),char(42),char(109),char(95),char(98),char(111),char(100),char(121),char(65),char(0),
|
||||||
|
char(42),char(109),char(95),char(98),char(111),char(100),char(121),char(66),char(0),char(109),char(95),char(114),char(101),char(102),char(115),char(91),char(50),char(93),char(0),char(109),
|
||||||
|
char(95),char(99),char(102),char(109),char(0),char(109),char(95),char(115),char(112),char(108),char(105),char(116),char(0),char(109),char(95),char(100),char(101),char(108),char(101),char(116),
|
||||||
|
char(101),char(0),char(109),char(95),char(114),char(101),char(108),char(80),char(111),char(115),char(105),char(116),char(105),char(111),char(110),char(91),char(50),char(93),char(0),char(109),
|
||||||
|
char(95),char(98),char(111),char(100),char(121),char(65),char(116),char(121),char(112),char(101),char(0),char(109),char(95),char(98),char(111),char(100),char(121),char(66),char(116),char(121),
|
||||||
|
char(112),char(101),char(0),char(109),char(95),char(106),char(111),char(105),char(110),char(116),char(84),char(121),char(112),char(101),char(0),char(42),char(109),char(95),char(112),char(111),
|
||||||
|
char(115),char(101),char(0),char(42),char(42),char(109),char(95),char(109),char(97),char(116),char(101),char(114),char(105),char(97),char(108),char(115),char(0),char(42),char(109),char(95),
|
||||||
|
char(110),char(111),char(100),char(101),char(115),char(0),char(42),char(109),char(95),char(108),char(105),char(110),char(107),char(115),char(0),char(42),char(109),char(95),char(102),char(97),
|
||||||
|
char(99),char(101),char(115),char(0),char(42),char(109),char(95),char(116),char(101),char(116),char(114),char(97),char(104),char(101),char(100),char(114),char(97),char(0),char(42),char(109),
|
||||||
|
char(95),char(97),char(110),char(99),char(104),char(111),char(114),char(115),char(0),char(42),char(109),char(95),char(99),char(108),char(117),char(115),char(116),char(101),char(114),char(115),
|
||||||
|
char(0),char(42),char(109),char(95),char(106),char(111),char(105),char(110),char(116),char(115),char(0),char(109),char(95),char(110),char(117),char(109),char(77),char(97),char(116),char(101),
|
||||||
|
char(114),char(105),char(97),char(108),char(115),char(0),char(109),char(95),char(110),char(117),char(109),char(76),char(105),char(110),char(107),char(115),char(0),char(109),char(95),char(110),
|
||||||
|
char(117),char(109),char(70),char(97),char(99),char(101),char(115),char(0),char(109),char(95),char(110),char(117),char(109),char(84),char(101),char(116),char(114),char(97),char(104),char(101),
|
||||||
|
char(100),char(114),char(97),char(0),char(109),char(95),char(110),char(117),char(109),char(65),char(110),char(99),char(104),char(111),char(114),char(115),char(0),char(109),char(95),char(110),
|
||||||
|
char(117),char(109),char(67),char(108),char(117),char(115),char(116),char(101),char(114),char(115),char(0),char(109),char(95),char(110),char(117),char(109),char(74),char(111),char(105),char(110),
|
||||||
|
char(116),char(115),char(0),char(109),char(95),char(99),char(111),char(110),char(102),char(105),char(103),char(0),char(84),char(89),char(80),char(69),char(76),char(0),char(0),char(0),
|
||||||
|
char(99),char(104),char(97),char(114),char(0),char(117),char(99),char(104),char(97),char(114),char(0),char(115),char(104),char(111),char(114),char(116),char(0),char(117),char(115),char(104),
|
||||||
|
char(111),char(114),char(116),char(0),char(105),char(110),char(116),char(0),char(108),char(111),char(110),char(103),char(0),char(117),char(108),char(111),char(110),char(103),char(0),char(102),
|
||||||
|
char(108),char(111),char(97),char(116),char(0),char(100),char(111),char(117),char(98),char(108),char(101),char(0),char(118),char(111),char(105),char(100),char(0),char(80),char(111),char(105),
|
||||||
|
char(110),char(116),char(101),char(114),char(65),char(114),char(114),char(97),char(121),char(0),char(98),char(116),char(80),char(104),char(121),char(115),char(105),char(99),char(115),char(83),
|
||||||
|
char(121),char(115),char(116),char(101),char(109),char(0),char(76),char(105),char(115),char(116),char(66),char(97),char(115),char(101),char(0),char(98),char(116),char(86),char(101),char(99),
|
||||||
|
char(116),char(111),char(114),char(51),char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(86),char(101),char(99),char(116),
|
||||||
|
char(111),char(114),char(51),char(68),char(111),char(117),char(98),char(108),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(77),char(97),char(116),char(114),
|
||||||
|
char(105),char(120),char(51),char(120),char(51),char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(77),char(97),char(116),
|
||||||
|
char(114),char(105),char(120),char(51),char(120),char(51),char(68),char(111),char(117),char(98),char(108),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(84),
|
||||||
|
char(114),char(97),char(110),char(115),char(102),char(111),char(114),char(109),char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),
|
||||||
|
char(84),char(114),char(97),char(110),char(115),char(102),char(111),char(114),char(109),char(68),char(111),char(117),char(98),char(108),char(101),char(68),char(97),char(116),char(97),char(0),
|
||||||
|
char(98),char(116),char(66),char(118),char(104),char(83),char(117),char(98),char(116),char(114),char(101),char(101),char(73),char(110),char(102),char(111),char(68),char(97),char(116),char(97),
|
||||||
|
char(0),char(98),char(116),char(79),char(112),char(116),char(105),char(109),char(105),char(122),char(101),char(100),char(66),char(118),char(104),char(78),char(111),char(100),char(101),char(70),
|
||||||
|
char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(79),char(112),char(116),char(105),char(109),char(105),char(122),char(101),char(100),
|
||||||
|
char(66),char(118),char(104),char(78),char(111),char(100),char(101),char(68),char(111),char(117),char(98),char(108),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),
|
||||||
|
char(81),char(117),char(97),char(110),char(116),char(105),char(122),char(101),char(100),char(66),char(118),char(104),char(78),char(111),char(100),char(101),char(68),char(97),char(116),char(97),
|
||||||
|
char(0),char(98),char(116),char(81),char(117),char(97),char(110),char(116),char(105),char(122),char(101),char(100),char(66),char(118),char(104),char(70),char(108),char(111),char(97),char(116),
|
||||||
|
char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(81),char(117),char(97),char(110),char(116),char(105),char(122),char(101),char(100),char(66),char(118),char(104),char(68),
|
||||||
|
char(111),char(117),char(98),char(108),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(67),char(111),char(108),char(108),char(105),char(115),char(105),char(111),
|
||||||
|
char(110),char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(83),char(116),char(97),char(116),char(105),char(99),char(80),
|
||||||
|
char(108),char(97),char(110),char(101),char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(67),char(111),char(110),char(118),
|
||||||
|
char(101),char(120),char(73),char(110),char(116),char(101),char(114),char(110),char(97),char(108),char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),char(97),char(0),
|
||||||
|
char(98),char(116),char(80),char(111),char(115),char(105),char(116),char(105),char(111),char(110),char(65),char(110),char(100),char(82),char(97),char(100),char(105),char(117),char(115),char(0),
|
||||||
|
char(98),char(116),char(77),char(117),char(108),char(116),char(105),char(83),char(112),char(104),char(101),char(114),char(101),char(83),char(104),char(97),char(112),char(101),char(68),char(97),
|
||||||
|
char(116),char(97),char(0),char(98),char(116),char(73),char(110),char(116),char(73),char(110),char(100),char(101),char(120),char(68),char(97),char(116),char(97),char(0),char(98),char(116),
|
||||||
|
char(83),char(104),char(111),char(114),char(116),char(73),char(110),char(116),char(73),char(110),char(100),char(101),char(120),char(68),char(97),char(116),char(97),char(0),char(98),char(116),
|
||||||
|
char(83),char(104),char(111),char(114),char(116),char(73),char(110),char(116),char(73),char(110),char(100),char(101),char(120),char(84),char(114),char(105),char(112),char(108),char(101),char(116),
|
||||||
|
char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(67),char(104),char(97),char(114),char(73),char(110),char(100),char(101),char(120),char(84),char(114),char(105),char(112),
|
||||||
|
char(108),char(101),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(77),char(101),char(115),char(104),char(80),char(97),char(114),char(116),char(68),char(97),
|
||||||
|
char(116),char(97),char(0),char(98),char(116),char(83),char(116),char(114),char(105),char(100),char(105),char(110),char(103),char(77),char(101),char(115),char(104),char(73),char(110),char(116),
|
||||||
|
char(101),char(114),char(102),char(97),char(99),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(84),char(114),char(105),char(97),char(110),char(103),char(108),
|
||||||
|
char(101),char(77),char(101),char(115),char(104),char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(84),char(114),char(105),
|
||||||
|
char(97),char(110),char(103),char(108),char(101),char(73),char(110),char(102),char(111),char(77),char(97),char(112),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(83),
|
||||||
|
char(99),char(97),char(108),char(101),char(100),char(84),char(114),char(105),char(97),char(110),char(103),char(108),char(101),char(77),char(101),char(115),char(104),char(83),char(104),char(97),
|
||||||
|
char(112),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(67),char(111),char(109),char(112),char(111),char(117),char(110),char(100),char(83),char(104),char(97),
|
||||||
|
char(112),char(101),char(67),char(104),char(105),char(108),char(100),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(67),char(111),char(109),char(112),char(111),char(117),
|
||||||
|
char(110),char(100),char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(67),char(121),char(108),char(105),char(110),char(100),
|
||||||
|
char(101),char(114),char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(67),char(97),char(112),char(115),char(117),char(108),
|
||||||
|
char(101),char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(84),char(114),char(105),char(97),char(110),char(103),char(108),
|
||||||
|
char(101),char(73),char(110),char(102),char(111),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(71),char(73),char(109),char(112),char(97),char(99),char(116),char(77),
|
||||||
|
char(101),char(115),char(104),char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(67),char(111),char(110),char(118),char(101),
|
||||||
|
char(120),char(72),char(117),char(108),char(108),char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(67),char(111),char(108),
|
||||||
|
char(108),char(105),char(115),char(105),char(111),char(110),char(79),char(98),char(106),char(101),char(99),char(116),char(68),char(111),char(117),char(98),char(108),char(101),char(68),char(97),
|
||||||
|
char(116),char(97),char(0),char(98),char(116),char(67),char(111),char(108),char(108),char(105),char(115),char(105),char(111),char(110),char(79),char(98),char(106),char(101),char(99),char(116),
|
||||||
|
char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(68),char(121),char(110),char(97),char(109),char(105),char(99),char(115),
|
||||||
|
char(87),char(111),char(114),char(108),char(100),char(68),char(111),char(117),char(98),char(108),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(67),char(111),
|
||||||
|
char(110),char(116),char(97),char(99),char(116),char(83),char(111),char(108),char(118),char(101),char(114),char(73),char(110),char(102),char(111),char(68),char(111),char(117),char(98),char(108),
|
||||||
|
char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(68),char(121),char(110),char(97),char(109),char(105),char(99),char(115),char(87),char(111),char(114),char(108),
|
||||||
|
char(100),char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(67),char(111),char(110),char(116),char(97),char(99),char(116),
|
||||||
|
char(83),char(111),char(108),char(118),char(101),char(114),char(73),char(110),char(102),char(111),char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97),char(0),
|
||||||
|
char(98),char(116),char(82),char(105),char(103),char(105),char(100),char(66),char(111),char(100),char(121),char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97),
|
||||||
|
char(0),char(98),char(116),char(82),char(105),char(103),char(105),char(100),char(66),char(111),char(100),char(121),char(68),char(111),char(117),char(98),char(108),char(101),char(68),char(97),
|
||||||
|
char(116),char(97),char(0),char(98),char(116),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(73),char(110),char(102),char(111),char(49),
|
||||||
|
char(0),char(98),char(116),char(84),char(121),char(112),char(101),char(100),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(68),char(97),
|
||||||
|
char(116),char(97),char(0),char(98),char(116),char(82),char(105),char(103),char(105),char(100),char(66),char(111),char(100),char(121),char(68),char(97),char(116),char(97),char(0),char(98),
|
||||||
|
char(116),char(80),char(111),char(105),char(110),char(116),char(50),char(80),char(111),char(105),char(110),char(116),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),
|
||||||
|
char(110),char(116),char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(80),char(111),char(105),char(110),char(116),char(50),
|
||||||
|
char(80),char(111),char(105),char(110),char(116),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(68),char(111),char(117),char(98),char(108),
|
||||||
|
char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(72),char(105),char(110),char(103),char(101),char(67),char(111),char(110),char(115),char(116),char(114),char(97),
|
||||||
|
char(105),char(110),char(116),char(68),char(111),char(117),char(98),char(108),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(72),char(105),char(110),char(103),
|
||||||
|
char(101),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97),
|
||||||
|
char(0),char(98),char(116),char(67),char(111),char(110),char(101),char(84),char(119),char(105),char(115),char(116),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),
|
||||||
|
char(110),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(71),char(101),char(110),char(101),char(114),char(105),char(99),char(54),char(68),char(111),char(102),
|
||||||
|
char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(71),char(101),char(110),
|
||||||
|
char(101),char(114),char(105),char(99),char(54),char(68),char(111),char(102),char(83),char(112),char(114),char(105),char(110),char(103),char(67),char(111),char(110),char(115),char(116),char(114),
|
||||||
|
char(97),char(105),char(110),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(83),char(108),char(105),char(100),char(101),char(114),char(67),char(111),char(110),
|
||||||
|
char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(68),char(97),char(116),char(97),char(0),char(83),char(111),char(102),char(116),char(66),char(111),char(100),char(121),
|
||||||
|
char(77),char(97),char(116),char(101),char(114),char(105),char(97),char(108),char(68),char(97),char(116),char(97),char(0),char(83),char(111),char(102),char(116),char(66),char(111),char(100),
|
||||||
|
char(121),char(78),char(111),char(100),char(101),char(68),char(97),char(116),char(97),char(0),char(83),char(111),char(102),char(116),char(66),char(111),char(100),char(121),char(76),char(105),
|
||||||
|
char(110),char(107),char(68),char(97),char(116),char(97),char(0),char(83),char(111),char(102),char(116),char(66),char(111),char(100),char(121),char(70),char(97),char(99),char(101),char(68),
|
||||||
|
char(97),char(116),char(97),char(0),char(83),char(111),char(102),char(116),char(66),char(111),char(100),char(121),char(84),char(101),char(116),char(114),char(97),char(68),char(97),char(116),
|
||||||
|
char(97),char(0),char(83),char(111),char(102),char(116),char(82),char(105),char(103),char(105),char(100),char(65),char(110),char(99),char(104),char(111),char(114),char(68),char(97),char(116),
|
||||||
|
char(97),char(0),char(83),char(111),char(102),char(116),char(66),char(111),char(100),char(121),char(67),char(111),char(110),char(102),char(105),char(103),char(68),char(97),char(116),char(97),
|
||||||
|
char(0),char(83),char(111),char(102),char(116),char(66),char(111),char(100),char(121),char(80),char(111),char(115),char(101),char(68),char(97),char(116),char(97),char(0),char(83),char(111),
|
||||||
|
char(102),char(116),char(66),char(111),char(100),char(121),char(67),char(108),char(117),char(115),char(116),char(101),char(114),char(68),char(97),char(116),char(97),char(0),char(98),char(116),
|
||||||
|
char(83),char(111),char(102),char(116),char(66),char(111),char(100),char(121),char(74),char(111),char(105),char(110),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),
|
||||||
|
char(83),char(111),char(102),char(116),char(66),char(111),char(100),char(121),char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97),char(0),char(0),char(0),
|
||||||
|
char(84),char(76),char(69),char(78),char(1),char(0),char(1),char(0),char(2),char(0),char(2),char(0),char(4),char(0),char(4),char(0),char(4),char(0),char(4),char(0),
|
||||||
|
char(8),char(0),char(0),char(0),char(12),char(0),char(36),char(0),char(8),char(0),char(16),char(0),char(32),char(0),char(48),char(0),char(96),char(0),char(64),char(0),
|
||||||
|
char(-128),char(0),char(20),char(0),char(48),char(0),char(80),char(0),char(16),char(0),char(84),char(0),char(-124),char(0),char(12),char(0),char(52),char(0),char(52),char(0),
|
||||||
|
char(20),char(0),char(64),char(0),char(4),char(0),char(4),char(0),char(8),char(0),char(4),char(0),char(32),char(0),char(28),char(0),char(60),char(0),char(56),char(0),
|
||||||
|
char(76),char(0),char(76),char(0),char(24),char(0),char(60),char(0),char(60),char(0),char(16),char(0),char(64),char(0),char(68),char(0),char(-48),char(1),char(0),char(1),
|
||||||
|
char(-72),char(0),char(-104),char(0),char(104),char(0),char(88),char(0),char(-24),char(1),char(-96),char(3),char(8),char(0),char(52),char(0),char(0),char(0),char(84),char(0),
|
||||||
|
char(116),char(0),char(92),char(1),char(-36),char(0),char(-44),char(0),char(-4),char(0),char(92),char(1),char(-52),char(0),char(16),char(0),char(100),char(0),char(20),char(0),
|
||||||
|
char(36),char(0),char(100),char(0),char(92),char(0),char(104),char(0),char(-64),char(0),char(92),char(1),char(104),char(0),char(-84),char(1),char(83),char(84),char(82),char(67),
|
||||||
|
char(65),char(0),char(0),char(0),char(10),char(0),char(3),char(0),char(4),char(0),char(0),char(0),char(4),char(0),char(1),char(0),char(9),char(0),char(2),char(0),
|
||||||
|
char(11),char(0),char(3),char(0),char(10),char(0),char(3),char(0),char(10),char(0),char(4),char(0),char(10),char(0),char(5),char(0),char(12),char(0),char(2),char(0),
|
||||||
|
char(9),char(0),char(6),char(0),char(9),char(0),char(7),char(0),char(13),char(0),char(1),char(0),char(7),char(0),char(8),char(0),char(14),char(0),char(1),char(0),
|
||||||
|
char(8),char(0),char(8),char(0),char(15),char(0),char(1),char(0),char(13),char(0),char(9),char(0),char(16),char(0),char(1),char(0),char(14),char(0),char(9),char(0),
|
||||||
|
char(17),char(0),char(2),char(0),char(15),char(0),char(10),char(0),char(13),char(0),char(11),char(0),char(18),char(0),char(2),char(0),char(16),char(0),char(10),char(0),
|
||||||
|
char(14),char(0),char(11),char(0),char(19),char(0),char(4),char(0),char(4),char(0),char(12),char(0),char(4),char(0),char(13),char(0),char(2),char(0),char(14),char(0),
|
||||||
|
char(2),char(0),char(15),char(0),char(20),char(0),char(6),char(0),char(13),char(0),char(16),char(0),char(13),char(0),char(17),char(0),char(4),char(0),char(18),char(0),
|
||||||
|
char(4),char(0),char(19),char(0),char(4),char(0),char(20),char(0),char(0),char(0),char(21),char(0),char(21),char(0),char(6),char(0),char(14),char(0),char(16),char(0),
|
||||||
|
char(14),char(0),char(17),char(0),char(4),char(0),char(18),char(0),char(4),char(0),char(19),char(0),char(4),char(0),char(20),char(0),char(0),char(0),char(21),char(0),
|
||||||
|
char(22),char(0),char(3),char(0),char(2),char(0),char(14),char(0),char(2),char(0),char(15),char(0),char(4),char(0),char(22),char(0),char(23),char(0),char(12),char(0),
|
||||||
|
char(13),char(0),char(23),char(0),char(13),char(0),char(24),char(0),char(13),char(0),char(25),char(0),char(4),char(0),char(26),char(0),char(4),char(0),char(27),char(0),
|
||||||
|
char(4),char(0),char(28),char(0),char(4),char(0),char(29),char(0),char(20),char(0),char(30),char(0),char(22),char(0),char(31),char(0),char(19),char(0),char(32),char(0),
|
||||||
|
char(4),char(0),char(33),char(0),char(4),char(0),char(34),char(0),char(24),char(0),char(12),char(0),char(14),char(0),char(23),char(0),char(14),char(0),char(24),char(0),
|
||||||
|
char(14),char(0),char(25),char(0),char(4),char(0),char(26),char(0),char(4),char(0),char(27),char(0),char(4),char(0),char(28),char(0),char(4),char(0),char(29),char(0),
|
||||||
|
char(21),char(0),char(30),char(0),char(22),char(0),char(31),char(0),char(4),char(0),char(33),char(0),char(4),char(0),char(34),char(0),char(19),char(0),char(32),char(0),
|
||||||
|
char(25),char(0),char(3),char(0),char(0),char(0),char(35),char(0),char(4),char(0),char(36),char(0),char(0),char(0),char(37),char(0),char(26),char(0),char(5),char(0),
|
||||||
|
char(25),char(0),char(38),char(0),char(13),char(0),char(39),char(0),char(13),char(0),char(40),char(0),char(7),char(0),char(41),char(0),char(0),char(0),char(21),char(0),
|
||||||
|
char(27),char(0),char(5),char(0),char(25),char(0),char(38),char(0),char(13),char(0),char(39),char(0),char(13),char(0),char(42),char(0),char(7),char(0),char(43),char(0),
|
||||||
|
char(4),char(0),char(44),char(0),char(28),char(0),char(2),char(0),char(13),char(0),char(45),char(0),char(7),char(0),char(46),char(0),char(29),char(0),char(4),char(0),
|
||||||
|
char(27),char(0),char(47),char(0),char(28),char(0),char(48),char(0),char(4),char(0),char(49),char(0),char(0),char(0),char(37),char(0),char(30),char(0),char(1),char(0),
|
||||||
|
char(4),char(0),char(50),char(0),char(31),char(0),char(2),char(0),char(2),char(0),char(50),char(0),char(0),char(0),char(51),char(0),char(32),char(0),char(2),char(0),
|
||||||
|
char(2),char(0),char(52),char(0),char(0),char(0),char(51),char(0),char(33),char(0),char(2),char(0),char(0),char(0),char(52),char(0),char(0),char(0),char(53),char(0),
|
||||||
|
char(34),char(0),char(8),char(0),char(13),char(0),char(54),char(0),char(14),char(0),char(55),char(0),char(30),char(0),char(56),char(0),char(32),char(0),char(57),char(0),
|
||||||
|
char(33),char(0),char(58),char(0),char(31),char(0),char(59),char(0),char(4),char(0),char(60),char(0),char(4),char(0),char(61),char(0),char(35),char(0),char(4),char(0),
|
||||||
|
char(34),char(0),char(62),char(0),char(13),char(0),char(63),char(0),char(4),char(0),char(64),char(0),char(0),char(0),char(37),char(0),char(36),char(0),char(7),char(0),
|
||||||
|
char(25),char(0),char(38),char(0),char(35),char(0),char(65),char(0),char(23),char(0),char(66),char(0),char(24),char(0),char(67),char(0),char(37),char(0),char(68),char(0),
|
||||||
|
char(7),char(0),char(43),char(0),char(0),char(0),char(69),char(0),char(38),char(0),char(2),char(0),char(36),char(0),char(70),char(0),char(13),char(0),char(39),char(0),
|
||||||
|
char(39),char(0),char(4),char(0),char(17),char(0),char(71),char(0),char(25),char(0),char(72),char(0),char(4),char(0),char(73),char(0),char(7),char(0),char(74),char(0),
|
||||||
|
char(40),char(0),char(4),char(0),char(25),char(0),char(38),char(0),char(39),char(0),char(75),char(0),char(4),char(0),char(76),char(0),char(7),char(0),char(43),char(0),
|
||||||
|
char(41),char(0),char(3),char(0),char(27),char(0),char(47),char(0),char(4),char(0),char(77),char(0),char(0),char(0),char(37),char(0),char(42),char(0),char(3),char(0),
|
||||||
|
char(27),char(0),char(47),char(0),char(4),char(0),char(77),char(0),char(0),char(0),char(37),char(0),char(43),char(0),char(4),char(0),char(4),char(0),char(78),char(0),
|
||||||
|
char(7),char(0),char(79),char(0),char(7),char(0),char(80),char(0),char(7),char(0),char(81),char(0),char(37),char(0),char(14),char(0),char(4),char(0),char(82),char(0),
|
||||||
|
char(4),char(0),char(83),char(0),char(43),char(0),char(84),char(0),char(4),char(0),char(85),char(0),char(7),char(0),char(86),char(0),char(7),char(0),char(87),char(0),
|
||||||
|
char(7),char(0),char(88),char(0),char(7),char(0),char(89),char(0),char(7),char(0),char(90),char(0),char(4),char(0),char(91),char(0),char(4),char(0),char(92),char(0),
|
||||||
|
char(4),char(0),char(93),char(0),char(4),char(0),char(94),char(0),char(0),char(0),char(37),char(0),char(44),char(0),char(5),char(0),char(25),char(0),char(38),char(0),
|
||||||
|
char(35),char(0),char(65),char(0),char(13),char(0),char(39),char(0),char(7),char(0),char(43),char(0),char(4),char(0),char(95),char(0),char(45),char(0),char(5),char(0),
|
||||||
|
char(27),char(0),char(47),char(0),char(13),char(0),char(96),char(0),char(14),char(0),char(97),char(0),char(4),char(0),char(98),char(0),char(0),char(0),char(99),char(0),
|
||||||
|
char(46),char(0),char(25),char(0),char(9),char(0),char(100),char(0),char(9),char(0),char(101),char(0),char(25),char(0),char(102),char(0),char(0),char(0),char(35),char(0),
|
||||||
|
char(18),char(0),char(103),char(0),char(18),char(0),char(104),char(0),char(14),char(0),char(105),char(0),char(14),char(0),char(106),char(0),char(14),char(0),char(107),char(0),
|
||||||
|
char(8),char(0),char(108),char(0),char(8),char(0),char(109),char(0),char(8),char(0),char(110),char(0),char(8),char(0),char(111),char(0),char(8),char(0),char(112),char(0),
|
||||||
|
char(8),char(0),char(113),char(0),char(8),char(0),char(114),char(0),char(8),char(0),char(115),char(0),char(4),char(0),char(116),char(0),char(4),char(0),char(117),char(0),
|
||||||
|
char(4),char(0),char(118),char(0),char(4),char(0),char(119),char(0),char(4),char(0),char(120),char(0),char(4),char(0),char(121),char(0),char(4),char(0),char(122),char(0),
|
||||||
|
char(0),char(0),char(37),char(0),char(47),char(0),char(25),char(0),char(9),char(0),char(100),char(0),char(9),char(0),char(101),char(0),char(25),char(0),char(102),char(0),
|
||||||
|
char(0),char(0),char(35),char(0),char(17),char(0),char(103),char(0),char(17),char(0),char(104),char(0),char(13),char(0),char(105),char(0),char(13),char(0),char(106),char(0),
|
||||||
|
char(13),char(0),char(107),char(0),char(7),char(0),char(108),char(0),char(7),char(0),char(109),char(0),char(7),char(0),char(110),char(0),char(7),char(0),char(111),char(0),
|
||||||
|
char(7),char(0),char(112),char(0),char(7),char(0),char(113),char(0),char(7),char(0),char(114),char(0),char(7),char(0),char(115),char(0),char(4),char(0),char(116),char(0),
|
||||||
|
char(4),char(0),char(117),char(0),char(4),char(0),char(118),char(0),char(4),char(0),char(119),char(0),char(4),char(0),char(120),char(0),char(4),char(0),char(121),char(0),
|
||||||
|
char(4),char(0),char(122),char(0),char(0),char(0),char(37),char(0),char(48),char(0),char(2),char(0),char(49),char(0),char(123),char(0),char(14),char(0),char(124),char(0),
|
||||||
|
char(50),char(0),char(2),char(0),char(51),char(0),char(123),char(0),char(13),char(0),char(124),char(0),char(52),char(0),char(21),char(0),char(47),char(0),char(125),char(0),
|
||||||
|
char(15),char(0),char(126),char(0),char(13),char(0),char(127),char(0),char(13),char(0),char(-128),char(0),char(13),char(0),char(-127),char(0),char(13),char(0),char(-126),char(0),
|
||||||
|
char(13),char(0),char(124),char(0),char(13),char(0),char(-125),char(0),char(13),char(0),char(-124),char(0),char(13),char(0),char(-123),char(0),char(13),char(0),char(-122),char(0),
|
||||||
|
char(7),char(0),char(-121),char(0),char(7),char(0),char(-120),char(0),char(7),char(0),char(-119),char(0),char(7),char(0),char(-118),char(0),char(7),char(0),char(-117),char(0),
|
||||||
|
char(7),char(0),char(-116),char(0),char(7),char(0),char(-115),char(0),char(7),char(0),char(-114),char(0),char(7),char(0),char(-113),char(0),char(4),char(0),char(-112),char(0),
|
||||||
|
char(53),char(0),char(22),char(0),char(46),char(0),char(125),char(0),char(16),char(0),char(126),char(0),char(14),char(0),char(127),char(0),char(14),char(0),char(-128),char(0),
|
||||||
|
char(14),char(0),char(-127),char(0),char(14),char(0),char(-126),char(0),char(14),char(0),char(124),char(0),char(14),char(0),char(-125),char(0),char(14),char(0),char(-124),char(0),
|
||||||
|
char(14),char(0),char(-123),char(0),char(14),char(0),char(-122),char(0),char(8),char(0),char(-121),char(0),char(8),char(0),char(-120),char(0),char(8),char(0),char(-119),char(0),
|
||||||
|
char(8),char(0),char(-118),char(0),char(8),char(0),char(-117),char(0),char(8),char(0),char(-116),char(0),char(8),char(0),char(-115),char(0),char(8),char(0),char(-114),char(0),
|
||||||
|
char(8),char(0),char(-113),char(0),char(4),char(0),char(-112),char(0),char(0),char(0),char(37),char(0),char(54),char(0),char(2),char(0),char(4),char(0),char(-111),char(0),
|
||||||
|
char(4),char(0),char(-110),char(0),char(55),char(0),char(13),char(0),char(56),char(0),char(-109),char(0),char(56),char(0),char(-108),char(0),char(0),char(0),char(35),char(0),
|
||||||
|
char(4),char(0),char(-107),char(0),char(4),char(0),char(-106),char(0),char(4),char(0),char(-105),char(0),char(4),char(0),char(-104),char(0),char(7),char(0),char(-103),char(0),
|
||||||
|
char(7),char(0),char(-102),char(0),char(4),char(0),char(-101),char(0),char(4),char(0),char(-100),char(0),char(7),char(0),char(-99),char(0),char(4),char(0),char(-98),char(0),
|
||||||
|
char(57),char(0),char(3),char(0),char(55),char(0),char(-97),char(0),char(13),char(0),char(-96),char(0),char(13),char(0),char(-95),char(0),char(58),char(0),char(3),char(0),
|
||||||
|
char(55),char(0),char(-97),char(0),char(14),char(0),char(-96),char(0),char(14),char(0),char(-95),char(0),char(59),char(0),char(13),char(0),char(55),char(0),char(-97),char(0),
|
||||||
|
char(18),char(0),char(-94),char(0),char(18),char(0),char(-93),char(0),char(4),char(0),char(-92),char(0),char(4),char(0),char(-91),char(0),char(4),char(0),char(-90),char(0),
|
||||||
|
char(7),char(0),char(-89),char(0),char(7),char(0),char(-88),char(0),char(7),char(0),char(-87),char(0),char(7),char(0),char(-86),char(0),char(7),char(0),char(-85),char(0),
|
||||||
|
char(7),char(0),char(-84),char(0),char(7),char(0),char(-83),char(0),char(60),char(0),char(13),char(0),char(55),char(0),char(-97),char(0),char(17),char(0),char(-94),char(0),
|
||||||
|
char(17),char(0),char(-93),char(0),char(4),char(0),char(-92),char(0),char(4),char(0),char(-91),char(0),char(4),char(0),char(-90),char(0),char(7),char(0),char(-89),char(0),
|
||||||
|
char(7),char(0),char(-88),char(0),char(7),char(0),char(-87),char(0),char(7),char(0),char(-86),char(0),char(7),char(0),char(-85),char(0),char(7),char(0),char(-84),char(0),
|
||||||
|
char(7),char(0),char(-83),char(0),char(61),char(0),char(11),char(0),char(55),char(0),char(-97),char(0),char(17),char(0),char(-94),char(0),char(17),char(0),char(-93),char(0),
|
||||||
|
char(7),char(0),char(-82),char(0),char(7),char(0),char(-81),char(0),char(7),char(0),char(-80),char(0),char(7),char(0),char(-85),char(0),char(7),char(0),char(-84),char(0),
|
||||||
|
char(7),char(0),char(-83),char(0),char(7),char(0),char(-79),char(0),char(0),char(0),char(21),char(0),char(62),char(0),char(9),char(0),char(55),char(0),char(-97),char(0),
|
||||||
|
char(17),char(0),char(-94),char(0),char(17),char(0),char(-93),char(0),char(13),char(0),char(-78),char(0),char(13),char(0),char(-77),char(0),char(13),char(0),char(-76),char(0),
|
||||||
|
char(13),char(0),char(-75),char(0),char(4),char(0),char(-74),char(0),char(4),char(0),char(-73),char(0),char(63),char(0),char(5),char(0),char(62),char(0),char(-72),char(0),
|
||||||
|
char(4),char(0),char(-71),char(0),char(7),char(0),char(-70),char(0),char(7),char(0),char(-69),char(0),char(7),char(0),char(-68),char(0),char(64),char(0),char(9),char(0),
|
||||||
|
char(55),char(0),char(-97),char(0),char(17),char(0),char(-94),char(0),char(17),char(0),char(-93),char(0),char(7),char(0),char(-78),char(0),char(7),char(0),char(-77),char(0),
|
||||||
|
char(7),char(0),char(-76),char(0),char(7),char(0),char(-75),char(0),char(4),char(0),char(-74),char(0),char(4),char(0),char(-73),char(0),char(49),char(0),char(22),char(0),
|
||||||
|
char(8),char(0),char(-67),char(0),char(8),char(0),char(-79),char(0),char(8),char(0),char(110),char(0),char(8),char(0),char(-66),char(0),char(8),char(0),char(112),char(0),
|
||||||
|
char(8),char(0),char(-65),char(0),char(8),char(0),char(-64),char(0),char(8),char(0),char(-63),char(0),char(8),char(0),char(-62),char(0),char(8),char(0),char(-61),char(0),
|
||||||
|
char(8),char(0),char(-60),char(0),char(8),char(0),char(-59),char(0),char(8),char(0),char(-58),char(0),char(8),char(0),char(-57),char(0),char(8),char(0),char(-56),char(0),
|
||||||
|
char(8),char(0),char(-55),char(0),char(4),char(0),char(-54),char(0),char(4),char(0),char(-53),char(0),char(4),char(0),char(-52),char(0),char(4),char(0),char(-51),char(0),
|
||||||
|
char(4),char(0),char(-50),char(0),char(0),char(0),char(37),char(0),char(51),char(0),char(22),char(0),char(7),char(0),char(-67),char(0),char(7),char(0),char(-79),char(0),
|
||||||
|
char(7),char(0),char(110),char(0),char(7),char(0),char(-66),char(0),char(7),char(0),char(112),char(0),char(7),char(0),char(-65),char(0),char(7),char(0),char(-64),char(0),
|
||||||
|
char(7),char(0),char(-63),char(0),char(7),char(0),char(-62),char(0),char(7),char(0),char(-61),char(0),char(7),char(0),char(-60),char(0),char(7),char(0),char(-59),char(0),
|
||||||
|
char(7),char(0),char(-58),char(0),char(7),char(0),char(-57),char(0),char(7),char(0),char(-56),char(0),char(7),char(0),char(-55),char(0),char(4),char(0),char(-54),char(0),
|
||||||
|
char(4),char(0),char(-53),char(0),char(4),char(0),char(-52),char(0),char(4),char(0),char(-51),char(0),char(4),char(0),char(-50),char(0),char(0),char(0),char(37),char(0),
|
||||||
|
char(65),char(0),char(4),char(0),char(7),char(0),char(-49),char(0),char(7),char(0),char(-48),char(0),char(7),char(0),char(-47),char(0),char(4),char(0),char(78),char(0),
|
||||||
|
char(66),char(0),char(10),char(0),char(65),char(0),char(-46),char(0),char(13),char(0),char(-45),char(0),char(13),char(0),char(-44),char(0),char(13),char(0),char(-43),char(0),
|
||||||
|
char(13),char(0),char(-42),char(0),char(13),char(0),char(-41),char(0),char(7),char(0),char(-121),char(0),char(7),char(0),char(-40),char(0),char(4),char(0),char(-39),char(0),
|
||||||
|
char(4),char(0),char(53),char(0),char(67),char(0),char(4),char(0),char(65),char(0),char(-46),char(0),char(4),char(0),char(-38),char(0),char(7),char(0),char(-37),char(0),
|
||||||
|
char(4),char(0),char(-36),char(0),char(68),char(0),char(4),char(0),char(13),char(0),char(-41),char(0),char(65),char(0),char(-46),char(0),char(4),char(0),char(-35),char(0),
|
||||||
|
char(7),char(0),char(-34),char(0),char(69),char(0),char(7),char(0),char(13),char(0),char(-33),char(0),char(65),char(0),char(-46),char(0),char(4),char(0),char(-32),char(0),
|
||||||
|
char(7),char(0),char(-31),char(0),char(7),char(0),char(-30),char(0),char(7),char(0),char(-29),char(0),char(4),char(0),char(53),char(0),char(70),char(0),char(6),char(0),
|
||||||
|
char(15),char(0),char(-28),char(0),char(13),char(0),char(-30),char(0),char(13),char(0),char(-27),char(0),char(56),char(0),char(-26),char(0),char(4),char(0),char(-25),char(0),
|
||||||
|
char(7),char(0),char(-29),char(0),char(71),char(0),char(26),char(0),char(4),char(0),char(-24),char(0),char(7),char(0),char(-23),char(0),char(7),char(0),char(-79),char(0),
|
||||||
|
char(7),char(0),char(-22),char(0),char(7),char(0),char(-21),char(0),char(7),char(0),char(-20),char(0),char(7),char(0),char(-19),char(0),char(7),char(0),char(-18),char(0),
|
||||||
|
char(7),char(0),char(-17),char(0),char(7),char(0),char(-16),char(0),char(7),char(0),char(-15),char(0),char(7),char(0),char(-14),char(0),char(7),char(0),char(-13),char(0),
|
||||||
|
char(7),char(0),char(-12),char(0),char(7),char(0),char(-11),char(0),char(7),char(0),char(-10),char(0),char(7),char(0),char(-9),char(0),char(7),char(0),char(-8),char(0),
|
||||||
|
char(7),char(0),char(-7),char(0),char(7),char(0),char(-6),char(0),char(7),char(0),char(-5),char(0),char(4),char(0),char(-4),char(0),char(4),char(0),char(-3),char(0),
|
||||||
|
char(4),char(0),char(-2),char(0),char(4),char(0),char(-1),char(0),char(4),char(0),char(117),char(0),char(72),char(0),char(12),char(0),char(15),char(0),char(0),char(1),
|
||||||
|
char(15),char(0),char(1),char(1),char(15),char(0),char(2),char(1),char(13),char(0),char(3),char(1),char(13),char(0),char(4),char(1),char(7),char(0),char(5),char(1),
|
||||||
|
char(4),char(0),char(6),char(1),char(4),char(0),char(7),char(1),char(4),char(0),char(8),char(1),char(4),char(0),char(9),char(1),char(7),char(0),char(-31),char(0),
|
||||||
|
char(4),char(0),char(53),char(0),char(73),char(0),char(27),char(0),char(17),char(0),char(10),char(1),char(15),char(0),char(11),char(1),char(15),char(0),char(12),char(1),
|
||||||
|
char(13),char(0),char(3),char(1),char(13),char(0),char(13),char(1),char(13),char(0),char(14),char(1),char(13),char(0),char(15),char(1),char(13),char(0),char(16),char(1),
|
||||||
|
char(13),char(0),char(17),char(1),char(4),char(0),char(18),char(1),char(7),char(0),char(19),char(1),char(4),char(0),char(20),char(1),char(4),char(0),char(21),char(1),
|
||||||
|
char(4),char(0),char(22),char(1),char(7),char(0),char(23),char(1),char(7),char(0),char(24),char(1),char(4),char(0),char(25),char(1),char(4),char(0),char(26),char(1),
|
||||||
|
char(7),char(0),char(27),char(1),char(7),char(0),char(28),char(1),char(7),char(0),char(29),char(1),char(7),char(0),char(30),char(1),char(7),char(0),char(31),char(1),
|
||||||
|
char(7),char(0),char(32),char(1),char(4),char(0),char(33),char(1),char(4),char(0),char(34),char(1),char(4),char(0),char(35),char(1),char(74),char(0),char(12),char(0),
|
||||||
|
char(9),char(0),char(36),char(1),char(9),char(0),char(37),char(1),char(13),char(0),char(38),char(1),char(7),char(0),char(39),char(1),char(7),char(0),char(-63),char(0),
|
||||||
|
char(7),char(0),char(40),char(1),char(4),char(0),char(41),char(1),char(13),char(0),char(42),char(1),char(4),char(0),char(43),char(1),char(4),char(0),char(44),char(1),
|
||||||
|
char(4),char(0),char(45),char(1),char(4),char(0),char(53),char(0),char(75),char(0),char(19),char(0),char(47),char(0),char(125),char(0),char(72),char(0),char(46),char(1),
|
||||||
|
char(65),char(0),char(47),char(1),char(66),char(0),char(48),char(1),char(67),char(0),char(49),char(1),char(68),char(0),char(50),char(1),char(69),char(0),char(51),char(1),
|
||||||
|
char(70),char(0),char(52),char(1),char(73),char(0),char(53),char(1),char(74),char(0),char(54),char(1),char(4),char(0),char(55),char(1),char(4),char(0),char(21),char(1),
|
||||||
|
char(4),char(0),char(56),char(1),char(4),char(0),char(57),char(1),char(4),char(0),char(58),char(1),char(4),char(0),char(59),char(1),char(4),char(0),char(60),char(1),
|
||||||
|
char(4),char(0),char(61),char(1),char(71),char(0),char(62),char(1),};
|
||||||
|
int sBulletDNAlen= sizeof(sBulletDNAstr);
|
||||||
|
char sBulletDNAstr64[]= {
|
||||||
|
char(83),char(68),char(78),char(65),char(78),char(65),char(77),char(69),char(63),char(1),char(0),char(0),char(109),char(95),char(115),char(105),char(122),char(101),char(0),char(109),
|
||||||
|
char(95),char(99),char(97),char(112),char(97),char(99),char(105),char(116),char(121),char(0),char(42),char(109),char(95),char(100),char(97),char(116),char(97),char(0),char(109),char(95),
|
||||||
|
char(99),char(111),char(108),char(108),char(105),char(115),char(105),char(111),char(110),char(83),char(104),char(97),char(112),char(101),char(115),char(0),char(109),char(95),char(99),char(111),
|
||||||
|
char(108),char(108),char(105),char(115),char(105),char(111),char(110),char(79),char(98),char(106),char(101),char(99),char(116),char(115),char(0),char(109),char(95),char(99),char(111),char(110),
|
||||||
|
char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(115),char(0),char(42),char(102),char(105),char(114),char(115),char(116),char(0),char(42),char(108),char(97),char(115),
|
||||||
|
char(116),char(0),char(109),char(95),char(102),char(108),char(111),char(97),char(116),char(115),char(91),char(52),char(93),char(0),char(109),char(95),char(101),char(108),char(91),char(51),
|
||||||
|
char(93),char(0),char(109),char(95),char(98),char(97),char(115),char(105),char(115),char(0),char(109),char(95),char(111),char(114),char(105),char(103),char(105),char(110),char(0),char(109),
|
||||||
|
char(95),char(114),char(111),char(111),char(116),char(78),char(111),char(100),char(101),char(73),char(110),char(100),char(101),char(120),char(0),char(109),char(95),char(115),char(117),char(98),
|
||||||
|
char(116),char(114),char(101),char(101),char(83),char(105),char(122),char(101),char(0),char(109),char(95),char(113),char(117),char(97),char(110),char(116),char(105),char(122),char(101),char(100),
|
||||||
|
char(65),char(97),char(98),char(98),char(77),char(105),char(110),char(91),char(51),char(93),char(0),char(109),char(95),char(113),char(117),char(97),char(110),char(116),char(105),char(122),
|
||||||
|
char(101),char(100),char(65),char(97),char(98),char(98),char(77),char(97),char(120),char(91),char(51),char(93),char(0),char(109),char(95),char(97),char(97),char(98),char(98),char(77),
|
||||||
|
char(105),char(110),char(79),char(114),char(103),char(0),char(109),char(95),char(97),char(97),char(98),char(98),char(77),char(97),char(120),char(79),char(114),char(103),char(0),char(109),
|
||||||
|
char(95),char(101),char(115),char(99),char(97),char(112),char(101),char(73),char(110),char(100),char(101),char(120),char(0),char(109),char(95),char(115),char(117),char(98),char(80),char(97),
|
||||||
|
char(114),char(116),char(0),char(109),char(95),char(116),char(114),char(105),char(97),char(110),char(103),char(108),char(101),char(73),char(110),char(100),char(101),char(120),char(0),char(109),
|
||||||
|
char(95),char(112),char(97),char(100),char(91),char(52),char(93),char(0),char(109),char(95),char(101),char(115),char(99),char(97),char(112),char(101),char(73),char(110),char(100),char(101),
|
||||||
|
char(120),char(79),char(114),char(84),char(114),char(105),char(97),char(110),char(103),char(108),char(101),char(73),char(110),char(100),char(101),char(120),char(0),char(109),char(95),char(98),
|
||||||
|
char(118),char(104),char(65),char(97),char(98),char(98),char(77),char(105),char(110),char(0),char(109),char(95),char(98),char(118),char(104),char(65),char(97),char(98),char(98),char(77),
|
||||||
|
char(97),char(120),char(0),char(109),char(95),char(98),char(118),char(104),char(81),char(117),char(97),char(110),char(116),char(105),char(122),char(97),char(116),char(105),char(111),char(110),
|
||||||
|
char(0),char(109),char(95),char(99),char(117),char(114),char(78),char(111),char(100),char(101),char(73),char(110),char(100),char(101),char(120),char(0),char(109),char(95),char(117),char(115),
|
||||||
|
char(101),char(81),char(117),char(97),char(110),char(116),char(105),char(122),char(97),char(116),char(105),char(111),char(110),char(0),char(109),char(95),char(110),char(117),char(109),char(67),
|
||||||
|
char(111),char(110),char(116),char(105),char(103),char(117),char(111),char(117),char(115),char(76),char(101),char(97),char(102),char(78),char(111),char(100),char(101),char(115),char(0),char(109),
|
||||||
|
char(95),char(110),char(117),char(109),char(81),char(117),char(97),char(110),char(116),char(105),char(122),char(101),char(100),char(67),char(111),char(110),char(116),char(105),char(103),char(117),
|
||||||
|
char(111),char(117),char(115),char(78),char(111),char(100),char(101),char(115),char(0),char(42),char(109),char(95),char(99),char(111),char(110),char(116),char(105),char(103),char(117),char(111),
|
||||||
|
char(117),char(115),char(78),char(111),char(100),char(101),char(115),char(80),char(116),char(114),char(0),char(42),char(109),char(95),char(113),char(117),char(97),char(110),char(116),char(105),
|
||||||
|
char(122),char(101),char(100),char(67),char(111),char(110),char(116),char(105),char(103),char(117),char(111),char(117),char(115),char(78),char(111),char(100),char(101),char(115),char(80),char(116),
|
||||||
|
char(114),char(0),char(42),char(109),char(95),char(115),char(117),char(98),char(84),char(114),char(101),char(101),char(73),char(110),char(102),char(111),char(80),char(116),char(114),char(0),
|
||||||
|
char(109),char(95),char(116),char(114),char(97),char(118),char(101),char(114),char(115),char(97),char(108),char(77),char(111),char(100),char(101),char(0),char(109),char(95),char(110),char(117),
|
||||||
|
char(109),char(83),char(117),char(98),char(116),char(114),char(101),char(101),char(72),char(101),char(97),char(100),char(101),char(114),char(115),char(0),char(42),char(109),char(95),char(110),
|
||||||
|
char(97),char(109),char(101),char(0),char(109),char(95),char(115),char(104),char(97),char(112),char(101),char(84),char(121),char(112),char(101),char(0),char(109),char(95),char(112),char(97),
|
||||||
|
char(100),char(100),char(105),char(110),char(103),char(91),char(52),char(93),char(0),char(109),char(95),char(99),char(111),char(108),char(108),char(105),char(115),char(105),char(111),char(110),
|
||||||
|
char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),char(97),char(0),char(109),char(95),char(108),char(111),char(99),char(97),char(108),char(83),char(99),char(97),
|
||||||
|
char(108),char(105),char(110),char(103),char(0),char(109),char(95),char(112),char(108),char(97),char(110),char(101),char(78),char(111),char(114),char(109),char(97),char(108),char(0),char(109),
|
||||||
|
char(95),char(112),char(108),char(97),char(110),char(101),char(67),char(111),char(110),char(115),char(116),char(97),char(110),char(116),char(0),char(109),char(95),char(105),char(109),char(112),
|
||||||
|
char(108),char(105),char(99),char(105),char(116),char(83),char(104),char(97),char(112),char(101),char(68),char(105),char(109),char(101),char(110),char(115),char(105),char(111),char(110),char(115),
|
||||||
|
char(0),char(109),char(95),char(99),char(111),char(108),char(108),char(105),char(115),char(105),char(111),char(110),char(77),char(97),char(114),char(103),char(105),char(110),char(0),char(109),
|
||||||
|
char(95),char(112),char(97),char(100),char(100),char(105),char(110),char(103),char(0),char(109),char(95),char(112),char(111),char(115),char(0),char(109),char(95),char(114),char(97),char(100),
|
||||||
|
char(105),char(117),char(115),char(0),char(109),char(95),char(99),char(111),char(110),char(118),char(101),char(120),char(73),char(110),char(116),char(101),char(114),char(110),char(97),char(108),
|
||||||
|
char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),char(97),char(0),char(42),char(109),char(95),char(108),char(111),char(99),char(97),char(108),char(80),char(111),
|
||||||
|
char(115),char(105),char(116),char(105),char(111),char(110),char(65),char(114),char(114),char(97),char(121),char(80),char(116),char(114),char(0),char(109),char(95),char(108),char(111),char(99),
|
||||||
|
char(97),char(108),char(80),char(111),char(115),char(105),char(116),char(105),char(111),char(110),char(65),char(114),char(114),char(97),char(121),char(83),char(105),char(122),char(101),char(0),
|
||||||
|
char(109),char(95),char(118),char(97),char(108),char(117),char(101),char(0),char(109),char(95),char(112),char(97),char(100),char(91),char(50),char(93),char(0),char(109),char(95),char(118),
|
||||||
|
char(97),char(108),char(117),char(101),char(115),char(91),char(51),char(93),char(0),char(109),char(95),char(112),char(97),char(100),char(0),char(42),char(109),char(95),char(118),char(101),
|
||||||
|
char(114),char(116),char(105),char(99),char(101),char(115),char(51),char(102),char(0),char(42),char(109),char(95),char(118),char(101),char(114),char(116),char(105),char(99),char(101),char(115),
|
||||||
|
char(51),char(100),char(0),char(42),char(109),char(95),char(105),char(110),char(100),char(105),char(99),char(101),char(115),char(51),char(50),char(0),char(42),char(109),char(95),char(51),
|
||||||
|
char(105),char(110),char(100),char(105),char(99),char(101),char(115),char(49),char(54),char(0),char(42),char(109),char(95),char(51),char(105),char(110),char(100),char(105),char(99),char(101),
|
||||||
|
char(115),char(56),char(0),char(42),char(109),char(95),char(105),char(110),char(100),char(105),char(99),char(101),char(115),char(49),char(54),char(0),char(109),char(95),char(110),char(117),
|
||||||
|
char(109),char(84),char(114),char(105),char(97),char(110),char(103),char(108),char(101),char(115),char(0),char(109),char(95),char(110),char(117),char(109),char(86),char(101),char(114),char(116),
|
||||||
|
char(105),char(99),char(101),char(115),char(0),char(42),char(109),char(95),char(109),char(101),char(115),char(104),char(80),char(97),char(114),char(116),char(115),char(80),char(116),char(114),
|
||||||
|
char(0),char(109),char(95),char(115),char(99),char(97),char(108),char(105),char(110),char(103),char(0),char(109),char(95),char(110),char(117),char(109),char(77),char(101),char(115),char(104),
|
||||||
|
char(80),char(97),char(114),char(116),char(115),char(0),char(109),char(95),char(109),char(101),char(115),char(104),char(73),char(110),char(116),char(101),char(114),char(102),char(97),char(99),
|
||||||
|
char(101),char(0),char(42),char(109),char(95),char(113),char(117),char(97),char(110),char(116),char(105),char(122),char(101),char(100),char(70),char(108),char(111),char(97),char(116),char(66),
|
||||||
|
char(118),char(104),char(0),char(42),char(109),char(95),char(113),char(117),char(97),char(110),char(116),char(105),char(122),char(101),char(100),char(68),char(111),char(117),char(98),char(108),
|
||||||
|
char(101),char(66),char(118),char(104),char(0),char(42),char(109),char(95),char(116),char(114),char(105),char(97),char(110),char(103),char(108),char(101),char(73),char(110),char(102),char(111),
|
||||||
|
char(77),char(97),char(112),char(0),char(109),char(95),char(112),char(97),char(100),char(51),char(91),char(52),char(93),char(0),char(109),char(95),char(116),char(114),char(105),char(109),
|
||||||
|
char(101),char(115),char(104),char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),char(97),char(0),char(109),char(95),char(116),char(114),char(97),char(110),char(115),
|
||||||
|
char(102),char(111),char(114),char(109),char(0),char(42),char(109),char(95),char(99),char(104),char(105),char(108),char(100),char(83),char(104),char(97),char(112),char(101),char(0),char(109),
|
||||||
|
char(95),char(99),char(104),char(105),char(108),char(100),char(83),char(104),char(97),char(112),char(101),char(84),char(121),char(112),char(101),char(0),char(109),char(95),char(99),char(104),
|
||||||
|
char(105),char(108),char(100),char(77),char(97),char(114),char(103),char(105),char(110),char(0),char(42),char(109),char(95),char(99),char(104),char(105),char(108),char(100),char(83),char(104),
|
||||||
|
char(97),char(112),char(101),char(80),char(116),char(114),char(0),char(109),char(95),char(110),char(117),char(109),char(67),char(104),char(105),char(108),char(100),char(83),char(104),char(97),
|
||||||
|
char(112),char(101),char(115),char(0),char(109),char(95),char(117),char(112),char(65),char(120),char(105),char(115),char(0),char(109),char(95),char(102),char(108),char(97),char(103),char(115),
|
||||||
|
char(0),char(109),char(95),char(101),char(100),char(103),char(101),char(86),char(48),char(86),char(49),char(65),char(110),char(103),char(108),char(101),char(0),char(109),char(95),char(101),
|
||||||
|
char(100),char(103),char(101),char(86),char(49),char(86),char(50),char(65),char(110),char(103),char(108),char(101),char(0),char(109),char(95),char(101),char(100),char(103),char(101),char(86),
|
||||||
|
char(50),char(86),char(48),char(65),char(110),char(103),char(108),char(101),char(0),char(42),char(109),char(95),char(104),char(97),char(115),char(104),char(84),char(97),char(98),char(108),
|
||||||
|
char(101),char(80),char(116),char(114),char(0),char(42),char(109),char(95),char(110),char(101),char(120),char(116),char(80),char(116),char(114),char(0),char(42),char(109),char(95),char(118),
|
||||||
|
char(97),char(108),char(117),char(101),char(65),char(114),char(114),char(97),char(121),char(80),char(116),char(114),char(0),char(42),char(109),char(95),char(107),char(101),char(121),char(65),
|
||||||
|
char(114),char(114),char(97),char(121),char(80),char(116),char(114),char(0),char(109),char(95),char(99),char(111),char(110),char(118),char(101),char(120),char(69),char(112),char(115),char(105),
|
||||||
|
char(108),char(111),char(110),char(0),char(109),char(95),char(112),char(108),char(97),char(110),char(97),char(114),char(69),char(112),char(115),char(105),char(108),char(111),char(110),char(0),
|
||||||
|
char(109),char(95),char(101),char(113),char(117),char(97),char(108),char(86),char(101),char(114),char(116),char(101),char(120),char(84),char(104),char(114),char(101),char(115),char(104),char(111),
|
||||||
|
char(108),char(100),char(0),char(109),char(95),char(101),char(100),char(103),char(101),char(68),char(105),char(115),char(116),char(97),char(110),char(99),char(101),char(84),char(104),char(114),
|
||||||
|
char(101),char(115),char(104),char(111),char(108),char(100),char(0),char(109),char(95),char(122),char(101),char(114),char(111),char(65),char(114),char(101),char(97),char(84),char(104),char(114),
|
||||||
|
char(101),char(115),char(104),char(111),char(108),char(100),char(0),char(109),char(95),char(110),char(101),char(120),char(116),char(83),char(105),char(122),char(101),char(0),char(109),char(95),
|
||||||
|
char(104),char(97),char(115),char(104),char(84),char(97),char(98),char(108),char(101),char(83),char(105),char(122),char(101),char(0),char(109),char(95),char(110),char(117),char(109),char(86),
|
||||||
|
char(97),char(108),char(117),char(101),char(115),char(0),char(109),char(95),char(110),char(117),char(109),char(75),char(101),char(121),char(115),char(0),char(109),char(95),char(103),char(105),
|
||||||
|
char(109),char(112),char(97),char(99),char(116),char(83),char(117),char(98),char(84),char(121),char(112),char(101),char(0),char(42),char(109),char(95),char(117),char(110),char(115),char(99),
|
||||||
|
char(97),char(108),char(101),char(100),char(80),char(111),char(105),char(110),char(116),char(115),char(70),char(108),char(111),char(97),char(116),char(80),char(116),char(114),char(0),char(42),
|
||||||
|
char(109),char(95),char(117),char(110),char(115),char(99),char(97),char(108),char(101),char(100),char(80),char(111),char(105),char(110),char(116),char(115),char(68),char(111),char(117),char(98),
|
||||||
|
char(108),char(101),char(80),char(116),char(114),char(0),char(109),char(95),char(110),char(117),char(109),char(85),char(110),char(115),char(99),char(97),char(108),char(101),char(100),char(80),
|
||||||
|
char(111),char(105),char(110),char(116),char(115),char(0),char(109),char(95),char(112),char(97),char(100),char(100),char(105),char(110),char(103),char(51),char(91),char(52),char(93),char(0),
|
||||||
|
char(42),char(109),char(95),char(98),char(114),char(111),char(97),char(100),char(112),char(104),char(97),char(115),char(101),char(72),char(97),char(110),char(100),char(108),char(101),char(0),
|
||||||
|
char(42),char(109),char(95),char(99),char(111),char(108),char(108),char(105),char(115),char(105),char(111),char(110),char(83),char(104),char(97),char(112),char(101),char(0),char(42),char(109),
|
||||||
|
char(95),char(114),char(111),char(111),char(116),char(67),char(111),char(108),char(108),char(105),char(115),char(105),char(111),char(110),char(83),char(104),char(97),char(112),char(101),char(0),
|
||||||
|
char(109),char(95),char(119),char(111),char(114),char(108),char(100),char(84),char(114),char(97),char(110),char(115),char(102),char(111),char(114),char(109),char(0),char(109),char(95),char(105),
|
||||||
|
char(110),char(116),char(101),char(114),char(112),char(111),char(108),char(97),char(116),char(105),char(111),char(110),char(87),char(111),char(114),char(108),char(100),char(84),char(114),char(97),
|
||||||
|
char(110),char(115),char(102),char(111),char(114),char(109),char(0),char(109),char(95),char(105),char(110),char(116),char(101),char(114),char(112),char(111),char(108),char(97),char(116),char(105),
|
||||||
|
char(111),char(110),char(76),char(105),char(110),char(101),char(97),char(114),char(86),char(101),char(108),char(111),char(99),char(105),char(116),char(121),char(0),char(109),char(95),char(105),
|
||||||
|
char(110),char(116),char(101),char(114),char(112),char(111),char(108),char(97),char(116),char(105),char(111),char(110),char(65),char(110),char(103),char(117),char(108),char(97),char(114),char(86),
|
||||||
|
char(101),char(108),char(111),char(99),char(105),char(116),char(121),char(0),char(109),char(95),char(97),char(110),char(105),char(115),char(111),char(116),char(114),char(111),char(112),char(105),
|
||||||
|
char(99),char(70),char(114),char(105),char(99),char(116),char(105),char(111),char(110),char(0),char(109),char(95),char(99),char(111),char(110),char(116),char(97),char(99),char(116),char(80),
|
||||||
|
char(114),char(111),char(99),char(101),char(115),char(115),char(105),char(110),char(103),char(84),char(104),char(114),char(101),char(115),char(104),char(111),char(108),char(100),char(0),char(109),
|
||||||
|
char(95),char(100),char(101),char(97),char(99),char(116),char(105),char(118),char(97),char(116),char(105),char(111),char(110),char(84),char(105),char(109),char(101),char(0),char(109),char(95),
|
||||||
|
char(102),char(114),char(105),char(99),char(116),char(105),char(111),char(110),char(0),char(109),char(95),char(114),char(111),char(108),char(108),char(105),char(110),char(103),char(70),char(114),
|
||||||
|
char(105),char(99),char(116),char(105),char(111),char(110),char(0),char(109),char(95),char(114),char(101),char(115),char(116),char(105),char(116),char(117),char(116),char(105),char(111),char(110),
|
||||||
|
char(0),char(109),char(95),char(104),char(105),char(116),char(70),char(114),char(97),char(99),char(116),char(105),char(111),char(110),char(0),char(109),char(95),char(99),char(99),char(100),
|
||||||
|
char(83),char(119),char(101),char(112),char(116),char(83),char(112),char(104),char(101),char(114),char(101),char(82),char(97),char(100),char(105),char(117),char(115),char(0),char(109),char(95),
|
||||||
|
char(99),char(99),char(100),char(77),char(111),char(116),char(105),char(111),char(110),char(84),char(104),char(114),char(101),char(115),char(104),char(111),char(108),char(100),char(0),char(109),
|
||||||
|
char(95),char(104),char(97),char(115),char(65),char(110),char(105),char(115),char(111),char(116),char(114),char(111),char(112),char(105),char(99),char(70),char(114),char(105),char(99),char(116),
|
||||||
|
char(105),char(111),char(110),char(0),char(109),char(95),char(99),char(111),char(108),char(108),char(105),char(115),char(105),char(111),char(110),char(70),char(108),char(97),char(103),char(115),
|
||||||
|
char(0),char(109),char(95),char(105),char(115),char(108),char(97),char(110),char(100),char(84),char(97),char(103),char(49),char(0),char(109),char(95),char(99),char(111),char(109),char(112),
|
||||||
|
char(97),char(110),char(105),char(111),char(110),char(73),char(100),char(0),char(109),char(95),char(97),char(99),char(116),char(105),char(118),char(97),char(116),char(105),char(111),char(110),
|
||||||
|
char(83),char(116),char(97),char(116),char(101),char(49),char(0),char(109),char(95),char(105),char(110),char(116),char(101),char(114),char(110),char(97),char(108),char(84),char(121),char(112),
|
||||||
|
char(101),char(0),char(109),char(95),char(99),char(104),char(101),char(99),char(107),char(67),char(111),char(108),char(108),char(105),char(100),char(101),char(87),char(105),char(116),char(104),
|
||||||
|
char(0),char(109),char(95),char(115),char(111),char(108),char(118),char(101),char(114),char(73),char(110),char(102),char(111),char(0),char(109),char(95),char(103),char(114),char(97),char(118),
|
||||||
|
char(105),char(116),char(121),char(0),char(109),char(95),char(99),char(111),char(108),char(108),char(105),char(115),char(105),char(111),char(110),char(79),char(98),char(106),char(101),char(99),
|
||||||
|
char(116),char(68),char(97),char(116),char(97),char(0),char(109),char(95),char(105),char(110),char(118),char(73),char(110),char(101),char(114),char(116),char(105),char(97),char(84),char(101),
|
||||||
|
char(110),char(115),char(111),char(114),char(87),char(111),char(114),char(108),char(100),char(0),char(109),char(95),char(108),char(105),char(110),char(101),char(97),char(114),char(86),char(101),
|
||||||
|
char(108),char(111),char(99),char(105),char(116),char(121),char(0),char(109),char(95),char(97),char(110),char(103),char(117),char(108),char(97),char(114),char(86),char(101),char(108),char(111),
|
||||||
|
char(99),char(105),char(116),char(121),char(0),char(109),char(95),char(97),char(110),char(103),char(117),char(108),char(97),char(114),char(70),char(97),char(99),char(116),char(111),char(114),
|
||||||
|
char(0),char(109),char(95),char(108),char(105),char(110),char(101),char(97),char(114),char(70),char(97),char(99),char(116),char(111),char(114),char(0),char(109),char(95),char(103),char(114),
|
||||||
|
char(97),char(118),char(105),char(116),char(121),char(95),char(97),char(99),char(99),char(101),char(108),char(101),char(114),char(97),char(116),char(105),char(111),char(110),char(0),char(109),
|
||||||
|
char(95),char(105),char(110),char(118),char(73),char(110),char(101),char(114),char(116),char(105),char(97),char(76),char(111),char(99),char(97),char(108),char(0),char(109),char(95),char(116),
|
||||||
|
char(111),char(116),char(97),char(108),char(70),char(111),char(114),char(99),char(101),char(0),char(109),char(95),char(116),char(111),char(116),char(97),char(108),char(84),char(111),char(114),
|
||||||
|
char(113),char(117),char(101),char(0),char(109),char(95),char(105),char(110),char(118),char(101),char(114),char(115),char(101),char(77),char(97),char(115),char(115),char(0),char(109),char(95),
|
||||||
|
char(108),char(105),char(110),char(101),char(97),char(114),char(68),char(97),char(109),char(112),char(105),char(110),char(103),char(0),char(109),char(95),char(97),char(110),char(103),char(117),
|
||||||
|
char(108),char(97),char(114),char(68),char(97),char(109),char(112),char(105),char(110),char(103),char(0),char(109),char(95),char(97),char(100),char(100),char(105),char(116),char(105),char(111),
|
||||||
|
char(110),char(97),char(108),char(68),char(97),char(109),char(112),char(105),char(110),char(103),char(70),char(97),char(99),char(116),char(111),char(114),char(0),char(109),char(95),char(97),
|
||||||
|
char(100),char(100),char(105),char(116),char(105),char(111),char(110),char(97),char(108),char(76),char(105),char(110),char(101),char(97),char(114),char(68),char(97),char(109),char(112),char(105),
|
||||||
|
char(110),char(103),char(84),char(104),char(114),char(101),char(115),char(104),char(111),char(108),char(100),char(83),char(113),char(114),char(0),char(109),char(95),char(97),char(100),char(100),
|
||||||
|
char(105),char(116),char(105),char(111),char(110),char(97),char(108),char(65),char(110),char(103),char(117),char(108),char(97),char(114),char(68),char(97),char(109),char(112),char(105),char(110),
|
||||||
|
char(103),char(84),char(104),char(114),char(101),char(115),char(104),char(111),char(108),char(100),char(83),char(113),char(114),char(0),char(109),char(95),char(97),char(100),char(100),char(105),
|
||||||
|
char(116),char(105),char(111),char(110),char(97),char(108),char(65),char(110),char(103),char(117),char(108),char(97),char(114),char(68),char(97),char(109),char(112),char(105),char(110),char(103),
|
||||||
|
char(70),char(97),char(99),char(116),char(111),char(114),char(0),char(109),char(95),char(108),char(105),char(110),char(101),char(97),char(114),char(83),char(108),char(101),char(101),char(112),
|
||||||
|
char(105),char(110),char(103),char(84),char(104),char(114),char(101),char(115),char(104),char(111),char(108),char(100),char(0),char(109),char(95),char(97),char(110),char(103),char(117),char(108),
|
||||||
|
char(97),char(114),char(83),char(108),char(101),char(101),char(112),char(105),char(110),char(103),char(84),char(104),char(114),char(101),char(115),char(104),char(111),char(108),char(100),char(0),
|
||||||
|
char(109),char(95),char(97),char(100),char(100),char(105),char(116),char(105),char(111),char(110),char(97),char(108),char(68),char(97),char(109),char(112),char(105),char(110),char(103),char(0),
|
||||||
|
char(109),char(95),char(110),char(117),char(109),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(82),char(111),char(119),char(115),char(0),
|
||||||
|
char(110),char(117),char(98),char(0),char(42),char(109),char(95),char(114),char(98),char(65),char(0),char(42),char(109),char(95),char(114),char(98),char(66),char(0),char(109),char(95),
|
||||||
|
char(111),char(98),char(106),char(101),char(99),char(116),char(84),char(121),char(112),char(101),char(0),char(109),char(95),char(117),char(115),char(101),char(114),char(67),char(111),char(110),
|
||||||
|
char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(84),char(121),char(112),char(101),char(0),char(109),char(95),char(117),char(115),char(101),char(114),char(67),char(111),
|
||||||
|
char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(73),char(100),char(0),char(109),char(95),char(110),char(101),char(101),char(100),char(115),char(70),char(101),
|
||||||
|
char(101),char(100),char(98),char(97),char(99),char(107),char(0),char(109),char(95),char(97),char(112),char(112),char(108),char(105),char(101),char(100),char(73),char(109),char(112),char(117),
|
||||||
|
char(108),char(115),char(101),char(0),char(109),char(95),char(100),char(98),char(103),char(68),char(114),char(97),char(119),char(83),char(105),char(122),char(101),char(0),char(109),char(95),
|
||||||
|
char(100),char(105),char(115),char(97),char(98),char(108),char(101),char(67),char(111),char(108),char(108),char(105),char(115),char(105),char(111),char(110),char(115),char(66),char(101),char(116),
|
||||||
|
char(119),char(101),char(101),char(110),char(76),char(105),char(110),char(107),char(101),char(100),char(66),char(111),char(100),char(105),char(101),char(115),char(0),char(109),char(95),char(111),
|
||||||
|
char(118),char(101),char(114),char(114),char(105),char(100),char(101),char(78),char(117),char(109),char(83),char(111),char(108),char(118),char(101),char(114),char(73),char(116),char(101),char(114),
|
||||||
|
char(97),char(116),char(105),char(111),char(110),char(115),char(0),char(109),char(95),char(98),char(114),char(101),char(97),char(107),char(105),char(110),char(103),char(73),char(109),char(112),
|
||||||
|
char(117),char(108),char(115),char(101),char(84),char(104),char(114),char(101),char(115),char(104),char(111),char(108),char(100),char(0),char(109),char(95),char(105),char(115),char(69),char(110),
|
||||||
|
char(97),char(98),char(108),char(101),char(100),char(0),char(109),char(95),char(116),char(121),char(112),char(101),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),
|
||||||
|
char(110),char(116),char(68),char(97),char(116),char(97),char(0),char(109),char(95),char(112),char(105),char(118),char(111),char(116),char(73),char(110),char(65),char(0),char(109),char(95),
|
||||||
|
char(112),char(105),char(118),char(111),char(116),char(73),char(110),char(66),char(0),char(109),char(95),char(114),char(98),char(65),char(70),char(114),char(97),char(109),char(101),char(0),
|
||||||
|
char(109),char(95),char(114),char(98),char(66),char(70),char(114),char(97),char(109),char(101),char(0),char(109),char(95),char(117),char(115),char(101),char(82),char(101),char(102),char(101),
|
||||||
|
char(114),char(101),char(110),char(99),char(101),char(70),char(114),char(97),char(109),char(101),char(65),char(0),char(109),char(95),char(97),char(110),char(103),char(117),char(108),char(97),
|
||||||
|
char(114),char(79),char(110),char(108),char(121),char(0),char(109),char(95),char(101),char(110),char(97),char(98),char(108),char(101),char(65),char(110),char(103),char(117),char(108),char(97),
|
||||||
|
char(114),char(77),char(111),char(116),char(111),char(114),char(0),char(109),char(95),char(109),char(111),char(116),char(111),char(114),char(84),char(97),char(114),char(103),char(101),char(116),
|
||||||
|
char(86),char(101),char(108),char(111),char(99),char(105),char(116),char(121),char(0),char(109),char(95),char(109),char(97),char(120),char(77),char(111),char(116),char(111),char(114),char(73),
|
||||||
|
char(109),char(112),char(117),char(108),char(115),char(101),char(0),char(109),char(95),char(108),char(111),char(119),char(101),char(114),char(76),char(105),char(109),char(105),char(116),char(0),
|
||||||
|
char(109),char(95),char(117),char(112),char(112),char(101),char(114),char(76),char(105),char(109),char(105),char(116),char(0),char(109),char(95),char(108),char(105),char(109),char(105),char(116),
|
||||||
|
char(83),char(111),char(102),char(116),char(110),char(101),char(115),char(115),char(0),char(109),char(95),char(98),char(105),char(97),char(115),char(70),char(97),char(99),char(116),char(111),
|
||||||
|
char(114),char(0),char(109),char(95),char(114),char(101),char(108),char(97),char(120),char(97),char(116),char(105),char(111),char(110),char(70),char(97),char(99),char(116),char(111),char(114),
|
||||||
|
char(0),char(109),char(95),char(115),char(119),char(105),char(110),char(103),char(83),char(112),char(97),char(110),char(49),char(0),char(109),char(95),char(115),char(119),char(105),char(110),
|
||||||
|
char(103),char(83),char(112),char(97),char(110),char(50),char(0),char(109),char(95),char(116),char(119),char(105),char(115),char(116),char(83),char(112),char(97),char(110),char(0),char(109),
|
||||||
|
char(95),char(100),char(97),char(109),char(112),char(105),char(110),char(103),char(0),char(109),char(95),char(108),char(105),char(110),char(101),char(97),char(114),char(85),char(112),char(112),
|
||||||
|
char(101),char(114),char(76),char(105),char(109),char(105),char(116),char(0),char(109),char(95),char(108),char(105),char(110),char(101),char(97),char(114),char(76),char(111),char(119),char(101),
|
||||||
|
char(114),char(76),char(105),char(109),char(105),char(116),char(0),char(109),char(95),char(97),char(110),char(103),char(117),char(108),char(97),char(114),char(85),char(112),char(112),char(101),
|
||||||
|
char(114),char(76),char(105),char(109),char(105),char(116),char(0),char(109),char(95),char(97),char(110),char(103),char(117),char(108),char(97),char(114),char(76),char(111),char(119),char(101),
|
||||||
|
char(114),char(76),char(105),char(109),char(105),char(116),char(0),char(109),char(95),char(117),char(115),char(101),char(76),char(105),char(110),char(101),char(97),char(114),char(82),char(101),
|
||||||
|
char(102),char(101),char(114),char(101),char(110),char(99),char(101),char(70),char(114),char(97),char(109),char(101),char(65),char(0),char(109),char(95),char(117),char(115),char(101),char(79),
|
||||||
|
char(102),char(102),char(115),char(101),char(116),char(70),char(111),char(114),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(70),char(114),
|
||||||
|
char(97),char(109),char(101),char(0),char(109),char(95),char(54),char(100),char(111),char(102),char(68),char(97),char(116),char(97),char(0),char(109),char(95),char(115),char(112),char(114),
|
||||||
|
char(105),char(110),char(103),char(69),char(110),char(97),char(98),char(108),char(101),char(100),char(91),char(54),char(93),char(0),char(109),char(95),char(101),char(113),char(117),char(105),
|
||||||
|
char(108),char(105),char(98),char(114),char(105),char(117),char(109),char(80),char(111),char(105),char(110),char(116),char(91),char(54),char(93),char(0),char(109),char(95),char(115),char(112),
|
||||||
|
char(114),char(105),char(110),char(103),char(83),char(116),char(105),char(102),char(102),char(110),char(101),char(115),char(115),char(91),char(54),char(93),char(0),char(109),char(95),char(115),
|
||||||
|
char(112),char(114),char(105),char(110),char(103),char(68),char(97),char(109),char(112),char(105),char(110),char(103),char(91),char(54),char(93),char(0),char(109),char(95),char(116),char(97),
|
||||||
|
char(117),char(0),char(109),char(95),char(116),char(105),char(109),char(101),char(83),char(116),char(101),char(112),char(0),char(109),char(95),char(109),char(97),char(120),char(69),char(114),
|
||||||
|
char(114),char(111),char(114),char(82),char(101),char(100),char(117),char(99),char(116),char(105),char(111),char(110),char(0),char(109),char(95),char(115),char(111),char(114),char(0),char(109),
|
||||||
|
char(95),char(101),char(114),char(112),char(0),char(109),char(95),char(101),char(114),char(112),char(50),char(0),char(109),char(95),char(103),char(108),char(111),char(98),char(97),char(108),
|
||||||
|
char(67),char(102),char(109),char(0),char(109),char(95),char(115),char(112),char(108),char(105),char(116),char(73),char(109),char(112),char(117),char(108),char(115),char(101),char(80),char(101),
|
||||||
|
char(110),char(101),char(116),char(114),char(97),char(116),char(105),char(111),char(110),char(84),char(104),char(114),char(101),char(115),char(104),char(111),char(108),char(100),char(0),char(109),
|
||||||
|
char(95),char(115),char(112),char(108),char(105),char(116),char(73),char(109),char(112),char(117),char(108),char(115),char(101),char(84),char(117),char(114),char(110),char(69),char(114),char(112),
|
||||||
|
char(0),char(109),char(95),char(108),char(105),char(110),char(101),char(97),char(114),char(83),char(108),char(111),char(112),char(0),char(109),char(95),char(119),char(97),char(114),char(109),
|
||||||
|
char(115),char(116),char(97),char(114),char(116),char(105),char(110),char(103),char(70),char(97),char(99),char(116),char(111),char(114),char(0),char(109),char(95),char(109),char(97),char(120),
|
||||||
|
char(71),char(121),char(114),char(111),char(115),char(99),char(111),char(112),char(105),char(99),char(70),char(111),char(114),char(99),char(101),char(0),char(109),char(95),char(115),char(105),
|
||||||
|
char(110),char(103),char(108),char(101),char(65),char(120),char(105),char(115),char(82),char(111),char(108),char(108),char(105),char(110),char(103),char(70),char(114),char(105),char(99),char(116),
|
||||||
|
char(105),char(111),char(110),char(84),char(104),char(114),char(101),char(115),char(104),char(111),char(108),char(100),char(0),char(109),char(95),char(110),char(117),char(109),char(73),char(116),
|
||||||
|
char(101),char(114),char(97),char(116),char(105),char(111),char(110),char(115),char(0),char(109),char(95),char(115),char(111),char(108),char(118),char(101),char(114),char(77),char(111),char(100),
|
||||||
|
char(101),char(0),char(109),char(95),char(114),char(101),char(115),char(116),char(105),char(110),char(103),char(67),char(111),char(110),char(116),char(97),char(99),char(116),char(82),char(101),
|
||||||
|
char(115),char(116),char(105),char(116),char(117),char(116),char(105),char(111),char(110),char(84),char(104),char(114),char(101),char(115),char(104),char(111),char(108),char(100),char(0),char(109),
|
||||||
|
char(95),char(109),char(105),char(110),char(105),char(109),char(117),char(109),char(83),char(111),char(108),char(118),char(101),char(114),char(66),char(97),char(116),char(99),char(104),char(83),
|
||||||
|
char(105),char(122),char(101),char(0),char(109),char(95),char(115),char(112),char(108),char(105),char(116),char(73),char(109),char(112),char(117),char(108),char(115),char(101),char(0),char(109),
|
||||||
|
char(95),char(108),char(105),char(110),char(101),char(97),char(114),char(83),char(116),char(105),char(102),char(102),char(110),char(101),char(115),char(115),char(0),char(109),char(95),char(97),
|
||||||
|
char(110),char(103),char(117),char(108),char(97),char(114),char(83),char(116),char(105),char(102),char(102),char(110),char(101),char(115),char(115),char(0),char(109),char(95),char(118),char(111),
|
||||||
|
char(108),char(117),char(109),char(101),char(83),char(116),char(105),char(102),char(102),char(110),char(101),char(115),char(115),char(0),char(42),char(109),char(95),char(109),char(97),char(116),
|
||||||
|
char(101),char(114),char(105),char(97),char(108),char(0),char(109),char(95),char(112),char(111),char(115),char(105),char(116),char(105),char(111),char(110),char(0),char(109),char(95),char(112),
|
||||||
|
char(114),char(101),char(118),char(105),char(111),char(117),char(115),char(80),char(111),char(115),char(105),char(116),char(105),char(111),char(110),char(0),char(109),char(95),char(118),char(101),
|
||||||
|
char(108),char(111),char(99),char(105),char(116),char(121),char(0),char(109),char(95),char(97),char(99),char(99),char(117),char(109),char(117),char(108),char(97),char(116),char(101),char(100),
|
||||||
|
char(70),char(111),char(114),char(99),char(101),char(0),char(109),char(95),char(110),char(111),char(114),char(109),char(97),char(108),char(0),char(109),char(95),char(97),char(114),char(101),
|
||||||
|
char(97),char(0),char(109),char(95),char(97),char(116),char(116),char(97),char(99),char(104),char(0),char(109),char(95),char(110),char(111),char(100),char(101),char(73),char(110),char(100),
|
||||||
|
char(105),char(99),char(101),char(115),char(91),char(50),char(93),char(0),char(109),char(95),char(114),char(101),char(115),char(116),char(76),char(101),char(110),char(103),char(116),char(104),
|
||||||
|
char(0),char(109),char(95),char(98),char(98),char(101),char(110),char(100),char(105),char(110),char(103),char(0),char(109),char(95),char(110),char(111),char(100),char(101),char(73),char(110),
|
||||||
|
char(100),char(105),char(99),char(101),char(115),char(91),char(51),char(93),char(0),char(109),char(95),char(114),char(101),char(115),char(116),char(65),char(114),char(101),char(97),char(0),
|
||||||
|
char(109),char(95),char(99),char(48),char(91),char(52),char(93),char(0),char(109),char(95),char(110),char(111),char(100),char(101),char(73),char(110),char(100),char(105),char(99),char(101),
|
||||||
|
char(115),char(91),char(52),char(93),char(0),char(109),char(95),char(114),char(101),char(115),char(116),char(86),char(111),char(108),char(117),char(109),char(101),char(0),char(109),char(95),
|
||||||
|
char(99),char(49),char(0),char(109),char(95),char(99),char(50),char(0),char(109),char(95),char(99),char(48),char(0),char(109),char(95),char(108),char(111),char(99),char(97),char(108),
|
||||||
|
char(70),char(114),char(97),char(109),char(101),char(0),char(42),char(109),char(95),char(114),char(105),char(103),char(105),char(100),char(66),char(111),char(100),char(121),char(0),char(109),
|
||||||
|
char(95),char(110),char(111),char(100),char(101),char(73),char(110),char(100),char(101),char(120),char(0),char(109),char(95),char(97),char(101),char(114),char(111),char(77),char(111),char(100),
|
||||||
|
char(101),char(108),char(0),char(109),char(95),char(98),char(97),char(117),char(109),char(103),char(97),char(114),char(116),char(101),char(0),char(109),char(95),char(100),char(114),char(97),
|
||||||
|
char(103),char(0),char(109),char(95),char(108),char(105),char(102),char(116),char(0),char(109),char(95),char(112),char(114),char(101),char(115),char(115),char(117),char(114),char(101),char(0),
|
||||||
|
char(109),char(95),char(118),char(111),char(108),char(117),char(109),char(101),char(0),char(109),char(95),char(100),char(121),char(110),char(97),char(109),char(105),char(99),char(70),char(114),
|
||||||
|
char(105),char(99),char(116),char(105),char(111),char(110),char(0),char(109),char(95),char(112),char(111),char(115),char(101),char(77),char(97),char(116),char(99),char(104),char(0),char(109),
|
||||||
|
char(95),char(114),char(105),char(103),char(105),char(100),char(67),char(111),char(110),char(116),char(97),char(99),char(116),char(72),char(97),char(114),char(100),char(110),char(101),char(115),
|
||||||
|
char(115),char(0),char(109),char(95),char(107),char(105),char(110),char(101),char(116),char(105),char(99),char(67),char(111),char(110),char(116),char(97),char(99),char(116),char(72),char(97),
|
||||||
|
char(114),char(100),char(110),char(101),char(115),char(115),char(0),char(109),char(95),char(115),char(111),char(102),char(116),char(67),char(111),char(110),char(116),char(97),char(99),char(116),
|
||||||
|
char(72),char(97),char(114),char(100),char(110),char(101),char(115),char(115),char(0),char(109),char(95),char(97),char(110),char(99),char(104),char(111),char(114),char(72),char(97),char(114),
|
||||||
|
char(100),char(110),char(101),char(115),char(115),char(0),char(109),char(95),char(115),char(111),char(102),char(116),char(82),char(105),char(103),char(105),char(100),char(67),char(108),char(117),
|
||||||
|
char(115),char(116),char(101),char(114),char(72),char(97),char(114),char(100),char(110),char(101),char(115),char(115),char(0),char(109),char(95),char(115),char(111),char(102),char(116),char(75),
|
||||||
|
char(105),char(110),char(101),char(116),char(105),char(99),char(67),char(108),char(117),char(115),char(116),char(101),char(114),char(72),char(97),char(114),char(100),char(110),char(101),char(115),
|
||||||
|
char(115),char(0),char(109),char(95),char(115),char(111),char(102),char(116),char(83),char(111),char(102),char(116),char(67),char(108),char(117),char(115),char(116),char(101),char(114),char(72),
|
||||||
|
char(97),char(114),char(100),char(110),char(101),char(115),char(115),char(0),char(109),char(95),char(115),char(111),char(102),char(116),char(82),char(105),char(103),char(105),char(100),char(67),
|
||||||
|
char(108),char(117),char(115),char(116),char(101),char(114),char(73),char(109),char(112),char(117),char(108),char(115),char(101),char(83),char(112),char(108),char(105),char(116),char(0),char(109),
|
||||||
|
char(95),char(115),char(111),char(102),char(116),char(75),char(105),char(110),char(101),char(116),char(105),char(99),char(67),char(108),char(117),char(115),char(116),char(101),char(114),char(73),
|
||||||
|
char(109),char(112),char(117),char(108),char(115),char(101),char(83),char(112),char(108),char(105),char(116),char(0),char(109),char(95),char(115),char(111),char(102),char(116),char(83),char(111),
|
||||||
|
char(102),char(116),char(67),char(108),char(117),char(115),char(116),char(101),char(114),char(73),char(109),char(112),char(117),char(108),char(115),char(101),char(83),char(112),char(108),char(105),
|
||||||
|
char(116),char(0),char(109),char(95),char(109),char(97),char(120),char(86),char(111),char(108),char(117),char(109),char(101),char(0),char(109),char(95),char(116),char(105),char(109),char(101),
|
||||||
|
char(83),char(99),char(97),char(108),char(101),char(0),char(109),char(95),char(118),char(101),char(108),char(111),char(99),char(105),char(116),char(121),char(73),char(116),char(101),char(114),
|
||||||
|
char(97),char(116),char(105),char(111),char(110),char(115),char(0),char(109),char(95),char(112),char(111),char(115),char(105),char(116),char(105),char(111),char(110),char(73),char(116),char(101),
|
||||||
|
char(114),char(97),char(116),char(105),char(111),char(110),char(115),char(0),char(109),char(95),char(100),char(114),char(105),char(102),char(116),char(73),char(116),char(101),char(114),char(97),
|
||||||
|
char(116),char(105),char(111),char(110),char(115),char(0),char(109),char(95),char(99),char(108),char(117),char(115),char(116),char(101),char(114),char(73),char(116),char(101),char(114),char(97),
|
||||||
|
char(116),char(105),char(111),char(110),char(115),char(0),char(109),char(95),char(114),char(111),char(116),char(0),char(109),char(95),char(115),char(99),char(97),char(108),char(101),char(0),
|
||||||
|
char(109),char(95),char(97),char(113),char(113),char(0),char(109),char(95),char(99),char(111),char(109),char(0),char(42),char(109),char(95),char(112),char(111),char(115),char(105),char(116),
|
||||||
|
char(105),char(111),char(110),char(115),char(0),char(42),char(109),char(95),char(119),char(101),char(105),char(103),char(104),char(116),char(115),char(0),char(109),char(95),char(110),char(117),
|
||||||
|
char(109),char(80),char(111),char(115),char(105),char(116),char(105),char(111),char(110),char(115),char(0),char(109),char(95),char(110),char(117),char(109),char(87),char(101),char(105),char(103),
|
||||||
|
char(116),char(115),char(0),char(109),char(95),char(98),char(118),char(111),char(108),char(117),char(109),char(101),char(0),char(109),char(95),char(98),char(102),char(114),char(97),char(109),
|
||||||
|
char(101),char(0),char(109),char(95),char(102),char(114),char(97),char(109),char(101),char(120),char(102),char(111),char(114),char(109),char(0),char(109),char(95),char(108),char(111),char(99),
|
||||||
|
char(105),char(105),char(0),char(109),char(95),char(105),char(110),char(118),char(119),char(105),char(0),char(109),char(95),char(118),char(105),char(109),char(112),char(117),char(108),char(115),
|
||||||
|
char(101),char(115),char(91),char(50),char(93),char(0),char(109),char(95),char(100),char(105),char(109),char(112),char(117),char(108),char(115),char(101),char(115),char(91),char(50),char(93),
|
||||||
|
char(0),char(109),char(95),char(108),char(118),char(0),char(109),char(95),char(97),char(118),char(0),char(42),char(109),char(95),char(102),char(114),char(97),char(109),char(101),char(114),
|
||||||
|
char(101),char(102),char(115),char(0),char(42),char(109),char(95),char(110),char(111),char(100),char(101),char(73),char(110),char(100),char(105),char(99),char(101),char(115),char(0),char(42),
|
||||||
|
char(109),char(95),char(109),char(97),char(115),char(115),char(101),char(115),char(0),char(109),char(95),char(110),char(117),char(109),char(70),char(114),char(97),char(109),char(101),char(82),
|
||||||
|
char(101),char(102),char(115),char(0),char(109),char(95),char(110),char(117),char(109),char(78),char(111),char(100),char(101),char(115),char(0),char(109),char(95),char(110),char(117),char(109),
|
||||||
|
char(77),char(97),char(115),char(115),char(101),char(115),char(0),char(109),char(95),char(105),char(100),char(109),char(97),char(115),char(115),char(0),char(109),char(95),char(105),char(109),
|
||||||
|
char(97),char(115),char(115),char(0),char(109),char(95),char(110),char(118),char(105),char(109),char(112),char(117),char(108),char(115),char(101),char(115),char(0),char(109),char(95),char(110),
|
||||||
|
char(100),char(105),char(109),char(112),char(117),char(108),char(115),char(101),char(115),char(0),char(109),char(95),char(110),char(100),char(97),char(109),char(112),char(105),char(110),char(103),
|
||||||
|
char(0),char(109),char(95),char(108),char(100),char(97),char(109),char(112),char(105),char(110),char(103),char(0),char(109),char(95),char(97),char(100),char(97),char(109),char(112),char(105),
|
||||||
|
char(110),char(103),char(0),char(109),char(95),char(109),char(97),char(116),char(99),char(104),char(105),char(110),char(103),char(0),char(109),char(95),char(109),char(97),char(120),char(83),
|
||||||
|
char(101),char(108),char(102),char(67),char(111),char(108),char(108),char(105),char(115),char(105),char(111),char(110),char(73),char(109),char(112),char(117),char(108),char(115),char(101),char(0),
|
||||||
|
char(109),char(95),char(115),char(101),char(108),char(102),char(67),char(111),char(108),char(108),char(105),char(115),char(105),char(111),char(110),char(73),char(109),char(112),char(117),char(108),
|
||||||
|
char(115),char(101),char(70),char(97),char(99),char(116),char(111),char(114),char(0),char(109),char(95),char(99),char(111),char(110),char(116),char(97),char(105),char(110),char(115),char(65),
|
||||||
|
char(110),char(99),char(104),char(111),char(114),char(0),char(109),char(95),char(99),char(111),char(108),char(108),char(105),char(100),char(101),char(0),char(109),char(95),char(99),char(108),
|
||||||
|
char(117),char(115),char(116),char(101),char(114),char(73),char(110),char(100),char(101),char(120),char(0),char(42),char(109),char(95),char(98),char(111),char(100),char(121),char(65),char(0),
|
||||||
|
char(42),char(109),char(95),char(98),char(111),char(100),char(121),char(66),char(0),char(109),char(95),char(114),char(101),char(102),char(115),char(91),char(50),char(93),char(0),char(109),
|
||||||
|
char(95),char(99),char(102),char(109),char(0),char(109),char(95),char(115),char(112),char(108),char(105),char(116),char(0),char(109),char(95),char(100),char(101),char(108),char(101),char(116),
|
||||||
|
char(101),char(0),char(109),char(95),char(114),char(101),char(108),char(80),char(111),char(115),char(105),char(116),char(105),char(111),char(110),char(91),char(50),char(93),char(0),char(109),
|
||||||
|
char(95),char(98),char(111),char(100),char(121),char(65),char(116),char(121),char(112),char(101),char(0),char(109),char(95),char(98),char(111),char(100),char(121),char(66),char(116),char(121),
|
||||||
|
char(112),char(101),char(0),char(109),char(95),char(106),char(111),char(105),char(110),char(116),char(84),char(121),char(112),char(101),char(0),char(42),char(109),char(95),char(112),char(111),
|
||||||
|
char(115),char(101),char(0),char(42),char(42),char(109),char(95),char(109),char(97),char(116),char(101),char(114),char(105),char(97),char(108),char(115),char(0),char(42),char(109),char(95),
|
||||||
|
char(110),char(111),char(100),char(101),char(115),char(0),char(42),char(109),char(95),char(108),char(105),char(110),char(107),char(115),char(0),char(42),char(109),char(95),char(102),char(97),
|
||||||
|
char(99),char(101),char(115),char(0),char(42),char(109),char(95),char(116),char(101),char(116),char(114),char(97),char(104),char(101),char(100),char(114),char(97),char(0),char(42),char(109),
|
||||||
|
char(95),char(97),char(110),char(99),char(104),char(111),char(114),char(115),char(0),char(42),char(109),char(95),char(99),char(108),char(117),char(115),char(116),char(101),char(114),char(115),
|
||||||
|
char(0),char(42),char(109),char(95),char(106),char(111),char(105),char(110),char(116),char(115),char(0),char(109),char(95),char(110),char(117),char(109),char(77),char(97),char(116),char(101),
|
||||||
|
char(114),char(105),char(97),char(108),char(115),char(0),char(109),char(95),char(110),char(117),char(109),char(76),char(105),char(110),char(107),char(115),char(0),char(109),char(95),char(110),
|
||||||
|
char(117),char(109),char(70),char(97),char(99),char(101),char(115),char(0),char(109),char(95),char(110),char(117),char(109),char(84),char(101),char(116),char(114),char(97),char(104),char(101),
|
||||||
|
char(100),char(114),char(97),char(0),char(109),char(95),char(110),char(117),char(109),char(65),char(110),char(99),char(104),char(111),char(114),char(115),char(0),char(109),char(95),char(110),
|
||||||
|
char(117),char(109),char(67),char(108),char(117),char(115),char(116),char(101),char(114),char(115),char(0),char(109),char(95),char(110),char(117),char(109),char(74),char(111),char(105),char(110),
|
||||||
|
char(116),char(115),char(0),char(109),char(95),char(99),char(111),char(110),char(102),char(105),char(103),char(0),char(84),char(89),char(80),char(69),char(76),char(0),char(0),char(0),
|
||||||
|
char(99),char(104),char(97),char(114),char(0),char(117),char(99),char(104),char(97),char(114),char(0),char(115),char(104),char(111),char(114),char(116),char(0),char(117),char(115),char(104),
|
||||||
|
char(111),char(114),char(116),char(0),char(105),char(110),char(116),char(0),char(108),char(111),char(110),char(103),char(0),char(117),char(108),char(111),char(110),char(103),char(0),char(102),
|
||||||
|
char(108),char(111),char(97),char(116),char(0),char(100),char(111),char(117),char(98),char(108),char(101),char(0),char(118),char(111),char(105),char(100),char(0),char(80),char(111),char(105),
|
||||||
|
char(110),char(116),char(101),char(114),char(65),char(114),char(114),char(97),char(121),char(0),char(98),char(116),char(80),char(104),char(121),char(115),char(105),char(99),char(115),char(83),
|
||||||
|
char(121),char(115),char(116),char(101),char(109),char(0),char(76),char(105),char(115),char(116),char(66),char(97),char(115),char(101),char(0),char(98),char(116),char(86),char(101),char(99),
|
||||||
|
char(116),char(111),char(114),char(51),char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(86),char(101),char(99),char(116),
|
||||||
|
char(111),char(114),char(51),char(68),char(111),char(117),char(98),char(108),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(77),char(97),char(116),char(114),
|
||||||
|
char(105),char(120),char(51),char(120),char(51),char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(77),char(97),char(116),
|
||||||
|
char(114),char(105),char(120),char(51),char(120),char(51),char(68),char(111),char(117),char(98),char(108),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(84),
|
||||||
|
char(114),char(97),char(110),char(115),char(102),char(111),char(114),char(109),char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),
|
||||||
|
char(84),char(114),char(97),char(110),char(115),char(102),char(111),char(114),char(109),char(68),char(111),char(117),char(98),char(108),char(101),char(68),char(97),char(116),char(97),char(0),
|
||||||
|
char(98),char(116),char(66),char(118),char(104),char(83),char(117),char(98),char(116),char(114),char(101),char(101),char(73),char(110),char(102),char(111),char(68),char(97),char(116),char(97),
|
||||||
|
char(0),char(98),char(116),char(79),char(112),char(116),char(105),char(109),char(105),char(122),char(101),char(100),char(66),char(118),char(104),char(78),char(111),char(100),char(101),char(70),
|
||||||
|
char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(79),char(112),char(116),char(105),char(109),char(105),char(122),char(101),char(100),
|
||||||
|
char(66),char(118),char(104),char(78),char(111),char(100),char(101),char(68),char(111),char(117),char(98),char(108),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),
|
||||||
|
char(81),char(117),char(97),char(110),char(116),char(105),char(122),char(101),char(100),char(66),char(118),char(104),char(78),char(111),char(100),char(101),char(68),char(97),char(116),char(97),
|
||||||
|
char(0),char(98),char(116),char(81),char(117),char(97),char(110),char(116),char(105),char(122),char(101),char(100),char(66),char(118),char(104),char(70),char(108),char(111),char(97),char(116),
|
||||||
|
char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(81),char(117),char(97),char(110),char(116),char(105),char(122),char(101),char(100),char(66),char(118),char(104),char(68),
|
||||||
|
char(111),char(117),char(98),char(108),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(67),char(111),char(108),char(108),char(105),char(115),char(105),char(111),
|
||||||
|
char(110),char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(83),char(116),char(97),char(116),char(105),char(99),char(80),
|
||||||
|
char(108),char(97),char(110),char(101),char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(67),char(111),char(110),char(118),
|
||||||
|
char(101),char(120),char(73),char(110),char(116),char(101),char(114),char(110),char(97),char(108),char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),char(97),char(0),
|
||||||
|
char(98),char(116),char(80),char(111),char(115),char(105),char(116),char(105),char(111),char(110),char(65),char(110),char(100),char(82),char(97),char(100),char(105),char(117),char(115),char(0),
|
||||||
|
char(98),char(116),char(77),char(117),char(108),char(116),char(105),char(83),char(112),char(104),char(101),char(114),char(101),char(83),char(104),char(97),char(112),char(101),char(68),char(97),
|
||||||
|
char(116),char(97),char(0),char(98),char(116),char(73),char(110),char(116),char(73),char(110),char(100),char(101),char(120),char(68),char(97),char(116),char(97),char(0),char(98),char(116),
|
||||||
|
char(83),char(104),char(111),char(114),char(116),char(73),char(110),char(116),char(73),char(110),char(100),char(101),char(120),char(68),char(97),char(116),char(97),char(0),char(98),char(116),
|
||||||
|
char(83),char(104),char(111),char(114),char(116),char(73),char(110),char(116),char(73),char(110),char(100),char(101),char(120),char(84),char(114),char(105),char(112),char(108),char(101),char(116),
|
||||||
|
char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(67),char(104),char(97),char(114),char(73),char(110),char(100),char(101),char(120),char(84),char(114),char(105),char(112),
|
||||||
|
char(108),char(101),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(77),char(101),char(115),char(104),char(80),char(97),char(114),char(116),char(68),char(97),
|
||||||
|
char(116),char(97),char(0),char(98),char(116),char(83),char(116),char(114),char(105),char(100),char(105),char(110),char(103),char(77),char(101),char(115),char(104),char(73),char(110),char(116),
|
||||||
|
char(101),char(114),char(102),char(97),char(99),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(84),char(114),char(105),char(97),char(110),char(103),char(108),
|
||||||
|
char(101),char(77),char(101),char(115),char(104),char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(84),char(114),char(105),
|
||||||
|
char(97),char(110),char(103),char(108),char(101),char(73),char(110),char(102),char(111),char(77),char(97),char(112),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(83),
|
||||||
|
char(99),char(97),char(108),char(101),char(100),char(84),char(114),char(105),char(97),char(110),char(103),char(108),char(101),char(77),char(101),char(115),char(104),char(83),char(104),char(97),
|
||||||
|
char(112),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(67),char(111),char(109),char(112),char(111),char(117),char(110),char(100),char(83),char(104),char(97),
|
||||||
|
char(112),char(101),char(67),char(104),char(105),char(108),char(100),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(67),char(111),char(109),char(112),char(111),char(117),
|
||||||
|
char(110),char(100),char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(67),char(121),char(108),char(105),char(110),char(100),
|
||||||
|
char(101),char(114),char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(67),char(97),char(112),char(115),char(117),char(108),
|
||||||
|
char(101),char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(84),char(114),char(105),char(97),char(110),char(103),char(108),
|
||||||
|
char(101),char(73),char(110),char(102),char(111),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(71),char(73),char(109),char(112),char(97),char(99),char(116),char(77),
|
||||||
|
char(101),char(115),char(104),char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(67),char(111),char(110),char(118),char(101),
|
||||||
|
char(120),char(72),char(117),char(108),char(108),char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(67),char(111),char(108),
|
||||||
|
char(108),char(105),char(115),char(105),char(111),char(110),char(79),char(98),char(106),char(101),char(99),char(116),char(68),char(111),char(117),char(98),char(108),char(101),char(68),char(97),
|
||||||
|
char(116),char(97),char(0),char(98),char(116),char(67),char(111),char(108),char(108),char(105),char(115),char(105),char(111),char(110),char(79),char(98),char(106),char(101),char(99),char(116),
|
||||||
|
char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(68),char(121),char(110),char(97),char(109),char(105),char(99),char(115),
|
||||||
|
char(87),char(111),char(114),char(108),char(100),char(68),char(111),char(117),char(98),char(108),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(67),char(111),
|
||||||
|
char(110),char(116),char(97),char(99),char(116),char(83),char(111),char(108),char(118),char(101),char(114),char(73),char(110),char(102),char(111),char(68),char(111),char(117),char(98),char(108),
|
||||||
|
char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(68),char(121),char(110),char(97),char(109),char(105),char(99),char(115),char(87),char(111),char(114),char(108),
|
||||||
|
char(100),char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(67),char(111),char(110),char(116),char(97),char(99),char(116),
|
||||||
|
char(83),char(111),char(108),char(118),char(101),char(114),char(73),char(110),char(102),char(111),char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97),char(0),
|
||||||
|
char(98),char(116),char(82),char(105),char(103),char(105),char(100),char(66),char(111),char(100),char(121),char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97),
|
||||||
|
char(0),char(98),char(116),char(82),char(105),char(103),char(105),char(100),char(66),char(111),char(100),char(121),char(68),char(111),char(117),char(98),char(108),char(101),char(68),char(97),
|
||||||
|
char(116),char(97),char(0),char(98),char(116),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(73),char(110),char(102),char(111),char(49),
|
||||||
|
char(0),char(98),char(116),char(84),char(121),char(112),char(101),char(100),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(68),char(97),
|
||||||
|
char(116),char(97),char(0),char(98),char(116),char(82),char(105),char(103),char(105),char(100),char(66),char(111),char(100),char(121),char(68),char(97),char(116),char(97),char(0),char(98),
|
||||||
|
char(116),char(80),char(111),char(105),char(110),char(116),char(50),char(80),char(111),char(105),char(110),char(116),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),
|
||||||
|
char(110),char(116),char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(80),char(111),char(105),char(110),char(116),char(50),
|
||||||
|
char(80),char(111),char(105),char(110),char(116),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(68),char(111),char(117),char(98),char(108),
|
||||||
|
char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(72),char(105),char(110),char(103),char(101),char(67),char(111),char(110),char(115),char(116),char(114),char(97),
|
||||||
|
char(105),char(110),char(116),char(68),char(111),char(117),char(98),char(108),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(72),char(105),char(110),char(103),
|
||||||
|
char(101),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97),
|
||||||
|
char(0),char(98),char(116),char(67),char(111),char(110),char(101),char(84),char(119),char(105),char(115),char(116),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),
|
||||||
|
char(110),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(71),char(101),char(110),char(101),char(114),char(105),char(99),char(54),char(68),char(111),char(102),
|
||||||
|
char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(71),char(101),char(110),
|
||||||
|
char(101),char(114),char(105),char(99),char(54),char(68),char(111),char(102),char(83),char(112),char(114),char(105),char(110),char(103),char(67),char(111),char(110),char(115),char(116),char(114),
|
||||||
|
char(97),char(105),char(110),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(83),char(108),char(105),char(100),char(101),char(114),char(67),char(111),char(110),
|
||||||
|
char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(68),char(97),char(116),char(97),char(0),char(83),char(111),char(102),char(116),char(66),char(111),char(100),char(121),
|
||||||
|
char(77),char(97),char(116),char(101),char(114),char(105),char(97),char(108),char(68),char(97),char(116),char(97),char(0),char(83),char(111),char(102),char(116),char(66),char(111),char(100),
|
||||||
|
char(121),char(78),char(111),char(100),char(101),char(68),char(97),char(116),char(97),char(0),char(83),char(111),char(102),char(116),char(66),char(111),char(100),char(121),char(76),char(105),
|
||||||
|
char(110),char(107),char(68),char(97),char(116),char(97),char(0),char(83),char(111),char(102),char(116),char(66),char(111),char(100),char(121),char(70),char(97),char(99),char(101),char(68),
|
||||||
|
char(97),char(116),char(97),char(0),char(83),char(111),char(102),char(116),char(66),char(111),char(100),char(121),char(84),char(101),char(116),char(114),char(97),char(68),char(97),char(116),
|
||||||
|
char(97),char(0),char(83),char(111),char(102),char(116),char(82),char(105),char(103),char(105),char(100),char(65),char(110),char(99),char(104),char(111),char(114),char(68),char(97),char(116),
|
||||||
|
char(97),char(0),char(83),char(111),char(102),char(116),char(66),char(111),char(100),char(121),char(67),char(111),char(110),char(102),char(105),char(103),char(68),char(97),char(116),char(97),
|
||||||
|
char(0),char(83),char(111),char(102),char(116),char(66),char(111),char(100),char(121),char(80),char(111),char(115),char(101),char(68),char(97),char(116),char(97),char(0),char(83),char(111),
|
||||||
|
char(102),char(116),char(66),char(111),char(100),char(121),char(67),char(108),char(117),char(115),char(116),char(101),char(114),char(68),char(97),char(116),char(97),char(0),char(98),char(116),
|
||||||
|
char(83),char(111),char(102),char(116),char(66),char(111),char(100),char(121),char(74),char(111),char(105),char(110),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),
|
||||||
|
char(83),char(111),char(102),char(116),char(66),char(111),char(100),char(121),char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97),char(0),char(0),char(0),
|
||||||
|
char(84),char(76),char(69),char(78),char(1),char(0),char(1),char(0),char(2),char(0),char(2),char(0),char(4),char(0),char(4),char(0),char(4),char(0),char(4),char(0),
|
||||||
|
char(8),char(0),char(0),char(0),char(16),char(0),char(48),char(0),char(16),char(0),char(16),char(0),char(32),char(0),char(48),char(0),char(96),char(0),char(64),char(0),
|
||||||
|
char(-128),char(0),char(20),char(0),char(48),char(0),char(80),char(0),char(16),char(0),char(96),char(0),char(-112),char(0),char(16),char(0),char(56),char(0),char(56),char(0),
|
||||||
|
char(20),char(0),char(72),char(0),char(4),char(0),char(4),char(0),char(8),char(0),char(4),char(0),char(56),char(0),char(32),char(0),char(80),char(0),char(72),char(0),
|
||||||
|
char(96),char(0),char(80),char(0),char(32),char(0),char(64),char(0),char(64),char(0),char(16),char(0),char(72),char(0),char(80),char(0),char(-32),char(1),char(16),char(1),
|
||||||
|
char(-72),char(0),char(-104),char(0),char(104),char(0),char(88),char(0),char(-8),char(1),char(-80),char(3),char(8),char(0),char(64),char(0),char(0),char(0),char(96),char(0),
|
||||||
|
char(-128),char(0),char(104),char(1),char(-24),char(0),char(-32),char(0),char(8),char(1),char(104),char(1),char(-40),char(0),char(16),char(0),char(104),char(0),char(24),char(0),
|
||||||
|
char(40),char(0),char(104),char(0),char(96),char(0),char(104),char(0),char(-56),char(0),char(104),char(1),char(112),char(0),char(-32),char(1),char(83),char(84),char(82),char(67),
|
||||||
|
char(65),char(0),char(0),char(0),char(10),char(0),char(3),char(0),char(4),char(0),char(0),char(0),char(4),char(0),char(1),char(0),char(9),char(0),char(2),char(0),
|
||||||
|
char(11),char(0),char(3),char(0),char(10),char(0),char(3),char(0),char(10),char(0),char(4),char(0),char(10),char(0),char(5),char(0),char(12),char(0),char(2),char(0),
|
||||||
|
char(9),char(0),char(6),char(0),char(9),char(0),char(7),char(0),char(13),char(0),char(1),char(0),char(7),char(0),char(8),char(0),char(14),char(0),char(1),char(0),
|
||||||
|
char(8),char(0),char(8),char(0),char(15),char(0),char(1),char(0),char(13),char(0),char(9),char(0),char(16),char(0),char(1),char(0),char(14),char(0),char(9),char(0),
|
||||||
|
char(17),char(0),char(2),char(0),char(15),char(0),char(10),char(0),char(13),char(0),char(11),char(0),char(18),char(0),char(2),char(0),char(16),char(0),char(10),char(0),
|
||||||
|
char(14),char(0),char(11),char(0),char(19),char(0),char(4),char(0),char(4),char(0),char(12),char(0),char(4),char(0),char(13),char(0),char(2),char(0),char(14),char(0),
|
||||||
|
char(2),char(0),char(15),char(0),char(20),char(0),char(6),char(0),char(13),char(0),char(16),char(0),char(13),char(0),char(17),char(0),char(4),char(0),char(18),char(0),
|
||||||
|
char(4),char(0),char(19),char(0),char(4),char(0),char(20),char(0),char(0),char(0),char(21),char(0),char(21),char(0),char(6),char(0),char(14),char(0),char(16),char(0),
|
||||||
|
char(14),char(0),char(17),char(0),char(4),char(0),char(18),char(0),char(4),char(0),char(19),char(0),char(4),char(0),char(20),char(0),char(0),char(0),char(21),char(0),
|
||||||
|
char(22),char(0),char(3),char(0),char(2),char(0),char(14),char(0),char(2),char(0),char(15),char(0),char(4),char(0),char(22),char(0),char(23),char(0),char(12),char(0),
|
||||||
|
char(13),char(0),char(23),char(0),char(13),char(0),char(24),char(0),char(13),char(0),char(25),char(0),char(4),char(0),char(26),char(0),char(4),char(0),char(27),char(0),
|
||||||
|
char(4),char(0),char(28),char(0),char(4),char(0),char(29),char(0),char(20),char(0),char(30),char(0),char(22),char(0),char(31),char(0),char(19),char(0),char(32),char(0),
|
||||||
|
char(4),char(0),char(33),char(0),char(4),char(0),char(34),char(0),char(24),char(0),char(12),char(0),char(14),char(0),char(23),char(0),char(14),char(0),char(24),char(0),
|
||||||
|
char(14),char(0),char(25),char(0),char(4),char(0),char(26),char(0),char(4),char(0),char(27),char(0),char(4),char(0),char(28),char(0),char(4),char(0),char(29),char(0),
|
||||||
|
char(21),char(0),char(30),char(0),char(22),char(0),char(31),char(0),char(4),char(0),char(33),char(0),char(4),char(0),char(34),char(0),char(19),char(0),char(32),char(0),
|
||||||
|
char(25),char(0),char(3),char(0),char(0),char(0),char(35),char(0),char(4),char(0),char(36),char(0),char(0),char(0),char(37),char(0),char(26),char(0),char(5),char(0),
|
||||||
|
char(25),char(0),char(38),char(0),char(13),char(0),char(39),char(0),char(13),char(0),char(40),char(0),char(7),char(0),char(41),char(0),char(0),char(0),char(21),char(0),
|
||||||
|
char(27),char(0),char(5),char(0),char(25),char(0),char(38),char(0),char(13),char(0),char(39),char(0),char(13),char(0),char(42),char(0),char(7),char(0),char(43),char(0),
|
||||||
|
char(4),char(0),char(44),char(0),char(28),char(0),char(2),char(0),char(13),char(0),char(45),char(0),char(7),char(0),char(46),char(0),char(29),char(0),char(4),char(0),
|
||||||
|
char(27),char(0),char(47),char(0),char(28),char(0),char(48),char(0),char(4),char(0),char(49),char(0),char(0),char(0),char(37),char(0),char(30),char(0),char(1),char(0),
|
||||||
|
char(4),char(0),char(50),char(0),char(31),char(0),char(2),char(0),char(2),char(0),char(50),char(0),char(0),char(0),char(51),char(0),char(32),char(0),char(2),char(0),
|
||||||
|
char(2),char(0),char(52),char(0),char(0),char(0),char(51),char(0),char(33),char(0),char(2),char(0),char(0),char(0),char(52),char(0),char(0),char(0),char(53),char(0),
|
||||||
|
char(34),char(0),char(8),char(0),char(13),char(0),char(54),char(0),char(14),char(0),char(55),char(0),char(30),char(0),char(56),char(0),char(32),char(0),char(57),char(0),
|
||||||
|
char(33),char(0),char(58),char(0),char(31),char(0),char(59),char(0),char(4),char(0),char(60),char(0),char(4),char(0),char(61),char(0),char(35),char(0),char(4),char(0),
|
||||||
|
char(34),char(0),char(62),char(0),char(13),char(0),char(63),char(0),char(4),char(0),char(64),char(0),char(0),char(0),char(37),char(0),char(36),char(0),char(7),char(0),
|
||||||
|
char(25),char(0),char(38),char(0),char(35),char(0),char(65),char(0),char(23),char(0),char(66),char(0),char(24),char(0),char(67),char(0),char(37),char(0),char(68),char(0),
|
||||||
|
char(7),char(0),char(43),char(0),char(0),char(0),char(69),char(0),char(38),char(0),char(2),char(0),char(36),char(0),char(70),char(0),char(13),char(0),char(39),char(0),
|
||||||
|
char(39),char(0),char(4),char(0),char(17),char(0),char(71),char(0),char(25),char(0),char(72),char(0),char(4),char(0),char(73),char(0),char(7),char(0),char(74),char(0),
|
||||||
|
char(40),char(0),char(4),char(0),char(25),char(0),char(38),char(0),char(39),char(0),char(75),char(0),char(4),char(0),char(76),char(0),char(7),char(0),char(43),char(0),
|
||||||
|
char(41),char(0),char(3),char(0),char(27),char(0),char(47),char(0),char(4),char(0),char(77),char(0),char(0),char(0),char(37),char(0),char(42),char(0),char(3),char(0),
|
||||||
|
char(27),char(0),char(47),char(0),char(4),char(0),char(77),char(0),char(0),char(0),char(37),char(0),char(43),char(0),char(4),char(0),char(4),char(0),char(78),char(0),
|
||||||
|
char(7),char(0),char(79),char(0),char(7),char(0),char(80),char(0),char(7),char(0),char(81),char(0),char(37),char(0),char(14),char(0),char(4),char(0),char(82),char(0),
|
||||||
|
char(4),char(0),char(83),char(0),char(43),char(0),char(84),char(0),char(4),char(0),char(85),char(0),char(7),char(0),char(86),char(0),char(7),char(0),char(87),char(0),
|
||||||
|
char(7),char(0),char(88),char(0),char(7),char(0),char(89),char(0),char(7),char(0),char(90),char(0),char(4),char(0),char(91),char(0),char(4),char(0),char(92),char(0),
|
||||||
|
char(4),char(0),char(93),char(0),char(4),char(0),char(94),char(0),char(0),char(0),char(37),char(0),char(44),char(0),char(5),char(0),char(25),char(0),char(38),char(0),
|
||||||
|
char(35),char(0),char(65),char(0),char(13),char(0),char(39),char(0),char(7),char(0),char(43),char(0),char(4),char(0),char(95),char(0),char(45),char(0),char(5),char(0),
|
||||||
|
char(27),char(0),char(47),char(0),char(13),char(0),char(96),char(0),char(14),char(0),char(97),char(0),char(4),char(0),char(98),char(0),char(0),char(0),char(99),char(0),
|
||||||
|
char(46),char(0),char(25),char(0),char(9),char(0),char(100),char(0),char(9),char(0),char(101),char(0),char(25),char(0),char(102),char(0),char(0),char(0),char(35),char(0),
|
||||||
|
char(18),char(0),char(103),char(0),char(18),char(0),char(104),char(0),char(14),char(0),char(105),char(0),char(14),char(0),char(106),char(0),char(14),char(0),char(107),char(0),
|
||||||
|
char(8),char(0),char(108),char(0),char(8),char(0),char(109),char(0),char(8),char(0),char(110),char(0),char(8),char(0),char(111),char(0),char(8),char(0),char(112),char(0),
|
||||||
|
char(8),char(0),char(113),char(0),char(8),char(0),char(114),char(0),char(8),char(0),char(115),char(0),char(4),char(0),char(116),char(0),char(4),char(0),char(117),char(0),
|
||||||
|
char(4),char(0),char(118),char(0),char(4),char(0),char(119),char(0),char(4),char(0),char(120),char(0),char(4),char(0),char(121),char(0),char(4),char(0),char(122),char(0),
|
||||||
|
char(0),char(0),char(37),char(0),char(47),char(0),char(25),char(0),char(9),char(0),char(100),char(0),char(9),char(0),char(101),char(0),char(25),char(0),char(102),char(0),
|
||||||
|
char(0),char(0),char(35),char(0),char(17),char(0),char(103),char(0),char(17),char(0),char(104),char(0),char(13),char(0),char(105),char(0),char(13),char(0),char(106),char(0),
|
||||||
|
char(13),char(0),char(107),char(0),char(7),char(0),char(108),char(0),char(7),char(0),char(109),char(0),char(7),char(0),char(110),char(0),char(7),char(0),char(111),char(0),
|
||||||
|
char(7),char(0),char(112),char(0),char(7),char(0),char(113),char(0),char(7),char(0),char(114),char(0),char(7),char(0),char(115),char(0),char(4),char(0),char(116),char(0),
|
||||||
|
char(4),char(0),char(117),char(0),char(4),char(0),char(118),char(0),char(4),char(0),char(119),char(0),char(4),char(0),char(120),char(0),char(4),char(0),char(121),char(0),
|
||||||
|
char(4),char(0),char(122),char(0),char(0),char(0),char(37),char(0),char(48),char(0),char(2),char(0),char(49),char(0),char(123),char(0),char(14),char(0),char(124),char(0),
|
||||||
|
char(50),char(0),char(2),char(0),char(51),char(0),char(123),char(0),char(13),char(0),char(124),char(0),char(52),char(0),char(21),char(0),char(47),char(0),char(125),char(0),
|
||||||
|
char(15),char(0),char(126),char(0),char(13),char(0),char(127),char(0),char(13),char(0),char(-128),char(0),char(13),char(0),char(-127),char(0),char(13),char(0),char(-126),char(0),
|
||||||
|
char(13),char(0),char(124),char(0),char(13),char(0),char(-125),char(0),char(13),char(0),char(-124),char(0),char(13),char(0),char(-123),char(0),char(13),char(0),char(-122),char(0),
|
||||||
|
char(7),char(0),char(-121),char(0),char(7),char(0),char(-120),char(0),char(7),char(0),char(-119),char(0),char(7),char(0),char(-118),char(0),char(7),char(0),char(-117),char(0),
|
||||||
|
char(7),char(0),char(-116),char(0),char(7),char(0),char(-115),char(0),char(7),char(0),char(-114),char(0),char(7),char(0),char(-113),char(0),char(4),char(0),char(-112),char(0),
|
||||||
|
char(53),char(0),char(22),char(0),char(46),char(0),char(125),char(0),char(16),char(0),char(126),char(0),char(14),char(0),char(127),char(0),char(14),char(0),char(-128),char(0),
|
||||||
|
char(14),char(0),char(-127),char(0),char(14),char(0),char(-126),char(0),char(14),char(0),char(124),char(0),char(14),char(0),char(-125),char(0),char(14),char(0),char(-124),char(0),
|
||||||
|
char(14),char(0),char(-123),char(0),char(14),char(0),char(-122),char(0),char(8),char(0),char(-121),char(0),char(8),char(0),char(-120),char(0),char(8),char(0),char(-119),char(0),
|
||||||
|
char(8),char(0),char(-118),char(0),char(8),char(0),char(-117),char(0),char(8),char(0),char(-116),char(0),char(8),char(0),char(-115),char(0),char(8),char(0),char(-114),char(0),
|
||||||
|
char(8),char(0),char(-113),char(0),char(4),char(0),char(-112),char(0),char(0),char(0),char(37),char(0),char(54),char(0),char(2),char(0),char(4),char(0),char(-111),char(0),
|
||||||
|
char(4),char(0),char(-110),char(0),char(55),char(0),char(13),char(0),char(56),char(0),char(-109),char(0),char(56),char(0),char(-108),char(0),char(0),char(0),char(35),char(0),
|
||||||
|
char(4),char(0),char(-107),char(0),char(4),char(0),char(-106),char(0),char(4),char(0),char(-105),char(0),char(4),char(0),char(-104),char(0),char(7),char(0),char(-103),char(0),
|
||||||
|
char(7),char(0),char(-102),char(0),char(4),char(0),char(-101),char(0),char(4),char(0),char(-100),char(0),char(7),char(0),char(-99),char(0),char(4),char(0),char(-98),char(0),
|
||||||
|
char(57),char(0),char(3),char(0),char(55),char(0),char(-97),char(0),char(13),char(0),char(-96),char(0),char(13),char(0),char(-95),char(0),char(58),char(0),char(3),char(0),
|
||||||
|
char(55),char(0),char(-97),char(0),char(14),char(0),char(-96),char(0),char(14),char(0),char(-95),char(0),char(59),char(0),char(13),char(0),char(55),char(0),char(-97),char(0),
|
||||||
|
char(18),char(0),char(-94),char(0),char(18),char(0),char(-93),char(0),char(4),char(0),char(-92),char(0),char(4),char(0),char(-91),char(0),char(4),char(0),char(-90),char(0),
|
||||||
|
char(7),char(0),char(-89),char(0),char(7),char(0),char(-88),char(0),char(7),char(0),char(-87),char(0),char(7),char(0),char(-86),char(0),char(7),char(0),char(-85),char(0),
|
||||||
|
char(7),char(0),char(-84),char(0),char(7),char(0),char(-83),char(0),char(60),char(0),char(13),char(0),char(55),char(0),char(-97),char(0),char(17),char(0),char(-94),char(0),
|
||||||
|
char(17),char(0),char(-93),char(0),char(4),char(0),char(-92),char(0),char(4),char(0),char(-91),char(0),char(4),char(0),char(-90),char(0),char(7),char(0),char(-89),char(0),
|
||||||
|
char(7),char(0),char(-88),char(0),char(7),char(0),char(-87),char(0),char(7),char(0),char(-86),char(0),char(7),char(0),char(-85),char(0),char(7),char(0),char(-84),char(0),
|
||||||
|
char(7),char(0),char(-83),char(0),char(61),char(0),char(11),char(0),char(55),char(0),char(-97),char(0),char(17),char(0),char(-94),char(0),char(17),char(0),char(-93),char(0),
|
||||||
|
char(7),char(0),char(-82),char(0),char(7),char(0),char(-81),char(0),char(7),char(0),char(-80),char(0),char(7),char(0),char(-85),char(0),char(7),char(0),char(-84),char(0),
|
||||||
|
char(7),char(0),char(-83),char(0),char(7),char(0),char(-79),char(0),char(0),char(0),char(21),char(0),char(62),char(0),char(9),char(0),char(55),char(0),char(-97),char(0),
|
||||||
|
char(17),char(0),char(-94),char(0),char(17),char(0),char(-93),char(0),char(13),char(0),char(-78),char(0),char(13),char(0),char(-77),char(0),char(13),char(0),char(-76),char(0),
|
||||||
|
char(13),char(0),char(-75),char(0),char(4),char(0),char(-74),char(0),char(4),char(0),char(-73),char(0),char(63),char(0),char(5),char(0),char(62),char(0),char(-72),char(0),
|
||||||
|
char(4),char(0),char(-71),char(0),char(7),char(0),char(-70),char(0),char(7),char(0),char(-69),char(0),char(7),char(0),char(-68),char(0),char(64),char(0),char(9),char(0),
|
||||||
|
char(55),char(0),char(-97),char(0),char(17),char(0),char(-94),char(0),char(17),char(0),char(-93),char(0),char(7),char(0),char(-78),char(0),char(7),char(0),char(-77),char(0),
|
||||||
|
char(7),char(0),char(-76),char(0),char(7),char(0),char(-75),char(0),char(4),char(0),char(-74),char(0),char(4),char(0),char(-73),char(0),char(49),char(0),char(22),char(0),
|
||||||
|
char(8),char(0),char(-67),char(0),char(8),char(0),char(-79),char(0),char(8),char(0),char(110),char(0),char(8),char(0),char(-66),char(0),char(8),char(0),char(112),char(0),
|
||||||
|
char(8),char(0),char(-65),char(0),char(8),char(0),char(-64),char(0),char(8),char(0),char(-63),char(0),char(8),char(0),char(-62),char(0),char(8),char(0),char(-61),char(0),
|
||||||
|
char(8),char(0),char(-60),char(0),char(8),char(0),char(-59),char(0),char(8),char(0),char(-58),char(0),char(8),char(0),char(-57),char(0),char(8),char(0),char(-56),char(0),
|
||||||
|
char(8),char(0),char(-55),char(0),char(4),char(0),char(-54),char(0),char(4),char(0),char(-53),char(0),char(4),char(0),char(-52),char(0),char(4),char(0),char(-51),char(0),
|
||||||
|
char(4),char(0),char(-50),char(0),char(0),char(0),char(37),char(0),char(51),char(0),char(22),char(0),char(7),char(0),char(-67),char(0),char(7),char(0),char(-79),char(0),
|
||||||
|
char(7),char(0),char(110),char(0),char(7),char(0),char(-66),char(0),char(7),char(0),char(112),char(0),char(7),char(0),char(-65),char(0),char(7),char(0),char(-64),char(0),
|
||||||
|
char(7),char(0),char(-63),char(0),char(7),char(0),char(-62),char(0),char(7),char(0),char(-61),char(0),char(7),char(0),char(-60),char(0),char(7),char(0),char(-59),char(0),
|
||||||
|
char(7),char(0),char(-58),char(0),char(7),char(0),char(-57),char(0),char(7),char(0),char(-56),char(0),char(7),char(0),char(-55),char(0),char(4),char(0),char(-54),char(0),
|
||||||
|
char(4),char(0),char(-53),char(0),char(4),char(0),char(-52),char(0),char(4),char(0),char(-51),char(0),char(4),char(0),char(-50),char(0),char(0),char(0),char(37),char(0),
|
||||||
|
char(65),char(0),char(4),char(0),char(7),char(0),char(-49),char(0),char(7),char(0),char(-48),char(0),char(7),char(0),char(-47),char(0),char(4),char(0),char(78),char(0),
|
||||||
|
char(66),char(0),char(10),char(0),char(65),char(0),char(-46),char(0),char(13),char(0),char(-45),char(0),char(13),char(0),char(-44),char(0),char(13),char(0),char(-43),char(0),
|
||||||
|
char(13),char(0),char(-42),char(0),char(13),char(0),char(-41),char(0),char(7),char(0),char(-121),char(0),char(7),char(0),char(-40),char(0),char(4),char(0),char(-39),char(0),
|
||||||
|
char(4),char(0),char(53),char(0),char(67),char(0),char(4),char(0),char(65),char(0),char(-46),char(0),char(4),char(0),char(-38),char(0),char(7),char(0),char(-37),char(0),
|
||||||
|
char(4),char(0),char(-36),char(0),char(68),char(0),char(4),char(0),char(13),char(0),char(-41),char(0),char(65),char(0),char(-46),char(0),char(4),char(0),char(-35),char(0),
|
||||||
|
char(7),char(0),char(-34),char(0),char(69),char(0),char(7),char(0),char(13),char(0),char(-33),char(0),char(65),char(0),char(-46),char(0),char(4),char(0),char(-32),char(0),
|
||||||
|
char(7),char(0),char(-31),char(0),char(7),char(0),char(-30),char(0),char(7),char(0),char(-29),char(0),char(4),char(0),char(53),char(0),char(70),char(0),char(6),char(0),
|
||||||
|
char(15),char(0),char(-28),char(0),char(13),char(0),char(-30),char(0),char(13),char(0),char(-27),char(0),char(56),char(0),char(-26),char(0),char(4),char(0),char(-25),char(0),
|
||||||
|
char(7),char(0),char(-29),char(0),char(71),char(0),char(26),char(0),char(4),char(0),char(-24),char(0),char(7),char(0),char(-23),char(0),char(7),char(0),char(-79),char(0),
|
||||||
|
char(7),char(0),char(-22),char(0),char(7),char(0),char(-21),char(0),char(7),char(0),char(-20),char(0),char(7),char(0),char(-19),char(0),char(7),char(0),char(-18),char(0),
|
||||||
|
char(7),char(0),char(-17),char(0),char(7),char(0),char(-16),char(0),char(7),char(0),char(-15),char(0),char(7),char(0),char(-14),char(0),char(7),char(0),char(-13),char(0),
|
||||||
|
char(7),char(0),char(-12),char(0),char(7),char(0),char(-11),char(0),char(7),char(0),char(-10),char(0),char(7),char(0),char(-9),char(0),char(7),char(0),char(-8),char(0),
|
||||||
|
char(7),char(0),char(-7),char(0),char(7),char(0),char(-6),char(0),char(7),char(0),char(-5),char(0),char(4),char(0),char(-4),char(0),char(4),char(0),char(-3),char(0),
|
||||||
|
char(4),char(0),char(-2),char(0),char(4),char(0),char(-1),char(0),char(4),char(0),char(117),char(0),char(72),char(0),char(12),char(0),char(15),char(0),char(0),char(1),
|
||||||
|
char(15),char(0),char(1),char(1),char(15),char(0),char(2),char(1),char(13),char(0),char(3),char(1),char(13),char(0),char(4),char(1),char(7),char(0),char(5),char(1),
|
||||||
|
char(4),char(0),char(6),char(1),char(4),char(0),char(7),char(1),char(4),char(0),char(8),char(1),char(4),char(0),char(9),char(1),char(7),char(0),char(-31),char(0),
|
||||||
|
char(4),char(0),char(53),char(0),char(73),char(0),char(27),char(0),char(17),char(0),char(10),char(1),char(15),char(0),char(11),char(1),char(15),char(0),char(12),char(1),
|
||||||
|
char(13),char(0),char(3),char(1),char(13),char(0),char(13),char(1),char(13),char(0),char(14),char(1),char(13),char(0),char(15),char(1),char(13),char(0),char(16),char(1),
|
||||||
|
char(13),char(0),char(17),char(1),char(4),char(0),char(18),char(1),char(7),char(0),char(19),char(1),char(4),char(0),char(20),char(1),char(4),char(0),char(21),char(1),
|
||||||
|
char(4),char(0),char(22),char(1),char(7),char(0),char(23),char(1),char(7),char(0),char(24),char(1),char(4),char(0),char(25),char(1),char(4),char(0),char(26),char(1),
|
||||||
|
char(7),char(0),char(27),char(1),char(7),char(0),char(28),char(1),char(7),char(0),char(29),char(1),char(7),char(0),char(30),char(1),char(7),char(0),char(31),char(1),
|
||||||
|
char(7),char(0),char(32),char(1),char(4),char(0),char(33),char(1),char(4),char(0),char(34),char(1),char(4),char(0),char(35),char(1),char(74),char(0),char(12),char(0),
|
||||||
|
char(9),char(0),char(36),char(1),char(9),char(0),char(37),char(1),char(13),char(0),char(38),char(1),char(7),char(0),char(39),char(1),char(7),char(0),char(-63),char(0),
|
||||||
|
char(7),char(0),char(40),char(1),char(4),char(0),char(41),char(1),char(13),char(0),char(42),char(1),char(4),char(0),char(43),char(1),char(4),char(0),char(44),char(1),
|
||||||
|
char(4),char(0),char(45),char(1),char(4),char(0),char(53),char(0),char(75),char(0),char(19),char(0),char(47),char(0),char(125),char(0),char(72),char(0),char(46),char(1),
|
||||||
|
char(65),char(0),char(47),char(1),char(66),char(0),char(48),char(1),char(67),char(0),char(49),char(1),char(68),char(0),char(50),char(1),char(69),char(0),char(51),char(1),
|
||||||
|
char(70),char(0),char(52),char(1),char(73),char(0),char(53),char(1),char(74),char(0),char(54),char(1),char(4),char(0),char(55),char(1),char(4),char(0),char(21),char(1),
|
||||||
|
char(4),char(0),char(56),char(1),char(4),char(0),char(57),char(1),char(4),char(0),char(58),char(1),char(4),char(0),char(59),char(1),char(4),char(0),char(60),char(1),
|
||||||
|
char(4),char(0),char(61),char(1),char(71),char(0),char(62),char(1),};
|
||||||
|
int sBulletDNAlen64= sizeof(sBulletDNAstr64);
|
||||||
640
src/Bullet3Serialize/Bullet2FileLoader/btSerializer.h
Normal file
640
src/Bullet3Serialize/Bullet2FileLoader/btSerializer.h
Normal file
@@ -0,0 +1,640 @@
|
|||||||
|
/*
|
||||||
|
Bullet Continuous Collision Detection and Physics Library
|
||||||
|
Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
|
||||||
|
|
||||||
|
This software is provided 'as-is', without any express or implied warranty.
|
||||||
|
In no event will the authors be held liable for any damages arising from the use of this software.
|
||||||
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
|
including commercial applications, and to alter it and redistribute it freely,
|
||||||
|
subject to the following restrictions:
|
||||||
|
|
||||||
|
1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
|
||||||
|
2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
|
||||||
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BT_SERIALIZER_H
|
||||||
|
#define BT_SERIALIZER_H
|
||||||
|
|
||||||
|
#include "Bullet3Common/b3Scalar.h" // has definitions like SIMD_FORCE_INLINE
|
||||||
|
#include "Bullet3Common/b3StackAlloc.h"
|
||||||
|
#include "Bullet3Common/b3HashMap.h"
|
||||||
|
|
||||||
|
#if !defined( __CELLOS_LV2__) && !defined(__MWERKS__)
|
||||||
|
#include <memory.h>
|
||||||
|
#endif
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
///only the 32bit versions for now
|
||||||
|
extern char sBulletDNAstr[];
|
||||||
|
extern int sBulletDNAlen;
|
||||||
|
extern char sBulletDNAstr64[];
|
||||||
|
extern int sBulletDNAlen64;
|
||||||
|
|
||||||
|
SIMD_FORCE_INLINE int btStrLen(const char* str)
|
||||||
|
{
|
||||||
|
if (!str)
|
||||||
|
return(0);
|
||||||
|
int len = 0;
|
||||||
|
|
||||||
|
while (*str != 0)
|
||||||
|
{
|
||||||
|
str++;
|
||||||
|
len++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return len;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class btChunk
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
int m_chunkCode;
|
||||||
|
int m_length;
|
||||||
|
void *m_oldPtr;
|
||||||
|
int m_dna_nr;
|
||||||
|
int m_number;
|
||||||
|
};
|
||||||
|
|
||||||
|
enum btSerializationFlags
|
||||||
|
{
|
||||||
|
BT_SERIALIZE_NO_BVH = 1,
|
||||||
|
BT_SERIALIZE_NO_TRIANGLEINFOMAP = 2,
|
||||||
|
BT_SERIALIZE_NO_DUPLICATE_ASSERT = 4
|
||||||
|
};
|
||||||
|
|
||||||
|
class btSerializer
|
||||||
|
{
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
virtual ~btSerializer() {}
|
||||||
|
|
||||||
|
virtual const unsigned char* getBufferPointer() const = 0;
|
||||||
|
|
||||||
|
virtual int getCurrentBufferSize() const = 0;
|
||||||
|
|
||||||
|
virtual btChunk* allocate(size_t size, int numElements) = 0;
|
||||||
|
|
||||||
|
virtual void finalizeChunk(btChunk* chunk, const char* structType, int chunkCode,void* oldPtr)= 0;
|
||||||
|
|
||||||
|
virtual void* findPointer(void* oldPtr) = 0;
|
||||||
|
|
||||||
|
virtual void* getUniquePointer(void*oldPtr) = 0;
|
||||||
|
|
||||||
|
virtual void startSerialization() = 0;
|
||||||
|
|
||||||
|
virtual void finishSerialization() = 0;
|
||||||
|
|
||||||
|
virtual const char* findNameForPointer(const void* ptr) const = 0;
|
||||||
|
|
||||||
|
virtual void registerNameForPointer(const void* ptr, const char* name) = 0;
|
||||||
|
|
||||||
|
virtual void serializeName(const char* ptr) = 0;
|
||||||
|
|
||||||
|
virtual int getSerializationFlags() const = 0;
|
||||||
|
|
||||||
|
virtual void setSerializationFlags(int flags) = 0;
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define BT_HEADER_LENGTH 12
|
||||||
|
#if defined(__sgi) || defined (__sparc) || defined (__sparc__) || defined (__PPC__) || defined (__ppc__) || defined (__BIG_ENDIAN__)
|
||||||
|
# define BT_MAKE_ID(a,b,c,d) ( (int)(a)<<24 | (int)(b)<<16 | (c)<<8 | (d) )
|
||||||
|
#else
|
||||||
|
# define BT_MAKE_ID(a,b,c,d) ( (int)(d)<<24 | (int)(c)<<16 | (b)<<8 | (a) )
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define BT_SOFTBODY_CODE BT_MAKE_ID('S','B','D','Y')
|
||||||
|
#define BT_COLLISIONOBJECT_CODE BT_MAKE_ID('C','O','B','J')
|
||||||
|
#define BT_RIGIDBODY_CODE BT_MAKE_ID('R','B','D','Y')
|
||||||
|
#define BT_CONSTRAINT_CODE BT_MAKE_ID('C','O','N','S')
|
||||||
|
#define BT_BOXSHAPE_CODE BT_MAKE_ID('B','O','X','S')
|
||||||
|
#define BT_QUANTIZED_BVH_CODE BT_MAKE_ID('Q','B','V','H')
|
||||||
|
#define BT_TRIANLGE_INFO_MAP BT_MAKE_ID('T','M','A','P')
|
||||||
|
#define BT_SHAPE_CODE BT_MAKE_ID('S','H','A','P')
|
||||||
|
#define BT_ARRAY_CODE BT_MAKE_ID('A','R','A','Y')
|
||||||
|
#define BT_SBMATERIAL_CODE BT_MAKE_ID('S','B','M','T')
|
||||||
|
#define BT_SBNODE_CODE BT_MAKE_ID('S','B','N','D')
|
||||||
|
#define BT_DYNAMICSWORLD_CODE BT_MAKE_ID('D','W','L','D')
|
||||||
|
#define BT_DNA_CODE BT_MAKE_ID('D','N','A','1')
|
||||||
|
|
||||||
|
|
||||||
|
struct btPointerUid
|
||||||
|
{
|
||||||
|
union
|
||||||
|
{
|
||||||
|
void* m_ptr;
|
||||||
|
int m_uniqueIds[2];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
///The btDefaultSerializer is the main Bullet serialization class.
|
||||||
|
///The constructor takes an optional argument for backwards compatibility, it is recommended to leave this empty/zero.
|
||||||
|
class btDefaultSerializer : public btSerializer
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
b3AlignedObjectArray<char*> mTypes;
|
||||||
|
b3AlignedObjectArray<short*> mStructs;
|
||||||
|
b3AlignedObjectArray<short> mTlens;
|
||||||
|
b3HashMap<btHashInt, int> mStructReverse;
|
||||||
|
b3HashMap<btHashString,int> mTypeLookup;
|
||||||
|
|
||||||
|
|
||||||
|
b3HashMap<btHashPtr,void*> m_chunkP;
|
||||||
|
|
||||||
|
b3HashMap<btHashPtr,const char*> m_nameMap;
|
||||||
|
|
||||||
|
b3HashMap<btHashPtr,btPointerUid> m_uniquePointers;
|
||||||
|
int m_uniqueIdGenerator;
|
||||||
|
|
||||||
|
int m_totalSize;
|
||||||
|
unsigned char* m_buffer;
|
||||||
|
int m_currentSize;
|
||||||
|
void* m_dna;
|
||||||
|
int m_dnaLength;
|
||||||
|
|
||||||
|
int m_serializationFlags;
|
||||||
|
|
||||||
|
|
||||||
|
b3AlignedObjectArray<btChunk*> m_chunkPtrs;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
virtual void* findPointer(void* oldPtr)
|
||||||
|
{
|
||||||
|
void** ptr = m_chunkP.find(oldPtr);
|
||||||
|
if (ptr && *ptr)
|
||||||
|
return *ptr;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void writeDNA()
|
||||||
|
{
|
||||||
|
btChunk* dnaChunk = allocate(m_dnaLength,1);
|
||||||
|
memcpy(dnaChunk->m_oldPtr,m_dna,m_dnaLength);
|
||||||
|
finalizeChunk(dnaChunk,"DNA1",BT_DNA_CODE, m_dna);
|
||||||
|
}
|
||||||
|
|
||||||
|
int getReverseType(const char *type) const
|
||||||
|
{
|
||||||
|
|
||||||
|
btHashString key(type);
|
||||||
|
const int* valuePtr = mTypeLookup.find(key);
|
||||||
|
if (valuePtr)
|
||||||
|
return *valuePtr;
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void initDNA(const char* bdnaOrg,int dnalen)
|
||||||
|
{
|
||||||
|
///was already initialized
|
||||||
|
if (m_dna)
|
||||||
|
return;
|
||||||
|
|
||||||
|
int littleEndian= 1;
|
||||||
|
littleEndian= ((char*)&littleEndian)[0];
|
||||||
|
|
||||||
|
|
||||||
|
m_dna = btAlignedAlloc(dnalen,16);
|
||||||
|
memcpy(m_dna,bdnaOrg,dnalen);
|
||||||
|
m_dnaLength = dnalen;
|
||||||
|
|
||||||
|
int *intPtr=0;
|
||||||
|
short *shtPtr=0;
|
||||||
|
char *cp = 0;int dataLen =0;
|
||||||
|
intPtr = (int*)m_dna;
|
||||||
|
|
||||||
|
/*
|
||||||
|
SDNA (4 bytes) (magic number)
|
||||||
|
NAME (4 bytes)
|
||||||
|
<nr> (4 bytes) amount of names (int)
|
||||||
|
<string>
|
||||||
|
<string>
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (strncmp((const char*)m_dna, "SDNA", 4)==0)
|
||||||
|
{
|
||||||
|
// skip ++ NAME
|
||||||
|
intPtr++; intPtr++;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Parse names
|
||||||
|
if (!littleEndian)
|
||||||
|
*intPtr = btSwapEndian(*intPtr);
|
||||||
|
|
||||||
|
dataLen = *intPtr;
|
||||||
|
|
||||||
|
intPtr++;
|
||||||
|
|
||||||
|
cp = (char*)intPtr;
|
||||||
|
int i;
|
||||||
|
for ( i=0; i<dataLen; i++)
|
||||||
|
{
|
||||||
|
|
||||||
|
while (*cp)cp++;
|
||||||
|
cp++;
|
||||||
|
}
|
||||||
|
cp = btAlignPointer(cp,4);
|
||||||
|
|
||||||
|
/*
|
||||||
|
TYPE (4 bytes)
|
||||||
|
<nr> amount of types (int)
|
||||||
|
<string>
|
||||||
|
<string>
|
||||||
|
*/
|
||||||
|
|
||||||
|
intPtr = (int*)cp;
|
||||||
|
btAssert(strncmp(cp, "TYPE", 4)==0); intPtr++;
|
||||||
|
|
||||||
|
if (!littleEndian)
|
||||||
|
*intPtr = btSwapEndian(*intPtr);
|
||||||
|
|
||||||
|
dataLen = *intPtr;
|
||||||
|
intPtr++;
|
||||||
|
|
||||||
|
|
||||||
|
cp = (char*)intPtr;
|
||||||
|
for (i=0; i<dataLen; i++)
|
||||||
|
{
|
||||||
|
mTypes.push_back(cp);
|
||||||
|
while (*cp)cp++;
|
||||||
|
cp++;
|
||||||
|
}
|
||||||
|
|
||||||
|
cp = btAlignPointer(cp,4);
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
TLEN (4 bytes)
|
||||||
|
<len> (short) the lengths of types
|
||||||
|
<len>
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Parse type lens
|
||||||
|
intPtr = (int*)cp;
|
||||||
|
btAssert(strncmp(cp, "TLEN", 4)==0); intPtr++;
|
||||||
|
|
||||||
|
dataLen = (int)mTypes.size();
|
||||||
|
|
||||||
|
shtPtr = (short*)intPtr;
|
||||||
|
for (i=0; i<dataLen; i++, shtPtr++)
|
||||||
|
{
|
||||||
|
if (!littleEndian)
|
||||||
|
shtPtr[0] = btSwapEndian(shtPtr[0]);
|
||||||
|
mTlens.push_back(shtPtr[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dataLen & 1) shtPtr++;
|
||||||
|
|
||||||
|
/*
|
||||||
|
STRC (4 bytes)
|
||||||
|
<nr> amount of structs (int)
|
||||||
|
<typenr>
|
||||||
|
<nr_of_elems>
|
||||||
|
<typenr>
|
||||||
|
<namenr>
|
||||||
|
<typenr>
|
||||||
|
<namenr>
|
||||||
|
*/
|
||||||
|
|
||||||
|
intPtr = (int*)shtPtr;
|
||||||
|
cp = (char*)intPtr;
|
||||||
|
btAssert(strncmp(cp, "STRC", 4)==0); intPtr++;
|
||||||
|
|
||||||
|
if (!littleEndian)
|
||||||
|
*intPtr = btSwapEndian(*intPtr);
|
||||||
|
dataLen = *intPtr ;
|
||||||
|
intPtr++;
|
||||||
|
|
||||||
|
|
||||||
|
shtPtr = (short*)intPtr;
|
||||||
|
for (i=0; i<dataLen; i++)
|
||||||
|
{
|
||||||
|
mStructs.push_back (shtPtr);
|
||||||
|
|
||||||
|
if (!littleEndian)
|
||||||
|
{
|
||||||
|
shtPtr[0]= btSwapEndian(shtPtr[0]);
|
||||||
|
shtPtr[1]= btSwapEndian(shtPtr[1]);
|
||||||
|
|
||||||
|
int len = shtPtr[1];
|
||||||
|
shtPtr+= 2;
|
||||||
|
|
||||||
|
for (int a=0; a<len; a++, shtPtr+=2)
|
||||||
|
{
|
||||||
|
shtPtr[0]= btSwapEndian(shtPtr[0]);
|
||||||
|
shtPtr[1]= btSwapEndian(shtPtr[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
shtPtr+= (2*shtPtr[1])+2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// build reverse lookups
|
||||||
|
for (i=0; i<(int)mStructs.size(); i++)
|
||||||
|
{
|
||||||
|
short *strc = mStructs.at(i);
|
||||||
|
mStructReverse.insert(strc[0], i);
|
||||||
|
mTypeLookup.insert(btHashString(mTypes[strc[0]]),i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
btDefaultSerializer(int totalSize=0)
|
||||||
|
:m_totalSize(totalSize),
|
||||||
|
m_currentSize(0),
|
||||||
|
m_dna(0),
|
||||||
|
m_dnaLength(0),
|
||||||
|
m_serializationFlags(0)
|
||||||
|
{
|
||||||
|
m_buffer = m_totalSize?(unsigned char*)btAlignedAlloc(totalSize,16):0;
|
||||||
|
|
||||||
|
const bool VOID_IS_8 = ((sizeof(void*)==8));
|
||||||
|
|
||||||
|
#ifdef BT_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES
|
||||||
|
if (VOID_IS_8)
|
||||||
|
{
|
||||||
|
#if _WIN64
|
||||||
|
initDNA((const char*)sBulletDNAstr64,sBulletDNAlen64);
|
||||||
|
#else
|
||||||
|
btAssert(0);
|
||||||
|
#endif
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
#ifndef _WIN64
|
||||||
|
initDNA((const char*)sBulletDNAstr,sBulletDNAlen);
|
||||||
|
#else
|
||||||
|
btAssert(0);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#else //BT_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES
|
||||||
|
if (VOID_IS_8)
|
||||||
|
{
|
||||||
|
initDNA((const char*)sBulletDNAstr64,sBulletDNAlen64);
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
initDNA((const char*)sBulletDNAstr,sBulletDNAlen);
|
||||||
|
}
|
||||||
|
#endif //BT_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual ~btDefaultSerializer()
|
||||||
|
{
|
||||||
|
if (m_buffer)
|
||||||
|
btAlignedFree(m_buffer);
|
||||||
|
if (m_dna)
|
||||||
|
btAlignedFree(m_dna);
|
||||||
|
}
|
||||||
|
|
||||||
|
void writeHeader(unsigned char* buffer) const
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef BT_USE_DOUBLE_PRECISION
|
||||||
|
memcpy(buffer, "BULLETd", 7);
|
||||||
|
#else
|
||||||
|
memcpy(buffer, "BULLETf", 7);
|
||||||
|
#endif //BT_USE_DOUBLE_PRECISION
|
||||||
|
|
||||||
|
int littleEndian= 1;
|
||||||
|
littleEndian= ((char*)&littleEndian)[0];
|
||||||
|
|
||||||
|
if (sizeof(void*)==8)
|
||||||
|
{
|
||||||
|
buffer[7] = '-';
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
buffer[7] = '_';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (littleEndian)
|
||||||
|
{
|
||||||
|
buffer[8]='v';
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
buffer[8]='V';
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
buffer[9] = '2';
|
||||||
|
buffer[10] = '8';
|
||||||
|
buffer[11] = '1';
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void startSerialization()
|
||||||
|
{
|
||||||
|
m_uniqueIdGenerator= 1;
|
||||||
|
if (m_totalSize)
|
||||||
|
{
|
||||||
|
unsigned char* buffer = internalAlloc(BT_HEADER_LENGTH);
|
||||||
|
writeHeader(buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void finishSerialization()
|
||||||
|
{
|
||||||
|
writeDNA();
|
||||||
|
|
||||||
|
//if we didn't pre-allocate a buffer, we need to create a contiguous buffer now
|
||||||
|
int mysize = 0;
|
||||||
|
if (!m_totalSize)
|
||||||
|
{
|
||||||
|
if (m_buffer)
|
||||||
|
btAlignedFree(m_buffer);
|
||||||
|
|
||||||
|
m_currentSize += BT_HEADER_LENGTH;
|
||||||
|
m_buffer = (unsigned char*)btAlignedAlloc(m_currentSize,16);
|
||||||
|
|
||||||
|
unsigned char* currentPtr = m_buffer;
|
||||||
|
writeHeader(m_buffer);
|
||||||
|
currentPtr += BT_HEADER_LENGTH;
|
||||||
|
mysize+=BT_HEADER_LENGTH;
|
||||||
|
for (int i=0;i< m_chunkPtrs.size();i++)
|
||||||
|
{
|
||||||
|
int curLength = sizeof(btChunk)+m_chunkPtrs[i]->m_length;
|
||||||
|
memcpy(currentPtr,m_chunkPtrs[i], curLength);
|
||||||
|
btAlignedFree(m_chunkPtrs[i]);
|
||||||
|
currentPtr+=curLength;
|
||||||
|
mysize+=curLength;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mTypes.clear();
|
||||||
|
mStructs.clear();
|
||||||
|
mTlens.clear();
|
||||||
|
mStructReverse.clear();
|
||||||
|
mTypeLookup.clear();
|
||||||
|
m_chunkP.clear();
|
||||||
|
m_nameMap.clear();
|
||||||
|
m_uniquePointers.clear();
|
||||||
|
m_chunkPtrs.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void* getUniquePointer(void*oldPtr)
|
||||||
|
{
|
||||||
|
if (!oldPtr)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
btPointerUid* uptr = (btPointerUid*)m_uniquePointers.find(oldPtr);
|
||||||
|
if (uptr)
|
||||||
|
{
|
||||||
|
return uptr->m_ptr;
|
||||||
|
}
|
||||||
|
m_uniqueIdGenerator++;
|
||||||
|
|
||||||
|
btPointerUid uid;
|
||||||
|
uid.m_uniqueIds[0] = m_uniqueIdGenerator;
|
||||||
|
uid.m_uniqueIds[1] = m_uniqueIdGenerator;
|
||||||
|
m_uniquePointers.insert(oldPtr,uid);
|
||||||
|
return uid.m_ptr;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual const unsigned char* getBufferPointer() const
|
||||||
|
{
|
||||||
|
return m_buffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual int getCurrentBufferSize() const
|
||||||
|
{
|
||||||
|
return m_currentSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void finalizeChunk(btChunk* chunk, const char* structType, int chunkCode,void* oldPtr)
|
||||||
|
{
|
||||||
|
if (!(m_serializationFlags&BT_SERIALIZE_NO_DUPLICATE_ASSERT))
|
||||||
|
{
|
||||||
|
btAssert(!findPointer(oldPtr));
|
||||||
|
}
|
||||||
|
|
||||||
|
chunk->m_dna_nr = getReverseType(structType);
|
||||||
|
|
||||||
|
chunk->m_chunkCode = chunkCode;
|
||||||
|
|
||||||
|
void* uniquePtr = getUniquePointer(oldPtr);
|
||||||
|
|
||||||
|
m_chunkP.insert(oldPtr,uniquePtr);//chunk->m_oldPtr);
|
||||||
|
chunk->m_oldPtr = uniquePtr;//oldPtr;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
virtual unsigned char* internalAlloc(size_t size)
|
||||||
|
{
|
||||||
|
unsigned char* ptr = 0;
|
||||||
|
|
||||||
|
if (m_totalSize)
|
||||||
|
{
|
||||||
|
ptr = m_buffer+m_currentSize;
|
||||||
|
m_currentSize += int(size);
|
||||||
|
btAssert(m_currentSize<m_totalSize);
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
ptr = (unsigned char*)btAlignedAlloc(size,16);
|
||||||
|
m_currentSize += int(size);
|
||||||
|
}
|
||||||
|
return ptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
virtual btChunk* allocate(size_t size, int numElements)
|
||||||
|
{
|
||||||
|
|
||||||
|
unsigned char* ptr = internalAlloc(int(size)*numElements+sizeof(btChunk));
|
||||||
|
|
||||||
|
unsigned char* data = ptr + sizeof(btChunk);
|
||||||
|
|
||||||
|
btChunk* chunk = (btChunk*)ptr;
|
||||||
|
chunk->m_chunkCode = 0;
|
||||||
|
chunk->m_oldPtr = data;
|
||||||
|
chunk->m_length = int(size)*numElements;
|
||||||
|
chunk->m_number = numElements;
|
||||||
|
|
||||||
|
m_chunkPtrs.push_back(chunk);
|
||||||
|
|
||||||
|
|
||||||
|
return chunk;
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual const char* findNameForPointer(const void* ptr) const
|
||||||
|
{
|
||||||
|
const char*const * namePtr = m_nameMap.find(ptr);
|
||||||
|
if (namePtr && *namePtr)
|
||||||
|
return *namePtr;
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void registerNameForPointer(const void* ptr, const char* name)
|
||||||
|
{
|
||||||
|
m_nameMap.insert(ptr,name);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void serializeName(const char* name)
|
||||||
|
{
|
||||||
|
if (name)
|
||||||
|
{
|
||||||
|
//don't serialize name twice
|
||||||
|
if (findPointer((void*)name))
|
||||||
|
return;
|
||||||
|
|
||||||
|
int len = btStrLen(name);
|
||||||
|
if (len)
|
||||||
|
{
|
||||||
|
|
||||||
|
int newLen = len+1;
|
||||||
|
int padding = ((newLen+3)&~3)-newLen;
|
||||||
|
newLen += padding;
|
||||||
|
|
||||||
|
//serialize name string now
|
||||||
|
btChunk* chunk = allocate(sizeof(char),newLen);
|
||||||
|
char* destinationName = (char*)chunk->m_oldPtr;
|
||||||
|
for (int i=0;i<len;i++)
|
||||||
|
{
|
||||||
|
destinationName[i] = name[i];
|
||||||
|
}
|
||||||
|
destinationName[len] = 0;
|
||||||
|
finalizeChunk(chunk,"char",BT_ARRAY_CODE,(void*)name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual int getSerializationFlags() const
|
||||||
|
{
|
||||||
|
return m_serializationFlags;
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void setSerializationFlags(int flags)
|
||||||
|
{
|
||||||
|
m_serializationFlags = flags;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#endif //BT_SERIALIZER_H
|
||||||
|
|
||||||
12
src/Bullet3Serialize/Bullet2FileLoader/premake4.lua
Normal file
12
src/Bullet3Serialize/Bullet2FileLoader/premake4.lua
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
project "Bullet2FileLoader"
|
||||||
|
|
||||||
|
kind "StaticLib"
|
||||||
|
targetdir "../../lib"
|
||||||
|
includedirs {
|
||||||
|
"../../../src"
|
||||||
|
}
|
||||||
|
|
||||||
|
files {
|
||||||
|
"**.cpp",
|
||||||
|
"**.h"
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user