Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(76)

Side by Side Diff: conformance/more/performance/CPUvsGPU.html

Issue 41503006: Add ToT WebGL conformance tests : part 8 (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/deps/third_party/webgl/sdk/tests/
Patch Set: Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « conformance/more/index.html ('k') | conformance/more/performance/bandwidth.html » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Property Changes:
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
OLDNEW
(Empty)
1 <!DOCTYPE html>
2 <html>
3 <head>
4 <meta charset="utf-8">
5 <!--
6
7 /*
8 ** Copyright (c) 2012 The Khronos Group Inc.
9 **
10 ** Permission is hereby granted, free of charge, to any person obtaining a
11 ** copy of this software and/or associated documentation files (the
12 ** "Materials"), to deal in the Materials without restriction, including
13 ** without limitation the rights to use, copy, modify, merge, publish,
14 ** distribute, sublicense, and/or sell copies of the Materials, and to
15 ** permit persons to whom the Materials are furnished to do so, subject to
16 ** the following conditions:
17 **
18 ** The above copyright notice and this permission notice shall be included
19 ** in all copies or substantial portions of the Materials.
20 **
21 ** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
22 ** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
23 ** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
24 ** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
25 ** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
26 ** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
27 ** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
28 */
29
30 -->
31
32 <link rel="stylesheet" type="text/css" href="../unit.css" />
33 <script type="application/x-javascript" src="../unit.js"></script>
34 <script type="application/x-javascript" src="../util.js"></script>
35 <script type="application/x-javascript">
36
37 Tests.autorun = false;
38 Tests.message = "This might take a few seconds to run"
39
40 Tests.startUnit = function() {
41 var gl = document.getElementById('gl').getContext(GL_CONTEXT_ID);
42 var ctx = document.getElementById('2d').getContext('2d');
43 return [gl, ctx];
44 }
45
46 var kernel = [0.006, 0.061, 0.242, 0.383, 0.242, 0.061, 0.006];
47
48 Tests.testGPU = function(gl, ctx) {
49 Tests.gpuGaussianBlur(gl);
50 }
51
52 Tests.testCPU = function(gl, ctx) {
53 Tests.cpuGaussianBlur(ctx);
54 }
55
56 function hblur(ctx,idata) {
57 var d = idata.data;
58 var res = ctx.createImageData(256,256);
59 var rd = res.data;
60 var sumR=0.0,sumG=0.0,sumB=0.0,sumA=0.0, kv=0.0;
61 var col_offset = 0, row_offset = 0, k4 = 0;
62 for (var y=0; y<idata.height; ++y) {
63 col_offset = y * idata.width * 4;
64 for (var x=3; x<idata.width-3; ++x) {
65 row_offset = col_offset+x*4;
66 sumR=sumG=sumB=sumA=0.0;
67 for (var k=-3; k<4; ++k) {
68 k4 = k * 4;
69 kv = kernel[k+3];
70 sumR += d[row_offset+k4+0] * kv;
71 sumG += d[row_offset+k4+1] * kv;
72 sumB += d[row_offset+k4+2] * kv;
73 sumA += d[row_offset+k4+3] * kv;
74 }
75 rd[row_offset+0] = Math.floor(sumR);
76 rd[row_offset+1] = Math.floor(sumG);
77 rd[row_offset+2] = Math.floor(sumB);
78 rd[row_offset+3] = Math.floor(sumA);
79 }
80 }
81 var xr = 3;
82 for (var y=0; y<idata.height; ++y) {
83 col_offset = y * idata.width * 4;
84 for (var x=0; x<xr; ++x) {
85 row_offset = col_offset+x*4;
86 sumR=sumG=sumB=sumA=0.0;
87 for (var k=-3; k<4; ++k) {
88 if (k+x < 0)
89 k4 = 0;
90 else
91 k4 = k * 4;
92 kv = kernel[k+3];
93 sumR += d[row_offset+k4+0] * kv;
94 sumG += d[row_offset+k4+1] * kv;
95 sumB += d[row_offset+k4+2] * kv;
96 sumA += d[row_offset+k4+3] * kv;
97 }
98 rd[row_offset+0] = Math.floor(sumR);
99 rd[row_offset+1] = Math.floor(sumG);
100 rd[row_offset+2] = Math.floor(sumB);
101 rd[row_offset+3] = Math.floor(sumA);
102 }
103 }
104 var xr = idata.width-3;
105 for (var y=0; y<idata.height; ++y) {
106 col_offset = y * idata.width * 4;
107 for (var x=xr; x<idata.width; ++x) {
108 row_offset = col_offset+x*4;
109 sumR=sumG=sumB=sumA=0.0;
110 for (var k=-3; k<4; ++k) {
111 if (k+x >= idata.width)
112 k4 = (idata.width-x-1)*4;
113 else
114 k4 = k * 4;
115 kv = kernel[k+3];
116 sumR += d[row_offset+k4+0] * kv;
117 sumG += d[row_offset+k4+1] * kv;
118 sumB += d[row_offset+k4+2] * kv;
119 sumA += d[row_offset+k4+3] * kv;
120 }
121 rd[row_offset+0] = Math.floor(sumR);
122 rd[row_offset+1] = Math.floor(sumG);
123 rd[row_offset+2] = Math.floor(sumB);
124 rd[row_offset+3] = Math.floor(sumA);
125 }
126 }
127 return res;
128 }
129
130 function vblur(ctx,idata) {
131 var d = idata.data;
132 var res = ctx.createImageData(256,256);
133 var rd = res.data;
134 var sumR=0.0,sumG=0.0,sumB=0.0,sumA=0.0, kv=0.0;
135 var col_offset = 0, row_offset = 0, kfac = idata.width*4;
136 for (var y=3; y<idata.height-3; ++y) {
137 col_offset = y * idata.width * 4;
138 for (var x=0; x<idata.width; ++x) {
139 row_offset = col_offset+x*4;
140 sumR=sumG=sumB=sumA=0.0;
141 for (var k=-3; k<4; ++k) {
142 k4 = k * kfac;
143 kv = kernel[k+3];
144 sumR += d[row_offset+k4+0] * kv;
145 sumG += d[row_offset+k4+1] * kv;
146 sumB += d[row_offset+k4+2] * kv;
147 sumA += d[row_offset+k4+3] * kv;
148 }
149 rd[row_offset+0] = Math.floor(sumR);
150 rd[row_offset+1] = Math.floor(sumG);
151 rd[row_offset+2] = Math.floor(sumB);
152 rd[row_offset+3] = Math.floor(sumA);
153 }
154 }
155 var yr = 3;
156 for (var y=0; y<yr; ++y) {
157 col_offset = y * idata.width * 4;
158 for (var x=0; x<idata.width; ++x) {
159 row_offset = col_offset+x*4;
160 sumR=sumG=sumB=sumA=0.0;
161 for (var k=-3; k<4; ++k) {
162 if (k+y < 0)
163 k4 = 0;
164 else
165 k4 = k * kfac;
166 kv = kernel[k+3];
167 sumR += d[row_offset+k4+0] * kv;
168 sumG += d[row_offset+k4+1] * kv;
169 sumB += d[row_offset+k4+2] * kv;
170 sumA += d[row_offset+k4+3] * kv;
171 }
172 rd[row_offset+0] = Math.floor(sumR);
173 rd[row_offset+1] = Math.floor(sumG);
174 rd[row_offset+2] = Math.floor(sumB);
175 rd[row_offset+3] = Math.floor(sumA);
176 }
177 }
178 var yr = idata.height-3;
179 for (var y=yr; y<idata.height; ++y) {
180 col_offset = y * idata.width * 4;
181 for (var x=0; x<idata.width; ++x) {
182 row_offset = col_offset+x*4;
183 sumR=sumG=sumB=sumA=0.0;
184 for (var k=-3; k<4; ++k) {
185 if (k+y >= idata.height)
186 k4 = (idata.height-y-1)*kfac;
187 else
188 k4 = k * kfac;
189 kv = kernel[k+3];
190 sumR += d[row_offset+k4+0] * kv;
191 sumG += d[row_offset+k4+1] * kv;
192 sumB += d[row_offset+k4+2] * kv;
193 sumA += d[row_offset+k4+3] * kv;
194 }
195 rd[row_offset+0] = Math.floor(sumR);
196 rd[row_offset+1] = Math.floor(sumG);
197 rd[row_offset+2] = Math.floor(sumB);
198 rd[row_offset+3] = Math.floor(sumA);
199 }
200 }
201 return res;
202 }
203
204 Tests.cpuGaussianBlur = function(ctx) {
205 var s = document.getElementById('cpustat');
206 var t0 = new Date().getTime();
207 ctx.drawImage(document.getElementById('logo'),0,0);
208 var idata = ctx.getImageData(0,0,256,256);
209 for (var i=0; i<1; i++){
210 idata = hblur(ctx,idata);
211 idata = vblur(ctx,idata);
212 }
213 ctx.putImageData(idata, 0, 0);
214 var t1 = new Date().getTime();
215 s.textContent = 'Done! Time: '+(t1-t0)+'ms';
216 }
217
218 Tests.gpuGaussianBlur = function(gl) {
219 var s = document.getElementById('gpustat');
220 var t0 = new Date().getTime();
221
222 var fbo1 = new FBO(gl, 256, 256);
223 var fbo2 = new FBO(gl, 256, 256);
224 var hblur = new Filter(gl, 'identity-vert', 'hblur-frag');
225 var vblur = new Filter(gl, 'identity-vert', 'vblur-frag');
226 var identity = new Filter(gl, 'identity-vert', 'identity-frag');
227 var identityFlip = new Filter(gl, 'identity-flip-vert', 'identity-frag');
228
229 gl.viewport(0,0,256,256);
230 gl.clearColor(0,0,1,1);
231 gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
232 gl.disable(gl.DEPTH_TEST);
233 gl.activeTexture(gl.TEXTURE0);
234
235 fbo1.use();
236 var tex = loadTexture(gl, document.getElementById('logo'));
237 gl.bindTexture(gl.TEXTURE_2D, tex);
238 identityFlip.apply(); // draw image
239
240 // gaussian blur
241 for (var i=0; i<1000; i++) {
242 fbo2.use();
243 gl.bindTexture(gl.TEXTURE_2D, fbo1.texture);
244 hblur.apply(function(f){
245 f.uniform1f('width', 256.0);
246 f.uniform1i('Texture', 0);
247 });
248 fbo1.use();
249 gl.bindTexture(gl.TEXTURE_2D, fbo2.texture);
250 vblur.apply(function(f){
251 f.uniform1f('height', 256.0);
252 f.uniform1i('Texture', 0);
253 });
254 }
255
256 gl.bindFramebuffer(gl.FRAMEBUFFER, null);
257 gl.bindTexture(gl.TEXTURE_2D, fbo1.texture);
258 identity.apply(); // draw blurred image on screen
259
260 fbo1.destroy();
261 fbo2.destroy();
262 hblur.destroy();
263 vblur.destroy();
264 identity.destroy();
265 identityFlip.destroy();
266 gl.deleteTexture(tex);
267 checkError(gl, "end");
268 var t1 = new Date().getTime();
269 s.textContent = 'Done! Time: '+(t1-t0)+'ms';
270 }
271
272
273 </script>
274 <script id="identity-vert" type="x-shader/x-vertex">
275
276 attribute vec3 Vertex;
277 attribute vec2 Tex;
278
279 varying vec4 texCoord0;
280 void main()
281 {
282 texCoord0 = vec4(Tex, 0.0, 0.0);
283 gl_Position = vec4(Vertex, 1.0);
284 }
285 </script>
286 <script id="identity-flip-vert" type="x-shader/x-vertex">
287
288 attribute vec3 Vertex;
289 attribute vec2 Tex;
290
291 varying vec4 texCoord0;
292 void main()
293 {
294 texCoord0 = vec4(Tex.s, 1.0-Tex.t, 0.0, 0.0);
295 gl_Position = vec4(Vertex, 1.0);
296 }
297 </script>
298 <script id="identity-frag" type="x-shader/x-fragment">
299
300 precision mediump float;
301
302 uniform sampler2D Texture;
303
304 varying vec4 texCoord0;
305 void main()
306 {
307 gl_FragColor = texture2D(Texture, texCoord0.st);
308 }
309 </script>
310 <script id="hblur-frag" type="x-shader/x-fragment">
311
312 precision mediump float;
313
314 uniform sampler2D Texture;
315 uniform float width;
316
317 varying vec4 texCoord0;
318 void main()
319 {
320 float kernel[7] = float[7](0.006, 0.061, 0.242, 0.383, 0.242, 0.061, 0.006);
321 int i;
322 float step = 1.0 / width;
323 vec4 sum = vec4(0.0);
324 for (i=-3; i<=3; i++) {
325 vec4 tmp = texture2D(Texture, texCoord0.st + vec2(float(i)*step, 0.0));
326 sum = (tmp * kernel[i+3]) + sum;
327 }
328 gl_FragColor = sum;
329 }
330 </script>
331 <script id="vblur-frag" type="x-shader/x-fragment">
332
333 precision mediump float;
334
335 uniform sampler2D Texture;
336 uniform float height;
337
338 varying vec4 texCoord0;
339 void main()
340 {
341 float kernel[7] = float[7](0.006, 0.061, 0.242, 0.383, 0.242, 0.061, 0.006);
342 int i;
343 float step = 1.0 / height;
344 vec4 sum = vec4(0.0);
345 for (i=-3; i<=3; i++) {
346 vec4 tmp = texture2D(Texture, texCoord0.st + vec2(0.0, float(i)*step));
347 sum = (tmp * kernel[i+3]) + sum;
348 }
349 gl_FragColor = sum;
350 }
351 </script>
352 </head><body>
353 <img id="logo" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAYAAA BccqhmAAAgAElEQVR4nO19bWiUZ9b/+BJfsP8oJfXlyUMDNkSSfnvGhgh2Qak6IPRZJ9QPtTIlYMQ2RQ vWHagSxcgiCYTtulsCCinb1mWfriy20pSnLkL1Q2Fqv5RktThhaxseWFGXFQbZdc//w8y55lznPtfLfc 99J6OZCw73PTOZSYz5/c7vvFznSkFjNVZjzduVmusfoLEaq7HmbjUIoLEaax6vBgE0VmPN49UggMZqrH m8GgTQWI01j1eDABqrsebxahBAYzXWPF4NAmisxprHq0EAjdVY83g1CKCxGmserwYBPKarWJyGs2c/hT ff/BjefPNjWL/tV7A7ewRWtQwoS6X61dVk9OtXtQzA0x1H1Wf9fP/78OabH8PZs5/C5OQklEqluf5nN1 bMq0EAdbxmZmZg4otvFcApsOfKKEm8+ebHMPHFt3Dv3r25/lU1VsTVIIA6Wffu3VNgf7rjqB/Q1x6E1N qD8HTHUVjccxoW95yGRb2/haaBP8DSX3wKy0/8GZaNXoNlo9fg/330F/h/H/0F/nPi/+A/J/5PPb/8xJ 9h+Yk/w7MHPoTU6x/Bot7fqs/Cz0+tPehFDA1SePxWgwDmYJVKJbh37x68f+Z/4Of733eDvQLy1I4RBW 4ELwKZAp3fI/ip/efE/4nP0/fwz1t+4s/QNPAHSGV+A2vSv4RU59vO0OLn+9+Hs2c/bRBCna4GAcziKh QK8OabH5fBY/PqnW8rT44empoJ/Cbgo9enZgM+vV9+4s8aCXDDnyn1+kewuOd0magMhLAm/Ut4/8z/wM QX3zbyCXWyGgSQ4CqVSjDxxbd2L7/2YFluv/4RLP3Fp5otP/FndfUlARvoTSTAVYJJAdiM/3xLf/EppD K/MYYQq1oG4M03P4bJycm5/m+a16tBAAmsyclJFcu7PDxKerz6gN9EAD6gt6kAE/BRCUig51fJ8N+n8g rsd/J0x1F4882PoVAozPV/3bxbDQKIaWFML8r7tQch9dKgBnpu3PvbSEACHwI1KgFI8t8nDLCBn/4buC l1wH5Xa9K/hLNnP22ECLO0GgRQ4zJK/HWvKU+fev0jSL3+UTmBVrly8IclAQTezwb/FAn8tBpgI4GfDf 7JKwdg8/4mEsB/f2rHSIAMGiHC7KwGAURcE198C+u3/Sro7TvfhtSOkSrw+8ecBOAiAZcKiCL/fZKBth yAj/w3gZ/+O+nvAEuQUnmxkThMZjUIIMRCmR+I7ZtfhtQLeVjU+9sy8Cugj0ICUVRAVO9PCeC/3/tfq+ fH5+KQ/5QEpN9D6vWPRFXQCA/iXw0C8Fj37t2Ds2c/1YHf/HJZ5hPgc6PA1+5DqgAXAUQFf1wKIKz8t4 FfIwEkUdZv8HTHUTh79tO5/rN4IlaDACyrVCoZgb+457SS+hz06p6qgIphx12YZKCNBGoBv5QIdCmBpB UAVUmUNBtEkMxqEIBhTXzxrezxXxosy1OM8wUS4GRgUgBREoIUfLVIf5+KQNyxv68CSPWPaSrARQRr0r +EiS++nes/mcdyNQiArUKhoCf3iNRH4HuBn3h/iQS4Enj2wIcaOPAxBf+zBz5UII3D+9uIgHv+/37vfx OX/ybvn+of08hU/Y4ZEazf9qtG1SDkahBAZRWL0/Dmmx/r5bxKco96fW42IuB/tFQB2MIAmwLg/fxJma v0F9X7+8T+oveniVUaZgnJwjff/LiRKPRcDQIAgPfP/E8Q+J1vQ+qlQRXrSySwqPe3qsEnTBiA3t9XCV BAITiTBD8lAa4EsBLgIoGfDf4J/vu9/4WhY3kYGjoNhw8fhsOHD5cfH8ur++G+LXD48GH4+f73YXf2CD x74EPYsOfXAe8vgV/7Pb+Q14hgVctAIz/gseY1ARQKBb1zr/nl8h9Rxesv7jntJIHI4YCjJGiqBiwbvQ ZLf/Fpzdn/KEqA5yBsCuDZAx/CwBvvwNCxPHx+bj/cOdUNcHUnwNWdUPrqRPUKQ+p5uLoTYCwNMJaG0v EuuJzfCpfzW2HoWB5yuRz8fP/7VrJthAXh17wkgHv37gXlPsb5L+TLgEfpXzFFAhFCAVMugHr/Zw98qI Gf5wCoEkCAhd38E9WWn/iz5vlN3p9XKziBPXvgQ/j5/vdh6Fgefn98M5SOd8Gj4Y0AV3fCwzO9ANAPAE OaIVkgOZSOd8GdU91wOb8VBt54B3K5XFkxVJSYImpCBNhV2FjBNe8IYHJyUk/yrXsNUhv2KvAr4CMREC VQiwoQG4QsSoAnzBD0UjmQqoEkyABVgCv5Fzbxl+ofg5/vfx8OHz4Ml/NboXS8SyMFuLoTOCGUrb9KDI QUhvu2VAlhx0j5/5JtR26oAX3VDQF8/0keHv3tWqLf4+zZT8V+fQ38SZOApRqAj21KgKoB9MxJhwFU9n MlwAkgdN2flPyePfAh5HI5pQ4enOyG0vGuclggkkE/ub6oEcKtwXYY7tsCA2+8UyZ41jvQSBKWV10QQO mrE3D3wGr4/pN8Ip9fLE7Dz/e/r4Mfvb5AACoEIAQQIIE4cgFCKOBTFqRqIKlyoLQVOGr231n3FxJ+qf 4xyOVymjJAMqiGC9xerNrVnQATbUpRXM5vhZFMlwr7fr7/fZiZmUnk7+1xWnNPAIUxmH5rDcy8uxI+P7 c/9o8PNPSg10czkAAlgjhJAAng2QMfaqFA2A5BBFsSyUCa/UfQuzx/FPAr5eMo9W3Y82sY7tuiEYEWKs CLECAASFWv36wGmGiDBye74dHwRpga6IDhvi2w8fneeT/teE4J4NHfrsH9Q+th5t2VcGuwHaYGOmL77F KpBO+f+R9Z8nPwm8IAlhD0CQOcvQG0kYX1BZiUAFcBs6EAuPRPatMPVwBSqU/9vl8ahJFMV4AIVJjwzW pAAvj335vINVW1b1bDow/K4cWDk90wNdABn5/bP29nFs4ZAdy7dw9uDbbDzLsrNRK4d+8elEqlmlh5Zm ZGl/zYzUfBLykAiQgQ+J4kQMGfyvzGGQpoNW+HEpA6BJPMAdCuwLCJP2/pT72/UONX2X1SkUmn03C+v1 VUBI+GNxIiSAUI4N9/byrbDys0VfBoeKPKQ80nRTBnBPD9J3kN/PcPrYfpt9bAP4sXNBII+59RLE4HW3 krY7iMFiIXEOgNiLEsaGsOspFAEpn/JON+XvmQvH+qf0wEv7LFnUY18Gh4Y1kVTLSB5v0pAVRIAIkASQ CJAP8Gn/Q1JwTwz+IFBXxKAjPvroTr43vh3r17ysIQQaFQCO7T37C3DG6TAvDIBRgrAj5VAYMK4CTgkx OgwKf3SfQC0NJfIht+pL5/SfoT+Y//D6mXBiG1YS+sbNsGr6TXWkkAFYEGfAQ/IYF//7ACHn3QpRFB6a sTkR3R47JmnQBKpRLcOdWteX5KBNNvrYGZmRmYmZkJEIFtTXzxrcrwLlu0uQx4BD0FPxJCSBKQwoA4Eo ISEfC9AjwPQPsCku4KxERg3NKfJ/8C3p/8/hT4N+wNXDkJIPAD9x90VYlAAD98s1pdkQgenOyGh2d64d Hfrj2ximBWCaBUKsHt7y4EwI+5AHzupyvvQbE47U0CWrIP430O/rUH7eB3JANtCUFbOBAqFKjcNw38AX 42+KeASU1Czx74MDHwm0iA70/gPQrenl/a6ss3+nDpT0mgYi0tzwRyAhIRPBreCI8+6NKAbyIBGhY8ON mt1MCTRgSzRgD4y7tzqlv0/JwQisVpRQJIBFyKaZn+5pd1z7/2YLXLD8GPuYAoKgDlp1QWrKEqsGHPr+ Fng3+C0dFRuHTpEtz+7gL8s1g1+Mfv4NKlS1oeAEGGQJyNVmDegRhL1p9YAPy2HIBAApQATODn+QEj+I nRsODhmV5vRfq4rFklAOr9TSSA999/ktdIgP/isZ9fBD8aBz8C30UEEfIB1qRgJQ+A1/868DGMjo7CT1 fe04DOgX/7uwvws8E/Qap/LNAhiECjZcC4B4RI3p83I4Xx/qL8pyEALZGS3ZaaEnghrwE/k8nA5fxWuH 9ofQD4qipwdafK9gdeqwBdAj8qAZ4kfPS3azAzM/NE5AZmhQC49zd5ff64cO0KTE5OaiSAv3QE/7JFm2 XwcxXAQwJXOCCQgLZJKGSb8IY9v4bx8XHl4TnguY2Pj8OzBz4MbB3meQEKVAnAcXj+WON+adiHYasvJY Hd2SOQzWZhuG8LDPdtCXQImgwlPLYS8z0Ej4Y3lkFuAj8hARhLKxK5/d2FJ0INzBoBFIvTCuAS2KXH33 +Sh0KhAJOTkyoUUDX+5pchlUqbwW8KBXySgo7eAFdCkKqBN9/8GC5dumQEOvzjdwCFMc0OHz6sAcI0P4 A3AUmgdxEBfV0iEawE8AakqOCn/5ZU/xhs2PNrGHjjHfj98c1wOb8VpgY61B4AbPChgKav2bL/pnu4ur P8O6/sJ3h4pldtQXYSwESbIoFHwxsBCmOPPQkkTgDo/b//JG/M/Juut/etgsK1K1AoFFQ4EAr8lASQAK gCsPUH2MIAQ6swJYGf738/4O0R7P8sXgiAvvTVCSh9dQJyuZyYJJSUAJfqPsD3eZ5/JhKBa7OPS/prxn ZGLur9LezOHoGhY3m4Ndge7PJT8wP0nYCcIHzzABoR4LWyf8AE/kcfdGkkgMlBXrJ+nNasEQDN9Nvif/ 6YhgJl2Z/WwY9Zf5r9d5GABH6XEvBUAQh8KvElsFPQl746AQ/P9MLu7BExWciVAEp/Cai+ZMDBzUuJ0m diPkDy/lKOwhbzSxuj6L95d/aIvf+feHE6VIQqBCcJjKWr7yefV/rqhGoQ4oYkwPsFisVpKwnUKzkkSg ClUgngXz+UJbzF29teu3tgNVwf31sGB/X8zS/7gR+9vkQCPg1Cnp2CG/b8Gi5duhSQ9BLYKejxmsvlAv kDU8nQB/wSGdhATUnA9Z5IcX8I8HPbnT0SUAVY21dThRiA4epOYwVAA+9x+TPK9/1VVTBBwP9Bpa+A5A RKX50wVqsAyvtesKegnlbiBHDv3j24Pr5XBP2twXaRBHhO4P6h9dCX2VQGfipdBb9EAGGVAK0KRAgFFv echqGh06EBT224b4te5jIRQKUawAeDRiEBmuGnLb88+88JAhWAC/yUBJb+4tNI4NeagXaMwO7sETUrQN 4VGBweUvrqhAZUExkoNcCVhUACmhEy+enKe8a+lUKhAHdOdVe2MtfPSowAEPz37t2DqYEObwUgEcH0W2 vg9r5V0JfZpIPfRgS+uYAaugQX95yGa388agW6BHhqUwMdcq97paLAQcFBGpYE+Ht5v79J6kdN+tHPXD Z6TT3v4/m1dmBSCly/7VeB8AClfxlgBiJgqoDfPzjZDfpYMjpwpEoElAC0pOBYGn668p5YtgYAON/fqk KGelmJE0CxOO2M800dgQj+uwdWw/Rba2Bq71LY+HyvHgL4gj9MPsCjS3D9tl/B95/kjaDHNlJquAUV7f 6h9dXPxOYWixLg3j+KEqAHf/D5fhgCmBJ+tM5vq/nTuB/3KqTGChq50Jq/tQRo6QfY+HyvmCdQ2X5xnF g5XyCFArRvQAM+HzoyllbgR6Ofdfu7CwESKJVKMNy3RX3tP4sXkoJeqJU4Afx05T2v0h+/Tr+1Rnl+vE 4NdCgSsCoAExmY8gG0KuChAtZv+5XVu1PwI9ipl7p/aD3cP7QestlstamFdhsaVAD1phL4fciA7+7j9/ TrTF7fd5cffh4Ff2qsoAwVgW8IEGgIeqk8/BObgRDI9PctEkElvn94pjdABCocuLoT9ElD7EqqEJwEHp 7pFUlgfHxcI496mEGQCAEg+GdmZuDzc/vh7oHVzhAAAU8NwT+1dync3rcKbuxaATd2rYDz/a1uEhBsd/ YIbHy+Vw2h/Pzcfu16+PBh2J09Uk44GkgAwW8CPvfweOWmpL+wwQX/yNHzISBc4OdEwGW+aWMPHzCK7w sj+3nMTwEvgd9GBCLwaZMVactW5LlhL/RlNsGdU8EqQFV2y2qA5wh0JcAnDRH7ZnU5sfdBkEQenunV+l fu3bsHk5OT5aE336yum92GiRMAj/+5l+fgl0A//dYaBX60mzuaYWXbNiMJ7M4egcOHD8Pn5/bDT1feg9 JXJ+CnK+9piTp8TJ/Hr8PrtT8ehdHRURh44x3YnT0Cl/NbIwGeG46yVqBnYQA23iAQTN7fRQq2/fy2Md +UBHxjfpPXp49NJMCJwEoCwtZgpeLWvQbDfVvkJiBa9uPxPZPxuhIwEAC8WC4XVt7L8wEPz/Rq+1lmZm bKYQDZbGSrHMzGSpwApt9aE5D7JuCj3di1AqYGOgKgRytsXwg3dzTD9Z5lsLJtGyxbtBk2Pl8upX1+br +KzVGm01idApyTgUQS9HUKehfYqdQXvT8OwOT97ZXHCEr8Ohq7+4QBtr38rnP96PfBfIAJ/EhUHPAc9C 7wU1v6i0/9wM/zJ5Xf4cq2bbCybRvcGmxX4QAlBGOMT9SARgQc9Nq4sfKVqwAkgJ+uvKe1sw8dy5d3JP 69SakA3FcwF0QQOwFQ8BeL06LX57E9eni8Tu1dKgKeXq/3LIPrPctgaqDDKMm//yQP33+SDyTokBBMxM BJAsEvgdoGdMnuHlhd9v5IANTwj7uSPKPn8UkAM5kL4GHCAK4EsAXZRkZc9ocBvzJpUxUfxkI3aJENQt RGMpbSX2CiMEnyETA/ONld9vR82Ki6lo1XBdDonpZLly6VT0mClFIBxeK0OARnNlaiBHD7uwsK4DZvT+ N7CfgU9Pgc9ozzpJvNkAzoPc/gQ2FMJIgwILeZ5v0rtvQXn0Kqf0zruafglyR1VALwIQfb57q+d1Svzx WANf6n8p+WZ2koVVECqQ17IZ1OKzUgZ/xpnF+5n9DnBcJYWnl8PmZMs4k2UQlgS/vk5CSc729VQ0keDZ dHkPEhOE8EAXx+bn9ob4/xfWH7Qrixa4UCPfX4VH7zOBytVmKgBOEb1/tYLpcTwY9yn5/Bh6AISwIuzx 6FAHzBXwsBLBu9Jst/An6lArgCYFuFFQmsew1Wtm1TOwgDswFMcX4lWafi+w+6wAp+RgJUDeDGtkKhUM 0DVFQDqoCwU7DiWLETAP7wxeI0fH5uf2hvT+N7CvybO5q9AOYihrDk8PBMbySg3z2wWrynwOdmA7+P97 WpAB+CqIUAYpH9Du8fkP88F4CJQBMRNL8MfZlNYjNQOUEoxPkkyafmBxiAjxOIMSfAk4M/XXkPJr74Fo aO5dXn/PuHFVYVkDQJxEoA1PtjxrMWb8+9fi3GE3e+5BDF+0vgv3tgNVzOb9W8vgv8pjp6WCLwVQhhCc AE+qjgT40VylUFm/SXFAAlAAQ/kgELB1a2bYN0Og13TskDQqqxfjXO55n+wFkDDPxoUn/ApUuX4NKlS3 BrsF29F1UA5gmKxelZUwGJEUCxOA3n+1vh7oHVcHNHs9HbU9Bz8Eten4IrTjMRgw/Qpav03O7sESX1Md 6nsT73/FHlf5TwwJXYcwE/DvCnxgrlioJL+psUgIMEMBRINb8M6XRaCwlkEtDBrTL9lVBAAj2fPMyTgt 9/kodLly7B+f7W6udXVADOwiwW5SlYSazECSCst7/Y3gTXe5bBjV0rAoCyAS4JUvAFuw38aDPvrixv52 Xg5wk/EzAkL1sr+HmisVbZH5dpA0EN2X+jCnCRAMsLTA10yN2AlQnC3MsjCYijxh0kgLMLLl26BLlcTv tsGCurktlWAYkRwOTkJIxkusTyHQf+xfYmKGxfCBfbm+Dmjma4vW9VAECS+XjdOJSDSdL7/IxomP2nkt 8H+JQAfLxvUpak1xdVAJX+OFPRJv8lAuCbvAQlgCSAIQEnAUnqY3zvAr4igG9Wa0rg+vheGDqW1wmm0l XI+waSJoFYCYAmAIvFabjY3mT09ujp6fXmjmaYeXW5ChvuHlgNM68uh/uH1hsf+xBELcrBF/wuMvj98c 0qy08JwBcU9Qr+uA1/L5gMxB2Qy0avyTMZXeCXCABnRG7Yqw6PwZ16LhLQ4vuJNvNhI8KhI3SS0LU/Ho W710gYUQkDro/vVeXCYlGfhZnEil0BoPxHBcDBj4D/8rlFTvBjDsCXDOjj+4fWq8dRlYMPsF2v479puG 8LZLNZscEnrJmALxGB62tsj02ePmnw80NJl41eK88TeGlQBr1EAtwcOYFU88uqt8REAlrMX5H2CuwG4G tHkBEVcOdUN9y9VkkyIqlMlHsPpGG4SW0cio0AePw/OTmpSXvu7b98bpEiAQT/zKvLNfDbrpJSwGst9m N2gfZ5YY2+D+9v71sF51qb4FxrE2QymWqbb42AMeUFXIqhFvAnZVIylJJAYBOQj/x/abBcVeAkQCdFUy LYsFftKpQSg2J8P9FmBr9w8AiSwMMzvUoBKAKovE6H4RaLyaqAxAigUCjASKYLvu5cIoIfrzd2rVDApy QggVMiCheY6TWKhQE6v9J7JIBzrU2wftuvYiEAExn4eG8X8GcD9C7wUxJQeQGT9OfgfyGv2pcDCkAige aXVTs27Rq0kgA5UMTXaJOQFkJUPhuTgdg0VCw+xgTAPT0F/9edSxSQf8wugBu7VqgrBbtEEDOvLofb+1 Zp1zBE4EMM9HOjgB/fj899tiAFe9YtUSSwYc+vEwOUC/Sur5kN0IcBPx1FplUHLCSwqPe3KuGa2jESDA d4LuAl/RQiKSmojhUTknxO4NPDR7AqMBFUD0gQtHW4WEyuIpAoAZxrDXr9i08tgOs9y+DH7AIFftM9gp 6Cn3YWxkECPgpA8uwc4FIYgvc0BOAkELcSCEMQc21hwM87G5f+4lOj5091vi2OMVPlRdpCvGNEPJIsm8 2aScBT8nNyUCQw0VZVAIYw4fNz+2FychIK164kqgISVwDKnloAXz63CArbF4pANz2HVw58iQDCEEHUcE C6cjLgP8uNXSsCCmA2lEA9mw/wTeBXIcHrHxlj/zBnGPATilENZLNZuTIwEQSu0+uTe0wImj5HhQGzoA ISIYDJyUmdACrgR5BjYxCX/iYFQDcTxUECPkY/RwI4zz+YXsP3cuDvWbcEPluQgnOtTeUJRHUAynoAvw n4JhJQEp+AH6cS+Q4zVROLqRKohAI4XERsFArj9Q1Hj5nyBNg2nHQyMDECmJychHOtZfB/3bkEpvYuhZ lXl6sr3RsgEQFepS3ENkuKBGxAl8iCksaP2QUB74/gny9KgO5vCCP5bduX6VmFGOfbPH8YEqDzGayVAU +v7yIAThqPhjfCtT8e1VTAY0UAqAAQ6Hw3IJIAXrkKwE1E0rgwHxKIyyRvzhOEJqVAH3MFwO1ie1N5SG gdgHWuvL4Eftoy7SSBSuY/yjhzflIxbUfesOfX9qQgA74V9MyM7x0r71WY+OLbRMOARAlgau9SBf7b+1 ape64GuBKYeXW5OCTUhwTiiPVdRGDz/NLX3dzR7AT/udZyojSbzc5JYnCuvL5Pws8H/KgCfMDPSSBwgh FVARUSMOYDXECOSAKPPuiCO6e6y2EAOR8zbhWQGAFcH9+rAZOCX1IBSAI28LtIII66v03+u4AuvdeUA7 j41AKNAKiNZLpq6hSsB/P1+FHAj8CXSCDKQSYSCWjjySuhwO+PbzaGAr5gd5EANbp9OKkwIHYCKBan4f tP8gqUElAxFJDyAi7wSyRAQR8nCZjkvgRwm1KQCMAEfiyZjmS64NkDHz5WRFCrx3eBnwPfBX7J65vif6 4A1JUeTOLoD/AG/ESb19dhHiDJZGDsBPDTlfe0OYCcBExKAB/jFGFfErCBPy4SsOUBfEhh5tXlSuaj55 eAz1unC9sXQi6Xg/868LGyeiWDMB7fp8TnI/tdnl8CPx1h7jrIVAsDKqFALpezhgLewKf3Jqv0AyQZBs S3GahyCnAYyc6Tgxz8NiIwgT9p4NPnTf0Akor48rlFgZifg59vjcYNVIXtC6GwfaFqq6af1ZfZBK+k10 Imk1Gmpg7Xkcd3ef0w0j8K+MPIf36QqTafwFAVgLG0H/j51aYAPuiCqYGORMOAWBXAnVPd3nE7VwIU8B z4/DEFP5qNBJIgBBfoJQVgM75pamrvUm1+Ahq+jiSC5cXNa6rW0vKMsnoAfi2gDwN436SfE/xCHoCGAa YuQSPIw17xfqIN7pzqhvHxcWNTUK0rNgL4/pO8U7qbSIASACcB6TNdcj+OEMBU6gsDemqF7QuN0h/BT6 8S+PlYNdpUtGfdEgX+zWuaILWwpWyVGQRRcwkU7FGkvqmrr5ZkX5ikny/4TSQQWQVMtJmvaB5k8Gh4I4 yPjycWBsRCAPQEoOm31sDUQEcoEuCAt5EA9fpJk4Dk6aNuOUZwmyQ/lfsU+HSMGu2gxBLrxXadAJAEFA G8NCgCl4I6LrBH8fq+ib9aYn5b7d8G/EA1gM0oNLUJi2A3Gf066Z7kAS5duqSa7OqKAKj3D6MCMAGIoO fGP88m+5NKAMZlN3atcMb7PuCn5VLcI1HYvtBIABRgtQK6VvAvP/HnKphe/0gEO4I1DvCHjvt9SaCyLV kqCyoVMNEWjggkIw1BNA9QLFZnBs49AfzrBwVU9PwuJYA1e/wDNgGf3nPP7xP/xxUCRJX9JgLgnp9Lf5 vnx8+iV1QYSACphS2wZ90SyOVymoyebcBz8lGZdXLwpwZKNg3Yp9SXlOdXP+vrH8HQsTxczm8tJ1eJCn i646h8luBEW2z26IMuuJzfWg0DYs4D1EwA6P19Yvfpt8qn/lLwmrw//Rzu+R9HBXB73ypjvC/F+hT8tE PSdL25oxnO97fC0LF8+YDTf/0An5/br4GES+84AO8CPyUBra4unfwjGAI6Kc/vQwS7s0fURN+BN97Rzi gQ9wl80GUG9dWd4UkgwTxAbQTwrx9gaqBDAy0+lpSAJOFtBCCBX3ps8vym1+fKJM/vkvzUy0v3t/etUm caPvrbNc1+NvgnbRIxelIO4FqB75vgC8TSJqMTgS3tvbV4/jDyP/X6RxrAf0GxQZUAACAASURBVH98sw oDMpkMPDzTq4UAVhVwdadGApwsxMdjaUUANAyYcwKg3t8Vv0senEp9yWio4JL9LhKYa4Vwe98q8RAUG/ hNHv/2vlVw51R3+fTif/2gAE/vh47lxVOIpARcLfKey3xbQk9rqvEEv+/23jCePyz4U69/BJfzW7Wpvk gCi3tOw63B9kAewKoCYEgDO7/y+wcnu7VEYJz9ADURwJ1T3V4EYAKxS/674n6X1Qv4qdeWYn5TvM/Bf2 uwHUpfnQgAXiOBf/wOhoZOiycQ+5KA9HytTTzLT/xZjPONoCcHgizq/a0WCkj3ccT8mmV+E8gDPPqgSx 0M8uBkd/mg1xfy0JfZFMgF4MCPAMCv7iwTwNWd6vNsZIBfczm/Fc6e/TT2PEBkArj93QWnfHeB2PbeWs HvIoHZ9v6cACjoJc9P90lIEp+CHu32dxeq8SnuZw9JAqYrB54v6KUwIAB8wylA/Ipz/mqp84cmggoZDL zxThnYlVN8EOjZbBZSL+RVY5B2kKgAaE4AFORGIqhUAmgeYM4JwCb/fT24b9wvgT/u4R+zRQKuTD8Sxf Rba+D7T/Lwz+KFANAlEjh8+HB5uGX/mBpyyUkAwwEEtCTfpStvhrGV8nzq+dK5f+IRYPQcABwJTioHLs 8fBfRU9uP9ot7fwoY9v9aGgND5/qkX8vLBIhKYkQBgSIGbkgA37AW4c6obRkdHY08ERiKAUqlUE/ht8b 8t7kcCoOCvZyKgzUO3962CuwdWO5N99w+th5+uvAf/LF5Q4JdIAMF/+7sLkMlkynPtXxqsgp8qgf6xMg gcuQDp8dJffBoAP7+iZ7YBn96bDv00nv/HxoFTJRBXvG8kgsqxZIt6f6ufFDTRpoB+Ob8VXkmvFfMAAS 9PCECpAPK1JntwsjuRRGAkArj93QUoHe+KJN9dBOADftMIsHoiA945iCTAQa8k/0AHlL46Abe/KwMfrz YS+Pzc/sDBl4oEhBCAl9Q4WCVZn3r9I+/SHSUCUxsvEopGUgz82vl/0lkArH8grnIf9fg0D4AkoLL7eE oQkfuvpNcG9gdwYMNYOkAAGlEYiACPGUcFEGciMDQBlEolq/z3Ab8p/g8LfhsZzKVx0NMzBabfWqN5f/ T4UBiD299dUFcEv0QA1OvTc+9tCsCVB7DF7GHq9ijJMelHgU8VhdPrU9DzE4Eyv4nV81PZT0FPQ59Fvb 8t1/wrR4PjgZ4I9luD7SoMoKcBcxBrBABD1ecNhu/FSoCpIWhWFYAp+z/zqjl2dxGAS/q7wM9HguHPMt te3wZ+SgIY40NhTAQ/JwEkgM/P7VfApwSgKQAhEUjjZqknwFi68y3bsZKd8vKVPAElnkC8jyCnQJc8Pz WDCgjr+aWYXyMBPJk48xu4nN8KD052VwmAJQSnBjoCPQEYw2sE8I/feROAIoJKqKEqAZVE4E9X3qtpTm BoAnj0t2vW2J0CzzcB6JMwtM0V4OCfC+C7PD8/TPT+ofXw8Ewv3P7ugor58cpVAN7ncjkR/KL39wwBXE rAC/jksdYvX7nS75t6/aMA4PmR314HgBICiDvm554fiQB7///9wwqQVIAUAgSMK4BKGOBjvBJQKBTU39 CsEcBPV94zJv0oKLDlVyICTgAu5eAzXEQC/2wQgS/47x9aD9NvrQkcP1463iWGAJQEfrryHqTT6QD4rd 6/RvDjawFAO+r2YkaftPTSzTSi3Pe1SrgRR8yvPD5/bu1BSHW+DYt7TsPintPQl9kUJACmAgIhALtyAi h9dUIPERwKYHx8vDwfoHJ24OX8Vnh4pnf2CODhmV4r+LF+bVMBdAOQy/vT8WKcBCgR8O85G57f1+NLwE e7c6ob7h9aL4YCUBhTkr+l5ZmawC/11PMEnZS8axr4gxP8UgKPx/ZiUo/H9mHMAv4opT5J+qfWHoRUql 8ZHhKiKgGCCpB2B+J9OXwYCpqNMAgBSIlALBFGDQNCE4CUuOPgl5SAqQLgI/1tW4tp6DHbXp/H/JwIqN yXrHS8S5HAg5PdCvSFa1cACmMw3LelDPTFnWbwW4DPvT9efYBPr6qDzxP8xho+v4b1/J1vq65Ak+yvJe anjxf3nA4QQF9mUxnEE20aAfz7700i4DF5R58rfXXCSADS+zmhoALAMACfLxajJQNDEQCP/xFwONmHA5 +CUlIArsSfDfyuuYBJe34EOgX87X2rNNBLnv/WYHvA++P14ZleFQ6MZLrMnv+lwVBxfxjvb7rHpJ7k4W 2ZfGs5LwTw1WcQkGveO6wR2c8z/6gAFvecLn/vCgFkMplqgw9VAKwvwAZiUQFc3Wl9H1UAQ8fyMD4+Dh NffAvX/nhUfQ3mAcKSQCgCoPE/lf68BCcpAQnYtXh/02iwJL0+nQ4kyX6Xx+de//6h9fDgZLemAn668h 6MZLogtbDFHvOHBL9EAhLgTc8b5b3J29cKegp8vK8ogNSOEe05DAl8pb+U7V/cc7oq/TO/qXr+tQfL1v wybHy+10gAtDuQyvcAiAUCwDyATTlIeYDPz+1Xr3//SV7rCfAlgVAEQCf/SOU5qgQ4GXACkJSBpBIQ7P Sev382CMAn3neBn3v8O6e6oXS8S4H/zqlumBrocIPfQ/qbPL8N+CYiSL3+kSzvLTI/Mug5+BHk0mP+Wo g6v3qOSHwu+VNrD6rcx+Ke07A7e6QKbq4AWDLQGNdLCgD6vRQAEgDmAXCH4sMzvXA5vzVwdJgPCYQigD unKn+kJMPv05TD8wC+3p/vKsR7qeSYZKzP43wb6LnsvzXYrrw+gh09PwX+g5PVeynjHzbm9/H8vkZLd8 a4nt/bnvMBvYkEKODpa5XwIEzMv7jntA54Zot7TmvJz93ZI3BrsB1gLA3//ntTuRsQuwIrYYDJcz8a3l ipAPSLJGBTDvQzqQJAAoCrO+HOqW6tNdiXBEIRwK3Bdg3MrqYcqghsgLd5f4kEOFkkQQImjy/JfluWn0 t+yevz6/n+Vu8uP3V4RULg5517opevJZsfBvScAHaM6KFBmJIfXjvfhtTagzIZrD1Y/jpCAAhMJABq2P RjjP/H0oAeX7dgHoACn37OnVPdMDR0GsbHx5X3xx4BbA0OQwLeBPDob9fgzqluBbypgQ5tpr+LDMIQgG 06MI/7kwC/tIknLPAR8NTru8BPVUCYLj8O/rgJoGngD7V5dp/43gf0npLf5PlNnX5a3Z8SQOfbigAW95 yuJgEtBMA9t0YASgEIViEAmxLAx6OjozA6Oqo+E0vzfIOQT1LQmwBuf3dBxd6YqOLlOBsR+IJ/5tXlGu DpPZf+cYK/1oYe7vFNnl+S/PT+4ZleeHCyG07k/iNSzB83+KkKqDm2N3n5MCSwYW/13hXv2zw/zQVI4C feH9WPSwHwDUKBngAPArAlANGGjuVVAhBHjD0a3iieH+iaF+BNAN9/koeHZ3qVpJAm/tpIwDcMoE1CXA Hwz4jb6/vE+r6JPh7vu4D/4GQZ/EgCtwbbreCn0p/3w1MC4ERge2x6r2q4ieL1bRI/rNdnJGCU/Qaw89 19XAGo2j+GBCj/KyEAPRHo3z+sKIOeXdWuPrEE+GIF8Pxavse/BykMoCpg6Fh5JPnDM706AZDTg3goUD MBPPrbNXVvOgOQkwCv1YeV/67NQknG+1FifZrwM8l9k9eXrul0Wiz3aXH/6x85wR/XVSUDo0j7WkBPvT 69l8IAWt/3JAObqUTgC3ldAVQGgyirkAANA7D7r9oF+CIDv04EXn0EY2kY7tuiJQBxP4HpFOFYCABXqV SCa3886jzKGwkgbALQd8BIXJKfSv84vD6P+U2xPoKc3mNS59HwRnh4phf6MpsCCsAG/jhJIPX6R+JjDA WcwI8T9PQxXte9piUDnbv6JM/PHvPXeAiQzWbNBFAxmgjEK5JAFfQyEfjmAH5/fLMaR47hw8MzvdomIa 4CYiWAy/mtgbq8iQSiZP9t24xpEjDOJF8Ur2+K9X3kPpZUqdfn91MDHXb5b/D+tZCB7bPQFAkkKO9F0H Pwb9hbluwb9vp5einxZwI+k/9r0r/UjgY3EgDbF0BlfZAAmFVALuUAeC/ArcH2al9BJQTgw0KKxelkCI CfAGQyV7KPXyX5b1IRcQFf8v42r4+tvCap75L9FOT4GD0+BT8+piGA2p5KwG9SAVHNlwisJBCHvHd5fg r+tQe1OYVWz+8DfOb9MfE53LdF/X8h2L0JYKLNSQCPPuhSZT1TNQFLflpZkRMAmxk4MzMTHwHwg0BNRG CT/jOvBncNmgggrtg/TJY/akefzdsj4E0xv8kymUwwBHj9I2sIMFumcgJRPL0N/CbQS1f8mrCJvxfy5f e/kNfjfer98blKAxTuBnz0QZcCv3TlOwAxW19uGHqxArsy6KvPvSiWAnkSUKwqVN7HZwVQFRALAZRKJT UO3EYCNulvAujU3qXeY8Likvx8So9vnM89P15tdX3u/dHrS9Kf2nDfFqP8T0oF+IJfIwGJCOhzNk8vSX 307hzoeI+vr3utSgidbweGeFDPrzb30Pcg4PH7CglAVAAqBLAQAN0TgAB+cLK7MkPgRZEE1H1FPUihAF UC+nCRftUJyIeGJkIAP115z9qo4yP96cx7evUdMVZrhj9MDz8C3qebzxTjc/BTsGPiz2Tn+1utOYDZAD 8nGvo91XNsg45SKr5e3gV+IvcV8NcerL5OQS15fgp8CfzsOQp+JAB1DmCFAKgp728IAbReAQX+lH6PQ0 KxaiD0FGivky7CqYEOfatw3ARQKpXg3r17zsNAXVl/vlOQPo7T+/t4fZ8kH5b2+N59W4Zf8vgmzy8ZZn W1PADKf2wCYmGAFZwWpeD79dJr/F611vLHNm/PwY6vIagpCSB4ufdHw+e43DeBf8dI9bnml3XZX7nSFm gVe0+0BQiAEgEnAH3zUBX4uhpIiRUEPhBEUwWEAOgmISkPEBsB8IlAlAx8vD+CE4FPy3E+Q0Kjen1KAg h6HvPj8zd2rYCbO5qVfd25BL7uXALXe5ape2r4/PWeZcq+7lwCUwMdcHNHM0wNdGiKwNdQ2mkKYMdIVQ WwGrgNxLVcvcHP7aXB8Nl87u0psE3AlwwJRyIJmgNA8OPPREmAyP/FPaerp/9YCEBSAHyAiGT//nuTFg JwFcD3Bmj7CioKYHR0VMwDxEoAEvh9pvsgeCng6T3PAYTNIZjq+nwfP71Su7mjGb58bhFcfGoBXHxqAX z53CL4bEFKu8fX6RXvv+5coj33decSONfaBC0tz0BqYYtme9YtgRO5/4DL+a2KFKjXf3imF0pfnVD3tB eAVgIoCXAwmoDqA3YfoDvBjxt1bGAXsvki2CXg+xKBzZpfrn7WC3lILe4UFQCSgJLhHgSggZiPEDORAM sf2EqB1dmCZQIY7tuiEQA9PKRYnK6dALCjyAT+mzuanQSAm4foTkGqBnznBPqoAN+vQw+PAKdXn+cR/P j4684lsGfdEg3wLS3PQGpxp35lr49kukQygKs7xWYgUxtsWCCHBraPcfA7SngKzFJyLw6gc8Czq+r2W9 hiBD8SAIyly4CmJMAIgSuAatwfjgBMewMefdBVGS1WbiPGXBHuEhwfH49XAaD3n5mZEcE/NdAB13uWeT X6UO9PVQAlAFcJ0dZLEMau9yyDi08tsIJeeoxenj/3decS2LymqQzsCtBxph/O9aPP4T0lhM1rmuB8f6 sC//ef5I0EUNNIrKQs8xu5fMeTetLVdh8H4E0kgFJ/YYuS+zz+3509AqXj5Lw+BD4ngom2oOemMwMcBO D0/Dz+ZwrAdHpQLARgOhEYz7r3IQDTTkGaA3B9ji8R2EiBA5iDnHt2Ku3pc/Rr0fMrUAug53P++GtUIa AqCOwHwNZXQy5gTs1Uu+dy3iXx4/L2NuDjfefb5d/rwhZIbdgb8P6Le05X24CxAkDBzwhBA+pEmzY4RB okosiB9BDYdgXquwrLQ0X7MptEBVAsxhACuAjgswUpL9Dy3YK0ZwAVQNj24VrBL8l4H08vPaYSX+3nF0 BvmvQbmAKEYYK0H4D0v9cNCewYMcv6JD29r8fn980vw+X81nKzVeY31d83K/9hF6BK6DmMAlZtFLKYIg dHDkAlAWn8D/1qgxDmAHBoaGwKAOW/RAAoo8MSgDTWO6z3t11t4KcApgk8Dmzu+flj+tzF9ibl/ak3d4 HcSgCmAaD1Gga8kA96eA5++lxSHt8Q61PgUwJ4NLyx3HCFBEDmHmDzkNp95wI/G+7pAr/WG1BRALZ5AN X6f1UBPBreCLlcDoaGTscfAtD4//r43sC5gJj59gEuBb802TfK7sEwZHC9Z5kGcAns0mPu7fkV5b9pjL fpOC/ba9owED4TgBzLPdcEoH1/KvWl+D4u7y+B3cPbSyRwOb+1HNsPb4Tz/a1lFdf8sj74pPPtcgkQ43 8HASjAftDlTQBYBpR6/2lY8PBMrwZ+gH4oHe+Cw4cPG0OAWAmAZ/5RNvsSgGnPAFYF4gK/VBWQMvZhwW 66vpJe6/T8CGYR4DbDQRwWBTCbRGA8Ugtr6yYvH1dSz8fL24igYssWVbfVonc9399aTtqSrc5PdxxV8h 9JwEgG1HN/s7oKcJ9QYKItUPuX+/9R/le7ACkBJKoAuPdHwEQlAArmMN7fBX5OBBywPjE9lflSAxB9Pp 1O20/wiWJU+rNeAFcYYByN5fk4AG7Tc/SeNt4kUb7zIQEL4E0hACoAtFfSa7W25kwmU/a8DPgiGRDw8m Eh4pUQBC0hmpQA9/5wdSf8/vjmoAKonB1YLNaoALD+PzMzo/Yh3xpshxu7VsBnC1KxEcCP2QWJ5AB+zC 5QTT6S1HdJe9M97wTcvKbJPcdfur6Qt78uyH8eAnAV4AVm8nxY8Afeh6/R7rrZAH8NwEej5/2hCrg12F 7+/6sQwHDflnJsT0wiAIz/YSxdlf8+JFC58goC7wcol//oVOGyAhjJlEMAWgaMNQSYmZmBYnFaseWtwX YVQ3+2IOVVAvQhgCjmQwK1enqXXe9ZBq+k14YDP0p612NuAgGE8tKmkVkeX2/cb195bXHP6dmr3dcIfD Tc4cd7+EcyXUoFXM5vDQBfIgNtHqAwKyBABuwe32/cBaidK1AdJtqX2QRDx/JaCBALAVD5TxXA1ECHAv 9nC1JeXYCUALDbL2zMHwX8P2YXOD17LeBHAuCz/EXwm0BNx2zz5wzgxw0vgUEXgoc2kYR1XHbIq/o5Zk vm1wh8TPRpJ/4SCX7nVDc83XEUUhv2qoSey6jnNoLfQgiagmC7AHn3H5IAbhkfOpYX9wIUi9PRJwJRAk AFQEt/VAH4xORxEoBvDgA35vhI+ah2c0czzLy6vJwHoEk+H/D7Go6nMigAkyxP+nHgyjfgYDItTELPJf FrBD4lAFQAuGGHqwBsAEJZ70UAH3SFIwCcJmToADRl/3GOYDabVSEAJYCatwObFAAF/2cLUlDYvtCZgc cWYLp9OCoBhMkBmGL7uOx6zzJFAKgCAjE+Bz8Ds+nobRPwqce1KYBEr6Z73GJb2XWnfj4kAd8SXgKA16 wysESd91chANrI8+Bkt1YlcJIAAneiLRYCCGb/mfyHfrg12A4Db7yjegCkeQCxKIDJyUm4nN8K9w+t18 CPIYCp8Ybu98cegDAtv1HIgBNAnGCXrvhvm3l1eXWSr+D5tbPmolgFYE7w42u1PrbM1DPN2DNO3e182z +uTwLwFVu2aLPy/ot7TgdO/P3335uC8pt7ZfT2/Mqy/6aZgbZhoqa9AJL3xz0AvALAS4CxhgCYOJMUAA e8RAQ+E3/iUAA/Zhdoe/njBj293ti1QptBkMlkAt5fgZ/Mm+Pz50yAl95jVAISSA3e2vW69pxEMI6fQw N/WNAnSAKpzrdVo4+a9U+P/J5o8yIB9T6yRx/lPwW6NDaME0FgD4Eo/80VAFMXYOwKgMt/kwKQiODHbH Xuf5QcACUM3wRgWKC7wE4HfuA9fj86d2Dj8726AuDAdhn9OsN7TEpAUgaLe057vy56dIk0hMeB57j0ny VPr2Q+gh2nD5HdfqnOt2FN+pfwaHgjlI4TAmBbejkBaJ6Ze2w2IswGfG2UGCMdnB4VbP4hRFDZBGTqAo xNARSL00oBcPAjAdCTgKUrArfeFICPh5dAT42CH4eQTL+1pkwCXAH4EoDFJC9rG3Ft9PSm91m+xudeMx /QJ0QEdFcfN6oCFNDI1lwTAUgxOpf/NhIwXlnST1MctPOP7QKkCUBTD0CsCkAigOs9y8S9/vRxnATgmw OQCIADPCroOQHwcwY0EsD95nitkQB8AW4DaGhPHtU27E3WyxtifC73bSSAnYDa/vwJcxhgJIWJNuukID 48lBIA7wCUt/7qJDA10KFtAsL4H3cCxkYAxeI0TE5Owufn9osE8HXnEiPw+dmANAmYhAKQSoAu7+4Dcp Pd3NEcyAFQEri9bxVks1l1hJV26GTMROAkhwiv12qLe07PSlxPgY/36rnKYZ+iAuh8W1QAvDHIRxG4wG 8kgYk2Efzln4mCXt8DcL6/tVwBEHoAaPwfmQDwzUgA4+PjRgVAR3zZTgamgz+S7ANAAvCR9mHAbrpKg0 gpIeRyuURVQF1bAsAPeHoHCXACeLrjqEYApeNdgak9cXt/o03ILcCm2j82AJ3I/YdWAjQlAGMLAa798a hIAF8+t8gIfk4AtBIQRgFIX+ubA6jVy7vAz5OAJjIY7tuik8AcKALNdozA+m2/glwuBwNvvAPDfVvUyb PDfVsgl8tBLpeD3dkjNX0PVQJMAPgc6KYrDQW0xCBRAOXDO6KFAZHBX9kCzON/fd+/Dn6M/zOZjFcJsF QqRScAbAKanJyES5cuOQnANPGHWi0hQJgmoFqAbgI7dv7ZFAC/0gnFI5kuWL/tV0YCSFwd7BiBXC4Hw3 1bAseg4fkH9FQjPJugdLwLLue3Qi6Xg/XbfiUTlqG8qfYIxOzpQ5FBBfTU8y/uOQ2ptQc1AtAGdPgSgH BQSBiTyox68i9IBA9OdqsEoG0bcE0EwEOAQqEgEsDFp/RhH/xqIoCpvUsTrwLU4tldV2o2+U+fn35rDU ztXSqSQGJkUPH0CHq0uwdWB8DO7ftP8uqKo8ofnOyG4b4t1X9D5jfOK52yE0UR+Hr6ADmk0oE8gEkBaP v32Ygup/efaDNOCXbJf+79cSCsrAD0+N+nAlCTAuAEIPUBfLYgFeqUYMwD1FIF8FEAkjc3eXqTZzeBnj 92yX+uBDA5qCWmJOBwIvAhB+KJOfDR46Onp0eXUaPPIQmUvjpR3pBSGIPvPymXz4b7tgSUjPZveCFfk7 T3ie8DYBeuFPhPdxwtb/TpfBue7jgqKgA0b++PoJeIQCKEynO0hVg7+8/i/bX437IJKPYQoFAowLnWJp EAbuxa4U0AmAdIYjcgrQRQsEqADuPhXebKAfCDSvAeD/8MQwTW5yrg3/h8L1zObxVPPKYAN11NaqD01Q n46cp7AIUx+GfxAjw80wtTAx2wO3tEzm/UKPsje/zKlScBUQkg+LPZrCoDSoM66Iw/MfM/0SZPB/a5fr NaTvwF+v7ZtdIA5LMHwJYA9CIAmgQsFAowkukKRQAmme9zAIhPMtBFAmEBb7r3IQCT/DcdUYZfM/3WGu jLbFKSWv2x0um0HjIbd7dNDXQEjj7jHl8CvA389LQiKIxpJFD66gSUjneV90FUEm5a+29IWe/9nMHjL1 u0WTMq+TUSWHtQdQJqCoBcrXkA14hw13VCzv6LXX8Vw991HAnASAQw3LfFWArk4MfJQRKQa9kOHDYRGE XSR1UAkuyX1IB0YOnUQAcM922BNelfBoBvA/3u7JFAUo96fBrn+3h+mxpAFcCVABTG4MHJ7vIgDUfyLo rEN4FfeqyBn4BdUgB9mU06AbAhHaa2YJ8JwZpJJCBt/LHF/pUNQDT+HzqWh/HxcTh79lOxBTgWAigWy6 3AhUIBRkdHjZUADn5UAFKsb0oQxpUDwPs4wB1VAVCQS2rAZkgGw31bYHf2CGx8vhd2Z4/A7uwR6MtsUu U623HnEuglw6+lx6FLpEGVwPef5AEKYwCFMbj93QX4Z7FslARcnjysxHeBnX/NskWbA7E/JwOc968RgL BLT/T+YQhAMmPd3xz/PxouzynI5XKB+J+eB5iYArCVAinw8f56jzwuDKVvLSGAbyIwCcMThOnVpAJcnt 9m+PV4ejH18BzwPMHHQY7g5glBHysd7wqQAFcBSAQPTnaXh6OElPlhwe8iAqsCWHsQUmsPVvf7W4Z41O z9uZHkn1b6C7T9Brv/Hg1vNMf/Qgdg7ARQuHZFJACsBNCBH9NvrYHrPctEBYBhQC3e3wX+uEkAwY6fST +btwObSKAWMjB5eknuc7CbgO8iAf45rlAAieByfqtRrvsAnXtyHuvbQM/jfyn2x92Bd06Vf1/SNl4TAc Tp/bUTfwLgD8r/qYGOav2/Iv+jJgBDEUCxWA4BJr741lgJ4PLfpgCiEIBPAlAig7i8PP0sfk8VQBgSiM M4WDkxSEQRxvtTk8IBiQS+/ySveWkfErBl8qNaau1BVfaj5T/MASBhomeWhnfwk3md4L660/o6n/1X9f 4vVgCPV93wFOBcLmedAeAr/yMRQOHaFWMl4HrPMg38SAC2MGA2FIAvCZgAzz39zR3luj99DR+7EoFxen 8OaEkVmMBfOt4VWQlIKgD7A25/V04I3jnVLcbmUYEe2vOjchC8/9MdRyG19mB1GhDr5efbdTW5PiGfB6 Dur+4sG60OcOPjvsbSFdBTY0Rwdacq/2H8bzsHIDYCoGPBkQCGjuWNeQDp7ECbCghLAj7gl4gAgRsF9P y52/tWieB39QIkpQAksLuIQCIGG/iRNCQVQIng4ZleKB3vKicCBcD6lO6ien0FehI2iOCvyH+cCEwJQN quS6f/2MBfnipUBqvpBCFp8i/Ai5X2Y04CxCrxgT4REQAAIABJREFUfyaTiaUByIsAAIR24GtXjInAi0 8tEAnAdnRY1NmAPglAKSFoAvyNXSvUcyaA0+dR8k8NdGhVALo12hYOJJEHiAPsM++uDOQLpDAD73mOoH S8C6YGOsqHbKbSykyeXIrzowKfJwYR6FLyjyYAS8fNvfzasA7LgSDK+1eSdUaFwAeJkFmEZbCnRAJ4NL xR7f+31f+LRf/4PxoBVCoBpjzA1EBHqNODOYDjAL8tFDB5eh/vLsl9fi1sXwgX25vgxq4VsVYDXMAPA3 4fQsAeCt4+je+ZGuiAPeuWwEim7O3P97fC1N6l5WO1FraUz9cjBBAF2KG8PfkekufXwM9agF27+VynAV W9/xAADDlPDqIKgG9B1jYjoTKoeH8s/8UV/3sRgKkUaMoD3NzR7EUAEmjjVgAmApDkPQU6f4ykgGBGQC Nh8MfnWpvgXGsTXO9ZJnr+JJKAYRSBLSdwe98q66apc61N5RN08ShtyRZ3igQQFwnwsCHwfda9Bqm1B8 vbmEnMj9fU2oNaC7BrN594BgACGh9f3Qnwj98pAhBJgGf+v1mtgV+3FxUhoAKR4v9a5H9kAgiTB7jes0 xNDvaJ3WvNAfiQgSmRR4HOrxIRSK/fPbAaLrY3KRI419oEhe0LYwe/y/uHUQLo8W/u0OcnIOgL2xfCud YmO+gR+JQAYlQBUnyvWo4xl1AhhsU95XHfD05268DHwaBc/k+06f35HgQQAHnF+wMMaeQggR+vurcPGt 2ReOdUtzX+p4eAJEYAxWI1EeibB7i5o1mNDXN56CSrAKbKwP1D60Xw42P6+syry9VjBP39Q+u1HgB8nR IAJ4I4Q4GoYYAk9aWhKRfbPTx+CAKIlMlnMp96eR7X0/r+1ECHBnokg1UtA7r8R/Abrs4TgRD4//gdYL ee6dQg6v0pARiJYKINHp7phZFMV7X91xH/+4I/MgFMfPGtdx4AFcDFp8zgNLULRwkDwoQCkqe3efi7B1 Zb5//RK1cB1L58bpH6nDjVgO+Ve3sT+Dev8fD6NvAbCMBGAlbQcyOgltp7z/e3arIfbbhvi3YkuKYAhK sV/ET6wz9+pyoApjMDtZODDUZzAfg+lP9xxv9eBABgrgTYNgbxHADuGOSgRwuzMchXAfgqAhrHc6lv8/ z0PfQxVgFMBEANJXat3t8m/fHfI4Fdur/YHgL4UuyPFQALAWhJuzCg51YJBWicjxOMRjJdAZJIrT0IUw MdqlyJMv3utZRx847k0WXvPyQSQED6812HJiKYaNPkv9T/X0v8700ApkSgaWMQDQNQAdDhoRL4fAnAB/ xhQgHq0SkR0OQdB7evdLepAMkutpftes8yVZb0+T74893et0rlNwrbFxrPRDSBv7B9IexZtyQ86CMoAI kEIhsr7aF3T6f111a1DKjDPrUEIAW+YNJRYOWDRBj4//E7p/eHCXZuoIUI8L1S918t/f+xEYBPGIA5AE wQIjgRbHSa8GxUAUzGY3gb+KnZAOqrAjgJ8HskBpd9+dyigGEfBhJBYftCkQQK2xfWBnoJ/J4EEMaWLS q39/LEX2rtQcjlcnD/0HoF8I3P9wbk/9RARzD+D0EAijSo9KckQA4QDRz0YdpwxGYQoPfn2X/X/v+ZmZ lQ4I9EAMViNRF49uynznLgjV0rAoNDpLMD+PTgpPoAXCQQZ9fe/UPrQ6sADnwfIvjyuUUiAXzduQQutj cp8Ju8vpbhpzJeAr0v8BMAPwI9te61ACk83XFUA//UQIdKFKbWHoRUql95f6UAPDf1qBCANu8I4C99dU I8LFR5f2GjkYkQ6PvS6XQs8/9qJgApD2AMA9qbyoM/BzoC+QEJ/Lf3rQo1JDRuBYA/k82bR43PwxKABH 4EuS8JYCxPwS+RgJbo4wC2xfgm0Cft+RWgdWKYGuhQuyBRNpu8P5f/NiLgh39WJ/YMBUkAW4ClXv+JNn GjkWkGAe4QRPkfZ/tvaAIAMHcEjo+PW8MAJICLTy1QZjtDYLZzACYlEEcyDh+jl41KADYFYPL+FPxcAR i9vkQAHPAu8Mft9Umcr2X0172m+gFoVh/bk/sym9TXrWoZ0Cb/0Pq/T4dfYGIPzfqzBKB0ZiBtNDIdGq oRAJkO/Ep6beztv5EIwJYH6MtsMoYB5/tbAwSAdXVqYUaE+VYBkiIB3+w7vfqGAq4cgEQEJhKQcgCBTj 4G4JVt29ylvdkEPkv08bIe7uhD4ON9Op2GVKpfkQBVByj/eUefRACl40TOm+J+7ADkwCfSP7C/wEACdL /ArcF2lf33OQE4rPePTADFot4QNDo6Ko4Lv9jeBNNvrdHAf/GpBYGThOgZAr55gCQVgIkEwrbc1hIK+M b/PjmA6z3Lgtl9G5jnKMHnQwA8q48lP0oCpeOVkWTrXoNUqj9Q9+dlPRsJaEC2gF/F/4wETB2GxlOEyW dg8i8p+R+JAKQ8AIYBEglMDXQo0FMCuLmjWQ0QQfD7qoDZUAC0JBiGCFwEETX550oCSiHAnnVLNG/f0v KMEfQr27bNvcwPQQBPdxyFqYEODfRIAuf7W8vef91rsPH5Xt3zW2r6oqktu4a4n8T/Ac8f9sDQieqU4D unymPVjOU/Qf4nSgCUBPi+gPHxccjlcsamIAQ/vaIK8DlHYLZyAAh6mxqweXife9/SYBgFQMMGsXvPAW oF/uaX6xP8mP0nnh+7/STvr8aTr3stkPij8t/HYCxd9u428MMQPDzTG/T+YU8KIlOCRzJdkM1mA+2/Uv dflPJfzQRQLE5reQBTMlACP15NZwn4hAFJVAEkIsB+AKkKIHl+nzDh7oHVsGfdEjjX2qSuYWzPuiWwZ9 0Sd6uuw6Mj8OkQjnoGPm/l5abF/80vw0imq9rxFwH8peNd1T3+UtKPEIIo/RH4/CrZhMX7JyT/YyEAWg 0wJQO556cmEYArDHCBP4lQIExY4FIHlAQ2r2kyWmphS7h+fM/YnQJ/2aLN5cfNL9cX+AXpj518EvipLV u0We0GDIC/EgJQMpCIoTqnb0g3Afylr04Eh3wgAZhIgJOB4P3DZP9nhQAAquVAqRowdCwvJwOfWqCy0F KWOnCa0ECHdYxY0grABnxJDbiUgE0VjGS6/Hfb1dCYo3n7xZ3VZho8nKMewZ9Ka808NvDT+H9l2zatKY jH/5wMJEKAibYg+G3yn/YLUPBzEpCIYKJNhRDU+4uz/2LK/uMKTQAmFYA/4CvptSIBSODHZBXmAuhA0R u7VogkMBc5AAQ+JwEfMrDlDNBu7miukoAtC2+S9Y64XcX4qTSsbNume306o7/ewI8KoNLF5/L8uAGI7g fgCoATAYyltdeqY7roeXwWEsD2X9Lw421IADbvn6D8B4iBAHg14PDhw6IKMBHA151L1OYhTgLYMzDbVQ AKbltegF4pEdjAbiKK2/tW6eO0TKD2rctzAFdAzoGveurrEfzNLzvBzxOA5/tbZfBj8w8CnocFtN1XOp TDpACu7qwmAD06C437DIj3l5J/Sch/gAgEAGCvBoyPj8OedUvEXAANA2iX2sWnFqhQgBIAbiTiSoCCNe kcgOT9w5CAb48ADQlCgdwHsIaz+vj76WDO+jB/zy+B3UYEJmKwnswjkIAJ/N5kQNTDK+m1yvvT2n+cvf 981UwAxaLeFGQrCfJdafTxxacWwI1dK9Q2YqoCMFfgSwBxA9+WDzCRAD4OWx24e6A8dCSdrt0ra4M2KP Dx1N51r1UNk231QgCLO6Evsyk0+GshA9OBHLZwgCb+pOYiKwkQ8If1/nVBANLeAOwMlEqCF59aoDrTKA ng0JCLTy2Aqb1LFQlMDXTA9Ftr1HtdKiAOIuB5AJv0NykBSRG4qgP8uZlXl5fVgAfw+WhsDnyNADjoKf ipmY72niXwj2T8gG8DfTzgtxAANv+YeggmHHsNSOOQy/vXOvnHtCIRAIB9b8D4+Dhks1lrLoCSAN7j63 y0OC0jYk5AAm/cKsCnEuACP1UCvglDUQ0YPLsT8Bp4+4Pgx375sJYUGSzuVHF8HJ7fhwSMp/E4SIB2/L lIIKAGiPe/nN+qZf5N3r9QKKjGn7oigGIx2BNgUgE4IRhJAAmgsH2hIgw+WBTbiflQEZPFrQJ45j9MCO AzV8DVL3D3wGo4399qBLoR8BL4K1l1o+cPY2xffi22bNFmaGl5JtDeG4UIage/BwlUvD833+5CuuNv85 omL+9fLE7HlvzDFZkAAOw9AaOjo0YVcPGpBVDYvlAHf2X7qmm68I1dK7S9BHF7e1sOgIJfUgJhVICNDF zVg9v7VkFfZpMb8Kn+SljQXwU/HaZBhmSI9zZD8lCfXZu3R+vLbIL7h9ZHAn8UEihn+18E63l8jpN6tZ 7/MGRAmoZGMl3K+9ti/7iTf7hqIgBXMnB0dNRYEaAKgBpVAZwEsGKAYUSSBCCpAZvkd5GASwWEIYOpgY 5yydDk6fmVS/25kv1C9WLZos2hJH+YMMDk+eXDOMMRgQv8JjKg3v/R8EZoaXlGSX/f2L/uCMA0KAQrAp IKwFDgYnuTRgB0iCjPCUwNdGj5gK87lyQKeFvGP6znr3XEmIkINj7fK3v7VL9+bwI+f85FFBhyRAC7ep 4k+mr1+j7xf3TwyyTw8EyvvPPPhwjIlmSa+HPF/sVi/N4foEYCAKhNBdBQgBomBCUSuLFrhdZIlEQoIH UE+mb++TVsPiAqEZRP42Xg52YDuOvedqUhAW0s4tfK/SvptTA10BEb+H2z/TDRpg7hdJ7GayIBtu2Xmt YRaAE/jvqiib+58P4AMRJAVBWAlQBuEllgbwDOu8MwIukcAI//qYf3UQIS6OM6IozbSKYyDddEAi4i8F ECPgQhtBfHDfxQsn+ijYBePoHXSwlc3anlEXyJgD7/4GS3lviTev6TqvvzVTMBALhLgkNDp8U9ApwEpv YuVVeuAnDCEDYL0a7CJBOCpopA1Nh/Ns4GxNHmfZlNsKplwE4AYb2977Vyv2zRZujLbFLZ/STA7yIBPI ZLO3HXSwUEScAGfF9SeCW9Vo36cvX8J+n9ARIgAE4CyGiHDx82lgWx3bewfSH85Y0ligS4aqBdgZgPwC GXSeYA+L1P3O/TBxA3EUiHf2KI0JfZpCsDA2DjuK5qGYCNz/fC5fxWuHtgtRW0cWb+AyTwQXkOPz9xNz IJCHF8mMdY829peaYuvD9ATAQA4FYBo6OjkE6njaEAJgUR/KgGbJuK8JCLuFVAVK9vywMkoQJcJGC6jm S6dELwIQPbfaofNj7fC32ZTTDct0WBGomIAz3pEKB0vItI/uCJu5wMvKxS9qvFYCwdkP6m036STPzRlQ gBFItyLmDoWN6YEKRKAAlgau/SQFUAZwvQvQSoHpLKAZhyAlGVQFwkEGU6sWRTAx1wvr8V+jKbVA7BZi OZLtidPQI3dzTD5fzWAMhN17CePyxRqOYeTfLbwe+XF+jXdw1G8PxU+vPtvknv+LOt2AgAwE8F2BKCNN af2rsU/vLGEjEfQBUA7i0whQI/ZstbisMSwI/ZBQq4pg7AsCSQVBgQxvvbiMDHTJ7dF/xhgG8jEJP3p+ fsScdtB4/j9lACNXh/GCsfBz410KFJf2PTzyx6f4AECaBYNKsAW0KQgvwvbyyB8/2tgXwAbh+mewkwHJ BCAfwaejqxr/yXZgP4hgS2MCAJ+R8F/C5C4IC/e2B1aBKwgZ+HBtL39vH+MNGmHa3lIgHu+W05ASSZqJ 7/zqluBX7c7Wcq+01OTmrDPh8rAgAwzwrgKsCWEKRARyXA8wHYQORLAmFDBRfgbeGAVO+fjRxAlGsYzx 8F/D45AF+VYfL+d6+lRPCbSIA+L1UHNDPU/H2z/tjwg1t9aexvqvkXi7Pj/QESJgBTRWBo6LQzIciTgx IJoOznLcVSh+CNXSu0M/F8iMAE/HrOAfheEdC+3l8CdNQwgL7f9jO4PgMm2nTwG0jApgJMSgDgRYBvVk f2/PRsP571tyX+ki778RU7AQD4dQcODZ2GzWvcKkDtC2hvgr+8sUTLB2AowJuIEOg8pkfw012IUljgC3 xXLqCecwBhlIAE+LCenr/X9HP7hgF3r6XK4P97UyQSCD4fJIFaM/63Bttl8Fs6/orF5BN/dCVKAKaBIa gCXL0BptZhSgKmTkIkBx8SKGxfaM0P2EIA6TWT508K/GGUgI/nl6S/j3d2EYSNsHxUQOl4F/z1bBnsCH oK/rvXKuBGAvDIB1SBr5MAz/qHVQJ3TpW7/WjWv14Sf3QlQgAAbhWAJJDJZLxDASr96Xts7cS8AkBBz6 9oNnBLSUFXLmC2VEASnh9JI4zcp+/Bfy8aPr5/aL26+qiAmXdXKq/PjRNBmHxAUA28qA7piBrzY8lPiv ttNf9icXa9P8AsEACqgGJRP0kIJdDQsTy0tDwTigBsnYS0mehie5NIAibg8w1JqCBMMb8pYWiaFsRtLs OBsErAFhZIkl4ixps7mrV/uy/4fYCP4UCAADxzAsr7k7jfF/DcaNyvzfgj7b58xn+xOPveHyBBAgCQy4 KTk5MBFXD48GFng5BvspDuKaDzBZAEfswuUGcOmMBPtyXjaHJXOOAKBeh9ksCPqgh8AW+K49Hwd4VHwC Po8SopARNB/fVsGeh49SYCixLQM/9MCbDTeaMoAKz3o/QfeOMd81Zfg/R/4ghACwWuXQmGAsfykM1mQ+ UDbCRg6iSkOQE+kchkNMxwlQtN+wXmAvwuQgibA3AZgp5f7x4ozzXEK6oD08818+5K+OvZlDf4AyQgJQ U9S4NRwE/fg/V+Gvcbe/1Z1h8P+Lx3716SkAysRAkAwG+CMFYFwpQGXYlCSgI0aYgk8GNWnkVgIwGqBl zAx+clNTCXJJCE3dzRDDd3NMONXSucCgDJgCsACnwTAYRRAqJZSMCU9Atjm9c0yXG/I+s/F9IfV+IEAO AeIEpDgc1rmmomAaoEsJ2YJw2xRdgEehpG0FACk5C2SgEnBAn0TwIJINCpIQkg+GdeXa5AjyQw8+pymB roMAKfg99HBSD4nTkBiQQmwif9uGHSj0p/W6//XEt/XLNKALYOQU4CtRIA7R0QOwkr3twVAkj5BKomfJ RAEqVAUww+V8DnBMDDAAp+PAFaAn6tZGANBSQVMFEb+HGwZ9i4f7YbfkxrVggAwN4hyKsCuVwulqQgzg 9AEuA7CxHEfDQZHUzCn5M2JpmShLx6gP0H+PVz7cGjAh//DXjlhl9HPT8m/6jHN3n/WpSAszpAKgMw0a b1+Uex8/2tkFrYEoj7pZLfXDb8mNasEQCAfygwNHQa+jKbYiGBzxZU9w3wTkJKFCjtTSTgmlZEiUCaKY h2c0ezSCKUHCh46sGwakLNRgCUCDAM+8sbS+CvZ1OBqw8J1BISmJSAb7nPZjzjL4G/HuN+uuaEAHxDgU wmE0tlgCcHbTkGqgZcJGA680DafkyVgYkIXD//bCoHlPLYVk33UdhI4MauFRroOfhn3l0ZAP+skUDF+9 +9loIHJ7tjA7803sun5DfvCADAr00YqwIDb7wD6XQ6VhL48rlFMLV3qfNr+ZxCOqqMTiyykcnXnUsCLc ZcHeAmpbD/FlQNcZECBTw1H/Dz3wsHPxoFfxQSCFsVkEiAxvxR5T+W+zDpxyf72sBfLNaH9Mc16wQAYJ 8bwPMBSAJxVAYoEWDs7/panFBESQArC1KZ0fb9pG3KVBkg2KL+u+jR6xywHLgIcPzZ6XHtklEikBQSBb +NBGpVArWUBmGiDe4fWh8AdBgiwB5/LPe5+vzrMe6na04JwGevAJJAS8szsZIAAtP36/gfOv+jlxKMps /6unNJIEzgygC9sc/PKA1PpVe+eYqqIU4cnAToxilblQR/F+f7W43gjyMXEKVJ6O61cp2fAj2K9zeB3z fpN9clP2nNCQEAmEMBEwnkcrlESCAsYZg83vn+VnV+YdjPRLDZTj5GINrUBgc+vdqATw1JACsePt2SnA RwklNUEgjTG+BDBnGD35XxRwLA1vdisb7ifrrmjAAA/PIBNCmYlBIITQTtTarHQJK9tch4DmZMNuJnUv Di+Ym+n4VfjyRAz1lEw0NaOQmYdlyi8RyJKxRw5QTiUgJ0ZiAHvy8ROMHPNvnUe9xP15wTgCsfQJOChw 8fhlwuF1u3YBwgxaQiVQIIhjBZ/tn4WTmpSCRAwwAfEpB6JVxKAIEv5QHwcRTw03ta45fA70sCtYC/Xp p9bGtOCQBAzgdIY8SQBOolHJAARtuP41QDcZOASwV83blETVv2DQds1ZKoKsAVCpiIgEp+17VW8Pts8q lX8APUAQEAWPoDJBI4lldKIM4SYZxGjz5XexHa6+Pn9FUCUXMClAgkZeRbEfBRApQI8F4aGsrBnhT4H4 ekH191QQAA/k1ClAQwJ1CPJKAAVznE1LSfYLbBbyMBCfimMMClBOjVtzRIScC3NEhJwDY5OEwOAJt8JP C7av31nvTjq24IAMC8X0CsDFQahbBPIK624aRtrvMCroSglBMwJQZ9wwEEt6tM+NezKZjauzS0ErCdFx A2BzA10AGphS1Gz+9T66fgr/dVdwRgSgqayoM0HHhcSKAejBIAElOYMABzBL6lQd9cgFQmtCkB1+hw3z DgwclubWNPHOCvZ8+Pq64IACAcCfCcQCaTqZsKweNgvklBSgI0MRgmFDCVTH17A7gSsE0OjqIERjJdTv DzbD8F/+OQ8ZdW3REAgL0ywM8XQBLA6kAmk6m7CkE9my8J0DCg1sqAjxKQqgNICD4jyn3A/+BkN5SOd8 Er6bXaxp4wnr8eN/iEWXVJAADu8qAtMZjNZus+OVgvZiMAbECiRIAKIIoSoIQQRQncPeB3ipBNBVASuD XYDpvXNFnBb8v2Pw6NPq5VtwQA4K8EpGYhTA42QoJwRPDZAns+AGN/mgNw5QNqyQnMvLtSTVFyDTV1kQ AFP47upsk+n2z/kwR+gDonAIDaSaAREviBn5KAKx+ACgCBj/e+4EcV4NovgOCnh4iYSCBMMhAlvwn888 Hz46p7AgCITgJIBNg52KgSuInAVwlIRODbJOTaPsxPEkKrVQFMDXSIkn++gh/gMSEAgGgkgFuJ8T83nU 431EAIEvCpDPBj2m1KwJQQPN/fClN7l8LtfavUKDQEP04PrpUEcHAnen0KfvwbwTySLdtfLD6+CT9pPT YEAOBHAqZeAUoEqAYaRBAEvy8JmBqEfJUAVQP0HAFphPjdA6th+q01kQjg/qH1Ackvgd+0pZeDv1h8Mj w/rseKAADCkwDPC3A10KgUyETAycAWBlAlwKsDNhK4sWuFGkVGpwff3NGsThBC4PuoAJ4HoIk+OsTDVO az7eorFp8sz4/rsSMAXJQEpA1EppCAE0FLyzOweU1TgwgsJEBnD/iQgK0/wHaWAJIAP0x05tXlWiLQpQ RorC95fSnen4/gB3iMCYB3DLp6BaT2YZR/WCmI40CSJ8nCbB92kYDPGQLo+W/sWqFyAPgcgh/JwAR+7O ijwJc29FiTffME/ACPMQEAVEmgVCqJJOAKCUxhQSM/EI4EMBeA1QA+lNR1hgAlAX6uIBICJgZNpwmj3P fx+ij55zv4AR5zAgDQlUDYvICkBrLZbIMIGAF8tiAYBkhJQT5INAwJ0LME6aGi6PG5EsDr+f5W2LymKe D1pcYem+THGX7SMI8nFfwATwAB4OIkQPMCk5OT5pCAqAFaKWgQQZAEuBLgwLedIxCGBGg+AMHPS4M3dq 0Q4/y4vP7jMMwjjvXEEACATALFoq4GJr741qoGOAlQIpjPbcV0mjCfG2g6RyAMAbgSgQj+kUyXN/DR61 tLfA7J/ySDH+AJIwAAj5DAkCDkuQFKBJgoxGRhamELnGt98smAVwIQ/PjYRABhVQCCn54szI8X9wE+r+ vToZ2m+v58ivel9cQRAC4fNSDlBujOQik/kM1mFRFQVfAkkIGpFZgSAEp/rgRcKgCBbwsBsC8AE4FTAx 2wZ90SMbnHgU/J2hXr2yT/fAI/wBNMAAAeJOBKEloUARIBhgePc66AN/5wwEtXVxjAVQAefOKTC0Bvj4 k9F/C1br4K8Gmsb/P6xeL0vJL8fD3RBAAghwQ+akDKD/CyIVcF6XQaUgtbILWwRZFBvRMCB75ECibw08 c+KsAE/us9y2Ak0wV71i2B1MIWzdtLmX1bnG8EPvP6xeL8i/el9cQTAC5KAqbcgJMIHIoAiYAqg9TCFt VpWK9kwEmAA990LzUChckF7Fm3RHl62rJr8vaSx3fJfZfXn2+Sn695QwAAnmoggiKQKgf4x8uVAQ0V6o kQpJHhEhlIyUCfisDF9iZN2ts8vc3bS1KfAr/h9cOteUUAuEyVgmIxvCKIQgaoDGi4gAphrkhBCgV8FQ CfD3Cutax4UNJLgJfM5u15I48P8E0Z/vnu9emalwQAECSBqEQgqQL6R8vJwBYqcFKYLWKQwM89P+0DQL BToFPP7gt4WybfJPOjAL/h9c1r3hIALhsR4LhniQjoZGKXKuBk4CIEEylwckCCQLvYXiULvHcBPzAItL 1J+0z8PhLAJbCHAbwk7ynoeXwfBvjFYsPr+6x5TwC4bPmBYtGsCKyqwEMZIBmYQgaRGBZ3WgkiCcNSpy /QTWCXQM8n8uDvjYIer1pyLwTwG+CXV4MA2ApDBBNffBsIDy5duqT90ZrIIAwhcKXAyYETBO1N4IbkYT L8HB+Am4DuA3atfFc514F6epO3dwG/IffDrQYBGJYPEfiqAhsZ2JKIYYjBRBKcLEyPbVeTcZCbwC7Keh bTc08vgr7h8WNfDQJwLFOOwJgnqOw1oINKeZehlECUFALvNzApBhNJULKQiIM/Z3q/9H0kj849OyU47d 9JEnk2Ty95+wbw410NAvBcLiIoFmVVwJWBTR1IKkFSCkgMNtVge87nNZMSwe/LgR7w7B4enpKjCfQumd 8Afm2rQQAhl0QEPmTRpst5AAABr0lEQVSAMwmkUEFKJHJiUKRAwCURg80k0ErPSR4cvbhWkiNxuxS/+4 D90qVLKpfCQd8AfvKrQQA1LJsqsCoDMpvARyFwUpDIIUASLLSgisL4GvPc1INzgJtA7uPdTV7eB/QN4M e7GgQQw6KzCX3JIEAIQv5AIoYwBGEiDBeQTZ/hC/IA0FkCz+Tli8UG6Gd7NQgg5uVDBmEIwaYUTMaByc EqEYn0mvSZJpBLmXqXhy8Wp7XfiQn0DeAntxoEkOAykYGNEIpFD1IwkAMliTCEIYGa3qsY3QJwCegc7M WiGfD4O2qAfnZXgwBmaXEycCkETgrF4nQAXJOTk05Axm3Sz8B/zmJxOvBv4QTY8PL1sRoEMEfLhxBMSk EiBzQEpATUsEY/jxv9WXzB3gB8/a0GAdTRouCQwgYfgrARhs/VZfR7+wK9Afj6XQ0CqPMlAUlSDGGMA9 gH0BLAG0B//FeDAB7jJYHPRBQcsC4Q26yxnpzVIIDGaqx5vBoE0FiNNY9XgwAaq7Hm8WoQQGM11jxeDQ JorMaax6tBAI3VWPN4NQigsRprHq8GATRWY83j9f8BXw26zxg/U0gAAAAASUVORK5CYII=" width="2 56" height="256"><br>
354 <div id="cpu">CPU 1x Gaussian blur</div>
355 <div id="cpustat"></div>
356 <canvas id="2d" width="256" height="256"></canvas>
357 <div id="gpu">GPU 1000x Gaussian blur</div>
358 <div id="gpustat"></div>
359 <canvas id="gl" width="256" height="256"></canvas><br>
360 </body></html>
OLDNEW
« no previous file with comments | « conformance/more/index.html ('k') | conformance/more/performance/bandwidth.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698