Eclipse Community Forums
Forum Search:

Search      Help    Register    Login    Home
Home » Eclipse Projects » GEF » "One model - many edit parts" problem!
"One model - many edit parts" problem! [message #218444] Sat, 24 June 2006 12:21 Go to next message
kiril mitov is currently offline kiril mitovFriend
Messages: 128
Registered: July 2009
Senior Member
Hi all,
Maybe this problem has been discused before but I just could not find the
solution of my problem in the previous newsgroup posts and in
bugs.eclipse.org...

I have a class called VariablesHolder with tree method getInVariables(),
getOutVariables(), and getInOutVariables().
The edit part for the VariablesHolder is called VariablesHolderEditPart.
The method getModelChildren() of the VariablesHolderEditPart looks like
this:

protected List getModelChildren() {
List list = new ArrayList();
list.addAll(getHolder().getInVariables());
list.addAll(getHolder().getOutVariables());
list.addAll(getHolder().getInOutVariables();
return list;
}
Every variable is presented with an edit part. And everything works fine.

I encountered a problem when I tried to present the inout variables with
two edit part. So every inout variable must have two edit parts.
It should be possible to achive such functionality.

So to create two edit parts I looked in the
AbstractEditPart::refreshChildren and decide to override this method so
that when I encounter an inout variable I will create two edit parts.
But then I noticed the following sentence in the documentation of the
method:
"* This method should <em>not</em> be overridden."

So my question is how can I achive the functionality of "one model may
parts" when I should not override this method?

Ofcourse the documentation of the method do not stop me from overriding
it, but is there a way to solve my problem without overriding the
refrehsChildren method?

And if I am to override refreshChildren() what consequence should I
expect? Anything special?

Thank you in advance...
Re: "One model - many edit parts" problem! [message #218460 is a reply to message #218444] Sun, 25 June 2006 13:40 Go to previous messageGo to next message
Eclipse UserFriend
Originally posted by: lamont_gilbert.rigidsoftware.com

kiril mitov wrote:

> Hi all,
> Maybe this problem has been discused before but I just could not find the
> solution of my problem in the previous newsgroup posts and in
> bugs.eclipse.org...
>
> I have a class called VariablesHolder with tree method getInVariables(),
> getOutVariables(), and getInOutVariables().
> The edit part for the VariablesHolder is called VariablesHolderEditPart.
> The method getModelChildren() of the VariablesHolderEditPart looks like
> this:
>
> protected List getModelChildren() {
> List list = new ArrayList();
> list.addAll(getHolder().getInVariables());
> list.addAll(getHolder().getOutVariables());
> list.addAll(getHolder().getInOutVariables();
> return list;
> }
> Every variable is presented with an edit part. And everything works fine.
>
> I encountered a problem when I tried to present the inout variables with
> two edit part. So every inout variable must have two edit parts.
> It should be possible to achive such functionality.
>
> So to create two edit parts I looked in the
> AbstractEditPart::refreshChildren and decide to override this method so
> that when I encounter an inout variable I will create two edit parts.
> But then I noticed the following sentence in the documentation of the
> method:
> "* This method should <em>not</em> be overridden."
>
> So my question is how can I achive the functionality of "one model may
> parts" when I should not override this method?
>
> Ofcourse the documentation of the method do not stop me from overriding
> it, but is there a way to solve my problem without overriding the
> refrehsChildren method?
>
> And if I am to override refreshChildren() what consequence should I
> expect? Anything special?
>
> Thank you in advance...


What are you trying to achieve by having 2 edit parts use 1 model within the
same parent edit part? Perhaps there is another, better way to achieve
this.


--
Respectfully,

CL Gilbert
"Verily, verily, I say unto you, He that entereth not by the door() into the
sheepfold{}, but climbeth up some other *way, the same is a thief and a
robber."
Re: "One model - many edit parts" problem! [message #218475 is a reply to message #218460] Mon, 26 June 2006 09:40 Go to previous messageGo to next message
kiril mitov is currently offline kiril mitovFriend
Messages: 128
Registered: July 2009
Senior Member
Thanks for the reply Gilbert...
Whell, as I said I have in, out, and inout variables.
A variable of type IN is represented by one edit part that shows some
information for the variable. The same applies for an OUT variable.
But an INOUT variable must be represented with two edit parts - one that
shows the "in" information for the inout variable and one that shows the
"out" information for the inout variable.

From my point of view, and for the editor I am developing, It will be very
I mean very user friednly to use two edit parts for the same model and
this parts to be in the same parent.
So, for this custom case I am sure that having "one model - many edit
parts" is a very good solution...

CL [dnoyeb] Gilbert wrote:

> kiril mitov wrote:

>> Hi all,
>> Maybe this problem has been discused before but I just could not find the
>> solution of my problem in the previous newsgroup posts and in
>> bugs.eclipse.org...
>>
>> I have a class called VariablesHolder with tree method getInVariables(),
>> getOutVariables(), and getInOutVariables().
>> The edit part for the VariablesHolder is called VariablesHolderEditPart.
>> The method getModelChildren() of the VariablesHolderEditPart looks like
>> this:
>>
>> protected List getModelChildren() {
>> List list = new ArrayList();
>> list.addAll(getHolder().getInVariables());
>> list.addAll(getHolder().getOutVariables());
>> list.addAll(getHolder().getInOutVariables();
>> return list;
>> }
>> Every variable is presented with an edit part. And everything works fine.
>>
>> I encountered a problem when I tried to present the inout variables with
>> two edit part. So every inout variable must have two edit parts.
>> It should be possible to achive such functionality.
>>
>> So to create two edit parts I looked in the
>> AbstractEditPart::refreshChildren and decide to override this method so
>> that when I encounter an inout variable I will create two edit parts.
>> But then I noticed the following sentence in the documentation of the
>> method:
>> "* This method should <em>not</em> be overridden."
>>
>> So my question is how can I achive the functionality of "one model may
>> parts" when I should not override this method?
>>
>> Ofcourse the documentation of the method do not stop me from overriding
>> it, but is there a way to solve my problem without overriding the
>> refrehsChildren method?
>>
>> And if I am to override refreshChildren() what consequence should I
>> expect? Anything special?
>>
>> Thank you in advance...


> What are you trying to achieve by having 2 edit parts use 1 model within the
> same parent edit part? Perhaps there is another, better way to achieve
> this.
Re: "One model - many edit parts" problem! [message #218515 is a reply to message #218475] Mon, 26 June 2006 18:58 Go to previous messageGo to next message
Eclipse UserFriend
Originally posted by: lamont_gilbert.rigidsoftware.com

The most GEF centric way would be to return a single edit part, and that
edit part will have two children. One child will be the in and one will be
the out. The single edit part you return can have a free form figure just
like the other containers often do. So it is not seen but its two children
are.

You really can not have two edit parts with the same model since that is not
gefs architecture. There is a map that maps models to edit parts and it
would not work well if you did that.

The other alternative is to create two mini models for each in-out model.
One representing in and one representing out. So when the parent is asked
for all children, you return the ins and outs, and then these sub/mini
models. Which can be simple wrappers around the actual model with an added
method

class InModel implements MainModel {
public boolean isIn(){ return true;}
}
class OutModel implements MainModel {
public boolean isIn(){return false;}
}

Its probably adviseable to hold onto the instances and return the same ones
each time else GEF may dump and recreate the editparts when it does not
need to.


The models you give to your views do not have to match exactly your true
models.



CL


kiril mitov wrote:

> Thanks for the reply Gilbert...
> Whell, as I said I have in, out, and inout variables.
> A variable of type IN is represented by one edit part that shows some
> information for the variable. The same applies for an OUT variable.
> But an INOUT variable must be represented with two edit parts - one that
> shows the "in" information for the inout variable and one that shows the
> "out" information for the inout variable.
>
> From my point of view, and for the editor I am developing, It will be very
> I mean very user friednly to use two edit parts for the same model and
> this parts to be in the same parent.
> So, for this custom case I am sure that having "one model - many edit
> parts" is a very good solution...
>
> CL [dnoyeb] Gilbert wrote:
>
>> kiril mitov wrote:
>
>>> Hi all,
>>> Maybe this problem has been discused before but I just could not find
>>> the solution of my problem in the previous newsgroup posts and in
>>> bugs.eclipse.org...
>>>
>>> I have a class called VariablesHolder with tree method getInVariables(),
>>> getOutVariables(), and getInOutVariables().
>>> The edit part for the VariablesHolder is called VariablesHolderEditPart.
>>> The method getModelChildren() of the VariablesHolderEditPart looks like
>>> this:
>>>
>>> protected List getModelChildren() {
>>> List list = new ArrayList();
>>> list.addAll(getHolder().getInVariables());
>>> list.addAll(getHolder().getOutVariables());
>>> list.addAll(getHolder().getInOutVariables();
>>> return list;
>>> }
>>> Every variable is presented with an edit part. And everything works
>>> fine.
>>>
>>> I encountered a problem when I tried to present the inout variables with
>>> two edit part. So every inout variable must have two edit parts.
>>> It should be possible to achive such functionality.
>>>
>>> So to create two edit parts I looked in the
>>> AbstractEditPart::refreshChildren and decide to override this method so
>>> that when I encounter an inout variable I will create two edit parts.
>>> But then I noticed the following sentence in the documentation of the
>>> method:
>>> "* This method should <em>not</em> be overridden."
>>>
>>> So my question is how can I achive the functionality of "one model may
>>> parts" when I should not override this method?
>>>
>>> Ofcourse the documentation of the method do not stop me from overriding
>>> it, but is there a way to solve my problem without overriding the
>>> refrehsChildren method?
>>>
>>> And if I am to override refreshChildren() what consequence should I
>>> expect? Anything special?
>>>
>>> Thank you in advance...
>
>
>> What are you trying to achieve by having 2 edit parts use 1 model within
>> the
>> same parent edit part? Perhaps there is another, better way to achieve
>> this.



--
Respectfully,

CL Gilbert
"Verily, verily, I say unto you, He that entereth not by the door() into the
sheepfold{}, but climbeth up some other *way, the same is a thief and a
robber."
Re: "One model - many edit parts" problem! [message #218530 is a reply to message #218444] Mon, 26 June 2006 14:57 Go to previous messageGo to next message
Eclipse UserFriend
Originally posted by: none.us.ibm.com

Having two editparts for the same model is possible. Can you be more
specific about the problem you are having. Perhaps screenshots or mockups
would help.

"kiril mitov" <kiril_mitov@abv.bg> wrote in message
news:1373761bb88a462728c4a8f64bdc2d63$1@www.eclipse.org...
> Hi all,
> Maybe this problem has been discused before but I just could not find the
> solution of my problem in the previous newsgroup posts and in
> bugs.eclipse.org...
>
> I have a class called VariablesHolder with tree method getInVariables(),
> getOutVariables(), and getInOutVariables().
> The edit part for the VariablesHolder is called VariablesHolderEditPart.
> The method getModelChildren() of the VariablesHolderEditPart looks like
> this:
>
> protected List getModelChildren() {
> List list = new ArrayList();
> list.addAll(getHolder().getInVariables());
> list.addAll(getHolder().getOutVariables());
> list.addAll(getHolder().getInOutVariables();
> return list;
> }
> Every variable is presented with an edit part. And everything works fine.
>
> I encountered a problem when I tried to present the inout variables with
> two edit part. So every inout variable must have two edit parts.
> It should be possible to achive such functionality.
> So to create two edit parts I looked in the
> AbstractEditPart::refreshChildren and decide to override this method so
> that when I encounter an inout variable I will create two edit parts.
> But then I noticed the following sentence in the documentation of the
> method: "* This method should <em>not</em> be overridden."
>
> So my question is how can I achive the functionality of "one model may
> parts" when I should not override this method?
>
> Ofcourse the documentation of the method do not stop me from overriding
> it, but is there a way to solve my problem without overriding the
> refrehsChildren method?
>
> And if I am to override refreshChildren() what consequence should I
> expect? Anything special?
>
> Thank you in advance...
>
>
>
>
Re: "One model - many edit parts" problem! [message #218595 is a reply to message #218530] Tue, 27 June 2006 11:59 Go to previous messageGo to next message
kiril mitov is currently offline kiril mitovFriend
Messages: 128
Registered: July 2009
Senior Member
This is a multi-part message in MIME format.
--------------070209070603070608010606
Content-Type: text/plain; charset=windows-1251; format=flowed
Content-Transfer-Encoding: 7bit

I have attached a screenshot.

You see the big rectangle - on the left I must have the in variables -
like var3, on the right I must have the out variables - like var7 and
var 5.
And if I have an inout variable in the model I must create two edit
parts - one on the left and one on the right.

This variables will be connected with other elements from the diagram.
The idea of an In variable is to have out connections. The out variables
have in connections. Now when I have an inout variable I must create two
edit parts - in part and out part so that the in part will show the out
connections of the inout variable and the out part will show the in
connections of the inout variable.
Hope you could help me ...


Randy Hudson wrote:
> Having two editparts for the same model is possible. Can you be more
> specific about the problem you are having. Perhaps screenshots or mockups
> would help.
>
> "kiril mitov" <kiril_mitov@abv.bg> wrote in message
> news:1373761bb88a462728c4a8f64bdc2d63$1@www.eclipse.org...
>
>>Hi all,
>>Maybe this problem has been discused before but I just could not find the
>>solution of my problem in the previous newsgroup posts and in
>>bugs.eclipse.org...
>>
>>I have a class called VariablesHolder with tree method getInVariables(),
>>getOutVariables(), and getInOutVariables().
>>The edit part for the VariablesHolder is called VariablesHolderEditPart.
>>The method getModelChildren() of the VariablesHolderEditPart looks like
>>this:
>>
>>protected List getModelChildren() {
>>List list = new ArrayList();
>>list.addAll(getHolder().getInVariables());
>> list.addAll(getHolder().getOutVariables());
>> list.addAll(getHolder().getInOutVariables();
>>return list;
>>}
>>Every variable is presented with an edit part. And everything works fine.
>>
>>I encountered a problem when I tried to present the inout variables with
>>two edit part. So every inout variable must have two edit parts.
>>It should be possible to achive such functionality.
>>So to create two edit parts I looked in the
>>AbstractEditPart::refreshChildren and decide to override this method so
>>that when I encounter an inout variable I will create two edit parts.
>>But then I noticed the following sentence in the documentation of the
>>method: "* This method should <em>not</em> be overridden."
>>
>>So my question is how can I achive the functionality of "one model may
>>parts" when I should not override this method?
>>
>>Ofcourse the documentation of the method do not stop me from overriding
>>it, but is there a way to solve my problem without overriding the
>>refrehsChildren method?
>>
>>And if I am to override refreshChildren() what consequence should I
>>expect? Anything special?
>>
>>Thank you in advance...
>>
>>
>>
>>
>
>
>


--------------070209070603070608010606
Content-Type: image/png;
name="VariablesHolder.png"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
filename="VariablesHolder.png"

iVBORw0KGgoAAAANSUhEUgAABQAAAAQACAYAAAC+k/RDAAAABHNCSVQICAgI fAhkiAAAAB50
RVh0Q1JFQVRPUgBnbm9tZS1wYW5lbC1zY3JlZW5zaG90HJc3dwAAIABJREFU eJzsnXd8FGX+
x99Tdjeb3fRC6L2EroigIqCn4mFFrCB6KKKegj9RUYqAFQUFGyqKir2cwqHi WU45QVAQEQSl
95aE9E22TXl+f0x2SUIaEMAy79cLMjvPzNN2ZnbmM98i5efnC2xsbE4o73/6 3+PSjmmaIOrp
lJckJEkqW5Tqp04bGxuEEAQNBynJsZQWFdnnl81fhrVLUsnJ8iMROeal6D8J rN8d5GiZtVYu
O0ekiusAJLlsS5nYlAOc1M9/HEfzx+GWYYMBE10XqKqCECaSJBBCwTRNZFkg SQqgU5RXTEJy
MkgmQgjA2kZRrGUhTAzDqgdMTNPkpbcXnNDx2Rwbzjujx4nuwmHx5dKfALjl uith+3Zo0QKA
Sy99jwULNta4b7duDVj97/OhZcuKBT//TP//W8233+6ssPqOO3rx1FPnw9y5 MHx4xX0SEqCw
kBff/NcRj+X3MveROf0zMfuZJwC4efTdJ7gnB/m9fN82x5akpKTj0o5qmuZx acjGxubEIYQg
J2s/b77yIls3baiXOk/q2YtLLr+G9IyG9VKfjY2NRaGSTufOGexZ9wsJjZpS EtIIA2p+9lHV
K4Tg8893sVm42SnF4WrTBNnrRuQVou/NpXTTHi7IdPP3cxrXz0BsbA6TnCw/ ub6fiAh5kiRD
VNCzhD5LAJSRJMVah4wkyWXrFWRJLre9YtUhZAqDJZyE90QO73ePLIMQEkJY L/aEECiKjGka
SJKEphlsWvE9mWf0xRPnQQiQZSm6nyUayqiqAVjvG4VQTvCobI41rVu3PtFd qJGtW7ceunLg
QHA6Yc4cZs4cwPDhLZk162e++urofmcjvP32Whr/7xPuyf/k4Mp27eD990Gx z4nfI7quM+3B
CZSWlGAaBo9Oupe7xj+Aw+m0fnvsl7E2x5jjpcuphmEcslIIUW8HeX3WZWPz V2Pb5o0sXPBR
nbcfOnwkSckph5xzQgjefOVFhl51BYMvH4ymhYFKlnsCBCbCFAghEMLENAW6 rmEYOrpuYOo6
mmFg6DpPPPEEH737BrfeeW+9jNXG5q+OEIKcUDyp3ZuwN2BS1LwzK7bns21P ETv3FuMrCuDx
ODmtZRxtEjSaxtftt1UIwedf7OLT34oxT2qNs3E6McmJuFo0whXnQcsrxJ/s 5Zx+ybh8v7Ly
m3koaiYn9c08xiO2samM4KAV38FPLpfKye2a0r5hEn5doUgTFIYhHNbBNAj4 QxQVBvD5whj6
QfvBQ+u2qYmKtw4qkhQGVGRZRtcNJFOmZO8e9u/eTcv2HVDV8vuq6HoYVVUB Gcv6z35o/qvw
8ssvn+guHMKIESOqPv4WLYKrr4bsbBgxgpbPPUeDc0+mTZtmTJ++nNdfX3PY bT300Fl8990u
vvjCEhtzc/3szd0G7LY26NYN5syB7t2PYkQ2xwIhBIZh8Nik+8jLO0A4FECW JIKBAI8/MJ4x
46cQ6/Ha1zKbY05VutyxoN4EwNWrV7N48WIkSeKqq64iPT39iOuysfmrI4Rg y6YN7N60grkv
jybGpdW4vSlMtm3LYtoTr3LexUNo2LhJ5QrZumkDl19xOUF/Plu2bkfXdGS5 zLpCsrYxzTLh
zzAwDAPdMNA1DU3TCIfDhMMh3O4YUpKS6HXqyUyfMeuYzYGNzV8FIQSrN5Sy 7Otd3PbiMACy
C/xs2VPIrn1F5OYHSE6MoWXTRFRFolhVWBWEvZj0SDVwhANV1ttzzQxWdL2T Z2f9xAZTQTRN
B9OgQTCPtuFC1gVSML1uqw+BEIt/DRHOcjGr3Q5GDNrG+s0rWZHdl3Bi8+M2 FzZ/bSSUqPgX
sf7r2jaDay8+lYDLRVZhmEB+kLyt+eh62e+UpqMjcHpUEpwCf6lGuFQCcdAt 2EKuplWbCIYB
qhqZMxPDkMo+myiKRGkgQGluIUUFBei6XubmK5VZDZrRfXXdWlYU657C5q/B TTfddKK7UIER
I0ZUuf7Sp7J46YkXSL9/DKxZA3fdRWzDhnS68Ubuu68PffumM2/eOhYu3F/n tj75ZBP79/sA
uOqqTng8Tj55NZ9WZ3Vn9OhekJoKp5xCOBxm+7p1tH/wQRg8tF7GaXN0GIbO Y5PHs3/fHhAm
774+nYDvAP+4bRpZ+/Yy/cH7uXfKo8S43bYloM0x5XcrAAoh+OKLL5gxcybD //EPrr76ar74
4gvuv38SJaUlSJJEQmIiQ4cMKYsNcmLjgzVr1oydO3faJ2sl7Hk5iBCC5s2b s2vXrhPdlQp8
/sl8Xn/lfmKceplAByDK/lh2EdFlAa1aJnL+eftY/v13XHz51VXWGQ4F2bJ1 Oy+98hqyoqCq
KrIiR4VASwe0LABNw4rdoxs6hq4T1jTCYQ1nrJu7bvsnmqYfl3mwsfmzIoRg jw8+XeZHzSvg
nocvo1g32bmzgPycEvz5fvIKg3hiHLjcKk6HQlgzyEhzY2ompYbJ3NWFDGwG jTyH/m47t67H
sWICW/L70qu9l1I1m6uU7xlubmfQ2n7ozXtg5hRi+krR/UHMuFi6+koIOxoT zsml4ykxNPn5
Bz7auJnShGY449udoJmy+esgyuL8WcfyOb3acu01pxOMcaHlB3GU6BiGJUaF QjqaZqDrOpqm
o2saYU1DSBo4DUTIjYRS9nspY1sA1o7lyivKngNE2b2BQSTOXygYIlx4gNJw GDABFUwDWZYw
TWs7MMr2E2XCoH2fafP7YsGCjSQnd+fmi4fStaEX99tvw4IFUFBAh3HjaHJl H1q1SiY+/lfe
fXddnepcsWJvdHnHjkJcLpVtJPNiViqevGYMGZBJ3vLlZLz1FvG7d1vt2QLg CUUIQSgUZOqk
+8jJ2o8iw9cLn6d9wpeYuo/HRrXk4Tk7ycvN4ZH7xzL+wcdwu2ORbBdum2PE 704AXLVqFSt+
XMmwYdfy0fx/k5Wdw5YtWykqKmLGU08T0jQcThcOh4POnTpjmmbUj/lEi0yR MbZq1Yrt27cf
kzZatmzJtm3bTvhYDwfDMP5Q/T3W6Lr+u5uPPTt/IS4uIeqOi4i451q33hF3 XdM00bQQpu6r
tc5QMISmG1w08AKaNW2GIitI8sE3WqZplrVnousGWlgjEApQWlLKokXfsHnf PoK6hq7XbJVo
Y2NTM0XCyZIs0IuyuXVEX9q0SuXFT36lJLuUuAQnP+8rxNBNiHPh9ToJhXQa pntpkuZFAPty
SlAUiS/2KAxsqJGRUOY2KQQx+zbiy9Hp27CU7EtzcCVrmIVbMDev59Vtifx8 2tk4NQ2pOAhu
B6JTC0xh8nNJCT9/D08uWME7Y/dx+tmN6blzB4WtVH7LtQVAm2NNJJYfnNS6 EUMG9SQY48Lh
UFAUOfo7pciiTPzT0DQdrcxSXSt7UaWFNXQ9QIySiirHIEnRNCI2NVC1C7CC JeYJdE2nxOcj
WdOIWlaW/ZFlFV03UFUrFiBYiUN03X5ZaPP747XXVpN/SQsyY5ty/WAvHZQ5 sHgxSBLe/v3p
37s3iWPPoGnTWNau3c2+fTVbsl51VSc2bMhlzZpsli8/KAauX5/L9OnL0LZs 5pL176IuWIAd
Ofv3QcDvZ+rk+yjMz0dV4H+fvUBz9+eYegkA11zaAocq8fCcnRQW5DN18jju mvAACQmJSLL8
u3tmtPnj87sTAOe89horV/5EnzPOwB0Tg+pw0KVrV7Zt306xz4fqcABw7rnn cvLJJxEIBKqt
q3JbL7/8Mk888QR33303I0eOrMfhWUSEri1bthz1xAohaNu2LVu2bKmwfsuW LcctcGNdaNOm
TXTu4+Li6NOnD1OmTCElJSW6zR9FAIwEF5ZlGY/HQ9OmTenbty833HADycnJ Rz2GiKVqdd9f
mzZt2Lx58wmZK10L44pJQtNCyKZRFlDbcqmRhUDIBwXA1as3EAoGsG7Wq8YS 9XScDgctm7eg
xF+KqqgoihK1MjTK3H81TSMUDlFSWkJxUTF5+XmoTgeKomIaJuFQ+LjNg43N nwkhBK74BFZn
OQnm7CVr2Wec8dIQpr70PWuWbeb8C7oxf3MW+QdKMIM6uWvzyFF00rq2IiPF w8rfshGmIKQb
mKYgENL51xIfoy5MiLYh7dhIilcjTikkuOIrgjIoDieK6sSzvRRPtyJKwmFk jwMBmIaOEdah
WSMIaex0ujn7tX0s0z7n5P4Z7Nv7Pb/R/4TNmc1fCZkEt5Orz+rI7mId1Qyi KDIBv0YopBMK
hgmGtOrFv3LLQXMfKd4WZRlsbQvAmtA1DV+xH09cHE6nlcHXcgG2rAAVRSLs K6S0oIBQIIAQ
Brpu3T9IWPdPimIQ8huENY1YbyyKEskObGPz+2PBgr0sWLCXnBtO4oY+g+jW syfetWvhgQeg
b1+6T5hA20l9+emn7SxfXlRjXR6Ps+y8gV69GuNyqSxebGUG3rgxj/ce+4lb KMuG7XTCrbfW
61jatGlzyLNp+bLNmzcD4PP5eOaZZ/jqq6/IysrC6/XSu3dvrr32Wk477bQK +7300kvR5/Ob
brrpD/HMWBeEEASDAR6ZeA9FhQU4VMGX/36e1t4vo+IfgKrKXH5hM2JcEhNm 7aAgP48nHp7E
mHGTrXjrtiWgTT1TnS7Xpk2bI6pvy5YtVZ63VWYBLi+IfP7Fl3TsmEl6WjqK oqKqKhdeeAGG
EFx6ycWs+eUXnE4XSBJnnnEG06c9jr+0NFpHbQKgYRi88847TJgwgblz5zJ8 +HDkelbVTdOs
16QmkTp/72zatAmAvLw8pk+fzsSJE5k162DMtvqcl2OJJEnRsfj9frZt28b8 +fO56KKLeO+9
92jcuHG9jKMqQbT8cRxZPp4IJEp8eRzI2YYQgkAghM/nxzBMZEUizuNCVWV0 w2Tnzl0kJ8dT
uwCoWZaEWBaEWCF8kGSpzPpPoBvWQ1UwGMTv91NSWkJpaakl7AvLWjKs2RaA NjZHSsCTgkMp
pWDZZ9x30To2bPiVrSs3cXHCJ6zObU1+tg8zqGMGDCQ1joA/xPb/LEaV+2M4 YwgENUpLw6R6
Y9ifU0zszlyW/KDRp5f1kkfJ20Gs20qIIKsKEgrCNNC1AB1idd784iZWpbdg xsnjKEptA6YJ
YR2CGiQlgTMWsgRvf5zGyQ2200iOJ5S9FWd6qz/E74bNH5NIVt9+bRtRoEnk 5wVxl1o3xKX+
MEVFAYqKgpSUBKu1/DsoBIYJaxpOOY8EbwOwLQCrZf+27ezftR2H20ODlq1I SUlCUSRUVUWI
iAuwRjCoEywqwh8MYRg6bnesdT8iY2UANiWKDhwgZ/9+wgE/rTp1IC4l7UQP z8amRl599WeK
Bjdh4MBzOb3xKjqUllrWgIqCZ/Ro+qam0veePrBjR411RGjRIhGPx8nixTtp 2jSehg3jyF2R
w1eeTpxySipJjRvDU0/Bm/86DqOryB133EGzZs146623aNSoEYWFhSxfvpxn n302KgBGDAve
eecdJk6cyGuvvcaNN95oGQv8CQj4/Tw84W4K8vNwx8j89L/nSTK/4sCBXLpe sqTCttu+OouL
BzQj3gs3PbiNwjIRcOzkR2xLwHpkwYIFvPPOO6xbtw6n08lpp53GxIkTadSo EVB9pvEqM3zX
gBACTdNYu3YtN954I6tXr652u/fff5+JEyfWyQgoYiBWWSuI9K+u7daky63f sou58/5b6xgB
CvMPMPuxe6vVeqq1AAQoKi5m5jPP0qPHyYy69VbS0tNp374dLVo05/wBAwgE ArRs0YJx940l
NSWV3r16UeLzVRBSahMA//e//5GUlMQ111zD/Pnz+fbbb+nbt290n8zMTMaM GcPcuXPx+/0M
HDiQSZMm4XK56lQOB9XUjh07sn79egA0TePJJ5/k448/Rtd1br31Vv7xj38A sHv3bh577DGW
L1+Oruv07NmTqVOnkpqaSmamlRWxbdu2AGzYsCHaj99++w2AUCjEI488wuef fw7ABRdcwLhx
43A6ndF+TJo0iTlz5pCTk0Pbtm159NFHad++PQBLlixh+vTp7Nixg/T0dEaO HMlVV11Vw9dc
NZGDKCkpiXvvvZezzz67grIcWa5pvGCJPZXnavjw4dE6nn76aT766CNKS0s5 ++yzefDBB/F6
vQAsXrz4kLFceeWVh32xjLjnulwuMjMzyczMJC4ujpkzZzJt2rSj6kvl+Vq7 di2jRo3ihhtu
YOrUqdGTWpKkw/qOazsu64JpGpimgRBWdt7i4lKEaRITo6IoDhxON4YRwjQP /mDXhGFYLr2m
EGi6RlgLYwoTxbDcgPWyB6pAMEAwEKS0tJRiXzHFRcX4fD6CgWA0W1ZYsy0A bWyOlKXbfCz5
6leuP70AU2vAlj3ZNO7UjMLUu8n5aiE3xyyisacEI6MxIWczfliXxY78EIXf h+lx9TC+XbUL
lwmKHMZd7Me3Yx8rMaIC4Jn6MqRyOQ+sa65AUp00z4xH7TeEBRslikJOKPZb 4l9YhwP5kJML
aemECku4pncuQnIj5RrE7vgGPb3ViZkwm78GkkBVZLpmJPFLVhAl1sThsCzU A/4wRUVBcg4U
EwqFK4h/WriyFWCYcNhazgvvI8HTACTbEq06lnzwLm37noXqiSMUCmGaJori Qtctyz9JEigK
aH4/orQEn8+HdQtpoijKQZFQCJIbZxAwNNZ9u5i83TvoPeiKEzw6G5uK9Ot3 aGKr3Fx4441N
yP/oQ4fJGfDcc9aLsaeesjL39ulTY52dOqWRm+snO7uU99//Nbq+Y8c0+vRp xhMbc3n9wkk0
ndiVpA4d6n1MdeWHH37gueeeIzY2FkmSSElJYeDAgQwcOLDCdt9++y3JyckM GzaM+fPns3jx
Ys4666wT1Ov6QQhBQX4ej08ZR3FREd5YhV+/fwGHbwGmEWTbHj8Asx/oDMDN k9exNztIq6ax
nH1mC955VOafU3eQnV/Ao/eP5b4pU0lMTvnTCKMnkrvuuovbb7+d559/HkVR eP311xk9ejQf
fvghcKjQ9/PPP/P4448fUVsdO3as1ahn6dKlFYym6kpNgmRd2q1Jl1v161a+ /G5VnfoRKi2O
1nfYAqDL6SSzY0f278+hSdMmDL9uGD+s+JFvv/uOLZu3kV9QgKIotGrRnMGD LiE/P69KC6qa
xJ533nmHq666CsMwuOqqq3j77bc544wzKuzz448/Mn/+fIQQTJw4kWeffZY7 77yzzuVViV7P
PvssGzdu5IMPPiA2Npbnn38+Wnbbbbcxbtw4pk+fjqZpzJo1i6lTpzJt2jTW rVtHly5dWLdu
XbV1P/3002RnZ7Nw4UKEEIwbN45nnnmmQp9++OEH3njjDeLj45k7dy73338/ 7777LgD33nsv
kyZNol+/fuTl5TF79mwuv/zyauewOsrHtDMMIyrcVO5vTeOtba5eeOEF1q1b xwcffIDX6+Wx
xx7jiSee4P777692LIMHDz5sAbCysCWEYNCgQVxzzTXR+DIvvvhilX2ZOHFi tX0pP6+6rrNo
0SKmTJnClClTOOussxgyZEiF7zvSj+q+4zFjxkTrq+24rAtCgCiLpymEicPp wOtJwB3rQpgS
YS2AqYmo5Z4wa76waLpOOBRClhUwBcmJyfj8PoLhIMIUVjB1XSPoD1oiYDiI pmuYwgSJsoQh
kmUBaLsA29gcEUpKBrtXFhDespGzLmxB2GiHs01zVn/xGql5e3mwdwG6kUzL 1j1om9kZGRO/
v5SlK39gwTdLmLf0FBS3FyMQpEFGInuW/IZwuDigqwDELvuEvT8Lmp9stSfJ MpIsIce4UeIS
SIhP5OklG5kT+htkOMAXhIIi2LwVkKCwCMImbM7Bd5EGMR6QTHomZvP9iZs2 m78AEgrtGiQR
iI2hxHShSjKqFf4W06Eix8eQGqtaVuzReLVG2bIoiz9tROPYCtNEmAahAg97 95TU3oG/KJqv
kB/ef5f2Z5xJh06dKJbB6YxBdSmEJRVZVpAVGb2kCLQQYV0j5C8h7FQwAxpC NgmFNMIBH76C
ErI2bWTvkm9xtGzB3j17TvTwbGwq8L+nuteyRRtL+CvP6tWwb1+1e9x440ks WrSDTz7ZRIMG
HhRFZt8+H8uW7WTnzjwuv7wjc+ZcjGmalBYX49m27egHcgT06NGDCRMmcO21 15KZmRkVAivz
zjvvMHSolaRk6NChvP322394ATAY8PP4lPGU+Hx4YxU2LH8RufDfCDMIQJe2 caxf2A93TNUZ
4089pQnP3Kdw78zt7NhfwrQHJ3DHvZNIz2hohUI4jpaAEYs4SZKQZZn09HT+ +c9/MmTIkArl
ESRJqtGSrbybeCgUYurUqRQUFCBJEomJiYwfPz5q5FJVKLTy+5cvF0Lw6aef cuedd9bY/rBh
w7jjjjui5SNHjuSFF16odvxz5849orBxkZBwEeOeyggh2Lx5Mw8++CBz585l wIABh5RXNf6j
bTdCTbrchf1Ppk/3VtFM1DX927VrF6ec8sbhC4CSJKEoChPvG0uxz8fWbdt5 6rkX2LJ1i5WM
oBx5BQVs2r6dmY89SnJSYpV1VdXGnj17WLduHU8++SSGYTBgwABmzJjBrl27 aNKkSXTbsWPH
kpho1XvPPfcwcuRIRo8eXefyqkSvjz/+mNmzZ5Oenh6tIyLufPTRRwcnSFW5 /fbbOf/886us
pzyRdQsXLuSVV14hIcGKx3Tvvfce0qcJEyZEy6+77jpmz54d3T8mJobs7GwO HDhAw4YNmTRp
0hHFLoyIQgUFBcycOZPevXsfMgZJkqodb2Q+qpqriKA4b948nn/++ai14KhR o7jyyisZN25c
tWM5EvfpqhJ0JCUlUVhYGK0v0pe0tLQKfRk/fvwhfcnIyIjOa+TEevPNN5k7 dy7PPfccHTt2
rNDP8u0LIer0HY8dOzZaXtVxWRcMwyQc1giFwlbcMKdMOFxMKCSiVn+WsGsS DusIUfPcCkMn
HLZcd0qDfi4fMJAdu3awc9dONm3ZhN/vJ6yFCYVChMNhwuEwwWCQYChIuMzi wjRNDF1Hsy0A
bWyOiPW7Cli78FcSRZCOvS8gLq05Lz37LnNmDOfXT98mGEijYfMmtOpyChgh RKCY2JhSzj3r
70jSf1n+zR48jXqweelK1obAdLhRk5JJdEvIajKrfal0PxjuFUlVwBmDX7hR ceELq2SmOSAn
FfwG4AddQEkplPpBC4Pi4tRWhcS5HaCqECvRra1kC4A2xxhBSqyT0tIwRQVh DMPEMMqy/FbK
9hux/AtH/kbcf8us/w5aBeq0bNyZxGTPiR7c75azR9zGZ6+/xjdzX+HbsB+3 J44Et5e4lGRc
3hhiXLE401JR4pIwdI3CvXv47tVXUIKl+EsDhHxFFBQWU+orImCAOzGR9E6d SMrsgmK7x9n8
3jjppHqvcsyYL6PL//hHdxISXEyZ8i0DBjTm4YdPs7y8DINwbi6/LVlCzyuu gDc+qPd+1Mas
WbN45ZVXeOCBB9i+fTvJyckMGDCAUaNGER8fD1ieYb/88gvPPfccABdeeCHT pk1j9+7dNGnS
5A/r8vrCU9MpLfER45RY9/1LyEXzouIfQIxLIcYFjft9HV0nV/CkkDmjZyOm 36Vw84MbyC8u
5uXnZnDXhAeIjfUc15iAEUEPrOf5lStXctNNN0UFwIgl2pHEsZ85cyYZGRlM mTIFgNmzZ/P0
009zzz33HHY/N2/ezAMPPFDrdnfddVeFz99//33U67I8QgiysrLYsWPHMRGk c3NzGT9+PC+8
8AKtWh1/j5eaBECgTuJf5F+kvsMWAAFi3W6KfT7uf2gqBYWFIKsVToaDPVJw x8Ye0vGaBMAP
PviA/Px8evbsWWFg77//Pv/3f/8XXZeRkRGtt2HDhuTm5lZop7byqpYPHDhA o0aNquzv2rVr
efrpp9mwYQN+v2UOLMtynQXAvLw8GjZsGP3cqFEj8vLyKuwTFxcXFZicTmc0 8QLAtGnTmDNn
DrNnz8blcjF27NjDPsiFEHTt2hVJkvB4PPTu3Zvx48dXOYaaxiuEiM5VVSJc Tk4OgwYNih6c
kYMuMraqxtK/f/96sQDMzs4mISEhagGYk5PDpZdeWmE7WZaj5bXN6xtvvMEl l1xC+/bto+1V
F/Mx8h1H1ke+4/LbZWRkRD9XdVzWhWAgwNatOWzfvsMS+6xOgQDBwYzAVtw+ gdOpkpwcV219
umEQCoXQdYOAP8A3i7+hY4eO9D+zP50yO7Hy55Ws+nkVJSUlGLqVCCQYChIO h9F1HWEKTFOg
mwaaZmf2s7E5ErKyfZhhnbCzMbIzEU9SAy6/7DS2bd9OUqcehAsP0KTH3yBG QQoUQEwCkhZk
54ZfkWMa08TtIys/QFiYeE1wpHjRNYO4BDeb9xfRWikkVHqwPSOk8fM6A3+g hK/dbl6SOqB4
k6CxBmErYRemgIymsHYVhENQmEeTltvIjHeCpIAs2O8Kgq372xxTFFyyguZy 4WngiIa/iFr0
CRPTFIhoaIyD64VpYpZfV/YXYeI74KAoP1h7839RGjRrxoU3jWDdqaeyceVK DmzaxPZ9+zB3
bEI2TTyBIKo3juQevSGkUZJ7gDUrl+HPy0dzu5G9CagZjVEzmuJJzyClaVMa Nm9Om7ZtadK0
Kfy49kQP0cbmuPH440sBuOOOXjz11PkHC9auJeakk+hZzX5HQ+S5rXwc/YhV tFz24C5JEgkJ
CYwZM4YxY8ZgmiZbt25lzpw5jBo1itdffx2wrP/y8/Pp1KlThTbeeecdxo4d ewx6f5yIeDg6
IM5VRLCw+t+EmeM60rKJG6ejkughSbRrnUjDVJW8ohBaOExJiQ+XKwb5BLoC l5SUHJLE5Uj5
7LPPKhgHXXbZZQwaNOiwBEAhBCUlJYwePZpHH32Uf/7znzVuHwnXJYRg0aJF TJw4kZkzZ1a5
7VtvvcUNN9xQ574cDpMmTWLatGnVin8RS77qaN++Paqq0qVLFyZPnlyliFkT 9SEAyrIcPeeP
WAA0TZPX3/0XRaV+JNVRZWdlWebyQZeSlBBPcXFufsA5AAAgAElEQVRxtXWV JxQK8cknn7Bg
wQIaNWoU3Wbv3r0MHz6ckSNHRk1Nd+/eTdOmTaPLKSkpFSaotvKqllNTU9m1 axfNm1eMAyGE
YOzYsdxxxx2cdtppeDweAoEA/fv3r7MAmJKSEn1LArBr1y6Sk5PrtL8kSWRm ZvLkk08Clg/6
Qw89RN++fQ/ZviYkSeLHH3+sto/ll2sbb01zlZqayquvvkpaWlqF7zmyb32M Baq2AJw3bx49
e/aMimyRvkQsFSNEyiN9EUKwbNkyHnroIc4888zodrNnz+bWW28lNjaWoUOH VmivsgVgdd9x
RGwEKpRXdVzWBUVV6dmzK927t7cegsB60Cmz/BOm9dkwTHJyssnOziHGpVY/ j5pBIBhEkqxx
rFi5gg0bN9CkURPOOfsc/tb/b+zevZtSf2l0rA7TEXUf1zUdyR+wLAB1OwmI jc2RkOgPIumC
C85KZF2+h7NbQNPOvcj9+nOS27RDS2hCbIp1HQuh8uOSLyjK3kXjBvGc3LsH PUv9fLlJJbFR
Q9IbxZG1voigUJGdKi6nglOECZRLWBgIgeqQSYyRubFhPt8UJbDF2RpKNTxy KR1ii1hdkozh
D0M4DIFS0AJc0FfDbapILit+4G/+EFR/ebGxOWokhPV/ud840/rv4DoRcfe1 fIMj4S/M6Drz
4HpR5j8sgZ0FuHpkRaJB40YkpTWgZ5/T2b8vh9wDB8jatY9AuJSCnTsp/HIh +wsKSVCdqA4n
pTFuXP3Po3G7DngTU4jxxNAwPZ20hg3JSEsjPjkJl8uBnXzF5rjR7UxYs6T2 7Y4Bb701iIUL
N/Puu+sYOrQ5d9/dm/btLTfM/Px89n/4IZ0qWTnVJxkZGWzatIkOleILbty4 kYYNG1a5jyzL
tG3blilTpnDyyScjhCAUCjFv3jwWLVoUfbaOeO0NHjyYO+64g5iYmGM2jmPJ iNvvZPLYOyjw
Beh4+n38tmwawexPqtw2I8VJz86Jh6w/kFvKvU9sZN3WEKqq8rfzL6zgTXa8 qJwZ1u12H3FM
vKrqS0lJqbCcm5tbYfuqXIwrM27cOEaOHMm5555b5368+uqrbN68mcmTJ3Pq qaceUh4MBlm2
bFmFkFv1yZdffsmXX35ZYV2bNm1qdaEu7+Lr8/l49913GTNmDP/5z38Oq/2a BMC6CH/1ZgFY
VOxj1/4ckNUqf8K9sbGMuH4Ifz+7PwcO5BxyAlQnAH7++edkZmZWsJICaNCg AR06dOCLL76I
BiR98sknmThxIkIInnzySQYMGFBhgmorr2p54MCBTJ8+nfHjxxMbG8trr73G qFGjAEucVFUr
4/GePXt4/vnnK+wbFxfH1q1bad68eZWi1znnnMOMGTOYMGECQgieeOIJzjvv vDoLiJMnT+bG
G2+MWt3pun5ELsBViWZVtVfTeIUQVc5VxJX10ksv5ZFHHmHMmDFkZGSwY8cO 5s6dy8MPPwxY
SnrlsdTWr6qIHCOBQICdO3fy2Wef8fXXX/PSSy9FRbfq+vLQQw8BVc9r+WMv PT2d559/nttv
vx1N0xg2bBhgfd/btm2r8H1X9x2Xr6+247Ku4w6Fiinx5ZZ7+Ik8AJnR5XDY 4KdV22jQIAlR
w822poUIhaw3VgF/gL+f93fSUtOQFZlVq1exdt1aduzcQaeOncqs/SwLip27 drKjLPuZ5ZJl
2haANjZHSOuW8Yisn7iwRyOamZuBxgB069ufVV99Ro/zL2bNd0so2L8XRffR uXt74k5qjtCD
YIRJaZxBw2ITX248DlUhYMh4E2LY98t20i5oQZEkU3IADB0UBzgdEgnxKopL IcWh85+m7/FB
6Ul4HQZXNtiLNz6e3U1Op/erbop1A4KlYARo0thAMp0QkKAJuBznQMGJnTub PzmSgmaC7PNz
4ICGrmuVsv3qaOFwJbffsoQfkWQguoYW1q19dR1dN+jY+hTS0pNP9Oh+96iq THx8EvFxCbRt
04pwT4NwOMTu9ev593eLcHg9hIWJ5HQiu9zEpaZy9oABNG7eFLfThdPtQpYl ZFnFNHUkSQEO
//7Vxuao6XZm7dvUIxMnLqKoKMjdd5/OqFE9aNDAYwngH39M/IQJuAsKoKQs DqnXC0uWwNrN
9db+kCFDGDduHJMnT6Zjx44ArF+/nilTpnDNNdcA1jP50KFDGTp0KKeeeirJ yckcOHCAV155
he7drbiIn376KV27dq0QikuSJJo2bUqXLl1YuHAhgwcPrrd+H0+8cfGMHHUX Lz3zJNn5ATr1
GcuKrx5DKf6U8i8qfvu0LyX+Q69be/flM+bxLXy32oeiKPz9ksE0bNwEl9OF rFQdN/BYUdkF
eOvWrYwYMYJOnTodok8cbn2nnnoqeXl50ZBa5ZcjVE52UV48BHjppZfo2bMn l112WZ3aF0Lw
8ccf079/f2644YZq+z9v3jwGDx58zBKvVDWuw3GhliSJ+Ph4rrvuOp5++unD bv9IBMDKwl9l
bapKAbC6dMPlN1ZU9RC/dkmSOblrZ8bcOoJ4j5usrP1Vin3VCYAffvghN9xw Q5WunZdeeilz
587l/PMts+muXbsyZMgQAoEAZ5999iH71VZe1fLw4cOZNWsWw4YNQwjB8OHD o2Xjx4/nmWee
Yfz48aSnpzN06FC+/vrraPnQoUMZPnw4gUCAZcuWHVL3TTfdxIwZM6IXyHPO OYcRI0ZU26fK
60477TTuvvtu9u3bR7NmzZg8efIRxc2Lvv2uhrqOt6q5ihygw4YN48033+T2 228nNzeX5s2b
c/3110fLqxpLbf2qahy9evVClmViYmJo3LgxvXr1Yu7cuSQnJ0frqq4vkfKq +lL+RBNCkJ6e
zqxZsxg1ahThcJjhw4dX+L6XLrXM+qv7jsvXV9txWd1YK3w2RfSfiUl+XjEF BSUIwOFQSUmJ
w+mQME2BPxDGME1MYUTTflc+9zRNIxwKEdY0/EE/yYnJ/Pfr/7Jl6xZy83Kj ou+wa4YhyRII
SyCe9+957Ni+AwkJw9AxDSsOk42NzeHj8UBsk4Zs3qdz0dUHMwsKYdLhlJNZ 9q+3aHdSJzq3
tFwHhBa0xD8tQFFIZlOxQmjVXDTn+RhCkJQehx7WKAxouFQfrnMuwnzvLfJ3 QFo7UBVBehIY
qkIgaJK1q5TLGv6IS5Ep2SGYn5XPywd0ig80gFAYjxri4o4F9GnihNbNodAH nQr573slZNQW
O93G5iiQgPyATkx8DAnO2ApuvuVdfQ3ThPLJPoTlFmyWJQch4iosrGU13Jj9 e7NO9PB+91i3
DBKmAElRiFFlYmKcpKam4PDEYnpiCUsCxeHEEevB7Y4ho1EjUlKSAStBmCw7 AKNM/BNo2uHf
v9rYHFMWLTqy/bKyoExMq8w55yQzcGBnevZsTZMm8eTm5pL30ks0mjULdeNG VCDQuDE7J06k
Q+fOVmbhehQAR44cidvtZuLEiWzfvh2Ali1bcuWVV0YNGgBGjx7NG2+8waRJ kygpKSE1NZUz
zzwzKla8/fbbUYOYygwZMoRZs2b9YQVASZJo0z6TkaPv4uVnZ5CV6+eUv93H 919MJSbwuWU9
DnS8cDHfzO0V3U8IwZ69+dw8ZQNrNgdxOJ2cN/BiWrZuS0JiEp64OBTlxLlH mKZJIBBA07R6
ic948cUXM2/ePG6++WbAEt0qh9iqS5+uu+66Om9/3333YRgG7dq1Y/fu3Xi9 Xrxeb9QbNKId
fPbZZ7zyyiuH7G8YBr169WL06NEMGzbsmMWprC4JyPXXX89tt91Gt27dCAaD fPPNN0cUo7A6
XS5CbcJfZREwogdURvruu+8OUWLKi3ZCCJ6d+x6r12+MlrtdTm4eNoRLBpzF xs2b2bRtJ6Fw
mMw2LYmtZBZcWxbg2jjzzDNZvHhxtXXUVm5jcyI43ONy7TYrs1jkAidJEs89 OZX/u+UMklOS
KPEdwBSCvNxiXC4nsbEuJElBkmTCIT/hsM63SzbStGka+f40TjntXBRVjcYA MA2D24Zfw3vv
vslXXyzk57XriU9ORFEUZElGlqztBJbVn2EY6LphWVCUWVKENQ1D1wlJcNPQ q/nk3wv4YcUa
nn/9ffv8s7E5DIQQLPx8H85wHnMe70tSy04YYT8YYQiXYho6UqgEydQriH/o IYQWZPn3i5nx
1jp+Tf4/WrZO5pc1+wgWBYiLlRj/Tyu7WN7N19HDCNHhXAmXV0VWFSSnCzXG yfqtQRauC5NP
DL8pGXyndwa/H/wFIExevqSE1DjBxVd6kU+/BFZ/yi87AyyTJ5zgmbP5s7P4 owb4Apu4vX9T
vtxZQk5p8KD1Xx0TfpS3/NN1nVhXHGf2vBBdKuLvQ/6YrmvHmluGDQZMdF2g qiqW1Z4KhDFN
hYLde5h73xjkjt3J+3QeGZdeQWD9r3g7deWam28mMTEOy3VbRwgVSRJIkgxY LxVnv/XvEzk8
m2PEeWf0ACx3wJdffpmbbrrJKhjzCcy46Ph3qLwLcLczEaut+/CIVc+XS38C 4POPqrdKvfrq
zlx9dWfrwzffwDPPWMstW8Idd1h/y/Pzz3xXkkx6ukqzZsmWe+x77xGYOxdz 8+aD2X47dUKf
ORPfKaeQlJQEwItv/uuIhxqZ+xNNZE7/CESEFF3T2L9vD09NfZBAwE+C18my L58kUbOuUxu3
lxDWBF3aWTHVN2zK5daH1rNpVxiny8XFg6+iUZNmJCWnkJCYiMsVg1Qu9uKx oPL3XT4LsKIo
NG/enFtuueUQi7u6WrCVz+IbDAZ5+OGHKS4uRpZlEhMTmTBhAg6HFQqutizA M2fOPMRFt7Z+
VHYpjhA5d4UQLF68mPXr13PzzTcfUs/atWu55pprWLZsGXFxcdW2ExHwKhvc VLb8q67f1QmA
8+bN45NPPmHFihV4vV7OP/987r77buLi4g6r3f3791fZ5zPPPBOfz0dJSUmt wp8kSezcuZOu
XbuyZMmSI3MBFkLQr3cP1mzeFu10j5O6c27f3mzctIkX353HLxu2IBDcdPVl nNKxHUCF/Y/2
hKjOfLGu5TY2x5PqEoccRgUYpmHFMIoGMjcQpkl8fCyqw4UiK5imQNNCGEJg CGElBQE0zcr0
65Ktc6JyLMP4OC9dOrWlbdtMUpJTQbKEP8piKEWCBpsVAq9bZZgmxSWFrF+7 Cjueko3NkdOr
RypPPraRZ2fO4uxTk2nerhvJaU1xetOQ9CCSqWOGSsDUK4h/aAE8Hg+uuA4U 78tizd6dmEIi
Mb0RXRuUC2h96SCM999jyxJBu7MELi9g6phh6NjKRWFsPOOXNmNtSRuISYTQ RhIcQaafF2BY
NxU5TkU6qRdiw3bwCb7d1htHm2qHY2NTb5imxJo9flrHKewt1Mp+08oJgFqZ 269mCYG6Vl78
0yuIf4Zu0KxlW8sazb5NrJVIkj8hJCwrPhlJkpEdDtSYGJwJCQivF8XhxJ2S SlxCPKoqATJg
YpoysiwhSQYgYZpEX0Ta/EUYU3VMtd8TCxZsPGTdOec0oE+flrRokQjffgvz 58Nvv8FXX0Hr
1nDFFdXW16dPM8BKRhh67z0SXnwR9/LlAPgyMym95BIyevRAPfdcvJrGjvXr aTF7NvQ449gM
0KZKIs9DqsNBoybNGDvlEWY++gBFRYWc3G80K/77BKl8RvuW3ug+i5Zlcc8T m9ifp+GO9XD5
kOtITW9AUlIyCYlJqA7HCbnGVSdYVaamhBXVbed2u3nkkUcOq87y66qKz1db P2objyRJ9OvX
j379+lVZvnTpUi688MJoJuua6qnrnMCh/a5u/8suu6xGd+e6tluTC/DOnTvx +/01WvxFliMx
G484BiBAZusW9O15Mot/+gVTCNZs3MJnX39LYpyHbXtzMCSFGJeTU0/uju4v OURAtAVAm78i
RxLrEKzjORwOYRgGmhZm+/b97N+/zxLgKEsCYlKWEKTMas8w8fvDZe1qZXEd HcgOOeLTY5Vp
OpIkSE9JprggB19+DmaZ4GjoOrphVIg7aRiGVWaYmIYlRJqmwDBNAoFQvcyT jc1fDUmSSEt3
cfpZ7ZnxocbMORvo2mETZ/RI5Lw+KbRp0YL45Ca4XW7LKrCc+GeaBs2btuSH X1dRUrAC70l9
Ce/bgVGQQ+d+PaL1pw68jB///SE9fTobvtJp1kMiuZUCQmCaBqc3DLP46u1s KMphdUEaiW6d
sxoX4xImZpKC4/xWIKmIn9by2vIi1HPOPsGzZvNXQEJGkhRW7izl8p4pJDgV 9pf6y1n4aVYM
wDIxUNci1oDlxD/NQDcs8S8uNoEmDduW/Rbb94m1EXEBFqL8rYMJLifCk0CC 18u+uDgkRSYm
KZlYjxdFUTFNgSSBokQTbXLQ0MGed5vjxN/GHlESkKuu6sRNN2XSs2dT4let gscegy++gG7d
8I8dy1qfws++9txSUyXvvYeydCnSN99YwiFAr15Io0ahnHcepKVBVhbSc8+h 7NgBb78Nb9gC
4IlCURRS09K5c/xknp32CAX5efS78D4+//ABmji/QpIk/vWfPTw2ZzvZ+Tqx Hg9XDbuBpJRU
kpKSiU9IxFHmnmpz4lm6dCl3HcMkO8eLmgTAzp07H1F9RywAAgw650xUl4uv l6+myB/m+Q8W
4nSoBEJhJMXB0MsuJjHWTbavqNa6Docvv/yyRkuq2sptbE4ER3pcCtMsC3oe xjRN8guKKSkN
EggaZe7BZaJfZLmcFV6zZumEwzqmYaJrGqYwMYWgfPTOz/7zGfm52SiKSvR5 SFj/DGFiGlb8
QMM0EIbAwEQYZfGXhBlt3x8IEPDbAqCNzdFw0YWNKCoNsebrHaz+LYDuSuG1 j3Zz+51NSWY5
rRqE6NAyg6S4ZGIkS7gD+M+PJQSDQdBLKVmzFEyDVu2TaNayQYX6HfdMoujx ySQEBFu/09j7
i05KSyfeDAexiZbhX/v4EtrElFCcHSSYJ+E8xYXcxQlhH+Z/lvHLtgA721xP 1TkEbWzqHwmZ
QFjwv/XFnNYqgQUFRZa7b9TttzrxT7Ms/8rEP4fqpHunfjhUJyDZMlQdMAxQ VYEsCyIuwEIo
xLpi8Kalk5iSgjctnQSvF4c7FndiIiCXbS8hhIRpmigK5awSbG8Bm+NMHROA nHtuA9q0acSt
t/aiy/418OpX8PnnlvjXvTu/XfAP5rs7s2rLDra+uJJbymLTH8KHH8Ijj5Cy bh0AxR07Ik49
lYSLL8Y7aBBKIEDu6tWkvv026hNP0LS+xmlzRER0CUVRSU1rwJgJD/DUYw+S dyCHv18xiaen
38PyRa/xxscHKAmYeLxxXDH0elLS0klKSsYbH4/D4bSNj35HvPnmmye6C/VC dclCv/rqqyOq
rzotos4CoITgkn696NimNR8v/oG92bnoQpCUnMTQiwZwQZ9T2L5tW5VJPewT xMamjkgSkiwj
BLRo1Zp/zV+BVEnsi75dr+KmWnW4Obn336z4AJRLAiJJjJnwADMemQzAuLFj KCouxOl04nA4
cThUJEnGNAzLCtDQMTQd3dCjLlemriOEoLjYx8cLrRTpo+6xY4LZ2BwpkiQx 7OpWhIJnsX31
cvqc3Z2Lr+lvnb+JXVlfGub7pRtoFr+fZLWA7u3TiHHG8dG3JfiKSvDGeSgt zUeRFS65+tAA
zSlt2rPs0is5ff4HJGiCYLFg75oQrLHEe1kFd7KMK1WQ1MVJXFMnuEz0nCBi 1T627JP5Mu1a
GjWuOjaLjU19I6EgYSWP2FOg49wZ5tyOTflk1RZKy2L+aeEaxL8yt1+XI4Ye Xc4iIS45WrPl
pmpTE9W5ADtiXaRmpNMgPZ19qek4vHF43W7i4uMr3ONLkkCWwTBkFMV+OW9T ByrHCzxO8QPP
PbcV997bid692+NZt86y+lu0CNq3JzBgAJvbn8ac4nY8+8h3AHTr1qD6yp57 DsrEPzp3JjRy
JMYVV5CQkQG7dqF/+y2lixeTOmeOtY2qwgUXHOMR2tSGJEmoqkpiUjL3TXmU xx+YQG5ONtff
MhVZkjBMQUJiElcMvZ7E5BSSU1LxxsWXxUm1sal/qhMA65s6ZQGOrjcMWmck 8cDNQ9CRcThd
pCR4KS4sZPOmTYeVBdjGxuZQIj9GLlcMZ/T7G9u3NkPXNIyyWICizArP2jby tywYqCzhdsfS
rEUrYtxuFEWpEBOgTbsO3DflUeZ/8A5Tp804qn527NKF7j1607FLt6Oqx8bG Bm68vi0bT2/M
lvWbOTezcfS8dXtduNt2QwOygTnfrsHwB/jxp51IskRySgIlvlJG3juYBo1T DqlXkiS6XDiY
3R06snvag3QOVryxMHUIFpigQDDbwOk1kIqtBEDfZPv4tdstNGzU6jjMgI1N GRJlySOsc2B7
rk5hQHBup1b8vGMPa7ftK2cNeGjCD2EKGqY3p2ObnsS4PGWVykjI2JZotVO1 C7AlDLbu2Qun
K4aE5i2IT0qiedOmyIqCw1E+zrBAVRVkWceyIDTQNHve/zJUFf+vvKBXnbhX U9zA8mX1JAz2
69ecN94YRMaeDfDjjzBxIixdCq1bs+PqW1jZuQ/vvruGefNW1LnO0pYtcTRs iPPOO0m7/HJC
oRCBzZtxv/IKcY8/ThxguN2UZmYS37Ah/PvfcBRJQGzqD1mWccd6GPfgY8x4 ZDL5ebmYpkmC
x8uV1w4nMTGJxORkPN64Cs9WNjb1zfHyaq2zBWB58soCCwLk7qu5AVsAtLE5 PBRFxemSSEpJ
IT4x0UrCYZZLxlF2cagY9FNGlq1/iqIgK4r1t+x1fiR+QPNWbfi/+yadmIHZ 2NhUiSRJdGjn
oUO77jVu17LdKTz12FsU5BfRpXsHAqV+/jnuKtp0qNmhKKF1BzaPmcT7n82j 04Zf6aTrSLpV
ZhqgFUPJNhPTJ9jkMljiaURMzwtp16pdfQ3RxqZOSBGxLuo5KlFYKliyQadh UmP6d08jK3cf
u7JzycorJhQK4lBVvO444mPTaJDeggRvMiBFhcSDzr/2vWhtVO0CLAMyHbpk Ulzsp1X3k62s
k61bYxgBFMWJYZjIsoSqmlhzr5Tdr0i2JeBfhBEjRjCi/IonRe3L1VHdNkez bzn+979/WHH6
hg6FTZugRQuCHTqQde0/eWx3S2Y/sLD2dsrTpg3Zw4aRcOmlpKSkQFYWRb/8 QnjuXJq8+y66
x4PWpAmiXTt2T51Kp06dDq9+m2NK5HnK5YrhznFTePnZJ9F0nYsvvxqPx0Nc fCKxnlgURam9
Mhubo+C4WQAer4ZsbGxqJ5qhSlUBtSzWX7mbGVHNjU05S7+a6q1vIn2zRX4b m2NHbGwsG3/e
wb/e/JKAP8DJp2SS0iCBv195YZ32lySJdh0yadfBctl/af4CenpMli+YD5ID WdY59exBrPZJ
NG/fjq4dMo/lcGxsakGOGuuV/23ZXwASTqAlGWktyUiLiHvWv/KJPiQpYvVX XvyzLdFqo2oX
YCurr8PhJjnZifekk8jJ2Y/TqQLeMmtBKwmIaUYsOM0yd2AlGrvU5s/NH+o+ sLAQzj8fdu8G
j4fSx2ewvlVbHn74BxYs+Onw65szh6itfCAATz1F+uOPW58dDor79mX/9Ol0 6tSJTmDdyxcV
VV2XzQlDkiRi3G5uHXMv4VAYIUxUhwOHw2lb/tkcF2wB0MbGpoKVX30iqhMS DxP7x9DG5tiz
f3s2yCaj7r8af2GAhAZxR1XfBYMuAeCi8wZVWH/uUdVqY3P0xKbkUhj0UVm4 q5jCo+JytEyq
vL789oLEdPt+tzaqcwEGS7MwDHC5FBo1akwk6YcsR7IMWiKg5fkDoAAGttHM n5+tW7ee6C4c
HklJB5c//ZShT2WxYMFH9VP3uHHw9NMHPw8ZQvLcuSSX36aoyOrDGx/UT5s2 9ULkmcvhcKKq
jgrrbGyOB8dLl7Nfidr8KYiJi0dWFIIlPkxdj67v3bs3K1bUPYaHjY2NjY2N jY2NjY2NjY2N
zZ8J0zQtAXD+55+zP7+AAp+PoKad6H7Z2Bw2kqwgURY8UwjyfMVs2LCRc07q RnpcHLGxsTid
TlRV/dO9yfmzjcfGxsbGxsbGxsbGxsbGxqYih+PJF9EJAoEA11xzDaZpogIk N2rE+oIi9FgP
Uj25BtrYHFeEQHDQMai0qIiwEMTFxdOkSWNSUlLwer04nc5qg7hGkmzUlYhZ uCRJ0Vh9h+ta
W7mOSD9sbP4M/FXF6foc959lDusr7EB91lWffbKx+T3wZ7leHA729fZQ7Out jc2x589yvTgc
7Ott1Rzva+7htCfLVizfAwcORD+rANkFheT7fOVrPTT4x+FSH3XY2BwhvpIS AqWlhEJBQqEQ
QghUVcXlcpUl2Kh44Skv4FVObFFepKu8X2XqekLWdtE7EmXfxsbm9419rtYd +2HRxsbmaLGv
uXXHvuba2NgcDfb1tu4cz+utrusoikIoHIquUwGK/QGMMusn2Yrgyy8rV+Ar KsY0DIRpIoR5
MFpg5Pst/7lcxja3x0PPvv1sAdDmuFH+NBJCYJomhhYmGAjg8/mIj4/H7Xaj qlZmXUVRKmR0
Mk0TwzCiVoBCCGRZRpZlFEWJLstlKfLsi5yNjY2NjY2NjY2NjY2NzR8XIQQf ffQR2dnZ6Loe
1QRq88qTJAlZlklMTOSGG24A+F3VI0kS4XAYVVUJh8LR7VSAYDiMVib0ybIM QlCUX8DfTjuN
tIwG5Bf78AUCaJpebYMAQS3M/v372bNlC5ph2ALgHxkh6N6mNYNOP51Erwck iTtmvcAzt90K
wOjnXzyiav+fvfuOj6JOHzj+mU2vkEKXIkjvUqUpHREBRU/F3k49yxVRlLOc p/LTE9FT9PTs
7WwgCIqABUXpIEiT0Ak9JKSX3Z2Z7++PzQy7yW6ySTYQ9Hm/XvsiO+U7z3xn Zn3N4zPzfeFP
t9do/WBYCUC308XWtDTiY2NxORwcz88nOjqGqMhImjdsQGRkJJqmcSK/gKy8 PEzDc4Eps7QC
0KGRlJBASmIiUVFR9uPDMiKUEEIIIYQQQtSfgikAACAASURBVAhxZlNKcejQ Ibp3706rVq2C
frVXQUEBW7duZcuWLbhcngRbXWpH0zRyc3OJi4ujuLjYXi4cwG0Y6LqBYZqE ORQohakbJDdo
QGJqQ/JwEBMdS6R5cmhif0/46jk5FBcX4youwa37JgD/c8+dnvVKVy5yOkk7 cJBPl/1ETkGB
JAuDpRQv//kuwDNU9MNvv+fTf/Xj43j8+msJL33P3R0vvFTt7UwaNJDEuDge f/9Djpw44TPb
rddsmOqarl+WKjOYdUxcHK3btqXIMPgpbSfhUVEoTSOnsBCcTqZedQWxsbGE h4fzxerVHC8o
JDYqmvyiIpwuF0VOJydycjn37JZc2Ke3XUEYGRlpP0svhBBCCCGEEEKIM5NS iuLiYlq0aEHb
tm1xOp2VrwQcOHCAwsJC8vPzKSoqAqhT7WiaRlZWFoZh2O1CaQJQNwzcuo5h mpilFYCGrpOZ
k0MOGkeyTpTbgFKqXBIkOzOLrKNHcTtLcOu636Terc8+T1hYGKN6nculgwcS GRHB83PmSgIw
WGUyv8N7duejpT/Y/TeiZw+f+W694qrNiraTGBcHQPqxY+WOT7XbDdH6ZZXN h8cl1qNZk6bE
x0Tb04qKSyjZvYuczEwyMjJISkoiIiICV3EJ3du1I7F+fQ5lnqDIWUJWTg75 hYUU5eWRmZnp
k3kPNIjI6SLJSCGEEEIIIYQQomqUUrhcLkzTpLi4mNzc3KDWO3bsGAcPHqSg oMCu3KuNdnJy
cli+fDm7d+/muuuus+/9lVJ8+umnxMTEMG7cOJ92nE4nmqaRn59PVFSUnwpA Xcel6+iG4akc
UwrdcJOTX0BUZBQuP8kafwlAt6FjGgaG2+1Zx09iwmUYYBh8tXYdlw4eSLuz mpVbdkzvXgzv
2YOUxARyCwv5ZsNGvly91k5+dWjRnD+cP5jmDRqgAWkHD7Fo7Xo2790LeBIi 4/r3ZWj37iQl
xJOdX8DSXzbxxarVdqLo3fvvBeC6fz1r7RDvTJ0CwPVPzwCwv7/3zbdc1LcP 9ePjuXHGcwAM
6dqFkef2pGlKMvnFxXz20wqWbdpMaQCB96GmvBKAy7duY0jXLsxbsZK8wiIS 4+IY3KUzP2za
zPDSRGByQgJP3XIjJS4Xf375FZylj3E7NI1//+l2EmNjeOCNt8tV+Fn9A/D6 vX9BefULQJ/2
7RjXry+NkuqTU1jIorXrWbJu/cnjqBRj+vRmVK9zqR8fx7HsHL5YvcZe3985 VaNu8TMtIyeH
jJyT34sLCzm8fx+O4iKys7MJCwsjOjoat8vN0awT7Mk6waGsE6AUednZHDt4 gKYtW5KTk2M/
Amy9Q9BSF5JvdSEGIYQQQgghhBDiTKKUQtd1+zViepB5CuvdfE6nE8PwPN3o 3Y7b7Wb79u2s
XeubAxo1ahSNGjWy7+Era2fZsmV8+OGHpKenk5iYyMUXXwzA4sWL+eijj4iK iiI6OpqWLVv6
tKNpGiUlJbhcLor9VQBaCUBTlT4CbCiKXS6Uy4VL10+O81Ga+PN5BlnT0ABd NzANE9PQAycA
SzvU2mFnmWThxf37ctWwC1i68RfeXvIN48/rxx/OH4Jb1/lilSeBdPu4sSQl JPDcnLls3L2H
sxs35uL+fVm/cycAEwcO4LIhg/ly9Ro++eFH/nD+YC4bMgjDNJi3YpXnQJfu i52I8tqfssmp
s1JTuffV1ykpzciO6dOb60eN4Oedu5j+0ccopZg0eJC93sXn9Qu8DzVNAnrF +dnyFQzq0pmR
vc7lw+++Z1Svc9E0jTk/rbATgOkZGaxN20HfDu3p27493278BYCebVqTGBfL hp272O+nwu/K
J5/iw78/AMBVTz5Vbn6PNq35x3sfoFDceuEYrh4+FJeus2T9z54+6t2Lq4Zd wJrtabz+1WIA
brlwtL1+yBOAQYym4zZ0TN3AKComLy+PmJgYDMPA7XJyIj8fd3gELrcb8Fx0 plvHXeJZNj4+
3h5EJCIiwn7JpvXv6SQJQCGEEEIIIYQQomqsRJs9kKgR3KvKrHWsBJ73NKud 1atX89RTT/ms
165dO1JTU30GI62onV27drF//3527tzJ888/T1RUFACzZs1i586dNG/enLS0 NJo3b24nM03T
RNM03G63p5KwpMTevv0OQKfb7aneM01AYRg6bkPH4dbtpIg/3gMCu3W3ZyAF Xcepu73mnuR0
uwgPC2N4z94A/LRlq8+yI87tCcAny34kv7iIeStWMmnwIEae25M5Py0HIDoy Et0wOJqdTYnL
xaa9e9hUWv0HiuE9uwPw2U8ryC8uYu7yFVzUry/DenTn4x9+PHnQlMJp79vJ BJInnpPe/3Yp
uXbWVHFhn14AvP7VYjJyPKWdr3yx0J5f8T6sCNCTis8efdinPy997HE/fXgy zvSMDH7aspWR
5/Zk0br1jOzVk8Xrf+bIiSyffZn940/07dCe4ef2YOHadQCc16kjAPNWrgpw rMr2h+/8Nxd/
TWaeZ9/fWvI1fTu058I+vViwajUAY0r7qOxy/Tq097QZ8JwKth/KrOUnAaiV JqYtbrenQlV3
uXA6nXYpbElxMe7wCPSISEpKn7F3l14PJSVO3G43JSUlFBYW4nA4iIiIwOFw 2MlA79GETwdJ
AAohhBBCCCGEEFVjJdqAKlUAeq/j/bd3O6ZpEh8fT7NmzTBNk3379rF3715i Y2NJSkqiQYMG
lbZzxRVXkJiYyKxZszh06BD33HOPHUPjxo257LLLuP7660lPT/fZH03T7Da9 3yMYbv1hlCY8
VOnGlOnJQuq6jhlsJ+i6Z30FRoARg+c++rAdWEZ2Nm8uXOSzbGpCAijFK/fc 5bNeg3r17OU+
+OY7rhs1gqdvvhFTKfYcPsJ7X3/Lxt27AUiOjwelyMrJQSlFVnYOKEVKQgKG lXgqTRgZ3oko
e5pvVWBmdrZPLKmJiaAUR44f91RMlpGakIAGPvuglCrdh8DJVJ+RVZQK2Ife cX689HsGd+nM
P6+9Boem8en3P/isZ7h10vans3nPHrqefTZtGzdi37EM+rZvx94jR9i4Y2fF 8eD/WB7LzLT3
/WhmFpTZvwalfVRuOTuuEPRDBayEoHe1qqHrmIZOVlYWb3+5kIiYGMLCw1Gm SeP2HdCdLorz
Tj6rr0yT1b/8woYdO4iIiSEiOoawiAjCIiJ47KYbiIqIICYmxk4Inu5KQCGE EEIIIYQQQgTH
yhVYVXhVeQTY39/e7RiGQY8ePXjiiScoKCjglltu4bHHHgNg8uTJ/O1vf6u0 HcMwGDVqFJGR
kdx778nXtAHcfvvtXHzxxfZyFu8EoGEYdpETeCUAAXSXC0fpAAeqdGRgh+5G L330tdJOKK2w
MlEB1xl7/4Mkxsbyx/HjGNqzBwM7dWRJaVUawPHcXBolJTH5n096Rrf1Y+4P y/hy+QpaNWlM
93PacMOY0fzt8kuZ/M8nATiRX0BqvUQSIiM5kZ9PcmICAJl5eXZcmqYRpmkY bjdKKVISE336
oWy/eMvIyaFxcjIp8XF+B0ix9uHqx6cH3Ad/Lpo6Lehlrbj2HTrM8s1bGNSt K3N//InjZeKx
Yv/ku+/pevPZjO7diw07dxEVEcHcZT8GdWz9LZMUG8ux0sRo4+RkADKyc+xl rT7yt1ygNi1V
7YdgOcLCaNmlG+ePHg1oduVc+uEj7N64gbzjGZiGAaaJAnr17MnNDz/E7iNH OJ6bR0FJCTv3
7uPIzh3k5uYSExVlt1H23YBCCCGEEEIIIYSou2paAWgl6ryneVcArlu3jquu ugqlFMePH/dZ
31qmsnYAv48me88v246VAATQvYqvfBKApu4++TihMjFMhWGYnqSIUih8Hzcs OxCIMg1PEsRU
diVhWco0yS0o4MXZn9G7fTtuvHAMq7duJaegEIDPf/yJP46/mBsvHM2rny/A ME06tWrJJUMG
8/DrbwLw9+uuYfbSH9h98BCYCsaMxuV229v8dt16rhg+lEuGDOLdRYu5ZPAg ABatWmMvcyQr
i8bJyfTr2IENO3YwecRwnxjLxuxt7rKfuGPieP548UU8/8kcTGUyecQIXvl8 ftD7EApWXNPf
+6DSZdZvT2P3ocMM7t6NZqmpnMjP5/ufN6JMk4XPeJ5LH3vfAxW24e3miy7k xTmfoRTcNHYM
APOW/Wgv+/mPy7ltwsV+lwvUZk1UmHwrHb0XwGWa7Dt42Gd21uHDFOflMmno UCLDHISFheFW
ik0HD7HryFFWbtqCu/SZ/KyDByjJzyM/Px/d5fJ5BNgM8T4FSx4BFkIIIYQQ QgghqkZ55Qqs
wTu+//575syZ43f5oUOHcumll/p9b6B3O7quM2TIENq0acPBgwf597//zSOP PEJKSgrvvfee
TwKwonaseN58s3we6Z133qGgoKBcPLquo2ma3Z53vsAnAWjouv3mN8M00U1P BaDncU1rjlfC
D1X6TTu5vmmilInu9l/hZU0vcLuY8/0P3DD2Qu6YOJ7H33oHgNnfLaW4pITx gwfx4T8exuXW
2bp3D7O/W2qvu3jVKm4adyHtW7QApdi2dx//nT/fnv/2l18CiuG9ezFx8CCy cnN596tFfLDk
a7szn/3wI+6+bBLTrr2ajOxsPlzyDWP69fGJsWzMlrnff09xSTEThwzm3Yce JKeggHe/WmQv
F8w+hEIwbXkv8/E33/L3G66jQ8sWvPnFl5SUFAdctrLpKzdvZsaf7qBJagpZ uXm8Mvdz5v7w
gz1/ztKlgOKSIUP44JGHOJKZxUfffMOgbl2Djr1KKkgAes8xDHCX2bazuAjd 5SYqMoLiwkKi
o6OpV78+Jfp+9h87xonsk1WVzqIinIWFFOTn4yopITIyEofDgWEYhJVWz3oP zX0yPOWTMA/0
b3VIAlAIIYQQQgghhKgaq2LOO3l27NgxNmzY4Hf5Nm3a2I/3Wuu7SyvsvNsx DIPk5GSSkpKI
iYlB13W+++47YmJiOHjwIM2bNw+qnfnz57NgwQL27NlDo0aNuOmmmwD44IMP 2L9/P5999hm6
rjNgwADgZNJQ0zS/1Yw+CUBlmvb7/szS54gNXcfQ3X5H9C3Tc/Y7AJWpyr03 cPidd5db5f2F
X/H+wq/KTV+w7EcWLPux3HTLil82seKXTQHnm8Brc+fx2tx5AZfZ8Ot2bnr8 SZ9pC5cv9/k+
4q57CGThT8tZ+NPygPMr24eaqCgui7/+/n7dOu65/DIiIsKZ/8My+xgFas/f dO92F61YWWEM
n379DZ9+/Y3PtMrWqS6fCkA/1ar2ewVL//VOxpmG592ApumZFh4eTlhYGC7D IDs/35PYLl3e
GkSksLCQEoeDyMhIlFJER0fb61nvArQuWutjtWGNHOxwOOzlyybxJKknhBBC CCGEEELUnrKj
AOu6ztlnn82kSZP8Lt+1a1efR3cNw8BV+nqzsu1Y7cfHxzN+/Hi7jf79+wfd TkREBJGRkTRt
2pSLL76YESNGAFBQUMD8+fMJDw8nMjLS57FhKwHo7ynJMo8A62ilVUyUPv5r GIbnEWBODqhQ
rsKpNLFimtYgIspeR9QNGtC3W1fiY2P4bOn35Obnn+6QQqrcyV2aBLSTft5/ lz2PTRNlGOw+
cIDmzZqih4WxPT2dosIijh4+TH7mcVAKTXN43nFpGOw7cpTGDRti5uaR63IR Hh5Oo6RkwjXP
+wDDIyJIP56JUiam4amK9S6iPatBA0xdJyoqivDwcL9JQCGEEEIIIYQQQtSO su/eM02TLl26
0KVLl4DreI/Yq5SyE3fe7Xi/sy8pKYnbbrutWu0MGTKEqKgo9u3bx6WXXmrP GzduHIZhEB0d
zciRI+33C1rtWEVHZfk+AmwYOKxRUDApKSrE5XZRlJNzsoPwGaAVKH0AWANX UZGd6Ah25GBx
anz81P/RMDmJrbv38Obceb+54+OTjPZMqHyd0n8joqNp0rYdh3SDo4eOoIWF 4XY6MUyD9K1b
KSnI92lv1MiRlCjFxqPHKNF1iouKKMrL4+IB/WmWlER0dDSR0dG88+VChg0a xJGsLLLz8ylx
uSjIzaUwN4dbx40jKsxBXFwckZGRdhJQCCGEEEIIIYQQtU8pha7r5OXloes6 R48eDWq9/NKC
KqUUztJRdmujnWPHjtGqVStatWrFsWPHfNbt378/AMeOHSvXjqZpREZGlisy 8n0E2DAwvIZB
PnH4EIbbTXFubtAjnBpuN0rzP0qJOH0uu+/+0x1C7arBCLwR0THE1atHZFSU Pa0oP5+8rExi
3C4G9OyJo/TR3cXLl9OzXz8OZmahMjIILy7GbRjobheF+fmcUIq4uDhidR2l u+nevTsFP/+M
U9PQnC6KCgpwF5eQn59HUen/bYiNjbXfJVgdUjkohBBCCCGEEEJUjfWo7S+/ /IJhGBw8eNBn
YJBANE0jLy8Ph8NhJ+7qSjslJSVomkZsbGy5HEO5dwDaMyIiyT58CFPX7cce Kx25VdNwhIUR
FRMb8lFehahIsAnqQPKzs32+uwoLKcnLo1WzphRknyAqKoqwsDAS4uPZc/go aXt2k126TnFO
DsW5uZQUl5BXet47wsJwOZ38euAAm7Zutd8BUJiVSUlBPkWFhWAYduWfUsrn 4pSknhBCCCGE
EEIIUXus9/n/8MMPOJ1OnE6nz+AcgVjv809OTrYTd3WlHesR4AYNG1acADRN 0x7jt1HbdhVu
oDKSABSnUk0TgOXaKx3NGk0jIiKC2NhYIiIiCIuI4FB2FsVOp32OW4PnOJ0l FOpuwsPDiYiM
xO1ysf9YhmcUH6+Xchput+dCdjqJjo4mIiICwB5FWAghhBBCCCGEELVv0KBB NVrfendfXWsn
qX79ciMBl6sANEqHHhbiTHIyAagCPg2sWS+r9FreU2mn7OkWXXfb7VjZ9PDw cDSHg+ycXEoK
C3GXlABgGJ7Re0zdwKnrlJSUEONyYbjdZGZl4S4psQfFsapp9dIkYHFxMeHh 4Z73b8ojwEII
IYQQQgghhPCjKoVP9evXJzc312daeNmFsg8drHlUQpxiVa3/C2YQFLezhOLC QgpLL7Lw8HBK
Cgs5krYdZ34Butvls2xebg5hpaPuuErfnXlo6xbyj2f4XKhuZwk5uZ4koq7r FBQUEBERIYOA
CCGEEEIIIYQQosYS4uMpKCjwmVYuAbhrxfJTFpAQdd3BX34Jetk5W7aUm3Zg k//130pLq3ZM
QgghhBBCCCGEEIFMnTq13NOCPiVHYaXvIhNCCCGEEEIIIYQQQpx5HA5HuQRg uQpAS6gHVRBC
CCGEEEIIIYQQQoTe66+/zq233hpwfsAEIMCePXtCHpAQQgghhBBCCCGEEOLU qTABCBAbG3sq
4hBCCCGEEEIIIYQQQtSCShOAhmGcijiEEEIIIYQQQgghhBC1oNIEoGmapyIO IYQQQgghhBBC
CCFELajVCkClFG3atKlz7xKsq3EJUZHWrVuze/fuciP5CBGM39r5I7/jQggh hBBCCBG8WqkA
POecc9i1a5f93TCMOnnTaSU327Zt6xOvCB2llPRvCFijciulzogRus855xx2 7txZJ6/7M1XZ
39WqONPOn6qoq/99EUIIIYQQQoi6pMYVgO3bty93Q7ljxw4Mw7Cnn4rHiP3F oWkaaWlp5ZYt
G1daWpodb4cOHfyuE8q4duzYAUC7du18pterV49+/foxdepUzjrrLAA6dOhg 70tcXBzNmzdn
0KBB3HjjjaSkpIQkvkGDBvHaa6/hcDjKzQtFX1j9W1O1cXwqkpeXx4svvsi3 337L0aNHiY+P
p1+/flx99dX069fvtCQddF2vle16n6eJiYkMHDiQRx55pNrnWFpaWo2v+9q+ HuPi4ujevTt/
//vfOeecc07L8RwwYABLly4lMjLS3v6dd97JrFmz7O8lJSUMHTqUFStW1Pg6 qq3zp6oq+m0J
9nfnVP73RQghhBBCCCHOdCGpAPz11199birLrnOqKjTKxuEvFm+B4gp1vP76 RymFpmn8+uuv
9rQTJ07w7rvvcs899zBnzhx7+W3btgFQXFzM3r17mTdvHhMnTuSDDz6wE4U1 kZSUxPvvv8/V
V19tx1mXb65P1fn017/+lebNm/PWW2/RtGlTcnJyWLNmDbNmzaJv376ntJLq VFRwWefiiRMn
mDFjBo888ggvvvhirWyrKmrjegQoKCjg/fffZ8qUKcydO/e0VMb16NGDb775 hgsvvBClFHl5
eXz33XdkZGSQmpoKwNdff03Pnj2pX79+ta/HulgB6O+4Vud3RyoAhRBCCCGE EKJyIXkHYNmb
tS5durB58+Zy8w3D4MUXX2TOnDkUFRUxdOhQ/vGPfxAfH1/VuIOKw+J0Onn8 8cdZtGgRcXFx
XH/99T7LW/F26dIFgI4dOwKwdevWWo0LfCty6tevz+23384777yDruvl1o+K iqJDhw5MnTqV
hIQE/v3vf/PUU0/VOL5p06YxefJk+vXrx9lnn+1zM20d/wMHDvD000+zZs0a dF2nd+/ePPnk
k0RERDBu3Di+/PJL6tWrB3hu4nNzcxk/fjwLFixg4MCB9vngdDp57LHH+Prr r+1jMXPmTHv+
wYMH/W4nNTU14PGprfNq9erVPPvss8TFxQGe4zNq1ChGjRplV4yaphlw24H6 rEGDBoDnvJsy
ZQrvvfceGRkZbNq0CV3Xee6555g/fz6GYXDbbbdxww032DH973//44033iAj I4O2bdvyxBNP
0L59+xrtp8U6z+rVq8d9993HyJEjMQzDb5wul4vp06ezaNEiAC666CKmTp1K ZGQkAF27dmXL
li1A5cfH7XaX2+frr7++1q/HmJgYrr/+ev7zn//QsWNHO16L9+9Y165defjh h0Pe9+PHj+ez
zz5j5MiRAKxfvx7TNFm3bh2jRo0CYO7cufzhD3+gU6dOlcZjVRW7XC6/v3nW 70pFx2/s2LG8
8MILtG3bFoDPP/+c8ePHA7Br1y7uuecevvrqqxrtN1T+P2esf/2dO9Y16d1O ly5d+Mtf/sK7
775LUVERF154IQ899BBRUVE1jlUIIYQQQgghznSOyhYwTbPCD3hu0spO8640 MQwDwzB49dVX
2bp1Kx9//DFLly4lKiqKmTNnVrqNYD7+4rA+s2bN4sSJEyxatIjZs2ezdu1a n7iseDdv3oym
aWzatInNmzfXalze27W+Z2Vl8corr9CtW7dy/ee9rlKKiRMnsmrVqpDEFxsb y8MPP8yDDz6I
y+Xy6RdrubvuuotrrrmG77//nqVLl3L22Wfz9NNPk5CQwMiRI5k9e7Ydp1KK jz/+mLFjx9pJ
Hmt/XnzxRQoKCli8eDGzZ89m3bp1PvMDbSfQ8anN86pHjx48+uijrF+/nvz8 fL/HoaJtB9oX
777funUrn3zyCb/88gtKKV566SV27NjBxx9/zMKFCzl8+LDP8Vi1ahVvv/02 P/30ExdccAGP
PvpoyM9T65y0/vUX5wsvvEBGRgZffPEFCxYs4MCBA8yaNatK1701398+1/b1 aBgGeXl5vPHG
G3YSz/v4el+f1v7URt8PGjSIbdu2kZWVhWma/PzzzwwYMIANGzZgGAZHjhwh LS2NQYMGBRWP
NT/Qb541P9DxM02TAQMGsG7dOgzD4ODBg0yfPp2ioiJM02TNmjUMHDiw1n8X re+Bzh1/5xl4
Eqhz5sxh4cKFZGRk8NJLL4XkvJGPfOQjH/nIRz7ykY985COfuv6pTEgqALt1 6+bzXdM0vxVs
c+fO5aWXXrIroO6++26uuOIKHnzwwUq3EQx/cWzYsIEvv/yS1157za5Qu/fe e/nxxx99Oshf
vKFSNq6NGzcCnpvxrl27+sSbmJjIm2++WWE8SimSkpLIyckJybv1TNOkZ8+e 9OnTh5deeom7
777bnme1P3v2bHtaeHg4d955J2PHjsUwDK688kruvvturr76ahwOB4ZhMGfO HF5//XV7fWt/
vvrqK9544w0SEhIAz7FYtmyZXQkZaDsV9UdtnVczZszgvffeY/r06ezbt4+k pCRGjBjBH//4
RzuxaW3belzTe9ve+xIREeHTZ5a//vWvJCYm2hWFCxYs4JVXXqFBgwZomsZ9 993ns7/Tpk2j
fv36AFx77bX897//Dck5ACf79cSJEzz//PP069fPbrtsnAsXLvS5pu6//35u u+02n3Mn2Ove
2ueGDRsCcN9999XqO0St61HTNBo0aMBbb73FuHHj/G7H+7ybNm2avb+h6nuH w8HIkSP54osv
mDx5Mhs2bOCee+7hmWeewTAM5s+fz6hRo+yq3MriseZbv3mJiYnAyd88a35F x69///4sWrSI
SZMm8eWXXxIZGcmiRYu4+OKLWbduHRdddFFIzrmyv4sWTdPs9gNdXw888IC9 vPdxmzJlin19
TJkyhdtvv93nnBRCCCGEEEKI36uQvANw/fr1Po+N9urVy+c9U9bNXEZGBpdc conPug6HI2Q3
+GXjAE/8mZmZNGnSxI6jSZMmPnEB5eIN5TulysZlmiffAbh+/Xp7+/n5+cye PZunn36aV155
pcJ4MjIyqFevXkj6zuqH2267jZtuuokBAwbQo0cPO1aATZs28cILL7B9+3aK i4sBz426UopW
rVrRsmVLvv32W4YPH86SJUvo1q0bDRs2tNe3+jczM5NGjRrZ3xs3bmzPV0pV uB1//aGUqrXz
Kj4+njvuuIM77rgD0zTZu3cv7733Hvfddx8vv/wy4DkOl156qR2fpmlomoZp mj77UlRU5Deu
lJQUn+/Hjx+nadOm5d7V5j1Ah7V8VFSUXUVVU0opevToYQ82079/f6ZNm2a3 XTbOrKwsO06A
pk2bkpWVVaXr3ppv7fOpeifn+vXrUUpx6NAhHn/8cbZv315uO97vzLMkJCTY 3yMjI0PS90op
xo0bx2OPPcZll11GdnY2nTt3pqioiKKiIhYsWMD06dODjsf7OmvSpIn93frN s74HOn6madK7
d2+7UnXhwoU88sgjvP/++1x00UVs8jI8HQAAIABJREFU2rSJRx55JCTnnL/f a6UUvXv3ttsP
dH35O8+s/bS+N23alMzMzJAnkIUQQgghhBDiTFQr7wAE/xV1qampvPHGG3al T1W2EYxAN3op
KSkcOHCA5s2bA573zJVdvjYrACtqz/sdgLGxsVx11VW89tprlVYAzp07lz59 +oSsAhA8SZlH
H32UBx54gLfeegs4eWymTp3KPffcw3nnnUdcXBzFxcUMHTrUjvOKK67g7bff 5oILLuB///sf
U6dO9du/ycnJHDx4kGbNmgEnj4U1v7Lt+OuP2j6vLC1btmTKlCmMGDHCjsfa tlWx573tQPvi
HZf38VdKkZqaSnp6Oi1atPCb9Cq7fKj2U9M01qxZU266dwWn93aTk5M5cOCA PQhNeno6ycnJ
Vbruveenp6fTsmVLn/m1VQFotdekSRMee+wxrrvuOsLCwigsLCQ6OhpN08jJ ybH3u+x63kLR
923atLGrP7t06YJhGHTt2pUPP/yQiIgIzjnnnHKVtIHiseZbv3nW8Sl7nQU6 foZhEBkZSbNm
zViyZAmxsbEMGDCAV199lR9++IGzzjrLTjzXVEXH1Wq/ouvL3/nh/Tt/4MAB UlJSQv47IIQQ
QgghhBBnolP6DsCJEycyffp00tPTcblc7Nixw64yCsWzzoHeATh69Giee+45 Tpw4QVZWFjNn
zvSJyzvehIQE9uzZE9JnsIN9B2BeXh7vv/8+LVu29Nt/hYWFbNu2jWeffZZ5 8+Zx6623hjQ+
pRQtW7bkkksu4ZlnnvE5/k6nk4iICCIiIjh06BBPPPGET7/17duXnJwcPv30 U2JjY2nXrl25
/VRKMXLkSP7973+TnZ3NiRMneO6553zmV7adssenNs+r2267jSVLlnD8+HHc bjfHjh3jlVde
oXPnznY81rYPHDhQbtuB9qXsdWJ9V0oxduxYZsyYwdGjR8nNzeX5558vd556 Lx/MNVrT68ff
dkeOHOlzTT377LOMGjWqSte9Nd/a5yNHjtj7bG2nNq9HpRQpKSn06NGD1NRU 3nvvPYqKijh6
9Kg9uE6gd3GWfVddTT5KKS688EJmzZpFz549MU3PI/lvvPGG/ci493GoKB5r vvWbZ11n1m+e
93VY0fHr168fzz//PKNGjcI0TUaNGsUzzzxD//79A54noTjfyvZrRdeXv3cA zpw5k6ysLDIz
M5k5cyajR48O2bkjH/nIRz7ykY985CMf+chHPnX5U5lTWgF4zTXX8P7773PX XXeRmZlJy5Yt
uf7660NWodG/f3+f75qmsXz5cm666SZmzJjBhAkTiIuL48orr2T58uU+cVvx Tp48mRtvvJHi
4mKWL18ekrgCHQjrRtsSGxtLt27deOyxx3z677zzzkPTNKKjo2nWrBl9+/bl rbfeCll1S9n4
Lr30UqZMmQKcPP7Tpk3jhRdeYNq0aTRs2JDJkyfz7bff+lSGXXbZZcycOZMZ M2b4TIeT/Xvz
zTfzr3/9yz4Wl19+OatWrbLnV7Qd8H98auu8uummm/j00095+umnKSoqIjk5 mb59+/LPf/7T
jqeibQfal4oqAG+44QZefvllrr32WpRS3HjjjeXO09qoAITgK1WVUtxyyy08 99xzTJo0CYDh
w4dz8803V+m6t+b72+dTeT2OGzeOXbt2sWzZMvu6uvrqq/nuu+9OSQWglZB7 6aWX6NGjB4Zh
0L17d3RdZ+TIkX5/pwLFY80P9Jtnza/s+PXp04dXX33VrlgdPnw4s2bNok+f PkH9hyUYFbVj
9WugcydQP3Tr1o3JkydTXFzMsGHDuPHGG6UCUAghhBBCCCEADVAPv/MeG3fs JCt9Pyveewfw
3JTu2bOHw4cPn94IxW/a/v37uf/++/n4449PdygiBKwKsqFDh/L999+H9N19 QgSilOL8889n
2bJlpzsUIYQQQgghhDgttm/fzq233gpAdnY2+/btY+7cufbTiCEZBESIqpg1 axbXXXcduq7z
8ssvM2TIkJAP9CBOn7S0NJKTk8sNZCJEbZPfESGEEEIIIYTwr8aPAA8bNszn u6ZpfPvttzWL
qhrKxmH57rvvTnEkZ5ZA/WYJdf8ppWjSpAnXXXcdTqeTgQMHcu211/5mE81n ynkZqjiVUtx1
113ccsst5R4DrwsC7Wdd+90KpK6dN9UV6t+d2howRgghhBBCCCF+Kyp9BHjv 3r2nN0IhhBBC
CCGEEEIIIURAe/furdkjwPICdSGEEEIIIYQQQgghzlzyDkAhhBBCCCGEEEII IX7DpAJQCCGE
EEIIIYQQQojfMKkAFEIIIYQQQgghhBDiNyxgAvD1118/lXEIIYQQQgghhBBC CCFqQcAEoDVy
iBBCCCGEEEIIIYQQ4szlNwG4e/fuoFZOSkoKaTC/V3PmzAFg0qRJp2R72dnZ QS13uo9vXYmz
rsRRmTMlTvHbJuehEEIIIYQQQpw+ycnJfqdX+g7Aisj7AUPnlltuISsr63SH 4eNMOb51Jc66
EkdlzpQ4xW+bnIdCCCGEEEIIceoElQBs3bo14Hkv4LBhw+zpMkJwaJ2u/jxT jm9dibOuxFGZ
MyVO8dsm56EQQgghhBBCnH5BVwDu2bOn3DS5gQut09mfZ8rxrStx1pU4KnOm xCl+2+Q8FEII
IYQQQojTq0aPAHvfwCml0DStWu3UZN3fkrp2Q3ymHN+60m9nYn95b2vTpk32 9K5du1YaQyji
VEpx7Ngx2rRpE/Q6u3fvplGjRgC10k+h7P/TfR6c7u1XpK5ct0IIIYQQQgjx e3BaEoBKKXZ8
NZr2Y5dUed3K2nU6naSnp9vTCgoKaNGiRbll09PTiY+Pt7+3aNGC6OjoKm0v NzfX7/R69epV
qR1LZTfER7b+u8L5SkGTzveE7Ka97PEF2Ja3naW7vmTjgd3EGKlocQa9GvXi /HZ9aBVXvp+t
detiIkEpRf3l1/DO2hRan51KVHQ47do2QWtzY43jsPqrYOPrWLuuFMT3uOWU JNaCjdOyefNm
zjvvPPv7ypUr6dKlS60n5pVSmKaJaZqsWrXKnt6/f/+A61jLhzKG2trP052A O93br0jZ87A6
2zML09g791pSB/yZeq2vrnBZpRTZ2dkcOnSIdu3aERkZWaX/ZtXmdSv/E0wI IYQQQghR205L
AnD3kgsZedtqvn61H21GLQRCU8mjlGLfvn306NEDgMOHD3Puuef6XbZVq1ak p6fTtGlTADZu
3Ejbtm2rtD3TNDnrrLN8pu3YscNOTiQmJlapvWASWeeOfCbgvJ2L7ubothdo 2OGuKm03mHiU
Unyw+XNWZ/7MwF6b+VPPEWTsd2O6U9mZuYMXfvyFyeeOp0dyj3LHsq4mAFNW XYcz7izufOwa
AFZvrM+O7e9xTqvqtVe2v9I/f4Chf/vUZ5mlMy+n5cSnK2znVFcAWv9af1vf K0uyhSpBZX0O
Hz7sM937u6Vp06YopdB1HTgzKwCVUuz7cAAAra5aEXBbtZ0AVEqxbds2ADp1 6lRnr9tA/aWU
4tDmOXS9+k02f3AT8S2vrLSdgwcP0rlzZw4fPmz/9lu2bt0KQOfOnau6K+W2 43Q6+fXXX0lK
SqJVq1bl5u/fv5/s7Gw6duxY5f/xJIQQQgghhBDVEbJRgJVS/On1jTg0DYdD w9R1EuLiaNIw
gUYpiQzs5LnZKv5uIJTeU+q6QdrC0bQd81XIEoDe1UEZGRk0a9Ys4PIZGRk0 btzYZ92qMAyj
3E1s/fr1cTqdFBUVYRgGiYmJQe9bZds3lQMrR6MAjdIvmoZSEBmXQmJhFke2 vkTDDrcH3K7D
4ahyPNkcY93R1Qxu3phesQ9wfquxvF/8Fw7uPc7ZKa1okBjF/36eT8sRTahv NvRpp7qJhOrE
GQylFA3W3Igz7iySh17D+IdP8PlDMfRqeZyvN+rl2qtWHDs/YMjNt2DkLsZw OnEWFeMqKKD9
wMG4939CQV5BufWjOt9gx3eq+8s0TZ9z2TRN4uPjOXLkiM9yTZo0Yffu3TRo 0MCOtSaUUhiG
gWmaTJgwwWf71rXpL07vxGVNWW1c/chH/O/xq+xpSinSPx4EQIsrfqrWMfF3 LPd/OJBhf0/j
2yfaY5rmaU0AKqUYMGAAK1asoFOnTiHZfnXPw0DJ0vSPBzFsWhpL/699uUS1 vmseqZc/jVKV
/w5Y6yYmJrJlyxYaNWrkk0ysaV9YcblcLrZt24bD4SArKwulFC1btjy5P+np ZGVlERYWxpYt
W+jcuXOVqhGFEEIIIYQQojpCWgF4zuB+RDg0IsM1wkxIiQ+naUIkDeMiaN0g ip//244Jf/oc
NA2tZD9jbvoMMJn30kg6T1hc032xk3hWgsA0Tdxud8DlvZMeuq5XuZLM3zr1 69e3/z5w4ACG
YQR9Y1fZ9g3TgangtTlrcTrdFBU7KSgsoaiohBkPTCQyLsUTQ2EmR7e/RsN2 N/ttJ9gbdO94
Xv55NvUjHRzPyyHSOItIrR7XdXqZd/kTq37eSKzWmKZxGh9uWcIfO1zl005t JxKqetwar7/Z
J/k376EYjKICzKJ89uzNpF2Z9qoVh2kSFpEKQFgERMYDDf2vZ1ny5rO0GPFn oHqVbdWJ00pa
lE1mW0k56117FivBHqoKPCsBaG179erV9OvXD4CjR48C0LhxY5+/DcMIaQXg tf/4lC+m9wY0
EsN2MW7aWt599HIOzzmfYdPS+G56+ypdx2X3zzvJdOCT8xnxUJrnO1TY7qlI AFrHs3///qxY
sYIOHTr4xHs6r1ulFAc/HcLwv+8AwDQ9v7lWTAc/HUy3a94qXTi49qzzumPH jmzZsoWOHTva
7VnzrL7o2LFjUPtRVl5eHm63204wHj16lIKCAho2bEhGRgaFhYU+8/Ly8khK SpIEoBBCCCGE
EKJWhTQBuOvH1ScrAN06CYlxNE5JpFFqAlFdmtFo/Fo+mul5PHfyH/+Pj//7 ICjoNmlJSF4I
b93gWTeJSqkKE4DW8lC+AioYVgIwLS0NXddxuVy4XC6cTidDhgyxExuhSgDq pgPDVNx8aW+v
ndBAU5gmNOh+N6q0KjBj0UMB24uIiKhyPIcO76JBZDTpecUUuwsBCCeGGzu9 QlLUI3y38gBo
qew7uhejbc3f7VXdOCuilKLZxtvs5B/A5w/FYhTlYxQVULx7HTf0zeJQmfaq FYdugl4U1Hr+
2jjV/VU2WW6apk+llVUJ2KRJk5C/gy8lJQWlFKtXr7YrsPr162cnH5VSPn+H evsLnuzFuGnr
6N+rL+OmreGL6X3Y8r/zGfpgmr1MKBKABz+9gJHTfkGZxWjKqm4bUn4d4KzL lgKhSbACpKWl
BVzG6kvvJGDZ2Kuiuudh2WTpodlDGfH3X8AstqcV7X+TrFVvgwatL7yflObn kpm+nMgO1wSV
AExOTiYnJ4fExERatWrFtm3bUErRpEkTnyrw6vSFtUy9evVITU3l0KFDNGzY kOTkZIqKiti5
cyfx8fEkJSXhcrk4fvw4jRs3JjExsdrnlxBCCCGEEEIEK6QJwGnnvEOjq77w u2yUQ5ESqejy
4H7mPNIMivdSUqwzZtRkjpfe/HTr1i3gtrxHKA3Eu5rIupmzKoX88U56+Huc 11/7ubm5nDhx
gvT0dLp164au635HMNV1HbfbzXfffUeLFi1ITk72qQ70p/IEYBhKwZtz16Eb Bi6XjsvlxunU
cbrcuFxuXC6dZx64FN0Mq3FS1Xv9rGyDQj0DXekUuU4mtjSiaM4E9hy6n/jY WHIjigPe2Nf0
+AYTpz9KKXZ+MxNNg1/VORhug0lDQTlLMIryMQvzKd6zjvC8Pezv+jJaNfvN 53pwG+DyP0gM
8WX6oeDkvnsnAE9Ff1kJEE3TfK4VXdf54YcfABg0aBANGza01y1bgff4448H 3NbDDz9cYSxW
gmrlypX0798fXdfp27cvK1eupE+fPoDnUX1Lw4YN0XU9ZNu32vB2MG0RFzyw EaVKQIGmwbF5
w/zEDg3Gf11h4sbav0OzhzN62nKUXgCaZ9qIqT+hoZUuo6FpCuup/sVPDaTp pG9rfB4opUhL
S/MZ4MWabsXtfdz79u3rk/gKRf8GEui6VUpxeM4IRv79J5SZX/q6Axj+wE/k 7p3P2a3uJ7H1
eE8S1cgn7/ivaFpwvwOmaZKfn09sbCwNGjSgQYMG5OTkAJ6BoPz1RXUqAZs0 aUJ+fj6HDh0i
NTWVsLAw+3UQTqeTzMxMkpKSaNy4cUiT2UIIIYQQQggRSEgTgLrpefQrNbL8 smEahGHi0Awm
P7YZDr/KdY8t59iK/9jVDxs2bKBnz57l1t2wYUNQySzvCkDre0FB+XetlV0e gqsAVEqRlZXF
ueeeS8+ePdm1axeGYbB79+5yFYADBgzAMAz7vWY///wzCQkJFbZfaQLQCMMw FdeN71VxO6bn
WIQyAejGjRFdjNs07Hc4AizesoSHP38CV4lBm/puv4/iWcmGmh7fYOL0Z8/S 52kx8E6UqXC7
dVwlJbz77KtMvmmMp/Jvzzoi8vewt/Msz3OGIYjD1HX/CcD6/TiatppffvoO gO6DhtG4bU/I
We3TxqnqL13X6d3bU1HqdrvtytkePTyDuaxbtw6llM8juGUr8KZNm8b06dPL bWfatGlBXVO7
du2iX79+Psv26dOH1atX07dvX/t9g9byodw+wLhpa/lieh/GTVvDqzdkctvb qawc7qly1YAL
7l9euu3SU9/r/P/+XwNJvijw6wuUUhz5bBRj7l8I7lysDJ9CA1TpvyenWo2b BiH5XQzmf4SU
1bdvX1avXk27du3QNK3G/RuIv98JgMOfjWL0lLdRxTs9MzTsJGlC4w6ed54W 7bD77sj+I6Q0
a4sziL6Ij4+3H7m1xMXFoZTC5XJ5Nqdpdiy9e/dm7dq1dl9U1r73Mm3atGHV qlVkZWXZv/3W
f5N0Xad169b2eVzbA64IIYQQQgghREgTgC7DkwC0bpI1635WeSZomkmYZuAI iwQ0HIRxOCML
4k4+/rRu3To7IWF9r8ojnt4JwJSUFPbv3x9w+QYNGtjLBvMOQKt9q2rQ7XZj GAatWrWybxit
m0erSslKqgRTYRhUAjDIMQ/cRmgrAEf2HsiaPauJDtMIC/OcNl9tXsxzX88i Ji6Kpk2bkF1Q
wAXNB1b4aF9Njm8wcZbd7v5ls2gx8E7PcrqB7nLhdrpp2GUyr7/4NldekEB4 3h52tn++2pV/
/uJwu01w5flZyMWqrxYw8YF3AZj31HVMbN0ZEnoyYPIwtu85BHDK+qt9+/as Xr2aXr3KJ5XX
r1/P4MGD0XWd1FTP+wyt87rsO/imTp3K00+fHN146tSpQcW5c+dO+vTp4/dR /XPPPZeVK1fS
t29fjh8/Dpy8ZkO1fYD/TBnLgROev7sOuJDl54Eq2QNgP1KPnbDzpbtUhdtR SuEqMcGdXaYl
r59GP5wu0+ex0OqeB9ZrEKqSAISTv22h6N9A/P1OHPlsDBf++RlwHi/tpJNJ UXsEJPCUZSrI
z8kk++d3iG61KKjr1+FwcOTIEZKTk4MefbdHjx6sX7+e9u3bB7lnJ/fH7Xbj cDjs5CKcrA6X
yj8hhBBCCCHEqRTSBKCzNAEYrpXeu1kFDdZ3NBwYODQdCMdwRJNXaBBX5v1H 1kAAq1evrtJN
ZtlBQOLi4oiPj69wpFDvx4WrmgA0TZM9e/aUW8b7PVZVecS4svluw4FpKpav 3Mjtf5/FtLuu
5KpLR/DhZ98wfdZHfP76P2jd+izP/H/t4cE7j9K/c2q1K0u847myy0h+ObqN cK2Y6PBIFm9Z
whMLn8QIN2lSrwFu02TuiW4c3bYZ2AxAo8atSBszBiAkxzeYOL0dXP4ymgYH VrxE076349bd
uF0u3E4XLpcb0zCJyN9DWtuZNar88xeH7tbBne+7QMPR/PjxK4y9/jxcR/7D 4S3pxCVGs+id
FwFPfiO57w3Aqe2vDh06sHbtWp8k4Pr16xkyZAhKqXKP4AZ6B9+UKVOYMWMG U6ZMCTpO0zRZ
vdpT/ehd5bZhwwafZVJSUuy/rcEaQrF9OFl59lDL5yH3UTTr/16Uy9JZx0TZ f5Y4K/7dUErR
5LKFzH1yLBPv/w+gUBqgtHLpROVVWqi8KgAt1TkP/P22lf09LDvox+rVq2nf vvzAJ9Xt30D8
JQAbTviSL2ZexLg/P4F3RWTpEuXaWPbmU7S/5Elyg3iHnrXfrVu3ZvPmzZx7 7rnllvFuw+qP
9evX07Zt26D+++Ddl/v27UPXdRITE30SsFFRURQWFrJr1y7OPvvscusKIYQQ QgghRG2oUQLQ
+yZcKYVLDwM8j/t63zt75QFxaCYOsxC0MEwVSVaeixjTLHfzs3LlyipXSAR6 3G3r1q3llu3c
uXO5false1YC0KrmaNasWaUxWcsGSlqUjaEiuhmGoRS3/30Wn7/+Dybc8g/+ cMlw+vXoYC9T
dv7cWXdU+8bS5/ged/Cn3lfy8rqP+GDT55i4adq4JVq4IrewhCeH/5VXBk3i vi1b7HX+1aUL
548aBZR/z1p1jm8wcXrrl7qDppdehhY3iI+efpGG3W7AXeJGd7kwXDqGUmw7 +xm0WohD1w1w
l3n83HTj1k0i4zw3/a36nU2rfr6LfPHmm6T0u+GU9ZeVFBk0aBDLli2jd+/e rFu3jiFDhtjL
WdV/1rreyeyycf7tb3+rUpxWAsR6nN5iGIY9GrBpmmRlZQGeql7vhFZNt++t wYQFzH32Iib+
9SFPu94/XmVzT6XTXa6KfzesxE6zy79k7tNjueRvT3nG7QHmznig/I9k6dez Lv8SMwS/i0op
2rZty8qVKwMuY71rEWDt2rV06NABpZTfpFRN+resQO00mriAz2eOY8JfHiXQ AUjb/DNp3y6g
02XTyaE7lMYbDKUUbdq0Yd26dTRv3tx+v6U1z9u6deto166d3R/BtK2UYv/+ /Rw8eJDU1FT7
sd/i4mJiYmLsgUAOHDiAUopWrVr53bYQQgghhBBChFJIKwBLvBKA/kQ4DBzo aEfmoc66CoMk
Cp1ayEZALPsIMMCvv/7K4MGDfZbLzMxk8+bNPi93D3YQEF3XcTqdQcXiXQ0S zCPGwTwCbJq+
/VTZ95r0bdnj29BoyP+N+DMfbf2aDembiYmJIStzH4sLRnJ0xmtMnDiGnQ9N sde5ZOIYePe/
NGrciq0jRlQrhqrGacXaas/9NJ3kSf5BH66c+h5vPXIFKZ2uwu06eSxCOfqm TwWgYYJe4ruA
8lSb4sz3SvworJGcUWCWnsO1WQ3k7zwzDIOBAwfy448/MnjwYAzDIDMzE/Ak AL3/1nU95I8v
lr1uy16P1gA61vRQbt/7Wm0yaT6f/uti/nDfNM9MEz6dUf79d+A5fC2uXFBp BaDVduNL5zP7
mfFM+tvfPftiQrPL5/s91tYozKEYBVjTNNq2bet3Xlpaml0FvW7dOrvyr2zs taGiVwU0mvg5
c2eO55K/PmTn/uY9/yQAcW370ajthTSceAtZhgYYVRql19KmTRvcbjdpaWnk 5nre11m2CrZd
u3Z2/wRbYVhcXMy+ffvsatmMjAxatGhBgwYNOH78OOnp6fbowPv27SMlJYWY mBipABRCCCGE
EELUqhA/AuyVACy9abPuaTTNIEwrxnF4NuqsP6CrFBzKgbP0XXWhTACWjWvH jh32d2tQEO8B
QCD4QUBM0wwqAQi+L5MPpv3KHwEOw1C+iY9Kv4cwAahpGsWHYULSMCYknRwV deP/TaXHmIm8
8tTz3P7AX+zp1vcNi+bhGDq0WjFUNU6ANvsf8En+le4BN/7zXmbd+xSpHS/j 6JaP6TVpSkgT
Sd5xRHT6A1//+JHP/AGTW3qeNHZmgqnAUTrDpPRvDWWe2gSgUooTJ06QnJwM wMCBA+0+saaZ
punzt3eVbSgSVFa73hVQ1nays7N9lk9KSio3CnGoNbt8Hp88M5E/3DsVNM+D us0unxcwUVeR
somjJpPmMXvGBC77672YlRzrUCYAA82zfpes5F/Z6tBTnYj21nDCXObMuIRJ f/VUShqGovGl
c9E0jQIIyWP7DoeD1NRUUlNT2blzp73/wT72609CQgJKKQoLCykoKKBFixY0 a9YMTdM466yz
UEqRnp5uv54iISEBp9MpCUAhhBBCCCFErQptAtDtQAPCwFPhpIGGwmHm4sic D5ioppdiqvpo
KgKHBk63o9YqADVNwzRN4uPj7WWsG7y8vDyf5YIdBETXddLS0qoVX00TgIbp wDQ1pt11JRNu
+QfT7rrSbwWgNf/BO68IeQLQHweeZF//Hq145ann7enW9349WoXknWHBxAkQ 0XtAmeQfwFpU
4U8YhsGRzR/RfcJfQh5T2f4K7/QHn/mrN2zznH8FR8usefI5UOscPpUJQGuQ iEWLFtnTx4wZ
Uy75Bp4EXG0MYFC2qlDXdY4dO1auHzIyMuzHgEPF37ndZNJnfPrspVz+t3uB 6ifS/bXd8JI5
fDJzUqXtnqoE4Jo1a/wmu05nBaClwYTZfPrsZVz+tymeCtkAx706FYBl51n/ 88hf8q8q7RcX
F3P++eezdOlSWrRoQZMmTXzibtq0KaZpkp6eztChQykqKgJqJ5kthBBCCCGE EJaQJgAjomL4
/uU/sjwmgi69LqBrs6PExcSCI4EMvRPbl/+PrXtXkFvoPeJneEgTgGXf5aeU wuFw2N/37dtH
jx49OHLkiM9ywVYANmvWjPT0dPuRxGDk5OTQokWLECQAwzBNxcVjh3Hx2GGl cSsaNm3KyoX/
tb9fPHY4Me6dnN0iqkaJkqokAC+4oAclOTlccEEPe7r1vTgn55QmALXYnniS f1ZizZP80w/n
oJSi68X31MoInMH0V1jHSSxaMsfv+kpBXPeaJW2rE6dVfde4cWOf6f7OcX9J 9pqorAKwsnVr
o5+sdlMnfMInMz1J3FAmAAEaTvwUqLiCsLYTgOB5DDZQHKe7AtCSOv5jPnnW cxx0Xa+1mEzT
ZO3atZxzzjk1/r0qKiryeYdbshWhAAAgAElEQVRlWU2aNKFJkyZ28k8IIYQQ QgghaltIE4Ct
u0+yv+fmw0/bE72WzoLE0bTu7r+dUCUA27Rpw6+//uqTTPjll1/svzVNs79v 27atXByVsR7j
2r9/f9BxtWzZMqj2K5tvKo0l8/4b5Fa1Gt/EBpsA7NN/DBtXearHSnJyfOaV 5OTQo/8YVp/C
BODP21Nh+5IyS3kGfek4dmCtJSOD7S+t/UT/0wndu98qUjZO6516Xbt2tadX lJgKJjlXVa1a
tWLNmjX29zZt2tRq0thbRf2dcrHnMe7q7m9NjuWpSADW9vYrUpWKw8qOQ00r AOHkgDT+zrtQ
tF9b6wohhBBCCCFEMEI2CjDUbBTDUI2A6HK57IRbVQV7k69pmj1yY7CCGUWy su23aFH+Rf41
aa+q6weKf0XfvtC3b8B2Vnoaq1EsFamNar7qqIvXgz9l40xOTubIkSNBr5+c nFwrfW4lYODU
H9Pa7O/TfR6c7u0HEqjqsLqCHaX3TG5fCCGEEEIIIaorqATg66+/7nf6qarQ +b04Xf15phzf
uhJnXYmjMmdKnOK3Tc5DIYQQQgghhDj9gkoADhs2zO90uYELrdPVn2fK8a0r cdaVOCpzpsQp
ftvkPBRCCCGEEEKI0y9k7wAU1XfLLbcAda8/61o8gdSVOOtKHJU5U+IUv21y HgohhBBCCCHE
qVOjBGCPHj0qX0hUas+ePUDd68+6Fk8gdSXOuhJHZc6UOMVvm5yHQgghhBBC CHHq+E0Atm7d
+lTHIYQQQgghhBBCCCGEqAV+E4BWRZoQQgghhBBCCCGEEOLMVqNHgJOSkkIV h1979uyhd+/e
tbqN37p169ZJRacQQgghhBBCCCHE71iNEoCmaYYqDr969+7NmjVrWLx4ca1u 57dq9OjR9O7d
m8zMzNMdihBCCCGEEEIIIYQ4Ter8KMCLFy+mf//+tb6d36JOnToBMtqmEEII IYQQQgghxO9Z
nU8AWmJiYk7Ztn5rJAEohBBCCCGEEEII8ftVpx8B9qbrOoXbnvY7L77zAxWu q5RC07TaCOuM
cCqPkxBCCCGEEEIIIYSoW0JaAViVRJtSirSFo+hw0ddBrWuaJkrByFsX+Ezf uehu9m99itiO
91e6vd8rqQAUQgghhBBCCCGE+P06LY8AK6XYtfhCRt62mm/+249zRi8KalsG DpQJqjRPqAGR
cSm0PAt2b5tBXPu/Btze77kCUBKAQgghhBBCCCGEEL9fIa8ABLjkofngiEBp YRAWCY5IznKc
oO95vRnQrxPqh36e7B3gdhv8+sVI2o75qsIknWEYuNwODKX46qcduFw6E4Z2 IjIuBYA2zWH7
1n+T0OGuCmMePXo0AJqmER0dTYcOHbjjjjto2bJldbuhzpMEoBBCCCGEEEII IcTvV628A9Bs
0p8rJ3QkMsxBdIRGbEQY9WLDOLtBDIfebsWEP80DQBXtY8yNs0GDz18eSecJ SwJuyzAMdNOT
ABx1XjvQwDAhuetddjLR/H4qB3S9XCLRuwJQ0zS+/PJLAAoLC5k/fz5PP/00 L7zwwm+2SlDe
ASiEEEIIIYQQQgjx+1UrFYCOI6v45L/rQAv3VAKGRZ2sABy1no9mdgPgiluf 5pPXpoKC7pd9
XWGlmmmaFBthGAZ8u3oHLrdOSYmbXp2acey1ESdjuGCY3/f9eU8zDANN04iJ ieGSSy7ho48+
wjRNzP9n7+7jm6wPvY9/fyk6AaXQQo+PMAg4p7t9RKtOl5id3Z7NIVKfsXMr 40EOug3ROc/G
8CFOnA9zR6eIdVKK3g7U3CK6c+8hpopsOMSebe6cQ5ssRXAojaEq8tA21/0H JKZt2iZN2itN
P+/X67LNlW9+1y+B18v49XddVyymVatW6Te/+Y327t2r8vJyXX/99Yk7EL/5 5pt68skntX37
dpWWluryyy/Xv/zLv0iS9u/fr8cee0zr16+XJH3pS1/SnDlzdOihh0qSpk2b prVr1yZKRsuy
dPHFF+vFF19MPD9r1iy98MILikQiWrt2rdrb27VixQq98soram9v15VXXqkZ M2Yk3kOquY4Y
MaLXPycAAAAAAAAMHf1yDcBFJz2r8hv/kHj8t+e+rxMv/Wni8YSF27XxJ/8k 65Ow9u5p05kz
f9/rKrX29na1tjnUHpPcZ06RJI08rEgrrzpOc5/fnsgtrzhGR37r0Q6v7XwN wPixdu/erXXr
1mnixIlqb2/X6tWr1dDQoAceeEAjRoxQdXW1nnzySV133XWSpJ/97Ge67rrr NHXqVLW0tGj1
6tX6538+UD6uXLlSkUhEjzzyiCzL0oMPPqhVq1bp2muv7XLcZG1tbYnf48cu Li5WLBbTU089
pXA4rPvvv1/Dhw/XM888k8j3NtfOnx0AAAAAAACGpn5ZARhfbDf20E+fS/5d ki667T398odj
dUr55YlSq7drAO5pK1JbzNL6Nxt16vFH6k93nKe51f8mffAL6aO9enfLTrmu vFx/f/VWSZYU
kyyH0Z5z7+yw8m769OmJcUtKSvSTn/xE7e3t+t3vfqcf/ehHGj16tCTpmmuu 0Y033qjZs2dL
kg455BA1Nzfrgw8+0Lhx43TdddclSr1XX31Vd9xxh4444ghJ0re//W3ddttt qqysTByrLen0
5PhnlVwKXnvttTr88MPV3t4uy7L0yiuvaMmSJRozZoyMMaqqqkrk43MdM2ZM h7nOmTOn1z8n
AAAAAAAADB39cg3A1phDkuSQJCO1tQ9L/K6ks3Mr7mrWc3d9UWc548Vh11N3 k4/VGitSe0w6
+9TJGnP4MP2tTVLJGQcCJdLRB+/j8bkrr+rw2nXfm6V9598p6UDJuHr1aknS e++9p0cffVSh
UEilpaWKRCL67ne/m5hH57Lupptu0rPPPqs1a9bo0EMP1axZs3TmmWdKklpa WjRu3LhE2VZW
VqZdu3Z1KN8sy+ryHpOfHz16dIfPNBqNqqysrMvrLMtSJBLRd77znQ5jGWNS /plwDUAAAAAA
AIChq19WAO5pLZIkFTkkWVJj5Bjtr/lxyjH2tBalvQJwX5tD7TFLb/xnUKce f6Ra2y1p38cH
msaYJIclxczBnzrYQEpt7VaHucavAThu3Dhdf/31uvXWW3XCCSdozJgxuvPO OxMr7jq/z4kT
J+rmm2+WJL311lt67LHHdMYZBwrI4uJi7dixQ0ceeaQk6d13302cyitJDodD n3zyiT7zmc9I
kj766CNJHcu5zisER48erXfffVdHHXVUl88mPteSkpIun1Oqzw4AAAAAAABD U79cA3BP6yFa
X+tV4va8Gq1Lqu7okDHmwKnCj9z65bRWqLW3t6ut3aGYZTT1fzlVesQwtbVa 0r6oFIslyr5P
iz/Hgf2S9rVaiiXNNfl4xcXF+tznPqfXXntNHo9Hy5cv17XXXquxY8dq+/bt euGFF3TDDTdI
kn7xi19oxowZiZV+7e3tifLy7LPP1sqVKzVnzhxZlqUVK1bo3HPPTTw/YcIE rV27VhdddJF2
796t2tpaSR2vAdj5czj//PP15JNPas6cORo+fLh8Pp9mzpwpSb3OtfNnBwAA AAAAgKGpX1YA
7m4dpunf+JE+e+Dmuap+5KcqMh3PADYH//Hx/vRXALZZDlX/bJ4k6X+feZT2 t8Wkj5s7JeNH
+fRna1tMSppr55V2LpdLq1ev1u23365169bprrvu0q5du3TUUUdp+vTpifmd fPLJuu+++7Rz
504dddRRmjdvXqK0u/TSS7Vy5UotXLhQklReXq4ZM2Yknq+qqtITTzwhn8+n 0aNH66KLLtIb
b7zR4wrA6dOn65lnntGtt94qy7J0ySWXJPIXXXRRyrmyAhAAAAAAAADJ+uUa gJ/sP3gK8ME+
b2/rZzTsYB9nzMFazpIsI33SOizp5iE9XwNwygkXJB7//SMp1mZJu6OSI6n0 i08pfjqwpNY2
S0UH57pixYou19Q76aSTdPvtt0uSvv71r+vrX/96h2PHs2effbbOPvvslJ/B sGHDNGvWLM2a
NSvl8+PHj08cI+7LX/509WOqeTkcDs2cOTOx6i95vO7myjUAAQAAAAAAkKxf VgDubTswbLwA
3N8+7MDvnRf4GWlP27C0VgB2LrEsyzp4DcDd6rDiL35ucZLWdqvDCsChhhWA AAAAAAAAQ1e/
XANwX5tD93/nkg775n37t92M4khrhVry6bGJV37pFj3svbtLr9jZoV++dUiX YEP5vQMAAAAA
AAx1OT0F2LIsGWN09czrMx4n/tp0jxV3yAW3ZDzPoWaov38AAAAAAIChrF9W APYHSqy+YwUg
AAAAAADA0DVoCkBKrL7jswMAAAAAABi6KACHAD47AAAAAACAoSun1wDsDyNG jNA555yjc845
p9+PVWgee+wxSZw+DQAAAAAAMJTl9QrAe++9V4sWLdKiRYv69TiF7N5772UF IAAAAAAAwBCW
VQF46qmn5moe3Y5fUVHRr8cAAAAAAAAACpnD7gkAAAAAAAAA6D8ZrwD0+/39 MQ9kyePxdPsc
f2YAAAAAAACFoacOqDsZFYB+v1+zZ8/O+CD9obq6uk9vuFD5/f6Un4ff79dL 23fYMKPCd9Ex
R/J3EAAAAAAADKjuOqCepH0KsN/v16xZsxSLxfJimzVrFivbkng8ni6fh9/v 10vvvicZw9YP
20vvvsffQQAAAAAAMKBSdUC9yWgFoGVZGQ0O+xkHl3kEAAAAAAAYyjIqAGOx WH/NA/2EAhAA
AAAAAGBoK6gVgE6nU5IUDAZTPh6KKAABAAAAAACGtoJaARgMBuV0OuV0OhUM Brs87m/xwjHV
vLJ5fV/HkyRjTMr93zpsbY+vW7H34rSPkTOWpZPGj9f1X/+qSkeN0hVL79Xq H9ysK+65L6Nh
Vt9yU8avAQAAAAAA6E2uupv+6IB6UlArACX7S8Bs9fYZd1fodZvvYQXgV/71 lZT7G/7jBn0r
tFY1+y/J6FhZsyxVXuDSk79/RX9qaEzMvS+rGFn5CAAAAAAA+kOuuptcd0A9 yboA3LJli26/
/Xa9+uqr2r17t77whS/oe9/7nioqKnoca+TIkYnfd+/enfZzvbH7NODOn1HG hV0O/3AlSd0U
YW2WUaybv2iHjizVZyd9Qd8M/V/VtPX85/irRd/TtkhEi1bUfrrTsiRj9MC3 vqFjSkt15f0P
pjdXy9L4cWO1OdzUcd59KfPSeM2amxYmfr/8vp+l/RwAAAAAAEC2ct4B9SCj ZiUWi3XYGhsb
9dWvflXnnXeeNm/erG3btunee+/Vc8891yXbeZMOlGWWZWnkyJGJ/SNHjkzs T3XMzmMks6v8
i68wlA784cW3voi/9+62TBmHI+XW1u5QzFLK7dCRpYkS8Eq90O0Y8VV2+1vb dOaUyR32nzVl
sva1tvU4h1TbIcOGKSbJFBV1WAGYyZbua5I/7zU3LUzsX3PTwg6fd29jAAAA AACAoSO5+0m1
pSvXHVBPsloB+JOf/EQ33HCD5syZk3iDU6dO1cqVKzOaqGVZidd3fl0m43Qu +uw+5Xcgm9zu
55C6pGq1HGpv77jv/3zpbF396h9V8r+uT+z7y/9c2O0YcWvf3KzpU8/Qm6Hw wT2WLj5zql7Y
tFkLv/5VGRktueJS/fY//6IN/7NFOvi5lB5+uLxXX65FNU/pk3379MyN35Ek /WrhgZ9X/ewh
SdL0M6fqotNP1WGHHKINWxr0hD+gtrYDkx82rEizPRfonOMna8/+Vr20+a0e 33d3evo7mOlY
AAAAAACgMNndNfVVVisAA4GAKioqel3tl2rbtWtXh4Ksc7tpjNGuXbsyWgHY m/3796u+vl6n
n356xq/tTaqWNn4NQjsZh0m5tbYbxaTEtvlPr0sHfybvb21P/fr4Jkl/CoZ0 +PDhOvG4Y2SM
dNL4Y3X4YZ/RplAoMYf/+6dNqig/U44iR+K1l559pv6j/s/a09YqU+TQ1T9/ WJakq//9F7r6
33+RGP/zxxyt7z/1jL67olZjRo7U5eeUJ8a44pyzNWrEcN2wYqVuefoZnXjs MT2+7+Ttqp8/
3Ovfwat+/nCv7x8AAAAAACCfZVQAdi65PvjgA5WWlva6ZLG7LRqNplwlZ4xR NBrN+VLIE088
UZdeeqlaWloyfu1g1d2pq63tDrW3W4ntfxYt0j+mTdP/LFrUYX9re++n0coY vfRWvS6eeoaM
w6GLp56hdW/VJ1b6maIi/WXbdu1ra9O5nztexhgdOWa0TvnsBP2/v/y1x9N3 JWnl+tf10d69
+nDvXq1c/7rOO+FziefPO+F41a5/XR/v3aeP9u5V7foNPb7vztvVDz3S7d/B qx96JK3TiAEA
AAAAAPJZVgXgmDFj1Nzc3OcCsKcSL5vXdqexsVGNjY39cmpuX8/37m/dFVf7 243aY5baY5Z8
q1fqH9Om6dhjj9U/pk2Tb/XKxHP7201a19tbv6VB40tL5Trp8zqutFSvb+l4 F1/jcOiFN9/S
jLOmylFUpMvKz9K6t/5Tre3tvRaAzR/vTjze+dHHGj1iROJx8YgRHZ//+OMe 33cmJV42rwUA
AAAAAMgXWZ0C7HK59Pzzz/fpFOBYLKaSkpKURZ5lWSopKUnrRiL5IH6qb+ct LxhHyu2E82/V
3+r/IN+Xz9W2bdt07LHHavLkyTr22GO1bds2+b58rv5W/wedcP6t3Y6h+LXx HEVqs6T/+PNf
Ndvt0q///Be1xaxPnz+YfbNpq9pjlq44u1zHH3mk/H/779TjdXo8blRx4nFZ cbF2ffJJ4nHL
J3s6PD9uVHGP77vz9vSC67r9O/j0gut6HwMAAAAAACDPZXUTkEWLFmn69On6 zGc+o+nTp2vE
iBF6++239fDDD+uXv/xlj2ONGzeuy/XWko8RvynDzp07M5nioJfr1YPdrVLb ctNNkpRY+Td5
8mRJSvzcNm2atGjRgTHmzE/rGC//5a96+S9/PbCvqEhKuouuJMmytPatei34 Z4+q615T+8Fc
7bxv6xvLqj89ZTgpL0mV552jxwOvyUj6xnnnakNDMJF5vTGoyi+eo8frXpVk VHneOT2+72RP
XTc7rb+D1yyr7mGU3N6VBwAAAAAADA0DeQZpRgVg51V3EydO1LPPPqulS5fK 6/Vqz549OuGE
E7RgwYKMVugZY/Tee+8lfk8uZfJppV9/649Vg93dqOL4++478Bdt0aIDZZ8O lH+NjY3atm2b
jnrxRX3u/vtlWZZeawj16RjxbizxvHXgxiLvtbRofUNjh9el/P3g67fseE9L r6jQYYccoo3B
kHxvvZXI+DZv1re+eK5+fs1V2rO/Vb/+y1912oTx3c+pu/dgjCqXP5H4vUMx 2ONYFIAAAAAA
ACAzA33maFYrACVpypQpeuKJJ9LKdhZvOnfs2JHI79ixo8udWdF33a2EW/8f D6jyxjWa8PLr
+v2Lq7Rt2zZJSpwO/OWXD9wVeNUDl8tMqeh2/G8+saLH1XYdnrcsnXf8ZD2/ uV5W0ty++cSK
AysGU4z3zSdWSJJe/uvbHd/XwXybJVWv36Dqgzf/iGfTvT5f/O/aN6qfTOz7 RvWTHf4O9jiW
NXQKagAAAAAAMDhltQIwG++++2634/b0XDYmT56cKBSdTqekgW9cB5rp5jp1 rbEDNwGRJPdF
1+j3Xz9P26ZN01Evvij3uvWJ51pjptsx0nbwVFrXCVNUdsQovfH3pgNj2nyz lGufqOnTcx3Q
TwMAAAAAgDyX9QrAwaSxsdHuKQy47lavtcccevK+qxOPv3L//dKiRfrc/fd3 2C/l4G63lqUn
q76h5o8+1iOB1ySHQ/lzn+QssQAQAAAAAADkuSFVAA5J3ZR3206+vMPj5Btf dH4uF6pWPt3r
nAAAAAAAAJB7tp0CjIGR7s0warb9Q/reIv1h2z8yvoEGAAAAAAAA8hcrAAtc 1tfvAwAAAAAA
wKDGCsACl/X1+wAAAAAAADCosQKwwFEAAgAAAAAADG2DvgD0+/12TyGvUQD2 P/4OAgAAAACA
fJZRAZhvPB6P3VPIKxRRA29jcandUwAAAAAAAENMeUskozzLwwAAAAAAAIAC ltEKQFaYDV6V
ZSV2TwEAAAAAAGDIcblcORmnurq6z2cipl0Acrrt4JfJX7i6ujry5MmTJ0+e PHny5MmTJ0+e
PHnyOciHQqG0x+wPnAIMAAAAAAAAFDAKQAAAAAAAAKCAZXwXYK4DmJ84RRsA AAAAAACpZHwT
kNmzZ/fXXPJSdXX1oCjX/H5/WvN0OByyLKvDvqlTp+qNN96QMabL/s2bN3fJ d34MAAAAAACA
7DivuEfB1bf0y9hpnwLs9/s1a9YsxWKxIbXNmjVrUKx69Hg8ac0zVXm3adMm bdy4scNzb7/9
dsryzxhDAQgAAAAAAJBDzivu6dfxM1oBSPEz+KUq8IwxWrZsmc4++2xJB/6c 165dm/LP27Ks
LisFAQAAAAAA0Df9Xf5JGRaAsVisv+aBAdJdqbd69Wrdd999Ki0tVXNzs155 5ZVuy0JKQAAA
AAAAgOwNRPknZXgXYMuyumxHf/eFlFuq7GDdCklycWeM0VlnnSVJ2rNnj554 4glJ0hNPPKHW
1lZJUnl5eYfXJ5d/559/vhwOh4wxcrvd+v73v9/h87rvvvsSzxtjdOaZZ/br ewMAAAAAABhM
+uuaf53lZAXgm/df1uHxGYueHZKrBZ1OZ8r9wWAwq9f3dbxUkgs6y7I0f/58 /elPf5IkPf74
47rxxhv1+OOPJ3Lz58/XG2+8kXicvCrwlltu0bRp0xL716xZo5/+9KeJsX// +993eN2cOXP6
PG8AAAAAAIBCFFx9S7+vBMx6BaAkRT45sH2wR4rs+TT7RsthKTe7V/Tl8wrA /p5L5xWAV155
pUpLSyVJoVBICxcuVCgUkiSNHTtWV1xxRZfSML6i76KLLtLJJ5+c2N/U1KQ/ /vGPsixL+/bt
06uvvprIHnHEEbr66quznj8AAAAAAECh6e+VgEaStbimVvVbGhTZ2qQNtTUp V5j5/X7NnDmz
y/4JN72sJ79fIUuSMZIladY9z6vpvq/pmG/9IuVBt69Y0O2E3n77bS1evFiv v/66JOmLX/yi
7rzzTp100kl9eX8aOXJk4vfdu3en/Vyyp59+Wh6Pp9djOZ3OLiWdMWbAVgD6 /f4O8/T7/dpY
fKDcqywrkSS53e4Or3nllVf02GOP6Zlnnuky76uuukpz586Vx+PpsJLP7/cn isTf/e53uuuu
uxLPX3HFFZo/f742b96sm266KbH/4osv1sKFC7l2IAAAAAAAGFJcLldisVU2 knue8pZIyq7K
6XQqGo0qHA7L5/PJ6/UmnrMW19Ra0374Y+vcb3zTkmQFg8Eu2+OPP2599NFH Xbax89dYj/x5
j/XIX/Yc+PnnPdbY+WtSZnvb6uvrrbKyMuvBBx+0tm/fbm3fvt168MEHrbKy Mqu+vr5PY0qy
4iT1uj/V9vjjj6f8TOKbDvSeXbb42D29tvM4velpvM7zfPzxx63Zq5+3Zq9+ 3goEApZlWZYx
JjE/Y4wVi8WsxsZGq6ioqMN+h8NhBYNBKxaLpXxflmVZsVjMam1ttSZNmmQZ YyxjjDV+/Hir
vb3d+sEPftBhvE2bNnV4H/H5pIs8efLkyZMnT548efLkyZMnT36w5tPthnra knue7roqSVY0
GrXeeust68c//rHlcDgsh8NhZXQNQKubU1B//Oi6tLM9ufvuu3X99derqqoq sVKsqqpKH374
oZYuXarly5dnPGbnOcXH7Ty/vsy3N/m42s1KcTqv0+nUhRdeqF//+teJU43L y8s1ceJESR2v
+5d8F2BjjIqKirRo0SItWHBgVec777yjP/zhD/rNb36TeP9Tp07VGWecMcDv FAAAAAAAAFIO
bgLSePdXus1OvvW3veaSBQIBLVmyRLFYrENRd9lll+mCCy7o041Fdu3a1aHA 6lz0GWO0a9eu
rG9akmrcbG7W0V9SlXmSdN111+nll19O7J
Re: "One model - many edit parts" problem! [message #218626 is a reply to message #218515] Tue, 27 June 2006 16:13 Go to previous messageGo to next message
kiril mitov is currently offline kiril mitovFriend
Messages: 128
Registered: July 2009
Senior Member
Thanks...
Ofcourse this have always been a solution. And I have even try it, but
having the "one model - many parts" sounds much more as the solution for
me, so maybe I will first try to implemented it this way and if I have
many problems I will implemented it the way you have proposed.

And here I come to the question - If I override the refreshChildren()
method would the behaviour of certain classes change in a dramatic way
and would this cause any "hide" problems? Are there any basic guidelines
that I should consider when overriding the refreshChildren method?

Thanks in advance...


CL [dnoyeb] Gilbert wrote:
> The most GEF centric way would be to return a single edit part, and that
> edit part will have two children. One child will be the in and one will be
> the out. The single edit part you return can have a free form figure just
> like the other containers often do. So it is not seen but its two children
> are.
>
> You really can not have two edit parts with the same model since that is not
> gefs architecture. There is a map that maps models to edit parts and it
> would not work well if you did that.
>
> The other alternative is to create two mini models for each in-out model.
> One representing in and one representing out. So when the parent is asked
> for all children, you return the ins and outs, and then these sub/mini
> models. Which can be simple wrappers around the actual model with an added
> method
>
> class InModel implements MainModel {
> public boolean isIn(){ return true;}
> }
> class OutModel implements MainModel {
> public boolean isIn(){return false;}
> }
>
> Its probably adviseable to hold onto the instances and return the same ones
> each time else GEF may dump and recreate the editparts when it does not
> need to.
>
>
> The models you give to your views do not have to match exactly your true
> models.
>
>
>
> CL
>
>
> kiril mitov wrote:
>
>
>>Thanks for the reply Gilbert...
>>Whell, as I said I have in, out, and inout variables.
>>A variable of type IN is represented by one edit part that shows some
>>information for the variable. The same applies for an OUT variable.
>>But an INOUT variable must be represented with two edit parts - one that
>>shows the "in" information for the inout variable and one that shows the
>>"out" information for the inout variable.
>>
>>From my point of view, and for the editor I am developing, It will be very
>>I mean very user friednly to use two edit parts for the same model and
>>this parts to be in the same parent.
>>So, for this custom case I am sure that having "one model - many edit
>>parts" is a very good solution...
>>
>>CL [dnoyeb] Gilbert wrote:
>>
>>
>>>kiril mitov wrote:
>>
>>>>Hi all,
>>>>Maybe this problem has been discused before but I just could not find
>>>>the solution of my problem in the previous newsgroup posts and in
>>>>bugs.eclipse.org...
>>>>
>>>>I have a class called VariablesHolder with tree method getInVariables(),
>>>>getOutVariables(), and getInOutVariables().
>>>>The edit part for the VariablesHolder is called VariablesHolderEditPart.
>>>>The method getModelChildren() of the VariablesHolderEditPart looks like
>>>>this:
>>>>
>>>>protected List getModelChildren() {
>>>>List list = new ArrayList();
>>>>list.addAll(getHolder().getInVariables());
>>>> list.addAll(getHolder().getOutVariables());
>>>> list.addAll(getHolder().getInOutVariables();
>>>>return list;
>>>>}
>>>>Every variable is presented with an edit part. And everything works
>>>>fine.
>>>>
>>>>I encountered a problem when I tried to present the inout variables with
>>>>two edit part. So every inout variable must have two edit parts.
>>>>It should be possible to achive such functionality.
>>>>
>>>>So to create two edit parts I looked in the
>>>>AbstractEditPart::refreshChildren and decide to override this method so
>>>>that when I encounter an inout variable I will create two edit parts.
>>>>But then I noticed the following sentence in the documentation of the
>>>>method:
>>>>"* This method should <em>not</em> be overridden."
>>>>
>>>>So my question is how can I achive the functionality of "one model may
>>>>parts" when I should not override this method?
>>>>
>>>>Ofcourse the documentation of the method do not stop me from overriding
>>>>it, but is there a way to solve my problem without overriding the
>>>>refrehsChildren method?
>>>>
>>>>And if I am to override refreshChildren() what consequence should I
>>>>expect? Anything special?
>>>>
>>>>Thank you in advance...
>>
>>
>>>What are you trying to achieve by having 2 edit parts use 1 model within
>>>the
>>>same parent edit part? Perhaps there is another, better way to achieve
>>>this.
>
>
>
>
Re: "One model - many edit parts" problem! [message #218651 is a reply to message #218626] Tue, 27 June 2006 18:13 Go to previous messageGo to next message
Eclipse UserFriend
Originally posted by: lamont_gilbert.rigidsoftware.com

I wish I knew. My advise is still the new wrapper class with the tacked on
'boolean isIN()' method. Less pain in the long run.

one model - many parts within the same parent edit part is going to go over
poorly with GEF. If you really want to do it I think you are on the right
path in overriding refreshChildren. I don't think you will see any side
effects right away. They will only come as you begin to implement more
features. For instance, I suppose you are not using an EditPart Factory in
your editor since you must be creating the edit parts in your
refreshChildren method?


Kiril Mitov wrote:

> Thanks...
> Ofcourse this have always been a solution. And I have even try it, but
> having the "one model - many parts" sounds much more as the solution for
> me, so maybe I will first try to implemented it this way and if I have
> many problems I will implemented it the way you have proposed.
>
> And here I come to the question - If I override the refreshChildren()
> method would the behaviour of certain classes change in a dramatic way
> and would this cause any "hide" problems? Are there any basic guidelines
> that I should consider when overriding the refreshChildren method?
>
> Thanks in advance...
>
>
> CL [dnoyeb] Gilbert wrote:
>> The most GEF centric way would be to return a single edit part, and that
>> edit part will have two children. One child will be the in and one will
>> be
>> the out. The single edit part you return can have a free form figure
>> just
>> like the other containers often do. So it is not seen but its two
>> children are.
>>
>> You really can not have two edit parts with the same model since that is
>> not
>> gefs architecture. There is a map that maps models to edit parts and it
>> would not work well if you did that.
>>
>> The other alternative is to create two mini models for each in-out model.
>> One representing in and one representing out. So when the parent is
>> asked for all children, you return the ins and outs, and then these
>> sub/mini
>> models. Which can be simple wrappers around the actual model with an
>> added method
>>
>> class InModel implements MainModel {
>> public boolean isIn(){ return true;}
>> }
>> class OutModel implements MainModel {
>> public boolean isIn(){return false;}
>> }
>>
>> Its probably adviseable to hold onto the instances and return the same
>> ones each time else GEF may dump and recreate the editparts when it does
>> not need to.
>>
>>
>> The models you give to your views do not have to match exactly your true
>> models.
>>
>>
>>
>> CL
>>
>>
>> kiril mitov wrote:
>>
>>
>>>Thanks for the reply Gilbert...
>>>Whell, as I said I have in, out, and inout variables.
>>>A variable of type IN is represented by one edit part that shows some
>>>information for the variable. The same applies for an OUT variable.
>>>But an INOUT variable must be represented with two edit parts - one that
>>>shows the "in" information for the inout variable and one that shows the
>>>"out" information for the inout variable.
>>>
>>>From my point of view, and for the editor I am developing, It will be
>>>very I mean very user friednly to use two edit parts for the same model
>>>and this parts to be in the same parent.
>>>So, for this custom case I am sure that having "one model - many edit
>>>parts" is a very good solution...
>>>
>>>CL [dnoyeb] Gilbert wrote:
>>>
>>>
>>>>kiril mitov wrote:
>>>
>>>>>Hi all,
>>>>>Maybe this problem has been discused before but I just could not find
>>>>>the solution of my problem in the previous newsgroup posts and in
>>>>>bugs.eclipse.org...
>>>>>
>>>>>I have a class called VariablesHolder with tree method
>>>>>getInVariables(), getOutVariables(), and getInOutVariables().
>>>>>The edit part for the VariablesHolder is called
>>>>>VariablesHolderEditPart. The method getModelChildren() of the
>>>>>VariablesHolderEditPart looks like this:
>>>>>
>>>>>protected List getModelChildren() {
>>>>>List list = new ArrayList();
>>>>>list.addAll(getHolder().getInVariables());
>>>>> list.addAll(getHolder().getOutVariables());
>>>>> list.addAll(getHolder().getInOutVariables();
>>>>>return list;
>>>>>}
>>>>>Every variable is presented with an edit part. And everything works
>>>>>fine.
>>>>>
>>>>>I encountered a problem when I tried to present the inout variables
>>>>>with two edit part. So every inout variable must have two edit parts.
>>>>>It should be possible to achive such functionality.
>>>>>
>>>>>So to create two edit parts I looked in the
>>>>>AbstractEditPart::refreshChildren and decide to override this method so
>>>>>that when I encounter an inout variable I will create two edit parts.
>>>>>But then I noticed the following sentence in the documentation of the
>>>>>method:
>>>>>"* This method should <em>not</em> be overridden."
>>>>>
>>>>>So my question is how can I achive the functionality of "one model may
>>>>>parts" when I should not override this method?
>>>>>
>>>>>Ofcourse the documentation of the method do not stop me from overriding
>>>>>it, but is there a way to solve my problem without overriding the
>>>>>refrehsChildren method?
>>>>>
>>>>>And if I am to override refreshChildren() what consequence should I
>>>>>expect? Anything special?
>>>>>
>>>>>Thank you in advance...
>>>
>>>
>>>>What are you trying to achieve by having 2 edit parts use 1 model within
>>>>the
>>>>same parent edit part? Perhaps there is another, better way to achieve
>>>>this.
>>
>>
>>
>>

--
Respectfully,

CL Gilbert
"Verily, verily, I say unto you, He that entereth not by the door() into the
sheepfold{}, but climbeth up some other *way, the same is a thief and a
robber."
Re: "One model - many edit parts" problem! [message #218659 is a reply to message #218651] Tue, 27 June 2006 18:33 Go to previous messageGo to next message
Eclipse UserFriend
Originally posted by: user.domain.invalid

I was thinking of just an "if" statement in the refreshChildren() method.
So if one of the modelObjects is and inout variable I will just use the
addChild() and createChild() methods twice - first for the in part and
second for the out part.
I will still use an EditPartFactory. When the factory is asked to
created an edit part based on an inout variable, it will be smart
enought to know which part to create - the in or the out part. One
approache I was thinking for was to use the context param passed to the
create method of the factory.
So when an inout variable is passed the factory checks if there is an in
part for this inout variable in this context. If there is such a part
than an out part is created. If there is no such part than an in part is
created. Here the edit part is of type VariableEditPart and has a method
isIn() that returns true or false and getTwinPart() that returns the
other part( for in part it returns the out part, and for the out it
returns the in).

So what I should do is first to remove the modelToEditPart map in the
refreshChildren() method and use a custom way to find which parts must
be reordered, added or created. Than I should make the EditPartFactory
rather smart to achive the given functionality...
In fact I have almost implemented this way.

But I still have some doubts whether this is the right solution...
Any help is appreciated...

CL [dnoyeb] Gilbert wrote:
> I wish I knew. My advise is still the new wrapper class with the tacked on
> 'boolean isIN()' method. Less pain in the long run.
>
> one model - many parts within the same parent edit part is going to go over
> poorly with GEF. If you really want to do it I think you are on the right
> path in overriding refreshChildren. I don't think you will see any side
> effects right away. They will only come as you begin to implement more
> features. For instance, I suppose you are not using an EditPart Factory in
> your editor since you must be creating the edit parts in your
> refreshChildren method?
>
>
> Kiril Mitov wrote:
>
>
>>Thanks...
>>Ofcourse this have always been a solution. And I have even try it, but
>>having the "one model - many parts" sounds much more as the solution for
>>me, so maybe I will first try to implemented it this way and if I have
>>many problems I will implemented it the way you have proposed.
>>
>>And here I come to the question - If I override the refreshChildren()
>>method would the behaviour of certain classes change in a dramatic way
>>and would this cause any "hide" problems? Are there any basic guidelines
>>that I should consider when overriding the refreshChildren method?
>>
>>Thanks in advance...
>>
>>
>>CL [dnoyeb] Gilbert wrote:
>>
>>>The most GEF centric way would be to return a single edit part, and that
>>>edit part will have two children. One child will be the in and one will
>>>be
>>>the out. The single edit part you return can have a free form figure
>>>just
>>>like the other containers often do. So it is not seen but its two
>>>children are.
>>>
>>>You really can not have two edit parts with the same model since that is
>>>not
>>>gefs architecture. There is a map that maps models to edit parts and it
>>>would not work well if you did that.
>>>
>>>The other alternative is to create two mini models for each in-out model.
>>>One representing in and one representing out. So when the parent is
>>>asked for all children, you return the ins and outs, and then these
>>>sub/mini
>>>models. Which can be simple wrappers around the actual model with an
>>>added method
>>>
>>>class InModel implements MainModel {
>>> public boolean isIn(){ return true;}
>>>}
>>>class OutModel implements MainModel {
>>> public boolean isIn(){return false;}
>>>}
>>>
>>>Its probably adviseable to hold onto the instances and return the same
>>>ones each time else GEF may dump and recreate the editparts when it does
>>>not need to.
>>>
>>>
>>>The models you give to your views do not have to match exactly your true
>>>models.
>>>
>>>
>>>
>>>CL
>>>
>>>
>>>kiril mitov wrote:
>>>
>>>
>>>
>>>>Thanks for the reply Gilbert...
>>>>Whell, as I said I have in, out, and inout variables.
>>>>A variable of type IN is represented by one edit part that shows some
>>>>information for the variable. The same applies for an OUT variable.
>>>>But an INOUT variable must be represented with two edit parts - one that
>>>>shows the "in" information for the inout variable and one that shows the
>>>>"out" information for the inout variable.
>>>>
>>>
>>>>From my point of view, and for the editor I am developing, It will be
>>>
>>>>very I mean very user friednly to use two edit parts for the same model
>>>>and this parts to be in the same parent.
>>>>So, for this custom case I am sure that having "one model - many edit
>>>>parts" is a very good solution...
>>>>
>>>>CL [dnoyeb] Gilbert wrote:
>>>>
>>>>
>>>>
>>>>>kiril mitov wrote:
>>>>
>>>>>>Hi all,
>>>>>>Maybe this problem has been discused before but I just could not find
>>>>>>the solution of my problem in the previous newsgroup posts and in
>>>>>>bugs.eclipse.org...
>>>>>>
>>>>>>I have a class called VariablesHolder with tree method
>>>>>>getInVariables(), getOutVariables(), and getInOutVariables().
>>>>>>The edit part for the VariablesHolder is called
>>>>>>VariablesHolderEditPart. The method getModelChildren() of the
>>>>>>VariablesHolderEditPart looks like this:
>>>>>>
>>>>>>protected List getModelChildren() {
>>>>>>List list = new ArrayList();
>>>>>>list.addAll(getHolder().getInVariables());
>>>>>> list.addAll(getHolder().getOutVariables());
>>>>>> list.addAll(getHolder().getInOutVariables();
>>>>>>return list;
>>>>>>}
>>>>>>Every variable is presented with an edit part. And everything works
>>>>>>fine.
>>>>>>
>>>>>>I encountered a problem when I tried to present the inout variables
>>>>>>with two edit part. So every inout variable must have two edit parts.
>>>>>>It should be possible to achive such functionality.
>>>>>>
>>>>>>So to create two edit parts I looked in the
>>>>>>AbstractEditPart::refreshChildren and decide to override this method so
>>>>>>that when I encounter an inout variable I will create two edit parts.
>>>>>>But then I noticed the following sentence in the documentation of the
>>>>>>method:
>>>>>>"* This method should <em>not</em> be overridden."
>>>>>>
>>>>>>So my question is how can I achive the functionality of "one model may
>>>>>>parts" when I should not override this method?
>>>>>>
>>>>>>Ofcourse the documentation of the method do not stop me from overriding
>>>>>>it, but is there a way to solve my problem without overriding the
>>>>>>refrehsChildren method?
>>>>>>
>>>>>>And if I am to override refreshChildren() what consequence should I
>>>>>>expect? Anything special?
>>>>>>
>>>>>>Thank you in advance...
>>>>
>>>>
>>>>>What are you trying to achieve by having 2 edit parts use 1 model within
>>>>>the
>>>>>same parent edit part? Perhaps there is another, better way to achieve
>>>>>this.
>>>
>>>
>>>
>>>
>
Re: "One model - many edit parts" problem! [message #218675 is a reply to message #218659] Tue, 27 June 2006 19:39 Go to previous messageGo to next message
Eclipse UserFriend
Originally posted by: lamont_gilbert.rigidsoftware.com

user@domain.invalid wrote:

> I was thinking of just an "if" statement in the refreshChildren() method.
> So if one of the modelObjects is and inout variable I will just use the
> addChild() and createChild() methods twice - first for the in part and
> second for the out part.
> I will still use an EditPartFactory. When the factory is asked to
> created an edit part based on an inout variable, it will be smart
> enought to know which part to create - the in or the out part. One
> approache I was thinking for was to use the context param passed to the
> create method of the factory.
> So when an inout variable is passed the factory checks if there is an in
> part for this inout variable in this context. If there is such a part
> than an out part is created. If there is no such part than an in part is
> created. Here the edit part is of type VariableEditPart and has a method
> isIn() that returns true or false and getTwinPart() that returns the
> other part( for in part it returns the out part, and for the out it
> returns the in).
>
> So what I should do is first to remove the modelToEditPart map in the
> refreshChildren() method and use a custom way to find which parts must
> be reordered, added or created. Than I should make the EditPartFactory
> rather smart to achive the given functionality...
> In fact I have almost implemented this way.
>
> But I still have some doubts whether this is the right solution...
> Any help is appreciated...
>

Let me get this right;
1. add an if to refreshChildren
2. add an if to EditPartFactory
3. create artificial connection between VariableEditPart instances through
getTwinPart.
4. remove the modelToEditPart map.
5. create custom way to order add and create editparts?


vs.
1. Create wrapper around true model adding isIn() method.
2. children() method returns one wrapper model with isIn true and one
wrapper with isIn false in place of original model.
3. VariableEditPart asks model isIn() to know which figure to create (in or
out.)

class DecoratorModel {
private YourModel model;
private boolean in;
ChildModel(YourModel model, boolean in){
this.model = model;
this.in=in;
}
public boolean isIn(){
return in;
}
//forward all calls to YourModel
}


protected List getModelChildren() {
ArrayList list = new ArrayList();
list.addAll(getHolder().getInVariables());
list.addAll(getHolder().getOutVariables());
for(Iterator It =
getHolder().getInOutVariables().iterator();it.hasNext();){
YourModel model = (YourModel)it.next();
list.add(new DecoratorModel(model,true));
list.add(new DecoratorModel(model,false));
}
return list;
}

You say this was always an option. I wonder what about it bothers you, or
what you are not telling us about your requirements?


--
Respectfully,

CL Gilbert
"Verily, verily, I say unto you, He that entereth not by the door() into the
sheepfold{}, but climbeth up some other *way, the same is a thief and a
robber."
Re: "One model - many edit parts" problem! [message #218683 is a reply to message #218675] Tue, 27 June 2006 21:17 Go to previous message
kiril mitov is currently offline kiril mitovFriend
Messages: 128
Registered: July 2009
Senior Member
CL [dnoyeb] Gilbert wrote:
> user@domain.invalid wrote:
>
>
>>I was thinking of just an "if" statement in the refreshChildren() method.
>>So if one of the modelObjects is and inout variable I will just use the
>>addChild() and createChild() methods twice - first for the in part and
>>second for the out part.
>>I will still use an EditPartFactory. When the factory is asked to
>>created an edit part based on an inout variable, it will be smart
>>enought to know which part to create - the in or the out part. One
>>approache I was thinking for was to use the context param passed to the
>>create method of the factory.
>>So when an inout variable is passed the factory checks if there is an in
>>part for this inout variable in this context. If there is such a part
>>than an out part is created. If there is no such part than an in part is
>>created. Here the edit part is of type VariableEditPart and has a method
>>isIn() that returns true or false and getTwinPart() that returns the
>>other part( for in part it returns the out part, and for the out it
>>returns the in).
>>
>>So what I should do is first to remove the modelToEditPart map in the
>>refreshChildren() method and use a custom way to find which parts must
>>be reordered, added or created. Than I should make the EditPartFactory
>>rather smart to achive the given functionality...
>>In fact I have almost implemented this way.
>>
>>But I still have some doubts whether this is the right solution...
>>Any help is appreciated...
>>
>
>
> Let me get this right;
> 1. add an if to refreshChildren
> 2. add an if to EditPartFactory
> 3. create artificial connection between VariableEditPart instances through
> getTwinPart.
> 4. remove the modelToEditPart map.
> 5. create custom way to order add and create editparts?
>
>
> vs.
> 1. Create wrapper around true model adding isIn() method.
> 2. children() method returns one wrapper model with isIn true and one
> wrapper with isIn false in place of original model.
> 3. VariableEditPart asks model isIn() to know which figure to create (in or
> out.)
>
> class DecoratorModel {
> private YourModel model;
> private boolean in;
> ChildModel(YourModel model, boolean in){
> this.model = model;
> this.in=in;
> }
> public boolean isIn(){
> return in;
> }
> //forward all calls to YourModel
> }
>
>
> protected List getModelChildren() {
> ArrayList list = new ArrayList();
> list.addAll(getHolder().getInVariables());
> list.addAll(getHolder().getOutVariables());
> for(Iterator It =
> getHolder().getInOutVariables().iterator();it.hasNext();){
> YourModel model = (YourModel)it.next();
> list.add(new DecoratorModel(model,true));
> list.add(new DecoratorModel(model,false));
> }
> return list;
> }
>
> You say this was always an option. I wonder what about it bothers you, or
> what you are not telling us about your requirements?
>
>
Dont get me wrong CL [dnoyeb] Gilbert, there isn`t something I am not
telling. Something I am hiding.

But when considering a Model-View-Controller architecture like GEF I
have always had the feeling that there should be no one to one mapping
between the model and the controller (in this case the edit part). Thats
way it bothers me. I wasn`t feeling it this way...

One of my GEF editors used a "one model - many parts" mapping but with
parts in different parents. There were no problems. Now when I came to
creating the parts in the same parent things got more, lets say "complex".

If creating the DecoratorModel objects is the GEF way, then let it be
the GEF way. No argue :)
Thanks...
Previous Topic:scrolling in a graphical Editor
Next Topic:containers editparts - example-tutorial needed
Goto Forum:
  


Current Time: Thu Dec 18 14:37:23 GMT 2014

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

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