Eclipse Community Forums
Forum Search:

Search      Help    Register    Login    Home
Home » Modeling » GMF (Graphical Modeling Framework) » Problem with undo of creation of an EditPart
Problem with undo of creation of an EditPart [message #225654] Mon, 13 April 2009 12:39 Go to next message
Eclipse User
Originally posted by: cayla_sha.gmx.net

This is a multi-part message in MIME format.
--------------080900010604060703080500
Content-Type: text/plain; charset=ISO-8859-15; format=flowed
Content-Transfer-Encoding: 7bit

Hello!

I have no problems with creating an EditPart, but when I undo the
create-operation (Menu "Edit" -> "Undo") I get problems:

- In my editor I have the functionality, that the appearance of a node
changes, when the data changes. That means, that when the data changes,
one EditPart is deleted and a new one is created. When I undo such an
operation I get a red box on my diagram with the text "invalid view -
remove from diagram".

- When I create a node and then click "undo" I get a huge exception. The
complete workbench crashes and I need to terminate it.
I added a text-file with the exceptions. The funny thing is, that I get
different exceptions each time. I copied them into the text-file in the
order I received it.


Any ideas?

If no one has an idea how to solve this, perhaps someone can tell me how
I can cut off the undo-functionality. It`s not the best solution if the
user can`t undo anything, but it`s better than the errors.

Best wishes
Julia


--------------080900010604060703080500
Content-Type: text/plain;
name="StackOverflowExceptions.txt"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
filename="StackOverflowExceptions.txt"

Always the last 4 lines are repeated till the end of the exception

1. received 1 time
java.lang.StackOverflowError
at org.eclipse.emf.ecore.impl.BasicEObjectImpl.eBasicSetContain er(BasicEObjectImpl.java:1315)
at org.eclipse.emf.ecore.impl.BasicEObjectImpl.eInverseAdd(Basi cEObjectImpl.java:1410)
at org.eclipse.emf.ecore.util.EcoreEList.inverseAdd(EcoreEList. java:292)
at org.eclipse.emf.common.notify.impl.NotifyingListImpl.addUniq ue(NotifyingListImpl.java:318)
at org.eclipse.emf.common.util.BasicEList.add(BasicEList.java:6 26)
at org.eclipse.emf.common.util.BasicEMap.add(BasicEMap.java:162 7)
at org.eclipse.emf.common.util.BasicEMap.add(BasicEMap.java:1)
at org.eclipse.emf.ecore.change.util.BasicChangeRecorder.getFea tureChanges(BasicChangeRecorder.java:235)
at org.eclipse.emf.ecore.change.util.ChangeRecorder.handleFeatu re(ChangeRecorder.java:320)
at org.eclipse.emf.ecore.change.util.ChangeRecorder.notifyChang ed(ChangeRecorder.java:245)
at org.eclipse.emf.transaction.impl.TransactionChangeRecorder.n otifyChanged(TransactionChangeRecorder.java:216)
at org.eclipse.emf.common.notify.impl.BasicNotifierImpl.eNotify (BasicNotifierImpl.java:247)
at org.eclipse.gmf.runtime.notation.impl.LocationImpl.setY(Loca tionImpl.java:135)
at org.eclipse.gmf.runtime.notation.impl.BoundsImpl.eSet(Bounds Impl.java:169)
at de.pvs.cms.editor.diagram.edit.parts.LocationEditPart.handle NotificationEvent(LocationEditPart.java:233)
at org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPa rt.notifyChanged(GraphicalEditPart.java:1414)
at org.eclipse.gmf.runtime.diagram.core.listener.DiagramEventBr oker.fireNotification(DiagramEventBroker.java:500)
at org.eclipse.gmf.runtime.diagram.core.listener.DiagramEventBr oker.resourceSetChanged(DiagramEventBroker.java:395)

at org.eclipse.gmf.runtime.diagram.ui.internal.DiagramEventBrok erThreadSafe.resourceSetChanged(DiagramEventBrokerThreadSafe .java:72)
at org.eclipse.gmf.runtime.diagram.core.DiagramEditingDomainFac tory$DiagramEditingDomain.postcommit(DiagramEditingDomainFac tory.java:213)
at org.eclipse.emf.transaction.impl.TransactionalEditingDomainI mpl.deactivate(TransactionalEditingDomainImpl.java:504)
at org.eclipse.emf.transaction.impl.TransactionImpl.close(Trans actionImpl.java:623)
at org.eclipse.emf.transaction.impl.TransactionImpl.commit(Tran sactionImpl.java:415)


2. received 1 time
java.lang.StackOverflowError
at java.io.RandomAccessFile.readBytes(Native Method)
at java.io.RandomAccessFile.read(Unknown Source)
at org.eclipse.core.internal.registry.BufferedRandomInputStream .fillBuffer(BufferedRandomInputStream.java:57)
at org.eclipse.core.internal.registry.BufferedRandomInputStream .read(BufferedRandomInputStream.java:64)
at java.io.DataInputStream.readInt(Unknown Source)
at org.eclipse.core.internal.registry.TableReader.basicLoadConf igurationElement(TableReader.java:193)
at org.eclipse.core.internal.registry.TableReader.loadConfigura tionElement(TableReader.java:181)
at org.eclipse.core.internal.registry.RegistryObjectManager.loa d(RegistryObjectManager.java:410)
at org.eclipse.core.internal.registry.RegistryObjectManager.bas icGetObject(RegistryObjectManager.java:271)
at org.eclipse.core.internal.registry.RegistryObjectManager.get Object(RegistryObjectManager.java:263)
at org.eclipse.core.internal.registry.ConfigurationElementHandl e.getConfigurationElement(ConfigurationElementHandle.java:26 )
at org.eclipse.core.internal.registry.ConfigurationElementHandl e.isValid(ConfigurationElementHandle.java:131)
at org.eclipse.gmf.runtime.common.core.service.Service$Provider Descriptor.toString(Service.java:287)
at java.lang.String.valueOf(Unknown Source)
at java.lang.StringBuilder.append(Unknown Source)
at org.eclipse.gmf.runtime.common.core.service.Service.safeProv ides(Service.java:874)
at org.eclipse.gmf.runtime.common.core.service.ExecutionStrateg y$1.getUncachedProviders(ExecutionStrategy.java:89)
at org.eclipse.gmf.runtime.common.core.service.Service.getProvi ders(Service.java:538)
at org.eclipse.gmf.runtime.common.core.service.ExecutionStrateg y$1.execute(ExecutionStrategy.java:68)
at org.eclipse.gmf.runtime.common.core.service.Service.execute( Service.java:652)
at org.eclipse.gmf.runtime.common.core.service.Service.executeU nique(Service.java:679)
at org.eclipse.gmf.runtime.common.ui.services.icon.IconService. getIcon(IconService.java:118)
at org.eclipse.gmf.runtime.diagram.ui.editparts.TreeEditPart.ge tImage(TreeEditPart.java:135)
at org.eclipse.gef.editparts.AbstractTreeEditPart.refreshVisual s(AbstractTreeEditPart.java:137)
at org.eclipse.gmf.runtime.diagram.ui.editparts.TreeEditPart.ha ndleNotificationEvent(TreeEditPart.java:206)
at org.eclipse.gmf.runtime.diagram.ui.editparts.TreeEditPart.no tifyChanged(TreeEditPart.java:193)
at org.eclipse.gmf.runtime.diagram.core.listener.DiagramEventBr oker.fireNotification(DiagramEventBroker.java:500)
at org.eclipse.gmf.runtime.diagram.core.listener.DiagramEventBr oker.resourceSetChanged(DiagramEventBroker.java:395)

at org.eclipse.gmf.runtime.diagram.ui.internal.DiagramEventBrok erThreadSafe.resourceSetChanged(DiagramEventBrokerThreadSafe .java:72)
at org.eclipse.gmf.runtime.diagram.core.DiagramEditingDomainFac tory$DiagramEditingDomain.postcommit(DiagramEditingDomainFac tory.java:213)
at org.eclipse.emf.transaction.impl.TransactionalEditingDomainI mpl.deactivate(TransactionalEditingDomainImpl.java:504)
at org.eclipse.emf.transaction.impl.TransactionImpl.close(Trans actionImpl.java:623)
at org.eclipse.emf.transaction.impl.TransactionImpl.commit(Tran sactionImpl.java:415)


3. received 1 time
java.lang.StackOverflowError
at java.util.IdentityHashMap.hash(Unknown Source)
at java.util.IdentityHashMap.remove(Unknown Source)
at org.eclipse.emf.transaction.util.Lock.resume(Lock.java:653)
at org.eclipse.emf.transaction.util.Lock.acquire(Lock.java:300)
at org.eclipse.emf.transaction.util.Lock.uninterruptibleAcquire (Lock.java:526)
at org.eclipse.emf.transaction.util.Lock.uiSafeAcquire(Lock.jav a:362)
at org.eclipse.emf.transaction.impl.TransactionalEditingDomainI mpl.acquire(TransactionalEditingDomainImpl.java:541)
at org.eclipse.emf.transaction.impl.TransactionalEditingDomainI mpl.activate(TransactionalEditingDomainImpl.java:469)
at org.eclipse.emf.transaction.impl.TransactionImpl.start(Trans actionImpl.java:184)
at org.eclipse.emf.transaction.impl.TransactionalEditingDomainI mpl.startTransaction(TransactionalEditingDomainImpl.java:385 )

at org.eclipse.gmf.runtime.diagram.core.DiagramEditingDomainFac tory$DiagramEditingDomain.postcommit(DiagramEditingDomainFac tory.java:212)
at org.eclipse.emf.transaction.impl.TransactionalEditingDomainI mpl.deactivate(TransactionalEditingDomainImpl.java:504)
at org.eclipse.emf.transaction.impl.TransactionImpl.close(Trans actionImpl.java:623)
at org.eclipse.emf.transaction.impl.TransactionImpl.commit(Tran sactionImpl.java:415)


4. received 6 times
java.lang.StackOverflowError
at org.eclipse.gmf.runtime.common.core.util.Log.log(Log.java:69 )
at org.eclipse.gmf.runtime.common.core.util.Log.log(Log.java:13 2)
at org.eclipse.gmf.runtime.common.core.service.Service.safeProv ides(Service.java:870)
at org.eclipse.gmf.runtime.common.core.service.ExecutionStrateg y$1.getUncachedProviders(ExecutionStrategy.java:89)
at org.eclipse.gmf.runtime.common.core.service.Service.getProvi ders(Service.java:538)
at org.eclipse.gmf.runtime.common.core.service.ExecutionStrateg y$1.execute(ExecutionStrategy.java:68)
at org.eclipse.gmf.runtime.common.core.service.Service.execute( Service.java:652)
at org.eclipse.gmf.runtime.common.core.service.Service.executeU nique(Service.java:679)
at org.eclipse.gmf.runtime.common.ui.services.icon.IconService. getIcon(IconService.java:118)
at org.eclipse.gmf.runtime.diagram.ui.editparts.TreeEditPart.ge tImage(TreeEditPart.java:135)
at org.eclipse.gef.editparts.AbstractTreeEditPart.refreshVisual s(AbstractTreeEditPart.java:137)
at org.eclipse.gmf.runtime.diagram.ui.editparts.TreeEditPart.ha ndleNotificationEvent(TreeEditPart.java:206)
at org.eclipse.gmf.runtime.diagram.ui.editparts.TreeEditPart.no tifyChanged(TreeEditPart.java:193)
at org.eclipse.gmf.runtime.diagram.core.listener.DiagramEventBr oker.fireNotification(DiagramEventBroker.java:500)
at org.eclipse.gmf.runtime.diagram.core.listener.DiagramEventBr oker.resourceSetChanged(DiagramEventBroker.java:395)
at org.eclipse.gmf.runtime.diagram.ui.internal.DiagramEventBrok erThreadSafe.resourceSetChanged(DiagramEventBrokerThreadSafe .java:72)

at org.eclipse.gmf.runtime.diagram.core.DiagramEditingDomainFac tory$DiagramEditingDomain.postcommit(DiagramEditingDomainFac tory.java:213)
at org.eclipse.emf.transaction.impl.TransactionalEditingDomainI mpl.deactivate(TransactionalEditingDomainImpl.java:504)
at org.eclipse.emf.transaction.impl.TransactionImpl.close(Trans actionImpl.java:623)
at org.eclipse.emf.transaction.impl.TransactionImpl.commit(Tran sactionImpl.java:415)

--------------080900010604060703080500--
Re: Problem with undo of creation of an EditPart [message #225677 is a reply to message #225654] Mon, 13 April 2009 14:33 Go to previous messageGo to next message
Alexander Shatalin is currently offline Alexander Shatalin
Messages: 2928
Registered: July 2009
Senior Member
Hello Cayla,

Try placing breakpoint into the commonly repeated part of StackOverflow trace
ot see the reason why does loop exist there.
In general, this kind of update should be performef in an undo-transparent
manner (shapre node update operaition should be excluded from undo sequence).
To implement undo-transparent operation subclass AbstractEMFOperation and
execute it by calling .execute() method (not on OperationHistory this time).

-----------------
Alex Shatalin
Re: Problem with undo of creation of an EditPart [message #226226 is a reply to message #225677] Wed, 15 April 2009 14:36 Go to previous messageGo to next message
Eclipse User
Originally posted by: cayla_sha.gmx.net

Alex Shatalin schrieb:
> Hello Cayla,
>
> Try placing breakpoint into the commonly repeated part of StackOverflow
> trace ot see the reason why does loop exist there.
This isn`t possible.
Ok, it`s possible to put a breakpoint there, but it`s not possible to
debug it afterwards. The methods TransactionImpl.commit() and
TransactionImpl.close() are called constantly. So each time I click on
my Diagram-Eclipse in the Task Bar I have to return to the Debug-Eclipse
and click the Play-Button in the debug-environment. I`m not able to do
the thing what leads to the Exception.

So I tried another approach:
The generated code worked at the time I generated it (per definitionem
;)). So it must be one of my code-changes that led to the Exception. So
I started to put breakpoints in every code-part I wrote - and I found
the problem: my handleNotificationEvent() in LocationEditPart is called
again and angain until it triggers the StackOverflowException.

When I create my node Location I do something special: My Location has
two attributes: xPosition and yPosition. These attributes hold "simple
coordinates" like (1,1) or (2,3) and they are responsible that all my
nodes are arranged in a grid.
So each time I create a node (e.g. on the gmf-coordinates (123,145)) I
calculate what`s the nearest "grid-position" and set the xPosition and
yPosition accordingly (e.g. to (2,3)). And I change the gmf-coordinates,
so that the node moves to its position on the grid (e.g. to (110,190)).

So each time I create a node, I change its attributes and I move it. But
I don`t do this within an Command or with an Operation History. I only
call the set-Methods.
And when I undo the creation, GMF tries to undo the move, too (e.g. it
wants it to move back to (123,145)).
Why is this so? Why does it not only delete the location but also wants
to move it back? I thought, that only actions, that are done within such
an Command, are realized by the undo.


> In general, this kind of update should be performed in an
> undo-transparent manner (shape node update operation should be
> excluded from undo sequence). To implement undo-transparent operation
> subclass AbstractEMFOperation and execute it by calling .execute()
> method (not on OperationHistory this time).
Do you mean I should do it like this?

TransactionalEditingDomain editingDomain = this.getEditingDomain();
AbstractEMFOperation cmd = new AbstractEMFOperation(editingDomain, "...")
{
@Override
protected IStatus doExecute(IProgressMonitor monitor, IAdaptable info)
throws ExecutionException
{
// ...do the thing I want to do...
return null;
}
};

try {
cmd.execute(null, null);
} catch (ExecutionException e) {
e.printStackTrace();
}
Re: Problem with undo of creation of an EditPart [message #226251 is a reply to message #226226] Wed, 15 April 2009 17:25 Go to previous messageGo to next message
Eclipse User
Originally posted by: cayla_sha.gmx.net

I tried something:
I surrounded every call of a set-method in my handleNotificationEvent()
with this AbstractEMFOperation, like I wrote it at the end of my earlier
mail.
But it didn`t change anything. Everything behaves just the same, the
Exception is still there.
Re: Problem with undo of creation of an EditPart [message #226376 is a reply to message #226251] Thu, 16 April 2009 11:47 Go to previous messageGo to next message
Eclipse User
Originally posted by: cayla_sha.gmx.net

I`m very close to the solution.
My only question is:
How can I do something (like changing an attribute) and it isn`t un-done
when I click "undo"? So how can I exclude an operation from the
undo-process?

Alex, you suggested the AbstractEMFOperation, but when I write the code
like I wrote it in my earlier mail, it doesn`t change anything.
Re: Problem with undo of creation of an EditPart [message #226383 is a reply to message #226226] Thu, 16 April 2009 11:55 Go to previous messageGo to next message
Alexander Shatalin is currently offline Alexander Shatalin
Messages: 2928
Registered: July 2009
Senior Member
Hello Cayla,

> the problem: my handleNotificationEvent() in LocationEditPart is
so, next wuestion is: why handleNotificationEvent() is called once again
then you perform "setPosition" operation from there? Try to find an answer.
Looks like you are listening for "setPosition" notification and setting position
again and again.. Or is tehre any other reason "looping" handleNotification
method execution?

>> In general, this kind of update should be performed in an
Right. Try wrapping the command into AbstractEmfOperation and callind "without"
an OperationHistory, but this should have no connections with "loop".

-----------------
Alex Shatalin
Re: Problem with undo of creation of an EditPart [message #226390 is a reply to message #226376] Thu, 16 April 2009 11:56 Go to previous messageGo to next message
Alexander Shatalin is currently offline Alexander Shatalin
Messages: 2928
Registered: July 2009
Senior Member
Hello Cayla,

new AbstractEMFOperation() { ... }.execute();

-----------------
Alex Shatalin
Re: Problem with undo of creation of an EditPart [message #226416 is a reply to message #226383] Thu, 16 April 2009 13:53 Go to previous messageGo to next message
Eclipse User
Originally posted by: cayla_sha.gmx.net

Alex Shatalin schrieb:
> Hello Cayla,
>
>> the problem: my handleNotificationEvent() in LocationEditPart is
> so, next question is: why handleNotificationEvent() is called once
> again when you perform "setPosition" operation from there? Try to find
> an answer. Looks like you are listening for "setPosition" notification
> and setting position again and again.. Or is tehre any other reason
> "looping" handleNotification method execution?

Now I THINK I understand what happens...


Ok, I try to explain it as exact as possible so that you don`t
understand me wrong, please be patient.
Normally I catch 2 events in my handleNotificationEvent()-method:
1. When the user moves the node:
Then I calculate the nearest grid-position and set the attributes
xPosition and yPosition. Additionally I move the node myself, because
normally the user doesn`t drop the node exactly on a grid-position.
2. When the user changes one of my attributes xPosition or yPosition:
Then I move the node accordingly to the new grid-position.

And this is what happens:
When location was created at the beginning the attributes xPosition and
yPosition were both 0. And the user created the node somewhere on the
surface, but not exactly on a grid-position (e.g. (123,145)).
When the user now clicks "undo create location" GMF sets the values of
the location back: xPosition=0, yPosition=0 and gmf-positions to
(123,145). Both are "set-commands", so handleNotificationEvent()-method
is called. Now the call for 123,145 calculates the new
(xPosition/yPosition) to (2,3) and the new gmf-position to (110,190) and
sets them.
Against it works the other call: It wants to set the
(xPosition/yPosition) to (0,0) and calculates the gmf-position to (30,30).
Now both fight against each other, and set the positions until the
StackOverflowException occurs...


Now my question:
How can I deter GMF from setting back the attribute-values?
It doesn`t make sense to set the values back when afterwards the whole
location is deleted.


>
>>> In general, this kind of update should be performed in an
> Right. Try wrapping the command into AbstractEmfOperation and callind
> "without" an OperationHistory, but this should have no connections with
> "loop".

The only way I found to call it "without" the OperationHistory, was that
I passed "null" in the execute-command. Like this:
new AbstractEMFOperation() { ... }.execute(null, null);
Did you mean this?


I´m sorry, I don`t understand what you mean with "this should have no
connections with "loop"". There is no loop in my code. That are just
events that call handleNotificationEvent() again and again.

>
> -----------------
> Alex Shatalin
>
>
Re: Problem with undo of creation of an EditPart [message #226557 is a reply to message #226416] Fri, 17 April 2009 09:42 Go to previous messageGo to next message
Alexander Shatalin is currently offline Alexander Shatalin
Messages: 2928
Registered: July 2009
Senior Member
Hello Cayla,

First of all, GMF already supports "snap to grid" functionality. Why don't
you use it?

> How can I deter GMF from setting back the attribute-values?
> It doesn`t make sense to set the values back when afterwards the whole
> location is deleted.
Sorry, I did not understand your explanation completely, but general idea
is: you have to ignore one of "Set" events by recognizing this is a "false"
event..


> I passed "null" in the execute-command. Like this:
> new AbstractEMFOperation() { ... }.execute(null, null);
> Did you mean this?
Right. This is one of the options. You can use any progress monitors there..
Check an implementation concerning an instance parameter.

> I´m sorry, I don`t understand what you mean with "this should have no
> connections with "loop"". There is no loop in my code. That are just
> events that call handleNotificationEvent() again and again.
An this is exactly what I'm calling "loop" - event processing is causing
another event processed again ....

-----------------
Alex Shatalin
Re: Problem with undo of creation of an EditPart [message #226617 is a reply to message #226557] Sat, 18 April 2009 08:42 Go to previous messageGo to next message
Eclipse User
Originally posted by: cayla_sha.gmx.net

I found a solution :)
No more StackOverflowException :)


> First of all, GMF already supports "snap to grid" functionality. Why
> don't you use it?
>
Because I need the grid-positions, which are saved in the attributes
xPosition and yPosition, for another program.
After the user made his diagram, he clicks "export" and then gets a xml
with the data for the other program. And this program doesn`t know
anything about the gmf-coordinate-system in pixels. It just works with
this grid-positions.


>> How can I deter GMF from setting back the attribute-values?
>> It doesn`t make sense to set the values back when afterwards the whole
>> location is deleted.
> Sorry, I did not understand your explanation completely, but general
> idea is: you have to ignore one of "Set" events by recognizing this is a
> "false" event..
>
Now I block the event when xPosition or yPosition are set to 0.
Anyway values smaller than 1 are forbidden for these attributes. Before
I blocked the wrong values later, now I block it directly in
handleNotificationEvent().
Re: Problem with undo of creation of an EditPart [message #226641 is a reply to message #225654] Sat, 18 April 2009 10:23 Go to previous messageGo to next message
Eclipse User
Originally posted by: cayla_sha.gmx.net

This is a multi-part message in MIME format.
--------------010102010107070400050100
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit


> - In my editor I have the functionality, that the appearance of a node
> changes, when the data changes. That means, that when the data changes,
> one EditPart is deleted and a new one is created. When I undo such an
> operation I get a red box on my diagram with the text "invalid view -
> remove from diagram".

This problem is still there.
And I don`t have a clue where it comes from. I thought it has something
to do with the other problem, but now I solved the other problem and
it`s still there. I debugged my program many times for this problem, but
I didn`t find anything.


The method XXXEditPartFactory.createEditPart(...) is called with a View
the looks broken. I attached a picture I took during debugging from the
Object "model" that is passed to the method createEditPart(...). I
marked the interesting parts. ShapesDiagram is my main Object that
contains all Nodes.
The type is null, so getVisualID() returns null and so
createUnrecognizedEditPart() is called.


So that the change takes place at once when data changes, I call my own
F5-command. I found out, that when I comment this F5-command out,
everything works fine.

The F5-command works like this:
In the EditPart of the nodes, that are involved in the change, I call my
F5-command:
ShapesDiagramEditPart shapesDiagramEditPart = (ShapesDiagramEditPart)
this.getParent();
DiagramImpl shapesDiagramView =
(DiagramImpl)shapesDiagramEditPart.getModel();
ShapesDiagramImpl shapesDiagramImpl =
(ShapesDiagramImpl)shapesDiagramView.getElement();
CmseditorEditPartFactory.myF5Command(shapesDiagramImpl);

And the F5-command looks like this:

public static void myF5Command(EObject modelElement)
{
List<?> editPolicies =
CanonicalEditPolicy.getRegisteredEditPolicies(modelElement);

for (Iterator<?> it = editPolicies.iterator(); it.hasNext();)
{
CanonicalEditPolicy nextEditPolicy = (CanonicalEditPolicy) it.next();
nextEditPolicy.refresh();
}
}

I already wrapped the call of the F5-command in an AbstractEMFOperation
and called it without any History, but it didn`t change anything.
I also tried to wrap the call "nextEditPolicy.refresh();" in an
AbstractEMFOperation, but also nothing changed.


I´m very desperate, because I try to solve this problem for a long time.
ANY help is appreciated.

Best wishes
Julia

--------------010102010107070400050100
Content-Type: image/jpeg;
name="brokenView.jpg"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
filename="brokenView.jpg"

/9j/4AAQSkZJRgABAQEASABIAAD/4QAWRXhpZgAATU0AKgAAAAgAAAAAAAD/ 2wBDAAEBAQEB
AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEB
AQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB AQEBAQEBAQEB
AQEBAQEBAQEBAQEBAQEBAQEBAQH/wAARCAOMAsIDASIAAhEBAxEB/8QAHgAB AQADAQEBAQEB
AAAAAAAAAAUHCAkGCgQDAgH/xABKEAABBAADBAgFAwIEBQMDAQkGBAUHCAAC AwEJFdUTFBYX
GFRVlVOTlNPUVleWERIZJjh1CiQlJ7YjKDchIjYpNbRHSFh2NDm1/8QAGwEB AAIDAQEAAAAA
AAAAAAAAAAECAwUGBwT/xABOEQABAQQGBggEAwcDAwIGAgMBAwACEVEEEyFh kdESU5PS0/AF
FDFScZKhsQYVQVQiYtQjMjNklKLxFiSBB0JDJbI0RGNyc8GC4RdFwv/aAAwD AQACEQMRAD8A
+w2gaLRUQEjz6mdXlzbHpPk2bNBeuS5P6bAsN2/126aZRo6e3N/XNt/rn25d ufbs/pl25tuX
Ll2bNiyKSwEaeFjCqzSM8Obb1fI6aYSDTLIqVoVKkug4aDY8uQAOErY0PWds VoHbaxOSxK8Z
Gd1Z3fUQ5Wx4a1SvX/d9/wCn9J/vmh/4UF4wlY4ZmnLI5xpBEyXHgVI9HOUz SuVXYhhCUWs/
ZnGJIcCk2cvcJjqlZ9IxrxUhjspSNTOPKAV31U7uscyRA+ta0NWosidHTWUf BTceegXham4X
jpuA/ifBEYEmdg+gar6hcdj+IiIB0Q88QP8A7XYmX09G6Kib6LGzdrOY+tfs +mkW6ja4oHfI
YjD+zOOnoJlmxA/DBNps5IwLdduXNzujSvLUh11zI6NL2j09dpdW5aq/Gflg ZGQwtLjF3XNr
Qj1UiTT/AKOrxrLHFzcVGmia2dqR5F3Sr3V0W62kkQo9HZ/dqaup/fqZtLQ0 9bW08K1EZTVs
CDByOlR67OZIatS5KUyiyswxIhumHoli2Pl5mYjDAKgbQPvxCRhb6tXN7UAg zFqambiAsKtI
muYtLN/e4MJFU6RLosYG6IG05EStoPhPQeNdUkZHx0ZkTs2a487LUmXW1m/Q d2h8c0yN12o3
HSaHja2uus3LNJHm0c1FKOi4oXA4mQ6QIgOERgCRpAQOibIgfSMLINLr5edD 0XhEAwMQbZg2
jwNoa7G86AEjky4J2ITgJNEmk4qdEUOlfDXhzRtCnSSOqltys5S/I9bO2aql Htc23WWJ3pty
rNHr7YmzZFGXQzzwtN8Vx94dvzcc4oTgGXn2yuyf5HClcOMA6oOXhvBnSRx2 S30kNzfOQs65
yTOIY2M7IwALcPu2trtTO6aj0RLXFSg11+ZtztWbT1Mn7w0ZkI0rcgDo1UzA jdyyz9DxkrWQ
QWSYBSYlhp+vTXJrsCpazqHXkckkLH9CCVUjap+WC5Cxa45HuUpeF7y1tCNw XaGMopD/AMaf
/DrphdECBsANnh2hrRMziW3O4Wm+K4+8O35uHC03xXH3h2/Nx82TiM3pBUSV OKqbvrg45ILp
DNjszkWWRkUqRVVqXvgalQTCqmJFRK8k8gx5MBVugnS0L4BFlYtYZtddRx0t SxjS8zxbFnAJ
PRegQdv+0aPvX/xP/wDC47wLCdxHY3/E/wDGT2j7rKB9z3ez3S//AKsPd/3x f4q3DfEj/wBr
Oo92nFf8j+CDEVSWrT8juVwwZEzOJbvbE59Hc4xZGk1xaQuJRGUwR+GylHRN 0heydogSQBxt
LBF94MRZGggaOLj7u3uHDH1qbHhB1jqrm3olulrptJE59Hc4xZGk1xaQuJRG UwR+GylHRN0h
eydogSQBxtLBF94MRZGggaOLj7u3uHDH1qbHhB1jqrm3olulrptL5c6QxhvA RN7oUOG5/Z+G
lMeQ/uwhOK4MbaoXMJxXLW4SqPVFDakZluQW+1EObs+IyDLJ6a5Qges10YAP 70gTc16b3BCY
qN1FIApr7/bskTKgLdt7vkFOhkgCzYLpBVATMQ4sZnEcKhMqHIGAWchGSYee EyN3YSBid0ax
reWZ0RpXFrcUqlCuTaCnQ1dLKqktWn5HcrhgyJmcS253C03xXH3h2/Nw4Wm+ K4+8O35uKOGF
Ulq0/I7lcMGRMziWncLTfFcfeHb83Dhab4rj7w7fm4o4YVSWrT8juVwwZEzO JadwtN8Vx94d
vzcOFpviuPvDt+bijhhVJatPyO5XDBkTM4lp3C03xXH3h2/Nw4Wm+K4+8O35 uKOGFUlq0/I7
lcMGRMziWncLTfFcfeHb83Dhab4rj7w7fm4o4YVSWrT8juVwwZEzOJadwtN8 Vx94dvzcOFpv
iuPvDt+bijhhVJatPyO5XDBkTM4lp3C03xXH3h2/Nw4Wm+K4+8O35uKOGFUl q0/I7lcMGRMz
iWncLTfFcfeHb83Dhab4rj7w7fm4o4YVSWrT8juVwwZEzOJadwtN8Vx94dvz cOFpviuPvDt+
bijhhVJatPyO5XDBkTM4lp3C03xXH3h2/Nw4Wm+K4+8O35uKOGFUlq0/I7lc MGRMziWncLTf
FcfeHb83Dhab4rj7w7fm4o4YVSWrT8juVwwZEzOJadwtN8Vx94dvzcOFpviu PvDt+bijhhVJ
atPyO5XDBkTM4lp3C03xXH3h2/Nw4Wm+K4+8O35uKOGFUlq0/I7lcMGRMziW ncLTfFcfeHb8
3Dhab4rj7w7fm4o4YVSWrT8juVwwZEzOJadwtN8Vx94dvzcOFpviuPvDt+bi jhhVJatPyO5X
DBkTM4lp3C03xXH3h2/Nw4Wm+K4+8O35uKOGFUlq0/I7lcMGRMziWncLTfFc feHb83Dhab4r
j7w7fm4o4YVSWrT8juVwwZEzOJadwtN8Vx94dvzcOFpviuPvDt+bijhhVJat PyO5XDBkTM4l
p3C03xXH3h2/Nw4Wm+K4+8O35uKOGFUlq0/I7lcMGRMziWncLTfFcfeHb83G MD2R4khGMVcq
zZJ4dD0aDSBgzk8iyfI6COwEd2vrg1jzPseioofWYbZcrsQu7UxNWRYuS5Fr u5tzUiy6ixYl
T6mYMc7943E/fjUYTi1TGnfAPlFrt2r28jrXDe8BnIosZN4TVQilvtcI6ja7 oneP2iMmgsfZ
F4y3qBxACNhE5k3RD6Jy19KhTTrXBVuQq1DDQdhEPJQPZ9PpJpiYG09o+pvb d9M8BiwqeQVG
VIFRsOD4yWEIcmMdXXKmIVNHEsZw4meR7Sdszu1j5Y7gR01jLyuR6Dc/OIWW IWtSqUjjxpI/
PyyfR3B0WSXNcpELiLxlD8fmUpSKTdIXvfZ0Ej8cciwufeDDuR3IHfhA+0OD hwxianN4X9X6
q2N61bq6CbV+bNIJ2uDbQSuCzSM3fdq7QCP0KqtYuycSM1ql0t2lrBFY/vgZ IgeRYxmKvqZL
bGbpgbjGdt3Q13oLqso2YgSWH1LBoSQdbqk5zFc74/tmJ2LPae2nBbHjO8fN Bs0pBZwT3agd
DrNf0jKiwqI5z3gTPFgzcIeqymWHj8QPtPFm7Ia3Vm3pqNU4ujiqkhCcpteZ Ne5+lmvVJatP
yO5XDBoiZnEt9VhY8BgEKkx0dFSALCQsfeSwxMSwx1RwVExUcblLwQkxMQvD sjaGEfYmhGsd
Hl5dFiVua25KpXLlOgm0NXVy+fi2RIinEEYpShSUBCYIyKOJ9mZFi2SkcgAh FwR4cB154EXC
b+7j7vwggaHVic+HuCjqDw2ODYq6JaiU6GlwyhXNcYLvnJMpTZLdn1jQJzBc omlSFxOnt5T2
M1VM2HPNuvVZMMyi4WYI6BGhBrgKWqxEzCe70p2+7wEjkLMmi6UWZ0d1l3zb X1grzFtnX6v9
TM7exX/jXumoBuBaxbABvc7p1wZxx4MbfzVVTempHOFkjhGrKvkAOrKlSrn2 bHULXncEAiSL
bQQpIQB1WK5d01Ulq0/I7lcMGRMziW+qzhab4rj7w7fm4x/Gh9HcwDjkWR0Q uJEPtEgSzFrg
4dIXtHVzuDpTMoUlJi6q+5Gxbq9l5Nj8uGeJ6CbVZ3vhHGR1wdx9e2Oq35c3 ossXqShbCKHQ
m3j6y2MTVgJmDdnioW839cI9bpMYd4rvjoip6b2g2x8pUVuLR8/i6GqXaa6c t5WofY9n6MxT
PIkwHcghyyWipd3+3fImVBcDHzOYjJAJu6y7+82LEbWTMziwuKoVPd5Ja86B SZMhdEyVTrj5
oEkY8YibzpaWZuIxV9ZiFnUrGh0QrNdVJatPyO5XDBkTM4ls3JpqhFVJjzD2 lI6DLIjEQDIY
uYlL8+o9DXkIsj0sl9ritmf1mtoDZHMCWGwt4mcmiEed3STAuGlgnLJiKMUd noKSkfoG0+jt
3lMyhRvIXFRJsfx/GkpFwz0hfpcIBJgI5ZE46feM6+TSH1/aIgg6Um/hjY6r Xho7L9afW9sR
PY6pd+CUg+MlBDp6LVB7wM92hXef71zvZVDPUXHrRGfUT3iMxbuTv8MCbrUS mMfoIlkrdbtE
cd8L2+RZGvDq6wWU9lSWKEUeh3nwGIpzKp9teS7tJ0u/GjQ9w/u+WNbJV3j2 4UMFRO4gxpvN
l8ngwPI29toDvDzYiHxlNJEDv7iEx7EA8KtbiT5X1BJI07uBgLyGqktWn5Hc rhgyJmcS30Gy
lIkRQcCPspTXKAhD8ZC/DO00iylJSOPwQd428N46zcdLix/aB9o4uQO7UxNn EHBP194c29sS
9KtWptDVaEiREpBBGUk0oCCiMpA7uuwUi6ElI9UENu+B4HR2JOyJdpv+YfJO 9EgLxNijrgzg
t7bPBQOtgzxNa9tugp45KHy+dV491jW3DAQWekR5mCPRushozDufeIt1TSp3 jOfmqTLGlkY0
d3RVC52ZR9tjZzc4+TIBFDIbjMBUfDMGukq1JjuRJEmrS1/s5SWW5Lh+r0tV EkwgIo2BbP1H
kETiW29DLDrZvHrPl29fHZctXft4A1cmU+dwAgNXczITuXW4grOyD4NWofmU TqYUVYgmx8ku
TgqktWn5HcrhgyJmcS3c5zstWhuO5SiRNNggVTbC0fuEpSdX2OjdZKNjhUEb mdifsz7r12jh
eVTa48RbCoT1B1sZgJxeCpUXiLaMt7s5lQ+jccvibwGHoqMnQKVIDQJNB9mL A4xEzHVIxUsF
SNuTPA8TDJCzuyxofh99aFiN0ZnlrWKm50blSZchU66bX0tXNxyGq5zY33sh WNY3LOO1Yqvb
+z95j/SP6qS7GhGPHdyIdt4tWBoVbwjk5JD9p+KTBeI8dxwOgmuOxnhmLAJa IWFnwemcUCmG
y+3+6/8A+YpZHT61f/bGRtIFkpLrboaH/LM6Km0o2dmORaStoiO5ui1o/j9s qKUQo3x1E6ps
G10PgiYdi1wDQlaIKBFkVSWrT8juVwwZEzOJbe7hab4rj7w7fm4cLTfFcfeH b83FHDCqS1af
kdyuGDImZxLTuFpviuPvDt+bhwtN8Vx94dvzcUcMKpLVp+R3K4YMiZnEtO4W m+K4+8O35uHC
03xXH3h2/NxRwwqktWn5HcrhgyJmcS07hab4rj7w7fm4cLTfFcfeHb83FHDC qS1afkdyuGDI
mZxLTuFpviuPvDt+bhwtN8Vx94dvzcUcMKpLVp+R3K4YMiZnEtO4Wm+K4+8O 35uHC03xXH3h
2/NxRwwqktWn5HcrhgyJmcS07hab4rj7w7fm4cLTfFcfeHb83FHDCqS1afkd yuGDImZxLTuF
pviuPvDt+bhwtN8Vx94dvzcUcMKpLVp+R3K4YMiZnEtO4Wm+K4+8O35uHC03 xXH3h2/NxRww
qktWn5HcrhgyJmcS07hab4rj7w7fm4cLTfFcfeHb83FHDCqS1afkdyuGDImZ xLTuFpviuPvD
t+bhwtN8Vx94dvzcUcMKpLVp+R3K4YMiZnEtO4Wm+K4+8O35uHC03xXH3h2/ NxRwwqktWn5H
crhgyJmcS07hab4rj7w7fm4cLTfFcfeHb83FHDCqS1afkdyuGDImZxLTuFpv iuPvDt+bhijh
hVJatPyO5XDBkTM4ltFKBp9bWgJHm016tLl2PSfLt09DIhzZNu3YFhu3+/bt UolGp/dt2bdm
Xbs2Z9mT+mXZ/TJszf3bc27XUlPrDj8pp5XjTDd9/wCn9J/vmh/4UF43gxZ5 x0vPGL9pJsUU
A7ZB4AdnYBDEsibsBk07qSn1hx+U08rxFIndmEGdYRFhumFx9v6v199InAbZ WdD1tVoIUvXH
NyRJkSbrK1SmRp+m18nTKlGgn0/7tbV08mb1eNU7ZPL2LDUdl7A/MAe4C52S rEp2YjTiXggK
8PMDzSICJMdjrWWAKx5FNA4JBhvcGTQPgZUR67kkGm0uYHZ5QOGjZNAPvuuC sJPYAqpF4gRD
oJeNrxAdBIMCYwNoMPP6IJMID8ox7Po2WROToyPXHWZwaZQ40dkyLUclDWJl 4KRuKdu0ddMl
1l+shZ8qxTpItJSsSJ9RVqaWXQya6pNo5tTZqa+llzZC6kp9YcflNPK8cLt3 eb2pKSESFbJz
pG06PjVbC2smD6WPQYkbSAMjEjObj5xEkKil0szYpOojAiEpEiFHCABppgpR XYEchGCSd4kA
latB2T94sXXooRecdeCrjzzgfLjyyhedi887Awed7Q6HoQiIwMbSauKB8Eul 0gGAIdABgBGE
RMw/4ad1JT6w4/KaeV4dSU+sOPymnleOZ3HJP7yOE9SQeLj+/wDv6PpVHUuB /wBf6de/u6r/
AE2046T/AOnTdN0/Wv8AlP8AWR/y2OoWPN/gL44Hxx/qGPw7098P/IemFeix 83CifWw5pQNh
dqKehV/+o9Hftuo11F/3VI6wdDoenOg3+hOoaVOoNN69RHaUOqKOKVbr0IE6 Je0kFNL/AG65
0CtoK/snNC2d1JT6w4/KaeV4dSU+sOPymnlePmybt5HZ+LbP2UkGdZdh9XDd fSC/hHL1IBOR
x8ytAC1RqkPz+/w/M4zU1jpaFytBpBNAtEsIHzNPdrt4sTVVlQfntNpR4MCB JZKrwTG+AK8S
XaqhzJJUXH1epgqDIlrYfrDbGw0xGz1VGTRXLapTbiEK/b83eEsbhHU4z6Nx WPjEN2qr1PUb
IJLBBuqMXN0GnJ6TQAJR2NyGKSJ6DVuzU2qu/d7zLaGJuwGTfVYzP48RuJYz jx6gfXcCIEwm
dNbM6C7o4hZUsFRk6RjJYhQpNdSOECoJNA4xTMzxpI3HXFSwZIdJNmaH5rWK vQdSU+sOPymn
lePkzZbc5wFquQlgfeMD5E0ShvH1hGh3k0s2eoZX6AjxujPdo7tsedIRI7Jo 93vaeri2YCB8
OtuSKomjarQWVGIXWabiR2lVqd4iOmeUMgVU3ms3z49iMivNzR/ZZE4mDdXN onuvRNvrVsFS
mAreVH3bMr2rlsZjVXHTzfB7H4bQWYtfOrMetthlYXHjdCaZzkfTJYujeSB5 +Vbs1Nqrv3e8
yyJuwGTfUZ1JT6w4/KaeV4dSU+sOPymnlePkTjCxtgK8UF3aEMRxfOP48H2q v64PtHL1l7C1
Aql4PbOwPC9NxQe3ZDtKhNu77WRkCyAMIj+aidfWyfYEWXTde6V+I3mwyIfi k5DDTd8Zs9fN
+gy983SRbesEEu8MEFRohH2iX2DPUOvESFU3093acz2NM3iYbGQ5IUyAhAhJ JvlJopeKWDgR
xcYuluSFrHbOK7GtCqP4mg9VuzU2qu/d7zLIm7AZN9BvUlPrDj8pp5Xh1JT6 w4/KaeV41RoV
KSqaanRTJyp9sAVdqu3WuiLLOtlcW6XS9nbpJMWZhLlamoTe3VlKo/KmVuby CE5FhTK4gkow
m4x7I7URFXarVJnbb/CrdmptVd+73mWRN2Ayad1JT6w4/KaeV4dSU+sOPymn leKOGFW7NTaq
793vMsibsBk07qSn1hx+U08rw6kp9YcflNPK8UcMKt2am1V37veZZE3YDJp3 UlPrDj8pp5Xh
1JT6w4/KaeV4o4YVbs1Nqrv3e8yyJuwGTTupKfWHH5TTyvDqSn1hx+U08rxR wwq3ZqbVXfu9
5lkTdgMmndSU+sOPymnleHUlPrDj8pp5XijhhVuzU2qu/d7zLIm7AZNO6kp9 YcflNPK8OpKf
WHH5TTyvFHDCrdmptVd+73mWRN2Ayad1JT6w4/KaeV4dSU+sOPymnleKOGFW 7NTaq793vMsi
bsBk07qSn1hx+U08rw6kp9YcflNPK8UcMKt2am1V37veZZE3YDJp3UlPrDj8 pp5Xh1JT6w4/
KaeV4o4YVbs1Nqrv3e8yyJuwGTTupKfWHH5TTyvDqSn1hx+U08rxRwwq3Zqb VXfu95lkTdgM
mndSU+sOPymnleHUlPrDj8pp5XijhhVuzU2qu/d7zLIm7AZNO6kp9YcflNPK 8OpKfWHH5TTy
vFHDCrdmptVd+73mWRN2Ayad1JT6w4/KaeV4dSU+sOPymnleKOGFW7NTaq79 3vMsibsBk07q
Sn1hx+U08rw6kp9YcflNPK8UcMKt2am1V37veZZE3YDJp3UlPrDj8pp5Xh1J T6w4/KaeV4o4
YVbs1Nqrv3e8yyJuwGTTupKfWHH5TTyvDqSn1hx+U08rxRwwq3ZqbVXfu95l kTdgMmndSU+s
OPymnlePwNSNRma23NldV+nlzIEebZp5NNs25NPZtT6e3ZkybdRt1NTbly7N v9uXbnz58+3Z
s2f3Z82b+u3b6DHI/fMphVZu4nZGdPMPjgSqsdu20xiQ2FGW40gJiFdfeIVM 0iF5nAOeCwCa
CyH2tozLF0ljLodBbc+heg9Na4sHEyrVeEdCm7WuCL/8NQ/xFI2PJfXTj4js P1i0xMD2do+g
vubq/wBSU+sOPymnleHUlPrDj8pp5Xj5Ux6xSqAK9k0e17sdX+vkZFdvzl6i i5cXSxXGiW6e
KwQGrPVzYVRVUd7m2ru8/h+KO3cwSmd6+yAAPRkt4lyydZd4fP2awUZLWk5r qmx/LO8qsBMN
bZLMjyY4/ICCVd0AZWHZ6q1X1agTbFkUKiXdPOVkjcp3ndW7IRXIlp4wj9+m cyzMlfysEliS
K4ygOPVdoesIFhpAZ6iu016t2am1V37veZaIm7AZN9dnUlPrDj8pp5Xh1JT6 w4/KaeV4+ZO3
hMHXKiawFerQ2j7VFppf+t8BShuu+0MEg/d9Vhu34dYYFjOauyQuDMF7Bzv3 rbpxjJHeOWTu
4x0T+JLt5FjMMiRVDCEPx+123l0WuTOEdTNYvw+GcRR/u5aV7xC7PCYTGO6l nBkO+tm+JrR8
YlECNKiwv43tbTpaRdmS0RksEinxp+FZncUljWlhfRZVuzU2qu/d7zLIm7AZ N9RiYFHkZU8n
SNCgSmxGPjImQmKZhF9AqfRULcSx4Dhl5IdJiyu7oPibuenToMsy5ZrtzC4m hYua0yVSRvGq
s8+OyXGpedyLFonMYgUSbD/ZHvbjodLQZ7O4u7wGfXIgLvFEW3KpIAntsPpl L6I9pm9s7SM6
fXc2brqLS1NfL8qcmzjIrgObwOwUnWS7OvRNugLCBtYRw1B6sOUWb0gOqVKe +4RR/LC0KlSE
yZlsRw2squudwD9tqptAIJLByxA4clkaK6yynHYBpZgczKw9cICa5shB7IJ/ kQh3r+/VeYPr
adw9EkliojIUPhe/5kASE4O0QSJxqyOwgmyUQcQ0TdSnmMgkx7bnB/iuMyYG juQDAIIlW7NT
aq793vMsibsBk302JgUeRlTydI0KBKbEY+MiZCYpmEX0Cp9FQtxLHgOGXkh0 mLK7ug+Ju56d
OgyzLlmu3MLiaFi5rTJVJG8aqz0HUlPrDj8pp5Xj5k4MtTeyVS2DIhFN4HX+ SgyYbfh8TrbG
wKaQ7e94ZRx0o7vFpkmSNNGawGgVEaitsgDWtX6BpAh8Na4wlmU4SO3hJJFp 22Wq5S7F8BGQ
CII28c9uYkpZOsf13kCxG++aIts3IVURqpxNNnYQZ3IxfPyxiJ9GTIkm0abO J3ahKedQhcyg
CVvHe6ks22pHBtkBylJRhVuzU2qu/d7zLIm7AZN9NnUlPrDj8pp5XjH5HJca h3b/ALXTGICv
dRH6OWJS7RloMx92sWOPbXh8ln/E8qXsdH6/u1kXqZkRcOHFXYE16Byz9lX3 qHzJod43YBeh
pMmne/XhUjK2cf7vi20t2IVM1QALuOS3iptvZZcIK1x8UTrCphD7BX8ZmClE DM0OuEviclWO
1e1RgMmdhpHWk41tHdQL0zYdyVWfeWn0j2dj8F0XigEYR0PEB/ITPX//ABCY TCrCf8RBGNXN
cKkcGSMyJ9kCxUZCcK3hHB2AhJsiK7HZJZB7MIglRbGk2YTVbs1Nqrv3e8yy JuwGTfaWWAo8
eipMCnSFAaBJoPvImYhxYwi5GKlgqRtylnIRkmHnhiWND8PvrQsWNbyzOiNU 3OjcqUoVybXT
a+rpZvQdSU+sOPymnlePjzRLqGSPcYSLbSmm7gjCKUtIKi7Gti3uefJfI0mM Vaby70Vrk8op
BcG4NoI6N3+H5MTM6U4hqw5IGSs3SVAUhVdkPPEYALIGKMFm0HfJIv8AiOf4 hHhOsB3f+P8A
/wALjxXdo6sdjvAnxTwS9xndX4lu8/8A/wB53/fjvN7iu+LuJ/8As7we7/8A 7G4Vbs1Nqrv3
e8yyJuwGTfSYpfx5GVMwKsPUCU2Ix8mLB4OUugvoFT6KhbiJs5iTMw9qpMru 6D4m7noK1kzy
hR67cwuJoJoXRSlUkbPpLPQdSU+sOPymnlePkzFbpvbjLcOT+S3EIJdtGr3U FtlNia+MBBUc
R0N1PPs52H3UQoZMxu3MteSiRKyw/WWRCgre5yJr1DlrjSCYarMdl5wJym+R 1KA6fIX3lx9I
smCMT2O3ukP1qhsOILtCae20KT/u9JRFbDlUZR7ulpUjMZcLLzfRyOa+HBAI 6d1LFDipmhKr
kCuOg3ALUNk6Y8JIyL5NO1W7NTaq793vMsibsBk31mdSU+sOPymnleHUlPrD j8pp5Xj5U45s
nbEDja9s/PUm9xF2p3/w95vK6TSKljaGQSI42map26MhC2e8C0GeT4NmGzUX x/VV617Cx6RT
fJaidKnQC8QWXa04wLKRLFsiMTvs/TKxt2pzn2sUVvdy4fO4hch+7snEMpQR lB7KaFhY9rwa
bsLVDh9rtJpVLp9BJQQN8k2GnOHz+R601v14zZ4a1imAVmZPd6OnixcPqt2a m1V37veZZE3Y
DJvoN6kp9YcflNPK8OpKfWHH5TTyvHy5wVdaPVG7X3LjXVqxtICeY4Th+PRm TdWVjiMziPa1
yEK7i+/RiLqbJPDCqe5ErOPs0iQ2qRykWDa6PJM0YzGpgBcjztG3Q9HnL0Fe ZodJftPRSYpB
unYAdEh3xv13S2UPCrdxlkE2vmIskXdRvwfVKstjIdrIFwlPtf59cwuYksXr w+PYTvYVmMJz
2Hqk8OlsOyDGAMq3ZqbVXfu95lkTdgMm+mzqSn1hx+U08rw6kp9YcflNPK8c sSaSZl17cJhK
2ptMFcYJTTAJt9Y2yFgbQR14sU453tmzBLVZO6I6+HsiCZA6SJliRAHwobi2 7bFZPluRCemr
Kq3n0bOit8f+YO4xa93oxUvFnRZPO6gTysu3cEWuE1PlOxQBqXdCC4a0YpEV FjnW3FjAC05p
MiogHCTXBVkizWhQ1r1waVhnXOnRKzlLkNaIUq3ZqbVXfu95lkTdgMm+ozqS n1hx+U08rx58
mfx4LbkzwYnqATaFhAJiaN0JnQXYW5UVHpUzAoKMplzokSptcgNDYjHg4TZt LVzOJGVPrMPM
6ZY7uiFHr6I0hkKz5eVHDYZqJgk2rjcPtymILDWsgEfqdaA2KtZxzZSVmIIh YNECdywfa3fM
WsewmkOl27ycQkfDoyyg4ndBjlV9sMIegnf/AKnvBN36xGf/AKUZNEf3WksC 13D/AKQz6tyR
0YhKOolbWwi0+paz3ICioswbwJwYon1HNehKARolKUtYNd1sHNpdH6rdmptV d+73mWRN2Ayb
c4mfx4LbkzwYnqATaFhAJiaN0JnQXYW5UVHpUzAoKMplzokSptcgNDYjHg4T ZtLVzOJGVPrM
PM6ZY7uiFHr+g6kp9YcflNPK8fHmB2ee5Wq/QsSm224/BJs3zB/w7mjX6hwm wVHhkVthEhUQ
bq6aiufhmJXCHMs4ug+Jzie2DB2ZRUwziivAc3VeTR5oR6nUxtMWmVdX4nnL fOO8pxo1SlXn
gkZOcgBrfIrz4NqqC/CARaRtqYuc+0w7/wAR5OJAO9QH9VwVcdYoUmB4aOi4 g2RbIC1PoCbu
q3ZqbVXfu95lkTdgMm7W9SU+sOPymnleHUlPrDj8pp5Xj5sgVmbldlZTbt0E WVg1zYtrAYpz
tYMJiqJZCh6Qks302azDR3sx0WjNrZWk3ePmYs52sK6bSFcWvg5JkDSYJWqH bDwDbRSaTguD
9QJTj69K7cc23DmAZh8ZgmMyDf5qJ9ZE95rIvEykzcEWaswsDdbRnMkq28yJ NQ+HyJsnnVkK
PTchi8qtpoR1ALxMc/MEbTDZ+tLwq3ZqbVXfu95lkTdgMm+uxmfx4jcSxnHj 1A+u4EQJhM6a
2Z0F3RxCypYKjJ0jGSxChSa6kcIFQSaBximZnjSRuOuKlgyQ6SbM0PzWsVeg 6kp9YcflNPK8
c8WRSVJt5JE6zMzD7CbSLu4DJTc8eASZxkwVFCqLp5h7VpmzLTF8Ew93Zh/a 7zVvIkMNkykF
iRxsK3MEoOj8JvCmD0DPFvR/CrdmptVd+73mWRN2Ayad1JT6w4/KaeV4dSU+ sOPymnleKOGF
W7NTaq793vMsibsBk07qSn1hx+U08rw6kp9YcflNPK8UcMKt2am1V37veZZE 3YDJp3UlPrDj
8pp5Xh1JT6w4/KaeV4o4YVbs1Nqrv3e8yyJuwGTTupKfWHH5TTyvDqSn1hx+ U08rxRwwq3Zq
bVXfu95lkTdgMmndSU+sOPymnleHUlPrDj8pp5XijhhVuzU2qu/d7zLIm7AZ NO6kp9YcflNP
K8MUcMKt2am1V37veZZE3YDJtFKB5F2aAke1MoSaOnxpPs25ddFrKM+3P2LD f65tmfTXpcuz
Lty/27NmTbp7duzbs27f79uzNsy5d2uidvOt3tannGNMN33/AKf0n++aH/hQ XjeDFnnHS88Y
v2kmxRQDtkHgB2dgEMSyJuwGTTuidvOt3tannGHRO3nW72tTzjFHDFat2am1 V37veZZE3YDJ
p3RO3nW72tTzjDonbzrd7Wp5xijhhVuzU2qu/d7zLIm7AZNO6J2863e1qecY dE7edbva1POM
c7u+qTOP9qeqEPex2i7F9xnGdTgXGeHcZ7lezvXuH8X4X/mjv+4f0vCP+8nF PDZ/kjHSLHBf
Avx90T8e/PvltB6coPyDpV/oxf5tQ6bQesEaZTWRrw5B81T9fQ39GmUKKXW0 UusI6e96b6Bp
nQXUetq0RTr9GdpKXVl0F9F0h0kPVTz34fxirV/hrQfq3ntB+E7onbzrd7Wp 5xh0Tt51u9rU
84xwyG96JYdlmWQpMnKGh+Md3eKzBeyH1kuvOhEjW4i7dQ3Qs3sOpSEyprug dWDs0QEupUWQ
XdTW0K3bUVFQaKk5MUoZWkMQryuKp00grTf+zsXCRqBLnWwDLZq1X+HtY1oR bw2sl09AEhax
10bxQ1ULeKwFX1hljZXjjdQKN9/FX3KAobC5bUKml4mF11M81ygyrHXVEO9q 3ZqbVXfu95lt
FE3YDJvqs6J2863e1qecYx+GxSNR+RyyWCKBuaCCcZAbZSlJw/oRL+1B20RZ GkKN771VzKFq
Jk6vGUPx0M8MHUzQz6vZ3jOu36pA7vrq58kmC2V+pEtjr0ZE5FqAISbE3ih7 255IqqTQbAkn
90kbbrGXwLu6ghtu2CEEO/5f3kykNLu00+Tdx54hzQMmbsmiPtQLDfPwzvQJ 9nqPQq2Y8IQ+
B180pg3aEBnVe3lgNDmZSAq3jsZ0HPUchCdmkMgAoSGj8Kqd4aHN6mPniqp4 4yboQOTa2lIc
dak0teSGFW7NTaq793vMsibsBk3c3onbzrd7Wp5xh0Tt51u9rU84x8+VcrO3 zHt23u3GMVOx
+zt0LF1gimfxlC21kzn5U4VgEYGgdHJZHLbpYXejVVFj+YBmVpviLRPZu2WL GyCS3GSdNQK1
N1G5AfHQNj+ALp2VnKPZrt5qFA+2QTL139yo3hlcXlXN7lIUMuNx4z3H5OWt QnYoHnmMGjXh
9gaLFSIpUwongJlFZLkx8JiyVlRjG0gSHCRQq3ZqbVXfu95lkTdgMm+k3onb zrd7Wp5xh0Tt
51u9rU84x8+TnvL7oaUU1MOkOpWDRd95BD9a58ronVQrKytuqgKzbdDdrVzf I9mvR0bMIlNu
iBnCd4+1ujVIIKspu3ZiqD3BcsjzXaJVTscY5Al2/V0ImH5paihND7ILU6mA /Cbg34GarStN
0NAQqzVfqpaMAfFNCAa3jHaNgHyljtWvCyySY5mqzDdFWvXd5k6SgYUimZHU lrWq3ZqbVXfu
95lkTdgMm7m9E7edbva1POMOidvOt3tannGKOGFW7NTaq793vMsibsBk07on bzrd7Wp5xh0T
t51u9rU84xRwwq3ZqbVXfu95lkTdgMmndE7edbva1POMOidvOt3tannGKOGF W7NTaq793vMs
ibsBk07onbzrd7Wp5xh0Tt51u9rU84xRwwq3ZqbVXfu95lkTdgMmndE7edbv a1POMOidvOt3
tannGKOGFW7NTaq793vMsibsBk07onbzrd7Wp5xh0Tt51u9rU84xRwwq3Zqb VXfu95lkTdgM
mndE7edbva1POMOidvOt3tannGKOGFW7NTaq793vMsibsBk07onbzrd7Wp5x h0Tt51u9rU84
xRwwq3ZqbVXfu95lkTdgMmndE7edbva1POMOidvOt3tannGKOGFW7NTaq793 vMsibsBk07on
bzrd7Wp5xh0Tt51u9rU84xRwwq3ZqbVXfu95lkTdgMmndE7edbva1POMOidv Ot3tannGKOGF
W7NTaq793vMsibsBk07onbzrd7Wp5xh0Tt51u9rU84xRwwq3ZqbVXfu95lkT dgMmndE7edbv
a1POMOidvOt3tannGKOGFW7NTaq793vMsibsBk07onbzrd7Wp5xh0Tt51u9r U84xRwwq3Zqb
VXfu95lkTdgMmndE7edbva1POMOidvOt3tannGKOGFW7NTaq793vMsibsBk0 7onbzrd7Wp5x
h0Tt51u9rU84xRwwq3ZqbVXfu95lkTdgMmndE7edbva1POMfgatNz2tbbt01 iDLp7UCPbky5
21RqZ8uTan0/7cufPlddPLnzbMv9NmbPs09PZm27Nu3Zky7Nv9uz0GNL7oTF KcHVpZS6FFUf
t0mlE30ugsZeJSDyOQAQd8TdtoGre8lL6ECchRSQFPZYflZ1Imxkb5FEevvD Y36Cp30kWZTp
6tCm7WuCL/8ADUP8RSNjyX104+I7D9YtMTA9naPoL7m2/wCidvOt3tannGHR O3nW72tTzjHL
GutzZ9J7tO9JZf0YfJXeKx+1aaRpZjYFNI3bpDKonB905MkavITHJRK8sqYv H04TvICWPzkZ
fZClhxKiqLWORmAsBWglXxo18wd1BNZVZTeDjtjDpvH2k2n6sE0TWYtYmlcU Iq2lUqbuX/hR
TohbxlC8Or87ox9G7vyxOzJXR8eXFO3aabRXOripyaqzWvVuzU2qu/d7zLRE 3YDJvqM6J286
3e1qecYdE7edbva1POMUcMKt2am1V37veZZE3YDJp3RO3nW72tTzjDonbzrd 7Wp5xijhhVuz
U2qu/d7zLIm7AZNO6J2863e1qecYdE7edbva1POMUcMKt2am1V37veZZE3YD JsXGUUjUgEcT
lhcgbncgg6QHKUotcP6ESDsudu8WSXCjg+9VbChEie+sRlMEijPDCJM7s+l2 i4zoN+kQNDE6
tiWYpGpxiyS4UlJA3FEZTBH5lFsijP8AQiZO0QJIA45CZcxcZHShoIGji4+7 uDfxNidWx4Qd
Y602OCJbpaCnSyjhhVuzU2qu/d7zLIm7AZNO6J2863e1qecYdE7edbva1POM UcMKt2am1V37
veZZE3YDJp3RO3nW72tTzjGP3KKRp3lMNmtwQNyiTY/j+S4tESb+hFpcIBJg I4nLJFYuDaBR
pD6/tEQQdFrhxNzalrw0dl+qsTg2InsiTO+UcMKt2am1V37veZZE3YDJp3RO 3nW72tTzjDon
bzrd7Wp5xijhhVuzU2qu/d7zLIm7AZNO6J2863e1qecYdE7edbva1POMUcMK t2am1V37veZZ
E3YDJp3RO3nW72tTzjDonbzrd7Wp5xijhhVuzU2qu/d7zLIm7AZNO6J2863e 1qecYx+fxSNS
f2K1DVA3Oa2N5AHJSAHlHsIh8jDTsX66mRvo4TDhQ0EDRxcfdyMCNWxE5aTP IkWGZ/Eh+3ks
ZSAaib9lHDCrdmptVd+73mWRN2Ayad0Tt51u9rU84w6J2863e1qecYo4YVbs 1Nqrv3e8yyJu
wGTTuidvOt3tannGHRO3nW72tTzjFHDCrdmptVd+73mWRN2AybFw7FI0Knci yczIG7JIEr9k
dA5LHDYRPjw4s4Cz67MEiLYpfChx7Kx+K8RJiBijoTysYI3HZ9KUjph3JIEr ySTFWQOidvOt
3tannGKOGFW7NTaq793vMsibsBk07onbzrd7Wp5xh0Tt51u9rU84xRwwq3Zq bVXfu95lkTdg
MmndE7edbva1POMOidvOt3tannGKOGFW7NTaq793vMsibsBk07onbzrd7Wp5 xh0Tt51u9rU8
4xRwwq3ZqbVXfu95lkTdgMmndE7edbva1POMOidvOt3tannGKOGFW7NTaq79 3vMsibsBk07o
nbzrd7Wp5xh0Tt51u9rU84xRwwq3ZqbVXfu95lkTdgMmndE7edbva1POMMUc MKt2am1V37ve
ZZE3YDJuRVX7PCEKxMzCz+wEjqsX5W4g0lDPkbMybImVDQ+3ZNHU2rXBJq9P l1WrWz5tmXTz
afR6ml/TPtzf35cuw3j9jT9HHPy2DnWOTiP/APYAh/8A2iwf/uWXH+sb1Ho5 FVJxR59UPPiJ
DrzgHb9Ipkws+pPabofM+s868QA7AH6g5t1h8fsafo45+Wwc6w8fsafo45+W wc6xyex64BzN
+qZtDY8BT1JLK5tpzquUeCzkPMBicagxHBidMQoGFROWR+zipQ+lIowtzW8O EiADNq51GozF
Za1BrsR7dW7/AEZR3HXny/SCHXS8QCmXiHREgCrEXiAYCIiTCI7RULPk9jov IMP+bW6Z+P2N
P0cc/LYOdYeP2NP0cc/LYOdY5yl74Nao1pajHTme6qOyowYB5UrnyUoKlXMb jriNHhEvShae
ILW2lSjKtgew0Y1nt8eMgC+a6J2TMg84PrI6GzemxxiqXR1HVcD4epLoPYHy k69ZZEgJmESD
C3sMbOwSVngYAuPXuxIxi3UHxowX2q7dd1Dz227P9k+2PAg/tV2V4jxjs12h 4jxfs/xf/qnB
uucO4j/z3Vus/wDq49B4/Y0/Rxz8tg51jm92Ha+5jva7VZ+I9BxbgHV9LgHD Ok6j2O671HiX
exxn/o3DuucL7Yf9teFcQ/ztjH+OB+AvjH4K+P8A5/8A6WWp5+R9KGidIdYo PUesPrVlR0kh
pI/tqPTurL1by1VTnal7rlEo2khWbzpvofpnoPqPzRJxzrlGClGgqVdFxzR0 0T+L8LyNY5HQ
0kDpiqVUg9o7xOcmUOezuUpSeacRw7ybOMfuETzXIrnC8NrzuYIsd2diHXWN JSLlSXVIJAj9
zHxcZYnANLHB3HFrOOsTYpbdVE0N+gn9+XWkrDIDwOkR7AegbEAh0HZN9Lgm PiR4F+rHcdSk
m7OubyoWrWTq8mw/Eki6HDddN0R3F0dF2n/aQBIy4NnzFl28tdh1ZPrq1Vpk QmjiGmi0uk3m
qZjnFsRuRfVJhk5WXaZyZOdc9KugdHZUVw+WA4mXhFiZgNtr8QxwhfYmZ3l4 O2OM9hyPVk+u
Q05ywdznIk+PpI7x1GbFE7kPwrGUKoZZnOWQGLwhWwLBOJHGZwmO2k5MWxr1 tcuk6eiUSjBa
9uDggmQ9aGpS596KBRTEuqLvB214gpgOiZimCYwP7oePbc2jrVLIh0R7BA2+ tn/MG72t9pKw
tB25yk1QHoNkmvfHeMyK3hMfIjt37UM8WjpNxMuTKNIgX9oh+DoUYn3rThq8 XZ4fi1scOsIo
/E9Bo8A2SZQ5kO4tlJmpxHDRJsHR+3xPCkitkLw2gO4fixoZ30dao0i0uSpd Igj+P2wfKCZi
bw0TcGgcRM5E+tiZt0kTu4aCjgckt7OxBKievwhX6JFs2j/e93pIiSyJiPxW P92Q5Uw1b+wB
+2VhKS0+7SCVxI51VvaKKYy7PkY+asuh2gbETESEHkYPumdyIyWcm/OziWev bV3UEEDah0Wv
I5JuiRy7Uao8rx7BLpHcawzJKl17am80rU6ElFC+XZUc5CMEcZx/EZxp5BJO pdQokYVtIjEg
/ugAh3SMSUR2D96H7pMDD6TWqSd+k/qQB/3X+8m7/lj/ALuQ9FSYFOqJQyaB JpMDzYUxDiyv
0FEYqWT6RtylnIZxJh54bVjQ/TA+tCxY1vMluiNUaOjcqUoVz1rptfV0s3oN CTKHJngRIk1O
I4TkEfx/HUTgT7oQvDek8BMWQ+djspRJGgi56aXKtG4/i6TRATkWOg1m10Q4 EnYuOlwy2thA
yNrgm+Zz/EmL3V2HUbRDDujkdK7kUUEEXFZUbRdHCmRyOcd3RHwO8rXeWaoi 9i0rQ2il4Bx/
yPjjEUeaSbVQSAz5I2lZmdIvlVqyId7wc0CHnLFOevvHbCM5aeDxqJiLxPso RW1NwECV7kde
8DpzBlS5cmR666N2phlPoapPWkCFUhHkkZicTFJqMUeqZXjqVCtNcvAaNsXY HShARqe02iH7
3bZZYrFO67z/APyvb6Hx2TKHCDxIpEJ04jgXIJgkARliW30dheG2R4lGU4/O 9eUgKS5Fc21K
mWm0gBMmqVMiiJkTa7mRjZ2o1y5mckRBq6jhmF0mUOkA7HZSPacRwbSaISBo SwJyKXQvDZId
i8ppmeOh1NJY6XPKVaQMkgJx+H4kYtAybXBMR6TPF0dNmm5ZUQSM6DZxorzZ YqsCYyQ26UFl
sYBEcdgkK5/kt7bmY71iqR4JgidmsFcopRo3B3Fy0JaJdeGCWUZC9om4ZeWY N0Q50kdSWHSG
HttcZHejKM8IuqLkRIiS4OwwPakPqDaLO2H0hUrPj6O/Q/X6iPebrD4/Y0/R xz8tg51h4/Y0
/Rxz8tg51jk9hi3yqj6xfzJ8LmJugr35O4HNusPj9jT9HHPy2DnWHj9jT9HH Py2DnWOT2GHy
qj6xfzJ8LmJugr35O4HNusPj9jT9HHPy2DnWHj9jT9HHPy2DnWOT2GHyqj6x fzJ8LmJugr35
O4HNusPj9jT9HHPy2DnWHj9jT9HHPy2DnWOT2GHyqj6xfzJ8LmJugr35O4HN usPj9jT9HHPy
2DnWHj9jT9HHPy2DnWOT2GHyqj6xfzJ8LmJugr35O4HNusPj9jT9HHPy2DnW Hj9jT9HHPy2D
nWOT2GHyqj6xfzJ8LmJugr35O4HNusPj9jT9HHPy2DnWHj9jT9HHPy2DnWOT 2GHyqj6xfzJ8
LmJugr35O4HNusPj9jT9HHPy2DnWHj9jT9HHPy2DnWOT2GHyqj6xfzJ8LmJu gr35O4HNusPj
9jT9HHPy2DnWHj9jT9HHPy2DnWOT2GHyqj6xfzJ8LmJugr35O4HNusPj9jT9 HHPy2DnWHj9j
T9HHPy2DnWOT2GHyqj6xfzJ8LmJugr35O4HNusPj9jT9HHPy2DnWHj9jT9HH Py2DnWOT2GHy
qj6xfzJ8LmJugr35O4HNusPj9jT9HHPy2DnWHj9jT9HHPy2DnWOT2GHyqj6x fzJ8LmJugr35
O4HNusPj9jT9HHPy2DnWHj9jT9HHPy2DnWOT2GHyqj6xfzJ8LmJugr35O4HN usPj9jT9HHPy
2DnWHj9jT9HHPy2DnWOT2GHyqj6xfzJ8LmJugr35O4HNusPj9jT9HHPy2DnW Hj9jT9HHPy2D
nWOT2GHyqj6xfzJ8LmJugr35O4HNusPj9jT9HHPy2DnWHj9jT9HHPy2DnWOT 2GHyqj6xfzJ8
LmJugr35O4HNusPj9jT9HHPy2DnWJhvbGFFHTR8fRc5GqUOLR1bsRvjEJvzJ kM4pMWkpDCxu
RPS7W09F5EDwTYTQNeuraLqOkzGyELVrIHlrRKk/LHGGt4cUGwmxHCiPTR3j snJbVQDGeQ0Y
GsQeX5gYZeuJFUVGCtkbz0ZMw/Ud9QPM35K2678LPiNCs19FdsQauum0duXA /wBG0d1ZyL65
AQpD5/EnH8D9HsH7MC2J7fr9QGsFnyDY7+86OwwtD17dR5Skyh04s76OzXTi OJgHyiQGyWCZ
ilKF4bkBnIpTZARvi1mkt9bCxK7oneQGiMmhqjpsMnDQUEaAEbG8RSuWkPok zfpXwKeKcRW4
trxGFXRiOHdmH9QTZ3QCjCLA9xaRXVFYkBdUZbVw9sblKEf1AmAYJDtRmS6u k3ZxWFYkHsyb
a0RwHI2b52HSxBLAs8B9fZWlF3MBhrdw03dp3NlcTR4syxwfwJfo+dWibtFl jRoAlrRHL7Tt
2IU5nHKGBdXMwkYIhJ8yzQjSRHKepAJvBzQ3ec0U5K+8CsI8FoGPBQmXvE+x fFbq3HoJYSR0
DwRHM51LiOZGXqQ3VaZk+vqjFaT0VVkeeOWJuMVeo+yEpii3UKJ2FVcHSLsC XCS87CI/CkYm
2FnaY6MbGVqnboukQBjAwgfE4yb6nvH7Gn6OOflsHOsPH7Gn6OOflsHOsfMf Cl4iqSjQvFze
HRKLh+IRI0MZ4lRZOjc5RnHDcBz9cCvTxpIXUhAAQgIOukFV8po1vDuMhoqj j18OnQzIQ4gA
Q4YmPHYtvDZSMyVhiZlrY0IJ0IZECRhGOyAZ2KhqONMQPIms/J7QVZyqaaVx 5Lqt3T56nSIw
LWlpr05BOpqvAprNUoubplMx8MdRocHTWr/jMHbBF4iHYKmN3Z2xAtFitUt/ C7Z23f3c/wDL
fVp4/Y0/Rxz8tg51h4/Y0/Rxz8tg51j5NDS3chTbEjA5R49FtbiB/Ld3fKIg Rg6yMpGcSar9
8bEaEJCOgZo5Yh4jHwuW9AfSnj+XBI2yGI+DlTPHmswzTJo+4mA7t9a97wM7 HNA/IXeBRLaE
BHjJOdNxbpveVZU6wTQmZVMM2GKs4wpg9vaG+W3B3cAx4hmKMpivDjhudSfS N5tihSMNWQwj
qND1tIhAPB78BBEdE9iRIg8IHSAtNkbIKxSTvbCFsge9f9JFvqe8fsafo45+ Wwc6w8fsafo4
5+Wwc6x8jtlboSzlrXZR51o8aIzGCVo3g8DwVKMeTcSvMsoZZrCBWoVaBiSC OaJo/b42aHFv
rIekTCQh8tHxKwEuuBtmRn1dB0eSUT6Tz9KXcbBM1TXwLtR3PxJI8pdmeJ8E 7Rd3wc8lnAuM
8Pd+EcX4Rw/ifCnPqHWOtcPW9F1bVs70fRXtIhReDjoeJJcFhBPYUgewRsFo esugqviFjsSS
Prd+Zu3fj9jT9HHPy2DnWHj9jT9HHPy2DnWPl4TTNI8CyOP1g0VbvYOZ3yO6 9pmYlkk50o7j
g3mCTdK88oy0cvipsjuVD2I2h5YqvGzgzCY9rSpH43qqYoh+MI4iEGYSIuW4 Oj3eNscEA+kM
WGQcXk13lu3bw5ZNK0tRmhuYG5ou3ZSP2gOHltq7F1tk0mEgtED6YqHEKaLm gV1BVoZ2lq0m
ha0OwoN16jRQYPKLiAe0rXCHXnS46XYhGBMXvoey3sIhNap9A6eyf1+tpHP/ AC318eP2NP0c
c/LYOdYeP2NP0cc/LYOdY+aXJZYllJ0oRIkVPrQPRFPE4y3H8hCmsoiaUH4m RjNfLLlQ3kbZ
Xh6VpVittaGc0hna6vaILeiZ+dVmdgaXArCs48dgxRJhWzBieTs868hNMtgU flUtz9WeC2zq
EEuMEm5jABjI7e7u3HWR+JLN6ktv7JBExF/XzAdiOCWIObu7lKwlUgNAtKUv z1CixA06QYvA
AxTgQXXHtL+HY7+N122B0jADsLRWvyd9ZkTuJ8A304eP2NP0cc/LYOdYeP2N P0cc/LYOdY+W
HWlOZdKisk2EM5B41LdXJbtzIjk6BzTrx6KyOK1PslOoy9xRqhei9ELY3iUl wkCu8TM6g31p
VcY4cXwemLNqG8tx8wFGr09xZzo2jvQ/GuIuuPiLyUYPxgDBMiILpiASLbCf oKz4+jvaR2H6
f8t1h8fsafo45+Wwc6w8fsafo45+Wwc6xyewxf5VR9Yv5k+FzE3Qivfk7gc2 6w+P2NP0cc/L
YOdYeP2NP0cc/LYOdY5PYYfKqPrF/MnwuYm6Cvfk7gc26w+P2NP0cc/LYOdY eP2NP0cc/LYO
dY5PYYfKqPrF/MnwuYm6Cvfk7gc26w+P2NP0cc/LYOdYeP2NP0cc/LYOdY5P YYfKqPrF/Mnw
uYm6Cvfk7gc26w+P2NP0cc/LYOdYeP2NP0cc/LYOdY5PYYfKqPrF/MnwuYm6 Cvfk7gc26w+P
2NP0cc/LYOdYeP2NP0cc/LYOdY5PYYfKqPrF/MnwuYm6Cvfk7gc26w+P2NP0 cc/LYOdYeP2N
P0cc/LYOdY5PYYfKqPrF/MnwuYm6Cvfk7gc26w+P2NP0cc/LYOdYeP2NP0cc /LYOdY5PYYfK
qPrF/MnwuYm6Cvfk7gc26w+P2NP0cc/LYOdYeP2NP0cc/LYOdY5PYYfKqPrF /MnwuYm6Cvfk
7gc26w+P2NP0cc/LYOdYeP2NP0cc/LYOdY5PYYfKqPrF/MnwuYm6Cvfk7gc2 6w+P2NP0cc/L
YOdYeP2NP0cc/LYOdY5PYYfKqPrF/MnwuYm6Cvfk7gc26w+P2NP0cc/LYOdY eP2NP0cc/LYO
dY5PYYfKqPrF/MnwuYm6Cvfk7gc26w+P2NP0cc/LYOdYY5PYYfKqPrF/Mnwu Ym6Cvfk7gc2z
9DtbJCmKPh0mE1A3pNyFraGLWyvDkrRqdq1KyNjhqZtPSTtqzJm0Nug6JtmX U26uXNt1Nmrl
26ezZly5s+T/AAKTV50G99cuRY2j3ff+n9J/vmh/4UF43gxqxTKSmNBxWDrs Q6NBMwEeyJcJ
P/Jjb4QzlNwkkuxJ7bTm3HzwKTV50G99cuRY/tpUcnDQyKNidxCUuso0egyr kr85JXZDs262
jq59ZmeE7FpurEs19PSzoFS9lWIFypnWOjGpUarM8OqFZ19wxbr9L1x2aX0h /wDTu9fCEVSf
d9Xs24+6FGJz0cqjLrPg265VGjs0dmUhNCUmyo82VRoKNixp2ETa6bGV0/po Zke14aNiJ1zN
Sx0Zsyza0vDqiWf88Ck1edBvfXLkWOweGHX6Zrjs0rez/wCndzZCAimBAOgC QJA9242+AKYO
t9b68I//AOVxHqXa4i4PxfqHCeP8C4XwXtJwb/ofaXh/HuBf9E4jwr/k8fv8 Ck1edBvfXLkW
PF6+8KQJ7JV6rqSmFy0BTPMFP0vvRHH1VCx8iYILuv1ZyDYaHFe2kx2JlcUq U9knDMcTcomt
3CK5qgVlDp4MUJaft2sk66xIWOJ7FMZHTxookzsaR6FljonbdPX0W5O4kY22 vC7RQaKpSsU6
SLSUrNXTS6ahWq18mhl08usp19TZm1c2CjpDo0Uk0JKh0TrlNWplN6nQqNRj SukKQHTSKZSa
ujJdYpa9W7XUlTTVV0XdN97RdhkUUepJSCyiq1Si4ijWrKKVVHTjVop6T71W k5pPaCbsHHYn
RdES3E1k3QyoekfWlRqaR3RJ8zu/kje1qZXlJyjgZLy3SctEuPAaHHNYsiIA kQuyPxZtLJDC
AcfNibVPJH131+X68kHeoQ+SbdyigaUb+0IkqvKMPzRosicGUWWsaujgHRtr 8yEwtrQ9Gq4v
UgUGO8cvo2POMRv8MjgG/Q7qsbVkixyENBAl0tLppcu6Cmp7vGDOkj8cNM8i M0ivmuuKJMVR
u3saWP3KNWrNpaesjjyQNZ2VO6qSUfR6e1O26aPTbtXNm1VOZTkyaPuKd2g1 7VghqYqgxoCV
AZI2qA6iFhONaQGp0ydgI+P0r0kfVAcD6+ns10R+mRaiDUZNu3Q1m/U1sqzX yKcuTR+B34ko
z/ST/Q7tLB6QSGm/R+pPB10PIprxrzRRRyXkX3HiHVSTEuw0nS672q3/AEz+ MaP8E0T/AKiq
9BqOfBlOXfo1F6b6/wBHPOKrpU9fox9MUJ2nHpJx5ynUZZE1lDcH4QqDUvpq PcwADdDKoyfm
YsFGkd2mDK0HrJkNSiV5SPzZ7RyYsjFWYaxoZHqwmJ5Ad1uhC8UMTW/nLqRP wuIAAyECrkyh
7bosePJNG5MH2BhyizCKjrIMZY7CI0yjjRMsxtrDlbIyRhjdG5plaEbvot+y cY+b45j1CEWP
2J/EGJowMMSsMmoNAXZMiHrFda6EbUXixgluUmvi4+RSA1R0jTd81ToO/seH ccKyZPr9rLi2
LrJGTj/aiEXDT7OsR67navpeJNgivH2gneWDhDLW99n1LMsjmdeZXHzKvhWQ B2pAuQmrSaSy
3aEZzpof8Mw3AR6mhmLk8W2jlIgGWPeaWhkMTiRqLWWQjQqkFmB3NtcNQXBB gc2fXKRrHbP/
AKKEgD/4/qAAbrPoIcRVuSPmezbMrHuMRNhcdF70xtG/EGkWpzrOTHVhLAyO VLCpGVVzNETo
6FEgFJMQPHUSCpVedZChdXJY3I26OEbAmR6Q+/FbW/etL9zXlNHkiJnBvRsJ aVluuavptHM7
zhEp2qeVgJHMbOaLQOYtfQ4tbRJ8Eohi1MRADY8owQjeY+ECx9G3AtYW980N zI/ubKYuCRg3
mwjIFyp6nLvekKNYwr3T0j3fB22QTCbxG8fyQYHkQ7ym2Y0tH+xkmyQDNmZU +SkMGMgM8tAj
7G0OkAKOGkkaWAKm71lUQVYpgUyPElgJzIC+P923Fto7MgDTXEbiyN7Y3kjq rTiPMRqHk0yx
LJq3iq21sKn5I5wFBB7Gw0OSkja2ZwzEAichwY63SIQ03YWGFShAkdh/h+OJ gyrckfM9m35o
83XZHE2kSJY1HIvCm8sd2F7d2dgeXdCw5FgtHAJEQ5osjBkZ+DC7QyRxGQML NrAMoWhhSo2D
RUaTblcFbisWZE8Ck1edBvfXLkWPCBv/ABBW7tNhyWSxuO+rj8dx+2ykKOHe dV1+72QQglON
IUFn3qoXYgoW1Z7RSbOEHDPDN4Ympm8CfefxmQ28NH4lsO6w51+i0yI5ABGI uLInkCDiB34n
xCLZScosdzsX6g8ODYl464QpJcwRko42iRJiJs7MyKRdEzu7foPPCCDSdWJs sKdSwIBWAkE0
QJnsT+pjHxN0Iqk+76vZty88Ck1edBvfXLkWHgUmrzoN765cix2DwxPX6Xrj s0uHzE3QVSfd
9Xs24+eBSavOg3vrlyLDwKTV50G99cuRY7B4YdfpeuOzS4fMTdBVJ931ezbj 54FJq86De+uX
IsPApNXnQb31y5FjsHhh1+l647NLh8xN0FUn3fV7NuPngUmrzoN765ciw8Ck 1edBvfXLkWOw
eGHX6Xrjs0uHzE3QVSfd9Xs24+eBSavOg3vrlyLDwKTV50G99cuRY7B4Ydfp euOzS4fMTdBV
J931ezbj54FJq86De+uXIsPApNXnQb31y5FjsHhh1+l647NLh8xN0FUn3fV7 NuPngUmrzoN7
65ciw8Ck1edBvfXLkWOweGHX6Xrjs0uHzE3QVSfd9Xs24+eBSavOg3vrlyLD wKTV50G99cuR
Y7B4YdfpeuOzS4fMTdBVJ931ezbj54FJq86De+uXIsPApNXnQb31y5FjsHhh 1+l647NLh8xN
0FUn3fV7NuPngUmrzoN765ciw8Ck1edBvfXLkWOweGHX6Xrjs0uHzE3QVSfd 9Xs24+eBSavO
g3vrlyLDwKTV50G99cuRY7B4YdfpeuOzS4fMTdBVJ931ezbj54FJq86De+uX IsPApNXnQb31
y5FjsHhh1+l647NLh8xN0FUn3fV7NuPngUmrzoN765ciw8Ck1edBvfXLkWOw eGHX6Xrjs0uH
zE3QVSfd9Xs24+eBSavOg3vrlyLDwKTV50G99cuRY7B4YdfpeuOzS4fMTdBV J931ezbj54FJ
q86De+uXIsPApNXnQb31y5FjsHhh1+l647NLh8xN0FUn3fV7NuPngUmrzoN7 65ciw8Ck1edB
vfXLkWOweGHX6Xrjs0uHzE3QVSfd9Xs24+eBSavOg3vrlyLHm7Abt0nskiM2 MwyMi0HMjZrP
UWk0yMfx8ToHAakBqk0EeW0sj7UHi0afh0pYR59Rrh4iRKkzg26eTYq1U+3V 09XtPjQ+/lh5
Cq1T9XL8WbR/TNtOT6jxi3LSaI5Mn5uaG6frSwfAZOQJoPhkoC5Wl0gHRaTH p9E44j4lbioy
Km5mYGnKuUrsjcrwvU2lFZyKsf2SztqaUCC8hpAirgQYCMROEGkJOAGA/wC5 09r3aA9D6tzk
Tbmdr0xxmFXMOBjBoZy0mOtfNJEjSNKDyXFRhFZZBxE6ScSyNqlBJLvX4bNn 2LsqGUnYwbkI
JkHxhvRpGgPEUrHiUu3FRBqCpxkjUgRs0rlvd5w2XpesBcObyoR7uHEz2snZ Uq1rAAsyBHRj
cpy6MbO6yZo4683SYVNxP2nFnl/FXzoMEWTtcat0LwwPSHD7rYOxw/YSaw+Y ZJoNaqq0exLA
VZiqC42O282phOFlNlkTiYCWUZsDmgGSvEs1+C3KMyp8mHSdV+nF4kB2SyAe 3dcarNzkHWGZ
iCwZtCkP6dirhzRWaKBWIIarjXgkKpb0A6ZjGLputQYSs8j+wWhWXtVxEK8k No5bX68LGDxm
jkcUnkSBJVc0ukEQL7sv4SIIsAMCEwRYIREDDs7BBVuyPme8ZzbnNAe5PdoU j18DnPaDSc7y
CJO4hMD6dEpqWN0ksxJJs3TA+jrowSCqPlK4S2m9jJe0kOgakJ4dvAqRI2eU JGk53bdpKrrh
W5RQAZs3yQ1pVb+etLuPPbYXSZZaxsxPyBYJiEygg7opHCWi8219Boaxiwcx o9Bg082VhzLD
he96zbqvqFmc23YOw29y0I8gK1UlCFeJgCVMZj+8LBq4S/NaGGniAp8s/QcL s6/l0bN41D9i
yawbOPrtSpc3lCV8kyOYWH34Ljp1QJzZgNiyOmIp9BYTfS1iqS8AYnaQMkCv sgEEf5ZekeNp
SlGlg+dwdESw7OwYfkB9Y8ttVfiA7Td18gkzZG9GVNs5sQM4+3sxNGA/IB7G ISbBS6QA6A+7
ByGj+yR/DCHYauIN/bEksq3LbDb2/iet9W1Fe9xiJvwqOBesNo2cfExKv4Kw 6IdYSwIC4oxW
rLiYPcANeq/g5SPEDh3aEB0/kzOucnRW4rCrKPFD2sdCANDnJh9a7bmdrfGZ +YHQOBlTQTiV
mAV8Sd40jaHXhW4R2gkyxjX06bV0VKbvEN2xC99eR6ydxEeg4aCrBho1NZBq ZtsNvctCPICt
VJQhXiYAlTGY/vCwauEvzWhhp4gKfLP0HC7Ov5dGzeNQ/YsmsGzj67UqXN5Q lfJMjmFh9+C4
6dUCc2YDYsjpiKdn2y/aFzmyLa0bayWAbrGm0ft8yyPCLmZU2THdcoJe5dfY aH5ulLJltpqj
8gR+5kAuQOzhkqm/WRMQVnTMSCTRIJM5CjESNXW6R33bRA/sULREGB/Z9kRG EzGUFW5Iz/ee
7eyPbKxuTInuGcqNmk5skhajljvULbQvry3kkyThkBGFmtCdyo+kzeARapLn aP4wLUEfysQR
atlKMWIMO35mdjVwyubN3iljYs3Lf93rJhYwvYsUoYvJRglaHJgIxx/V6zyw v7C8o9Zud2R7
aHEbUt7q0OrepUIXJtXJ9dGuR6+slVaOroaufJm17qvvI7jSzVWG7VmhXD70 mk4g3YwyRRZm
3aF5aoNwo430tdWmIitTHFibB2QI47s4PgMdyTJyQfLIVE3MVcCrNGMkOrzp BLm3Bkg7/wBh
t4lHtZp9IIZM0RAYlL0P07Y4SiYTZ4zDSqU5ltSaXTaGAGGZnmywsZw2qIH0 bqOWuLMEyHkh
bQSOIumGAeSZ0lacY/h4Rl2mUl0QdUAEADBJG2EzVxP17ZlhTcPaD5nvS2xu czLuUyhQKtLb
JxCjkiQGYSj6PtKb9OVpeBJlWisMuMp6UTPSiRBAiRFrJLacSmA/YJXlMCew pxmDXO5F0Xlp
Zo/LtONWTOMVbsA0hYJQx7HuUdQDCB3LX/Jkf5KkE8flr8eF76emD29mB72m MCF3ITAmfn5y
cn5+clmssctbZs1suhl0dHT2ogK8Rocytd0enKECCAYbqoQCa1ZOZ+UwEwR7 Gg+upfUSyx1F
87vbXY85d9KYI6d54kF4KT4KDtSr7fGYs16SGZHwkblywhxBaneGzYJV/L5r gevsgR5H7bIF
Xo6GZvtFAUuq3gteLA2/r9XV51413fgm6x/dqQO78akCWXB0HZNaqyHZadjM Rpa/iNiI/ldS
bCUO0ykuwIUAIEI1SMYWEgmriYkRNtptNsIRVOS9Xs2xBIm6lKJUKooNDPVR 65BCRaoOo41h
6aZeB25pKlTdqMil0eGAGchwfNOnH1TuM6qE3ayNuzipMYi+ZHtHzQsbXmQy boZUPSPrSo1N
I7ok+Z3fyRva1Mryk5RwMl5bpOWiXHgNDjmsWREASIXZH4s2lkhhAOPmxNqn kj676/L9eSDv
UId9Ytmy0+lXFimNyB/GEQPkgOfTBcW1tkXduS6gizQSuAtp8CrxvApxd1rv IDRJrRpurn3t
zTXQcIoTfHA4Au0ZAKhgpOOz8KTvGdgxVwLYydCDXTMZAqEyoaOQCQohkwDK krc1PuwZkmIJ
dFgaVo0IHAWIRc4Y2Y9DBxxIo9MQmQ2FM5BJoKv7vPXaTGNYCYgxqkYxAABj VxjAAR7YWDsE
FW5I+Z7NuE/+CmUM0V9xwKQox+KCaW+82WmEtlaXpkeZHbnEj7eHgDnJJcIi 9S1iUzm6NHlm
9hdEpUKyOCFMyjS4XRFMtuUhs22vgUmrzoN765cixkSQraHbPNk9viAm7Nwl XKwFDqM6wnsj
xnM3g7sdcOXarvMhGT+m1zENc9GPxSErUVyBoXMRuSRZUCHZnao2lWA7GtgD AIy8YgZt504m
dlYIJUERWfEqXyDSCzVig0qSw2Kzg42sbk837vQVgKZoUiKsD9YK4bYPtgHY Iof3UQkqIIaK
mwVldvfZGjnRcQAk2RkFNpTv7qsLAIBNIAAdgACcABbYIC0sqnD2j1ezua34 FJq86De+uXIs
PApNXnQb31y5FjaRmt3kn9uLAerQnMA5MmiPpnRif7e0ivnXOGh9u1yoZGn8 pWvsvwFETRJh
AFtBEqM2GCBuQwsqmDXH9USyH8Tjaoll+P8ASDPc+375ViZZ0ZZVr+JLaySA WgZRlKKB2AzS
naN4eI6hE4hgEi+kMmXvrtPVU7AGx1LGrXuM692ANzs7tGRuMMTRFOYRjKwE Xtz5br9L1x2a
XD5iboKpPu+r2be78Ck1edBvfXLkWHgUmrzoN765cix/WM7/AMkrrMC9bJxd Y/iwghHuYha2
RWy1ktiXwTL1v5or3F8npAev9s1GwerlWiP28zmaKBiKWqxphItgLHmJ9pQs 2w5EhB3QyJYT
b+nspHZizzjEksvvbGWqm2AJa9m8haLYztaWSmdUCRxP0GnivRYG8cZdSQH6 ss7wjqT1mHAK
NQRLY7RmBtioEZ4lQAihe6/S9cdmlw+Ym6CqT7vq9m2nfgUmrzoN765ciw8C k1edBvfXLkWO
weGHX6Xrjs0uHzE3QVSfd9Xs24+eBSavOg3vrlyLDwKTV50G99cuRY7B4Ydf peuOzS4fMTdB
VJ931ezbj54FJq86De+uXIsPApNXnQb31y5FjsHhh1+l647NLh8xN0FUn3fV 7NuPngUmrzoN
765ciw8Ck1edBvfXLkWOweGHX6Xrjs0uHzE3QVSfd9Xs24+eBSavOg3vrlyL DwKTV50G99cu
RY7B4YdfpeuOzS4fMTdBVJ931ezbj54FJq86De+uXIsPApNXnQb31y5FjsHh h1+l647NLh8x
N0FUn3fV7NuPngUmrzoN765ciw8Ck1edBvfXLkWOweGHX6Xrjs0uHzE3QVSf d9Xs24+eBSav
Og3vrlyLDwKTV50G99cuRY7B4YdfpeuOzS4fMTdBVJ931ezbj54FJq86De+u XIsPApNXnQb3
1y5FjsHhh1+l647NLh8xN0FUn3fV7NuPngUmrzoN765ciw8Ck1edBvfXLkWO weGHX6Xrjs0u
HzE3QVSfd9Xs24+eBSavOg3vrlyLDHYPDDr9L1x2aXD5iboKpPu+r2baKUDW 6KeAkeTUyK82
ba9J8+zboIFyrJ/TaFhuz+m3UTJ9bT2Zv65dv9cm3Nsz7Nn9M23Lsy5su3bu 1xRN8Jx9ndvw
saYbvv8A0/pP980P/CgvG8GPheCmk9B5wCJgC48TCP1NYI/W2A8LLctkjiMm ncUTfCcfZ3b8
LDiib4Tj7O7fhYo4YrBXvp7N7i+PItWSOIyadxRN8Jx9ndvwsOKJvhOPs7t+ FijhhBXvp7N7
i+PItWSOIybRdVSuMNUgZCRAcy+zOIkOPYSDayNkj9cvBQAgWC612ARgjIIe ey5MKOGsCgud
1QLyFwUEGuFCjgSLHl1Y0K/S29G0I6IDrAJjrc4t4+LsrUOsTfw8gV9RZ2VD oNrYj60u0FK1
T1ZEm0NHrCxSoVa39nSKNfV1c2fUzcrVW9Ch5NPkPVvf7fVIjuZpvjXUklmi 4kRD7qQx87O2
rA2rHsGHGZRa0MLVc1yy2WDHHeFh9DF7Wpl4cC5DKGRoZU7U3tjj1JjYw7wo 6AT7h3CO3AUL
GHCet8Q4X2lY0D1w7r/VUXXepdd6t1vqaTrPRdN1XQ/v6LJ9Kz1LfACq7igc eLpFW/8AhfgA
QYvuxMHSIjShC02gvY3HUnSS45ol4AkjRBI+kYC/6z8W1YtbTqOLcOkdPJgd zABuEatZ2ytO
eO2gH1kzu2yEtAnF6Tv6CTojktvUZkq2OB7XaVDalalKTNmcMutrKtNVkyaH r6sVsBamBhcF
hpXJxunND3WkN4eZDax7a7ZHfUCwkC0m9uTx7HMejiFlRsACx5UyXSH9qrrm depULlHWcmno
ZNkqWE4SpSjrEgbyY6XpdJz0mFe96o+0NDFm11Ohsfi0gSsxGpYUDjroV7WM p07A8O5O9JFu
k2NmZjHzQiFPWgp2wyEx8aY86jRzplWdsfGVxy6Gi+DL7oJ0ypWwvyROoV6C dw0EyxGuT66R
WuaHtmXtRIOObyMvTM8uHEUXpr4SpPxbT+hqL0l0Ur8XUKipUmn0NMKGmpUd RxxJ3SJVqX30
0glXIpvPr0ZJWjv0hNJykIvK9/SPin46PwPQvhikU+n/AOiE1nxQqA8hRHaK 6oaet0m8AuKM
KYU3+kF16S6FFyiovp6GlVaLmAZ8rs3zUVR7JQrMc41zmSMx+QQYZl+FGCMX gq2RnLDjHj/J
cbOA1YWEZ5ilWPmBTD0RFCp82RzoyEzOMdNSAVNmAbIT5iMNAGbcn1gFRUTH gmZrYBruBD8P
MwOdNSmJ3QqGHGC27dWoY8LEqMtruShLmQIFO6DrG8OCYiDnoVdHEsmvSVjO ZoKAxrjzphOl
nYirr2WTSKrkBzIDXjeuLAUOwnNljZTeWcX4RplZcliSvEeylJuWPxBaSCLM YSLriekCCZGd
R8MkRE2EEgBba+6vyjvExUPn2t8eR4Jj8yQTKg/D5ZNtmxOT27OKwMK3DNHC Gt3kTDIy1jRF
qWMH7mWDYSSKWZ5ikk1G6Hm5pTSpKilmjZ8Zn5X10Fe+ns3uL48i3hLJHEZN +9ypWRu/Y0pc
L0XQUT1H/eWPiNmew1NNKU2iIpg7p3GRYK7H6FIdKuS+PyIzg6LT/tK5wQtm xoIxfhbFLbYC
vZEHO+kDjuspDj8qrXClaZQMY/pfHhBQOSpyyFkgiZOVTBJm75cYAbo+dyaG V1DnUpciA3im
nVaYxeS+J71Vkj0fcWtTJPhxKnFhNRif90D/AHg4XltVVes8QaZAYqZUs/KE Gy6cLYJn3PDT
W3RdVG18tFTBF9n9gky1pKJgDZpgsajg+BGKSD4qE9dpmQHfwhmNgMqVgXoH Dec1EaGdscHV
2sA2ED3IDFGjNEbhSi66KxzuRlAJKUlDLk2VdU160rGr4/IgyDprc2KWEsW6 sWO6qH5SYm8y
UEEfljW0IK99PZvcXx5FqyRxGTTo6o/tiAE144iy4t0AYSFY/HYhrkzNmnA7 iz1QiIaeBFSg
j+LRkkq++CUr/wBgkAh0Yt8kXJH7STYKAjc+5QWTxUtkeVSw62Aq5XyIqfwS DV4hhkcWePwT
tMsRaHZlGz8QIzsxIZFPyPs6FCglH4l2tkAtKCnsVGYWCRYFcY7KReAAkfs4 4IsuuAxvPK8E
c+lES51BA0x2xVgBLM55/cQiW0cZhbcvNLhiEzB1mSNxi5vCaYkECKahEjaY N1pTyMCrXkJY
YxGqD2GRIpJ2RV6Bw3oFLGBnbHQykWQI1c32QGKLR+PJbrbZ2IZsIzsxBJSk KOGIagOTocE5
tIu+JshOWBaCnNkAF7PO8ugZBBEPOBvNqXLH2ogr309m9xfHkWrJHEZNvdxR N8Jx9ndvwsOK
JvhOPs7t+FjCIBZ2IpRlM1iEAVyASkEf9o9AjMEcJzZpQTmeAwjRhxqIjlmV kepq5G0gBJmp
WBhrHQVKhAdiBiLn4oSDrYQRuftw3n/CCvfT2b3F8eRaskcRk07iib4Tj7O7 fhYcUTfCcfZ3
b8LFHDCCvfT2b3F8eRaskcRk07iib4Tj7O7fhYcUTfCcfZ3b8LFHDCCvfT2b 3F8eRaskcRk0
7iib4Tj7O7fhYcUTfCcfZ3b8LFHDCCvfT2b3F8eRaskcRk07iib4Tj7O7fhY cUTfCcfZ3b8L
FHDCCvfT2b3F8eRaskcRk07iib4Tj7O7fhYcUTfCcfZ3b8LFHDCCvfT2b3F8 eRaskcRk07ii
b4Tj7O7fhYcUTfCcfZ3b8LFHDCCvfT2b3F8eRaskcRk07iib4Tj7O7fhYcUT fCcfZ3b8LFHD
CCvfT2b3F8eRaskcRk07iib4Tj7O7fhYcUTfCcfZ3b8LFHDCCvfT2b3F8eRa skcRk07iib4T
j7O7fhYcUTfCcfZ3b8LFHDCCvfT2b3F8eRaskcRk07iib4Tj7O7fhYcUTfCc fZ3b8LFHDCCv
fT2b3F8eRaskcRk07iib4Tj7O7fhYcUTfCcfZ3b8LFHDCCvfT2b3F8eRaskc Rk07iib4Tj7O
7fhYcUTfCcfZ3b8LFHDCCvfT2b3F8eRaskcRk07iib4Tj7O7fhYcUTfCcfZ3 b8LFHDCCvfT2
b3F8eRaskcRk07iib4Tj7O7fhYcUTfCcfZ3b8LFHDCCvfT2b3F8eRaskcRk0 7iib4Tj7O7fh
YcUTfCcfZ3b8LFHDCCvfT2b3F8eRaskcRk07iib4Tj7O7fhY1xsRBo9Z2DtG IXs4k+MM2Qxg
iT2GQ4qbBfUOBA8r7MkcT7HL6wZZKjmT48ccqKQIxGtRybykFKGR4ZeIN2ug 25VeRRo7P40v
uvanwXVQdLCcDj9+4AX1zAOhlmWu4iLGXv3nuKIF7ayXMHYWTO72P497zO3h kR9hCPqY4OOW
XqWn0nW09CFK1z8bkatT/wAb0IaSUbKz6/QxskWmyBsPaPqL7m8+pqI5Owqz bCe3lsCadgsg
JnKLrcKQ+ro5PsYCpu3CbYdxIzNgFUYQr4bQ+baYg3OxMBTNA8oNy80Sick5 NTQkmHoFLopx
+e7vIWlNuckMj2ftgXKZMh/Trra14VMVdmdxuZXhAVS2QjkMzXpC1V2Fojwf FmifJqBWovqI
11iltaKyK4LCWRn82GwIxEqMKbxkLPICcJxOgggdGhqmBVDacopGKT7vGYQl BxyhbUe6J9X2
Ta515zm0qQ+zJnZZFchSg6QsBCoDZUAlaCVy1xdxNjfjH0Es7yOs4IHSWRBR p3p939fzKwGq
ehsf2EkCrDOODkEuVi2XSli29f4JnuJYn7TxLpDkitrKs1yOU3iOpAjQuAIp kDvTilpO7wV7
6eze4vjyLYskcRk04z3dlaJIixghSQssol0ZNFgLo2Edxla4LGjtm8XyHLmi c6AZG8iwuwEC
SP8AIP3omJvCsoe6ih2P8IAFSo7d1rK9qSU4Uf2urw2Fi24t0NGQHiP2KIZ8 kkd04HBDu0ER
Bp3KRzHkfyK+R9V8U7nu7nvwl8ZEZIpemqvNmizneu8vEnvEgCkemwf5C2G8 yHIajqXVtb4c
kC2s2xvIESROOx8jHZThqCZIlOU7TxBUnXjQcvIXQ+91SUSADylLemOGoazn 5ERiJiFH4Ubt
oi5gEiqQr0DdvPK8LipVt0lBA7RSQ1gpbZmDzYGCJbkuTJ+brpONtVYkHRtW MEi58nZ/IBaN
qqPEuvjcPCpEVN0euBsVGIeDC0QGBFqIK99PZvcXx5FqyRxGTfvM93ZWiSIs YIUkLLKJdGTR
YC6NhHcZWuCxo7ZvF8hy5onOgGRvIsLsBAkj/IP3omJvCsoe6ih2P8IAFSo7 d1rK9qSUV0YZ
5WeK8LbC2WsjY4frlIAXMo4FSlGtTGxnKZ2jA7KT+KpufSOJqfRhJobIEdrX 5lHGzJBx/EIc
UggU3hUliR0Pnc3IpWxgZb2uEGEqnNiYGUgeRuK6QJrjsspuIDZXJGaPXaXG 6rTKcWWZeo+r
TKDvTkgh53pq+jRgzy+wZ5lWSE7GMQDUFPMyRW7R8+wId3miUiO5PcphIY/i qJWq39iKusel
IsRWOhdnAGeprPetbJMlaFvTYbfay2m7YstKHuWyJrDdOvoJUoEXFwFLEuSN LQ8DMMpoK99P
ZvcXx5FqyRxGTfuGN2BojVeA+rW2+98H2G4rH62M0IsTyIUiyOMMONR5bhaX 4ELBN/Y6GMru
UEAa7wWKjalNLqqTBUnFXYmyFQy8kipoJWTIBXu/9E0bpEzkNwrYOxtMsPxh AM1SM+RbSItc
ZdhqKyq2ZQ1R6cxqaUYJK+KR8k07fGIwbaLPDLNrkQqARs3aqhOpzycvkz2L hvQKWMDO2Ohl
IsgRq5vsgMUWj8eS3W2zsQzYRnZiCSlIUcMQ1AcnQ4JzaRd8TZCcsC0FObIA L2ed5dAyCCIe
cDebUuWPtTH6DeRJQaRbLidl4v7ux+JbfsNOoRU1/wBGx1zJTsGdv1WGm6uR ZqwZDVTdIzj/
AIZXIoYSZ6TtKmT2dpIx+VmZeTpx8NEjKS0Fe+ns3uL48i1ZI4jJs310p7EV TSNdnr+9SiAx
K4x/HYasrr/YjKos1iOKIsiKAwCWO0xqDkdgNOQGCv8ABEUw1w3Sm7JFjoOC va16jRxlp8I5
HeMPmW7TryuC3uOYWKpxqZHbsQQ8ctsZV1UMKCGo9kyAJ9ieyMRyTDMCy1GU twTB5AwyTFyt
eXscQRqEx7N+vJ8jFFgQmVpEzAZsCexcN6BSxEztjyikWQC3tHIDFHYSPxvW 2zspncmqi0El
KTgaQIhjiNocK5AmGv8AI0fwfMhZGFnovGS2uMms8WSApAZUI+yT5lRaQW33 yTdCYrbsqiJt
H5P0wakEczJVdg1Q0qbyolsq7N29LJZlAZ2YjAwjBSAD9eQnd0lRVMsXlW2K ZvB3GNJwiLYi
IbBr4+iDYgr309m9xfHkWrJHEZN0O8MjyQRZ3TSxb66EttiuQO2T+ZceAq7y mQDicc4a1RP3
l0pg6r5aHx+1Fui2yXxKNHIHlMgI23saZSWTQk9lcTEGf4tjuIoOBGKLYUi8 Qh+MhfifZmOo
tjVHH4IO8beHAieeBCImwNA+0cXIHd1fXPh7en6+8Obg5qulWrVOvq8spG3p 0mDllRCriGCq
wQTKxnD8MyOPRjvDd4dHtXZlNCqbpvsVCopGMShdfIcvMETAQZVMCNZIqzAs sOLjoaExRwOL
B9EUqnFqS7P+Of8A99nhO7rv+0v/AMP+Jbtt/wDz2dzvix8Hfc32R7S/6Jf/ AHLeIPtH3O//
AMG+J97X+XMIK99PZvcXx5FqyRxGTTjanqYymyV3NQ9OKCBZ1kCodozkdYsj s1nbDcmkUuwq
XBJy3674DmiIqj+fYygaAYtlIZ0X2O0MYM9Z2xwj0eIzqyckyLHePwvdZ1yZ HgUb5LKJRsvA
sYV/KauQpUayEcV9kSuMPwSQndeD1qBmdoS1rHpNkvsGtqvB7YEE1hZSmYxR JQ3TfXohfjpw
cC9RRZN5bHUgWnEItitFIBjCXhAtzZcukVPV20//AHA7iZFqEOx07VNLteOU AlbaPzYSnGRH
1IvrC3zt3gf9oXOP37hhiO6EgZAct5zURu7GosjtYB9LTfvL6lFIbSi655Ow r3Q90+qf97Ff
wqvT/NsIcKbJ5hEjbe+UAA+1QdL0aGolx0SNxx6cUFe+ns3uL48i1ZI4jJv3 s273pNHTcWat
cK6RhTqRCkfTD+lOFQ4Oj+A5lYNBtKhk7Z8qItDo50ExGPpTYLESF+jGRWc3 hqTNBh0g6YI4
kOO3UhD3gJ0kjRk0BlQXyPOMulKez7NbyVjCRUYTo69j5lC4aTQfFa2bASPI iAIbUD8NDYlC
BfFzDGcZxnoDsy1rgub1Gq5SsOkhaXeQAN55XgwNLUMK9QQIwmuZBGGQXmcM CJbliGp5C5jg
KqEwxkuiuWQKLnOKTOYJNKbWC8ZRDV+NT2Sp9mHX0RQojkLIU0jsLQkyAybx unr8VRPHyeTS
BrlGbCAyE48hwshmcweb1hVHjjD2icDJNCZnGrDK0eEAsLT5FEyvLNIgeKuK OtRKptRqJtlb
hgtlRhQV76eze4vjyLVkjiMmnGVJI0NJle5PUyPOLOEnEwQ9YqWa6MyMJ2Q1 Lth6/aET6MMT
MWPjvETvYMdIAPUr5XdUmEIqnaOYkIteExnKaRySpjCYU8mZAqtFBDEYrIpL KKtA8TtYWYC6
fJydBNEULRVMVP7cOgsfR6Mrlw4Lab8PwHXyPIXrizSDoAEZuMxt0QJpqNo8 F5JkU1R5sYAt
+gR8rFQq0Ej7Y/hASujH4dIrzoyLI7wjZ4oZ3+lkrXNJtDQOk0aagk+dgRKK CDOREUnLoGBN
MEZS40zFyctahOKD7z6beXxS6T7XWGWeKrP7Giw4/PudrKiynt0I6KhU0hU0 qKKoUJNER1Wt
jNmCHylNavScXm0BjkD4CjxxBFIwQmmu7vSzYMIK99PZvcXx5FqyRxGTdDuK JvhOPs7t+Fhx
RN8Jx9ndvwsa4k1vIaaZlTV2EVpBMs7JyATZjqMoWYdc/cYObi3QZn5GWWTK EOqnjutY/rR2
5OcoB6adTIAKpxFRInZa4DMyySnawJ20g3em80O75RY5zOORtUAoH26v4rMC yIam7wVns3ac
RO5AHNArAIFl6KzWu9aIyhmQCFE3mowoVn89tjOyyKIqxxZrZh/SIzMUQV76 eze4vjyLVkji
Mm628UTfCcfZ3b8LDiib4Tj7O7fhYwjBdo4Jsf2pRROc8RLQHgneXFJgMmMU TtE3ari+qG98
Vf5YHgibYh7eNjG5Ecfd5YAK9vw7IlNQ3jgk4tr0r8/NM1lQxMtbK+xg3j7j Ik2kBgcl64mS
uK1ujysEE6Awsm+SUzWndRVMTkDobSHBNdBNjSmKUgFSqxrNPGYJlKO4RkwF dEFe+ns3uL48
i1ZI4jJtjuKJvhOPs7t+FhxRN8Jx9ndvwsckjfexR1qxFWMiiPZ28k2f5A3a 7Q86gNDdp5cr
jH45d2bKzs5MyFVkE0KxaCxlIGjAs67JFigWsPrwfKbmlK4SLiiC0yKThMIK NnxPebbts9Kh
kFBd4NSA0NjQgZhMODhO18DEZUWFRG4pmceGRkeZz5Y7vxA+u6xG1szM1o1T i6OKpMhQptdT
r6WlmQV76eze4vjyLVkjiMm3O4om+E4+zu34WHFE3wnH2d2/CxzRDbuWOPpT liAR2tdf9s9C
EftsnsUcZ7pqiTukZ3AjjTM2RvvCCCLayyQip1YCQYylDQkKCo/jpPbcEm7u unjREZeygsct
8nF/gMl+rf8AhxnCyq+rtQB2P62SBacdl4sIr02A2gnYSpSVCzSpIsdKRTdn FstFvZKWhKxs
RFwiSQmAPHGIK0C+KteYo/lMMJsIK99PZvcXx5FqyRxGTdbeKJvhOPs7t+Fh xRN8Jx9ndvws
aYwbY2ZXuZWCGbJxUPwwbS1WAEs9FwYzEmgauIw4j+gEA9xK8FhaOr3wWNyC rkrSDDrimm9D
kjIVmcVskMjEbxq5KYFlGQyXd/CCvfT2b3F8eRaskcRk07iib4Tj7O7fhYcU TfCcfZ3b8LFH
DCCvfT2b3F8eRaskcRk07iib4Tj7O7fhYcUTfCcfZ3b8LFHDCCvfT2b3F8eR askcRk07iib4
Tj7O7fhYcUTfCcfZ3b8LFHDCCvfT2b3F8eRaskcRk07iib4Tj7O7fhYcUTfC cfZ3b8LFHDCC
vfT2b3F8eRaskcRk07iib4Tj7O7fhYcUTfCcfZ3b8LFHDCCvfT2b3F8eRask cRk07iib4Tj7
O7fhYYo4YQV76eze4vjyLVkjiMm0UoGvQpYCR6alakT6m16T59mTXUaOjn25 NoWG5dmfZl1M
+XNty7c2XNs2Ztmz+m3bl27P6/12bcbtcYafVG761N93GmG77/0/pP8AfND/ AMKC8bwYs8FN
J6DzgETAFx4mEfqawR+tsB4WWrJHEZNO4w0+qN31qb7uHGGn1Ru+tTfdxRwx WCvfT2b3F8eR
askcRk07jDT6o3fWpvu4cYafVG761N93FHDCCvfT2b3F8eRaskcRk3N1RTFf pGwAcM87img7
xHGJrCUXuLwBvjm8D8SnrrFLuTDLtmbJqHhghcnpXB8VKnQhziLepyLBbPtH ko42vTy1rN6g
hrGAILEQVnetNS0hYwwCbWocnJv1nFQ3DjUkZ0Os4ayXTRptVbqpkelqKtRO kS6GfXzambRT
aGnty6WX3GGMyi1JVAdUUSIdMQAg65aQASS4+6XjAdr0T6xo6mm4SXXXgT2x fJn2AxA7fpBt
eJhipikjOjIhwrHQ6RGxNpNiUmcWrQKmN4H9ihRr5x0zFtAgGFBG2t+suXuo spSEbE+Cb+pV
67U77B4iOxcy93HQkDxiN6Y6POWgo26qnO5vr86uDbrkBWQKNBMmWkRCrSaS FLruSnQRo0ad
MgQtzGwsyBqGBdoYhRjY2Nt/WfSOzACdvyKULoQv71nU7GEQHdrRtInrRbur Z3hen487sLG3
tDJoq0ud0en16aGnRVrmdj0luuRkQ4zO/pBkmYzBjQEY44abkzuWTW2p1OXS UJtbT1kqnWRL
0C9Cs0Uzg1O7U4plTW9MrolRuzK7I1rS7IkbijVJdLhqD0d8FJ/GnS9LoDnQ Y+OHujqKel3k
QD0o7QHy7VKKoikF1J5R16j9aVTTdpL6CnRfXXnkFOjdPdrUzpp/oaiUVdWm HoVykKvURN8n
q1fA6Yde0IvAEKVTrzxTdfFJqQHxSG52XwobH9zyqFZGWZankptCI/LgSPDV zatslz4C1hWb
HGJX0xfNGINWWoOd2mYGl3g4FQAskoZK2tw8Fv0ri7oDEqk4Z38K1gPNypBZ 4HWFRLLHze1S
afR/BEdVwkoKmaY4RHKws9UoJjcQqzro641hmmAqwGncNZ8VP7oAA6ORBEoI LSnLZGzhQiII
kWg7q+t812FgKtYq3nVjJxh+AQl2IEom1mM1yWFxWKuRUubnV4QjLeQnT0wt CwgWNDE+OiVm
TrNRxUNzM6rtFNnTNyzV0cQTBdaLIVsdAtaiZgkB3IJx63xWRRhqHF8RV54u q1h2FPE2XOBW
1LYl8VsmonmEao9ZYXfv0mwdIY2E+lIGhVoZOzgr309m9xfHkW6eyRxGTaXm e7fPS0jYA5vu
Y3R3WUSsBdGy4i0RnF7yJXJEpTvHFlzRCRXYXtzoT+pj9h7u5AvHKUhwwvbK lpiMSQiUXjL6
/Fr0wkR6W6ft26hniBLAQtN1Zi3d3xuWq7AQ+5lieve7+213rjE4JDVQN6vH qmUjyAWa9+wt
nCQJLLbsh8VZnAOlkKeBhK2ghG4sRMJCJNo6XbBtu7S95KpbBWe3dYHY2gEf PSydg5tn2KVx
VCorFbjps8nk0tjyUs1XeOB+OHfV0ms9eTFGzNwe46mmhIVLcpz5dLaZru0v I4aLLGD1u6wP
tfAIgTCZ1OzNPsUukNBZUs1xlKjGSyT0JZrhI4QKlJoHJ0zM8PiNx19csGdH STZtR+a8qpBX
vp7N7i+PItWSOIybQ9u3XjSlHJrCldjm5SJXRr/OsF3p0k8dpkZGY9+Ep3bs AuKamvWrJS1s
rV2fm3eAz0tSMkwDlxOvxYyxCAazunLRMzlaSlfN1+IQrIsPypoP1L43IIvs A2TG5iFKaKR3
TqLDlnH6sXErixNT+0N8sSxJrnIG1bcUiK3U4LpeMwRGOR8KhkdQtG5ASylJ R7ugNXvqwWWO
H6uM0wx+ok2QK/xJZeFP7ZBjrVZ7FRZMCqdeFO1e+qmCkglzsoPwATHJ2vEx 5aOMQIUAZMmf
nNE9uHBsfmW9IoKHB0Tyl4rK/lUJSvYByrR3/hs5wu+QTGspt0EyXYLhMsyr 3gpRIO6+JRrw
JtQcQcSNUYn0aNnAdNsKuNIEFe+ns3uL48i1ZI4jJp0BVAzQ3aearHa8pRcw j8l94+Rsg2uE
cmVfIsJHiTpFZjt9nCzgQ4WElyMp/t+mRCg6IadpxGNYEOyQcdpAaJFQnI+v i1ghvf8A4w0+
qN31qb7uNcdO5Vam3XAmuQZqh+IymWZgluDYgCpHm2EG8ql6QocmVygwlYIx QsEkkaY0INc2
StKPMCMq5TJgc4lY+CymER9K2V9j5j9AAWxqxK8pmsFxbZav8lTbGvaPvFh0 AmSOjGUwHscR
ow8u7ax6OkbiWivZUtcW8WI+OtCDgZGvRsjn1VzVaCXOgr309m9xfHkWrJHE ZNm7jDT6o3fW
pvu4cYafVG761N93GMIUsLAVlBVwOq5zjD8/BLSQKhN0MYUksLlQVbSpC3NT wuGXAhBXp+aE
ZAjaH1jdFTMoWabinbnlqXaybImcUerrZgwgr309m9xfHkWrJHEZNO4w0+qN 31qb7uHGGn1R
u+tTfdxRwwgr309m9xfHkWrJHEZNO4w0+qN31qb7uHGGn1Ru+tTfdxRwwgr3 09m9xfHkWrJH
EZNO4w0+qN31qb7uHGGn1Ru+tTfdxRwwgr309m9xfHkWrJHEZNO4w0+qN31q b7uHGGn1Ru+t
TfdxRwwgr309m9xfHkWrJHEZNO4w0+qN31qb7uHGGn1Ru+tTfdxRwwgr309m 9xfHkWrJHEZN
O4w0+qN31qb7uHGGn1Ru+tTfdxRwwgr309m9xfHkWrJHEZNO4w0+qN31qb7u HGGn1Ru+tTfd
xRwwgr309m9xfHkWrJHEZNO4w0+qN31qb7uHGGn1Ru+tTfdxRwwgr309m9xf HkWrJHEZNO4w
0+qN31qb7uHGGn1Ru+tTfdxRwwgr309m9xfHkWrJHEZNO4w0+qN31qb7uHGG n1Ru+tTfdxRw
wgr309m9xfHkWrJHEZNO4w0+qN31qb7uHGGn1Ru+tTfdxRwwgr309m9xfHkW rJHEZNO4w0+q
N31qb7uHGGn1Ru+tTfdxRwwgr309m9xfHkWrJHEZNO4w0+qN31qb7uHGGn1R u+tTfdxRwwgr
309m9xfHkWrJHEZNO4w0+qN31qb7uHGGn1Ru+tTfdxRwwgr309m9xfHkWrJH EZNO4w0+qN31
qb7uNUbXQu7WQr6gjEJlMQik6ZpRq5NAiZl4UplIYaiysdjYfsiwNpRHrTI8 TPBGwkbxEyQW
e0bZIoi5JW94UrkTrkVJNPR1tv8AGLjqWIsg6LlMpTXJcfw/GQu3D/aaRZSM hyPwQd42vah1
m46XFjk0D7Rxcgd2pibOIOCfr7w5t7Yl6VatTaGrQhStc/G5GrU/8b0IaSUb Kz6/QxskWmyB
sPaPqL7m5QyVuvXOWNB3NpKmWp8zzJIMwF8wy+H2LpoonChhKVEENVxr+NGQ TTR/tM2FIZME
ZRTVKOR2O5YKLOSa4jWSV7cpEDJojc9MQ3E+H/8ABZza0O9yOhaOLo/H09AP BQ5nEEwGZQ/K
c/vGlRPwQsR9eNxb7ZPkZW+j+NkTqRSrCMWF0TC53CRGiARyOrAMg+2Sllmf tfG1hYCmVuCX
iIJxh+VmiSx85LI5dI2ksLOW4/FYwKmMFkomCVwu9OiYqH48NicaDjl5YtVe 3CRUQsY8/qW9
3dkCNRqBCW8TFZ4uET1jBRMffwltH5aLA6fBOT24xFZEFY6gzdXzgPEwy3M4 1taFo/ITRvNE
aRmeWs2eG7SbohTESFS+JpM0kQNeCvfT2b3F8eRbFkjiMm8cto8e52sjiJvs vFyWsqq34VdY
RDlsFvK+dmOU0G8dAN5DIrARzboWLbo/Ko/KpAbpSjsKamyugcRgIcYgC59K 5Keo1IlEr4gy
brNzD7QTNaeHrThwkSOkwRvNdXo7OYVUSHGcDFScfvwnsO3yTptU7R7IlgB+ dZE3mVuprY0q
ORIacYekIqCWJmdSeGwBsihX2vwwgr309m9xfHkWrJHEZNxQfN1m55ozsjHw hacOZVN3KwWO
gO3D4SQqoKdB0Kp3kK8k9tkhVyaGydg/UhYfC7B7wSb3pfH0mO1kHEshoeiq LE8hihsPF03H
vv5T3YsfzPATFXM6nVfohOSz+8fnwxdBNgZGYqexXeKBe8VBSGPRlc8PpM0C pBF7RvAFihmk
F0YzNuJXGK02sujxpTGWqjGOuGGEFe+ns3uL48i1ZI4jJuOFfN1+IQrIsPyp oP1L43IIvsA2
TG5iFKaKR3TqLDlnH6sXErixNT+0N8sSxJrnIG1bcUiK3U4LpeMwRGOR8Khk dQtG5ASylJR7
78Ro8eorREVhD2y8XEg+pv8A695xMAEYLeQl4ZP7t3bIu7hTRcRHTzYuQERR 0UZOcSHmubNo
IIdYOwmRcumIph+URlph/qhhhBXvp7N7i+PItWSOIyb58HTdmTxCxbu4Xys0 9xc9FtaI/pPW
osPpSh7aSAggCUuo7vXobUzc+xezWbictMu+ctu4HgzZGwdJKd4i542t5s4v 0hiSMmRNPn7X
bqCTltPb+B0KyrB0xytbOsD4MmMcy7Are+ip1MuWc943dMhUwnqPFkwdjgog LLR3patWtRZJ
xDLmhVhuiIQeDR5nMpU6p4P/AEX4YQV76eze4vjyLVkjiMm44RZQyyFbDHMY VouTW4c7R1/i
qFTUWmaoB5KYcxd1k7W6nQbZq9MgBeSCO5Gv4N4vH6HYQgJ2VSn3OwTFkSR6 gkcj7OLHd0f4
TUSdse+3xETf4mvH/wCOfvd8RFnex3/zt17uu8OniX7iv9Bf/wCm9227Hf8A wT/zHZHgv/bv
HY/DCCvfT2b3F8eRaskcRk3DDS3VR6rHIyi8juBFzrCVaagEVM60BSGuDy3E blFmtKdMz9hH
boEa+0T6JWmj8xEqThUMWijIAjOr45YiLJRmwXRasUthg0oxnD8L7s20VULQ CJ5WOUqHxm0F
g/dorkN5BqLuQFV+MXGXR/dKxwDxDG1UAy+4mbNJAepqTm0uPkqJJaIhXSIM hs2kQY1u5oJO
Wb6L8MIK99PZvcXx5FqyRxGTcUNDdIR+PQFItRRWaA4hq4bj9RyTIBTxETJM JU4T7SMLp3GU
Mu0mvzdIMcx3JVYDCO6PxEy2ArXsh4UNJLcSaWVgrZGL2MoGBcGy/U3d6CFY ZTjqW2wqrcMr
RWP7ViJFF9XKpR3UyCVbxZUjpIt0CIGARE0MCBg7Mj9KGLTJteUj2cjs8MZH IXJvkUCjIRjq
GxbqhhhBXvp7N7i+PItWSOIybigB7uCZ2+ulUa2y7aSp8xBNKx9uE4ZbXGk5 WhFTkVbaBWko
jnGbMhJPduQGiYB8gaJ/FTcwZhXWiRuIW4FMY/2pkSaT24mjT38Bbvgsr6VQ 9J4raAOVyIBE
ExDz8IOEbyG6VfE61Ty41cUHteagQgUWkKDapg+PJqdxEqhZs2TtMMIQwQFk 5ZRWvmaOzCMo
zhXrhhhBXvp7N7i+PItWSOIybS/wyNIRKfevXici+EO0sgdtZihbiyaR6zy9 x8j4rIS3ucMF
+p3ESAR8ekk57f1TKoG7eWEOe+21I5aThSoHfcP08rvbqrUBAlc3i3VT5HCY QrALwHBLo202
k0EKmgqjULGAWMJCltcqvyctElj7e0D2qoPY+DmOHHEycV2nrD0hx6mR5kav phhhBXvp7N7i
+PItWSOIybU+FK2x/EZU4SiSyzJ9hZ2eB9UJuk5z4dsj+VJhVa4tS5cMx7Hw KxR5XyAx9+0x
YA0JBZq4wvEDdMbjGceG01JpFkkXRmubz85ApL4jqp2ZjVM3GDnGXetXuWBP UIR1Eq8ONoFU
WPJkeBCZ7dRlsVyBF821/riYvGZ3MNFL4cUVkG4QBJNm11h4ZxuhhhBXvp7N 7i+PItWSOIyb
hhGW6qPYaiyHq/x7cCLtsJD8gbtiYp0RGVcHkglOSJT3dI5S0KaFUTn7JaIQ EoVj+VhKiMO6
TkHmEUz4RiJGQSW9JZCIGx8FhwK3fE6IVwCyoZMWeUrnLHcTIGYma0ZZvQ94 0eiqpxYnFM6I
UxMCnVtCMJNB/XUpdLSeRMxHn0VI27MpZyFmdGhYsQ6++GGEFe+ns3uL48i1 ZI4jJuZ+yq9i
XYqKZKL7wBzjMgXWCw9Yqjy+N1vFhwqjDQsI4xG/uc0WNGnOVSuKbITANlNd oQKEGhGcc1Oh
pe4pZVQKIf0Bs+EWKKcwEtUYuUxZUqvQIQNwHXKrMgQMRacSdKvKO2wJVcc1 3Kt8ddvXgsyn
Q33Wz0IV7nHtdmeiF4Nu4/u0PNAiDJLN9NTuhhhBXvp7N7i+PItWSOIybS9v BSUxvE5z8YJm
4Yj+CK/vte4F1NhCO6jxJTxYQti2W7MHj+2tjqR9HH7B3EVmj2F8ziojo7Sn bBarWMQQjj95
gY9X7f8AGGn1Ru+tTfdxRwwgr309m9xfHkWrJHEZNO4w0+qN31qb7uHGGn1R u+tTfdxRwwgr
309m9xfHkWrJHEZNO4w0+qN31qb7uHGGn1Ru+tTfdxRwwgr309m9xfHkWrJH EZNO4w0+qN31
qb7uHGGn1Ru+tTfdxRwwgr309m9xfHkWrJHEZNO4w0+qN31qb7uHGGn1Ru+t TfdxRwwgr309
m9xfHkWrJHEZNO4w0+qN31qb7uHGGn1Ru+tTfdxRwwgr309m9xfHkWrJHEZN O4w0+qN31qb7
uGKOGEFe+ns3uL48i1ZI4jJtH933/p/Sf75of+FBeN4MaKUDQIVUBI9RSiSK NTY9J8mzPrp9
HWz7MmwLDc2zJszamTNm2ZdmbNm27Muzb/TZtzbdv9P67duN2uDtPpbd9Em+ 1izxU0noOuER
MCX3gYR+oqzD62RPjbYsmcBm1HDE7g7T6W3fRJvtYcHafS276JN9rFYq9xPa PcLx5NiyZwGb
UcMTuDtPpbd9Em+1hwdp9Lbvok32sIq9xPaPcLx5NiyZwGbUcMTuDtPpbd9E m+1hwdp9Lbvo
k32sIq9xPaPcLx5NiyZwGba+TZDL6Vumifx1rNOw80mpsGndiKXx5YRQyGWx e8rmdOrfWVoJ
HUTexNwJX91Z3hsHXpE9JHV6GSRjVaq0VLI/yJEsZJYuHFbbtdNcgISB12kx oR6ujqIdJ9Jt
RoaGHMobmbMtcNNhZG5jYGMfYWjKucVqdlZkGq/vhOUa74UPVUwfgUDatN4J tBMmTKFuk2oU
rcOLyF7dnHW0tdTsQMg4OtbqQPi3SQo17oqSs7Yt10bM2ujyr09Bqa3BYmut uiMPLcgd2jSY
XVpdUSVya3RtyN65ucm5doaapEvQLUuzVTLESxNq6ShKqT6upoKNDU09XS1M +nny5tvEUH4U
+DaJ8a9K/EVBoPRLvxhSaDRz0jVUtx6mIUekPPpinGgh0v0V/pEIlFSmFJwU nqylW8FF+kHq
Tul+l+mFuhqL0YsvST0SiuoaOHkyE31HQ6amusrXUNLTcSLxq6x3SBdcQCXN 6/NNZJsBKdfJ
yi1P2rIIWj+wMULI18bVsd3rxhnn8jryXqDnxHU6HDqTXPsUtrk3sHck+hCk EOu8Pt25lQ8Q
RGMNBbpAW7muw6yPZwTR9cwgiI2FYfo9ElJI+iceiRrrUwt27XjMBlOnWnML TPVe7S2LaB8N
3haucpVe21DYiYSp9hAnDQs1PZDUtWuyo/oN4O0+lt30Sb7WNYJrtXXqAypv BTNtk8qNlo+l
LFYdAdWrGWnKhYVdHF1Zx0mkIerHD8uu8Zj5o7jpa1x88yGjGG6Q3EFkNCDq SBTHhtpMPbxV
7ie0e4XjybNLZM4DNuaNn91/Ps1UvVVzFS+H28217P74aa8joQP5olFdgrvB Yp3soLDLfmXN
0furvsIBl3vfESiTkuxj2tzM3Dkj6wq6miloGEZhn+xVMp9J7tNF2og1ofJX eKx+qimOYmkk
6NI3bpDKonB97HDclMxtIwvFEsqYvH04TvIBqQAYmYo9lhxKiqLXyOX8TBWg lQSW19TuDtPp
bd9Em+1jH5kdRdH5HE4mXKW5oIJxkByi2LW/s8vX9qDtoiyS5rcGLrTY1LUT J1eMofkUm4mR
KWhn1ezvBtBw1SB3YmpzRV7ie0e4XjybFkzgM25ZQpRC3EEkE0FEdyXD4kbX Ah+YmaRpJSrH
slcaXzKW2g3i9z41LIUAyiL1QtdEfEZW3hOpHLqmlZfUvQcRWB2+SlAy5qZa Xw9G2v8AGe7c
uMDWHUW1QikPtptHJBWgmi2EZJ3l95blN0luMYRJvOILkJMbWxs9W95laCB/ ILbw1rNwYTBY
jmIVcCqInxlWMwWplt4kEe72li4XCxUmMXhiXrGgTH3kmdEYmCkJ6VKm5ibl LouTDIKCsJGb
GhBrpkurpMwmHDz6VEbjmTM48zOjusRodf0HB2n0tu+iTfawir3E9o9wvHk2 LJnAZtwSet2R
aduErsR0Ju1f30f3i0f2tr1LZSRSLIoq8VuiyZrxbzKw4FLcdCjbCZgisdIG nGW8dU6BdDJM
XVrHGQ7hbQHWabykfkrUNI9zBI+7hkI8gKPogKGiH5RaB67+9UsbIcckEmyZ GgrKENXrC96m
Lg8VZpKDI5fzYIIHFNeaMmKTiRhGlOuAtzfI7+BLzl3GxJAY9jeDtPpbd9Em +1hwdp9Lbvok
32sIq9xPaPcLx5NiyZwGbao0pjCx0UxY/sdlZI7bEDlIDq6x0H94Cqb+4aIk w4KjAjC3iTIo
hgqTbMcLWjj8c98c3RsmmxZ2+7EyScTIQBOvNMh7f4ncHafS276JN9rDg7T6 W3fRJvtYRV7i
e0e4XjybFkzgM2o4YncHafS276JN9rDg7T6W3fRJvtYRV7ie0e4XjybFkzgM 2o4YncHafS27
6JN9rDg7T6W3fRJvtYRV7ie0e4XjybFkzgM2o4YncHafS276JN9rDg7T6W3f RJvtYRV7ie0e
4XjybFkzgM2o4YncHafS276JN9rDg7T6W3fRJvtYRV7ie0e4XjybFkzgM2o4 YncHafS276JN
9rDg7T6W3fRJvtYRV7ie0e4XjybFkzgM2o4YncHafS276JN9rDg7T6W3fRJv tYRV7ie0e4Xj
ybFkzgM2o4YncHafS276JN9rDg7T6W3fRJvtYRV7ie0e4XjybFkzgM2o4Ync HafS276JN9rD
g7T6W3fRJvtYRV7ie0e4XjybFkzgM2o4YncHafS276JN9rDg7T6W3fRJvtYR V7ie0e4XjybF
kzgM2o4YncHafS276JN9rDg7T6W3fRJvtYRV7ie0e4XjybFkzgM2o4YncHaf S276JN9rDg7T
6W3fRJvtYRV7ie0e4XjybFkzgM2o4YncHafS276JN9rDg7T6W3fRJvtYRV7i e0e4XjybFkzg
M2o4YncHafS276JN9rDg7T6W3fRJvtYRV7ie0e4XjybFkzgM2o4YncHafS27 6JN9rDg7T6W3
fRJvtYRV7ie0e4XjybFkzgM2o41PtJChVP0JR+ChzgPtruxWOorNaxQTKnFG 3agrWu49fbGH
Tem1mtqeVOcgdgmKyFrE0uqj0W5cVLGZC8OrC0KFz43bP8HafS276JN9rH4G pqbNRrbdTUbU
GpqaiBHnz586NPmz58+ZPp5s2fPmzae3NmzZs23btzZtu3bt27du3bt27du3 FCVK1z8DkatT
/wAj0IaSUbav6fQQtmGmyBtPaPoL725QuNO7TxddOabuQo2V/lUgPpAmBtGY hlKYJFhFnyxZ
NtYt1RG7yZPsnidfJ9Wt0gBcm7tt1QNkaN8ZvQ4Xgktt5iqlgQIA1TH5Jh/d o7r+faaStEZ1
J5fD760AVYHKFHhOBP5o6OKkqWUv3HVc9JwbdEhj8XTaw/lNt2hOzpqKlSxG 47BUsiRdlasz
u+mLGB9zeDtPpbd9Em+1jUAOt9CptbE6p01Bhenk2P8AvW4y+uA6J6QIp7n4 2oVKRNwxzTEy
sg1uvD+8ShRGxdaGEXWXgXlJO4cMRMgm4G14q9xPaPcLx5NkWTOAzbdDDE7g 7T6W3fRJvtYc
HafS276JN9rCKvcT2j3C8eTYsmcBm1HDE7g7T6W3fRJvtYcHafS276JN9rCK vcT2j3C8eTYs
mcBm1HDE7g7T6W3fRJvtYcHafS276JN9rCKvcT2j3C8eTYsmcBm1HDE7g7T6 W3fRJvtYcHaf
S276JN9rCKvcT2j3C8eTYsmcBm1HDE7g7T6W3fRJvtYcHafS276JN9rCKvcT 2j3C8eTYsmcB
m1HDE7g7T6W3fRJvtYcHafS276JN9rCKvcT2j3C8eTYsmcBm1HDE7g7T6W3f RJvtYcHafS27
6JN9rCKvcT2j3C8eTYsmcBm1HDE7g7T6W3fRJvtYcHafS276JN9rCKvcT2j3 C8eTYsmcBm1H
DE7g7T6W3fRJvtYcHafS276JN9rCKvcT2j3C8eTYsmcBm1HDE7g7T6W3fRJv tYcHafS276JN
9rCKvcT2j3C8eTYsmcBm1HDE7g7T6W3fRJvtYcHafS276JN9rCKvcT2j3C8e TYsmcBm1HDE7
g7T6W3fRJvtYcHafS276JN9rCKvcT2j3C8eTYsmcBm1HDE7g7T6W3fRJvtYc HafS276JN9rC
KvcT2j3C8eTYsmcBm1HDE7g7T6W3fRJvtYcHafS276JN9rCKvcT2j3C8eTYs mcBm1HDE7g7T
6W3fRJvtYcHafS276JN9rCKvcT2j3C8eTYsmcBm1HDE7g7T6W3fRJvtYcHaf S276JN9rCKvc
T2j3C8eTYsmcBm1HDE7g7T6W3fRJvtYcHafS276JN9rCKvcT2j3C8eTYsmcB m1HDE7g7T6W3
fRJvtYcHafS276JN9rCKvcT2j3C8eTYsmcBm1HDE7g7T6W3fRJvtYYRV7ie0 e4XjybFkzgM2
0w3ff+n9J/vmh/4UF43gxopQNFoqICR59TOry5tj0nybNmgvXJcn9NgWG7f6 7dNMo0dPbm/r
m2/1z7cu3Pt2f0y7c23Lly7Nm7XC03xXH3h2/NxZ4qaT0HXCImBL7wMI/UVZ h9bInxtsWTOA
zajhidwtN8Vx94dvzcOFpviuPvDt+bisVe4ntHuF48mxZM4DNqOGJ3C03xXH 3h2/Nw4Wm+K4
+8O35uEVe4ntHuF48mxZM4DNqOGJ3C03xXH3h2/Nw4Wm+K4+8O35uEVe4ntH uF48mxZM4DNt
Zp6jk5WELbJwIleDRYgYNMRc4/QuQ63PGi2aropcuPx04FriyDCB0Xr1KDQk VmfHtmTFw+Pi
TqgfUrzHLaKnmSoSjt6jgQVoCN30nF+In9wL3lva9bW1BQZc3lOhyLWAP2KU bep1GvYoR6jy
9PKpA2KDM5eC481mIZzlO0ZZ/bEK8UEmdYQlZGmGWBv6v198ISxQys6HrarQ QpeuObk6JkSb
rK1SmRp+m18nTKlGgn0/7tXV08mazwtN8Vx94dvzccLQPgP4ZoHxx0t8a0RE j4m6SoCCNNcP
SKj6SSCxKXW3KHV6ab1OFAdQL6rz9HPy89USRVFLeU3i/TvSK/QlE6FVKfy+ jLqPoviiuOrP
vugPVL9IH77qBWefDog+K/8AavPu1Ic45b2Onh9aUqrY8bQOYJvgmOB+d20+ gmFBfd6SUVO8
tnbjByqG5bcIw3o4wQ1OcB+NA4GngOVHrTqobDhrjMTUPRtprI2kKc8yT0EA gdmKAoTFs169
WAvB39dw0jkxfF8717OpTA5Tiqm1ZKjSGMzOe20kil3fT2p8Nw7KQvYoRYm8 jlYjOpMb5FgO
Bewwc7zJ1t4Wm+K4+8O35uMATpZ2p9X+y3iXs3CFd+3HG+xXfpPghEnbDszw jtJ2W7fmI/2g
7P8AaBh43wnrfCuNtHX+r8SR9N3UVe4ntHuF48mzR2TOAzbglabd72YkoOtY Ix3Vfo7NGv8A
isvBzdztTXtl8Z1e7RwTeQOp/SfvM2ybpWaJ+6d6nul473d2VjqNqzxh4P8A pwiRnBliGvq8
2y/YrdiD7NYdoXRbQOH5KoFF5BVScnWkcbBVXxmPZqmVHEm9jr9NT+EwDJxH GFfNeYGDTsVR
o6OTuW3SONAwjOHmNGKG5ufQ4Fx3s+g3hab4rj7w7fm48+8vAYOOImzkJUgY nc9IFImCtbyY
6rW4mhUjFSY6WDImhXO2gpIyBKEhZiYqWZn0ljjoComTEOqmytDC6LEqKvcT 2j3C8eTYsmcB
m3y53woHd2bJos0ax3XuQM8tTTH+8Aic5kyNEe7Ui6s8xV7PqC2yhin8aOUo bV4dvNJKkBUa
r6XopZDbKkb5WcdsIIGR+ENrTEsUV9KBPP5puxZ2QRY9EVYYwj+t92ppt/vk Vkp2nDXgOi6U
1UE2hHN6euqKRyxOEVZ1UtGMfoJakqicitoU165yYxqRiEaF2oANJLCuXOHf QaWPAYBCpMdH
RUgCwkLH3ksMTEsMdUcFRMVHG5S8EJMTELw7I2hhH2JoRrHR5eXRYlbmtuSq Vy5ToJtDV1cv
oOFpviuPvDt+bhFXuJ7R7hePJsWTOAzb5k4M3ULprlsGNTnXGwATWBPb8PkK YYNnok3ccPs+
ccE6O7xaMiww1q2bq0MjSuTvH8vmc+V5haYFRCcSzKdqgRErhywcOslYIcZl UmfT7idwtN8V
x94dvzcawDNyaTGkyqa5h1wK4llg0ZAWCayCRmysfv0ypSoC0HlUdDKmMGs5 VG2gQBaYcIVB
YzarHlcRzQYnnWeEyPTa12bQRV7ie0e4XjybFkzgM22wwxO4Wm+K4+8O35uP PpngMWFTyCoy
pAqNhwfGSwhDkxjq65UxCpo4ljOHEzyPaTtmd2sfLHcCOmsZeVyPQbn5xCyx C1qVSkceNJGi
r3E9o9wvHk2LJnAZt7HDE7hab4rj7w7fm48+WPAYBCpMdHRUgCwkLH3ksMTE sMdUcFRMVHG5
S8EJMTELw7I2hhH2JoRrHR5eXRYlbmtuSqVy5ToJtDV1cqKvcT2j3C8eTYsm cBm3scMaXtl9
d349vEWjrNeaqLuQTjw/uUYmy10XL3iYOLnb7FrV3WtiWQtVbIHE5NFyaOm/ snoO/XTsdfRF
N0pA0ODen2/4Wm+K4+8O35uEVe4ntHuF48mxZM4DNqOGJ3C03xXH3h2/Nw4W m+K4+8O35uEV
e4ntHuF48mxZM4DNqOGJ3C03xXH3h2/Nw4Wm+K4+8O35uEVe4ntHuF48mxZM 4DNqOGJ3C03x
XH3h2/Nw4Wm+K4+8O35uEVe4ntHuF48mxZM4DNqOGJ3C03xXH3h2/Nw4Wm+K 4+8O35uEVe4n
tHuF48mxZM4DNqOGJ3C03xXH3h2/Nw4Wm+K4+8O35uEVe4ntHuF48mxZM4DN qOGJ3C03xXH3
h2/Nw4Wm+K4+8O35uEVe4ntHuF48mxZM4DNqOGJ3C03xXH3h2/Nw4Wm+K4+8 O35uEVe4ntHu
F48mxZM4DNqOGJ3C03xXH3h2/Nw4Wm+K4+8O35uEVe4ntHuF48mxZM4DNqOG J3C03xXH3h2/
Nw4Wm+K4+8O35uEVe4ntHuF48mxZM4DNqOGJ3C03xXH3h2/Nw4Wm+K4+8O35 uEVe4ntHuF48
mxZM4DNqOGJ3C03xXH3h2/Nw4Wm+K4+8O35uEVe4ntHuF48mxZM4DNqOGJ3C 03xXH3h2/Nw4
Wm+K4+8O35uEVe4ntHuF48mxZM4DNqOND77QC42dqwOQyjj0flZofrHUBJpB j4s0RVYKkkNR
heCtspzkmJmk1UaA2Rj6WGws6cXkTXZF+uXNyNSMNbM/O7shZV+7/C03xXH3 h2/Nx5B4ew0F
AnQ9OypuCgoOEFxeZGBSXZhgTEhYeZtV5IiUjfXR1QMo8OsLSjWOju7OKlG1 tLakULFeunSJ
9TUyUJUrXPwORq1P/I9CGklG2r+n0ELZhpsgbT2j6C+9uMIPWGb6dXCNJvh6 pBAb1cAyCzEQ
13rPWR/rUA64RGdloM3RhwpM4tjeVZjgSFo4h9PZaotulEmCiMvFpCcpllBH JjNFZixySaSO
1Yf3SlCrY1kmiESycIp7Ej4hUB2i0icO3UbEnDjtTQX/AIeCFNBi6qImL+tV /wB8m0XtOM8T
QplLPl7reM53DKPm0dOpd3ti2RIinEEYpShSUBCYIyKOJ9mZFi2SkcgAhFwR 4cB154EXCb+7
j7vwggaHVic+HuCjqDw2ODYq6JaiU6GlkDhab4rj7w7fm4vFXuJ7R7hePJsi yZwGbUcMTuFp
viuPvDt+bhwtN8Vx94dvzcIq9xPaPcLx5NiyZwGbUcMTuFpviuPvDt+bhwtN 8Vx94dvzcIq9
xPaPcLx5NiyZwGbUcMTuFpviuPvDt+bhwtN8Vx94dvzcIq9xPaPcLx5NiyZw GbUcMTuFpviu
PvDt+bhwtN8Vx94dvzcIq9xPaPcLx5NiyZwGbUcMTuFpviuPvDt+bhwtN8Vx 94dvzcIq9xPa
PcLx5NiyZwGbUcMTuFpviuPvDt+bhwtN8Vx94dvzcIq9xPaPcLx5NiyZwGbU cMTuFpviuPvD
t+bhwtN8Vx94dvzcIq9xPaPcLx5NiyZwGbUcMTuFpviuPvDt+bhwtN8Vx94d vzcIq9xPaPcL
x5NiyZwGbUcMTuFpviuPvDt+bhwtN8Vx94dvzcIq9xPaPcLx5NiyZwGbUcMT uFpviuPvDt+b
hwtN8Vx94dvzcIq9xPaPcLx5NiyZwGbUcMTuFpviuPvDt+bhwtN8Vx94dvzc Iq9xPaPcLx5N
iyZwGbUcMTuFpviuPvDt+bhwtN8Vx94dvzcIq9xPaPcLx5NiyZwGbUcMTuFp viuPvDt+bhwt
N8Vx94dvzcIq9xPaPcLx5NiyZwGbUcMTuFpviuPvDt+bhwtN8Vx94dvzcIq9 xPaPcLx5NiyZ
wGbUcMTuFpviuPvDt+bhwtN8Vx94dvzcIq9xPaPcLx5NiyZwGbUcMTuFpviu PvDt+bhwtN8V
x94dvzcIq9xPaPcLx5NiyZwGbUcMTuFpviuPvDt+bhwtN8Vx94dvzcIq9xPa PcLx5NiyZwGb
UcMTuFpviuPvDt+bhwtN8Vx94dvzcIq9xPaPcLx5NiyZwGbUcMTuFpviuPvD t+bhhFXuJ7R7
hePJsWTOAzbTDd9/6f0n++aH/hQXjeDGilA0+trQEjzaa9Wly7HpPl26ehkQ 5sm3bsCw3b/f
t2qUSjU/u27NuzLt2bM+zJ/TLs/pk2Zv7tubdrqSn1hx+U08rxZ554PPCrfN ptBTgbe218HE
A2dnZFATHrk1HDE7qSn1hx+U08rw6kp9YcflNPK8V03tUpilxOYG6KAmPXJq OGJ3UlPrDj8p
p5Xh1JT6w4/KaeV4ab2qUxS4nMDdFATHrk1HDGEnKcoQZnFwZ3iwkaNTs1LV Ta6NblIkboXF
tcUOvqJVyBwQqtXSUo1qNTpaqdUlUaWnrp9fT1NHW08mpkzZdmXOpKfWHH5T TyvFiVHYaSCr
sezSqxHs7IqW9o7P/wBiKw9jzpxybVWxTWdthIOyGjTvhUDsbblbso+LjL0W EIGUq9V3SqDt
AHDWgufTXTKWl0Rhqxc0NrmSxwmSams0tmqFyBKb4MZOgAUMxAA024zzZG/O pc9ZxGwnJqpV
uyMxbXQNug3AmZ2RKlqNfqIVaZxedRC1rFw0GZ3zNHQS5vAMHDTwvy51JT6w 4/KaeV4dSU+s
OPymnleOA6P/AOn/AEV0d8ddLfHqK/TT/SXS1CcoitDV6SUUoCRLqDi6jqL1 INYm+nRKI6hR
VS/R6I+k+8i4XXaA5QN6v09SKR0JROg3kKC6hRFn
Re: Problem with undo of creation of an EditPart [message #226683 is a reply to message #226641] Mon, 20 April 2009 12:04 Go to previous messageGo to next message
Alexander Shatalin is currently offline Alexander Shatalin
Messages: 2928
Registered: July 2009
Senior Member
Hello Cayla,

> The method XXXEditPartFactory.createEditPart(...) is called with a
> View the looks broken. I attached a picture I took during debugging from
Can you investigate stack trace to find the reason caused XXXEditPartFactory.createEditPart(...)
call?

I can not see any problems - nextEditPolicy.refresh(); will perform all the
necessary operations without any traces in operation history AFAIK.

-----------------
Alex Shatalin
Re: Problem with undo of creation of an EditPart [message #226790 is a reply to message #226683] Mon, 20 April 2009 18:36 Go to previous messageGo to next message
Eclipse User
Originally posted by: cayla_sha.gmx.net

>> The method XXXEditPartFactory.createEditPart(...) is called with a
>> View the looks broken. I attached a picture I took during debugging from
> Can you investigate stack trace to find the reason caused
> XXXEditPartFactory.createEditPart(...) call?

Ok, below there is the StackTrace.

As I looked at it I wondered about this line:
de.pvs.cms.editor.diagram.edit.parts.StationWithVehicleEditP art.handleNotificationEvent(StationWithVehicleEditPart.java: 352)
(about the 20th from the top)
I wondered why it is called. So I debugged it and found out the following:
- the StationWithVehicleEditPart is the EditPart that was newly created
and now should be deleted, because of the undo.
- this EditPart gets a lot of calls and they all look ok at the first
sight. They match the event, that the EditPart will be deleted.
- But during the undo I catch some ClassCastExceptions in
handleNotificationEvent() at this line:

NodeImpl node = (NodeImpl) this.getModel();
LocationImpl model = (LocationImpl) node.getElement();

The object "node" is the "broken view" that makes also problems in
createEditPart() (I sent you a screenshot in the last mail). So
node.getElement() returns ShapesDiagramImpl and not LocationImpl and I
get a ClassCastException.
I looked closer and realized that in all calls the "node" is the "broken
view". But this is so totally wrong.

It looks like the EditPart, that should be deleted, was replaced with/
turned into this "broken view".

Any ideas?


de.pvs.cms.editor.diagram.edit.parts.CmseditorEditPartFactor y.createUnrecognizedEditPart(CmseditorEditPartFactory.java:1 26)
de.pvs.cms.editor.diagram.edit.parts.CmseditorEditPartFactor y.createEditPart(CmseditorEditPartFactory.java:118)
de.pvs.cms.editor.diagram.providers.CmseditorEditPartProvide r.createEditPart(CmseditorEditPartProvider.java:87)
de.pvs.cms.editor.diagram.providers.CmseditorEditPartProvide r.provides(CmseditorEditPartProvider.java:132)
org.eclipse.gmf.runtime.diagram.ui.services.editpart.EditPar tService$ProviderDescriptor.provides(EditPartService.java:10 0)
org.eclipse.gmf.runtime.common.core.service.Service.safeProv ides(Service.java:860)
org.eclipse.gmf.runtime.common.core.service.ExecutionStrateg y$1.getUncachedProviders(ExecutionStrategy.java:89)
org.eclipse.gmf.runtime.common.core.service.Service.getProvi ders(Service.java:563)
org.eclipse.gmf.runtime.common.core.service.ExecutionStrateg y$1.execute(ExecutionStrategy.java:68)
org.eclipse.gmf.runtime.common.core.service.Service.execute( Service.java:652)
org.eclipse.gmf.runtime.diagram.ui.services.editpart.EditPar tService.execute(EditPartService.java:217)
org.eclipse.gmf.runtime.diagram.ui.services.editpart.EditPar tService.createGraphicEditPart(EditPartService.java:191)
org.eclipse.gmf.runtime.diagram.ui.services.editpart.EditPar tService$1.run(EditPartService.java:228)
org.eclipse.emf.transaction.impl.TransactionalEditingDomainI mpl.runExclusive(TransactionalEditingDomainImpl.java:289)
org.eclipse.gmf.runtime.diagram.ui.services.editpart.EditPar tService.createEditPart(EditPartService.java:226)
org.eclipse.gef.editparts.AbstractEditPart.createChild(Abstr actEditPart.java:249)
org.eclipse.gef.editparts.AbstractEditPart.refreshChildren(A bstractEditPart.java:726)
org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPa rt.refreshChild(GraphicalEditPart.java:1208)
org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPa rt.handleMajorSemanticChange(GraphicalEditPart.java:1234)

org.eclipse.gmf.runtime.diagram.ui.editparts.ShapeEditPart.h andleNotificationEvent(ShapeEditPart.java:145)
org.eclipse.gmf.runtime.diagram.ui.editparts.ShapeNodeEditPa rt.handleNotificationEvent(ShapeNodeEditPart.java:231)
de.pvs.cms.editor.diagram.edit.parts.StationWithVehicleEditP art.handleNotificationEvent(StationWithVehicleEditPart.java: 352)
org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPa rt.notifyChanged(GraphicalEditPart.java:1414)
org.eclipse.gmf.runtime.diagram.core.listener.DiagramEventBr oker.fireNotification(DiagramEventBroker.java:500)
org.eclipse.gmf.runtime.diagram.core.listener.DiagramEventBr oker.resourceSetChanged(DiagramEventBroker.java:395)
org.eclipse.gmf.runtime.diagram.ui.internal.DiagramEventBrok erThreadSafe.resourceSetChanged(DiagramEventBrokerThreadSafe .java:72)
org.eclipse.gmf.runtime.diagram.core.DiagramEditingDomainFac tory$DiagramEditingDomain.postcommit(DiagramEditingDomainFac tory.java:213)
org.eclipse.emf.transaction.impl.TransactionalEditingDomainI mpl.deactivate(TransactionalEditingDomainImpl.java:504)
org.eclipse.emf.transaction.impl.TransactionImpl.close(Trans actionImpl.java:623)
org.eclipse.emf.transaction.impl.TransactionImpl.commit(Tran sactionImpl.java:415)
org.eclipse.emf.workspace.AbstractEMFOperation.undo(Abstract EMFOperation.java:351)
org.eclipse.core.commands.operations.DefaultOperationHistory .doUndo(DefaultOperationHistory.java:415)
org.eclipse.core.commands.operations.DefaultOperationHistory .undo(DefaultOperationHistory.java:1268)
org.eclipse.ui.operations.UndoActionHandler.runCommand(UndoA ctionHandler.java:78)
org.eclipse.ui.operations.OperationHistoryActionHandler$4.ru n(OperationHistoryActionHandler.java:301)
org.eclipse.jface.operation.ModalContext.runInCurrentThread( ModalContext.java:464)
org.eclipse.jface.operation.ModalContext.run(ModalContext.ja va:372)
org.eclipse.jface.dialogs.ProgressMonitorDialog.run(Progress MonitorDialog.java:507)
org.eclipse.ui.internal.operations.TimeTriggeredProgressMoni torDialog.access$6(TimeTriggeredProgressMonitorDialog.java:1 )
org.eclipse.ui.internal.operations.TimeTriggeredProgressMoni torDialog$2.run(TimeTriggeredProgressMonitorDialog.java:203)
org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator .java:70)
org.eclipse.ui.internal.operations.TimeTriggeredProgressMoni torDialog.run(TimeTriggeredProgressMonitorDialog.java:216)
org.eclipse.ui.operations.OperationHistoryActionHandler.run( OperationHistoryActionHandler.java:316)
org.eclipse.gmf.runtime.common.ui.action.actions.global.Glob alUndoAction.doRun(GlobalUndoAction.java:245)
org.eclipse.gmf.runtime.common.ui.action.AbstractActionHandl er.run(AbstractActionHandler.java:359)
org.eclipse.gmf.runtime.common.ui.action.ActionManager.run(A ctionManager.java:229)
org.eclipse.gmf.runtime.common.ui.action.AbstractActionHandl er.runWithEvent(AbstractActionHandler.java:377)
org.eclipse.ui.actions.RetargetAction.runWithEvent(RetargetA ction.java:230)
org.eclipse.jface.action.ActionContributionItem.handleWidget Selection(ActionContributionItem.java:583)
org.eclipse.jface.action.ActionContributionItem.access$2(Act ionContributionItem.java:500)
org.eclipse.jface.action.ActionContributionItem$5.handleEven t(ActionContributionItem.java:411)
org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java :84)
org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1003)
org.eclipse.swt.widgets.Display.runDeferredEvents(Display.ja va:3823)
org.eclipse.swt.widgets.Display.readAndDispatch(Display.java :3422)
org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.jav a:2384)
org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2348)
org.eclipse.ui.internal.Workbench.access$4(Workbench.java:22 00)
org.eclipse.ui.internal.Workbench$5.run(Workbench.java:495)
org.eclipse.core.databinding.observable.Realm.runWithDefault (Realm.java:288)
org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Work bench.java:490)
org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.j ava:149)
org.eclipse.ui.internal.ide.application.IDEApplication.start (IDEApplication.java:113)
org.eclipse.equinox.internal.app.EclipseAppHandle.run(Eclips eAppHandle.java:193)
org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher .runApplication(EclipseAppLauncher.java:110)
org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher .start(EclipseAppLauncher.java:79)
org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseS tarter.java:386)
org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseS tarter.java:179)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
java.lang.reflect.Method.invoke(Unknown Source)
org.eclipse.equinox.launcher.Main.invokeFramework(Main.java: 549)
org.eclipse.equinox.launcher.Main.basicRun(Main.java:504)
org.eclipse.equinox.launcher.Main.run(Main.java:1236)
org.eclipse.equinox.launcher.Main.main(Main.java:1212)
Re: Problem with undo of creation of an EditPart [message #226849 is a reply to message #226790] Tue, 21 April 2009 11:46 Go to previous messageGo to next message
Alexander Shatalin is currently offline Alexander Shatalin
Messages: 2928
Registered: July 2009
Senior Member
Hello Cayla,

> - the StationWithVehicleEditPart is the EditPart that was newly
> created
It looks like underlying view (one associated with StationWithVehicleEditPart)
was deleted somehow till the moment you get all tehse notifications. And
it looks like a reason why StationWithVehicleEditPart incorretly process
these notifications. Can you try looking for a place where corresponding
View will be deleted (replaced by another View representing different EditPart)?
It is important to have this "substitution" performed after update process
connected with domain model changes.

You can place a breakpoint into the code where you are calling "update" and
perform undo. AFAIU you'll see that update will be called before "handleNotification()"
causiing this problem. I think you have to modify code to execute "update"
process after "notifyChanged()". I hope actual code will push you to the
proper solution and an answer to the question: why was update performed before
"handleNotification()" execution.


-----------------
Alex Shatalin
Re: Problem with undo of creation of an EditPart [message #226877 is a reply to message #226849] Tue, 21 April 2009 15:01 Go to previous messageGo to next message
Eclipse User
Originally posted by: cayla_sha.gmx.net

Alex Shatalin schrieb:
> It looks like underlying view (one associated with
> StationWithVehicleEditPart) was deleted somehow till the moment you get
> all tehse notifications. And it looks like a reason why
> StationWithVehicleEditPart incorretly process these notifications. Can
> you try looking for a place where corresponding View will be deleted
> (replaced by another View representing different EditPart)? It is
> important to have this "substitution" performed after update process
> connected with domain model changes.

But where are normally views deleted? I don`t have any idea where to
start searching.
Re: Problem with undo of creation of an EditPart [message #226883 is a reply to message #226877] Tue, 21 April 2009 15:46 Go to previous messageGo to next message
Alexander Shatalin is currently offline Alexander Shatalin
Messages: 2928
Registered: July 2009
Senior Member
Hello Cayla,

> But where are normally views deleted? I don`t have any idea where to
> start searching.
I think this process will be started by CmseditorEditPartFactory.myF5Command()
method..

-----------------
Alex Shatalin
Re: Problem with undo of creation of an EditPart [message #227231 is a reply to message #226883] Thu, 23 April 2009 15:24 Go to previous messageGo to next message
Eclipse User
Originally posted by: cayla_sha.gmx.net

This is a multi-part message in MIME format.
--------------090901090404030807090709
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit


>> But where are normally views deleted? I don`t have any idea where to
>> start searching.
> I think this process will be started by
> CmseditorEditPartFactory.myF5Command() method..

unfortunately not.
I didn`t find the reason, I just found more confusing things during
debugging.

This is the order of calls I observed:
- at the beginning there is a LocationImpl with StationEditPart
- I add the first vehicle to location
- StationEditPart receives notification, that vehicle was added and so
calls myF5command
- myF5command triggers most likely exchange of EditParts
- StationEditPart receives notifications for deletion
- StationWithVehicleEditPart receives notifications for creation
=> LocationImpl with StationWithVehicleEditPart

- then I click "undo"
- StationWithVehicleEditPart receives notification (with wrong view!),
that vehicle was removed and so calls myF5command
- myF5command does nothing of interest (I thought, that it would trigger
the exchange of the EditParts, but when I comment the call out, nothing
changes)
- StationWithVehicleEditPart receives all the notifications for deleting
it, but for wrong view.
- StationEditPart receives notifications for creation
=> LocationImpl with StationEditPart AND Red Box on Screen

So it looks like "undo" is triggering the exchange of the EditParts,
because myF5command doesn`t trigger it. And it happens somewhere else in
the code, at a place where I haven`t looked at yet.

And what`s also strange: When the first notification hits
StationWithVehicleEditPart, it already has the broken view. That means
the exchange happens before any calls hit my code the first time.

I`ve put some System.out.prinln()s in my EditParts and in myF5command()
because so it`s easier to observe the notifications. Perhaps it helps...

--------------090901090404030807090709
Content-Type: text/plain;
name="test.txt"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
filename="test.txt"

dGVzdDoNCihsb2NhdGlvbiBjYW4gY29udGFpbiBzdGF0aW9ucyBhbmQgdmVo aWNsZXMsIA0K
d2hlbiBsb2NhdGlvbiBjb250YWlucyBhdCBsZWFzdCAxIHN0YXRpb24gaXQg dXNlcyBTdGF0
aW9uRWRpdFBhcnQsDQp3aGVuIGl0IGNvbnRhaW5zIGFkZGl0aW9uYWxseSBh dCBsZWFzdCAx
IHZlaGljbGUgaXQgdXNlcyBTdGF0aW9uV2l0aFZlaGljbGVFZGl0UGFydCkN Cg0KMSBsb2Nh
dGlvbiB3aXRoIDEgc3RhdGlvbiA9PiBTdGF0aW9uRWRpdFBhcnQNCi0+IGFk ZCB2ZWhpY2xl
DQotPiB1bmRvDQoNCg0KYWRkIHZlaGljbGU6DQpTdGF0aW9uRWRpdFBhcnQN CiAgICAtPiBF
dmVudCBUeXBlOiAzDQogICAgLT4gT2xkIFZhbHVlOiBudWxsDQogICAgLT4g TmV3IFZhbHVl
OiBkZS5wdnMuY21zLmVkaXRvci5pbXBsLlZlaGljbGVJbXBsQDUxYTllNCAo aUQ6IDEpIChj
YXBhY2l0eTogMCwgc3BlZWQ6IDApDQogICAgLT4gZmVhdHVyZTogb3JnLmVj bGlwc2UuZW1m
LmVjb3JlLmltcGwuRVJlZmVyZW5jZUltcGxAMWQ3YjE1NSAobmFtZTogdmVo aWNsZXMpIChv
cmRlcmVkOiB0cnVlLCB1bmlxdWU6IHRydWUsIGxvd2VyQm91bmQ6IDAsIHVw cGVyQm91bmQ6
IC0xKSAoY2hhbmdlYWJsZTogdHJ1ZSwgdm9sYXRpbGU6IGZhbHNlLCB0cmFu c2llbnQ6IGZh
bHNlLCBkZWZhdWx0VmFsdWVMaXRlcmFsOiBudWxsLCB1bnNldHRhYmxlOiBm YWxzZSwgZGVy
aXZlZDogZmFsc2UpIChjb250YWlubWVudDogdHJ1ZSwgcmVzb2x2ZVByb3hp ZXM6IGZhbHNl
KQ0KICAgIC0+IHRoaXMuZ2V0TW9kZWwoKS5nZXRFbGVtZW50KCkgOiBMb2Nh dGlvbkltcGwN
CkNtc2VkaXRvckVkaXRQYXJ0RmFjdG9yeS5teUY1Q29tbWFuZA0KU3RhdGlv bkVkaXRQYXJ0
DQogICAgLT4gRXZlbnQgVHlwZTogMQ0KICAgIC0+IE9sZCBWYWx1ZTogMA0K ICAgIC0+IE5l
dyBWYWx1ZTogMQ0KICAgIC0+IGZlYXR1cmU6IG9yZy5lY2xpcHNlLmVtZi5l Y29yZS5pbXBs
LkVBdHRyaWJ1dGVJbXBsQDFlZTJjNSAobmFtZTogbnVtYmVyT2ZWZWhpY2xl cykgKG9yZGVy
ZWQ6IHRydWUsIHVuaXF1ZTogZmFsc2UsIGxvd2VyQm91bmQ6IDAsIHVwcGVy Qm91bmQ6IDEp
IChjaGFuZ2VhYmxlOiB0cnVlLCB2b2xhdGlsZTogZmFsc2UsIHRyYW5zaWVu dDogZmFsc2Us
IGRlZmF1bHRWYWx1ZUxpdGVyYWw6IG51bGwsIHVuc2V0dGFibGU6IGZhbHNl LCBkZXJpdmVk
OiBmYWxzZSkgKGlEOiBmYWxzZSkNCiAgICAtPiB0aGlzLmdldE1vZGVsKCku Z2V0RWxlbWVu
dCgpIDogTnVsbFBvaW50ZXJFeGNlcHRpb24gKGVsZW1lbnQgaXMgbnVsbCkN ClN0YXRpb25X
aXRoVmVoaWNsZUVkaXRQYXJ0DQogICAgLT4gRXZlbnQgVHlwZTogMQ0KICAg IC0+IE9sZCBW
YWx1ZTogMA0KICAgIC0+IE5ldyBWYWx1ZTogNDMzDQogICAgLT4gZmVhdHVy ZTogb3JnLmVj
bGlwc2UuZW1mLmVjb3JlLmltcGwuRUF0dHJpYnV0ZUltcGxAMjk0ODMgKG5h bWU6IHgpIChv
cmRlcmVkOiB0cnVlLCB1bmlxdWU6IHRydWUsIGxvd2VyQm91bmQ6IDAsIHVw cGVyQm91bmQ6
IDEpIChjaGFuZ2VhYmxlOiB0cnVlLCB2b2xhdGlsZTogZmFsc2UsIHRyYW5z aWVudDogZmFs
c2UsIGRlZmF1bHRWYWx1ZUxpdGVyYWw6IDAsIHVuc2V0dGFibGU6IGZhbHNl LCBkZXJpdmVk
OiBmYWxzZSkgKGlEOiBmYWxzZSkNCiAgICAtPiB0aGlzLmdldE1vZGVsKCku Z2V0RWxlbWVu
dCgpIDogTG9jYXRpb25JbXBsDQpTdGF0aW9uV2l0aFZlaGljbGVFZGl0UGFy dA0KICAgIC0+
IEV2ZW50IFR5cGU6IDENCiAgICAtPiBPbGQgVmFsdWU6IDANCiAgICAtPiBO ZXcgVmFsdWU6
IDIxMA0KICAgIC0+IGZlYXR1cmU6IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5p bXBsLkVBdHRy
aWJ1dGVJbXBsQDE2NDQwMjggKG5hbWU6IHkpIChvcmRlcmVkOiB0cnVlLCB1 bmlxdWU6IHRy
dWUsIGxvd2VyQm91bmQ6IDAsIHVwcGVyQm91bmQ6IDEpIChjaGFuZ2VhYmxl OiB0cnVlLCB2
b2xhdGlsZTogZmFsc2UsIHRyYW5zaWVudDogZmFsc2UsIGRlZmF1bHRWYWx1 ZUxpdGVyYWw6
IDAsIHVuc2V0dGFibGU6IGZhbHNlLCBkZXJpdmVkOiBmYWxzZSkgKGlEOiBm YWxzZSkNCiAg
ICAtPiB0aGlzLmdldE1vZGVsKCkuZ2V0RWxlbWVudCgpIDogTG9jYXRpb25J bXBsDQpTdGF0
aW9uV2l0aFZlaGljbGVFZGl0UGFydA0KICAgIC0+IEV2ZW50IFR5cGU6IDEN CiAgICAtPiBP
bGQgVmFsdWU6IDQzMw0KICAgIC0+IE5ldyBWYWx1ZTogMjUNCiAgICAtPiBm ZWF0dXJlOiBv
cmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FQXR0cmlidXRlSW1wbEAyOTQ4 MyAobmFtZTog
eCkgKG9yZGVyZWQ6IHRydWUsIHVuaXF1ZTogdHJ1ZSwgbG93ZXJCb3VuZDog MCwgdXBwZXJC
b3VuZDogMSkgKGNoYW5nZWFibGU6IHRydWUsIHZvbGF0aWxlOiBmYWxzZSwg dHJhbnNpZW50
OiBmYWxzZSwgZGVmYXVsdFZhbHVlTGl0ZXJhbDogMCwgdW5zZXR0YWJsZTog ZmFsc2UsIGRl
cml2ZWQ6IGZhbHNlKSAoaUQ6IGZhbHNlKQ0KICAgIC0+IHRoaXMuZ2V0TW9k ZWwoKS5nZXRF
bGVtZW50KCkgOiBMb2NhdGlvbkltcGwNClN0YXRpb25XaXRoVmVoaWNsZUVk aXRQYXJ0DQog
ICAgLT4gRXZlbnQgVHlwZTogMQ0KICAgIC0+IE9sZCBWYWx1ZTogMjEwDQog ICAgLT4gTmV3
IFZhbHVlOiAxNw0KICAgIC0+IGZlYXR1cmU6IG9yZy5lY2xpcHNlLmVtZi5l Y29yZS5pbXBs
LkVBdHRyaWJ1dGVJbXBsQDE2NDQwMjggKG5hbWU6IHkpIChvcmRlcmVkOiB0 cnVlLCB1bmlx
dWU6IHRydWUsIGxvd2VyQm91bmQ6IDAsIHVwcGVyQm91bmQ6IDEpIChjaGFu Z2VhYmxlOiB0
cnVlLCB2b2xhdGlsZTogZmFsc2UsIHRyYW5zaWVudDogZmFsc2UsIGRlZmF1 bHRWYWx1ZUxp
dGVyYWw6IDAsIHVuc2V0dGFibGU6IGZhbHNlLCBkZXJpdmVkOiBmYWxzZSkg KGlEOiBmYWxz
ZSkNCiAgICAtPiB0aGlzLmdldE1vZGVsKCkuZ2V0RWxlbWVudCgpIDogTG9j YXRpb25JbXBs
DQoNCg0KDQp1bmRvOg0KU3RhdGlvbldpdGhWZWhpY2xlRWRpdFBhcnQNCiAg ICAtPiBFdmVu
dCBUeXBlOiA0DQogICAgLT4gT2xkIFZhbHVlOiBkZS5wdnMuY21zLmVkaXRv ci5pbXBsLlZl
aGljbGVJbXBsQDUxYTllNCAoaUQ6IDEpIChjYXBhY2l0eTogMCwgc3BlZWQ6 IDApDQogICAg
LT4gTmV3IFZhbHVlOiBudWxsDQogICAgLT4gZmVhdHVyZTogb3JnLmVjbGlw c2UuZW1mLmVj
b3JlLmltcGwuRVJlZmVyZW5jZUltcGxAMWQ3YjE1NSAobmFtZTogdmVoaWNs ZXMpIChvcmRl
cmVkOiB0cnVlLCB1bmlxdWU6IHRydWUsIGxvd2VyQm91bmQ6IDAsIHVwcGVy Qm91bmQ6IC0x
KSAoY2hhbmdlYWJsZTogdHJ1ZSwgdm9sYXRpbGU6IGZhbHNlLCB0cmFuc2ll bnQ6IGZhbHNl
LCBkZWZhdWx0VmFsdWVMaXRlcmFsOiBudWxsLCB1bnNldHRhYmxlOiBmYWxz ZSwgZGVyaXZl
ZDogZmFsc2UpIChjb250YWlubWVudDogdHJ1ZSwgcmVzb2x2ZVByb3hpZXM6 IGZhbHNlKQ0K
ICAgIC0+IHRoaXMuZ2V0TW9kZWwoKS5nZXRFbGVtZW50KCkgOiBDbGFzc0Nh c3RFeGNlcHRp
b24gKGVsZW1lbnQgaXMgU2hhcGVzRGlhZ3JhbUltcGwpDQpDbXNlZGl0b3JF ZGl0UGFydEZh
Y3RvcnkubXlGNUNvbW1hbmQNClN0YXRpb25XaXRoVmVoaWNsZUVkaXRQYXJ0 DQogICAgLT4g
RXZlbnQgVHlwZTogMQ0KICAgIC0+IE9sZCBWYWx1ZTogMQ0KICAgIC0+IE5l dyBWYWx1ZTog
MA0KICAgIC0+IGZlYXR1cmU6IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBs LkVBdHRyaWJ1
dGVJbXBsQDFlZTJjNSAobmFtZTogbnVtYmVyT2ZWZWhpY2xlcykgKG9yZGVy ZWQ6IHRydWUs
IHVuaXF1ZTogZmFsc2UsIGxvd2VyQm91bmQ6IDAsIHVwcGVyQm91bmQ6IDEp IChjaGFuZ2Vh
YmxlOiB0cnVlLCB2b2xhdGlsZTogZmFsc2UsIHRyYW5zaWVudDogZmFsc2Us IGRlZmF1bHRW
YWx1ZUxpdGVyYWw6IG51bGwsIHVuc2V0dGFibGU6IGZhbHNlLCBkZXJpdmVk OiBmYWxzZSkg
KGlEOiBmYWxzZSkNCiAgICAtPiB0aGlzLmdldE1vZGVsKCkuZ2V0RWxlbWVu dCgpIDogQ2xh
c3NDYXN0RXhjZXB0aW9uIChlbGVtZW50IGlzIFNoYXBlc0RpYWdyYW1JbXBs KQ0KU3RhdGlv
bkVkaXRQYXJ0DQogICAgLT4gRXZlbnQgVHlwZTogMQ0KICAgIC0+IE9sZCBW YWx1ZTogbnVs
bA0KICAgIC0+IE5ldyBWYWx1ZTogb3JnLmVjbGlwc2UuZ21mLnJ1bnRpbWUu bm90YXRpb24u
aW1wbC5Cb3VuZHNJbXBsQDFiZjI5ODggKHg6IDI1LCB5OiAxNykgKHdpZHRo OiAtMSwgaGVp
Z2h0OiAtMSkNCiAgICAtPiBmZWF0dXJlOiBvcmcuZWNsaXBzZS5lbWYuZWNv cmUuaW1wbC5F
UmVmZXJlbmNlSW1wbEAxYTdkNTliIChuYW1lOiBsYXlvdXRDb25zdHJhaW50 KSAob3JkZXJl
ZDogdHJ1ZSwgdW5pcXVlOiB0cnVlLCBsb3dlckJvdW5kOiAwLCB1cHBlckJv dW5kOiAxKSAo
Y2hhbmdlYWJsZTogdHJ1ZSwgdm9sYXRpbGU6IGZhbHNlLCB0cmFuc2llbnQ6 IGZhbHNlLCBk
ZWZhdWx0VmFsdWVMaXRlcmFsOiBudWxsLCB1bnNldHRhYmxlOiBmYWxzZSwg ZGVyaXZlZDog
ZmFsc2UpIChjb250YWlubWVudDogdHJ1ZSwgcmVzb2x2ZVByb3hpZXM6IGZh bHNlKQ0KICAg
IC0+IHRoaXMuZ2V0TW9kZWwoKS5nZXRFbGVtZW50KCkgOiBMb2NhdGlvbklt cGwNClN0YXRp
b25FZGl0UGFydA0KICAgIC0+IEV2ZW50IFR5cGU6IDMNCiAgICAtPiBPbGQg VmFsdWU6IG51
bGwNCiAgICAtPiBOZXcgVmFsdWU6IG9yZy5lY2xpcHNlLmdtZi5ydW50aW1l Lm5vdGF0aW9u
LmltcGwuU2hhcGVTdHlsZUltcGxAZmQwZTcxIChmb250Q29sb3I6IDAsIGZv bnROYW1lOiBU
YWhvbWEsIGZvbnRIZWlnaHQ6IDksIGJvbGQ6IGZhbHNlLCBpdGFsaWM6IGZh bHNlLCB1bmRl
cmxpbmU6IGZhbHNlLCBzdHJpa2VUaHJvdWdoOiBmYWxzZSwgZGVzY3JpcHRp b246ICwgZmls
bENvbG9yOiAxNjc3NzIxNSwgbGluZUNvbG9yOiAxMTU3OTU2OCwgbGluZVdp ZHRoOiAtMSkN
CiAgICAtPiBmZWF0dXJlOiBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5F UmVmZXJlbmNl
SW1wbEBhNGVmZmUgKG5hbWU6IHN0eWxlcykgKG9yZGVyZWQ6IHRydWUsIHVu aXF1ZTogdHJ1
ZSwgbG93ZXJCb3VuZDogMCwgdXBwZXJCb3VuZDogLTEpIChjaGFuZ2VhYmxl OiB0cnVlLCB2
b2xhdGlsZTogZmFsc2UsIHRyYW5zaWVudDogZmFsc2UsIGRlZmF1bHRWYWx1 ZUxpdGVyYWw6
IG51bGwsIHVuc2V0dGFibGU6IGZhbHNlLCBkZXJpdmVkOiBmYWxzZSkgKGNv bnRhaW5tZW50
OiB0cnVlLCByZXNvbHZlUHJveGllczogZmFsc2UpDQogICAgLT4gdGhpcy5n ZXRNb2RlbCgp
LmdldEVsZW1lbnQoKSA6IExvY2F0aW9uSW1wbA0KU3RhdGlvbkVkaXRQYXJ0 DQogICAgLT4g
RXZlbnQgVHlwZTogMw0KICAgIC0+IE9sZCBWYWx1ZTogbnVsbA0KICAgIC0+ IE5ldyBWYWx1
ZTogb3JnLmVjbGlwc2UuZ21mLnJ1bnRpbWUubm90YXRpb24uaW1wbC5Ob2Rl SW1wbEAxMzg2
MTVlICh2aXNpYmxlOiB0cnVlLCB0eXBlOiA0MDA1LCBtdXRhYmxlOiBmYWxz ZSkNCiAgICAt
PiBmZWF0dXJlOiBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FUmVmZXJl bmNlSW1wbEBi
Y2ZhMzggKG5hbWU6IGNoaWxkcmVuKSAob3JkZXJlZDogdHJ1ZSwgdW5pcXVl OiB0cnVlLCBs
b3dlckJvdW5kOiAwLCB1cHBlckJvdW5kOiAtMSkgKGNoYW5nZWFibGU6IHRy dWUsIHZvbGF0
aWxlOiBmYWxzZSwgdHJhbnNpZW50OiBmYWxzZSwgZGVmYXVsdFZhbHVlTGl0 ZXJhbDogbnVs
bCwgdW5zZXR0YWJsZTogZmFsc2UsIGRlcml2ZWQ6IGZhbHNlKSAoY29udGFp bm1lbnQ6IHRy
dWUsIHJlc29sdmVQcm94aWVzOiBmYWxzZSkNCiAgICAtPiB0aGlzLmdldE1v ZGVsKCkuZ2V0
RWxlbWVudCgpIDogTG9jYXRpb25JbXBsDQpTdGF0aW9uRWRpdFBhcnQNCiAg ICAtPiBFdmVu
dCBUeXBlOiAzDQogICAgLT4gT2xkIFZhbHVlOiBudWxsDQogICAgLT4gTmV3 IFZhbHVlOiBv
cmcuZWNsaXBzZS5nbWYucnVudGltZS5ub3RhdGlvbi5pbXBsLk5vZGVJbXBs QDEyM2FjNDQg
KHZpc2libGU6IHRydWUsIHR5cGU6IDQwMDQsIG11dGFibGU6IGZhbHNlKQ0K ICAgIC0+IGZl
YXR1cmU6IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVSZWZlcmVuY2VJ bXBsQGJjZmEz
OCAobmFtZTogY2hpbGRyZW4pIChvcmRlcmVkOiB0cnVlLCB1bmlxdWU6IHRy dWUsIGxvd2Vy
Qm91bmQ6IDAsIHVwcGVyQm91bmQ6IC0xKSAoY2hhbmdlYWJsZTogdHJ1ZSwg dm9sYXRpbGU6
IGZhbHNlLCB0cmFuc2llbnQ6IGZhbHNlLCBkZWZhdWx0VmFsdWVMaXRlcmFs OiBudWxsLCB1
bnNldHRhYmxlOiBmYWxzZSwgZGVyaXZlZDogZmFsc2UpIChjb250YWlubWVu dDogdHJ1ZSwg
cmVzb2x2ZVByb3hpZXM6IGZhbHNlKQ0KICAgIC0+IHRoaXMuZ2V0TW9kZWwo KS5nZXRFbGVt
ZW50KCkgOiBMb2NhdGlvbkltcGwNClN0YXRpb25FZGl0UGFydA0KICAgIC0+ IEV2ZW50IFR5
cGU6IDMNCiAgICAtPiBPbGQgVmFsdWU6IG51bGwNCiAgICAtPiBOZXcgVmFs dWU6IG9yZy5l
Y2xpcHNlLmdtZi5ydW50aW1lLm5vdGF0aW9uLmltcGwuTm9kZUltcGxAMTFl ZjNlNyAodmlz
aWJsZTogdHJ1ZSwgdHlwZTogNDAwMywgbXV0YWJsZTogZmFsc2UpDQogICAg LT4gZmVhdHVy
ZTogb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRVJlZmVyZW5jZUltcGxA YmNmYTM4IChu
YW1lOiBjaGlsZHJlbikgKG9yZGVyZWQ6IHRydWUsIHVuaXF1ZTogdHJ1ZSwg bG93ZXJCb3Vu
ZDogMCwgdXBwZXJCb3VuZDogLTEpIChjaGFuZ2VhYmxlOiB0cnVlLCB2b2xh dGlsZTogZmFs
c2UsIHRyYW5zaWVudDogZmFsc2UsIGRlZmF1bHRWYWx1ZUxpdGVyYWw6IG51 bGwsIHVuc2V0
dGFibGU6IGZhbHNlLCBkZXJpdmVkOiBmYWxzZSkgKGNvbnRhaW5tZW50OiB0 cnVlLCByZXNv
bHZlUHJveGllczogZmFsc2UpDQogICAgLT4gdGhpcy5nZXRNb2RlbCgpLmdl dEVsZW1lbnQo
KSA6IExvY2F0aW9uSW1wbA0KU3RhdGlvbkVkaXRQYXJ0DQogICAgLT4gRXZl bnQgVHlwZTog
Mw0KICAgIC0+IE9sZCBWYWx1ZTogbnVsbA0KICAgIC0+IE5ldyBWYWx1ZTog b3JnLmVjbGlw
c2UuZ21mLnJ1bnRpbWUubm90YXRpb24uaW1wbC5Ob2RlSW1wbEBlOGNmY2Eg KHZpc2libGU6
IHRydWUsIHR5cGU6IDQwMDIsIG11dGFibGU6IGZhbHNlKQ0KICAgIC0+IGZl YXR1cmU6IG9y
Zy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVSZWZlcmVuY2VJbXBsQGJjZmEz OCAobmFtZTog
Y2hpbGRyZW4pIChvcmRlcmVkOiB0cnVlLCB1bmlxdWU6IHRydWUsIGxvd2Vy Qm91bmQ6IDAs
IHVwcGVyQm91bmQ6IC0xKSAoY2hhbmdlYWJsZTogdHJ1ZSwgdm9sYXRpbGU6 IGZhbHNlLCB0
cmFuc2llbnQ6IGZhbHNlLCBkZWZhdWx0VmFsdWVMaXRlcmFsOiBudWxsLCB1 bnNldHRhYmxl
OiBmYWxzZSwgZGVyaXZlZDogZmFsc2UpIChjb250YWlubWVudDogdHJ1ZSwg cmVzb2x2ZVBy
b3hpZXM6IGZhbHNlKQ0KICAgIC0+IHRoaXMuZ2V0TW9kZWwoKS5nZXRFbGVt ZW50KCkgOiBM
b2NhdGlvbkltcGwNClN0YXRpb25XaXRoVmVoaWNsZUVkaXRQYXJ0DQogICAg LT4gRXZlbnQg
VHlwZTogMQ0KICAgIC0+IE9sZCBWYWx1ZTogMjUNCiAgICAtPiBOZXcgVmFs dWU6IDANCiAg
ICAtPiBmZWF0dXJlOiBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FQXR0 cmlidXRlSW1w
bEAyOTQ4MyAobmFtZTogeCkgKG9yZGVyZWQ6IHRydWUsIHVuaXF1ZTogdHJ1 ZSwgbG93ZXJC
b3VuZDogMCwgdXBwZXJCb3VuZDogMSkgKGNoYW5nZWFibGU6IHRydWUsIHZv bGF0aWxlOiBm
YWxzZSwgdHJhbnNpZW50OiBmYWxzZSwgZGVmYXVsdFZhbHVlTGl0ZXJhbDog MCwgdW5zZXR0
YWJsZTogZmFsc2UsIGRlcml2ZWQ6IGZhbHNlKSAoaUQ6IGZhbHNlKQ0KICAg IC0+IHRoaXMu
Z2V0TW9kZWwoKS5nZXRFbGVtZW50KCkgOiBDbGFzc0Nhc3RFeGNlcHRpb24g KGVsZW1lbnQg
aXMgU2hhcGVzRGlhZ3JhbUltcGwpDQpTdGF0aW9uV2l0aFZlaGljbGVFZGl0 UGFydA0KICAg
IC0+IEV2ZW50IFR5cGU6IDENCiAgICAtPiBPbGQgVmFsdWU6IDE3DQogICAg LT4gTmV3IFZh
bHVlOiAwDQogICAgLT4gZmVhdHVyZTogb3JnLmVjbGlwc2UuZW1mLmVjb3Jl LmltcGwuRUF0
dHJpYnV0ZUltcGxAMTY0NDAyOCAobmFtZTogeSkgKG9yZGVyZWQ6IHRydWUs IHVuaXF1ZTog
dHJ1ZSwgbG93ZXJCb3VuZDogMCwgdXBwZXJCb3VuZDogMSkgKGNoYW5nZWFi bGU6IHRydWUs
IHZvbGF0aWxlOiBmYWxzZSwgdHJhbnNpZW50OiBmYWxzZSwgZGVmYXVsdFZh bHVlTGl0ZXJh
bDogMCwgdW5zZXR0YWJsZTogZmFsc2UsIGRlcml2ZWQ6IGZhbHNlKSAoaUQ6 IGZhbHNlKQ0K
ICAgIC0+IHRoaXMuZ2V0TW9kZWwoKS5nZXRFbGVtZW50KCkgOiBDbGFzc0Nh c3RFeGNlcHRp
b24gKGVsZW1lbnQgaXMgU2hhcGVzRGlhZ3JhbUltcGwpDQpTdGF0aW9uV2l0 aFZlaGljbGVF
ZGl0UGFydA0KICAgIC0+IEV2ZW50IFR5cGU6IDQNCiAgICAtPiBPbGQgVmFs dWU6IG9yZy5l
Y2xpcHNlLmdtZi5ydW50aW1lLm5vdGF0aW9uLmltcGwuTm9kZUltcGxAOWIz M2ExICh2aXNp
YmxlOiB0cnVlLCB0eXBlOiA0MDA5LCBtdXRhYmxlOiBmYWxzZSkNCiAgICAt PiBOZXcgVmFs
dWU6IG51bGwNCiAgICAtPiBmZWF0dXJlOiBvcmcuZWNsaXBzZS5lbWYuZWNv cmUuaW1wbC5F
UmVmZXJlbmNlSW1wbEBiY2ZhMzggKG5hbWU6IGNoaWxkcmVuKSAob3JkZXJl ZDogdHJ1ZSwg
dW5pcXVlOiB0cnVlLCBsb3dlckJvdW5kOiAwLCB1cHBlckJvdW5kOiAtMSkg KGNoYW5nZWFi
bGU6IHRydWUsIHZvbGF0aWxlOiBmYWxzZSwgdHJhbnNpZW50OiBmYWxzZSwg ZGVmYXVsdFZh
bHVlTGl0ZXJhbDogbnVsbCwgdW5zZXR0YWJsZTogZmFsc2UsIGRlcml2ZWQ6 IGZhbHNlKSAo
Y29udGFpbm1lbnQ6IHRydWUsIHJlc29sdmVQcm94aWVzOiBmYWxzZSkNCiAg ICAtPiB0aGlz
LmdldE1vZGVsKCkuZ2V0RWxlbWVudCgpIDogQ2xhc3NDYXN0RXhjZXB0aW9u IChlbGVtZW50
IGlzIFNoYXBlc0RpYWdyYW1JbXBsKQ0KU3RhdGlvbldpdGhWZWhpY2xlRWRp dFBhcnQNCiAg
ICAtPiBFdmVudCBUeXBlOiA0DQogICAgLT4gT2xkIFZhbHVlOiBvcmcuZWNs aXBzZS5nbWYu
cnVudGltZS5ub3RhdGlvbi5pbXBsLk5vZGVJbXBsQGEwNzgwOCAodmlzaWJs ZTogdHJ1ZSwg
dHlwZTogNDAwOCwgbXV0YWJsZTogZmFsc2UpDQogICAgLT4gTmV3IFZhbHVl OiBudWxsDQog
ICAgLT4gZmVhdHVyZTogb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRVJl ZmVyZW5jZUlt
cGxAYmNmYTM4IChuYW1lOiBjaGlsZHJlbikgKG9yZGVyZWQ6IHRydWUsIHVu aXF1ZTogdHJ1
ZSwgbG93ZXJCb3VuZDogMCwgdXBwZXJCb3VuZDogLTEpIChjaGFuZ2VhYmxl OiB0cnVlLCB2
b2xhdGlsZTogZmFsc2UsIHRyYW5zaWVudDogZmFsc2UsIGRlZmF1bHRWYWx1 ZUxpdGVyYWw6
IG51bGwsIHVuc2V0dGFibGU6IGZhbHNlLCBkZXJpdmVkOiBmYWxzZSkgKGNv bnRhaW5tZW50
OiB0cnVlLCByZXNvbHZlUHJveGllczogZmFsc2UpDQogICAgLT4gdGhpcy5n ZXRNb2RlbCgp
LmdldEVsZW1lbnQoKSA6IENsYXNzQ2FzdEV4Y2VwdGlvbiAoZWxlbWVudCBp cyBTaGFwZXNE
aWFncmFtSW1wbCkNClN0YXRpb25XaXRoVmVoaWNsZUVkaXRQYXJ0DQogICAg LT4gRXZlbnQg
VHlwZTogNA0KICAgIC0+IE9sZCBWYWx1ZTogb3JnLmVjbGlwc2UuZ21mLnJ1 bnRpbWUubm90
YXRpb24uaW1wbC5Ob2RlSW1wbEA4ODVhNjEgKHZpc2libGU6IHRydWUsIHR5 cGU6IDQwMDcs
IG11dGFibGU6IGZhbHNlKQ0KICAgIC0+IE5ldyBWYWx1ZTogbnVsbA0KICAg IC0+IGZlYXR1
cmU6IG9yZy5lY2xpcHNlLmVtZi5lY29yZS5pbXBsLkVSZWZlcmVuY2VJbXBs QGJjZmEzOCAo
bmFtZTogY2hpbGRyZW4pIChvcmRlcmVkOiB0cnVlLCB1bmlxdWU6IHRydWUs IGxvd2VyQm91
bmQ6IDAsIHVwcGVyQm91bmQ6IC0xKSAoY2hhbmdlYWJsZTogdHJ1ZSwgdm9s YXRpbGU6IGZh
bHNlLCB0cmFuc2llbnQ6IGZhbHNlLCBkZWZhdWx0VmFsdWVMaXRlcmFsOiBu dWxsLCB1bnNl
dHRhYmxlOiBmYWxzZSwgZGVyaXZlZDogZmFsc2UpIChjb250YWlubWVudDog dHJ1ZSwgcmVz
b2x2ZVByb3hpZXM6IGZhbHNlKQ0KICAgIC0+IHRoaXMuZ2V0TW9kZWwoKS5n ZXRFbGVtZW50
KCkgOiBDbGFzc0Nhc3RFeGNlcHRpb24gKGVsZW1lbnQgaXMgU2hhcGVzRGlh Z3JhbUltcGwp
DQpTdGF0aW9uV2l0aFZlaGljbGVFZGl0UGFydA0KICAgIC0+IEV2ZW50IFR5 cGU6IDENCiAg
ICAtPiBPbGQgVmFsdWU6IDEwMDQNCiAgICAtPiBOZXcgVmFsdWU6IG51bGwN CiAgICAtPiBm
ZWF0dXJlOiBvcmcuZWNsaXBzZS5lbWYuZWNvcmUuaW1wbC5FQXR0cmlidXRl SW1wbEAxOWYx
YThhIChuYW1lOiB0eXBlKSAob3JkZXJlZDogdHJ1ZSwgdW5pcXVlOiB0cnVl LCBsb3dlckJv
dW5kOiAwLCB1cHBlckJvdW5kOiAxKSAoY2hhbmdlYWJsZTogdHJ1ZSwgdm9s YXRpbGU6IGZh
bHNlLCB0cmFuc2llbnQ6IGZhbHNlLCBkZWZhdWx0VmFsdWVMaXRlcmFsOiAs IHVuc2V0dGFi
bGU6IGZhbHNlLCBkZXJpdmVkOiBmYWxzZSkgKGlEOiBmYWxzZSkNCiAgICAt PiB0aGlzLmdl
dE1vZGVsKCkuZ2V0RWxlbWVudCgpIDogQ2xhc3NDYXN0RXhjZXB0aW9uIChl bGVtZW50IGlz
IFNoYXBlc0RpYWdyYW1JbXBsKQ0KU3RhdGlvbldpdGhWZWhpY2xlRWRpdFBh cnQNCiAgICAt
PiBFdmVudCBUeXBlOiA0DQogICAgLT4gT2xkIFZhbHVlOiBvcmcuZWNsaXBz ZS5nbWYucnVu
dGltZS5ub3RhdGlvbi5pbXBsLk5vZGVJbXBsQGQxMzNhMyAodmlzaWJsZTog dHJ1ZSwgdHlw
ZTogNDAwNiwgbXV0YWJsZTogZmFsc2UpDQogICAgLT4gTmV3IFZhbHVlOiBu dWxsDQogICAg
LT4gZmVhdHVyZTogb3JnLmVjbGlwc2UuZW1mLmVjb3JlLmltcGwuRVJlZmVy ZW5jZUltcGxA
YmNmYTM4IChuYW1lOiBjaGlsZHJlbikgKG9yZGVyZWQ6IHRydWUsIHVuaXF1 ZTogdHJ1ZSwg
bG93ZXJCb3VuZDogMCwgdXBwZXJCb3VuZDogLTEpIChjaGFuZ2VhYmxlOiB0 cnVlLCB2b2xh
dGlsZTogZmFsc2UsIHRyYW5zaWVudDogZmFsc2UsIGRlZmF1bHRWYWx1ZUxp dGVyYWw6IG51
bGwsIHVuc2V0dGFibGU6IGZhbHNlLCBkZXJpdmVkOiBmYWxzZSkgKGNvbnRh aW5tZW50OiB0
cnVlLCByZXNvbHZlUHJveGllczogZmFsc2UpDQogICAgLT4gdGhpcy5nZXRN b2RlbCgpLmdl
dEVsZW1lbnQoKSA6IENsYXNzQ2FzdEV4Y2VwdGlvbiAoZWxlbWVudCBpcyBT aGFwZXNEaWFn
cmFtSW1wbCkNClN0YXRpb25XaXRoVmVoaWNsZUVkaXRQYXJ0DQogICAgLT4g RXZlbnQgVHlw
ZTogMg0KICAgIC0+IE9sZCBWYWx1ZTogZGUucHZzLmNtcy5lZGl0b3IuaW1w bC5Mb2NhdGlv
bkltcGxAMTUwMzg4YyAoaUQ6IDEpICh4UG9zaXRpb246IDEsIHlQb3NpdGlv bjogMSwgbnVt
YmVyT2ZWZWhpY2xlczogMCwgbnVtYmVyT2ZTdGF0aW9uczogMSwgbnVtYmVy T2ZEZXBvdHM6
IDAsIG51bWJlck9mUGlja3VwUmVxdWVzdHM6IDAsIG51bWJlck9mRGVsaXZl cnlSZXF1ZXN0
czogMCkNCiAgICAtPiBOZXcgVmFsdWU6IG51bGwNCiAgICAtPiBmZWF0dXJl OiBvcmcuZWNs
aXBzZS5lbWYuZWNvcmUuaW1wbC5FUmVmZXJlbmNlSW1wbEBjZjliZjAgKG5h bWU6IGVsZW1l
bnQpIChvcmRlcmVkOiB0cnVlLCB1bmlxdWU6IHRydWUsIGxvd2VyQm91bmQ6 IDAsIHVwcGVy
Qm91bmQ6IDEpIChjaGFuZ2VhYmxlOiB0cnVlLCB2b2xhdGlsZTogZmFsc2Us IHRyYW5zaWVu
dDogZmFsc2UsIGRlZmF1bHRWYWx1ZUxpdGVyYWw6IG51bGwsIHVuc2V0dGFi bGU6IHRydWUs
IGRlcml2ZWQ6IGZhbHNlKSAoY29udGFpbm1lbnQ6IGZhbHNlLCByZXNvbHZl UHJveGllczog
dHJ1ZSkNCiAgICAtPiB0aGlzLmdldE1vZGVsKCkuZ2V0RWxlbWVudCgpIDog Q2xhc3NDYXN0
RXhjZXB0aW9uIChlbGVtZW50IGlzIFNoYXBlc0RpYWdyYW1JbXBsKQ==
--------------090901090404030807090709--
Re: Problem with undo of creation of an EditPart [message #228282 is a reply to message #227231] Wed, 29 April 2009 11:49 Go to previous messageGo to next message
Eclipse User
Originally posted by: cayla_sha.gmx.net

Does no one have any idea?

Is this perhaps some kind of GMF-bug?
Because the view is already broken before it hits my code for the first
time.

Perhaps I could check the undo actions before they're executed and
decide if it's ok, or perhaps change the order in which they're executed.
Is there some kind of "undo control center", where undos are spawned
from and where I can check them before they're executed?
Re: Problem with undo of creation of an EditPart [message #228357 is a reply to message #228282] Wed, 29 April 2009 14:23 Go to previous messageGo to next message
Alexander Shatalin is currently offline Alexander Shatalin
Messages: 2928
Registered: July 2009
Senior Member
Hello Cayla,

> Is this perhaps some kind of GMF-bug?
> Because the view is already broken before it hits my code for the
> first time.
I doubt it is - the problem does not exist without code modification you've
introduces there.

> executed. Is there some kind of "undo control center", where undos are
> spawned from and where I can check them before they're executed?
See IOperationHistory interface.

-----------------
Alex Shatalin
Re: Problem with undo of creation of an EditPart [message #228423 is a reply to message #228357] Wed, 29 April 2009 15:45 Go to previous messageGo to next message
Eclipse User
Originally posted by: cayla_sha.gmx.net

>> Is there some kind of "undo control center", where undos are
>> spawned from and where I can check them before they're executed?
> See IOperationHistory interface.
>

Thanks! I looked at the API and I have some ideas what I could do with it.

But my problem is: Where does the undo-process start?
When I click undo, which method is called first?
Which method calls "undo" on the OperationHistory?

If I want to manipulate the undo-History I need to be the first one
after "undo" was clicked, before anything is executed.
Re: Problem with undo of creation of an EditPart [message #228501 is a reply to message #228423] Thu, 30 April 2009 11:06 Go to previous messageGo to next message
Alexander Shatalin is currently offline Alexander Shatalin
Messages: 2928
Registered: July 2009
Senior Member
Hello Cayla,

> But my problem is: Where does the undo-process start? When I click
> undo, which method is called first? Which method calls "undo" on the
> OperationHistory?
Place a break point into DefaultOperationHistory.<appropriateMethod> and
you'll see it from the call trace in a debugger.

-----------------
Alex Shatalin
Re: Problem with undo of creation of an EditPart [message #228707 is a reply to message #228501] Sat, 02 May 2009 17:19 Go to previous message
Eclipse User
Originally posted by: cayla_sha.gmx.net

>> But my problem is: Where does the undo-process start? When I click
>> undo, which method is called first? Which method calls "undo" on the
>> OperationHistory?
> Place a break point into DefaultOperationHistory.<appropriateMethod> and
> you'll see it from the call trace in a debugger.
>
I put a breakpoint there, but it didn`t help me. Everything happens in
classes which I can`t change. And when it hits my code, it`s first too
early and then too late.

I give up.
public boolean canUndo() {
return false;
}
ftw.
Previous Topic:[Announce] GMF 2.2.0 I200905011753 is available
Next Topic:Redo not working with custom delete command
Goto Forum:
  


Current Time: Fri Oct 24 08:02:41 GMT 2014

Powered by FUDForum. Page generated in 0.11972 seconds
.:: Contact :: Home ::.

Powered by: FUDforum 3.0.2.
Copyright ©2001-2010 FUDforum Bulletin Board Software