接上节Http学习之使用HttpURLConnection发送post和get请求
本节深入学习post请求。
上
节说道,post请求的OutputStream实际上不是网络流,而是写入内存,在getInputStream中才真正把写道流里面的内容作为正文与
根据之前的配置生成的http request头合并成真正的http request,并在此时才真正向服务器发送。
HttpURLConnection.setChunkedStreamingMode
函数可以改变这个模式,设置了ChunkedStreamingMode后,不再等待OutputStream关闭后生成完整的http
request一次过发送,而是先发送http
request头,正文内容则是网路流的方式实时传送到服务器。实际上是不告诉服务器http正文的长度,这种模式适用于向服务器传送较大的或者是不容易
获取长度的数据,如文件。下面以一段代码讲解一下,请与Http学习之使用HttpURLConnection发送post和get请求中的readContentFromPost()函数作对比:
public static void readContentFromChunkedPost() throws IOException {
URL postUrl = new URL(POST_URL);
HttpURLConnection connection = (HttpURLConnection) postUrl
.openConnection();
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setRequestMethod("POST");
connection.setUseCaches(false);
connection.setInstanceFollowRedirects(true);
connection.setRequestProperty("Content-Type",
"application/x-www-form-urlencoded");
/*
* 与readContentFromPost()最大的不同,设置了块大小为5字节
*/
connection.setChunkedStreamingMode(5);
connection.connect();
/*
* 注意,下面的getOutputStream函数工作方式于在readContentFromPost()里面的不同
* 在readContentFromPost()里面该函数仍在准备http request,没有向服务器发送任何数据
* 而在这里由于设置了ChunkedStreamingMode,getOutputStream函数会根据connect之前的配置
* 生成http request头,先发送到服务器。
*/
DataOutputStream out = new DataOutputStream(connection
.getOutputStream());
String content = "firstname=" + URLEncoder.encode("一个大肥人 " +
" " +
"asdfasfdasfasdfaasdfasdfasdfdasfs", "utf-8");
out.writeBytes(content); out.flush();
out.close(); // 到此时服务器已经收到了完整的http request了,而在readContentFromPost()函数里,要等到下一句服务器才能收到http请求。
BufferedReader reader = new BufferedReader(new InputStreamReader(
connection.getInputStream())); out.flush();
out.close(); // flush and close
String line;
System.out.println("=============================");
System.out.println("Contents of post request");
System.out.println("=============================");
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
System.out.println("=============================");
System.out.println("Contents of post request ends");
System.out.println("=============================");
reader.close();
connection.disconnect();
}
输出
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAisAAAHSCAIAAACiuRwzAAAgAElEQVR4nO3dy7mzNhSF4VMXBVEP0/SRhz4ydjFkYAO6rC3EdYP9vZPk5xgQIFhIGPnvn3//GwAAuNwfCQQAcEECAQB8kEAAAB9BAr265i/S9kxk4nETASBGGwgA4IM2EBNpAwHwQRsIAOCDBAIA+CCBAAA+SCAAgA8SCADggwQCAPgggQAAPkggAICPX0ig+fXIpnt5FwYA8JEmUN9Or7FvuFy/umbP2+87Zzf07SXJc07hj/eUcgL4fmECvbpm5/Apd0ygq664T7myP6WcAL5fMi6cujQFY3yNf+7bv7YbJ78bGNlIYGO747jZF1oy2YrWDE4mimQUXhTJLPzimqalLq1onNy30Sy1s28oJwCcbU6gV9eIK1I4df7/vg0vifNFLw+x4Io5d4fVzx7NX6LLaSxUCIo0zW4s0yhSbduib+cr/7gocy99ps7LlgkkZ99bTgA420ICJZcrccWMPpFd3dK77unaWjf7tIClS6ZRTmOhgpjDWqZRpBUJpGbN9lL4+KqcQHon7y0nAJwt6IWLmiMfexNIfwtgRQIFZSvl0JUJZBRpRwLJvVSfQOWvWmwtJwCcbembCGYvnIyQ/GKoYm3F7ElJyhG0sxcueEo1ty30MuWiK79zpzrHrPAPH99MCSQnFjdxUzkB4GzJt7GDL2OHDyvSB9dmhIh3b8I+ovwJxcLs4lm8SZRTrGFx5mh2sUy7SHXvHenHM2IvzdPafp5pmth0XbwbdSfc5nICwNl+4Y3UGrXfePBBzxmAb0QCvZFAAHA1EuiNBAKAq5FAAAAfJBAAwAcJBADwQQIBAHyQQAAAHyQQAMAHCQQA8JH8PlCk7ZnIxOMmAkCMNhAAwAdtICbSBgLggzYQAMAHCQQA8EECAQB8kEAAAB8kEADABwkEAPBBAgEAfJBAAAAfJBAAwAcJBADwQQIBAHyQQAAAHyQQAMAHCQQA8EECAQB8kEAAAB8kEADABwkEAPBBAgEAfJBAAAAfJBAAwAcJBADwQQIBAHyQQAAAHyQQAMAHCQQA8EECAQB8kEAAAB8kEADABwkEAPBBAgEAfJBAAAAfJBAAwAcJBADwQQIBAHyQQAAAHyQQAMAHCQQA8EECAQB8kEAAAB8kEADABwkEAPBBAgEAfJBAAAAfJBAAwAcJBADwQQIBAHyQQAAAHyQQAMAHCQQA8EECAQB8kEAAAB8kEADAR10Cvbrmr+le5xcHx3l1zd9f2w99+1d98F5d89f2NRMPKNwlK8JRxvp05Cfr9O3fm17mcXVpyymDfTYl0FQjklrx6hoxNfx4073CT01T+yTixhXqNUVTC/Wsb4OFfqqkWvsrqnLB+fPqmrqKqMqp1m7tO7WieCuDzUz2Z7FQny2uPJ3k9k4T+zbe1+O/rfIUyllekdxJ9oGrqAnDlZUhWMfihXguQVr9F+fVhT+PyBXjMn90ApXWtViX5OWib//iYzyfsytPGeykEyg72vHFJziZg8r2OXrj1PcnCpUxXmZ40Of/Dz4TfCC9FFp0Boi1v7qmaZqxxG3bTv9fn0BZOc0EGj8Z7zBjRcm2rjm5PwWovxuMSpxPTP+cHYbgEJXLubAio4KptZY+WVjnqZVhWl3bLuz55JSZzqOme606al4Nxysbrda6luqS3EF9+zcd4ySBslNm7Z0HVhEJpJqg5mk/XXbyc3rp6pdWjPAiHVyKwpown6PHJ1DXd233Gl5d1091bksCTSuqSaDg6lmVQKee8nK3xtm6nEBTe6EcBsUVyQqmZy59Mlv+RZVhqE2RND63HWnVNO2m9lFwc582FaMPxvsmbVTl/WBZCyxtvmbndtXaVTmLO2SxLpkJ1PVd0/b2kuOP0yY6SZJA1q4unPaffyW3Iu+junRJSI573/69a2V4KQpbDKqTplAzkn6sv9JFp+2HV9d2XftuhG9PoKmcy71w0Z9rEujM3oHFzozpH3PvW3CjEG1QsZzLK5IVLPjXQlXUq72uMkzFWLi0RXWi6bqo8LsSSN7BZQvu2z/Rf2Hf3uVFsgoZTze7N8Ta7WVbT3uW6pK8XEx3CG1fuatP6VlElEClfXxNAkXVcv53dr0+vA30+cf4kU0JlJVzsQ0Ud1pdlEBBSdPTdKEzYyxL37ZtdGmOFz7uSKuclSs6I4GuqQzzwqoSaLr89sclkG4rpOGbVMWg0FkDxChSVQIZ+1qvXZXTXldNXbLbQK/PTVT1rqYpdALRBlo+Gupk1r1w8u5m/shS+9k+m05JoOyPm3rhymtP+uvWJVBxf+5SczDe/351bffq27ZXZZ7P7Lqnf/aK6g5c8ZO6aIvL3FcZst6pQjO9N56HL25LupTFBAo2XnZm52t7J0HWlXZyAslymuuqqkvFBBr6Nul1sdAGOkndc6C8Kz7qfxlPUNHWLhy4b0+gdIcs3HhWJdBJJ0JVZ8Z7f7Zt+46Ytvt0oycfmJ/uinKuWFFWwea/6QRauHu6rjKEG5YtKm3ih6Vf7HSSKhIoqIpx55edQGKizgC1Typ74bK163Iaa6+sS+UEGl5d0zQ8B/JT9124PIHk/d08XU/Npm9PIKOpnn2u6qKjrhTTGVG7JqPbIt1wvTfUiuKtnJdv7c/t6jozPqUM7iyycprd7/NlpWpFpU3MG4V1O+O6yjBRp5H5iF7WkJoVVfXCTQttum78u0ygaCvDP+sipeU3PimuDDr/VDn1MmvrkrxchJ9b6vdZf+eBFRgT4edV3f8+akX4etSlb0ECAQB8kEAAAB8kEADABwkEAPBBAgEAfCwmUO27N4X5q7+9CgD4IZsTaNU3H/maJAAgtfhG6ikJxEteAIDFUXn69u89eqL93vNf073eodK149vMcbebHs+DgS4A4Jct/jpDPI6UPXjJOBDYZwlxK0c3mBjsDwB+2eKvM1jDF1rDFvbt3CSqGGqephAA/KrFX2c4MYFoAwHAL6t7DvT+3zhHkmFo1yYQjR8A+HFrvgsnfkMr+iaCSiA9sjrfhQMAMCYCAMAHCQQA8EECAQB8kEAAAB8kEADABwkEAPBxYALt/R2HGUNpA8APIIEAAD72JlDF7zjsWijvrgLAt9qVQIu/4zAM0agIU0BNP5wajUIXjZ8QDf/D+D0A8H02J1Dl7ziEDaNkJLlhGMLmTvDbD1kvHGOYAsD32ZRA9b/jkA4LNyZQ2Ah6fzKMJ/kciKYQAHyXXW2g5d9xUM2eaKr8JG0gAPgBRz8Hev+v7FubvLpmnG3OsXniu93EcyAA+HLnfBcubMSEHXFZJ1zTdW349OfTK9eHE0kfAPhKjIkAAPBBAgEAfJBAAAAfJBAAwAcJBADwQQIBAHy4JNBxY5hesaL56+SF74WP78yGLy9dtplJObKVxl+ZT8fd200t02Pbz3DyMO1nHI5ZPMJvVj8BfyRQxTJqTtnPq7fB27bm2pdSYgf5+lQ28YzLarLM/Xu+upBymFt521D/yaAQ51+vK7fUrDZWgEWFF/UT8HddAp3yOw4LDlhR7YXwE1Thx69PIJmW+cRvSiA59K0c5bb+k+HCL7hcb06gd/Gs2ePCi/rJ697wd1EC1fyOw+JPNpR/8cFYrV5R201LEGM3vCelo6quvqSKtWfLHK8K2cSkmNGVIh+TL1hhxUQ97l6+kcERSTvxsgKoBKr7qY78EBs7RG57PMTTtOfCcQezcZ+WPmnsuuqqmFewpOkRh8Py4SjtECvA6u4B6JWDrwsSqPg7DrJXYKG5tPSLD3JFwc2uelZjLjM9v1fkkl57dRvI3ks6gep64PJ1hQtPhuwrXMLUfokTKNt2e0VqPfaFNSvXJ+nUuLjvcZ/Su5yKT+a7rr4qGhUsugUq7jpZFa22jlWdaoOFYX/h6OQEWvwdB/mUPLhIiH5u6xcfBD1UndEq0Mvc0WNlDJS3IoHKs2Rrq+mBWyqNumLGC9Tha19Gx79YnzAeZazomwpT5DXOOQXfuCX1n9S7rr4qWm3RuYWXNXlkizCuimsSaG33IU0hOLmoDWT3bqifZzDaA/M9de3JUp1A9jL3tYGuS6DaHril0hQTqHCMtifQ/O9ob9YlUPSpMUr6Nrhyy9UXPymLJ8tpx7SY99MsyVsn8ZaaVXFFAq16CkcbCI78ngPNfxC99LqTSXVpLa22LoHsZZ7QBqpsrqi9NP8zu42u7IHLS6M7x9R1qXSMlhPI6oWzlqEvxcmK9TKDWRf6ANUnS7suKaeuNnbwN12fL1l0YMoaZ2STalNVt2do/MCX13fhRH/XNDX4yYaoxaF7KkrnT30Cmcs8I4GCdSVrCifqvTQM4vJf3QOXtuCyA5I+4rY+aB2jv7lDS227WJFxiK29JKOvVEPklwYWPrm468pVsdx+kvUgWqxVvUs1ZJ69vo9gTVQBp2BMhNuq7kqp7NVDpUfvukcXHr+HBLqtVZ35APA8JNBtkUAAvhwJBADwQQIBAHyQQAAAHyQQAMAHCQQA8EECAQB8kEAAAB8kEADABwkEAPBBAgEAfJBAAAAfJBAAwAcJBADwQQIBAHyQQAAAHyQQAMAHCQQA8EECAQB83CyBXl3zt/zb1H379/ZVv2Itt71uh8SfP3SvrC3AUfOe5IZFWqvmEP/yeYRH8Uog4zQSZ451wm291vbt31/TvazV1S1gNC7os6j4hA4/WLOWvv2yBJJbtGbFO7akvoI9zKtr5lrneB4BR7gugeKaXl/vd5058ek6Tmk+E19d27bpB+r17ZhAr675yxfTt1MB9QfM5W13r+vJni06J4EeRW1DskvdziPgEBclUNbwCH3+kPcJWJ+c/hidOcGnw+nhqofPudR3bfcaXl3Xv0+tOCCq4mJYlUCbLoiqk6Rv/9pu3FDdAotiT7TKxj8nOyYhlxhNHuc1ilQvW+ZiDQmLFK3+r+3XVDCz8FHztbBRenZZTr1Mo9IO1uFJ7mrqNvOM8wg4xAUJJKtu/R1Z5SfDy3166x32Sby6pu2HV9d2Xdv2081dMEt1WISr+Zy20WqDIm0/ffPNHDdl7uIKOrvmjxs7ZPxsdfMkKkC4UFGk2uxO5199bx78Mdy1yfW5rtrI/RkssbRBS9seHY58mValtaqLbNL7nEfAIU5OILPOHn3mpLd52fk7ntSfM2ycezqnp7OtvsMhvzrFOaQfGK1kXyCmv6RJ2PZDaYd8/lJ7JYkKoObd29QzymN0QWWti5UBVrE/1yWQ2nZRTrVMeYwKl3lRGLfzCDjERW2gquuLnl73yeKVIjyp0wvW9O9P8hgXNMVY53QvvWJRtq0JZO+Q95OwbQk0l0JHwI6nL9Ey5aJ0O/WEBAoTpHy1ldtuljNdpnmM5Ckjt9TtPAIO4fAcaJpi9DOIDvGKT5pfu0pWbSbQMPRt03WLqfHquvmSIj4798ZclUDzGt93sFnXXOizN7M+I33RywuQT046G3dscvliGBQ5LKy1l6urjdqftXf5attlOfUyS/srPWWMUnmdR8AhvL4LF7b3dZeE6hkofjKcHNyDxmdNdmYm/d41V9DxbtZ6cB1ck/YkkNxMfc8+fbTtjUfVUybGXwhJnmMtJZD8esLOzkbjKw9DftznNYV3CuZerqo2i22gco3Q226VUyxTVdpoC4K9rHeuz3kEHONmb6T6qn46/0sWO9YOaerdSdwMKFaK6m1fsUxlR+8mcGck0GRnF9KXWt4r351A5e3flkDUNOCDBBqGsYeE9s8s6IpZulZ+XQLF3VPFWlG/7fXLBH4ICQQA8EECAQB8kEAAAB8k0FqPeuyx4x3CcdYbvQdywyLtdL8tWlG971d4PM9vJtCeL7dap6hcpve3aPe8xf75xpYc78zJdUXaeeCqZ7/dTl5zg3W7wuN5np1AW68TP5NAewSjJ9xlE64r0oUJdK+dvDKBssLz7ipWeXACJS/4N13Xjq+hyxe831PSF8GLI/8bq237eFgEuUxjRf2K3zKQX4kWYwgsvNgfjVwWD1C08mKhCx9NVUMARK9ixnvEOnDVh6NU1nQBYn+KLbJqyN7Z9+3kNd+PF9tu7c/sk6J6b1k7KYQ6D00gMWhW2CX9mn9zIXwNMB+/U1m4Hw2G7oneLKxsAwWzL/ReyMIHq5Qjs6mxj+JRv6LgGMcxixRfwBSFDw+GuIWOypkOymkcuOIurCDe+Qz3djR2X+XRNA9H1ezbdrIaa26x02vhfdfkHiX9pNwi6zwqruQmjTrc2wMTSNXu8bSa+wVUM6SYQNHteTmB5OW+PoHULMHaP6WUhdcxWp9A8wK2XthF4XXHjdifRgLlB07PvqqcC0E2lrn6aOq6tKoy1Bc+XaZReFVtrIQoH47i2u3zaGk7aAphyQMTaBjyMUT1haw4mmMWDGJEfWPVJySQXI+8PuxLoCCcRedSxe15ZQLp/alzViRQ/eGwynl0Aum6tDnA6nbyYgLVbbuxP6sTaH13LW0gVHpoAg1D9hzIuJDp8yA9p5I+pS0JtBwZ6ewL3SXqz3M535e05FISTlRF/Expun7b82JdeKPnreoXCuzGa+XhkKxmsuyFqzya8mitqwx1rFZIZS/cwrYnHamqKyDfooWamm8AjR9UenACDckZKjtzwnvP7MFROHW6PV/6jSC7wZEtU00Me0OWTlNV+Gla+EMM08Sg8Oldd3R13HiDqgsvb8nl/oy6gqK7+/TAVR8OS7j5YWomhV9zNMXhWFkZqhjLFIVfse3G/sw/aazdOo/Uukkf1Ht2Aj1QsQdllT3PGjbaV/j4TnpHKwHAlyCBLkYCiX8A+E0k0MV+OIHijkEaQABIIACADxIIAOCDBAIA+CCB1jruQc4FdrwZmIyXc0RpHrXrMtMXmtP3rQ7eS87ut0Urqs39Co8Fv5lABw2asrxMh28LZOvfWoD+8LH33RNo/+FQYyUcvJeqV33S7NdtUaU11eZ2hceCZyfQ1pPyZxJoj/kl0aM24UsT6KKfV7gwgS7aokorEygrPC/J3tmDEygZlYdfZxj/mr4GH70BH6xy2zuhwY4SIx2Euy77pNh15mZWr13NLnZy4bjnPy1hF2nXdfnwwu+dfUXB+cEInOKhCZTWqKT/98WvM+gChDthnGvFoJlL75Em+SfGHNs18r9YpjnaW+0xCmvSpyilQdi2J9AJhTdrSNXsK467WuaKoeqcq02wufdo1CHwwASyhl5sezXApbz1U9eRaMyy8kVYXu7rE0jNEqxdjGg3TdYxWp9A8wI2XUqNU13sOvlJVU7rGOU7RC0zD9i2L+wQnUBGXZIf2JxAJxRe77pV9bO+8Okyzb1Ud+CST/KDET/rgQk0DNFt0TAMVgKZ90YyGCp/DuCcBJLrKQ+1vSmBgnBWA24u3ws7jvxPAsWr1rtuc4CVj3t1AtVt+4XVZphnpQ10Pw9NoGHIngOJBLJb/2kFDroR0nATs+rL/WJkpLMv9E2oP8/lfF8/kvM2nKiK+Jmy+dcZrObnNSP/L6w97siqPUbi0nlKL9wZhZe7bl39rGO1Qip74XyrzfhpGj+39OAEGpLTQSRQfKOXPTgKp05dAvw6Q3WZ0n6Xs0f+l2sP9mj2iGtYPkb65l0s096ftY4vvNp1K+tnFWOZovArtv2yavPiu3A39uwEeqBid8Uqezr2AeAGSKCLkUAA8EECXYwEAoAPEggA4IMEAgD4IIEAAD5IoLWOe5BzgR2v4Y2zHv0qxdFvBp5VTj/1W/R9245f85sJdNAIJcvL9P62wJ7LfX/OQPeHv5t+UjmFnUezena5RfJtnuu2HTjFsxNo6yXhZxJoj/nt3ntvwnXlvDCB0i0KhgBIJmfbzguYeJAHJ1AyKg+/zjD+NX3nPHrdPL6BXn2pyosUjbAwHRO9mXmR0j2i3niX277tIhsc5cKKROGtarN39vpyxyssJxm9cniKhyZQeoolHeIvfp1BFyDcCeNc2dXR3nhjf46FSiYZm5kWMTyWYnTOYKk7H8GJocTMkdnu9fsI05zvfdVV3Doc3tkJnOGBCWSNc5iPC5ee4fw6QzyI6doLlLk/x7/MCzQ20yhSWhBjRdlaVhFNvjyf0/wrH2JdzlU1pMp7zinOahuvNIVwew9MoGHIB9fUCWSeqTIY+HWGpfi1r3yvrmma5rAEKl9i+3ZTDp2QQLqcmwOsuOfzgeCLaAPhER6aQMOQPQcSCWQP4Z5eOoLemKWRo83L/WJkpLObpbP/PJczfBwQNWzO/HUGo8TB8/C0O03MVJFAS7tmewuutheu8hDLcq6rIXVEn2f50zR+8AgPTqAhOMGNBLKHcM++2zp1g/HrDOuKlN4ITN2F+WbqIumnO2LbxXcwdpQ+DMiknGsOsSjnyhqyuuzL318hffAUz06gB9r5ND2w/bHCBY7bTADfiwS6GAkEAB8k0MVIIAD4IIEAAD5IIACADxIIAOCDBFrrUU84dryXmAx0NE27xcYvFUQV/tkefTiOmucUX134+58Iv5lAeyqQlUCVYyJca8+b8X0+8r/35kwWCyIK71WUg2Z/zOGoHDvploWvfenqjoXPB/Yap15zImz07ATaWhF+JoH2CEY6sMb8cVOTQN//kw03PBzvUtYU7IaFf3VN8Ip36YJ9w8LH08K3q+/9+x0PTqCkP4JfZxj/mt4TRXenu36dITpZF3ZyPGxp0/XmoGpqM6PdJG5R9cTf+smGex6OuGAPLPw4T2kLbl34mr1/n165hyZQugOT7s4Xv86gCxDuhHGu7EJob/xnafHet8ppjNk3fv4zOe1VCm4IxE825Nu+97mcuNToItUfd/PAVc3+8MNh7JMHFb5mA+5Z+Pi+eMmeHvoDPTCB1J5LDu6LX2cwChDdb62ufmOZ0jWInRyuKPqfvm2a5n3G5f0105aIXDFuIT7r33gqiXagUaTq4653yKpqU+mOh6N6o25b+MUG0L0LX1X+8JPOTaEHJtAwRHeUwzBYCWR2M8lKV/l895wEkuvJC787gYJwVmNrVt10xxXc2snzMRg/27d/bf/q2q7vmnFc1UOvGj/2kw33PRz1baDbFb6uZXDTwi8VJdsG2kB7hPmtE8i+GUgPUdLs3ZJAy5GRzr5wq6L+PJfzFfQ/Rw2bM3+dYVxaVHkLOzkeZ/zVNU3btt1reHVt275LYHc+1G27KN3aLUpn0kWqP+5yh6yrNvWFv+XhMPsYxE3jnQpvXpSfUPiotEtV6gaNn48HJ9AQ1HQjgeI7ynCPz9PD4Hn/m19nKBXoM2Mf/GaatZPTFc3VPjtz05nFiae3PdrMzRuVLkAUac1xFztkZbWpLvnNDkfUlx2tLr1a3q/whdbn/Qsf7vmK68o90mcYnp5ADyRr1CZbbvmvteP2HsdzPhz1TyeMuSn8NyKBLvY7CbTvpMXBPA/H+559x0WYwn8tEuhiP5FA7x4Bbvtu4tGHg8J/NxIIAOCDBAIA+CCBAAA+SKC1jnuQc4Edb52NsxpvDlzwFGrnK3PnbfsDVW+RXb39DscNfV8N8fKbCbTn8mmdonKZ3t8W2HPa98Vx3W+UQEZRztv2I+3cj9WzZ1uUvf0SDVZmrIoEGl1XQ77csxNo6+n7Mwm0x/x2r3V9v8mWnVCU8rYf6cIE0luU1OdHNfEdqf15qzc9n+LBCZSMysOvM4x/DV/WjuZNbti2vCcnhyBYKmf2enj02WiP2IWXu27xaEaHUpRzzeEw5FtUuSKr8HtnX138LIHi6j1U7M/yuvfMLk/tuCaXGyL6EOvzPR7SIR/pYDGc6ZVb66EJlB7opFv2NY8LN9WZfnE8v6Hij9EIG9GrZpVtoGD2hRa8LHywynnZ9ogv6b/DnVAxGIna9tLag+XLe2lrxLSpUPFceeHlrrMOWDxdj7tlHc1aYqZ1Kyo3SqLjXjX7iqOZr66wIrGulc2ljbPbp3Y6KKRh6YyLanJQEUVFrrpn+7LuxrM9MIHUER5rUR+NC5eejcVrVnT7U67Q8nJfn0BqlnxUJ1l4HaP1CTQvYEvvj1y7sZM/k6NV6BO4/OQhaQOpvV2VQMayCruuhtiilStajJDyuKj7+wntXriluqQOccHG2fWpHdfk6u9W6DMuG+E3OU/kNaSIplC1BybQMORD/elqat6yyGCov6U6IYHkevLC706gIJzVMJrl+JVrL98X9mGXKAm0WK6KnbQuwDa0garr0jRHVQ5tnN1KoOAkL69bVht9vuf3gRu6qmkDrfLQBBqG7DmQqqZmx0par4LmeRpuYlZ9ii5GRjr7QreP+vNczveVJrl3CyeqIn6mbP11BnPtxRNuLoI+N7ckULxO4ypR2Qu3J4Gs9viKFakaUtxJFbVujd0JVPxL1YeKs5sJNAzprx5oqtrI8103ptZ1ztL4WevBCTQkXUHWjZJsQM/T02fX/DpDTYnCtatyRmuX+yj6JoJqO2aFt3ddupONbZ8XkD0MGzZ3aIktWreivNqI/bmy1q1Qk0Byf1qHuLyLVs9eSKC6mqyrjTzfo565UvU2i0r6rPXsBHqglY9vC/Y/AniY43YdvkNVA7C62lQ1rHEwEuhiJNBmJBBClf1j2xJoXecbNiOBLkYCbUYC4aNf8asH9dUm6hikAXQNEggA4IMEAgD4IIEAAD6+K4HCVzEAAPdGAgEAfDw7gdSQJnxdCgCe4cEJpAbAIIEA4DEemkDW8EskEAA8xgMTqDT2bJZAYrRbYyIA4FoPTKBh2DW4JgDgHh6aQMMge+L4LhwAPMeDE2jQv2BCAgHAMzw7gQAAz0UCAQB8kEAAAB8kEADABwkEAPBBAgEAfHxPAk0DHaQvqpbGUIg+dPgbrmaR5Or/2t4cbejctRtzH//G7xmbuZNDkY6ra9WFP+Rozj9iXVjX/WryKW5Ykx/qexJoGAZ9cvsl0Iol9+3fX9tXvdC0qqibt2v/NUut+qzN3EEXaefaS7O/uuawa1bt/jwigfq26lp7u5p8jhWbiZJnJ1BWKzdX0xskUNO9qj788AQ6ZTN30EU6L4EqL6GdaJcAAAvNSURBVOR1avfnAQlUu0duV5PPoTbzyHuLn/HgBFIN4LSaqvZ73/613dihMC5gnvHd11Co69H80wfnLopk3h1nTrDMdzmDCfPk+DZs6V5eljNb0eeaNe6+ePGl2cN9mJRz03YvbqY8moXDsXHtepnR8ISf+riw7aWxc0Vdklu0/jKnj2ZlTc62aH119qzJpZ1y+J6nV26thyaQdaDl5T6ZGFw2Pk3p+TM1FSj8zHg9Ca8ryU1uvPY1Z7Nx45pvY7BGNU5Rkr55OdWK5F6Ss1vbfngzQm5mUM75kqWKtO46KteuNnPcOfFRt7Y9vUued62xpvLEavJorqvJqmY9oiabRTppz1f1+mP0wAQqHeHKBApveeL7vIqaI2pkejbaCbTGZ6lqZcm06RTM+gHK+ff5rFqR2ktydnPbj+/IUpsZHo1xltLh2Lp2e5lq7xnbnvbA6R45edyNylBJ1vl1NXnP4XStydLJe56mULUHJtAw2L/OsCuB3v0UizVNnLelvv3tbaB54X9pR4M4l5vuJYoWf7j8DCJakdpLcnZzmSc8ShGbqRJIFmlnG8jeda+uaZqq55GqB84+Hulxtycuq06g4mZubgMZhb+mJlufOGvP0wZa5aEJNAx1z4HUxEICVVUfq89qTbNspYqzr2+brtP3tPG2FwsT9W7le8nqutDL3PnMvW4zg3JGvYV793m2dmOZwRPp8POi8Nld/XJtq6nOVaoTyN51R9Rjl5o8fTz891l7nsbPWg9OoCGqEuktmew2Gu/k7QQaPpW1fINltL50l8CKm0RziVaPUFBMeY7la18qZ3A5F9csNbsx0Srnlh1Q2MzgcXL6IEYVac/a82WG15tX1+jH1/MjCuvJZbzv5eGwK0OV+gQyd92OBPKtyfMfZO/agXte3GNgybMTCLOdLY6nEI9SntDjcUwL4jf8SE3GMAwk0Lc4oN/pCfLNfEgCodaP1GR8kECP9+6H+vq7RmMzSaDv8SM1GSESCADggwQCAPgggQAAPkggAIAPEggA4OPLE4h3xADgtr48gQbGyQCAu/r+BBoYKxAAbumZCRQMBjY3b+TEaBaaQgBwI89MoJVoAwHADX1/AtH4AYB7+vIE4rtwAHBbX55AAIDbIoEAAD5IIACADxIIAOCDBAIA+CCBAAA+zkmgV9d83gA97keU52UCAL7BKQkUvIVDAgEAtL0JpHKhb+dBCE5JIN4zBYAvsCuB9IA3Uej07V/bj2OGzp99dc04iuj02WBk0WABwSf/4uUy1g4APNrmBLIiIGmf9O0UHH37Jx4OhQ2mYBnZPHlri/FGAeDRNiVQ4dqfBkoQNlOERM2aoGkUNoLenwyXJp8D0RQCgMfa1QaSiRBPUwmkmj3RVPlJ2kAA8F0OfQ4kviGgEijsWwvnHZc1h9s88d1u4jkQAHyPI78Lp9o2MoHijrisE67pujZ8+vPplevDiaQPADzdce8D8b4OAGANRuUBAPgggQAAPkggAIAPEggA4IMEAgD4IIEAAD5IIACADxIIAOCDBAIA+CCBAAA+SCAAgA8SCADggwQCAPgggQAAPkggAIAPEggA4IMEAgD4IIEAAD5IIACADxIIAODjwATq27+2XzvTq2s2zAUAeD4SCADgY28CBQlySgK9uqbpXpuLBwC4rV0J1Ld/f3M+9O1f2/ft39/fXzj51TV/H3PUBBPfk19dk8wz/SteCwDgS2xOoDwX+nYKmSlBwiiZ/79vpzSa20B9G30yahi9uuaPzjoA+C6bEkgHQtgL98mQJEo+nwiyJunFe0/WPW80hQDgu+xqA8UptDeBxuQRz5NoAwHA9zn6OdD8h7YfjF64eeL7cdAcLX3bdF0aQDR+AOArHftduEmQGPNk8e2Eto9bPFnLiu/CAcC3utmYCGEHHQDgq90qgYLvyAEAvt1dEujdV0f7BwB+x10SCADwa0ggAIAPEggA4OOqBDr9ndJN46ICAPzcP4E+7w4tzUsCAcDD3LwX7v1+kPkTDtt+G4K3XAHgDs5OoOxnGLLJYxj07V/bjZPjhNAJVPPbENFCo+F/+Oo3ADi7rA0UpYhqsKgfd1DzTh9e/m2I+HPJShntFAB8+SSQerYjhtaW89b/NsSw2DdHUwgA/Pgk0Me700w8yCkm0DRnRYAVEog2EAD4ck2gwQiLdHy46udA2exWAtH4AQB3Lgkkv54gf9whnCi+k7342xAygfguHADcgXcbaMYLPQDwW65KoOUfXiCBAOC3nJxAQX8bgxoAAEI3HxMBAPC1SCAAgA8SCADg45wEqh6UYGl2AMDXOiWBghduSCAAgLY3gYzBdqLBqQ9PIF4pBYAvsCuB9Ng2UejoH03Q39LOhkqIx8iO/sWwOgDwdJsTyIqApH2ifjQhjJL5/4N3VqPHSOEno4YRQ4sCwKNtSqDCtT/sgfv8Ox2yOomSzyfCGePh3t6Tdc8bTSEAeKxdbaDyr/RkE7Yk0Jg84nkSbSAAeLRDnwOJdor60QTZCzdPfD8OCh8lNV0nko3GDwA82pHfhUt74D7TxI8mBJPFtxPaPm7xZM0tvgsHAF/guPeBznuJRyUbAODp7j8qz/LvOgAAnujWCfTuq6P9AwBf6dYJBAD4YiQQAMAHCQQA8LEmgXb+5kJg+jI2XzEAgJ+1IoEqfnNh1Tey+Q0GAPhpOoG2/ubCrgTiPVMA+Ckigbb95kL00wrj5FfXNF3X/v39ff4TRo6IK8baAYDfkSTQ+t9ciF4YFc2av7+2HxcbL0U3mBhvFAB+RJBA235zIcoRlUDBwNc1CfRZPE0hAPh2og207jcXjk4g2kAA8CMqngOVf3MhzpGksbQ2gWj8AMDvWP4unPGbCzqBgi8kfCJHJVD6rYXpV7xJHwD4HUvvA/HSDgDgHIzKAwDwQQIBAHyQQAAAHyQQAMAHCQQA8EECAQB8kEAAAB8kEADABwkEAPCRjo2dDpbDRCYeNREAYrSBAAA+aAMxkTYQAB+0gQAAPkggAIAPEggA4IMEAgD4IIEAAD5IIACADxIIAOCDBAIA+PiFBJpfj2y6l3dhvtqra3j3FEC1NIH6dnqNfcPleucV6JwLWN9ekjxPufqeWc6n7AMA9xAm0Ktrdg6fcscEuuqq+JSrLwkE4C6SceHU5SMY42v8c9/+td04+d3AyEYCG9sdx82+0JLJVrRmcDJRJKPwokhm4RfXNC11aUXj5L6NZqmdfUM5Kw+cUc41Bw7Ar5oT6NU14lIRTp3/v2/DS+J80ctDLLhizt1h9bNH85fochoLFYIiTbMbyzSKVHv/37fzJXlclLmXPlPnZcsEkrPvLGf9gZPlrD5wAH7YQgIllytxxYw+kV3d0rvu6UJWN/u0gKWLmVFOY6GCmMNaplGkFQmkZs32Uvj4qpxAeifvK2f9gdPlrD1wAH5Z0AsXNUc+9iaQ/hbAigQKyla6nF2ZQEaRdiSQ3Ev1CVT+qsW2ctYfOCOBjLUDwGzpmwhmL5yMkPzCpWJtxexJScoRtLMXLnjYMbct9DLloiu/c6e6p6zwDx/fTAkkJxY3cUs5qw+cLqe5dgCYJN/GDr6MHT6sSJ8omxEi3r0J+3PyJxQLs8tn3AZRTrGGxZmj2cUy7SLVvXekH5CIvTRPa/t5pmli03XxbtSdcJvLWX/gVDnXHDgAv+oX3kitce8H5zQjAHwjEuiNBAKAq5FAbyQQAFyNBAIA+CCBAAA+SCAAgA8SCADggwQCAPgggQAAPkggAICP5PeBIm3PRCYeNxEAYrSBAAA+aAMxkTYQAB+0gQAAPkggAIAPEggA4IMEAgD4IIEAAD5IIACADxIIAOCDBAIA+CCBAAA+SCAAgA8SCADggwQCAPgggQAAPkggAIAPEggA4IMEAgD4IIEAAD5IIACADxIIAOCDBAIA+CCBAAA+SCAAgA8SCADggwQCAPgggQAAPkggAIAPEggA4IMEAgD4IIEAAD5IIACADxIIAOCDBAIA+CCBAAA+SCAAgA8SCADggwQCAPgggQAAPkggAIAPEggA4ON/ww/upqVIdkUAAAAASUVORK5CYII=" alt="" />