Eclipse Community Forums
Forum Search:

Search      Help    Register    Login    Home
Home » Modeling » Epsilon » Wrong object type instantiated when using "new" inside EVL Quick Fixes and other issues
Wrong object type instantiated when using "new" inside EVL Quick Fixes and other issues [message #480582] Mon, 17 August 2009 13:54 Go to next message
Eclipse User
Originally posted by: nyoescape.gmail.com

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

Hi list,

There appear to be some problems when creating objects inside an EVL
Quick Fix when the global Package Registry contains another EPackage
which includes a type with the same name. I hope that last sentence
parses correctly :-D. This issue popped up when I was reusing some EVL
constraints for two similar metamodels (one is a slight refinement of
the other, which brings it a bit closer to what is needed to generate code).

Here's an example. Suppose I have an Ecore metamodel whose main EPackage
has the namespace URI "modelA" with a single EClass named Node. If I run
the quick fix for the following EVL constraint, instead of
'modelA.Node', which is what I'd usually expect to be printed, something
along the lines of 'org.eclipse.gmf.notation.Node' is printed:

context Node {
constraint XGreaterThanZero {
check : self.x > 0
fix {
title : 'Replace with negated node'
do {
var newNode := new Node;
newNode.type().instanceClassName.println(
'instance class newNode: ');
newNode.name := self.name;
newNode.x := -self.x;
Diagram.all.first().nodes.add(newNode);
delete self;
}
}
}
}

Additionally, I get an error saying that the x property does not exist,
which is to be expected if the created Node is not an instance of my
model's Node EClass, but some other EPackage's Node.

It seems that this problem is due to the different way the
InMemoryEmfModel is initialized in the EvlValidator#validate(Resource)
and EvlMarkerResolution#run(IMarker) methods. The first works correctly,
and it is used while validating: its package registry only contains the
ECore metamodel and my own. However, the second one, which runs the
quick fix, uses the global Package Registry (105 packages in my case),
and it seems to pick up the Node EClass from the GMF notation EPackage.

If I delve a bit further, it looks like they're using different
constructors. The one which works correctly passes the ePackageUri and
adds its corresponding EPackage and its dependencies to the package
registry. The other one just gets the default instance (which is
Eclipse's global Package Registry, I suppose).

I've attached a patch which modifies EvlMarkerResolutionGenerator,
EvlMarkerResolution and EvlValidator so the package registry is
initialized for quick fixes in the same way it is initialized for EVL
validations. I'm not sure if it's the right approach, as the changes
ripple across several classes, but it does seem to fix the problem for
me. I have also attached a zip with a set of projects which reproduce
the issue.

By the way: I noticed two minor issues with EVL quick fixes when using
the EMF editor instead of the GMF editor. It looks like the validation
is not run in read-only mode as it is from GMF. This issue can be
reproduced from the attached example by uncommenting the second line in
the check block for ModelA/validationA.evl and trying to validate a
model which has a Node with a negative X value from the EMF editor:

check {
--createNode();
return self.x > 0;
}

This second line produces an error from GMF, but not from EMF.

As for the second issue, it seems that for some reason, resolutions for
the EMF editor are repeated exactly three times. In fact, sometimes I
don't get my fix, but only three "Ignore" fixes. Other times (usually
after I have validated the model in the GMF editor), I get my fix and
Ignore three times, in this order: my fix -> Ignore -> my fix -> Ignore
-> my fix -> Ignore.

Should I report these three issues as separate bugs in Bugzilla?

Cheers,
Antonio

--------------090801080108040602070303
Content-Type: application/zip;
name="NewOperatorEVLQuickFixNameClash.zip"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
filename="NewOperatorEVLQuickFixNameClash.zip"

UEsDBBQACAAIAGWbETsAAAAAAAAAAAAAAAARAAAATW9kZWxBLy5jbGFzc3Bh dGiVkEFrAjEQ
hc/6K5bcna1CoYddpZQtKNQW3XqVmAzrtOkknSSl/vtWWlEKFbzNG773ZnjV 5PPNFR8okTzX
aghXqkA23hJ3tXpu7wc3ajLuV8bpGINO23G/dxTISXbFK7GtVRSjiv3yZyz/ BY3nA+ilAzSO
QkR4sQmczmy236dhtmjWd4/z9nY6bxblX444obB2YHGTO8j060SBZdJstdjV Q7sLWM5Gy2Yw
hOvL/wkWwXhBEHzPJGifXO6I45kkn1PI6RC2Id6zVXnS3RdQSwcIlLj+YswA AABvAQAAUEsD
BBQACAAIAGWbETsAAAAAAAAAAAAAAAAPAAAATW9kZWxBLy5wcm9qZWN0vZLN igIxEITP+hQy
d5P1toc44u7izUVQHyAm7RjJH0lGfHw7M1FUEBYWvFV1qvhCJ2x2Nnp0ghCV s9NqQj6qEVjh
pLLNtNpuFuPPalYPmQ/uCCL9QBRB+YThejhglhuol06CnjPaGRwKZwzYVDN6 VTgs/Zg1vTe7
Vmm59iDQFPeNNW5lHhSECw0BoZWPQI4yEeECCn7iXR7CDY4FHpo2U2Nv6YNn 9JnwF6SXQJbc
qj3E9PU24locwPB/88qgrBhRqQ3QR3v9erv9eUZ3uReVfNeVbhtlf5/zV4m4 26s/fKELUEsH
CKoe21jhAAAAfwIAAFBLAwQUAAgACABlmxE7AAAAAAAAAAAAAAAAJAAAAE1v ZGVsQS8uc2V0
dGluZ3MvbW9kZWxBLmdtZmdlbi5wcmVmc2XKuwrCMBiG4T1XEXAvjUcsdCji 6KR7COmXEMiJ
P0mvX2sncX2fd/dIkU/NcnHh4jQcxXA489v9+eL7vr8yaO9yQZcJBoSoUboF VFyKo2AWEaQq
JOk8GuULmLMxEaQN5oNyUd7Nqq73DweVQ5rh/4dWvipXHiu1rVCL1QVI42wj lA3eUEsHCG05
PBmDAAAAuwAAAFBLAwQUAAgACABlmxE7AAAAAAAAAAAAAAAAGwAAAE1vZGVs QS9NRVRBLUlO
Ri9NQU5JRkVTVC5NRk2QO2/DMAyEd/8KLd1qoQnQRUGGtPBS1IXRAN0VmXGI UpKrhxHn11d+
xdlIfKe7o0pp8Aw+5D/gPFoj2Ia/ZG/R1AR5OcM72y7kS2oQ7Kml2KAZlgUc e32yhGoSlLYG
Ouw8moYgJId9cPGufYxcQ99Jel/JcBGMr0pTWzcEOtthDe4x8tMqSXiTYfSa Ki3sG/4iOqiL
K6g4CArTobNGgwmCfWyPRb7hr1lxba0LeSXVr2xSbz32fs7mgaNuad2SEWWz cz4FCWZdw0ER
th64sg64iyaghvTsEYE+pznxXYceT0gYerF3AGODpfZBBezGg6rhM3vBSN76 7B9QSwcItvRu
CPoAAACtAQAAUEsDBBQACAAIAGWbETsAAAAAAAAAAAAAAAAfAAAATW9kZWxB L2Jpbi9tb2Rl
bEEvRGlhZ3JhbS5jbGFzc42PQWoCQRBFf6nJqNHgBVwKurERsjMEAprVoIs5 QTuWTUv3tPT0
5HBZ5AA5lFgmrlxlUfALfv367+f89Q1ggWGGFuHZhz27d7Wy2kTtM3QIo6P+ 1Mrpyqjt7shl
yvBIGIdoFJfOnmpW7A+iQ2S1/rMQuobTRsJqwmQ6y+/dZfA+VKpJ1ql1buu0 JPQKayqdmsiE
l//cvOa3utdHyzeJ6BehiSV/WCcZgxvF/AoglQltmQfBJcHK0JWtJ1sLfVFP v2pwAVBLBwgy
A6KWwwAAABEBAABQSwMEFAAIAAgAZZsROwAAAAAAAAAAAAAAACUAAABNb2Rl bEEvYmluL21v
ZGVsQS9Nb2RlbEFGYWN0b3J5LmNsYXNzbVHRSgJBFD1j5uqmaWpmlj4rQUvP RSCmINgWKL6P
221Z23VlWoM+K3qJHvqAPiq6sy6I4MDMmTn33DN35v7+ff8AuELLQEqgGoRP 5Het+xgG0olC
9W4gLVCayzdp+XLhWg+zOTmRgYxAK1SuRY7vLV/JouCZ96Eiq59kCuRoaI8n XbvXF6iNdrlf
C2Rv2GHhRbcCe+3OVCDdY4WJAooGDgWaSZ4XLP3t5CEzeZRwxDnaQaDe7uy+ JgeBSh4GsgLF
kbcgexXMSE3kzCeB8ih0pD+VytPnhCw4imREd550lQxYtPFOOC7eXIts5tl4 o9AEh0suRetC
HqXzIl3aUWIS0WbjcKUcGnhxTVsPuNQN4C/nP+K5z/NUP4abl+Y1B5OZAz5d MOphfCH/ifIH
b1Oo8moyAg1kUMFxzOq+1nASY53tNDZwxjGB81jR/AdQSwcIlIfSTUwBAAAg AgAAUEsDBBQA
CAAIAGWbETsAAAAAAAAAAAAAAAAuAAAATW9kZWxBL2Jpbi9tb2RlbEEvTW9k ZWxBUGFja2Fn
ZSRMaXRlcmFscy5jbGFzc31STW/TQBSc7UccJ0u/KIEUWtoSIIFSU75aqQjJ SgKKlLioqare
oo3ZRi6OgxyH/wWc4MAP6JUjZ44cuSLe26aKkNpYst+s983M29Ge/v32HcAW dixMCCx3e+90
6DoNU94q/73q6EI9SHSswr6FKYG5E/VROaGKOs5e+0T7iYBVqblv9t2GwEq9 F3cc7YfBh752
dPeYcC/WTrUcqn5/V2Bm2NpqeXuValNg/TLGvj7WsY58TawpbhbIcCGm26iO IbpJEgftQcJE
64xxJJB+SZ1RkLwSmCyWDkmzTGe0MY+rFhYEFi86ucQirgnYuuY1D1yvTLa5 +kWNu1kSui5x
A3kas6OTSqA6seoKrBZL4zOxIXBTYhop1liWWMFtSnmk0fLIqS9QuFxplBWr rUlYSLPaHYkC
T2SRmmeOK3BPwj7zKkqU8EBADndbnurqsT6jaFlpQyKDLCttSjisZJ8rHfH+ loREVmC2HkTa
G3TbOj5Q7ZAsFuo9X4WHKg54PfyZafYGsa9fB6bjv3g3+c7RoLUo0rGJjQNJ n9/LlCC3SbrG
08hzkITyHIGp9nBNo5oqTSU2rmCG6iytQqr87HzG3FfkBL5gycBbDFcNXGd4 18D7DB8a+Ijh
40/EncAT+i4Ztx/k8RM5/MIafmMDf7CNUzw1Xfw+M9/neEE1A55+Htsp+x9Q SwcI4QWlcQIC
AACNAwAAUEsDBBQACAAIAGWbETsAAAAAAAAAAAAAAAAlAAAATW9kZWxBL2Jp bi9tb2RlbEEv
TW9kZWxBUGFja2FnZS5jbGFzc31T2W7TUBA90yVO0nShtKUFugAFUpaasi8V kpUFWUrdKkmr
vEU35jZy8VI5DhKfhXhBPPABfBRi7o1L29BiyZ454znjMzPXv37/+AlgC28N jBDmguij9C1z
R5s94X4SXWlgjDBzJD4L0xdh19ztHEk3MZAhrERx15Su7x33pCmDQ/ajWJqV lEkYl461UyHM
1k75jST2wu47wmQpCnuJCJMD4fdlFhOEzEAAwZBOo71ftwl55e3VK1W7lcU0 YSQQhJy0nUbT
ckpce6F2kWqub5Rt60Pd2iGQPcpdgjCVhtptZ7dcaRDmTwLVitXcr1fapd19 p6myiTCmkliB
MszQnRgD0OKetPcPj8eY3eaRhF7ynjBa3DjgQiWWlsct3DFwm7CcCvaCY/+8 apsjBazjLnNU
BcJicePi/nLczv0CZnCFMF3zQun0g46Mm6LjSzXwyBX+gYg9hdNgviuTsie6 sQgIa1z4kvWV
fNHr8QBnTvPbDn+8R1i/nFWXhzKWoatHz0zFIBRSr+2IQP6XbyV8MDr9RPFz J6zWQMWg9apw
kyj+csFQ0jfMzDeifuzKqqencG5km+oMsiI7DGWse5Q9A69P93Eue73mJTIW PjedPXH5yPNK
+R7HBJZgIMt+Ti0decaFITx5Bk8x5l2xv4RZXP0bn2M8P4QXzuBrjBeH8NJQ /vWh9zfO4Jta
5TJWOLLKkYds1WV8x9o33Puqk4r8zLMFtpHh5A0dVf/9AyYo+wiPtd1MsYkn 2m6l9imeac5z
/XyBl7oi4RXfbzK5P1BLBwjX5OI8TAIAAGgEAABQSwMEFAAIAAgAZZsROwAA AAAAAAAAAAAA
ABwAAABNb2RlbEEvYmluL21vZGVsQS9Ob2RlLmNsYXNzZY/NDsFAFIXPUEb9 S1ja18bE2kqC
lbCQiG3V1VSmRtrycBYewEOJ2yKCxcyZ5Hzn3jm3++UKYICWRE6gEpot6ZGa s0hYAs29e3aV
dg++Wmz25CUSRYGuiXxFng6OMSkKd/w2EanJExGQPiVzNySBttObfUYskyg4 +EMG4jfQcf79
3krA4hHr3/zYnDaaOG/FmfsVfplpuLw0p8ijaaB5g52W6acc/1wgz6fAlS1u J1FC2tJGOdMK
qpnWUGdCoMF3Ds0HUEsHCM4xv7vDAAAAJQEAAFBLAwQUAAgACABlmxE7AAAA AAAAAAAAAAAA
KAAAAE1vZGVsQS9iaW4vbW9kZWxBL2ltcGwvRGlhZ3JhbUltcGwuY2xhc3O9 VW1TG1UUfi4J
bAkrbWmlpYG2KbTNCxAD9a1BFEOK0QCVUCqpVZdwCdvuC+4uKL58tKNjvzqO /gSHD9RRM+iM
0086449yPHf3EmKAFr+YmeTevXvO8zznnHtO/vr7198BZLCsoIXhjGkvc2Mi rZtrRnpS16qO
ZhZoryDMcMV2qmleMfQ1l6e5uUJ72+GBbX526R6veIFtG0OnBJIYDK0WHbgM /cVmlIptmraV
Xvd0ginqrpdlaC/pVUvz1h3OMPJ0j7GipJuhJTtOAG1juqV74wyheGKBIZyj FxGEcFxFB1SG
40Xd4jPr5hJ35rUlg2i6inZFMxY0RxfP8jDsreokuqd4SF6ISeUlT/P0Ss7Q XDK9GE/s0xvk
Ke9bZNtxBj0KzjL0SdBpf7mpVe5rVT5Q1D3uaIar4hyiDMpkYWJqbmKa4fyT cRmOVbk3E2T5
8gEqDsrztaPYNWe3HRSmCgXHFFyi+hwsK/APrkXOtjxNt0xueT6iggGGjgbU CGK4IkpzlWEs
XrynbWhpQ7Oq6SC2QyIvWJQqSzMkS7YgSt3JC9YGd1w+x017g2r4MH5U98NS YdmevrJJQmnR
K1Rs28qtUjzZQ5N3qEeEcpdS0Ys+BUMM8Sfkri5PZKwDg0ireA4ZStyS5uqV 3fA2GtMlI/lf
AglhVEUcCbp4trfKnby1zHD1iLmmFl/hfoMXJhlYgVrNdKt0czP/WQm58inu 0fCKF8rlxP5s
CKmvqLgOMlUc7tqGyBsrk3ChbX5zTXQ6LwmM7nhhP0BioQOTuKEgzxB7aruo mBITprVicM1R
QKGd9hF9i5xtGARJ4gXkWyqKoNZu05aXJwyDBo0sZpNtNlEWQcyqmMDrJNvi Hy1oxro/tfap
JTh+y3JFNOE4tYTwvKViDiXxpuCWdt+UhYRFFWXcocTobt5c8zb9iemz3VWx gNsMkZK97lT4
DV0MxBMNw29YUNMALFgWd/xG5a6CJYr3oMFGsndHGzU70dC3lb5hMUhobae/ oRZEaB8WI5pO
nqGTUVoZra3JGjof+SYn6DdCK/AymV7HSdqpgRG6cIrWME7jWQkwLAHCP6J7 u+7f5p/lGnzD
0peJ3iSrQM55H2Na2keTP+HCn+hK/obYYld/MlTD5Z9xQZzuQXdSZKCyKuTW jdkGimidgrpG
yvuUiMO0pnp/gPhcwt7nVPIXJB9jMDW0g+EQtpOp3qEaRpqpFinaO+jHXZ8q GcBJKrG7hud9
+hRewIt+3lJ4iXInCkA9IYV8KIXEooGQs81CtpPR3r4axprpq0Svowf3G+hj dfqYT8r83The
9eljeI12gp5us6T/gp4F2qikTzXT7yDHIDaDj/HGDt5swe1HyehgDTN7t+Ic 1QnYIEEfUw03
CeQTGpufYQSf++IuBhR1caN1caO4ibcJhYk2kZJW6VnIHZCS+g6URCJqmN/T 0E23EHhAGr4k
j6/oBn1NtXno83cHeHX+AcnPRKNJVlOyZiRr8l+sdNP+wEmx7OAdhu/RGt4K bQkJ72411eUb
kvAtpeC7BupMnTojqVvwnu/3Pj6AaCuaotBQaWv/B1BLBwg6rPIKlwQAABkK AABQSwMEFAAI
AAgAZZsROwAAAAAAAAAAAAAAAC4AAABNb2RlbEEvYmluL21vZGVsQS9pbXBs L01vZGVsQUZh
Y3RvcnlJbXBsLmNsYXNzjVVbVxtVFP4Ol0wyDC0GSEuhbaQoIdhGe/GWyj3Y yJAiYBCt2mFy
GAYmkziZoP0H/hafsA+wKmtpn3zwR7nc58yQ0JCgWWtmzmXvb9++vfP3P7// AeAD/KSgi+Fm
uVLiznzGLledzKpcLxumX/Fe5OlEQQ/DZMWzMtx07GqNZ3h5l9YVjwcauTeE IwxDId4bUAw9
tmv7DNdTU3o7gSxJLNJBDH3oV6B1NJpbM8wDw+IT69yya773QsMVXGWI5gsb m/OFxRzDlP4/
VbNRvMUQCfzpI8uDGoYwzNBncT/XcP1hSt83Do2MY7hWZsP3bNfKdrRxFk8M 1zCi4DpDqr1k
1albtpvJic2aXItIbjCkO0BfVMiqZGRMw03cYuh2KhbD8Hlfn+7sc9PPThVV MCQ1vI1xCvex
qMQMKaSmigomGAabGrmfTV717YrLcFW3XV6ol3e4t2nsOJwhrldMwykani32 4eGAv8dbSp3o
VOEYb8IP622sUkDdSBIV/D27xnBbv5SbhBgxPW745MZsqlNBFh2jVutcrzBH fdQPDxTcZxi7
DEfDQzyi3BA/5N7etbmXX5LJzIssf6ThY3zC0B84tmQblmeUKXdN3odnWSGe 1fAYnzGogXiB
JAi9KSsOsgpmGcab6co7DrcMZ96z6mXu+o3sKZhnuNZK1YW67ZS4F8Ui8Xpz jydN4XhyUsUc
coITyy2sOWN4UeTkiYY8vmBQKOKCUSbvhsi7C8ICTNewigLVxKhWuVtiuNu2 bzr4R724xjA6
mbRrSbfiJ43koeHYpcBbmWZhY13DhnAn6lcCbRUzoJaPcFkOhluX00DB15Si 86wKqyH4pGJL
kE8pnRVtRO8gSTjfNSedvBWVCkCeSQa7spQJvZ0MEXeA8hkQOhxKbUZjeCOJ UtLAsRtOpobK
eOq/Zh15utc6kxvqKoE1N0u86nGTWEilG1mvu75d5kW7ZlObz7tUEkNwrCZi apawqUMDzwKN
sAqqotGb0zjRPigyuFGpeyZftsUYSVzo7nvCCoOWd13uyerxmoI6lfjyiIkc Z/OdyE2dSU8v
/d8piNETpV2Mdj66aAVMvIQaH3iFeBdeo3cl/Rf600crL5FIH2P0FGz7BLeP pOQg/TXcIa13
aH0DEXqP07y+gzgm6GYSw0hhDGm8SzcJkrtCMpN0BrpRMEU3IBwawaEHD+gr cHvTJ5j+jRYB
tEpf0JTpwSMJpQVCeA93JcA9ZEKAX+hUyD6ZfoX3GX6lJZIIfkw6AYxSGB8e 0evTo1PMbJ9i
bju+cIIlUvmc4Rgr8af0OsaXJ9j8s+FDnKyDGmsMs+TwHPmx0AiL7IW+iNVX KMowaOaFXi2Q
jJBST7FFydvWp49aYtOpCKvn8NQQL0q7b/CtxKOheBHvGeF9fxGvSJpbHfB+ wHOJZ2AnxLsf
pj1KSTFfw2qiReT583NZj4ZIMdik3419GfVBKOvIG6KQlAV6XqLcinYg0brk 86N8e6hJH6mV
iYSHkdi/UEsHCHBjr9ZlBAAAjwkAAFBLAwQUAAgACABlmxE7AAAAAAAAAAAA AAAALgAAAE1v
ZGVsQS9iaW4vbW9kZWxBL2ltcGwvTW9kZWxBUGFja2FnZUltcGwuY2xhc3Ol WGl0G1cV/p4k
W2P7uUmUxM3SNHWcEFuFiJQWSuS0dWynFVXc1Hbt2A01Y2nkTCKNzGgUmrCk ZS07YU/Z2gJt
KW2zO7glJWVraSjwCw5wDj848Jf18Lfl3jejJdLINgfnzMybN/d+97vLu+8p r7z23AsAtuM3
YQQENuTyaSPbFzNzs9nYHjXeq6cO6TNGgmbCCAlszdszMSOVNWcLRszIZWic tw1XY/AK4WaB
VR7eFVAC7WlTn7H13GB/Vi8UBK5N+oO63+MCrRYBlKQ1s5CwTMdIC4hJgRaz 0G8bunpvdz+Z
etY8yu9aL2HSxC0Cwe6eMYFQPwG1QCAi0Yo2gWVJ0zKGirlpwx7Vp7NELpLM p/TsmG6b/O5N
NvcqGA1X09h1qgVrsT6MdbVe7tZTTt4+InENNhA7IzE0Mto31D8o0JH0E4y3 IoiNEqtxncBN
3cmD+mE9ltWtmdiIY5vWTLxRcEr6PWPs0CaJMDQebZZocUdvkJBo41G3RDu7 G3IOmBTCjckF
E00RD7G/Amu6e5J+OYy3YBveHEasYUGUamHzsDFjFhwOyHbcQCmpxKOnkWe1 qvE2snajxE14
q0DbjOEMlkvpRp+ALYar4G6WeDt2UF0QHEWqGuau6YNGyiGYuqlWCmUvp2oZ j26RuBXLBFan
VP156P15yzEsp8ASfRK7WGKtWa5KH6kBiUGWas7YhnHUYHa3S9yBBLGbLRK7 m33YLYmvwHLn
gFGz+lrJ4wF3AQpc190wWqXFt7wiPzVEUFQ/mxtrDRsZwzasFEd5L4bDuFvg moUsSIxglBYH
p5USWEw5RVvP7qaIFm22tcXHViqfy+WtWNExqekkqUbI2Bj2hTEu0LmoMGd+ gtLWnfAJWRj3
UlQWc04gTHw5GgLSG00N6Tljwdj0OVSg00XHICvvamylLEbto4S9z83DFZ3D Z3lWeoqAIZHB
jMBKjqz3IWEVHF3x39SYZjWIKXEQh8hJt8ZLPbiTY7dg3bByTsJCnph7ylXh 29S9sHqiZ4wR
3i1hVyOUQ8MfKZFFHKZUFChIKvar/brBmIb7BQI5nXWOSryXddpYp7DXNjLm /Tz/fokP8Lym
5u8ZToTxgMBVXnC98tfwQbLmvbDWhyU+go/SkuL1XYpNehHXqijWTXicJycn lxDehyT2YIhH
n5DYj6SGTwk08Vap2spnJD6Lz5ETilxV7C83JFhZvAtaNzOmYTcUqQKp38vq ZhKJunhMlv6W
0GTC+Dwl00sTrxQNX6Tdi0ccgy9LvBP38Q74VYkTeJgKWUGUm+HmRiaqpKi5 fB3fDOMbVLaL
S0t8C4+4XXbQ9VGgq/FiG9AdffTIrBHX8BgRt6iOmfh3JL6Lx0vJq+oITzZM XqW7LCV5/19q
ltDi2IsnJXTcx+F7SuL7HBZuYoMD+SKdqtyGq+EZOsepNXhS4hROk8/uYh82 CvmizQW783/Y
5G1PK1ZSV0TOSpzjLXaVC317LtNnWXlHd8y8pRbLnMQFFugoC0xtrxLRMM8n j1xmm3d0DeN5
cqaWlYaLtGdn8nkNP6LBtG4z9osSP8ZP6HSqp9MVTIE9DVPJ3Sw9mDVydETw Scy9fl2Ozg+l
eEXqv2t4iZobO2CpRfIL6hRZfdrIUqWOKLXdJh90O+oOg9sYi9ZNwrIMW1WB UQjjV3RqX/iU
ReZK5zd0UhSCdDXRvwCfU+k3R4BPqfRs5YO4epfes1092+nrVVhGWsvprYee /NcUPIsVp5XY
SqUcoPsuhLAeq9QsX6vLavuVWeDaaKTjDNZcoIE4j06+dUWD57GFb1sreOvQ TPcdRK2TjHfT
3GNYg4vYgLjCly4a0YnSswXX442epUc8S5NnsOIEVpzBmyId83hLAJfQdMp7 e1sAL0KcwPLK
+xNofR5i4gLilyDuDJFz0TnspOs2uvqVXHQeu4MYj54qs9ykAnc3MRpFLx18 bsMEBsjXOzCF
JFLYh3SZbS+xfYdiK3AnfXXZxujJbJui59BZAW5Wk7kqV5s8VwVvNZ7yTpLm bytZeR53UW7n
cQ97OlkLdbgKamUZar8vj65a5WO+PKif+/DouoLHVC3UQ7489AWgQo2gjvtC TVPYXagbPJc0
SmD6EtbW6j9cpa+V9W8tl+yDXiHFicqWEwidjoa4TqPBORzg0uWg0zgbjYbU TBfPdNHMrBrQ
5Gylnt1KeZruz9CCOoUOnMZGnKXKPkc/x85Tpc9V0YmX6ewq0RHtiKhvJwl8 a4nOVlpOcyhE
I++ZwxE1fp/iFTkWeTAYJAofGo+S+x+j6+Mi8kkRDESO0XyILv766XFFNXI8 8oUq6S/R3Ffm
8TXqX4+KYChynKVdhW8rgSdcge+RwNP1Aszi2XESO0PX+UoIdtBCBl6iELxM IbhMc7+kX+6v
Uhh+S+X3O6rr31NN/YGOf3+knftPeBx/xlP4C57FX6tCc9ILTYj3ES9Th6iT ccNZH/lBUrl/
fdNFPDcRjPxwZCIUeWFkDpdqM/E3Su7fCeQf9PZP6h//IrB/42qaW4f/KHMd LqRnLkjd56f4
GRkM8f5UZ/jnynBXyfDLbPhRP8OvEdTr/P830AT9rBAB2uyCZPh1rBNNCxoO 4BWFdZnixg1X
0M/TV/Hr5pb/AlBLBwgNFkUorAcAADwSAABQSwMEFAAIAAgAZZsROwAAAAAA AAAAAAAAACUA
AABNb2RlbEEvYmluL21vZGVsQS9pbXBsL05vZGVJbXBsLmNsYXNzfZbrbxRl FMafodNuWwYo
BUpxC2yRy+60dqnijSJY2oKr2wtsaaFecLqdloXZmbIXKHhHFP1ijOELX4xG I4khpoBsVRJj
jEHjR+P9jzE+Z2a63W63NNmZd973XH7nzDln+ut/330PoBPvB7BCwfq0M2Fa 3dFUetqKDnAd
4yIAVcFOJzMVNZNWajprRs30JNdOxvQE+wbHT5vJnCdbo2Clb0UMKFg10N3f d7Kvt+9Q97H4
sILG+GnjnBG1DHsqmshlUvZUlwLVNtKUrT++jGCvkx+3TAoqMwpq95HDTuX2 K6gKR0ao3UNP
dVCwVkMAtbJap6EeKxWsiadscyCfHjczwwZNiFknaVgjRiYlz/5mzT7XYD2q 0KyhCavFxgMa
6jxrLRo0sabmTqWyCprilfJEOs1M5IxcKtljGVnKhcKReOW89bkSXXXYhu0B PKhgs2+x370N
GckzxpS5PZ7KmRnDymrYgZ10PzDY26dgy/2NKghMmbkBN6HrSVAh3YHsvMCG 8NLzyEg9Y27X
8BA6KGEOOLnUZCrJwBz7qHk2n8qYE27qxwLYTcH7lUapriSpHlE8LBl+RMFQ eJlAYjbDtg3L
L6yuWKwE0t9buuNhP6rhMTzOED3sCwqiS90knXTasaO2KxEtZeySegrY5nkv PQHHmvBWKnN6
vDyhxbJUs+7pomz6h26B0iCPVVqTm3nYzCnYGI6NjUWWxiFR9GjYhbCs+jTs RZcU5mENT6Nb
Qd2kaeTyGTPWy3aIkTFjZh3rHBmVMTaHZHD4wrQgmwnx0xSukL7ISABDChrK X764PKohAj2A
4UXnXjhyPqJhH54SpOMa+jFAp4xvxLDy5uKu9X2xvcxjdlZY1HBMXlMVXtLw PF6Qk1g2MX8y
Vo9BjGtIYkJOzuZZ+mVJncenaALjYmlKw0m8TIacsxDCaQ1npHhraX4o48xc EMm0hlMIB+Aw
J+VxH8xPTpqZetg4K9Wp14Kea0NhmUt7Q7Kf13AO58llTE+bNgHbK7XOki3P cFctWInV7aEZ
z9grYuzVMhvzsS1nQxRfF8U3FATDPfeVSxOUdZG3mNrm5QQ5cBNOPpM0D6Us d1L7k6xD5DnN
YrZtZtyhYmYDuLLwfVg0pZin+TmFVua+ir9qqGiRWcyPiypTlPcWmcjus+be Ne6uwmpKr3E/
QQrkr065jQb+Gm/yYQXW87qaJgGdivup0ooN7okYaiqqx7gjBtbpc9io30LD HWzirfEOgguG
GqkCDPG6hwTP8PmIa0zzVLEZW1yzWxHyzXbwLmfqLbTOFu3UuHtjJbqqr6tI 2/q6UV+3Wv8a
m8qVkyXK1UVltp2vnGWkEvUOUe7X2yScAtquoUm/i+gJXa1ql5M5dBawZyHC JhoDLF7TkDJY
CwfbMe06C3kGfWeyeoJO5F2F8CRXkkCOmgr0wXL6mYr0HAoV6IMufXAxvSr0 wcr0b/F6ifRv
k/4y6d9Zhn4/36FHf4Aroed49AFe5xuRd60Hv3SlW+H9CfBGqUXiHJzlpXdW D7ZsnsOhhRC9
KvkAzfiQ3j7iJ/qqS6B7FosEOiso5lrU8Syec0tSR5wr6QDORZ/lCp+FvdNn iZSxhPT2HzBY
wJGbskgUcOymHmyfw+hCYrawlYCPifQJw/2U4XxGM5/T3RfYjeslCeos4nUW 8TpxgsUqCeLI
9aEu8lmAO3yoXWVQW6WHXCY2kYc0hxfLiWZJdIvtcpve79BGgcX/Df9t+NYl avI8FIk6fCJF
BrbP8ZXPYfscU2UcB4jxMxql1u8hoF7HpiqGy03ZKcC4hgA3VPUGMT254CI5 d6cAsygncUze
KHvZPzKOn1g+9/iB+KWE3S6y20X2U8UGv8qMi1Qv6yh1DbUcPdbsXdgnZDGH 6XhbY6aA3Gib
x8pF48z8M5kujrY1RAp4bbStgDcXym+bOyx/Y3f9Tqo/mN0/6fEvNuTfbNh/ WOz/lhD2+oTN
aGfjXCLZCjaO2LrMxgHkY7gN7+K9mrr/AVBLBwhM+b/D2gUAAOwLAABQSwME FAAIAAgAZZsR
OwAAAAAAAAAAAAAAADMAAABNb2RlbEEvYmluL21vZGVsQS91dGlsL01vZGVs QUFkYXB0ZXJG
YWN0b3J5JDEuY2xhc3OVVG1PE0EQfgZqC+WQ8iKCb7wVbItyVBQxEBJSIJIU NIHwfbkuZcn1
jtxdNfwrTRQTP/gD/FHG2eVstBwW7nJ3s7PzPPPs7Oz9/PX9B4AyVjLoIkw3 /Jp0N+xmpFx7
19gbNXEWyWBbOJEfnOfLGaQIY1fj9j+qyDkhpKMTFeYXmavaiWyVo9eUp6J1 wmyhc3jxkJCq
8EwvCH0W7iCdRTf6LWRwl9Bd0AEDVeXJvWbjSAYH4siVhKGq7wj3UARKj2Nn Sssk5DtmzZdZ
Zp8jQrmpRD0QDcKbltbYtVqs+kHdlo6rzkJpy8ax7fiNhu/Znh+p43M7plzN YhRjGdwnTHbK
a2EcDwgjTiBF9Cd3HEIoFm6akmvsH51KJyLk2mUTevTC9thLWG6tSo9vtaRJ C1Na7OClWI1v
Ke3/h5VLWZPHoulGFU5MeFu4kkY6fiDtrXdG9K1kzFl4+lfNYoqWkokOqQhT 7SU4FR+E7Qqv
bscxWe68eQuP8YSw1Fl7In7Bwgzy3HsJbZQIKFsYxgghu+83A0duK93A40lN s6DxhN59VfdE
1Aw4rpLQ4Zdnde2GpV3nygxseY7rh8qr78roxK8RrB3Pk0HFFWEoQ0yyzG7+ kVAup48lWxnz
9LC/l60VdPENZEvzX/n1DdZnHnVhQPvMDDFuBzm2LLa1dxBDxs9rj1nW+Ktj e0pfkL3AvU8t
jrTBVA1+9DImxmvrIR7xPOltS2aaaGd6fy3TtGHiDUxmmm1nOriWqcDV2mBN xZhpLq5RujR/
gVI7DxkenmfMDJ4lYZ7/DzMMOwmzeC0GKbww1hJemu8rLBvvKL9fmx0ig+Dr N1BLBwjuVTFS
cgIAAEcGAABQSwMEFAAIAAgAZZsROwAAAAAAAAAAAAAAADEAAABNb2RlbEEv YmluL21vZGVs
QS91dGlsL01vZGVsQUFkYXB0ZXJGYWN0b3J5LmNsYXNzjVRdTxNBFD3Tli5t F1sQinwpYtF+
ACsiKhTQWkokqVVTQqI+bZehLLa7dbvV8OQP8Bf4B3zyQfEraGL0ycQfZby7 XSrQAs0mO7N3
5pxz79k78+fvtx8AppER4GIYLesbvJSSaqZaku7b89SGXDG5sSIrpm7sCPAw zOpGUeJKSa1U
ucTLm5Kil8u6Jmm6qW7uSGq5UpIOw1YpxCDa7A9l5Zlc5AzhrKNWF3LiSYaA Hc+/VE1li2Ew
25xUfY22+vJqUZPNmkF86WM3LmRPzthJNrlEjN4FVVPNJQZ3NLbO4EkTjx9u BEUEIAroZhg7
zaXItB8hnLUQvQzj0RaJHQYkY+s+kCMiBHRas3MiOuD1YRDDAoYYeltZJWIE XvKAr+bya6lc
OsMQzKoaz9XKBW6syYUSudKT1RW5tC4bqvXtBD3mllqlQk5PjCGkVp2PFd1Y 26kQvC+a3ZZf
yFJJ1orSg8I2V8xk7ImAcYaRo05zRTe4lKnvCiCCKyKiiJHRPF2Sq5TFaDTW 9H8clL0jGUAC
kwImGIZP2idiChJ1T5GbmUaTjR1P/r/hvLqdnWVWU10MXYrBZZM7xjA8ip7S TjlrUKmfmqVb
950fs7gp4Ab99+NaWMQtzDF0buj752KmOY1DXpN6UzECqJ7xtpIiV0zZIC8Z 2q6X+rTu1bIq
Fw253KCKtfgLra1g6K5T5Kj4Bt6hdSprhP15vWYofEW1enqgVf9OWRbQzbOq adywu4RXcZEO
mJtuPRfsU0Yzj3XuKOqzo36KMeu007uLIk9pndE4Ev+KM/HvCD2mSc9n9O2i /zd8uxj4iP4P
NvQ8vQdtyhiB7hH9Kt0EcYSphYcxiQu0ItbJMEqJgOZjuOQIacTgojGeIOa3 6PC8S/xC5A2G
Ej8R2cNlhj3EGfYX3fQ0VMOkBcxRIfNUxgKpLtI5u20rhuusjqI1u0pXPqPn GmYc7bSjHYx/
Qp+l9wXXf2L+fUPAa6ddOEAYbBAGSXDRJlwiyTrhhP1NaHaU4/kBG1wNG+60 gXzVEplqA/m6
BdKFu/Y7jWUa/bQWsqvBP1BLBwgFBRgFGQMAABYHAABQSwMEFAAIAAgAZZsR OwAAAAAAAAAA
AAAAACkAAABNb2RlbEEvYmluL21vZGVsQS91dGlsL01vZGVsQVN3aXRjaC5j bGFzc6VVa1Mb
VRh+zpKSJmzLxZYCLTcFG8IlWLxUgtxCsGmX9JKI2tbaJVnC1lyYZFOnP8B/ 4Bf/gM74CesM
Do7j9Ftn/FGOzzm7bAkkMGo+7L55L8/7vJdz9q+/f/8TwHvYCUIT6CtV8lZx JVZ37GJsQ8mZ
b20nR2tAoOuZ+dyMFc1yIXZ365mVcwR0FXDPzH1jFiyBXsMDcGM9fVygfcEu 286iQFtkYlMg
kKA9jDZ06AjifAgCF3ScQ3sInegOokvgUjMkHT1oFwhZqXQmu5JOJAU6Dbts peulLauaNbeK
JNFjVHJmcdOs2vK/pww4O3ZNYMBoVWFcsm8IfLF7GDzcMmohm40vMvR8vuIq BOYiRqVaiFm5
or1bs2JWaZtypWrFkm7T4hPG8T4SIJSxC2XTqVeZbuxMBGbtwBBGghgWGDzV Wcco3uYArETR
rLEDI5GJVujKIx7mMMZ09GNc4H5LJq7vf6k07OxYycP9GT4DQWD1f1JQrYpi KohJgWunQemY
xgz5WYlK2TG5VVWB0dbd8hJI8FmdJ+gGd7FgOQrK3ratampNrXtKNvR92dAP +I6k/n3PZIqP
dNzExwIXmSKZqe9y27mfnOd4E4a5SqlUKbvbmjTsmoSI45MgFgig4JVJWnQs YkkgaNeSpV3n
hWL8UDJe0bGKAYGOvLVt1otOwqxZEmVNRxLr9CMRgcuRVPN1lkP2Nm7o9AEy hXW0oC6jkSEd
Zo+pFk5HlAdy/OxGczOCSLMj3uFes81C1SzJ4u/puI8HZJZj1Z5enctG12bD CiLLOM8vra45
gU0dn+MLXhMSTyrlZhlHnJofFT3XsEwixUHlD9l0HSfDQ161ahyVvAKboAXK KvGFhrwcJPsg
B3miNqVvr3gntecYX2UNZyr1as5at+Ut2X30YpyRBAQiC9n5k1wWT6p4S5EK P0WsWn4IKAUp
8+PAZ4j/vuRb8N0d/Q3hl9BfI/QSF3+F/guVbXiLzx4E+JzicxphzKALs7hE je4G4jJ6+b7S
oOlTKfsxAA1XKWu4ptI9IKYmPaOTBxgUmNzHO3t+pnYVP6/Qe10/D11K7+I6 7W/y6F6egLxU
/TwRlecPIkrWy0wzIcDCfkSnzBkTmNrH3B7FDwXS0weYF/gBHVFql39CT3S6 7QAJDa8gNUe4
DbFp4BnVsc6sKQzjDnMZ7MUGlnBbcY66OX3Oy/gUtxTXZcVeY9QoY28T84pf 47JXh2u7o5jz
VvMrMmRFIkDpHP9nr/6ssDfg/oTX+xtTr7CRjk7v4+58oD/wGmFVkpT3aMoo 02cnTEp6U2WU
E5ZL0YdHGMRjjOErVvgEczB5UW6x0hwZ5pHGtqr4lupK1q84y9iHilPWq3iQ lkdEaiNWJ9Ge
sLqb1H2Np9Qt+TpZw4ha1azXD9ffpG3Jl4S8QPzObKlZyw7LPmri+CY9P7JJ ms9RYw2PGzZJ
8zeW14mPnj8D/buW6E9boK+eOA+t0b9viX69KboGSz23PfzCP1BLBwjhJtGV YgQAAIQKAABQ
SwMEFAAIAAgAZZsROwAAAAAAAAAAAAAAABcAAABNb2RlbEEvYnVpbGQucHJv cGVydGllc3WO
sQoCMRBE+/2KgFfq5gdUsFC44qwsbTRZzkhyu2wS0L83WinqdG8eDAMzs3Qs dw3jpayhkX3H
VnS97wDOYcIwuVg9ZbMyOD+C+UxiT9F+98P2sFn0+90PJbGObfeW4l8nykJa AmW4njSj4yQh
ErJ60ucRyFzVEWKDrM4C1yK1vLidtvAAUEsHCBBBqLyGAAAA4gAAAFBLAwQU AAgACABlmxE7
AAAAAAAAAAAAAAAAGQAAAE1vZGVsQS9tb2RlbC9tb2RlbEEuZWNvcmWlk0lP wzAQhe/9FZY5
t2nLBUVNUaFFQmKpoJW4TpxJMHiJbIe2/55JSDeExJZL5PE3b55f4tH5Wiv2 hs5LaxI+6PU5
QyNsJk2R8OXiqnvGz8edEQrrMJ7NQbxCgWytZbxrGlJTh9FDUsbHtJfw5xDK OIpWq1XP6qJn
XRE93V7zLeKPkdVpQwz7/QFhN4/iGTV0pfEBjMBD8cbHUS8KJUuPjQDqvBYZ RrMa48yAJljb
DNXkQ8X45cP1rkTLucNcrqkCfEzECC8VeC9zSadj5DMOm5I02vM3m1vdqYTC gW766s6JMTZA
oEw887ZygphC573siCMywwBSefaKm4Tn1nL2BqoiOgXHo1YuOtTbjngMrhKh cqCuEOiNX3h8
wBwd1rm1Pg0dlkxXZYnuwlYmS3h3wFszjOGi6T6JojsCORPWkD2j0YSE0zz8 sESGDqL5bVaN
9HdBmT30OSUFKapdTrXm/4OahOBkWoV9ULXsNo8WmkKAusB+9MtRiDMaTZdn Z+9vVtb/9zG1
VarwPn1BEb7+hLQ+utbjzjtQSwcIzLWQJ5gBAAAPBAAAUEsDBBQACAAIAGWb ETsAAAAAAAAA
AAAAAAAXAAAATW9kZWxBL21vZGVsL21vZGVsQS5lbWY9js0KgzAQhO8B32HJ yZbSFwiCBc+9
eCw9bHQNofmRJBZB+u5NavG0zM7Mx7QOLcUZB6qXoBtu/Ujmxi9zoEmvWSM/ sWy/UBHspmCs
VXa6jhpVQFtP3jdcYsjBwWCM0O0GbBUDgDcauOfi4/wEl28UFfv8EUXXBiWZ hpchB6IUYCt1
TClAn4J2CkpEVMe384s0BOsP+AVQSwcIacDtCZYAAADJAAAAUEsDBBQACAAI AGWbETsAAAAA
AAAAAAAAAAAcAAAATW9kZWxBL21vZGVsL21vZGVsQS5nZW5tb2RlbLWTXWvb MBSG7/MrjHY9
KwsMholTQtOMwhrC2GC3qnysiOnDHCkf/fc7ku2mWTNGL+orS+d9z/voa35z sqY4AAbtXc0+
lVNWgJO+0U7V7OeP9ccv7GYxmStw1jdgqq/gHtJPcbK6evbNyDcp6KNuLlRU q9kuxq7i/Hg8
lt6q0qPivx7u2SAB6REuRCCN7gJkIdiWz6bTGb9LspetR5D/W0dSVmTDSiPI 6PGpZjzPL3lA
2bfOgq3ZK+3uVzXry4NvIyycp7TtPEbAJKO052RKLcdaCWdo6W1ntHASvsEh UX9OOyx994Ra
7eJag2lCzVphArAFWeYtebXq0ReZYNk3nPOLUtLSZmyF/C0UhKJDaPXpTNro 0PkgHg1s0R90
A7gWw/oj7oGOOTUd7DV7mfSBZ5Q+4NaIEKh/ruTB32K+0kKhsIOpt61BxD1m Lt8BRordeEex
cqdNg+BGDImkhNs0e0E2NKhZHlV336EFskkorqdzR9OB8YGcn9HftJYNDa8v 5AK0P7DrpMsY
UT/u4yvS1Js7uk8j5fsknP61CXk8Xhh61PzVq15M/gBQSwcIjgMLBqgBAAAR BAAAUEsDBBQA
CAAIAGWbETsAAAAAAAAAAAAAAAAaAAAATW9kZWxBL21vZGVsL21vZGVsQS5n bWZnZW69GWlv
00j0e3+FFSSUosUurJCgTUpLS7qVUjbbA/br1H5xZrFnzHicNlrx3/fN4WNi Ow3QLUKtPe++
37ij9/dp4i1B5JSz8eCVvzfwgIU8oiweD26uJy/fDt4f7ozidB4D2z8D9jGi kgt8AEHwwbtP
6X5F/xrpdzz8h1xZvo+w8WAhZbYfBHd3dz5PY5+LOPj74txBy120u9811uu9 vVeIOr0KF5CS
l5TlkrAQmpRGLYcYwoRmOWgOCFZc3gWo7gWPIBl4Ic9WgsYLeQ33cjwYHCK3 UURJLEiqGXve
kuYFSc5P0R17e9YezwO0e0aEPElInn8iKYwHp4bso4WUmFRCeoUaM0lDDeMJ DVdtuvNOvJJL
SBhnNCTJJhYnbaRKi5CzmeBLGoGYCcoFlavxYMrvSoQlSWhEJN0a7SMjtwlE 44EUBbTBpxBy
nRK5i5HQJXyusG7OJwDRLQm/WqxDjVaG4LJg1zQFbaml97yFgPl44PuB+Z8l RUxZgAGugo2B
9kWBjkzBZ1xqSUGqIh6Urz4mij55FlRngXXjILBaQAIpMHm9yqCSjtm5L/Fg PLBFcAGSaE4K
bVDhqQT5A5IMRHeKGFglaknhLiVZv5gJjQsBnw1aLWauj//CDKVzClFDVtMh kSB3ryN/IgDm
XKRTsmqIxsyQBMvpasGFDAuZX/NDbdDxKOiCGaq8PLHpEk24qMg6gTayPEWG pSOMg9dCa7g0
I2ROWvGRPJvCEpJPCK7zoy5Y1TLciKyVrCJcr9ctKlaRbS7XhwpWcdhQrZ6H dmYLBaxU7GJx
1o3V0EIAkXDCU1Q0WpffhNnCe6D0/s/iUyqVke2pve2rr6f+Sje5xddRfh2S zhmzvFpFiH52
ZZhibSF84BF20+fP7o8Pghcv9G/vhXcUm+kJkT0J9O+suMVYGkKvZurhoAIW 5V5HfV/ygmGx
XUKIozFOwPtXc3J+vKtE65e2fHsc1C+ZoEsEe31RttIL6ptulPtfMC8z3Bmm 5BYSb240Vzbo
A/N64D2OcsZNtYOGu7XZ79Z/yAXN/RzkCRfI9hS1Z2pVyYcM7ro8GgNPQYqV X6EOY5AXJFP7
w3DXP51JPp0N3+5qib95G4C7u8bMUoUpZfCFRnIxfLUG+cAFjt8+lS6IwJKz OF3y3mxS5peB
pRm1T8sewzAvZT5swr8/QtYtOY28dRnrid2dYt7YW3fiD+RtaUk3bxUotTQO n38ruDxQUPO0
21BLR5RE0bCbx+7B844S+N4+fJTyveU8AcK8dHWTw5Tj1DjhmEWUITBHV81J ksMjSOMS+w9E
lbyiLa2jRgXIQvQo1+ucX9JPJxZGsUPgcIPubdX7HNpBvEWYf74H/mx/xmrv TM/+KPV09H7j
Gu+NqasH94SEIA+rUTnCfkvWt44HN0N3eaiXWrVCqBVhgu0DNfwRlnbZxAUF l0uX94Im0eNy
HQVtX4wS5dqmG+rN9o2z2fbutuqpvd9uueGqp4e2XJRs9rTzUF34G1c4bcHm XfLptsnODa9j
x0M/oS3HeU5jBlHHnuepYpEgjJf6Csel2O6K9gMF69hV581m02yuagYXFY2r aUZEDmI8CIIj
nXsz/Z4HRzTNTJi1c3N/rxFkW7KWvxvfreo2YOgMx6auYghMNdibX+Bc/exh RhIVnIokFrzI
mgpJKhP0yJ+3/+AEyJ31nCcJwTC0UxiNFnTNrJZzr3FcfETEletPK0/nogNA nUNBM6m/kpl7
mN5U2pjIXZuog2LLKThyrMdoNPqIMbp0k+OSUYbBAMzwEGYkbtjUsucM2BVe ISIioplD07gk
Yxe6MGG1avlmTCU1DtNZbrC88vJeqarbKHLedOnaQpFOVbBagIj6+2BTn+NO 2FfKIgcWPImi
2DYZJqOqqramJ91Ao2oT+DS64iKJ/YnFbUVnHRCjZQV5GhVFkWDDOmbRmaBR W89LDfYQ7q0j
GHUvHfqgKiO3cPRX4sDK1C9mcll2pZ/cL6SWl4BvBRUQzTRFfti+4Y2CdRwt zojQz6A/umvt
Rowsaay+s5Zf85R3L0t16xrX580uUn//66HI9DB0SPq59fSkUeDoVy4EN1mE Lc9agBt5BkKu
rhZQ9vuRJLfbtidDfE1u3d5EWpX8CEzXXfcgx5Milzzt56c/htZnesap0hb1 DBrNaYK+2lQt
6tsX8p5oxObwUlhuinXtU75adHCkauSNxDD3y3WyjV/dUq41AF0jBQnlpzIB 1C6J88nFquaW
sbIa70ht0349O+wX5PJvOJZBz55hs7C5zVgC/Rktp1ignym5ArGkoTv9R2tL T3+csUNFMKe4
MRoRdTzxBrh5cttFSz/VS09ZO0219Ym61aDiF8CKUh975JRpaQA6fIPaU06w 7HNeiBCO9SAp
5TbFHO6Mgt4/9x3u/AdQSwcItIc3SAgHAAAyHAAAUEsDBBQACAAIAGWbETsA AAAAAAAAAAAA
AAAcAAAATW9kZWxBL21vZGVsL21vZGVsQS5nbWZncmFwaIWUTW/jIBCG7/4V iHtD2mr3YNlJ
+qFdRWr30F72SvAEI2GwgDTZf78TbKeQRo1vHp73nQ/GrpaHTpMPcF5ZU9Pb 2ZwSMMI2ysia
Prw/rdd0uSgq2W2l431bPnHzwT05dKo8qe5QVRB80Mv4Es9q2obQl4zt9/uZ 7eTMOsn+vq4z
zOfY/j5Sd/P5LaIv76KFjt8o4wM3AlLlVEwmB6FV7yF6IHD0+cl+HzEluH6G rTIqYLmUGN5B
TTvbgH6gC/SttkruHPiYgoznqOA7HSKASANeONUH6yZsAv+g0a9oMLJIcxF2 XA/RE47le1WG
fz2KTvN8szvTQPMGAtuUeuzzij9m2FjXgEvgi+6v3EllHiObqFGPc4XgMz0h wfY1/UHPohq2
4UJ4Y0Ow3YUDp2QbBSyplw0FJxHRKt04MNd6eOEb0HmOz8HEw3E6GRLgEAbk s4yKpfeSXJYA
79OLJWSKYR0QBv6bdMP+1JSx1bhKszlbJStzfE1zs9XUPX46Y30VSwRxLdlo Fl8Mps83NDZX
5BUkyxJtK32s+KsuG+oFcXE+hiutjRMcuqnY2e9iUfwHUEsHCMlzYcSvAQAA aAQAAFBLAwQU
AAgACABlmxE7AAAAAAAAAAAAAAAAGgAAAE1vZGVsQS9tb2RlbC9tb2RlbEEu Z21mbWFwhVTL
TsMwELz3Kypzpi4gJBQ5AVRAqtRyKQeuJtkmlvyIYkPg71knrptUpPgUe2dm Zx8Ku/9Wcv4F
jRVGp+RqsSRz0LkphC5T8rhbrdfkPpuxUu0Vr5Mtr2uMzL+VSCLpGkmzOR6U 0jbBWEoq5+qE
0rZtF0aVC9OU9H27HsHsGNbedKjr5fIKoZtdXoHil0Jbx3UOQ2bvZUSGXIra QqeAYa9yR1Vv
1p5wnTHyP/ItfUPUE+yFFg6LJBlqMG0KsFmnxnKjHRdagXYvwN1nA927P1UD +5QoBMtHFDcN
XFD6JHjZcEU7DUKDimk1FKtKyCILdFYYhbpbcPxZgpePuhPKr3g9CCJf8g+Q YU52wMV+J+6n
hpSEWQbbmwGeZJHAit5wFx7InJhALUTV1YV30WGPVlBk3+ew0wLDKqjmalgK HdUSn/0Apwrz
sWTVYFqcmp8hmWpfAGPqh5pLcA7og3+wi2X8GHgJ7fA2zygeexFHTMczZjRu 0UEzAMNtxfUX
t38vU8zQ32OOsDP+8ewWnhL+WLJzyxvpoWGTJk8a2/MYjfUyOv6fZLNfUEsH CDq2rlmnAQAA
iAQAAFBLAwQUAAgACABlmxE7AAAAAAAAAAAAAAAAGwAAAE1vZGVsQS9tb2Rl bC9tb2RlbEEu
Z21mdG9vbJ2Sy27CMBBF93yF5X0xUHUTJUGISlWkvlS66NaYIbjyI7KHBv6+ EzeFoLKqF5Hs
Offeydj5/GAN+4IQtXcFn44nnIFTfqNdXfDFallVfF6O8tpu0XuTvdPnDWod MRzZwersJJ2R
dMRokaGLGdUKvkNsMiHath17W499qMXHU3WBxUusvU3UbDKZEvq4Ujuw8ka7 iNIpGCr7ji7U
oIxuIiQLqnc2d6Jr+R622mmkRnlJHnkjDSBCsmMMNRoouPUbMIvXn1LiiOwy Ys9RdNQZHhuC
hwN5CH7f8BPU272sP0FhPJ8rb4xsol53VQz734w/KddylgFk13+XxwdkH/ZM vQ+PNxBV0A2m
q0laYA5alrjyBObRSmMq5d1Aey2eBij3Bisra+BiYGBkqOHfBrlIf97P+rzJ RX9D9PTEtbdX
jr4BUEsHCBlDpQRAAQAAugIAAFBLAwQUAAgACABlmxE7AAAAAAAAAAAAAAAA GQAAAE1vZGVs
QS9tb2RlbC9tb2RlbEEudHJhY2WlUlFPwjAQfudXNH2ZPLgOEo1ZGMSAS0jE GIXEN1LHORvb
DtsO8N976wZsPPjiHrpc7/vuvut3o8lBSbIDY0WhEzoII0pAZ8VG6Dyhq2V6 fUcn497IGZ5B
vKzORbEBSQ5KxCfaEGk9gh8W0zbGXEI/ndvGjO33+7BQeViYnL0t5m2Yr9kB QibF1oIH5+qD
DaPolvmmdIzEkcbWPrS+DCE7YUsu5zOUEEUD2tx+l2B+lnBwCb2S4MgappJb u44hKwzE8YMP
SUJUNUqK9VyowHF/HXpQjRD6xA3hmWdfPIdQ29XLHMmBZ98HhOvNGaa5gir5 hMmg73O1hqzQ
jgutQLtFepby6kyZudJwmQLHP3RltVmosMHUGo8EVPn3mBe9Q5jWMXr87zln gueGq2bUy05H
VGWcDfrexcbHR/4OsmNm286blp0dQ/G5gDK/Dey8Drih7HJFx71fUEsHCMmv VztXAQAA3QIA
AFBLAwQUAAgACABlmxE7AAAAAAAAAAAAAAAAGAAAAE1vZGVsQS9wbHVnaW4u cHJvcGVydGll
c+NSVrBJzi+oLMpMzyix4wLy9JG5QAEVzxQVLq6CnNL0zDy/xNxUBVsF3/yU 1BxHCMVVUJRf
lpmSWgSVKy8v10utSMwtyEnVyy9K5wIAUEsHCMXlZa1NAAAAYQAAAFBLAwQU AAgACABlmxE7
AAAAAAAAAAAAAAAAEQAAAE1vZGVsQS9wbHVnaW4ueG1sVU87b8MgEN75FeTk FUjUJQO2lSVS
hkoZ2rmy8IWgYEDYqdJ/X3BwHizc97j77mR7Gyz9xTga72rY8DVQdMr3xuka vr/2bAttQ2SL
ypow4tP6kaxJIXLFGKFS+fAXjT5PTQLiBRFaHfqKMJa9wV61cZmkVOJtQpeH 0eCNm2rwUfOS
w3E4pdpH5Bodxm7C/id06tJphCa35wmFKPD+rtHUMPge7Q7eBGW7cVwk/jl/ xzLxzZgCZ7V4
RelI9FyBmPOleOyfLxPLaf9QSwcIYnOHG8gAAABSAQAAUEsDBBQACAAIAGWb ETsAAAAAAAAA
AAAAAAAeAAAATW9kZWxBL3NyYy9tb2RlbEEvRGlhZ3JhbS5qYXZhjVPLbtsw EDxLX7F1Azgx
KvLeyIIDNIcAfaHIvaCklcyGIgWKamsE/vcuH6qTIi5yokguZ2dnRnyzyWED ZWPGg5X93lVh
y5/t/dHFXXtBK89H0TyIHmEwLaqb6zyXw2isA2N7ho2S44QMh441ZhiMZrOT it1+lJM7X4qN
schuv9Q/sPFlPJF6UxRQYy91MU9oi9Y0UBSB4A1YHC1OqJ1w0mgwHbh9IgUm AMG6xKEq6+qD
FL0VQ8nrquR0tGZ/0VG3/2KHuzF0uSfEzihlfkndQ4fCzdQThEWY5tGPgu37 UD+r8ACgVLJ6
3CmpH5JALHV/26P7TCcTeFbhK5A5lpyeRNETSsnHhchuwkVp9iksX6P8Hi4h X16Fyji60NpE
SbarnqRtYw2NYbbrWtj1KhT3qNEKoh8tnWslG5Daoe1Eg5CQAX87UmiCZA08 5pn3JiOIb0hi
6Cmo/lOoGRcLFtXTiIvm0BjySuqBLCPzOrSoqZOiYLAA6MX2u1BIRVFnD3oY EZ5r6rGP8dm5
kGTJRr/epXCg0N7Ip0RPRvyPIchJr4mZQmHfBUgCIHYWhVIHmPZmVi2xIH6R swCCbawcQzh9
LWOJL0+kXs6fv9nZoO0ZaV/HODZ7TXy+B0AKUXZK0RPc7crZGVfx9hSbzOcm C/916QEqWPJ9
eUV/8BE4X1KU/wFQSwcIM/C2eQACAABkBAAAUEsDBBQACAAIAGWbETsAAAAA AAAAAAAAAAAk
AAAATW9kZWxBL3NyYy9tb2RlbEEvTW9kZWxBRmFjdG9yeS5qYXZhvZPfToMw FMav4SmOyZLp
EuABROKiM+HCxeheoJQDVKElbVEX47vbls6EzV0sGq/67/R83+/0NFksQlhA SkW/laxudOaW
yWRtt2Z5OTNjEvaEvpAaoRMltsvLMGRdL6QGIesYact6hTF2lZkLifHqjlAt 5NbEJV7qLIqg
wJrxaFAoo1JQiCInu2kQ0iLzV9KkyKASEnTj1WIblGvopXhlJSogQCUSbY5R N6J00UhoA1zw
iBRKS5MKaEuUAlHtJXJGkJcHNq4V7vDiezc8jMzusEaO0miWYzWGomUUGNco K0IRxgseAfBd
GwUFuzLARxjYOgSeVjFet6gFNxmUJtwk8D6r8ULsQo/VLDiKEUytBtZrsOct Xz9tluubFVzt
aM1TtvEkKrc7jDN9fmGe8Nv7I+pBcvsAHN9AFM9o6mycj6Wep9hlt4zUknRp YubzX2FIJ3ai
1gG8j/Ed41cnU61Ncf4FaV/ogMcGeBg7/ZnEdtLuw6qhtx8VSyi25oCpP+kx T3KC0JG29H8M
atSTDQf2CUky6cvwC1BLBwhTS4BMlgEAALkEAABQSwMEFAAIAAgAZZsROwAA AAAAAAAAAAAA
ACQAAABNb2RlbEEvc3JjL21vZGVsQS9Nb2RlbEFQYWNrYWdlLmphdmHFWG1v 4jgQ/pz8Cm9v
pe5WB7m7r2VRUUtPSFd2Ba2Ub8gkA/U1JMg20lWr/vcbO84reSEFup9I4sF+ 5plnxh47V1c2
uSIDL9q+crZ+lkP96hTe1afPE/8z/jr2lnovdA1kE/kQjK5tm222EZck4us+ eAHbCujDZoXP
EYf+eCQlZ8udhOsWw9uACtFm9CNevM1sBivgEHpoaDvGw0+9HlnCmoW9nQDe 8yOP9Hra28dn
IIPl0Mw9cJZDsoo4kc/Gyb4ymkjiRaGkLBSEeh4IEXGR2YGkJFr+C54UREaE w5aDgFDqpXeB
XoeQQcCGQL1n4ilnfx84+F4aWQGVOw4kWpEWSwh3m/IADf34bz5FQPJ1C6nB wDEwNBMQ+ns8
3AhIwtp/0D/31JMRf9WDeoC8sND/dmE0cKEH1hACpxL8WB67ZcA8wkIJfEU9 IPFMhlwC/0lc
WpAkkuSnbakIWSYOibpCuoG+/loXOKvWFauIylKwrDnKMFwTmI4exuQbuYj9 vECB1K4vtgr/
02xyHiDzBU7dCcr5SJkvfszG9xNXw6F7UARaBSCjEOMqJMXEUvqUGciToiop ZjKdP46mtypq
RpyY/EG/YDVRX1jI5JevZey51CTMTzP28udNwMKXwpR3jK453ajJyAA2Q/M+ cPD57TJOxaM8
zSVYecFqgz0nf1uDNP/68rWaPkw9cjcZ/T0bPSBlf5T5SApMngvlLFbAKa4m VP3THl8mBW+D
dQwrmimpJGBCni7e5CbiPs5cgX6xmH6/G8+rnMDStwSuRCgk33noEA0Sz0Si zctyDE8RwoPB
349Hj0+z8eL2+9P0EX348whhqsCkqlQv55NkslQHPaq/NIlRRbGKgCYlYqXL CZEmh4jzhk4B
RdHFO0SXxHF/FVa3itfDkyOV0odkhoZcTou/EH0GfwYIEk9YpTOVJlwjLKeH Se+Kcn2UL1zj
aIKxV1v6exljhqsTIz7vknw5vz6QCPWtvjTXMJQkqkhriDgzUW0wizjq+UuR JzVGmRywD2Zd
QI7lhZnpUK4rRafmKJfiD5Bblq37XKmxNqHFdbqLytJaVsWAjgvW6ZgJXbDP rqccoMKqNYwk
EMvKadqxso414WwRT3FS4lzNmvvxlLltfLlHkuXWM7WK20l8pthNc9yRIB5I uop0dzJ992lY
edeyNV2J6YiVt4UPRaebMN/BioW4ZMCwQ6ZB3R2CwprdIljJNYJVf49QGmq6 SCiZ5m4SspG6
qwQrvUvo2NZlVwL/JK5j8x9zVnUmNgSdomNrjEmDG+1N27u6tjI9MT9Jpc56 t7T17ZePCR1Y
69zbJco5lrcKB7Mdea/Fq/I1v1kfp5PWBuqkCsl6qO5NVLM2TCtVICvb1t+h ipo+64wayHaM
Qru151Ju1+3uV2VD9oFOuZUema3xzbbfiOMUZGD/D1BLBwh8csEYLgQAAIkX AABQSwMEFAAI
AAgAZZsROwAAAAAAAAAAAAAAABsAAABNb2RlbEEvc3JjL21vZGVsQS9Ob2Rl LmphdmHNVMtu
2zAQPFtfsU0C+IFKvLeK4QDtIYemRdODbgUlrWU2FClQVNIgyL+XXNF27NiO 06JFT+Jjd3Z3
ZkQ2mUQwgbTQzb0R1cJOacs29v7o7LI8c18WNby44RVCrUuUF++jSNSNNha0 qRIspGhaTLCe
u7U2mHz8nP/AwrowFiq9iWPIsRIq7lo0cakLiGOqegEGG4MtKsut0Ar0HOwi VAJNQDBMsZ6m
+fTKHaYsn6bM7YfJChpVuQ1Mdw2V+Obg5lpKfSdUBXPktnMFgRuEtmv8HFi+ o/hOUgJAKsX0
YSaFugkjJ770aYX2itcIvh2/oD4eU+aiX8rLKCnbykhZKJmyZtn1rMUl0ckn +nzp2afy7mA0
prCeIa6U7pk7P6mcAsqdguQ5yvOhci0OTyi4QoWGu0F7ObtcigKEsmjmvEDw sIA/rSOyhSAf
PEQDr9/A5X9Fx5lqSZlbLjtcyrRShthYKgPcWiPyzmJC6fv0HwSR/Pcy6I5c eZme4q+ofgIM
olVDC4VEbt4SgAt3ihrkUt5Du9CdLF1Nx6ShbjmU2BZGNOQyH5skoTsWWtjt JX8zM0TAnvl3
9ddDk5anbW+b0bW7U9V4fXNI5e+UEoIpsF+ulRx4KQc9KARrjsbur1vJdo12 l2ZHO/t1Qu5n
r+GG16EJ34HCu9+gcTXibiJutShhk+q+yAYlLzo5+2s2zv5nDz9rbsvA2eiD dq8GHuve7Ajr
9ojeutkf+HbjZf23jj1IWj/WYa8uWV0b9REYo+c4+gVQSwcIkT0xVEACAACm BwAAUEsDBBQA
CAAIAGWbETsAAAAAAAAAAAAAAAAnAAAATW9kZWxBL3NyYy9tb2RlbEEvaW1w bC9EaWFncmFt
SW1wbC5qYXZhvVZNb9s4ED3bv2LSLRo5iKl7rboxEqMw0DaLprt7LGhqLLOh SIGUnA2K/Pcl
KVpfsRtgkeRiWhRn5s2bN0PFZ2djOIOEqeJe82xbzv1j3Ht2W29X6Vu7xuOC sluaIeQqRbEg
PC/EbDy2i9Il/KQ7SqqSC3KphEBWciXbt8HkitNM03w22P7ilz9r98OXX+3S OlI6I8gELwwS
zDeEqTxXkkhV8s29PWsXzqgLfrmlXD5p6BEvP3NTHj+KTGkky0tBjZn9/tBK lqglFcvr9U/L
wVM+HYUknF316Dx8vkZbn79UsrQZ5ijLgP9p0wZeSDgOGjiZTmGNGZfTyqCe porBdOr1sJDg
QKIL42kFtYFyG0QAykOB0wTzebKeh/om8XqexHbrlDTuUaaPnCeFX75bdxsr GnXHZQYbpGWl
0QDV2MbG9L23qIQ3AUgEn/+6EFzedvW4V5gj848MSyceAw6d/+dBPSSxta3F HtwlcbFX+0WG
EjW1AWvNV2vBGTBXe+g4B/y3tCkZ6FSvRdschV/jkSN5FNJklG0xhR0VFe6Z PA1pNHijyRDx
KbC22qBxgxolQxC2jMQ7P1bC0VH+3ZsLg9iNW2+2DPhHpVMbzj/E41GhVWnz tUl4ESXOcg7S
2VtBNcn+Tzy90L1oHe4tP5bWkakK1NFkNh49PH/gi+sdas1T7GXsRwDgjWsF 5h8CFo1WsxJ6
g4x85rbbqDDkarX49G3x5WWQBoV2q9ERkgPHNxD5AsGHDyArIertUdgDiXdw ZKjUDiP3S3wP
nFvJcvvbzzQk+OPH1+ur5Y0ric20YSWI46XLVPPw6AoAXEl7yOA3zNUOo8GI BmV7UC9leg7c
9laYPqur8wOecpOZoL07XrItRM3xQCmjBn/LzXt3ak9MFPUGcvJxPmlLNyFr ajgLqFuUHsSA
Yd8KZJBoa9JJam/9KrUIDOMnLKMBuWulBFJpZ5lRYofthrusvt8X+Jw8t6Qe 5s3h62BrMDVY
Xoiwm6oobDDzD9XSXn0melNJez+wW0zfTA4RulM8tePnMZ2BadvJf7ur5VnI a1mzrY+0HrX9
fZqmCyGiqP3kSz42N6MfHZMG0qxTkX0ZAv83ff67Jq+i05rWv6QZEvuiPB6k ogbRRnotCvbt
hyvzSF7P2Yr1nXNS30Pw7h2c+B3CzTIvyvtjHVqjGtLyAHHc+S4Y/wdQSwcI fcdsH4ADAADT
DAAAUEsDBBQACAAIAGWbETsAAAAAAAAAAAAAAAAtAAAATW9kZWxBL3NyYy9t b2RlbEEvaW1w
bC9Nb2RlbEFGYWN0b3J5SW1wbC5qYXZhtVTbbuIwEH1OvmKKKjWwInkvLSoq 7IqH0qrbHzDO
ELxrnMhxetGq/76+BTCh4qU8RLHH45lzzownGwxiGMANLasPyYq1GtttFuyN 6XKeX+p/FleE
/iUFwqbMkU9Stqn4KI71r5SqNQ52llIWKVLOqhpT3Kz0upSYzu45qevRCafH 5R+k6pTXkwN0
KqUBms5+EqpK+TEPUB+/UPGmYCKdmc2TXesbmdfrYjiEJWrbsKlRDvOSwnBo tZsIMKlwg0IR
xUoB5QrU2gsGN8uxx3CTLcfpNhiKvBPqrkCBkijMnfLNkjMK1EgHD1bpPTqA 70oHqWGf4w7K
wQ34F0eGS6TT3EvUOWoLMscVabiClXcLqaTW/yvy0ZdcopBMZNhEnk5tQtMD dEwwlfQNyEg5
sFEUemiwoeEWksDQbxsjfdZQax0mnS9+v0wW97O0QNWqlPRcz/b6IzBZ2AqS TuyLWxAN5w5Q
FElUjRQdCCNz+Bm7jxJF15DM3ilWtguwXfkoe321A8bLItk5jnwsn0/gW7fs ifH6jLvVJLoP
hRZXUGw70Bf1HFU8gsvSrJsKZQfjN+W+e3xFKVmOWxh+ZAC1IiRuzADanwf0 xmxhnM10gl2w
FUM5nyZ9Xx1KavSk2jaazie/nicP1+DL4XJMGSkk2ViKR68tHqezgzsL7eAv +Pd2bftKrWX5
Zss85xwLwieyaMzj23ZR0nvRdXQT4KoHP2BHY0E2Oqg29a6A1SBKBQReCWe5 87cMe21PnaEa
vgRekEN5rKx+ZydT7v1uLeG9E6eMF8x7nad/PGJTjqAyFqtZWqDCHDuUrS2A aM7Pii/oJ9Cl
DgwergeTBGd9M+i2ft8DMsdKIm1RHnmU0z2HYzN+j8hRCuHzwXY2OvSfkGWd WRP/B1BLBwh1
L3Y0oQIAAMYIAABQSwMEFAAIAAgAZZsROwAAAAAAAAAAAAAAAC0AAABNb2Rl bEEvc3JjL21v
ZGVsQS9pbXBsL01vZGVsQVBhY2thZ2VJbXBsLmphdmHNWG1v2zYQ/qz8iqs7 YHZhy83XOs2q
2komILEz2ykCDINBS5StRRYNiUrqFvnvO77o1S/Nlrrrl8Qkj8eHD587HtV9 8+YE3sCZy9ab
OFgs+blsditt0fWL4/2C/7sna+LekwWFFfNoaJnBah32Tk7wH4t51jkIyCIm q16t+1r+uyAu
Z/Fm9+CN8l4fHOK/YhUWL0zqhsE6oSZd+fibxdS0Lc7jYJ7yYvYew35IkuRb RnUke8zG1Kcx
jdxvwhNE5V4dxVpXs/+q04E5XQRRJ01o3PGYC52OPAkrAjGRrmjECQ9YBMwH vtT0w9n8XHs8
687PzdwZjbwtVx8WNKIx4dRT55jOw8AFV3ABFfIFOKCfOTpJoIy4gFKbAV9P DLEX48BmjL3Y
jCo4Q6Az1nHwgE1QhwWeUpRuvYcoDQWBR141wk3uXbIfUzRNgOARRQknqIFD h9OGGOElHNXi
wWPAl9LJ1w9hEN1/Q4PmWM6MN7DV8wTzjVxSh6V0moXo7diBBxKm1FQ8rM+H jNN30h4XiKnL
4ZHgfAau3EzZEwQJPAREdiVCe6504qvohRXlS+Zl+F8HUcBB/Gm2ntrwuAzc JZAwYbCmsc/i
VSInC4OAhMGXipT1gm1kATniaRwlsr/EV2aivPjAIoruEbO3QaWiVWK+RAYJ pc89gmLCrrz1
mg4nM6S9sHqtSDkst63wa7ZESBlJivQ1tc82VPKnSZ3hZGoN+3ard2I8HS8W 1OHDnLGQCq0n
Du4Iz+Q9aiFM6I6QKKSOP0nkFedO1clWIwNQINiNepOUqimij0QbYGgfJ5Cu US9KVig0j65F
clJnnml7Kj0oWeIv3KAnlF2snYm1dmIZjU/on0YIhHDwAxpKL8R1aYKe1FL9 MJDJL1myFMcj
JjT/wO6pBBWIgAo3JjiYDlCabbHXTWaciOS50Q7LqyBGNuckiMrB8GI571Ci inG97z6LuNhL
Js1cq4qrPVZbGlGXiJZI9U5Qwpc6xohtZrpp6RiHZsW8tRVpZnYw5oLybLQ6 ydSbbAkRGt0u
jBSRqB2d0ISUMjEWOdLYvu+Q+yr89zWAwqrVPIwyC9VWfiNgitte67ftPL7H zTuI6OOu9KB2
XIpFHqc0Y0GFYZ7IMSZIxyOcoM7+RoliLjbq2zX3iCNz6RRRpCy9wu0udweU lLm8JvF9CZsM
VS9wBXKMJpdEv3LUPrhLEi2E4LYX8WNKv1DpEUA5vV172T0WZ5em0oDUXOWm NA6cwjrlu6XW
3lKKSL9G4b9Wxx4lM6uo05UJCkbX2zraNJZKyXRcIHkRXAIzEzV7UoXULCxb FXgyxCeoYRft
SHiBCktjMVuGw9tj3XB1HgXkKuKiAjwuhPztksGYDcmK1tnLrVoFrv+Xum3c dy8HfXpc0JUy
SuCudNTgV8ZaArb+7egM3zxy+VXUXX2dePcXXurxIVKqeoHofK8LrKK4AKgW S9LHIiWxp2qm
JXmgKH0gvi/eCFh6iVJMlDquqtzxODFJo+MgTviLapU9Z/TAAg/23EmlkkJT ktUUPXknFjzt
uBTle1e+2jxBSRCDr8WHZvVXpgKgms2BY12OrWuZ7vVAns2alZlt0Laz2XA0 sCfqyqs8Jiue
hVHZbR4xzWJOG4QVOrSun21798OkWZQHu+XJxIcDfS8ffASq5wJPSirWapWO ivL+51PrgZKn
VgRrpqqqrVJYVm6p9ipqlwTTrbghaC4I0ZPcxNQPPssC8mZsXzh3xRAWL816 vayDgm/WwjcK
mIpHmx6cUCzAWCq+AskEstPI8vBpI56pYjiRnxJUhO0oHEuhlwVdDwg6YGvB Kh6VGiwtgsyg
Ax0n9SBTTdNVzYZuN9rwypnMrI+T6djqT1XLGU7t8YXVt9uArUt7aI+tqT2Y ZQXfrH9lTSaS
LLlgEdnbFU1bPlbNvF5oy09DCEBEYNLImm/b0DndQinAIK7hxLGHGtun0ZU1 da4UtP7v1vDS
tj5mzdH1zWjiTG1lOrYno6tPNp7t6M6xJ6rzdjixp9N8yu3Q+eNW2w/ssfPJ Hsj+0Rhb9kC/
HApWK3kDf+d8isZ3IbPIUdXipg3yI0tWYeuaIIgWYqgRoU2ZzNMqvH9DZJ0l uYnBM9nau4m7
nTsYMMwJdCRvXrmPzz/DJirhjnHH0til+S0y1h378gOJIqY+Pyeqf7HyTR2N uZPLlW8VdrIs
ykyFxMp2s9O6ZfmWcmpfi0qry0R0Nj8vra8+fH/X241xPDtMw6UipL45mdGV WEFxh0m7UYLV
6BkGmmB2K+ZhG6CexWSn9pG1xKNfOf/zL7mSAQ2fMRRSY07ihjJ6avWM/0Sc OI0fxlrtqPfz
JlAJ0vawVs5Sz6UsJHMaNrJUkrMmSXuCbnfru8rJP1BLBwgRWJzm9QYAAA8b AABQSwMEFAAI
AAgAZZsROwAAAAAAAAAAAAAAACQAAABNb2RlbEEvc3JjL21vZGVsQS9pbXBs L05vZGVJbXBs
LmphdmHVV9tu2zgQfZa+YtItYDmwpfdYdZNuvAsDrVNs0oXeAlka2dzKolai EhmF/728ybrY
btMmNtqX0KQ4wznnzJAT5/zchHNwA5quM7JYsrGcOq25WHo9DV/z0TFTP/js LxBWNMT4yiar
NB6ZJh9oxqrFD3L4qHaOOh9nfKgtaLawMYhJmqONq8gO6GpFEzuhjERrvpcP JPAZoclhGwxo
hvbkz9jP8+/tEvHak6bfqUTwBKOb+X8YMLXddDRxZ8MhzHFBkmGRYzYMaQDD oSTxKgFhhytM
mDwIaARsqZkDKr1Bz8XV2J2PBSuuMx+7Dp/37K1vTMIdz24qhzvuK6JxTB9J soAIfVZkmIOf
YX0whhfSooilCYAbk/GXy5gkn5sKSlEEsj8WyGb+CkGEJX7IeDauw82e7MCT 1l7H1HV0EK6T
Vll1ucAEM5+HqXKrmMckgEAICZVHwJJxFnJoCFADVPvgi2kIRQxNS4iRX8QM Hvy4wIr3ng67
wmj1Oyh74DOWkXnB0JauDqlrHFRHfLnMERuHqLUaqJzSLMRMTRzTSDPKODIM IRepEkBEEj+G
Wx4MV3Z29WFyP7me/HX16f0dvIGkiEUGtgAHfrDk5r8dXg0xESn3po20C/G7 mnoaoHccdN5z
pLymPLURvOfq+Ith1LBKjsbbK9xPxtM6vnVidStwHnjNG3mRYmb1R6axeflT L28eMMtIiM0A
1DMDeCvllRMdS4b8Ak6g9fjZ7wnjPuPcnt1cT44Tpr41dSnVxd6ISdTXUQ9/ oIRnvD66Kmp8
FFMViF6jcThTta5DMnTp681ihURgYfOF/gf/LwhPP6vPs9Mw1Le1xU1g5yW3 2JLkA2gu27eT
u0FHFqHG/b24bwZVTAMZUv9IuaR50gWjK7mhUHkSeTxLB8C589T5eoGT4HEZ RBhGqfTwTiuG
J5Xgf8tjadCsZ8WL6igA/0ZmkYRVTdT0egBzSmP0E+AtFY0fsF4QHeHdOtV5 nT8SFizB2lqq
ZSPwczyYcxdiR6X8tmBH37TzukaestjUOSQvQ1uCaQDZAtgGfip2Zdbh7S63 mnaeM/+Kh+7Z
TFYXj755+lvHowZnT6JX1oguksNuNtXLY0t0DWRNkxNy/CnJuyy/GKmtpuwn GfUOO2hwqVDU
oZ6Kw6qycZrvJOtLVXmniVfdH7xVne+Znl7AWWufze9a3jtY8mH6kevB23dU 2TzH2zmkPHCd
KFJOr4ruGBhVP/RzKd+jaf4xo+WaP0HQirXeK3pQ3XO8K6IIM3ENiv8e5MsG zS9W11byoLbb
fpry+K1XIDW4gFd7Pm7V6djwl2y/Qblnrdfv6VWJR39sAhKsb8Bxqg7Y/ApQ SwcI+1eYf/MD
AAC8EQAAUEsDBBQACAAIAGWbETsAAAAAAAAAAAAAAAAwAAAATW9kZWxBL3Ny Yy9tb2RlbEEv
dXRpbC9Nb2RlbEFBZGFwdGVyRmFjdG9yeS5qYXZh7VbRbts6DH12vkIDBtQt EOcDmgYtug7o
w9qLuz70VbFpR5ttGZKy3GDov19SohI7Tdps7d4GBLEsU+ThOSTtydnZSJyJ aa67tVHVws38
7WRwT1sfb4uPeJ2MOpl/lxWIRhdQX2VLp+rz0Ug1nTYubp5td7SpMshr1VnI oCmzXDeNbrNW
O1Wus6tCdg7M+XHWd3RRZH6cPRrVMcRnmTtt1re4dfg45NpAdnM//wa5Q7MJ s/NhPBZzqFQ7
Xlow40LnYjz2TD0sQEznMw4iOMp0Mp+JUhvhFkxURsa3TnRG/1AFWCFbIfkQ kl/ALDcgHTw+
PhL5eC8acAtdeDcg84XIa2mt0OWOUw8O2uIZtEsLG5W++Ms/QTr/sIIWDAYs gqjLea1yDhGM
h7wJ+M9hECue0yl+jhIiKmE6cgQLRYgsuFoy//QQj8nBNJIh1ISwJsihQ30w hnXSIexBdiEw
36CGG2zXnmDPvGrxZJtDZDMqUYas3hdtoHYfqekpcZeoUqR90OLiQrTLug5P k+GjYbIZ3N59
fbi6u745R9OnEf62Cf8LbmlaK1YLrCSgYlQ2pihwKbsOkcl5DZtadetuQ4r2 XfA6Fw/klloN
GmhJEN0Kw6FDaTuzhFjVqu+cUIBicKzciY1Fg+3pYfb1CseGTfCKIAHLe7Dw TNvL+x9gDPbz
Rua51jUQYssaf9bmAd2l94zcX7a6c0KoeF9mVp6RE30sb/9MJAWB8sQaHkvT uM1BM7im/k5P
swrcDYfCGtwJHkOxm1LWlvb6lUVtblfK4VRyC+kEHobKN5fTnrUXR5r9Q9Mg dMZXj2vKnTYL
qYVNcYFptbDab8nd2Bc1ibLG+Z5LC5+UrIxsUr4OJN2wFlJnEz6dnhK1nttX g9whwpT+XnJP
z3/RdwGlXNbuGkPE8ngpAps8D/J0YLJuJim3Eg8AabDkuArepH4nifLgrz9I sO586GzQ84PZ
/hqiI7p7o5BPOLISP0sYViCSEfSqLyt0WGwbkw+E7trDp6Bi7SeADG9HYHhb n/y8rFX7Pb7p
Y1VOoZnxejrB9dPJkZOcK+TQRKcXk7A69P2K3vYtfp5YVeMwrVr8fPLla8+9 Q+VwmmOYclmT
QmwgvQkNZJrsOJNVGO4rha5zSY0qceUW7AuzXq/k+thBT+d6vLG4vY8hpuXF 1/VQ6d0+7itM
hOyMx7fo53uexKPFX+WGyhEnvyDbYD7+tmaEKlJLWb2fGm/j5SgKdgf4fhae xGSy7wN19D9Q
SwcI7Z/PCq0DAAAfDgAAUEsDBBQACAAIAGWbETsAAAAAAAAAAAAAAAAoAAAA TW9kZWxBL3Ny
Yy9tb2RlbEEvdXRpbC9Nb2RlbEFTd2l0Y2guamF2Ye1XTW/bOBA9y79iFi0Q OYjlnuOPNkiM
hYFtumh8yJWWxhYbmRREqoFR5L93hqRlObZjFJsueggQwBQ5HL5584ac9M/P O3AOw1SX60ou
czt2n/2db556P83e02+/U4r0QSwRVjrD4iqprSwGnY5clbqy8E18F24q+Uca u50PxufbGV0t
E0wLWRpMcLWgsa4wmVwXwpjBCaMv82+Ysvd+QP9XrwdzXErVqw1WvUyn0Ou5 SGY5wnA+vnuU
Ns2H/fkYFroCmwf8ZwakyrGSVqgUIZdYiSrN1wnvnVowdclAjNuRiqKAH58K qR7gXaa9zzig
6UIzo/3EE/uwmg74rh/QeSCaMxynwuD9/T2TTF+wQpvrzOFCkeaQMgWgF1uU F+zJWFFZqZZA
h+RuTaS2FsWuvT+b7YXKoKx0ipjxrrp06wejZfNaUdZAgNKqp2oKtEJTFxak oZGtK4WZg/GY
S8IoPSPBJpxtXPhJkxFU2V4+PhlspPPZ/fzr9eQWl6gIksXMK62eFzIN8Xnj kMfZGH50Is5+
FHKcEnOYec8QJOoWj2kjOooy2kUSMZSImLRELB1BebCEage8Pzd8kC4baNcV khNDySDmjaf9
GVuvCdIT1qYq7jJTkVxA3MYIoxFwlv1qtLu0G1uC09u72dXt9WRApk8d+mvF RyVhDsv6BT0H
sWmFQVvGCw9awhuAtLCWWGQsNWHD9H/iyx/mcCxkZeye2DdKh/maEB0Miy+B 5EX6Z/D8buAT
m2uCCQ9AGrvteoLuBoy7F+1NgzfWj7PeVGabeMeio9CNLuBYKrgyGjNiXysr JJ1AhUM10i6M
UCuHcuc3L9G6gVzQxTq92c8hV0+EhUHviZ/Iod87BryrS6xm65JuixHsOJ1s l2LnJmDgUdTa
l0gzWZV2TdA/urUow4Ughq+JzLgd+GVY3sTQdkIHxh8OQn+T4K9IUCrrGQhy OC5B/xJA3LYO
YmMMz67jm+nV31+vPl96g+hGimUlVpCF3xHEYaq7PceJJpptoh0B+w1mcdjp leXqYWO2eSOa
bUf05HcGkkMWeerpSAi3X24mG/y3tELpyPjdifnjFGy2iXnD7wIc9lzCptKP +3hWFF+Dpndb
IxICViU54zZs26OB2GsLzoa4Goe0DPs0Pjut+llOvRi1ywWuUHFrolVTW0zG wFn5GQaw3+E9
ShoTxJVUpOnDvcnhsioFK043qgZqUen6ONThtEvwNalx/eS2GX/xH4bu3sPc PfGQt8tkU2h6
/x0PPL+6FFjqbzo4zcvvF4G7dNxV9T+mP+D7AxRwAfOaM8sH+KDoqbKOGUK+ fhTrP04jB8j7
JZmcavFbj8LmXX9RGk/Q77f/Mev8BFBLBwhO+DHP+QMAAHoRAABQSwMEFAAI AAgAZZsROwAA
AAAAAAAAAAAAABkAAABNb2RlbEEuZGlhZ3JhbS8uY2xhc3NwYXRolZBBawIx EIXP+iuW3J2t
QqGHXaWULSjUFt16lZgM67TpJJ0kpf77VlpRChW8zRu+92Z41eTzzRUfKJE8 12oIV6pANt4S
d7V6bu8HN2oy7lfG6RiDTttxv3cUyEl2xSuxrVUUo4r98mcs/wWN5wPopQM0 jkJEeLEJnM5s
tt+nYbZo1neP8/Z2Om8W5V+OOKGwdmBxkzvI9OtEgWXSbLXY1UO7C1jORstm MITry/8JFsF4
QRB8zyRon1zuiOOZJJ9TyOkQtiHes1V50t0XUEsHCJS4/mLMAAAAbwEAAFBL AwQUAAgACABl
mxE7AAAAAAAAAAAAAAAAFwAAAE1vZGVsQS5kaWFncmFtLy5vcHRpb25zU1YI KUpMzsxLV8gv
KMnMzytWSMsvUijJSFXwzU9JzXHUS8lMTC9KzFUoyClN183M4+JSVnDOz83N z1PILC4uTS3m
QlWnn5KaVJpum5aYU5wKUhuWWVyamKPg6YJdoX4ZWN7TBaoDAFBLBwipZSEE ZwAAAI8AAABQ
SwMEFAAIAAgAZZsROwAAAAAAAAAAAAAAABcAAABNb2RlbEEuZGlhZ3JhbS8u cHJvamVjdL2S
zUpDMRCF1/Ypyt2b2J2L9BZ/6K4iVB9gTMY0JX8kucXHd3JvWmyhIAjuzpk5 ky9MIlZfzs4P
mLIJftkt2F03Ry+DMl4vu/e39e19t+pnIqawR1meMctkYqFwP7sRHhz2m6DQ PjBlQCdwgo9F
asrgHPrSC35UVGzn5Kr5T/MxGKu2ESWZ5p5oDLyqhYYKSTOU1sSMbK8KkyGR gAOMeUwnOA1A
0kOl5snyMy/4JeE3yKiQbcCbT8zl8d+IW7lDB3/mtUJbMaHKkHCKTvr6dqd+ RY+5KyP1rq92
0Ma/XOaPknCnVz/7St9QSwcI6rVg6egAAACHAgAAUEsDBBQACAAIAGWbETsA AAAAAAAAAAAA
AAAjAAAATW9kZWxBLmRpYWdyYW0vTUVUQS1JTkYvTUFOSUZFU1QuTUaVVE1T 4zAMvedX5MKN
eHY5huEAu71RpgMz3E2sGO36I/gjtPx6FKdpS5J22skl0XvSe7IVLbnBGnwo XsF5tKbMf7Nf
2UM0QkGx3II77GZAnriGMr9qVJRouo8BeNnoN6uw6glLK0DdM4FcOq5vc49G KghU6i64uEs6
1KbnI3KFNYIb8D+Ke7/i4b3M2RC7rwK2PFhX5vqHCmu4C6xX/tuHFgKJuEpm 95pGdMlXjbMt
CnCHXTzaiix88ZBc9V1mi3VjXShWvPrPJUxkgUSStr/OszlP19PoVtpnz/AR 0UHR65e5dZJB
pbDxwCrrgLloAmqgGlMIvI2uAj8HwrohvDvdMfyv5tW4XkRGfqbBFuFznE9h w1uU3R2cgI7a
A13TO3k8FmdrjXNYd85xjEhCtmeUWDOFpxStuRH+HC51RJfVgAs4aeSQO9zs SX97EhVFihl5
GZvO1NDYnJt0ke/9UF5In5mcIymXuN9NT7r3yaSdmTXjTTj+eSNuW/T4hgrD prxzAOkXJ2a/
Pk6jqfYxynhqW9onIu2TczIk1LO0bNETikf+tXkJtFTKPC3Sb1BLBwi8xKK9 rAEAAMcFAABQ
SwMEFAAIAAgAZZsROwAAAAAAAAAAAAAAAFwAAABNb2RlbEEuZGlhZ3JhbS9i aW4vbW9kZWxB
L2RpYWdyYW0vZWRpdC9jb21tYW5kcy9Nb2RlbEFDcmVhdGVTaG9ydGN1dERl Y29yYXRpb25z
Q29tbWFuZC5jbGFzc7VWWXMTRxD+Rpa9trQYLI6gkIPDBvlicQ7AkjEISY4F sk2wYwcIJOvV
IC+sdsUexuS+r6r8gbzkMa8klQSUhxRPSVV+VJKe1WHJloIDpFS1mp2d6f76 6+5v5s+/fv0N
wBi+lhBgSBWtPDeSSl5XC7ZaVHhedxXNKhZVM+8oM/7HlM1Vl8+vWLareW6a a5aturplOqnK
OglBhlnLLihcM/SSw5VC8bpie6arF7nCaVw3SFt57U1JLjuurWrugq2aDv2T SdWo2mTYVryT
5o5m6yXXsh2GHbkb6qqqeK5uKDndcRMMXRO6qbuTDHYs1+heuHTXjSpNDjIU oW4W0lZR1c1E
rh1s03L9IJVFnd9ObPQ9uMgQTBE73QgTtApD+2sUOSEQfhm92M7QV+DukmXf dEqqxqd0g1Ms
Y5vxcp+azNzyDa6R/Y0OQ+hAnwwJEYarjx6tb9VQzYIy79o03yKwHsK+S0Yn uhi253STz3rF
ZW4vqMsGZ4jkLE01FlVbF+/VyaC7olNUmdwTKCZK6zbeCJrh5KOGyxAqqTY3 XZFDhiNbTDbF
vUr/TdV393+vsHbLamR6umLzWx53XEepkCj2XaxM9S82AaY0hrAfByUcYNi9 nuKUZRjcR+nI
OIR+4tohpAZ3LVOkn6E/1lAj7YuR4bAoxm6G3maqSAiebCQMO/NWZo1TsfAl 3V25yB3PIKDf
NCfE756ao+wF2yrY3HFmLNIHMvIvS5N5teSKMqYw2wEXJUx5ahKvarlW4IhK y6xpvORTK2GU
YWSTy3ojVKKhlfUtYSgYk3CM6GymWsYLeJGhW3c5tYmgd0+sMR3Z6nwijJdx QsJx6tDNX2Wc
xDi1qcnXiLldNQuNOZZAMTzRzEk4xTCwpeIPIY7TMs4gSTySXPo54RTsQGM1 pgzVcRItsHcj
RRTVJCWMCWRkTOEVYpOMZZJmzRnDidhmCRxsp8XrGxM9yOK8hHMMB9ssFs8p UgDLviMjhxmG
Hp6dnV9IzqYy1FbtfDRsoxxmMSfjAl6lU0Pz6W0CPxDbCtQw5vGahAWGAw9d LGMRS4TU4e68
5dkaafnuVgwtCqOXZFzGlUqG0txVdcMRerEZU7Vd/BLMzKglStBVBsk/HLLp brxJJ3flMAhD
hSZhmWH/w4zIyIPgdZQ8KuGTLVSqrW41ToniKMhYgU4i31wcTmuCm3D46hfG TRQlGC0I3rRY
hgmLUKv5/AZqaxgvi869JcMGAZBWVGfWb9KO2ODlEDzclrDKMP7IyiRjDXdI FEx+e+580xeG
U7HHkzzKqC+vDMP/QYtJh3TzOpEysCVVZgjoQrRaiR41uJC0xtMnuOof9RGn qgaN/XNoC91D
5V3pBHFTo8C2dmk5KsAxyFnT5LavU5xOgS+J4sdSVIqvWVNxgE7eDrq+Eyvi hkajDhrTQUzP
HnpTEaQf0Dc0HAmN3Id8DzuGRn/Gzh9oMoDd9Oz1DRxGGEewAzHsobehyiY8 hb2AP4riaTIp
RvvwDO0Uo2fJYcXdc1V3V6ruwkPDI6P38fw9DGx0dIyeYwjRObbuKFx3FK47 CtcdCWAx2hXE
IK0PYJjmgrRmRLhk++iLRDPe0E/YWcZRunB8j2ujZbzE8ADxeDAajEz8gskH mIh3Rjt/x9lo
Z+RsGekA/sDxHzFdxixDvCvaJWYvBhDtKuN1qpg3ItfKeKsDS9HOMq4zf/5G AEtkusTw7d/f
3Yd7tx7cFPEBjGMbHV29SFBwcQppAv04Rf08SQfuaRpN0vMMppHEOZzFHNIk oylcQoYUaBy3
6IsgZboSUJ0UD2/jHZ8UD+/iPfIYQgHv4wMKfS8dDx8SPUHylMZHRFkn+RjE x/iEshPApz7C
z/A5/YtrWhxf4Cv0/ANQSwcIECAgin0FAAD2DQAAUEsDBBQACAAIAGWbETsA AAAAAAAAAAAA
AABZAAAATW9kZWxBLmRpYWdyYW0vYmluL21vZGVsQS9kaWFncmFtL2VkaXQv Y29tbWFuZHMv
TW9kZWxBUmVvcmllbnRDb25uZWN0aW9uVmlld0NvbW1hbmQuY2xhc3OtVm1T G1UUfm4ISQjL
W2iRqq1U2pKX0i0VtSW0NiShtg20AgaLVt3sXsLWzS6zu2n9E/6B/gG/4lsp OqN+cHTGH+V4
7s2GEBjqWk1mkrt373nOc855ztn9868ffwYwAyOOCMPNhmNwq6AaplZ3tYbK DdNXdafR0GzD
U5fkzRXuuCa3/aJj21z3TceumvxJsXUojijDsuPWVa5b5rbH1XpjU3Wbtm82 uMppvY+mOy5v
X6mFmue7mu6vuZrtaRJVswJMhn5u1HnB0LZ9x2U4XzmIL2HaDm7LQ1rN4nmG 0XOa53FXYHkl
0xO7hMU2GBLzZGyb/g2GnnSmyhAtUmhJDGAojkGGoUfaY021NLuuFi0CUTCM EYYxg3umy41C
G3bV1/ymJ0E2+kAeFcSRIPuKafPlZqPG3TXhliFVcXTNqmquKa6Dzdh8QGIp 3RWSSJPfSYTa
lZQylcS06yWnoZl2vtJhuuq7tJ/PVJPowSkFY3iV4eH/iNzaafqmpVZMz8/L xPlbJiVgofJf
hUP1GuAHCTBcfVnqDL2WVuOWSPuRKBiG69wvbG4SBW4smhYn/ql05nB0op7n FPQiFscFEt1x
mrYdEoEgJILpRxrZODIMkyE0qiCHiwxJwUfscSHudOWQ+PKZAzv3ao+Idz5J 5C4pUHGZYYTM
1x33C29b03kQz8zRsnNJohwAHAlXiOaKgrN4k4r6mEJhmKqEipkyOkgUygdb dIryGa5JB71D
pul0KEshvlHDKX/J9abP101/a4V7Tctn+OpFAPddp+5yz1tyqPMcNx/O17GJ EAqnNHSNskDQ
LTr5OOYZxjsF3J8dZdd13ASo+2eWm5Y1oW+ZljFh2hMhmiWJPG6KDi8wnEwf lYeYAQxFBW/j
nTjKYdQrapDALYbLko0YuCHJ9KOE2wru4C5DHwlh1Wm6Ok23TPr4vHULSCAs KVhuI6xpLv2K
3fsKPsAK7Xod3Gw6JGymKiDWFHzYhmgBJ7GOB3F8xHDtpeuqYAMf09yw+ZN7 d7vuMFx/QeD/
LBh6emx3i5Qh9y8UTe1r2psO/YkahupiUXuyS/i8sV2VrZ9sJVtME+rIECK4 JDRI04OehfQ6
EaEvDU5geFw8EGknRr99EKrsl68bDOIzkmLPoDxFPPo1oj3fIfWNND4hDcSR UZyUO6CrMbwS
mN9BVLpJZHMX2S7GO1ZJeXaCnJ6VlhOtc3gNr0uHCZzGGYmcwBt0N0JrGnkB 7kNJHDid/R6T
qfN7mIrgV3rdyP2ORO45pneyu5jZ2XeWIhrAFIZo6I8ig3Ea58LpWAskcDqE QbyFWXLBRDsG
rlR5DfQKVzuHor4iYZTWgQCG4V1cDYxvBDxj2dwPmDwc/TWymTtAJLYffUwW hZRBZ+YCrN8o
Q730v/EtUk9xQtD5AwM/If8gdX0X7/2SfYaFVClIRWlZnhqZbh9ZFEem9/A+ w1x0mhYVhj3c
i2D6VHQPqxE8R7UT3RmqC1CgOi7gAorEoUSrMjX+Iqq4JTnPttjsc97AJ1QX JlefEvsIWc7i
M3xOvBco5RpdRel+TXrR/wZQSwcI65X3zIwEAADQCgAAUEsDBBQACAAIAGWb ETsAAAAAAAAA
AAAAAABHAAAATW9kZWxBLmRpYWdyYW0vYmluL21vZGVsQS9kaWFncmFtL2Vk aXQvY29tbWFu
ZHMvTm9kZUNyZWF0ZUNvbW1hbmQuY2xhc3O1V1tXE1cY3QcCETIo4jVqvdMG IkQtFU28YQgV
CReFQrXVOiSHODaZoZOJYGvv94u2fexD/0Ef2j5gadfqsi996I/q6j6TISSA SpAma2XOdZ/v
298+33z559/f/wRwDN/7USPQmbPSMtsTSRt6xtZzEZk2nEjKyuV0M52PDHEy bkvdkfHikB8+
gR7LzkRkKmtM52Ukk5uK2AXTMXIyItl27k5LAthyESVBzERW5qTpeDAC9acN 03DOClwMJVcH
Z8u3CjLv5CNFgzzAK8XRWNu4gC9OcxvRgIAfjQLxdcDVoKFJYENGOkl9UmYF tobakrf1O3ok
q5uZyKhjG2Ym1ohabNJQh2aB2dDy+QoX1fHSPToxPHlbppxYtQz0K0Y9KssJ 2JQ0TDlUyE1K
e0yfzEqBlqSV0rPjum2ovjfoc24ZeYGjyepiHxOopQkCiXWJmEAzWfUGxyzl ksABsvtkrhoh
sEvDbuwRaCSAByfQt2TrGnlU+tmrYR92CmjEj1umo5NW248DAq2PO8G0HN0x LDMybsiZAPbj
kIbDCqNx0UmBhtQCmsC+pzjKrSndTMzKVMFh0GpDbdcEtqQtb2TCcG5dkflC lrD3K+9Q0UnP
sP4R28rYMp8ftHjhLDv2hKU9aX3aURqJPZ5KpQ+6WX7DIyUKlTnK8MRsSk4r OvJ+dAgcWXbk
Ym5wveHK0pYGRHDMj6O8ap4+B91Hn56i+Xc1HMeLZFL2D42O9QzFEwLbkyst jAUI9JKGE+hW
VLoSVJrmNaFSvB1qwJXUKQ07sNMPWr/Rm+stXosAojij4SzOFfOA2sLb07qC Uj1u6E82kkga
VFMAPYj7cYHKfupiDb2gN7V6mvlxW3kW8RTRdk1Z+rKGi+gXCKQtanPKyBRs +nQzVOHSuuth
XN2LAQ1JDAo05UmDnCnJ+mDoKVpW24dx2Y8RMr1mZWm4glHmNFPODA9UzAgM r8TXM4nYnysS
JBCugk1mV8OcsqiPVfFKZZplRDZVBFGgzppxc0VzslKTbpa6ruEG3qBey9Io c5zAiVVnwv6y
fTE/dIFz1ab2BQl6+VMpNKUhDenld2ZYvgF7rRzTnkB0hVvj2LqZ551V2XNs sa1nK/bS5ZvI
qHfsLYEHywW3SpT1eRNX8Fa8G7c1vIls0el41nBrHdORs4zqydXHo2Kn67Kp wcI0cfPLcE+t
tnRaAts2HoANxw+msQvP/srUUMAdapeOj+gUp3SkTeTNC4WSm+EG9WnXnVkN d/E2VzPLla9u
CS1ZrIy8h/f8eFfgePVR0fA+PvDuxqLFAveqLjdXLLaqyiz9CwVUAB/hEz8+ Fuhay34NLyCk
MD7T8Dm+YIqSC9WB8z9XAJWrRlnrFPLMTwFZnne61nJ7qOzUkhzCfxhVV5hL ICpgS8E/sbaw
MUmPWgU7JfsMVT5vX1YZdyrp4gBTXy3Up46tOtTz189eHD7U8BloD89hgwg/ xMZf2K3BZv42
ulO7+dyDFra2F5diC7a6UAFs4xjfKqo88QCn+FSr9rbPIfgIDXN4Lhn+C/t/ QFP4EfbP46BA
Mvxz6YxdNAU4xL2Hec4hYrbyrOd5YqjszL3emersVs4Kfqk378wjbp+Ivp9K uPXuSMTF0Iqz
HoYPbWhnL+y2WQC6GD+yXcdn96/onEeXwBAdOPkI0agv6JvHaYGOeZyvwUR7 R/jIHPo89zrm
cKnjNwwtdegks26Uh8dYbZ+hqedYGZ53jekqHlMisRtjeMU1sBvjmCBKAzrx Kq4yXi109hpe
o2k+VVctNVqoaCrjb5TIfj3q+wM3r7I/GQ76HmIqWhesK80ac8gVu/Pgf6U5 zAR9wbp5vFOD
aH2w/m/sCNbP40MBRitYf4Qef1qLiUVBXEAzf/t55iUGq5/EDnAkyfAPMGCD tHaIQRmklcM4
hRF6f5l7Rlg7sjji9zo9VRxcLFpd4uCG669wW4qNGrel2KiFKqy+xFf0eg+x vsY39LmXLN/H
AzfI37rWffcfUEsHCIHGCNDXBQAAOxAAAFBLAwQUAAgACABlmxE7AAAAAAAA AAAAAAAARgAA
AE1vZGVsQS5kaWFncmFtL2Jpbi9tb2RlbEEvZGlhZ3JhbS9lZGl0L2hlbHBl cnMvRGlhZ3Jh
bUVkaXRIZWxwZXIuY2xhc3OVTk1PwkAUnAellYLWePDOTU104awxAT/ioXDR cF/oiyxpKdkW
/5cnEw78AH+U8XVL4sHExN1k9s3szMt8fm13AAY4DtAgXGZ5wulQJUa/Wp0p TkypFpyu2Rbq
vhYfRHtyUgCP0P8rMnZ/I13wT4rg35iVKW8JzbPzKcG7E1eIJtpdtOATotis eLLJZmxf9Cxl
wkmcz3U61dZUfC965cIUBBX/q/Q1IXzON3bOj6bacvrLcbXUbxo9SD9Uh+RK L8FAmHIcaF18
4OBdhgZCQd+JbXQEu7VB3kMXP3Ku6BtQSwcIpHymHd4AAABsAQAAUEsDBBQA CAAIAGWbETsA
AAAAAAAAAAAAAABJAAAATW9kZWxBLmRpYWdyYW0vYmluL21vZGVsQS9kaWFn cmFtL2VkaXQv
aGVscGVycy9Nb2RlbEFCYXNlRWRpdEhlbHBlci5jbGFzc61WW1PbRhT+1hhM jFICBBpCmriX
AOYmoBQKBooRpjjxhRrXU6YPjLA3RowtuZKcKdPLdPraX9B/QV9Ck8502qfO 9Ed1elYWwhAY
bPCLtHuk/c53vnP27P7735s/AcxgJwAfw3TZKPBSVC5oatFUyzIvaLZ8wEsV blpy0vm2rlo8
RuYtxxqAn0ExzKLM8yWtYnG5WH4hm1Xd1spc5jS2jypczhsmd8BqWHJ037JN NW+fATH0xTbi
2b3tdCKu7O4p6WQymtpg6E0cqi9VuaTqRXnHNjW9GGG4qxi6Zau6nVNLVd6J O7RaoIcqRknL
H4XyRrms6gWG+0o6lY19ld2LJWLJWCq7l93djnVCoi95Q7f5t3aIl3iZ63ZI 8GToWNZ0zV5l
aBsN5xj8CsUcRBt6JNzFOwzdCU3nqWp5n5tZdb/EBUEjr5ZyqqmJuWv02wea xTCbaFZPCq6v
yOt0iRZeanlC/GU00ZjKJv+myi3bkuMCRKkpkakZI+GvG0Spy1X8IplIFwYx FMBDhvXbc5Lw
CO8xSBT1tkoacVsUw/Do23kP15nS+4c8b0cCeEIqN0YiHqtlOkuWIN7HhwF8 wLDY2OK6tRle
1Kh6jyR8hKcMXUQ87lSjSNPKaLhBhS9BjAhaIxIGMMrwXaMJr4+rRQkWFT8m eLxLG4GSx7DR
iupj6HHF4mpBOd2j37emsq8EEc3A0GsQbmOQ4+5qKqBphrmbLBWbYFbCx5ij 4rXOFe/IJcX7
du2Gc0LmeQmTmArgU4blZmgQi4phaTZ36QSxgCXRpEjl/ss2T078sSJhFZ9R UtUCKb98Xvl6
fEs2qBxUW6NGK8e/1AuGaGzpU1tENMc7vOIlcf5m8guQAw8k4PXt1abgLmpB sPeo0BSTq56N
4Yem66wG4G6vWxYaQ6wl7hkeeaFleKmWoQPtLBM/3zDMerBbx/qsdRwYHlDA GzQ0jSNXDC/Y
H5sO9jzQrQPdbI1/hodnQWb4C25yOk68MH+6aZge1K0D3WoVA4bgjlE183xT EzelwctuQVOi
fdFZSI2KLqc+6rTt6KBZwJl10jxYN++iNxPXM3p2k0WmN6N3+9gJ7v3m/NJL zw7H2I8+ekq1
H3Cf5oBfnHTu4kNy6aP38Hhv12s88OFvPP4V/b8jdGr4C49fYfh4bPwE4WMP fYDQgKdEYhg9
GKFLzTBCCDveBmqIrjcxGscE+fOL1u/6fUN+BcLaeG+n60ZO0pi9xgwdxuTs k9TEP2ifPJ6k
58TxH1jYZSdYXPIP+ideYXnQP+k8zxhNkTDANMU6Q35nMURn1RPMkazzxHOB OC7SlyUaRbCC
ZYfpXI2Dx3TNZSrRlzVECXmI1q7TqI3WdkPBBkXhRwybbhzz9BbR+tjxBeWV Oi18ngcfefjc
0WIL8Wsxnl+J8czBeI7EtRiZKzGSDkYK6Wsxdq/E2HaK7wtnlvkfUEsHCPBC nSQ9BAAAXg0A
AFBLAwQUAAgACABlmxE7AAAAAAAAAAAAAAAAQwAAAE1vZGVsQS5kaWFncmFt L2Jpbi9tb2Rl
bEEvZGlhZ3JhbS9lZGl0L2hlbHBlcnMvTm9kZUVkaXRIZWxwZXIuY2xhc3ON TrtuwjAUPRdC
AoFCBV/A1iKEy9wKCRAVQ2ChYjfEAqOEVE7of3VCYuAD+KiKG9OhXara0rk+ j2udy9fpDKCP
ew8FQidOQhUNRajlxshYqFBnYquid2VSMWdvwsLUcg8O4emv/Mx6I5n+2CK4 L3qvswGh+PC4
JDhjTvkoolJDCS6hEei9mh/ilTJvchUpQjNI1jJaSqNz/i062VanhG7w/8bP BH+RHMxaver8
i9Zvu7eTHxJtcDPkh/hyI0aPmbAcKHWOKH/yowCf0bViBVXG2i3A886u122q cQVQSwcIGNqw
Y9sAAABjAQAAUEsDBBQACAAIAGWbETsAAAAAAAAAAAAAAABEAAAATW9kZWxB LmRpYWdyYW0v
YmluL21vZGVsQS9kaWFncmFtL2VkaXQvcGFydHMvRGlhZ3JhbUVkaXRQYXJ0 JDEuY2xhc3Ol
Vm1TE1cUfi5EF9dVKYotVVprURPeVqytShTFBGraEKkgiLUvy+YS1ia7cXfj y4/oH/AP+K1j
Z1oYykzHTmf6oT+oH9s+d7MEAjLGgcywd8+995zzPPc8Z+/f//72O4ARPNPQ JjBQ8YqyPG4W
HavkWxVTFp3QrFp+GJjZummClmka+kY0JARynl8ypV12qoE0S5Ul06+5oVOR DQ81J3JS9cqO
7ciGm6xvlbK+V43cqblnAvvDZSfoO88s8i2nkea2q47rhGMCw8m32JeaE0hk uPwABA4a2If9
OtpxyICGwwLtSbXgSN5xZaFWWZT+rLVYlgJdec+2ynOW76j32JhQiQsMtR6+ b4SJd5dkqDi4
vfhQ2mGQ8SoVyy0KFJP5Flj15aOaDJTrTRd36rZ0qtmBXDLtuvPAjKOkNRwX OPrQemyZtdAp
m+O+bz3LO0GooxuHdPTghIb3Bcb2loqBk+gV0Ak1niCHyVR+M7CKmT6ID/GR hlMCh5tnDJzG
xwIdTih9K/R8geNNu3OxnR7O4JyGs3S/c9ZAEimekyufhgLHNjyULbdk1tMi HwMCvVvBSoKV
tudLc6K+RsOQwFsdTcaXVijnHPkkpqNPjbMysH2nyrw0mAIXd/OoEojiR1ji JMaLVpWodAxj
RNXqBYHTzfWyI2/WuoaLAmd2C+R6oRU6nmsWWL86PsNlDZcEUi2Xs4ErGBXo UQVdn5n25ZL0
pWvL4JbjkvRsMvVG6qKkq5s7zW1e0joGcVWhvibwYzPqaO+Gw1zEkhJnestJ Z8pWEGw1zIS+
45bSe88rNacK+LqBGxhn77CKVHF3cmeRpe6rMs0YyGJCQFu2gkJUkew293X2 oc8N3EKONW5H
hTOz7PmhXdvSGsI9t4btymuhVbA/Fuko9iBwY685sLE+btIBm0Ln9sQE2hwl 1teJnQ1FSbnu
VjXlHUwrNmcMzCo2T9oNGQbjblF1OrckY3Qa2OevtACoQUsu3jnte0/51bwn kHmdUBrrp6LJ
TNOJZpVAI81tnK2S3X0DX+MBuaCOlLRYnFmvYjmuwOg2+SiRh8QRWHak3NnN sVVu2ptWnr81
8J3qgB30HOWjwWqlISjOdMzDVqJj/fk7W02LWexaM02xdpbnnI67WFLhSzyn 3ctf0U0nkVRj
6hsnFXlx8IOGhwKn3lTvBsqoCOyzlyPmJ5NvVkhLItLsDRWfbmW5PuPVfFtO OuqGcWxbwx1W
NFFGE65d9gKyPCXDZY+ph+ry0lMv+KxcsmrlsHHF4vVLwMi5rvSjVigDDU8E ru3pi8YvdvM3
DacovXbeKUVnp7pVcaTeNHTQfoCjy2jjD9D7B37lv1UYP/OtDUeULZoh+biE To4MjpX1HXRF
9qM4Fnv5hx738flgHd0Lq3h3amAF763hA4HCC4wOraGPokn0JP5A/3Psf4Fz g+sYXFjH8EJP
4hUY9XzXJ6L/F+gr+HQV6TWMtWGe224KPP/vz/6BwVVMvmzkVWBkYJQY0rwe XUMvxtjIr/Na
MY4UbmIIGd6hs1Rahp/CCVzFJEc3kef6Kb7d4fMue/s8crjHp8J2sZ5/jE2N vsCXRNfBrpXn
rjbaM4x8m/z1wsQ0vkKCVn4hYg5+4toEnxeY7gruFIb+QnJoHXcJc36hji1+ fPMK3xPR4irk
CpZfik1kozgc4RNRnAJZncZBRjKYcydmyPcsTjD3M5jDWb6naDc5f544FIr+ egYNFBdiFGpU
R8GbFVx49N6OahT3EXw+E2QrQI2jLtoE6n+DeIynOPA/UEsHCLFrQGsyBQAA mAwAAFBLAwQU
AAgACABlmxE7AAAAAAAAAAAAAAAAQgAAAE1vZGVsQS5kaWFncmFtL2Jpbi9t b2RlbEEvZGlh
Z3JhbS9lZGl0L3BhcnRzL0RpYWdyYW1FZGl0UGFydC5jbGFzc5VSf08TQRB9 21ZazgJSEa0o
iqK0x4+jIJAIISEtJk2KmFSbkJiY7XWpS+72yN0Ww99+Iv+RRBI/gJ/ET2Gc vZaCBpN6ye3e
zM28efNmfvz69h1ACWtpJBiKftAS3o7Tkrwdct8RLamdYx7qyKl0XbvkeUOO NFIMW0HYdoTr
yeNIOG3/0Ak7Sktf9PM7Moa4FoEhs7df2a19qFYYcrUjfsIdj6u2U9ehVO1N hpFyoCLNlW5w
ryMyGGYY2osJMgw3qvV3O91kVk0CyZ/0d0sqqbcZ7ELtX9RUoLmWgXIaUnza LDYYUmXCtJDE
eBYjGGUYq0klXnf8pgjf8qYnDL3A5V6Dh9LYPWdKf5QRw3xtYNGop9QJlWWY G5AfQ94NBdei
Ig55x9MxUuBJVwoqnSwUG4b4VBb3kM/gIcNoXfikmHTjqNM0HjG8vJZgD+WC Y1UL/yK3X+XU
wjRmjCx5CwxPs5jFM4ZxaebieZdxDKXClRHuN4+Eqzf/bFIcOpcJpHwGczTH MleBkqRuGkWG
jUGo9lOu8ixgJoMFEqAS8nYlDI4vBFiiEQ08odmShUUsm45LDEuF/5itWSWr HnRCV7ySZj8m
/opYMvowZKtKibDs8SgSEWZIVtpeJJDHDQyRlY6tDNkWbvbtLL3MrCedY+TZ JjtB95A9f4Zb
X+KYHJ1W7C0Slo3b9DXZjcIE7gDx1yTuEkbKbEwP6zNFM7oX7TPct3MPzjF9 cIbHX/HEzj0/
R4EMOzbmz7F4QEEOWZclV4gcsEyQJQJaIcKrRLOEcbygsmuYonsa69TqBhFb xwLex9Sy3aI9
agnKNOcqRZs2GP2Jn99QSwcIedUjznECAACjBAAAUEsDBBQACAAIAGWbETsA AAAAAAAAAAAA
AABfAAAATW9kZWxBLmRpYWdyYW0vYmluL21vZGVsQS9kaWFncmFtL2VkaXQv cGFydHMvTW9k
ZWxBRWRpdFBhcnRGYWN0b3J5JExhYmVsQ2VsbEVkaXRvckxvY2F0b3IuY2xh c3OtVW1TW0UU
fjYkXEi3RYvQSl/oC5QkvFxb26qlrULatNFAsVCQ+rokS7J4c2967w2B6oz2 k998qzqOv0Jn
6sXRGcfP/hh/guPZmwgtTQBn/LDZ7N5zzj7Pc86e/fPvX38HcBYfG4gwZMpO QVoTZkGJoivK
piwo36wI1/fMqfDLddqYoXVG5H3HXR/IiSVppaVl6Q+Om3PygiYDUYZnVsSq MC1hF81bSysy
7xtoZxhy3KIp85aqeNIsymXTdxzLM58KwRCzdGyGvtzjLgVX1M4VzPDccYb2 y8pW/lWGY4nW
Zsl5hmia8MfRhv0cnTjA0JZIzneCYHIY6GDoyilbTlfLS9KdE0uWZDiooVjz wlV63diM+iXl
MdzM/T9KEYWOovRzdapHE8mdyHa40tJuBCP5JN2VZZGX5qqSNek+LiZRj6MP Rw0cYRjYiwfH
MRxniBOotGP7rkOwTm+D5dV8s6YKZEKedaNxAycIfyurObnmx0nsUxw96I1j AGcMDDIcbsWW
YwgJhv3krX0nnapd8DTtpgIVpVOWvrtu3qYyo4Kz5HgcKYwYGGYY3JMDx6g+ 0Ah5V9Y1RJPj
BZxl6PZdYXsW6T7nTCx5jlXVGRhtWnCbgecaPrpqwiz040WO87hQPyNDsjGc bCIsVVOlpPKe
qU2Ixkt4xcDLJF2T0zKqWHXlHV9ZylfS47gEKpMDjfhTBIQCMdxI7HLKLiga gQjMFbxq4Oq2
Umplz/EaJkg+gjOxKl1RlOmScBdUwS+F1y9rIL1Leq6psrQ95dhav+scGdxg 2Jd3yhXKway6
T3kYSGSzO+CfcVQo4ySy+uK/rqt5N2udrknkOKYwTS1GrlWEXWAYfuqklnDD 8pvheBO3Kd+e
9OtYZ3aumS33vVd5P+Y47oA6XCfp/O89ObNTYT15Sd7SsixSY95Bli0PLU0K b3O8g3e1NPeq
wqLzehK57d1+PHm3k0zf5/gAgoGt0cjqnTxHIdxZ16tljqJexWq6LvSO4ljR O+0lqYolX1Ok
dlCGTRS9LYoGZYPyQcTjeepeMuxexHxvfVE3cuorDMdbdjbdd7SdS2RInj1m hCpbrBKO+KxT
dfMyo/Sj0df0SRjTkjHwrG1LN20Jz5OegfsM5n98Wxh6m78uOEE9t41GjEZE v3P01ut1J3Q3
3kerDO1HaI6nNsBTwz+j6ydaRfAs/R4gW+ATRPEpeTzAQVr11q3RjeeA8J+O StnUjb0R0wzX
QCz1CF0/boZrDzc/C8PwukEjDMMhHG44/0V2MZpLwwGe/wP9U6kAJwOcDpCc 1n9HA4yNBDj3
Cy4GuHwxOvobJhdHIpEA1zZwsycaK7UFeCPArQX6klok09kNLAS4+wMOjYw+ wns0lmhIGqUA
H27RvUSEgc+JzheE60scwVc4ha8xSPMQHmIM3xC1h7hA8xWaJ/AtZvEd1e/3 Iafzddyb0pTg
oEKsOugG3INLp3TTTfXgk6xD5F2FIGkjWA0R1LAWyqmlW8dHiP8DUEsHCEnS k1tmBAAAmwkA
AFBLAwQUAAgACABlmxE7AAAAAAAAAAAAAAAAXgAAAE1vZGVsQS5kaWFncmFt L2Jpbi9tb2Rl
bEEvZGlhZ3JhbS9lZGl0L3BhcnRzL01vZGVsQUVkaXRQYXJ0RmFjdG9yeSRU ZXh0Q2VsbEVk
aXRvckxvY2F0b3IuY2xhc3OtVt13E1UQ/9007bZhaZVSUIoUpIUkbVlbEcQU pIQGi+kHbWhp
FWST3G5u3eyG3U0/8ANF/HryTY4++OqrnoNbj57j8dk/yuPc3dja74o+bO7O 3Zm5v/nNzJ38
8ecvvwHow5cKIgxDZbvIzUGtKHTD0csaLwpPq+iO52ojwZch2hgnOaMXPNtZ 7szxJS/NTVPu
207WLui0KIgyPDOvL+iaqVuGNpaf5wVPQQPDadsxNF4wRcXlmsHnNM+2TVfb 5IKhadHRK1k9
z02GC9l1ZuU5zalanihzrejoi/1FrSq0OWFUHe5q02RWEZYRmKYYGgaEJbxL DAPxp/aSmGKI
pomAGOqwX0UTmhnq4ompJlCgKhQ0MrRkhcVHq+U8d3J63uQMB2Qw5pTuCCnX NqNeSbgM17L/
C9UUoGpwb3qNq1Q88R/YanS4KT0T0MR6vubn9ALXFgRf5M4/E0bkxHAERxW0 M3TuxULFCzjG
ECPcadvyHJtQn9yA2l30tEVRJBWyDJVSCo4zHN1OS9ITo3S8qKINh2LoxCkF XQznn5IMFacR
Z9hPzqXrK3bVKrqSlfVAa14Mbpe55yxrE1TpVPMmT8WQRI+CboauPRmo6JUH KgEtlWUZgabi
JfQxtHqObrkmpSVnD+Zd26zKBPXGd0SSq9nIsguS1ImXVZzFK1QywpUxyXjH rKCSZ+Xn8ype
xYUQgvzOcJCiXevjSc8hdiiwFC4qGFjX4+E3FZfwOvWcyS3DKwWehxUM7kLB VUqH5QrbaiLK
0iquYoihnhIrXbDhGDpwTcUbGGbYV7DLFYp+UtwnBjrjw8Ob64baqVISBVcb t4XlEdzLeFP2
bFaW2W7akqgkRlWMYZyYcLkXHjW+M9mrIaT2Xh4dmFAxiVxIeIaqnOHEFn2w ilCqkN0UbimY
pkrf4qBMUMo3PWEKT3BXxQxmGZpr/kcIAzmi22cHHoJTdkFRc0Rg3sYdBbc3 dP52+irekeXR
SnAGF7ijGzxd0p1pmWiZJV1FHgUqH75U0a0iQ/em/G7Pu+STemgOBs0OOuDv hj21E6Pru1XI
KpmnIbUDO2sWYaXQPVGGJTHfq+omndcWz26cfKnErKzsiop7srLZkpSIDC+Q lqW0oGJRSg0l
LoySJ4NZVnEf71Ew7lowChFClNA4ihXoPuXBfUox7u2mlsMnaOtj2961su2l nkOwiYg91jI1
ur5AOGKTdtUp8IyQg+7IlmPsjCSHbqBhy+JO2tRdl7sKPmfQ/uU8JKa3nIg4 TkOgjp56eiJy
NNP/Gyk3QY6HfSRlaD9Cayy5AjXZ/RNafiQpgmfpt5l0gXFEcYMsJnCApEOh NlpxEAjepFdK
nZw0NZ9aIAP1ySdo+WHVXUOweStwo4YKNTcMh/FcaMz6SK+e9h53+3j+d3SM JH2c8HHSR2JU
vvb6OBNu9X+DePh2zsdr36G991dcnunpfYIrER+ZFVz3MTL9PRI9Pm78jJs+ 3joXDXUiNYW2
aH2pzsddqUhfkjOkWlxByce73+KwdGXT40iX9FR9LK2xM0rgQU3ciLv0pqOd GrYLBfSjiAFw
XKT1OgziroQcrVMQuI153KG1SKtJa4V+H1LTfA07oOVsGPoqu4/xPj4gYhrx FT7EAzq5FY/w
ET6mzEzRP42HGKLsRPBJgOoRPg0yItn/DF8g9hdQSwcIoV335+YEAADSCgAA UEsDBBQACAAI
AGWbETsAAAAAAAAAAAAAAABIAAAATW9kZWxBLmRpYWdyYW0vYmluL21vZGVs QS9kaWFncmFt
L2VkaXQvcGFydHMvTW9kZWxBRWRpdFBhcnRGYWN0b3J5LmNsYXNzpVXNch
Re: Wrong object type instantiated when using "new" inside EVL Quick Fixes and other issue [message #480593 is a reply to message #480582] Mon, 17 August 2009 14:35 Go to previous messageGo to next message
Dimitrios Kolovos is currently offline Dimitrios Kolovos
Messages: 1776
Registered: July 2009
Senior Member
Hi Antonio,

Many thanks for reporting this and for providing a patch. I'll
investigate for potential regressions tomorrow and get back to you.

Cheers,
Dimitris

Antonio García Domínguez wrote:
> Hi list,
>
> There appear to be some problems when creating objects inside an EVL
> Quick Fix when the global Package Registry contains another EPackage
> which includes a type with the same name. I hope that last sentence
> parses correctly :-D. This issue popped up when I was reusing some EVL
> constraints for two similar metamodels (one is a slight refinement of
> the other, which brings it a bit closer to what is needed to generate code).
>
> Here's an example. Suppose I have an Ecore metamodel whose main EPackage
> has the namespace URI "modelA" with a single EClass named Node. If I run
> the quick fix for the following EVL constraint, instead of
> 'modelA.Node', which is what I'd usually expect to be printed, something
> along the lines of 'org.eclipse.gmf.notation.Node' is printed:
>
> context Node {
> constraint XGreaterThanZero {
> check : self.x > 0
> fix {
> title : 'Replace with negated node'
> do {
> var newNode := new Node;
> newNode.type().instanceClassName.println(
> 'instance class newNode: ');
> newNode.name := self.name;
> newNode.x := -self.x;
> Diagram.all.first().nodes.add(newNode);
> delete self;
> }
> }
> }
> }
>
> Additionally, I get an error saying that the x property does not exist,
> which is to be expected if the created Node is not an instance of my
> model's Node EClass, but some other EPackage's Node.
>
> It seems that this problem is due to the different way the
> InMemoryEmfModel is initialized in the EvlValidator#validate(Resource)
> and EvlMarkerResolution#run(IMarker) methods. The first works correctly,
> and it is used while validating: its package registry only contains the
> ECore metamodel and my own. However, the second one, which runs the
> quick fix, uses the global Package Registry (105 packages in my case),
> and it seems to pick up the Node EClass from the GMF notation EPackage.
>
> If I delve a bit further, it looks like they're using different
> constructors. The one which works correctly passes the ePackageUri and
> adds its corresponding EPackage and its dependencies to the package
> registry. The other one just gets the default instance (which is
> Eclipse's global Package Registry, I suppose).
>
> I've attached a patch which modifies EvlMarkerResolutionGenerator,
> EvlMarkerResolution and EvlValidator so the package registry is
> initialized for quick fixes in the same way it is initialized for EVL
> validations. I'm not sure if it's the right approach, as the changes
> ripple across several classes, but it does seem to fix the problem for
> me. I have also attached a zip with a set of projects which reproduce
> the issue.
>
> By the way: I noticed two minor issues with EVL quick fixes when using
> the EMF editor instead of the GMF editor. It looks like the validation
> is not run in read-only mode as it is from GMF. This issue can be
> reproduced from the attached example by uncommenting the second line in
> the check block for ModelA/validationA.evl and trying to validate a
> model which has a Node with a negative X value from the EMF editor:
>
> check {
> --createNode();
> return self.x > 0;
> }
>
> This second line produces an error from GMF, but not from EMF.
>
> As for the second issue, it seems that for some reason, resolutions for
> the EMF editor are repeated exactly three times. In fact, sometimes I
> don't get my fix, but only three "Ignore" fixes. Other times (usually
> after I have validated the model in the GMF editor), I get my fix and
> Ignore three times, in this order: my fix -> Ignore -> my fix -> Ignore
> -> my fix -> Ignore.
>
> Should I report these three issues as separate bugs in Bugzilla?
>
> Cheers,
> Antonio
>
Re: Wrong object type instantiated when using "new" inside EVL Quick Fixes and other issue [message #481810 is a reply to message #480582] Mon, 24 August 2009 08:00 Go to previous messageGo to next message
Dimitrios Kolovos is currently offline Dimitrios Kolovos
Messages: 1776
Registered: July 2009
Senior Member
Hi Antonio,

Apologies for my previous incomplete reply. I just read through the post
again and realized that I had missed your last two points :(

Antonio García Domínguez wrote:
> Hi list,
>
> There appear to be some problems when creating objects inside an EVL
> Quick Fix when the global Package Registry contains another EPackage
> which includes a type with the same name.

<snip>

I've applied the patch, tested and committed the changes to the SVN.

>
> By the way: I noticed two minor issues with EVL quick fixes when using
> the EMF editor instead of the GMF editor. It looks like the validation
> is not run in read-only mode as it is from GMF. This issue can be
> reproduced from the attached example by uncommenting the second line in
> the check block for ModelA/validationA.evl and trying to validate a
> model which has a Node with a negative X value from the EMF editor:
>
> check {
> --createNode();
> return self.x > 0;
> }
>
> This second line produces an error from GMF, but not from EMF.
>
> As for the second issue, it seems that for some reason, resolutions for
> the EMF editor are repeated exactly three times. In fact, sometimes I
> don't get my fix, but only three "Ignore" fixes. Other times (usually
> after I have validated the model in the GMF editor), I get my fix and
> Ignore three times, in this order: my fix -> Ignore -> my fix -> Ignore
> -> my fix -> Ignore.
>
> Should I report these three issues as separate bugs in Bugzilla?

Yes please.

>
> Cheers,
> Antonio
>
Re: Wrong object type instantiated when using "new" inside EVL Quick Fixes and other issue [message #482076 is a reply to message #481810] Tue, 25 August 2009 06:34 Go to previous messageGo to next message
Eclipse User
Originally posted by: nyoescape.gmail.com

Hi Dimitris,

> Apologies for my previous incomplete reply. I just read through the post
> again and realized that I had missed your last two points :(

Don't worry about it :-). Here are their bug reports:

https://bugs.eclipse.org/bugs/show_bug.cgi?id=287542
https://bugs.eclipse.org/bugs/show_bug.cgi?id=287543

Cheers,
Antonio
Re: Wrong object type instantiated when using "new" inside EVL Quick Fixes and other issue [message #482080 is a reply to message #482076] Tue, 25 August 2009 06:38 Go to previous message
Dimitrios Kolovos is currently offline Dimitrios Kolovos
Messages: 1776
Registered: July 2009
Senior Member
Many thanks!

Dimitris

Antonio García Domínguez wrote:
> Hi Dimitris,
>
>> Apologies for my previous incomplete reply. I just read through the post
>> again and realized that I had missed your last two points :(
>
> Don't worry about it :-). Here are their bug reports:
>
> https://bugs.eclipse.org/bugs/show_bug.cgi?id=287542
> https://bugs.eclipse.org/bugs/show_bug.cgi?id=287543
>
> Cheers,
> Antonio
Re: Wrong object type instantiated when using "new" inside EVL Quick Fixes and other issue [message #574308 is a reply to message #480582] Mon, 17 August 2009 14:35 Go to previous message
Dimitrios Kolovos is currently offline Dimitrios Kolovos
Messages: 1776
Registered: July 2009
Senior Member
Hi Antonio,

Many thanks for reporting this and for providing a patch. I'll
investigate for potential regressions tomorrow and get back to you.

Cheers,
Dimitris

Antonio García Domínguez wrote:
> Hi list,
>
> There appear to be some problems when creating objects inside an EVL
> Quick Fix when the global Package Registry contains another EPackage
> which includes a type with the same name. I hope that last sentence
> parses correctly :-D. This issue popped up when I was reusing some EVL
> constraints for two similar metamodels (one is a slight refinement of
> the other, which brings it a bit closer to what is needed to generate code).
>
> Here's an example. Suppose I have an Ecore metamodel whose main EPackage
> has the namespace URI "modelA" with a single EClass named Node. If I run
> the quick fix for the following EVL constraint, instead of
> 'modelA.Node', which is what I'd usually expect to be printed, something
> along the lines of 'org.eclipse.gmf.notation.Node' is printed:
>
> context Node {
> constraint XGreaterThanZero {
> check : self.x > 0
> fix {
> title : 'Replace with negated node'
> do {
> var newNode := new Node;
> newNode.type().instanceClassName.println(
> 'instance class newNode: ');
> newNode.name := self.name;
> newNode.x := -self.x;
> Diagram.all.first().nodes.add(newNode);
> delete self;
> }
> }
> }
> }
>
> Additionally, I get an error saying that the x property does not exist,
> which is to be expected if the created Node is not an instance of my
> model's Node EClass, but some other EPackage's Node.
>
> It seems that this problem is due to the different way the
> InMemoryEmfModel is initialized in the EvlValidator#validate(Resource)
> and EvlMarkerResolution#run(IMarker) methods. The first works correctly,
> and it is used while validating: its package registry only contains the
> ECore metamodel and my own. However, the second one, which runs the
> quick fix, uses the global Package Registry (105 packages in my case),
> and it seems to pick up the Node EClass from the GMF notation EPackage.
>
> If I delve a bit further, it looks like they're using different
> constructors. The one which works correctly passes the ePackageUri and
> adds its corresponding EPackage and its dependencies to the package
> registry. The other one just gets the default instance (which is
> Eclipse's global Package Registry, I suppose).
>
> I've attached a patch which modifies EvlMarkerResolutionGenerator,
> EvlMarkerResolution and EvlValidator so the package registry is
> initialized for quick fixes in the same way it is initialized for EVL
> validations. I'm not sure if it's the right approach, as the changes
> ripple across several classes, but it does seem to fix the problem for
> me. I have also attached a zip with a set of projects which reproduce
> the issue.
>
> By the way: I noticed two minor issues with EVL quick fixes when using
> the EMF editor instead of the GMF editor. It looks like the validation
> is not run in read-only mode as it is from GMF. This issue can be
> reproduced from the attached example by uncommenting the second line in
> the check block for ModelA/validationA.evl and trying to validate a
> model which has a Node with a negative X value from the EMF editor:
>
> check {
> --createNode();
> return self.x > 0;
> }
>
> This second line produces an error from GMF, but not from EMF.
>
> As for the second issue, it seems that for some reason, resolutions for
> the EMF editor are repeated exactly three times. In fact, sometimes I
> don't get my fix, but only three "Ignore" fixes. Other times (usually
> after I have validated the model in the GMF editor), I get my fix and
> Ignore three times, in this order: my fix -> Ignore -> my fix -> Ignore
> -> my fix -> Ignore.
>
> Should I report these three issues as separate bugs in Bugzilla?
>
> Cheers,
> Antonio
>
Re: Wrong object type instantiated when using "new" inside EVL Quick Fixes and other issue [message #574649 is a reply to message #480582] Mon, 24 August 2009 08:00 Go to previous message
Dimitrios Kolovos is currently offline Dimitrios Kolovos
Messages: 1776
Registered: July 2009
Senior Member
Hi Antonio,

Apologies for my previous incomplete reply. I just read through the post
again and realized that I had missed your last two points :(

Antonio García Domínguez wrote:
> Hi list,
>
> There appear to be some problems when creating objects inside an EVL
> Quick Fix when the global Package Registry contains another EPackage
> which includes a type with the same name.

<snip>

I've applied the patch, tested and committed the changes to the SVN.

>
> By the way: I noticed two minor issues with EVL quick fixes when using
> the EMF editor instead of the GMF editor. It looks like the validation
> is not run in read-only mode as it is from GMF. This issue can be
> reproduced from the attached example by uncommenting the second line in
> the check block for ModelA/validationA.evl and trying to validate a
> model which has a Node with a negative X value from the EMF editor:
>
> check {
> --createNode();
> return self.x > 0;
> }
>
> This second line produces an error from GMF, but not from EMF.
>
> As for the second issue, it seems that for some reason, resolutions for
> the EMF editor are repeated exactly three times. In fact, sometimes I
> don't get my fix, but only three "Ignore" fixes. Other times (usually
> after I have validated the model in the GMF editor), I get my fix and
> Ignore three times, in this order: my fix -> Ignore -> my fix -> Ignore
> -> my fix -> Ignore.
>
> Should I report these three issues as separate bugs in Bugzilla?

Yes please.

>
> Cheers,
> Antonio
>
Re: Wrong object type instantiated when using "new" inside EVL Quick Fixes and other issue [message #579458 is a reply to message #481810] Tue, 25 August 2009 06:34 Go to previous message
Antonio Garcia-Dominguez is currently offline Antonio Garcia-Dominguez
Messages: 304
Registered: January 2010
Senior Member
Hi Dimitris,

> Apologies for my previous incomplete reply. I just read through the post
> again and realized that I had missed your last two points :(

Don't worry about it :-). Here are their bug reports:

https://bugs.eclipse.org/bugs/show_bug.cgi?id=287542
https://bugs.eclipse.org/bugs/show_bug.cgi?id=287543

Cheers,
Antonio
Re: Wrong object type instantiated when using "new" inside EVL Quick Fixes and other issue [message #579475 is a reply to message #482076] Tue, 25 August 2009 06:38 Go to previous message
Dimitrios Kolovos is currently offline Dimitrios Kolovos
Messages: 1776
Registered: July 2009
Senior Member
Many thanks!

Dimitris

Antonio García Domínguez wrote:
> Hi Dimitris,
>
>> Apologies for my previous incomplete reply. I just read through the post
>> again and realized that I had missed your last two points :(
>
> Don't worry about it :-). Here are their bug reports:
>
> https://bugs.eclipse.org/bugs/show_bug.cgi?id=287542
> https://bugs.eclipse.org/bugs/show_bug.cgi?id=287543
>
> Cheers,
> Antonio
Previous Topic:Accessing a "guard" field in a model
Next Topic:Java via Epsilon Tools
Goto Forum:
  


Current Time: Mon Sep 01 14:48:57 EDT 2014

Powered by FUDForum. Page generated in 0.02195 seconds