Hello Carsten,
there are some quirks however. Attached you can find a slightly modified
version which allows movement of two clip planes by keystrokes.
keys:
a = enable/disable clip plane 0
s = enable/disable clip plane 1
y = move clip plane 0 on positive normal direction
x = move clip plane 0 on negative normal direction
n = move clip plane 1 on positive normal direction
m = move clip plane 1 on negative normal direction
Moving the clip planes results in some strange artefacts. I do currently not
know what is wrong here.
There is also another problem (possibly related). If I have more than one
object I got failures on the following occasions:
a) The objects intersect.
b) The objects don't intersect but overlap after some camera movement.
Best,
Johannes
P.S.: Today I send another mail to the group about a problem with file
loading I encountered. Unfortunately, the list blocked the mail due to
attachmenent size. Could you take a look please.
// OpenSG example: ClipPlaneCaps
//
// Demonstrates the use of the ClipPlaneChunk, and StencilChunk for capping
of clipped geometry
#include <vector>
#include <OpenSG/OSGGLUT.h>
#include <OpenSG/OSGConfig.h>
#include <OpenSG/OSGSimpleGeometry.h>
#include <OpenSG/OSGPassiveWindow.h>
#include <OpenSG/OSGSimpleSceneManager.h>
#include <OpenSG/OSGSceneFileHandler.h>
#include <OpenSG/OSGMultiSwitch.h>
#include <OpenSG/OSGMaterialGroup.h>
#include <OpenSG/OSGChunkMaterial.h>
#include <OpenSG/OSGSimpleMaterial.h>
#include <OpenSG/OSGClipPlaneChunk.h>
#include <OpenSG/OSGStencilChunk.h>
OSG_USING_NAMESPACE
typedef std::vector<NodePtr> VecNodesT;
struct ClipPlaneData
{
Vec4f _equation;
bool _enabled;
};
typedef std::vector<ClipPlaneData> VecClipPlaneData;
struct ClipPlaneDetails {
ClipPlaneChunkPtr _clipPlaneChunk;
NodePtr _planeTrafoNode;
MaterialGroupPtr _materialCore;
};
typedef std::vector<ClipPlaneDetails> VecClipPlaneDetailsT;
// global state
VecClipPlaneData vecClipPlaneData;
VecClipPlaneDetailsT vecClipPlaneDetails;
SimpleSceneManager *mgr;
// the number of clipping planes supported by the demo
const int iNumClipPlanes = 2;
void createClipPlaneDetails()
{
for (int i = 0; i < iNumClipPlanes; ++i) {
ClipPlaneDetails details;
//
// Create clip plane chunk
//
details._clipPlaneChunk = ClipPlaneChunk::create();
addRefCP(details._clipPlaneChunk);
{
FCEditGuard guard(details._clipPlaneChunk);
details._clipPlaneChunk->setEquation(Vec4f(1,0,0,0));
details._clipPlaneChunk->setEnable(false);
NodePtr beacon = Node::create();
addRefCP(beacon);
details._clipPlaneChunk->setBeacon(beacon);
}
//
// Create plane geometry
//
NodePtr planeGeoNode = makePlane(100.f, 100.f, 128, 128);
Matrix mat;
mat.setIdentity();
TransformPtr transfCore = Transform::create();
{
FCEditGuard guard(transfCore);
transfCore->setMatrix(mat);
}
details._planeTrafoNode = Node::create();
addRefCP(details._planeTrafoNode);
{
FCEditGuard guard(details._planeTrafoNode);
details._planeTrafoNode->setCore(transfCore);
details._planeTrafoNode->addChild(planeGeoNode);
}
//
// Create stencil material core
//
StencilChunkPtr stencilChunk = StencilChunk::create();
{
FCEditGuard guard(stencilChunk);
stencilChunk->setClearBuffer(1);
stencilChunk->setStencilFunc(GL_NEVER);
stencilChunk->setStencilValue(1);
stencilChunk->setStencilMask(1);
stencilChunk->setStencilOpFail(GL_INVERT);
stencilChunk->setStencilOpZFail(GL_INVERT);
stencilChunk->setStencilOpZPass(GL_INVERT);
}
ChunkMaterialPtr mat1 = ChunkMaterial::create();
{
FCEditGuard guard(mat1);
mat1->addChunk(stencilChunk);
mat1->addChunk(details._clipPlaneChunk);
mat1->setSortKey(2*i + 0);
}
details._materialCore = MaterialGroup::create();
addRefCP(details._materialCore);
{
FCEditGuard guard(details._materialCore);
details._materialCore->setMaterial(mat1);
}
vecClipPlaneDetails.push_back(details);
}
}
void destroyClipPlaneDetails()
{
for (int i = 0; i < iNumClipPlanes; ++i) {
subRefCP(vecClipPlaneDetails[i]._clipPlaneChunk->getBeacon());
subRefCP(vecClipPlaneDetails[i]._clipPlaneChunk);
subRefCP(vecClipPlaneDetails[i]._planeTrafoNode);
subRefCP(vecClipPlaneDetails[i]._materialCore);
}
vecClipPlaneDetails.clear();
}
void updateClipPlanes(const VecClipPlaneData& vec)
{
int sz = vec.size();
for (int i = 0; i < iNumClipPlanes; ++i) {
ClipPlaneChunkPtr& clipPlaneChunk =
vecClipPlaneDetails[i]._clipPlaneChunk;
FCEditGuard guard(clipPlaneChunk);
clipPlaneChunk->setEnable(false);
if (i < sz) {
const ClipPlaneData& data = vec[i];
clipPlaneChunk->setEquation(data._equation);
clipPlaneChunk->setEnable(data._enabled);
Matrix mat;
Vec4f v1(0.f, 0.f, -1.f, 0.f);
Quaternion q(v1, data._equation);
mat.setTransform(q);
TransformPtr transformCore =
TransformPtr::dcast(vecClipPlaneDetails[i]._planeTrafoNode->getCore());
{
FCEditGuard guard(transformCore);
transformCore->setMatrix(mat);
}
}
}
}
// redraw the window
void display(void)
{
// render
mgr->redraw();
// all done, swap
glutSwapBuffers();
}
// react to size changes
void reshape(int w, int h)
{
mgr->resize(w,h);
glutPostRedisplay();
}
// react to mouse button presses
void mouse(int button, int state, int x, int y)
{
if (state)
mgr->mouseButtonRelease(button, x, y);
else
mgr->mouseButtonPress(button, x, y);
glutPostRedisplay();
}
// react to mouse motions with pressed buttons
void motion(int x, int y)
{
mgr->mouseMove(x, y);
glutPostRedisplay();
}
// react to keys
void keyboard(unsigned char k, int, int)
{
static Real32 val0 = 0.f;
static Real32 val1 = 0.f;
switch(k)
{
case 'a':
{
vecClipPlaneData[0]._enabled = !vecClipPlaneData[0]._enabled;
updateClipPlanes(vecClipPlaneData);
}
break;
case 's':
{
vecClipPlaneData[1]._enabled = !vecClipPlaneData[1]._enabled;
updateClipPlanes(vecClipPlaneData);
}
break;
case 'y':
{
val0 -= 0.2;
vecClipPlaneData[0]._equation[3] = val0;
updateClipPlanes(vecClipPlaneData);
}
break;
case 'x':
{
val0 += 0.2;
vecClipPlaneData[0]._equation[3] = val0;
updateClipPlanes(vecClipPlaneData);
}
break;
case 'n':
{
val1 -= 0.2;
vecClipPlaneData[1]._equation[3] = val1;
updateClipPlanes(vecClipPlaneData);
}
break;
case 'm':
{
val1 += 0.2;
vecClipPlaneData[1]._equation[3] = val1;
updateClipPlanes(vecClipPlaneData);
}
break;
case 27: exit(1);
}
}
int main(int argc, char **argv)
{
osgInit(argc,argv);
// GLUT init
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_STENCIL | GLUT_DOUBLE);
glutCreateWindow("OpenSG");
glutReshapeFunc(reshape);
glutDisplayFunc(display);
glutIdleFunc(display);
glutMouseFunc(mouse);
glutMotionFunc(motion);
glutKeyboardFunc(keyboard);
PassiveWindowPtr pwin=PassiveWindow::create();
pwin->init();
// create the SimpleSceneManager helper
mgr = new SimpleSceneManager;
// create the window and initial camera/viewport
mgr->setWindow(pwin);
//
// We need 3 material groups for the clip plane capping trick:
//
// scene
// |
// +--------------------+--------------------+
// | | |
// group1 (mat1) group2 (mat2) group3 (mat3)
// | | |
// geometry (geo1) geometry (geo2) geometry (geo1)
//
// geo1 : actual geometry to draw
// geo2 : plane geometry coincident with the clip plane
//
// mat1 : has a stencil chunk that clears the stencil buffer first,
than does the inversion, and has
// a clip plane chunk that enables one clip plane. Sortkey 0.
// mat2 : has a stencil chunk and settings for drawing the clip plane
geometry. All clip planes but the
// one coincident with the plane are activated. Sortkey 1.
// mat3 : the material used for the actual geometry. All clip planes
are activated. Sortkey 3.
//
// For each active clip plane copies of the left two branches need to
be added.
//
//
// Implementation details:
// For each clipplane we provide a ClipPlaneChunk, a MaterialGroup
mat1 and the plane geometry geo2
// conveniently in a vector of type VecClipPlaneDetailsT. The next
function call initializes this
// data structure. Later on, we provide actual details for the
vector elements.
//
createClipPlaneDetails();
GeometryPtr geo1 = makeBoxGeo(15, 15, 15, 1, 1, 1); //makeTorusGeo(0.2,
2, 8, 16);
NodePtr geometryNode = Node::create();
{
FCEditGuard guard(geometryNode);
geometryNode->setCore(geo1);
}
VecNodesT vecMaterialNodes1;
VecNodesT vecMaterialNodes2;
for (int i = 0; i < iNumClipPlanes; ++i)
{
NodePtr geomNode = Node::create();
{
FCEditGuard guard(geomNode);
geomNode->setCore(geo1);
}
NodePtr materialNode1 = Node::create();
{
MaterialGroupPtr mgrp1 = vecClipPlaneDetails[i]._materialCore;
FCEditGuard guard(materialNode1);
materialNode1->setCore(mgrp1);
materialNode1->addChild(geomNode);
}
vecMaterialNodes1.push_back(materialNode1);
NodePtr materialNode2 = Node::create();
{
StencilChunkPtr stencilChunk = StencilChunk::create();
{
FCEditGuard guard(stencilChunk);
stencilChunk->setClearBuffer(2);
stencilChunk->setStencilFunc(GL_EQUAL);
stencilChunk->setStencilValue(1);
stencilChunk->setStencilMask(1);
stencilChunk->setStencilOpFail(GL_KEEP);
stencilChunk->setStencilOpZFail(GL_ZERO);
stencilChunk->setStencilOpZPass(GL_ZERO);
}
SimpleMaterialPtr mat2 = SimpleMaterial::create();
{
FCEditGuard guard(mat2);
mat2->setDiffuse(Color3f(0,1,0));
mat2->setSpecular(Color3f(1,1,1));
mat2->setLit(true);
for (int j = 0; j < iNumClipPlanes; ++j) {
if (i != j)
mat2->addChunk(vecClipPlaneDetails[j]._clipPlaneChunk);
}
mat2->addChunk(stencilChunk);
mat2->setSortKey(2*i + 1);
}
MaterialGroupPtr mgrp2 = MaterialGroup::create();
{
FCEditGuard guard(mgrp2);
mgrp2->setMaterial(mat2);
}
FCEditGuard guard(materialNode2);
materialNode2->setCore(mgrp2);
materialNode2->addChild(vecClipPlaneDetails[i]._planeTrafoNode);
}
vecMaterialNodes2.push_back(materialNode2);
}
NodePtr materialNode3 = Node::create();
{
SimpleMaterialPtr mat3 = SimpleMaterial::create();
{
FCEditGuard guard(mat3);
mat3->setDiffuse(Color3f(1,0,0));
mat3->setSpecular(Color3f(1,1,1));
mat3->setLit(true);
for (int i = 0; i < iNumClipPlanes; ++i) {
mat3->addChunk(vecClipPlaneDetails[i]._clipPlaneChunk);
}
mat3->setSortKey(2*(iNumClipPlanes-1) + 2);
}
MaterialGroupPtr mgrp3 = MaterialGroup::create();
{
FCEditGuard guard(mgrp3);
mgrp3->setMaterial(mat3);
}
FCEditGuard guard(materialNode3);
materialNode3->setCore(mgrp3);
materialNode3->addChild(geometryNode);
}
MultiSwitchPtr selectCore = MultiSwitch::create();
{
FCEditGuard guard(selectCore);
selectCore->setSwitchMode(MultiSwitch::ALL);
}
NodePtr selectNode = Node::create();
{
FCEditGuard guard(selectNode);
selectNode->setCore(selectCore);
for (int i = 0; i < iNumClipPlanes; ++i) {
selectNode->addChild(vecMaterialNodes1[i]);
selectNode->addChild(vecMaterialNodes2[i]);
}
selectNode->addChild(materialNode3);
}
// create the scene
NodePtr scene = Node::create();
{
FCEditGuard guard(scene);
scene->setCore(Group::create());
scene->addChild(selectNode);
}
//
// Build concrete clipping planes
//
ClipPlaneData data1;
ClipPlaneData data2;
data1._equation = Vec4f(0,0,1,0);
data1._enabled = true;
data2._equation = Vec4f(1,0,0,0);
data2._enabled = false;
vecClipPlaneData.push_back(data1);
vecClipPlaneData.push_back(data2);
updateClipPlanes(vecClipPlaneData);
// tell the manager what to manage
mgr->setRoot(scene);
// show the whole scene
mgr->showAll();
mgr->redraw();
pwin->dumpExtensions();
// GLUT main loop
glutMainLoop();
destroyClipPlaneDetails();
return 0;
}
begin 666 ClipPlaneCaps.cpp
m...@3w!e;E-'(&5X86UP;&4Z($-L:7!0;&%N94-A<',*+r\*...@1&5M;VYS
M=')A=&5S('1H92!U<V4@;v...@=&AE($-L:7!0;&%N94-H=6YK+"!A;f...@4w1e
M;F-I;$-H=6YK(&9O<B!C87!P:6YG(&]F(&-L:7!p...@9v5o;65T<GD*"B-I
M;F-L=61E(#QV96-T;W(^"@HC:6YC;'5D92 \3W!E;E-'+T]31T=,550N:#X*
M(VEN8VQU9&4@/$]P96Y31R]/4T=#;VYF:6<N:#X*(VEN8VQU9&4@/$]P96Y3
M1R]/4T=3:6UP;&5'96]M971R>2YH/@HC:6YC;'5D92 \3W!E;E-'+T]31U!A
M<W-I=F57:6YD;W<N:#X*(VEN8VQU9&4@/$]P96Y31R]/4T=3:6UP;&538V5N
M94UA;F%G97(N:#X*(VEN8VQU9&4@/$]P96Y31R]/4T=38V5N949I;&5(86YD
M;&5...@^"@HC:6YC;'5D92 \3W!E;E-'+T]31TUU;'1I4W=I=&-...@^"B-I
M;F-L=61E(#Q/<&5N4T<O3U-'36%T97)I86Q'<F]U<"YH/@HC:6YC;'5D92 \
M3W!E;E-'+T]31T-H=6YK36%T97)I86PN:#X*(VEN8VQU9&4@/$]P96Y31R]/
M4T=3:6UP;&5-871E<FEA;"YH/@HC:6YC;'5D92 \3W!E;E-'+T]31T-L:7!0
M;&%n94-h=6y...@^"B-I;F-L=61E(#Q/<&5N4T<O3U-'4W1E;F-I;$-H=6YK
m...@^"@I/4T=?55-)3D=?3D%-15-004-%"@IT>7!E9&5F('-T9#HZ=F5C=&]R
M/$YO9&50='(^(%9E8TYO9&5S5#L*"@IS=')u...@0vqi<%!L86YE1&%T80T*
M>PT*(" @(%9E8S1F(%]E<75A=&EO;CL-"B @("!B;V]L("!?96YA8FQE9#L-
M"GT[#0IT>7!E9&5F('-T9#HZ=F5C=&]R/$-L:7!0;&%N941A=&$^(%9E8T-L
M:7!0;&%N941A=&$["@IS=')u...@0vqi<%!L86YE1&5T86EL<R![#0H@(" @
M0VQI<%!L86YE0VAU;FM0='(@(%]C;&EP4&QA;F5#:'5N:SL-"B @("!.;V1E
M4'1R(" @(" @(" @(" @7W!L86YE5')A9F].;V1E.PT*(" @($UA=&5R:6%L
M1W)O=7!0='(@("!?;6%T97)I86Q#;W)E.PT*?3L-"G1Y<&5D968@<W1D.CIV
M96-T;W(\0VQI<%!L86YE1&5T86EL<s...@5f5c0vqi<%!L86YE1&5T86EL<U0[
M"@HO+R!G;&]B86P@<W1A=&4*5F5C0VQI<%!L86YE1&%T82!V96-#;&EP4&QA
M;F5$871A.PI696-#;&EP4&QA;F5$971A:6QS5"!V96-#;&EP4&QA;F5$971A
M:6QS.PI3:6UP;&538V5N94UA;F%G97(@*FUG<CL*"B\O('1H92!N=6UB97(@
M;v...@8vqi<'!I;F<@<&QA;F5S('-U<'!O<G1E9"!B>2!T:&4...@9&5M;PIC;VYS
M="!I;G0@:4YU;4-L:7!0;&%N97,@/2 R.PH*=F]I9"!C<F5A=&5#;&EP4&QA
M;F5$971A:6QS*"D-"GL-"B @("!F;W(@*&EN="!I(#T@,#L@:2 \(&E.=6U#
M;&EP4&QA;F5S.R K*VDI('L-"B @(" @(" @0VQI<%!L86YE1&5T86EL<R!D
M971A:6QS.PT*#0H@(" @(" @("\O#0H@(" @(" @("\O($-R96%T92!C;&EP
M('!L86YE(&-H=6YK#0H@(" @(" @("\O#0H@(" @(" @(&1E=&%I;',N7V-L
M:7!0;&%N94-H=6YK(#...@0vqi<%!L86YE0VAU;flz.f-r96%[email protected]*(" @
M(" @("!A9&12969#4"AD971A:6QS+E]C;&EP4&QA;F5#:'5N:RD[#0H@(" @
M(" @('L-"B @(" @(" @(" @($9#161I=$=U87)D(&=U87)D*&1E=&%I;',N
M7V-L:7!0;&%N94-H=6YK*3L-"B @(" @(" @(" @(&1E=&%I;',N7V-L:7!0
M;&%N94-H=6YK+3YS971%<75A=&EO;BA696,t...@q+# L,"PP*2D[#0H@(" @
M(" @(" @("!D971A:6QS+E]C;&EP4&QA;F5#:'5N:RT^<V5T16YA8FQE*&9A
M;'-E*3L-"@T*(" @(" @(" @(" @3F]D95!T<B!B96%C;VX@/2!.;V1E.CIC
M<F5A=&4H*3L-"B @(" @(" @(" @(&%D9%)E9D-0*&)E86-O;BD[#0H@(" @
M(" @(" @("!D971A:6QS+E]C;&EP4&QA;F5#:'5N:RT^<V5T0F5A8V]N*&)E
M86-O;BD[#0H@(" @(" @('T-"@T*(" @(" @(" O+PT*(" @(" @(" O+R!#
M<F5A=&4@<&QA;f...@9v5o;65T<GD-"B @(" @(" @+R\-"B @(" @(" @3F]D
M95!T<B!P;&%N94=E;TYO9&4@/2!M86ME4&QA;F4H,3 P+F8L(#$P,"YF+" Q
M,c...@l(#$R."D[#0H-"B @(" @(" @36%T<FEX(&UA=#L-"B @(" @(" @;6%T
M+G-E=$ED96YT:71Y*"D[#0H-"B @(" @(" @5')A;G-F;W)M4'1R('1R86YS
M9D-O<F4@/2!4<F%N<V9O<ftz.f-r96%[email protected]*(" @(" @("![#0H@(" @
M(" @(" @("!&0T5D:71'=6%R9"!G=6%R9"AT<F%N<V9#;W)E*3L-"B @(" @
M(" @(" @('1R86YS9D-O<F4M/G-E=$UA=')I>"AM870I.PT*(" @(" @("!]
M#0H-"B @(" @(" @9&5T86EL<RY?<&QA;F54<F%F;TYO9&4@/2!.;V1E.CIC
M<F5A=&4H*3L-"B @(" @(" @861D4F5F0U H9&5T86EL<RY?<&QA;F54<F%F
M;TYO9&4I.PT*(" @(" @("![#0H@(" @(" @(" @("!&0T5D:71'=6%R9"!G
M=6%R9"AD971A:6QS+E]P;&%N951R869O3F]D92D[#0H@(" @(" @(" @("!D
M971A:6QS+E]P;&%N951R869O3F]D92T^<V5T0V]R92AT<F%N<V9#;W)E*3L-
M"B @(" @(" @(" @(&1E=&%I;',N7W!L86YE5')A9F].;V1E+3YA9&1#:&EL
M9"AP;&%N94=E;TYO9&4I.PT*(" @(" @("!]#0H@(" @(" @( T*(" @(" @
M(" O+PT*(" @(" @(" O+R!#<F5A=&4@<W1E;F-I;"!M871E<FEA;"!C;W)E
M#0H@(" @(" @("\O#0H@(" @(" @(%-T96YC:6Q#:'5N:U!T<B!S=&5N8VEL
M0VAU;FL@/2!3=&5N8VEL0VAU;flz.f-r96%[email protected]*(" @(" @("![#0H@
M(" @(" @(" @("!&0T5D:71'=6%R9"!G=6%R9"AS=&5N8VEL0VAU;FLI.PT*
M(" @(" @(" @(" @<W1E;F-I;$-H=6YK+3YS971#;&5A<D)U9F9E<b...@q*3l-
M"B @(" @(" @(" @('-T96YC:6Q#:'5N:RT^<V5T4W1E;F-I;$9U;F,H1TQ?
M3D5615(I.PT*(" @(" @(" @(" @<W1E;F-I;$-H=6YK+3YS9713=&5N8VEL
M5F%L=64H,2D[#0H@(" @(" @(" @("!S=&5N8VEL0VAU;FLM/G-E=%-T96YC
M:6Q-87-K*#$I.PT*(" @(" @(" @(" @<W1E;F-I;$-H=6YK+3YS9713=&5N
M8VEL3W!&86EL*$=,7TE.5D525"D[#0H@(" @(" @(" @("!S=&5N8VEL0VAU
M;FLM/G-E=%-T96YC:6Q/<%I&86EL*$=,7TE.5D525"D[#0H@(" @(" @(" @
M("!S=&5N8VEL0VAU;FLM/G-E=%-T96YC:6Q/<%I087-S*$=,7TE.5D525"D[
M#0H@(" @(" @('T-"B @(" @(" @0VAU;FM-871E<FEA;%!T<B!M870Q(#T@
M0VAU;FM-871E<FEA;#HZ8W)E871E*"D[#0H@(" @(" @('L-"B @(" @(" @
M(" @($9#161I=$=U87)D(&=U87)D*&UA=#$I.PT*(" @(" @(" @(" @;6%T
M,2T^861D0VAU;FLH<W1E;F-I;$-H=6YK*3L-"B @(" @(" @(" @(&UA=#$M
M/F%D9$-H=6YK*&1E=&%I;',N7V-L:7!0;&%N94-H=6YK*3L-"B @(" @(" @
M(" @(&UA=#$M/G-E=%-O<G1+97DH,BII("L@,"D[#0H@(" @(" @('T-"@T*
M(" @(" @("!D971A:6QS+E]M871E<FEA;$-O<F4@/2!-871E<FEA;$=R;W5P
M.CIC<F5A=&4H*3L-"B @(" @(" @861D4F5F0U H9&5T86EL<RY?;6%T97)I
M86Q#;W)E*3L-"B @(" @(" @>PT*(" @(" @(" @(" @1D-%9&ET1W5A<F0@
M9W5A<F0H9&5T86EL<RY?;6%T97)I86Q#;W)E*3L-"B @(" @(" @(" @(&1E
M=&%I;',N7VUA=&5R:6%L0V]R92T^<V5T36%T97)I86PH;6%T,2D[#0H@(" @
M(" @('T-"@T*(" @(" @("!V96-#;&EP4&QA;F5$971A:6QS+G!U<VA?8F%C
M:RAD971A:6QS*3L-"B @("!]#0I]#0H-"G9O:6...@9&5S=')O>4-L:7!0;&%N
M941E=&%I;',H*0T*>PT*(" @(&9O<B H:6YT(&D@/2 P.R!I(#P@:4YU;4-L
M:7!0;&%N97,[("LK:2D@>PT*(" @(" @("!S=6)2969#4"AV96-#;&EP4&QA
M;F5$971A:6QS6VE=+E]C;&EP4&QA;F5#:'5N:RT^9V5T0F5A8V]N*"DI.PT*
M(" @(" @("!S=6)2969#4"AV96-#;&EP4&QA;F5$971A:6QS6VE=+E]C;&EP
M4&QA;F5#:'5N:RD[#0H@(" @(" @('-U8E)E9D-0*'9E8T-L:7!0;&%N941E
M=&%I;'-;:5TN7W!L86YE5')A9F].;V1E*3L-"B @(" @(" @<W5B4F5F0U H
M=F5C0VQI<%!L86YE1&5T86EL<UMI72Y?;6%T97)I86Q#;W)E*3L-"B @("!]
M#0H@(" @=F5C0VQI<%!L86YE1&5T86EL<RYC;&5A<[email protected]*?0h*=f]i9"!U
M<&1A=&5#;&EP4&QA;F5S*&-O;G-T(%9E8T-L:7!0;&%N941A=&$F('9E8RD-
M"GL-"B @("!I;G0@<WH@(#...@=f5c+g-i>F4H*3L-"@T*(" @(&9O<B H:6YT
M(&D@/2 P.R!I(#P@:4YU;4-L:7!0;&%N97,[("LK:2D@>PT*(" @(" @("!#
M;&EP4&QA;F5#:'5N:U!T<b...@8vqi<%!L86YE0VAU;FL@/2!V96-#;&EP4&QA
M;F5$971A:6QS6VE=+E]C;&EP4&QA;F5#:'5N:SL-"B @(" @(" @1D-%9&ET
M1W5A<f...@9w5a<F0H8VQI<%!L86YE0VAU;FLI.PT*(" @(" @("!C;&EP4&QA
M;F5#:'5N:RT^<V5T16YA8FQE*&9A;'-E*3L-"@T*(" @(" @("!I9B H:2 \
M('-Z*2![#0H@(" @(" @(" @("!C;VYS="!#;&EP4&QA;F5$871A)B!D871A
M(#...@=f5c6ve=.pt*#0h@(" @(" @(" @("!C;&EP4&QA;F5#:'5N:RT^<V5T
M17%U871I;VXH9&%T82Y?97%U871I;VXI.PT*(" @(" @(" @(" @8VQI<%!L
M86YE0VAU;FLM/G-E=$5N86)L92AD871A+E]E;F%B;&5D*3L-"@T*(" @(" @
M(" @(" @36%T<FEX(&UA=#L-"B @(" @(" @(" @(%9E8S1F('8Q*# N9BP@
M,"YF+" M,2YF+" P+F8I.PT*(" @(" @(" @(" @475A=&5R;FEO;B!Q*'8Q
M+"!D871A+E]E<75A=&EO;BD[#0H@(" @(" @(" @("!M870N<V5T5')A;G-F
M;W)M*'$I.PT*#0H@(" @(" @(" @("!4<F%N<V9O<FU0='(@=')A;G-F;W)M
M0V]R92 ](%1R86YS9F]R;5!T<CHZ9&-A<W0H=F5C0VQI<%!L86YE1&5T86EL
M<UMI72Y?<&QA;F54<F%F;TYO9&4M/F=E=$-O<F4H*2D[#0H@(" @(" @(" @
M("![#0H@(" @(" @(" @(" @(" @1D-%9&ET1W5A<f...@9w5a<F0H=')A;G-F
M;W)M0V]R92D[#0H@(" @(" @(" @(" @(" @=')A;G-F;W)M0V]R92T^<V5T
M36%T<FEX*&UA="D[#0H@(" @(" @(" @("!]#0H@(" @(" @('T-"B @("!]
M#0I]"@H*+R\@<F5D<F%W('1H92!W:6YD;W<*=F]I9"!D:7-P;&%Y*'9O:60I
M"GL@(" @(" *(" @("\O(')E;F1E<@H@(" @"B @("!M9W(M/G)E9')a...@i
M.PH*(" @("\O(&%L;"!D;VYE+"!S=V%P(" @( H@(" @9VQU=%-W87!"=69F
M97)S*"D["GT*"B\O(')E86-T('1O('-I>f...@8vaa;F=E<PIV;VED(')E<VAA
M<&4H:6YT('<L(&EN="!H*0I["B @("!M9W(M/G)E<VEZ92AW+&@I.PH@(" @
M9VQU=%!O<W12961I<W!L87DH*3L*?0H*+R\@<f5a...@=&\@;6]U<v...@8g5t
M=&]N('!R97-S97,*=F]I9"!M;W5S92AI;g...@8g5t=&]N+"!I;G0@<W1A=&4L
M(&EN="!X+"!I;G0@>2D*>PH@(" @:6...@*'-T871E*0H@(" @(" @(&UG<BT^
M;6]U<V5"=71T;VY296QE87-E*&)U='1O;BP@>"P@>2D["B @("!E;'-E"B @
M(" @(" @;6=R+3YM;W5S94)U='1O;E!R97-S*&)U='1O;BP@>"P@>2D["B @
M(" @(" @"B @("!G;'5T4&]S=%)E9&ES<&QA>[email protected]]"@HO+R!R96%C="!T
M;R!M;W5S92!M;W1I;VYS('=I=&@@<')E<W-E9"!B=71T;VYS"G9O:60@;6]T
M:6]N*&EN="!X+"!I;G0@>2D*>PH@(" @;6=R+3YM;W5S94UO=F4H>"P@>2D[
M"B @("!G;'5T4&]S=%)E9&ES<&QA>[email protected]]"@HO+R!R96%C="!T;R!K97ES
M"G9O:60@:V5Y8F]A<F0H=6YS:6=n...@8vaa<B!K+"!I;G0L(&EN="D*>PH@
M(" @<W1A=&EC(%)E86PS,B!V86PP(#T@,"YF.PH@(" @<W1A=&EC(%)E86PS
M,B!V86PQ(#T@,"YF.PH@(" @<W=I=&-H*&LI"B @("!["B @("!C87-E("=A
M)SH*(" @(" @("!["B @(" @(" @(" @('9E8T-L:7!0;&%N941A=&%;,%TN
M7V5N86)L960@/2 A=F5C0VQI<%!L86YE1&%T85LP72Y?96YA8FQE9#L*(" @
M(" @(" @(" @=7!D871E0VQI<%!L86YE<RAV96-#;&EP4&QA;F5$871A*3L*
M(" @(" @("!]"B @(" @(" @8G)E86L["B @("!C87-E("=S)SH*(" @(" @
M("!["B @(" @(" @(" @('9E8T-L:7!0;&%N941A=&%;,5TN7V5N86)L960@
M/2 A=F5C0VQI<%!L86YE1&%T85LQ72Y?96YA8FQE9#L*(" @(" @(" @(" @
M=7!D871E0VQI<%!L86YE<RAV96-#;&EP4&QA;F5$871A*3L*(" @(" @("!]
M"B @(" @(" @8G)E86L["B @("!C87-E("=Y)SH*(" @(" @("!["B @(" @
M(" @(" @('9A;# @+3T@,"XR.PH@(" @(" @(" @("!V96-#;&EP4&QA;F5$
M871A6S!=+E]E<75A=&EO;ELS72 ]('9A;# ["B @(" @(" @(" @('5P9&%T
M94-L:7!0;&%N97,H=F5C0VQI<%!L86YE1&%T82D["B @(" @(" @?0H@(" @
M(" @(&)R96%K.PH@(" @8V%S92 G>"<Z"B @(" @(" @>PH@(" @(" @(" @
M("!V86PP("L](# N,CL*(" @(" @(" @(" @=F5C0VQI<%!L86YE1&%T85LP
M72Y?97%U871I;VY;,UT@/2!V86PP.PH@(" @(" @(" @("!U<&1A=&5#;&EP
M4&QA;F5S*'9E8T-L:7!0;&%N941A=&$I.PH@(" @(" @('T*(" @(" @("!B
M<F5A:SL*(" @(&-A<V4@)v...@h@(" @(" @('L*(" @(" @(" @(" @=F%L
M,2 M/2 P+C(["B @(" @(" @(" @('9E8T-L:7!0;&%N941A=&%;,5TN7V5Q
M=6%T:6]N6S-=(#...@=f%l,3L*(" @(" @(" @(" @=7!D871E0VQI<%!L86YE
M<RAV96-#;&EP4&QA;F5$871A*3L*(" @(" @("!]"B @(" @(" @8G)E86L[
M"B @("!C87-E("=M)SH*(" @(" @("!["B @(" @(" @(" @('9A;#...@*st@
M,"XR.PH@(" @(" @(" @("!V96-#;&EP4&QA;F5$871A6S%=+E]E<75A=&EO
M;ELS72 ]('9A;#$["B @(" @(" @(" @('5P9&%T94-L:7!0;&%N97,H=F5C
M0VQI<%!L86YE1&%T82D["B @(" @(" @?0H@(" @(" @(&)R96%K.PH@(" @
M8V%S92 R-SH@(" @97AI="@Q*3L*(" @('T*?0H*"FEN="!M86EN*&EN="!A
M<F=C+"!C:&%R("HJ87)G=BD*>PH@(" @;W-G26YI="AA<F=C+&%R9W8I.PH*
M(" @("\O($=,550@:6YI= H@(" @9VQU=$EN:70H)F%R9V,L(&%R9W8I.PH@
M(" @"B @("!G;'5T26YI=$1I<W!L87E-;V1E*$=,551?4D="('p...@1tq55%]$
M15!42"!\($=,551?4U1%3D-)3"!\($=,551?1$]50DQ%*3L*(" @( H@(" @
M9VQU=$-R96%T95=I;f1...@b3w!e;E-'(BD["B @(" *(" @(&=L=71297-H
M87!E1G5N8RAR97-H87!E*3L*(" @(&=L=71$:7-P;&%Y1G5N8RAD:7-P;&%Y
M*3L*(" @(&=L=71)9&QE1G5N8RAD:7-P;&%Y*3L*(" @(&=L=71-;W5S949U
M;F,H;6]U<V4I.PH@(" @9VQU=$UO=&EO;D9U;F,H;6]T:6]N*3L*(" @(&=L
M=71+97EB;V%R9$9U;F,H:V5Y8F]A<F0I.PH*(" @(%!A<W-I=F57:6YD;W=0
M='(@<'=I;CU087-S:79E5VEN9&]W.CIC<F5A=&4H*3L*(" @('!W:6XM/FEN
M:70H*3L*(" @(" *(" @("\O(&-R96%T92!T:&4...@4vem<&QE4V-E;F5-86YA
M9V5R(&AE;'!E<@H@(" @;6=R(#T@;F5W(%-I;7!L95-C96YE36%N86=E<CL*
M"B @(" O+R!C<F5A=&4...@=&AE('=I;F1O=R!A;F0@:6YI=&EA;"!C86UE<F$O
M=FEE=W!O<G0*(" @(&UG<BT^<V5T5VEN9&]W*'!W:6XI.PH*(" @("\O#0H@
M(" @+...@5v4@;F5E9" S(&UA=&5R:6%L(&=R;W5P<R!F;W(@=&AE(&-L:7 @
M<&QA;f...@8v%p<&EN9R!T<FEC:SH-"B @(" O+PT*(" @("\O(" @(" @(" @
M(" @(" @(" @(" @(" @<V-E;F4-"B @(" O+R @(" @(" @(" @(" @(" @
M(" @(" @(" @? T*(" @("\O(" @(" K+2TM+2TM+2TM+2TM+2TM+2TM+2TK
M+2TM+2TM+2TM+2TM+2TM+2TM+2TK#0H@(" @+R\@(" @('P@(" @(" @(" @
M(" @(" @(" @('P@(" @(" @(" @(" @(" @(" @('P-"B @(" O+R @9W)O
M=7 Q("AM870Q*2 @(" @(" @9W)O=7 R("AM870R*2 @(" @(" @9W)O=7 S
M("AM870S*0T*(" @("\O(" @("!\(" @(" @(" @(" @(" @(" @("!\(" @
M(" @(" @(" @(" @(" @("!\#0H@(" @+...@9v5o;65T<g...@*&=E;S$I(" @
M(" @9V5O;65T<g...@*&=E;S(I(" @(" @9V5O;65T<g...@*&=E;S$I#0H@(" @
M+R\-"B @(" O+R @("!G96\Q(#...@86-t=6%l(&=E;VUE=')Y('1O(&1R87<-
M"B @(" O+R @("!G96\R(#H@<&QA;f...@9v5o;65T<g...@8v]i;F-I9&5N="!W
M:71H('1H92!C;&EP('!L86YE#0H@(" @+R\-"B @(" O+R @("!M870Q(#H@
M:&%S(&$@<W1E;F-I;"!C:'5N:R!T:&%T(&-L96%R<R!T:&4@<W1E;F-I;"!B
M=69F97(@9FER<W0L('1h...@9&]E<R!T:&4@:6YV97)S:6]N+"!A;F0@:&%S
M( T*(" @("\O(" @(" @(" @("!A(&-L:7 @<&QA;f...@8vau;f...@=&AA="!E
M;F%B;&5S(&]N92!C;&EP('!L86YE+B!3;W)T:V5Y(# N#0H@(" @+R\@(" @
M;6%T,B Z(&AA<R!A('-T96YC:6...@8vau;f...@86yd('-E='1I;F=S(&9O<B!D
M<F%W:6YG('1H92!C;&EP('!L86YE(&=E;VUE=')Y+B!!;&p...@8vqi<"!P;&%N
M97,@8G5T('1H90T*(" @("\O(" @(" @(" @("!O;f...@8v]i;F-I9&5N="!W
M:71H('1H92!P;&%N92!A<f...@86-t:79A=&5D+B!3;W)T:V5Y(#$N#0H@(" @
M+R\@(" @;6%T,R Z('1H92!M871E<FEA;"!U<V5D(&9O<B!T:&4...@86-t=6%l
M(&=E;VUE=')Y+B!!;&p...@8vqi<"!P;&%N97,@87)E(&%C=&EV871E9"x...@4v]r
M=&ME>2 s...@t*(" @("\O#0H@(" @+R\@(" @1F]R(&5A8V@@86-T:79E(&-L
M:7 @<&QA;f...@8v]p:65S(&]F('1H92!L969T('1W;R!B<F%N8VAE<R!N965D
M('1O(&)E(&%D9&5...@t*(" @("\O"@H@(" @+R\*(" @("\O($EM<&QE;65N
M=&%T:6]N(&1E=&%I;',Z"B @(" O+R @(" @($9O<B!E86-H(&-L:7!P;&%N
M92!W92!P<F]V:61E(&$...@0vqi<%!L86YE0VAU;FLL(&$...@36%t97)I86Q'<F]U
M<"!M870Q(&%N9"!T:&4@<&QA;f...@9v5o;65T<g...@9v5o,@H@(" @+R\@(" @
M("!C;VYV96YI96YT;'D@:6...@82!v96-t;W(@;v...@='EP92!696-#;&EP4&QA
M;F5$971A:6QS5"x...@5&AE(&YE>'0...@9g5n8w1i;v...@8v%l;"!I;FET:6%L:7IE
M<R!T:&ES"B @(" O+R @(" @(&1A=&$@<W1R=6-T=7)E+B!,871E<B!O;BP@
M=V4@<')o=fed92!a8w1u...@9&5T86EL<R!F;W(@=&AE('9E8W1O<B!E;&5M
M96YT<RX*(" @("\O"B @("!C<F5A=&5#;&EP4&QA;F5$971A:6QS*"D["@H*
M(" @($=E;VUE=')Y4'1R(&=E;S$@/2!M86ME0F]X1V5O*#$U+" Q-2P@,34L
M(#$L(#$L(#$I.R O+VUA:V54;W)U<T=E;r...@p+c(L(#(L(#...@l(#$V*3L*"B @
M("!.;V1E4'1R(&=E;VUE=')Y3F]D92 ]($YO9&4z.f-r96%[email protected]@(" @
M>PH@(" @(" @($9#161I=$=U87)D(&=U87)D*&=E;VUE=')Y3F]D92D["B @
M(" @(" @9V5O;65T<GE.;V1E+3YS971#;W)E*&=E;S$I.PH@(" @?0H*(" @
M(%9E8TYO9&5S5"!V96--871E<FEA;$YO9&5S,3L*(" @(%9E8TYO9&5S5"!V
M96--871E<FEA;$YO9&5S,CL*(" @(&9O<B H:6YT(&D@/2 P.R!I(#P@:4YU
M;4-L:7!0;&%N97,[("LK:2D*(" @('L-"B @(" @(" @3F]D95!T<B!G96]M
M3F]D92 ]($YO9&4z.f-r96%[email protected]*(" @(" @("![#0H@(" @(" @(" @
M("!&0T5D:71'=6%R9"!G=6%R9"AG96]M3F]D92D[#0H@(" @(" @(" @("!G
M96]M3F]D92T^<V5T0V]R92AG96\Q*3L-"B @(" @(" @?0T*#0H@(" @(" @
M($YO9&50='(@;6%T97)I86Q.;V1E,2 ]($YO9&4z.f-r96%[email protected]*(" @
M(" @("![#0H@(" @(" @(" @("!-871E<FEA;$=R;W5P4'1R(&UG<G Q(#T@
M=F5C0VQI<%!L86YE1&5T86EL<UMI72Y?;6%T97)I86Q#;W)E.PT*#0H@(" @
M(" @(" @("!&0T5D:71'=6%R9"!G=6%R9"AM871E<FEA;$YO9&4Q*3L-"B @
M(" @(" @(" @(&UA=&5R:6%L3F]D93$M/G-E=$-O<F4H;6=R<#$I.PT*(" @
M(" @(" @(" @;6%T97)I86Q.;V1E,2T^861D0VAI;&0H9V5O;4YO9&4I.PT*
M(" @(" @("!]#0H@(" @(" @('9E8TUA=&5R:6%L3F]D97,Q+G!U<VA?8F%C
M:RAM871E<FEA;$YO9&4Q*3L-"@T*#0H@(" @(" @($YO9&50='(@;6%T97)I
M86Q.;V1E,B ]($YO9&4z.f-r96%[email protected]*(" @(" @("![#0H@(" @(" @
M(" @("!3=&5N8VEL0VAU;FM0='(@<W1E;F-I;$-H=6YK(#...@4w1e;F-I;$-H
M=6YK.CIC<F5A=&4H*3L-"B @(" @(" @(" @('L-"B @(" @(" @(" @(" @
M("!&0T5D:71'=6%R9"!G=6%R9"AS=&5N8VEL0VAU;FLI.PT*(" @(" @(" @
M(" @(" @('-T96YC:6Q#:'5N:RT^<V5T0VQE87)"=69F97(H,BD[#0H@(" @
M(" @(" @(" @(" @<W1E;F-I;$-H=6YK+3YS9713=&5N8VEL1G5N8RA'3%]%
M455!3"D[#0H@(" @(" @(" @(" @(" @<W1E;F-I;$-H=6YK+3YS9713=&5N
M8VEL5F%L=64H,2D[#0H@(" @(" @(" @(" @(" @<W1E;F-I;$-H=6YK+3YS
M9713=&5N8VEL36%S:r...@q*3l-"B @(" @(" @(" @(" @("!S=&5N8VEL0VAU
M;FLM/G-E=%-T96YC:6Q/<$9A:6PH1TQ?2T5%4"D[#0H@(" @(" @(" @(" @
M(" @<W1E;F-I;$-H=6YK+3YS9713=&5N8VEL3W!:1F%I;"A'3%]:15)/*3L-
M"B @(" @(" @(" @(" @("!S=&5N8VEL0VAU;FLM/G-E=%-T96YC:6Q/<%I0
M87-S*$=,7UI%4D\I.PT*(" @(" @(" @(" @?0T*#0H@(" @(" @(" @("!3
M:6UP;&5-871E<FEA;%!T<B!M870R(#...@4vem<&QE36%T97)I86PZ.F-R96%T
[email protected]*(" @(" @(" @(" @>PT*(" @(" @(" @(" @(" @($9#161I=$=U
M87)D(&=U87)D*&UA=#(I.PT*(" @(" @(" @(" @(" @(&UA=#(M/G-E=$1I
M9F9U<V4H0V]L;W(s...@p+#$l,"DI.PH@(" @(" @(" @(" @(" @;6%T,BT^
M<V5T4W!E8W5L87(H0V]L;W(s...@q+#$l,2DI.PH@(" @(" @(" @(" @(" @
M;6%T,BT^<V5T3&ET*'1R=64I.PT*#0H@(" @(" @(" @(" @(" @9F]R("AI
M;G0@:B ](# [(&H@/"!I3G5M0VQI<%!L86YE<s...@*rmj*2I86Q'<F]U<%!T<B!M9W)P,B ]
M($UA=&5R:6%L1W)O=7 z.f-r96%[email protected]*(" @(" @(" @(" @>PT*(" @
M(" @(" @(" @(" @($9#161I=$=U87)D(&=U87)D*&UG<G R*3L-"B @(" @
M(" @(" @(" @("!M9W)P,BT^<V5T36%T97)I86PH;6%T,BD[#0H@(" @(" @
M(" @("!]#0H-"B @(" @(" @(" @($9#161I=$=U87)D(&=U87)D*&UA=&5R
M:6%L3F]D93(I.PT*(" @(" @(" @(" @;6%T97)I86Q.;V1E,BT^<V5T0V]R
M92AM9W)P,BD[#0H@(" @(" @(" @("!M871E<FEA;$YO9&4R+3YA9&1#:&EL
M9"AV96-#;&EP4&QA;F5$971A:6QS6VE=+E]P;&%N951R869O3F]D92D[#0H@
M(" @(" @('T-"B @(" @(" @=F5C36%T97)I86Q.;V1E<S(N<'5S:%]B86-K
M*&UA=&5R:6%L3F]D93(I.PT*(" @('T*"B @("!.;V1E4'1R(&UA=&5R:6%L
M3F]D93,@/2!.;V1E.CIC<F5A=&4H*3L-"B @("![#0H@(" @(" @(%-I;7!L
M94UA=&5R:6%L4'1R(&UA=#,@/2!3:6UP;&5-871E<FEA;#HZ8W)E871E*"D[
M#0H@(" @(" @('L-"B @(" @(" @(" @($9#161I=$=U87)D(&=U87)D*&UA
M=#,I.PT*#0H@(" @(" @(" @("!M870S+3YS971$:69F=7-E*$-O;&]R,V8H
M,2PP+# I*3L*(" @(" @(" @(" @;6%T,RT^<V5T4W!E8W5L87(H0V]L;W(S
m...@q+#$l,2DI.PH@(" @(" @(" @("!M870S+3YS971,:70H=')U92D[#0H-
M"B @(" @(" @(" @(&9O<B H:6YT(&D@/2 P.R!I(#P@:4YU;4-L:7!0;&%N
M97,[("LK:2D@>PT*(" @(" @(" @(" @(" @(&UA=#,M/F%D9$-H=6YK*'9E
M8T-L:7!0;&%N941E=&%I;'-;:5TN7V-L:7!0;&%N94-H=6YK*3L-"B @(" @
M(" @(" @('T-"B @(" @(" @(" @(&UA=#,M/G-E=%-O<G1+97DH,BHH:4YU
M;4-L:7!0;&%N97,M,2...@*r R*3L-"B @(" @(" @?0T*#0H@(" @(" @($UA
M=&5R:6%L1W)O=7!0='(@;6=R<#,@/2!-871E<FEA;$=R;W5P.CIC<F5A=&4H
M*3L-"B @(" @(" @>PT*(" @(" @(" @(" @1D-%9&ET1W5A<f...@9w5a<F0H
M;6=R<#,I.PT*(" @(" @(" @(" @;6=R<#,M/G-E=$UA=&5R:6%L*&UA=#,I
M.PT*(" @(" @("!]#0H-"B @(" @(" @1D-%9&ET1W5A<f...@9w5a<F0H;6%T
M97)I86Q.;V1E,RD[#0H@(" @(" @(&UA=&5R:6%L3F]D93,M/G-E=$-O<F4H
M;6=R<#,I.PT*(" @(" @("!M871E<FEA;$YO9&4S+3YA9&1#:&EL9"AG96]M
M971R>4YO9&4I.PT*(" @('T*"B @("!-=6QT:5-W:71C:%!T<B!S96QE8W1#
M;W)E(#...@375l=&[email protected]%[email protected]*(" @('L-"B @(" @(" @
M1D-%9&ET1W5A<f...@9w5a<F0H<V5L96-T0V]R92D[#0H@(" @(" @('-E;&5C
M=$-O<F4M/G-E=%-W:71C:$UO9&4H375L=&[email protected]%,3"D[#0H@(" @
M?0H*(" @($YO9&50='(@<V5L96-T3F]D92 ]($YO9&4z.f-r96%[email protected]@
M(" @>PH@(" @(" @($9#161I=$=U87)D(&=U87)D*'-E;&5C=$YO9&4I.PH@
M(" @(" @('-E;&5C=$YO9&4M/G-E=$-O<F4H<V5L96-T0V]R92D[#0H-"B @
M(" @(" @9F]R("AI;G0@:2 ](# [(&D@/"!I3G5M0VQI<%!L86YE<s...@*rmi
M*2![#0H@(" @(" @(" @("!S96QE8W1.;V1E+3YA9&1#:&EL9"AV96--871E
M<FEA;$YO9&5S,5MI72D[#0H@(" @(" @(" @("!S96QE8W1.;V1E+3YA9&1#
M:&EL9"AV96--871E<FEA;$YO9&5S,EMI72D[#0H@(" @(" @('T-"@T*(" @
M(" @("!S96QE8W1.;V1E+3YA9&1#:&EL9"AM871E<FEA;$YO9&4S*3L*(" @
M('T*"B @(" O+R!C<F5A=&4...@=&AE('-C96YE"B @("!.;V1E4'1R('-C96YE
M(#...@3f]d93hz8w)E871E*"D["B @("!["B @(" @(" @1D-%9&ET1W5A<F0@
M9W5A<F0H<V-E;F4I.PH@(" @(" @('-C96YE+3YS971#;W)E*$=R;W5P.CIC
M<F5A=&4H*2D["B @(" @(" @<V-E;F4M/F%D9$-H:6QD*'-E;&5C=$YO9&4I
M.PH@(" @?0H@(" @"B @(" O+PH@(" @+...@0g5i;&0...@8v]n8w)E=&4...@8vqi
M<'!I;F<@<&QA;F5S"B @(" O+PH@(" @0VQI<%!L86YE1&%T82!D871A,3L*
M(" @($-L:7!0;&%N941A=&$...@9&%T83(["@H@(" @9&%T83$N7V5Q=6%T:6]N
M(#...@5f5c-&8H,"PP+#$L,"D["B @("!D871A,2Y?96YA8FQE9" @/2!T<G5E
M.PH*(" @(&1A=&$R+E]E<75A=&EO;B ](%9E8S1F*#$L,"PP+# I.PH@(" @
M9&%T83(N7V5N86)L960@(#...@9f%l<V4["@H@(" @=F5C0VQI<%!L86YE1&%T
M82YP=7-H7V)A8VLH9&%T83$I.PH@(" @=F5C0VQI<%!L86YE1&%T82YP=7-H
M7V)A8VLH9&%T83(I.PH*(" @('5P9&%T94-L:7!0;&%N97,H=F5C0VQI<%!L
M86YE1&%T82D["@H@(" @+...@=&5L;"!T:&4@;6%N86=E<B!W:&%T('1O(&UA
M;F%G90H@(" @;6=R+3YS9712;V]T*'-C96YE*3L*(" @( H@(" @+R\@<VAO
M=R!T:&4...@=vao;&4@<V-E;F4*(" @(&UG<BT^<VAO=T%L;"@I.PH@(" @;6=R
M+3YR961R87<H*3L*(" @"B @("!P=VEN+3YD=6UP17AT96YS:6]N<[email protected]@
M(" @"B @(" O+R!'3%54(&UA:6X@;&]O< H@(" @9VQU=$UA:6Y,;V]P*"D[
M"@H@(" @9&5S=')O>4-L:7!0;&%N941E=&%I;',H*3L*"B @("!R971U<FX@
%,#L*?0H`
`
end
------------------------------------------------------------------------------
This SF.net email is sponsored by:
SourcForge Community
SourceForge wants to tell your story.
http://p.sf.net/sfu/sf-spreadtheword
_______________________________________________
Opensg-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensg-users