Java读取大文本文件保存到数据库

1、追求效率

  将文件读取到内存,效率比较高,经过测试读取1G左右的文本文件,机器内存消耗达到接近3个G,对内存消耗太大,不建议使用

2、通过调用第三方类库实现

  通过开源的Apache Commons IO类库提供的LineIterator对每行数据读取,底层通过jdk中提供的BufferedReader实现,对内存的开销不是很大

3、具体实现步骤

创建java项目引入pom依赖

 <!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/ojdbc/ojdbc -->
<dependency>
<groupId>ojdbc</groupId>
<artifactId>ojdbc</artifactId>
<version>14</version>
</dependency>

具体实现代码

 package com.sun.file;

 import java.io.File;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Date; import org.apache.commons.io.FileUtils;
import org.apache.commons.io.LineIterator; public class ReadCustomerFile { int idx;
Connection conn = null;
PreparedStatement pstmt = null; /**
* 使用commons-io.jar包的FileUtils的类进行读取
* txt中内容文件的分割必须为|,java中需要加转译符号
* @Title: readTxtFileByFileUtils
* @author sunt
* @date 2017年11月13日
* @return void
*/
public void readTxtFileByFileUtils(String fileName) {
File file = new File(fileName); dbConnection(); try {
LineIterator lineIterator = FileUtils.lineIterator(file, "UTF-8");
while (lineIterator.hasNext()) {
String line = lineIterator.nextLine(); // 行数据转换成数组
String[] custArray = line.split("\\|");
insertCustInfo(custArray,"SQLLOADER");
Thread.sleep(10);
}
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
dbDisConnection();
}
} /**
* 数据入库的逻辑需要自己实现
* sqlBf.append("INSERT INTO TEMP_CUST_INFO(CUST_NO, CUST_NM, MOB_NO1) \n");
sqlBf.append(" VALUES(? \n");
sqlBf.append(" , ? \n");
sqlBf.append(" , ?) \n"); 拼接sql最后结尾的括号不能丢失
* @Title: insertCustInfo
* @author sunt
* @date 2017年11月13日
* @return void
*/
public void insertCustInfo(String[] strArray,String tableName) {
try {
StringBuffer sqlBf = new StringBuffer();
sqlBf.setLength(0); sqlBf.append("INSERT INTO "+tableName+"(ID, NAME) \n");
sqlBf.append(" VALUES(? \n");
sqlBf.append(" , ?) \n"); pstmt = conn.prepareStatement(sqlBf.toString());
idx = 1;
pstmt.clearParameters();
// pstmt.setInt(idx++, Integer.parseInt(strArray[0]));
pstmt.setString(idx++, strArray[0]);
pstmt.setString(idx++, strArray[1]); pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (pstmt != null) {
try {
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
} /**
* 连接数据库的基本信息
* @Title: dbConnection
* @author sunt
* @date 2017年11月13日
* @return Connection
*/
public Connection dbConnection() {
try {
Class.forName("oracle.jdbc.driver.OracleDriver"); String url = "jdbc:oracle:thin:@192.168.40.30:1521:orcl";
String user = "ACTIVITY1";
String password = "ACTIVITY1"; conn = DriverManager.getConnection(url, user, password);
System.out.println("Connection 开启!");
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} return conn;
} /**
* 关闭数据库的连接
* @Title: dbDisConnection
* @author sunt
* @date 2017年11月13日
* @return void
*/
public void dbDisConnection() {
if (conn != null) {
try {
conn.close();
System.out.println("Connection 关闭!");
} catch (SQLException e) {
e.printStackTrace();
}
}
} //测试代码
public static void main(String[] args) {
ReadCustomerFile rcf = new ReadCustomerFile();
Long startTime = new Date().getTime();
rcf.readTxtFileByFileUtils("F:\\lc_test.txt");
System.out.println("导入数据总共耗时:" + (new Date().getTime() - startTime)/1000 + "秒");
}
}

导入的文件模板(大约100百万模拟数据),以|作为分隔符

aaarticlea/png;base64,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" alt="" />

导入数据库成功

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAY8AAAGzCAIAAABYQAxmAAAgAElEQVR4nO29vY7kuLIuyoc4T5Fu1hrgzhtkmddNoNDWFMq6j3ASSNSMedrbVgGFdMpotLWBRmE7uzGJC3Q7bS5goTFWOhtrnEK/QB+DEhWMH5IKKlNSKj4QhUoyFAyGFF8GKSXlfv78+Qbwr3/962dffPrNuf/n/3zvfVwv/Otf/4J2vn1455xz7h+/f3v79vvvH97ePvz++7dvv//+wX/qxN41n779/u73b7hSA2wJNevdh9YmpqMPv//+4fd/NPWswDvn3D/+0Yp8C8L9LDEYrg3uZz1bXQRsZHoG6tjK1wG2+vb7PxyH4dmq6ckr/vDO/+PJ6Nu3b7HcP1rapGwVuOnDu3cfWtmGAmMeFi0xGK4U18JWH97BuM4M+oy5lWetVn2TAAJ6KrXk2+//QId9eEe0GFsZFoV5s9UoMEsMhlFgbNUbZonBMAqMrXrDLDEYRsGc2MpgMCwZs2Erg8GwcBhbGQyGecDYymAwzAMptvrw8T+tWLFiZSIlw1aXp0+DwWBgkWcrX//z5//++fN/O7ezYsVKKNp78QYNjK2sWNGXMWJ2uTC2smJFX8aI2eXC2MqKFX0ZI2aXi35s9T5sYvXpn5++/+nc7tf3f+OlsO9/Ordzv/0TVP3zt/bsivJu59zut09d5a/v//70Gyf/8+/3vw5/2fnu8pLRuCLjkf3O7Zz7+AnaHI799DESBpXu1z/jjcI610nlPd1Z7NNHlZ3Asf7w+KhU1+31IOgXrwexXtLTuTQ2T/Bb2fWZH6mx1RTQg63+///vf31//x/dZdSe4F/f/x3q3a9/fo+uWoZZJPnfPrUR215knq288G+ffno2ef89z1bvv+eDHBDQx98CW/3656dgm8xr0A+RT6D9bVR8jxUi+yNvhABu9bjf/llGWEDm1z+/f/rY204f7W39b5/+/p7zIdL/UzyPnR72epDqeTvBZYOPEvwmXW+Sf3pdV2PE7HKhZCvuqv34iXxBJdkqlm9jTCqBrTIFf8cWHBV9zeapEF/9ISci+YunPy/w/nsTD+iKz7AVKyBEEZJU2NnYBv8v9IN8HmNSKGYryc5W56ffyDeB4Dfp+uT90/O6GiNmlwvtTBCc+C7ZLmYrRp7kIERVGVuB6C0Udu1Xd0nWhq7y998bq1jS+f7+P9qo+/jp+9+fmn/kmOGiDn/kx9t6VGCrIjs/ffT/e1eX+JC5Huh5BDXlbCXaGZ3f2JmC36Trk/VP3+tqjJhdLpSr7DAzHya3GpWtupyiYP0CLoUEm+Xo+vjp+5/+//ff/37/65nYis+tetjZJBcfP7VR3cuH4XpIs8wwbAUcEl0VMltJuRX1T9/raoyYXS7U9wQ/fmLXBeSrMCxjizOIJFOcla16lc5+uKgkz1zef//np0/tGtynfyYmSmzUlc8Eq+wMU6HfPv6m8WF7PZApFTxx7PXA18v+5O9OyH6THMj7p6efx4jZ5aKcrf7fjftf3RcguCjR1QDPaAlbBfl4pfPjp3jJqSdbtf3iC9HfUSqOQ7+kJfPLr+//ht/z7Krw++/tivWvf34nX+M5tuq+FXpFUW87Ccvk2OrjJ7jGBw6H5xGtjvdgK9GfOEXq7BT8Jl1vkn96XVdjxOxy0YutHPhGa04b94TBP38LcY6+BfknErqogDfj4ZIqK5xnGUa+H1v99uknXncPmjsyim+Hxa0o6sJau5NyhP53CYDTyCMIhXZ2nf79/lf4MeGoj7H5kZfY9Sxy3n/6lXK+vsRO+IDIb7zf8tcn55/y62qMmF0u7OnQDBEUrmhYgSVwxPf3/1Eyk51vGSNmlwtjK7n8+uf38jmjlchvMPe5Zh+OEbPLhbGVFSv6MkbMLhfGVlas6MsYMbtcGFtZsaIvY8TsclHKVgaDwTAujK0MBsM8YGxlMBjmAWMrg8EwDxhbGQyGecDYymAwzAPGVgaDYR4wtjIYDPOAsZXBYJgHjK0MBsM8YGxlMBjmAWMrg8EwDxhbGQyGecDYymAwzAPGVgaDYR7Is5XBYDBMARm2smLFipWJlBRbPRsMBsNkkGKr880/DQaDoS8stzIYDPOA5VYGg2EeSLGVwWAwTAeWWxkMhnnA2MpgMMwDxlYGg2EeMLYyGAzzgLGVwWCYB4ytDAbDPGBsZTAY5gFjK4PBMA/Mhq2en5+nZtJMYZ4cEEt25gXGjrowtloczJMDYsnONLYSseTLYliYJwfEkp1pbCViyZfFsDBP9sWXL19+NPiCmpbszJmxleuD9pD/HsRugxrmyV6AVGVsBTE/tvoZI1H59vbm3H/7Um+3IY0vJK4CzJPlQFT15ctfSGDJzqwfu3M7WLJdDMBWsGa320mV7SGXyK3YtG45+PLjy5e/vnz5iyesrCd7JctZDKuNqk3UVOLLly//8z//A6nqr79q2eqaLshB2CqwzULZyjn3OcbVXB8lCFRFEwGPrCf9+XLOuZ9ccc45t9sx19YFtAX4ywyxFaqpwZcvX778+NISVkNVNWzV+OCnn2RcwwVZyVb+zC86t9rtdrvdzjOUx+fPn32lrt95oaOqCrZ6S1CMilyG1eZx1tzKU9WPHw1hBar68kWzbtXy1E+/nZz/ewWEVcNWhcO/crby9IQu4vr06kuLGiXnRglVvfXhfUwxFeQyrDYXg61RI6KqxplfWKp6yzkz5FOIqnSE9aUMvQfcgmaOafRcnGHSqEvnVm9tOhOQqKzBBNjqx5TZqpCq3vpcZBHFVJDL4NpcO+mDbIVqEvjx44fY9OXLD59QgQn1F4Gq3pLOpPkUMFBDrJ4x23U05q9n1XKFVHmvw/uyFVyiakd/2XWrcvw3KIUjTNidMGmBbFVOVW/zX2WvVwjZKvrfJ1U/fjSElaOqt4LciuZTPwH6jj1BWPVU1VdJzzW73fi51c8YicrcYDJXW/kCwSAh4RGn2D8q8+1Bsnf6aEIvqnqb+Sp7owlkKWGNkqYukhL/SEL4p/kfUFWXYSWp6q0gt0KERdmq75SQJaxBqKqvqvIEQmcY7WIq61bZ66wkI/icQ1/HtSRFi5qtqrQ1xAQIqy9Vvc18lX1AtoJ4e3trSOpHQ1U/vvz460uGqt7KcqtAWMhOZHC5E9T8klXVS6E09vI0asb3BNOnrYSt0EpZCAb18tnUcquOmH58eVNR1dvMV9klYqpkK0BSHVX9VXBeCnOrYI+LcyuYZPXyg27uJinRzSsTbAXGFSJx9/Onv+HgRlu3GpCt3pJJY9/cKlyygzx4FdhKd/hQ+PLlL0hY3f9nYKu3Sa6yU5IKLMDWs2DJ6q+//upLVW/9cis+pQo1fV2hWBenh7NUVUhYi86t0uiVWwVu8v/U35qcCFu9IcLqT1VvPW/loCxVZfKQ2lC092oN4HOrHz/8I1W+FNozVm7loaaqtyGeh5jfutVbnycYzvo7QRenUb7TwFxD5FbKCeDgwITVh6re+j/UFzzZ08yzaDsrW4U1rHKMmFuNjvp7gn27uNwTDO0hZ3w61LXpFWKrysRqgugIqydVvakeQa6kqsJrQ6GqV2tAoCTEUH2p6q3sS/R8udW4qHneStdFFVux0D1OlUV52um43wnO8WpIw2dWigMvv23ALodLGvMmP2+lQOGXKMyt6il7Iqh/lr1vF7VsRXMlylbqfArC9mAYCkve5GRw9PoSvYA9l8Ts9rf6b1TeWrZimwa026CGeXJALNmZM2Ort6nmVoYEzJMDYsnOnB9bXQxLviyGhXlyQCzZmcZWIpZ8WQwL8+SAWLIzja1ELPmyGBbmyQGxZGcaWxkMBgOPUrb68PE/rVixYmXE0oOtfhoMBsN4OAtb7Xa7vNCZNZTj7e2tXPiShs0R5sxFoe/pPtWhN1uVTC/9VVgieT4NvVDY1/Pz84UNmyPMmYtCr9NtbDUALMAGhDlzUTC2Qho+vHO//PHN/xPDV1dDG2Af3jnn3n2IpYK1Db798QuR8gNBR3pBYaSM/ERR5czM+YUywRvf/vglEsRn5cM74NXzXkgLhLFVgq0oEQxwoVUGGGEiaNK3P3755d27X2Ih7kBPVsJIZ4QKZ3LkFJFSJwE/xXSFfQtaz34hLRDGVqVs9eavs+qcoyrA/ngX005s5Lc/fvnlj2/Yyg/vHKawb3/84t69S4x0LhiQreDZ/fCOS1B9DXTvtz9++eWPD3/8EnQBvWe/kBYIY6sebDXIVVYZYHEgRUa2H9Bs5cM798sfH6DlntWSI50JzsNWlKxgHSGuThlUe/YLaYEwturDVkMEdnWAwVhiw4MlMRAfnqwSCyvzWVs5y0wQr029oUr4rfDug6949+ENcdDZL6QFwthqdmyFvucTDBX9H0KpIavMSOeBAVfZOxfk2Kr1ZEtStKLpwthqYBhbzWwmGD64KD/i4q9bhIGpQEtWS2eraMjdrbz2kzwTbD0JdKCpddyFzQQHg7HVrFbZ41vnv/zxh2gtk399++MX9+6PsCZsbAVFIoZKrbK/vYV7r3EuG1XYKvs5YGw1oycY4t7BUwjc3CWkC92B8CErYyuGQdhnFrhTT55how+12RMMw8PYakZPh3IB5vwUhLHu2x+/uPiWVRyRyVX2mTweOvQ9QUpAgjNI9sVVnPdCWiCMrS79y5vnYtiPRbIwZy4KvU63sdVFMVnD5ghz5qJgbHVpTNawOcKcuSgYW10akzVsjjBnLgqXZqudwWAwaHHp3KoEu+o9IZ1zlQM7Ez5//tz3EDgWaVy+PjFqhUMm68MAhTMN80X96T7jTLDKrKlGGvV4MBXdE6cC7EeqhO230CGw68n6MMDYalEwthoM2UF5MdbjNDNSsxUL7tErTIioJqvzrKhxpuFaMTJbOecq2eq4W7vtgTGLizQsfNiGKCU6Dlu33h2xWIO2BaI+wCBn0b9UOMtBCVeUVKY1T9aZx92as0HRBMxG48QqgqQfHmr2uiNV/S2hiEQ0o/YNVBmoT53K8o60TQjjs5XjCKuErboTWMBWnPBhGz6Bf4G8cFaE86ULMEdyKOlvGhL7sBokhdQYtnWyzjydTqfTcbdeb7fsd1jfJpmtRF7jWpvgh6oGsaRmaN7STid//o67dTcu9M8QNmSaMCbBVpSwLpFbRR+ic3Dcrde7nXRWpNOlDrBgapatgrsKx5vohbYiZPVP05m+vyN7WfRukthqvdshRo6CGcXecbd2222kahhLaoZGRZsuOoKKxArYakjP85gKWyHCugRb4ZgC3yfr3VE6K7Jb9QEW25zNrVjyKsy/0mK9eHCazmx7ioNO2UQmsNtDqIwzyDiYD4jI17tj5IEqSzj0VljGDm2eFWaGeCBVNuSaKCbEVpCwLsBW6EDgtdR3SOKqCSOS/vFi2VX2crY65TImKKamsxK2mowzY36JtCuaQLrBEDPkK5R6pPlaZwkBZb9yhWS2zgIMPJtbDet5HtNiq3AtjsVWIbx45yW/ABKJwIhsRT0MQSVpp1LuNkVnshmMvqmd1kmTsi7mcTAHh7ROyBBiiSViKCsUlrBVtLCVY6uBPc9jWmwV6keaCcJ7JOQLLHeK1WyVJaMStmLFJKJJy6NWiRAn6EwmAwHJT/8mf3tgu5UnZW1Ek2BuvMNkl1pLxEjWKMzNBI+7NTldmTR5UM/zmBBbwfpxV9mLayIMwlau4BaeE9Iu9li2JtsvbaJ6pudMopPJfVRNURqI5D1f7UgwH3drt92F9FKOdp2RtaMmcQPGSKgqab/ehkQTj6mwFboWL/K8FfAN4ybsyqJlwAIknmA45fgifIRi4WMNWyUkpcOn5kxOZ5P66Jqg2dwKDuzYORLM8UNWYIZYZwmCViGa6MUckuIjxpIzeJ7HJNiKfnNO6+nQVrTkJkoW2eet0v+fACtB2gpNLAdJoJLU4DK2Gt+Z7IUO72b1bNoeIrOP7TOMQrjSYGYyMj4ayyxhsD2oFcZyLjU7C+ll6DFu3Z3B8zzGZytKVb3YSjSr4BbYKJA8LjEFSysJFHJQiaSi9wvDfnmzKNjvBC8NC7ABYc5cFIytLg0LsAFhzlwUjK0uDQuwAWHOXBQuzVYX22PQOffZYDBcFy7KVoUYZO/Q13//1wTL58+f+x4CxyKNy9cnRq1wyGR9WONMK/MtI7DVxWaCoztX8jiqCaaiO8dUgP1IlbD9FjoEdj1ZHyacaeWKi7HVYCU7qOBxeizNjNRsxRb6qA4lRFST1TlZZ1q51jJntgLPttHnydhIe9qv3N1jV/NyG6J084KEHzdudf+1/fj1YdUIgsq41AcY5Cz6lwpnOQiqVVSmNU/WmU/7FWeDoik2u6t00cAjyceNc87d7qPW5/sbPNj+llBEvWhG3Z2IeESgPnMqa90b4+bhSQiNcLpnylbgeWjuGX4UWvs7elYeN8F9L7fo3O/v4OWVkqwMMEdyqEK2QiXBaLRVUkiNYVsn68zXhhpWm7sVIRRFk8xWIq9xrU3wQ1WDWFI36pdbaNL+LpxNcIK+Pqy6caF/6m3Aqp72qzRhzZWtsnuLsQEZpQNfH1ZdqESOe9qvVvuHrqY7Z6mzpQ6wYGqWrdgcBymRCuqFtiJk9U/Tma9fH1Y3D0+RPeomia1W93vEs1Ewo7B82q/c3S3OLgewpGZoz/c3POHGlBHECtiqflDssaDMla1iML87y7PVyy13VlrPxq7c37nV/hlrGCrAYkbI5lYseRXmX2mxXjw4TWe2yp/vb5peKpqA2X6ee/cYKkEyQoL5BUbd8/3N6v4r6wGVJVzprTDHC6Bft3nxM1mfHoqW1A8qcT2E0z17tmJ/CZllK+Qa4FD+O6SZ/sje9JY7ebtLKcBeczyVmMelMyYopqazEraajDNjfommFYomkG4wmSOYMeHUI83XOksIiJ09FMpzcHyKG7FsbjXEoK533aqFsMmEjq2e9quW++FZARffWZZazshW9CKXpnsoTUOaqf4pOpPjmoqmdlonzV86+3EwB4e0TsgQYoklYm6lUFjCVtHCVo6thhjU/i5DWPNmK27bsFK24iYvIePtsNo/v77cconDQAFWQEYlbMWKSUSTlketEiFO0Jnd8n9A25eq6XHjnLu53cjzlzbASDA3Uy0mu9RaIrKVRmFuJvi0X8W3BTJsNcygojXN62KrBFUVsZW8MIxq0K2Ks7KVK7iF54S0iz2Wrcn2S5uonuk5k/TL5D6qptSdgceNc+A2Qmh9vr9xm72fBiajXWdk7ajJKjsYI6GqpP0Dev5qV9kzuwyWPG+VvpUOXAkv1hz9Z0viCQaJGqgMFAsfa9gqISkdPjVncve/PZU865owyaZizDkSzP4JIzQXrreEOQsahfITDHE9OYOMJUMN6mpngsIOh73Yqs8DjSlJfYC9lk3rpNwK0lZoYjlIApWkBpex1fjO7OIQGemc0zTd7slyG6mE8iSYmYzsUWWk75TB5kWtMFjYQp64hdt5oce49WGwQV3/KrtkVsEtsFGK9ASDxBQsrSRKIQeVSCp6n4gzrVxlMbYaweOj23A1xZy5qGJsNYLHR7fhaoo5c1HF2GoEj49uw9UUc+aiyqXZyvYONRgMalyUrQoxyN6hlQM7ExQed/K7BVF9YtQKh0zWhwH1l69hRhiBrS42E6wc2JlAPR5MRfdzqQD7kSph+y10COx6sj4MMLZaFIytBkN2UF6M9TjNjNRsxQI/QsMRIqrJ6jwrapxpuFbMmK3A1qH8r5r5Q3QvQ+8kxdde1wcY5Cz6lwpnOSjhipLKtObJOjO8A766iXmJfGM9VhEk/dhQs9cdqepvCUUkohk192Z5VJ85lYUdKWzgMFu2gltacQ5EocUFCFBBNsg6bMHlBbb+47YpbaALMEdyqEK2QkgwGm2VFFJj2NbJOrPtYL3dku0ZNU0yW4m8xrU2AQlVDWJJzdDwb9f489edIThAyZIBbeAxW7aCYLYOLcitog/ROTju1uvdbguDKgpL/mypAyyYmmUrNsdJjDfRC21FyOqfpjN9f0fukujfJLHVerdDgRUFMwrL427ttttI1TCW1AyNijZdCLvyFrDVcDZIuAa2Yr+i82yFYwp8n6x3R9AcO5U9G6fTBWeCLHkV5l9psV48OE1ntj0xF0X/JjCqbobXVMaJQBzMB0Tk690xclCVJRx6KxQdTxW77SHM1vBALmJDh5mzFZNjt2bl2Ar5CjiUfIdAJ8v71HjLnbzdpRfLrrKXs9UplzFBMTWdlbDVZJwZ80ukWtEE0g2GmNnFCP9Piq+1lhBQ9itXmJ10tba3Ytnc6lw2QMycrTyEd97wgskAC+ElLgyvt1thsSU7KC92YbaiF7k03UNpGtKcnglOxZlsBqNvaqd10qSsizcczMEhrRMyhFhiiZhbKRSWMEW0qJRjqzPZEOMq2IpzoWomCO9PkC8wTgeEmq2yZFTCVqyYRDRpedQqEeIEnclkICD56d/kbw8gSiU5T5Q6wUnP9sBll1pLRLbSKMzNwkjWm2Grc9hAcR1sxSRXrmKVXaiRumowCFu5glt4Tki72GPZmmy/tInqmZ4zSS9M7qNqiuxE8p6vdiSYj7u12+5CeilHu87I2lETqkD3asUzyFoyvA0s5spW0VJClLK2ZuWftwKZKJOU8ilr/+wVI/EEwynHF+EjFAsfa9gqISkdPjVncpd6c2XomqDZ3AoO7Ng5EszH6CErMEOsswRBqxBHTUQvKT5iLBneBgFzZatT9FgZcyIL2CpKUtNPwXV9pai/CNnnrdL/nwArQdoKTSwHSaCS1OAythrfmWyQwbtZPZu2h8jsY/t4oxCuNJiZjIxngjJLGGwPaoWxnEtN3EJ6GXqMW3eD2yBhxmyVMavgFtgokDwuMQVLKwkUclCJpKL3C8N+ebMoGFtdGhZgA8KcuSgYW10aFmADwpy5KBhbXRoWYAPCnLkoXJqtbO9Qg8GgxkXZqhCD7B06+jbS0t7SfQ9x8rsFUX1i1AqHjOLDz58/F57i5+dnhTOtzLeMwFYXmwmO7lzJ46gmmIruHFMB9iNVwvZb6BDY9YhsVXKRGFstrRhbDVaygwoep8fSzEjNVmzBj9BwhIhqsjrPd0UaW1lhyxWwFf+YLxtp2pehN6/VboFfLO5LDVv5AjmL/qXCWQ6CahWVac1ncmY9W/l3mrPvrO/ZxLxE/tW/Dx0OPJL0b0tvX93+bzjkSFV/SyiiXjSj5t4sj+qTp7LevTGu/s3yB7gvpcxW+zt6Vh43wX0vt+jc7+/g5fV8fyOeoVB0bOVIDiX9TReJfVgNkkJqDNt6VmdWs9Xz/c1qc7cihKJoktlK5DWutQl+qGoQS+pG/XILTdrfhbMJTuXXh1U3LvRPvQ1Y1dN+JaUC4dqYMVsd430pE2zVuSP46+vDqguqyHFP+9Vq/xCnA+jbkik6tnolS04JtmJzHKREKqgX2oqQ1X8mZ9ay1deH1c3DU2SPukliq9X9HjFyFMwoLJ/2K3d3G6kaxpKaoT3f3/CE+7RfgRwniBWw1RCDwgk7uTZmy1bMPmd92OrlljsrrWcjVz5u6AkgRc1WiBGyuRVLXoX5V1qsFw+eyZmVbLW/c6v9s7dhtX+uawJm+3nu3WOoBMkICeYXGJY+l4wis8oSrvRWyHIKU3yeFSbveCCDuTeUpGHzZStuX8o+bIVYHDiUfoc8btxq1a62sNPy15atnLzdZfC4xAh92eo1lzFBMTWdlbDVgM6EbJVwpsBWMb9E6yCKJpBuMJkjmDHh1CPL1wpLCIidPRSS2bp4ihuxbG6ld6+oh5S5spW4L2UdWz3tVy33A691s/f4/7hkBxU8ztJE9i9LH1m2ohe5NN1DaRrSnJ4JDujMqtwqEQyapnZaJ81fupjHwRwc0jqhLGKTloi5lUJhCVtFC1s5thpsUNfIVtl9KbNsxU1e0O0q5xzOaV+7xAErV7NVloxK2IoVk4gmLY9aJUI8kzNr2Kpb/g9oLVQ1PW6ccze3G3n+sr/zOQ4J5mZGw2SXWkvEGNYozM0EyYJ3hq0GG9SVzgQDtOtW8sJw+vo4K1u5glt4Tki72GPZmmy/tInqOZMzK9iK9MLkPqqmKAdE8o8b58BthND6fH/jNns/DUxGu87I2lGTVXYwRu7eXJqtBhvU9a6yV7JV8qY7dGW0bBHf91WUxBMMEjVQGSgWPtawVUJSOvxMzlSzVXwzq7PKz0kVTYLZJMaiBxTQIQ7NhestYc6CRqH8BAN/hafYaqhBXfkTDHVsVf5AY3Plue6i1Jfs81bp/18BK0HaCk0sB0mgktTgMrYazJmfP39+LgZ05oabaYa++jfd7iOz/cQWVdIwE1bomvpHlZG+UwabF7XCYGELeeIWbueFHuPWh8EGdfVPh4pmFdwCG6VITzBITMHSSqIUclCJpKL3iTjTylUWY6sRPD66DVdTzJmLKsZWI3h8dBuuppgzF1WMrUbw+Og2XE0xZy6qXJqtbO9Qg8GgxkXZqhCD7B1aObAzQeFxJ79bENUnRq1wyGR9GFB/+RpmhBHY6mIzwcqBnQnU48FUdD+XCrAfqRK230KHwK4n68MAY6tFwdhqMGQH5cVYj9PMSM1WLPAjNBwhopqszrOixpmGa8V82eoY/1QQPyDKRpr6Zeglr0OvDzDIWfQvFc5yUMIVJZVpzZN1ZngHfHUT++DxYcuoCJLeC6jZ645U9beEIhLRjFp6qzuoz53Kso60g0KYNVuJXjuRwOsc03njsA2fwL9AvtOfEm2hCzBHcijpbxoS+7AaJIXUGLZ1ss48nU7+wthu10J09mqS2UrkNa61CX7E1/WW1AzNW5o7Kcfd2qF9mRKWDD4ojFmzVYqG2YCM0oHoQ+Q4vCVpd85SUAdYMDXLVmyOkxhvohfaipDVP01nNt9iOPHTNUlstd7tEM1GwYzC8rhbu+02UjWMJTVDo6JNF/H5CWIFbDX4oAjmy1aHbTJpzLMVjinwfYK2JC3zqj7AYpuzuRVLXoX5V1qsF2/5uv0AACAASURBVA9O05mteoYU+zfFZjcpU1MZp4VxMB8Qka93x2jYVZZw6K2Q5RResdsewswQD6TKhoWx1XrdTq+p47Nshc4XcCj+DvE+3m3Fvjy85U7e7tKLZVfZy9nqlMuYoJiazkrYajLOTNCiogmkGwwxQ75CqUeSr5WWEFD2K1coTsEjgIFnc6vBB8VgtmwFaZqbXOjYit2SNFoglCcy2UF5sQuzFb0eIKgk7ZS14TRNZ7IZjL6pndZJ85cu5nEwB4e0TsgQYoklYhwrFJawVbSwlWOrwQfFYbZsFYOOO8tW3OQF3WdsuT7hfAA1W2XJqIStWDGJaNLyqFUixAk6k/myBslP/6bD1jnPV4ngi0cFJz3bA5ddai0RA1ujMDcTPO7WcZ6TYavBB8ViwWwlRxuuiU/tWdnKFdzCc0LaxR7L1mT7pU1Uz/ScSZQxuY+qKcoBkbznqx0J5uNu7ba7kF7K0a4zsnbUhK7AGAlVJe3X27AYtoqWEqKUtTUr/7wVyIaZxBi6Ep3Jfi5GSDzBcMrxRfgIxcLHGrZKSEqHT82ZnLLmytA1kQmsEGPRAwp4zoumf/WWIGgV4qiJOCTFR4wlgw9KwlzZ6hQ9wsaMuYCtoiQ19xRcJ1pyKyWB7PNW6f9PgJUgbYUmloMkUElqcBlbje9MNsjg3ayeTdsDIVlSCeVJMDMZGc8EZZYw2B7UCmM5l5q4hfQy9Bi37oYe1EnCjNkqY1bBLbBRIHlcYgqWVhIo5KASSUXvF4b98mZRMLa6NCzABoQ5c1Ewtro0LMAGhDlzUTC2ujQswAaEOXNRuDRb2d6hBoNBjYuyVSEG2Tt09G2kpb2l+x7i5HcLovrEqBUOmawPa5xpZb5lBLa62ExwdOdKHkc1wVR0K5cKsB+pErbfQofArifrw4QzrVxxMbYarGQHFTxOj6WZkZqt2MI914IJEdVkdU7WmVautcyarbqH2+gTaGykFbwMvXmDdov2zeCp16Y3pT7AIGfRv1Q4y0FQraIyrXmyzvTvNGc192xiXiL/6t+HDgceSfq3pbevbv839EOkqr8lFFEvmlFzb5ZH9eQo1ieDDUq6HsLpnitbpX/rgUJrf0fPyuMmeOfltj33z/c3/AVKJIcJMEdyKOlvukjsw2qQFFJj2NbJOvO17XRztyKEomiS2UrkNa61CX6oahBL6kb9cgtN2t+FswlO0NeHVTcu9E+9DdlB4TJbtsr9xIwNyCgd+Pqw6kIlOO75/obEDy85WIAFU7NsFb6CaO9ZRkO90FaErP5pOvP168Pq5uEp6kXdJLHV6n6PeDYKZhSWT/uVu7uNVA1jSc3Qnu9veMJ92q/czcMTFitgq8EHRcps2Sr3i8g8W73cCmeF+JqXHC7A2lKYW7HkVZh/pcV68eA0nbm/c6v9s9e82j/XNYFw8rPXu8dQCZIREswvMCx9ghlFZpUlXOmtkOUUpvg8K8zo8UAGc29ZmStbZbegzLIVWnZpHfq4catVu9riA0mQ5APMydtdSgH2muOpxDwunTFBMTWdlbDVZJwZ80tHi7omkG4w+SCYMeHUA7CwTyuiyNRZQkDs7KFQnoPjU9yIZXOrIQbFTCGjMme2Sm5BqWSrbqLeTdp7BVgCQoB1jHAOtqIXOQSVpJ1KudsUnclxTUVTO62T5i9dzONgDsN82q8CcScIscQSMQ1RKCxhq2hhK8dWgw+KK3Nlq+wWlFm2KpmSNLF05slLloxK2IoVk4gmLY9aJUKcoDO75X/yda1qetw4525uN/L8ZX/ncxwSzM1UK9xn6I7SWiIGtkZhbib4tF/FtwUybDX4oNgyW7bKbUHplKvsXIBdapX9tYCeXuW0iz2Wrcn2S5uonuk5k2hjch9VE0wSsfzjxrnV/oEE8/P9jdvs/TQwGe06I2tHTb4nwBgJVSXtH9DzuTJbtsptQZlnK+5WerRC0WXCRTfdyz0OP0rExPJF+AjFwscatkpISodPzZnxzazOqtX+WdcEw4lbwWlL9IACOiQkZewdN40lzFnQKJSfYIjrwYEiWw0+qMTpnilbndJbUBawFf+Yor/IXHf9iZL1AfZaNq2TcitIW6GJ5SAJVJIaXMZW4zuzi0NkpO++d9PtPgonf18MVUJ5EsxMRvaoMtJ3ymDzolYYLGwhT9zC7bzQY9z6UDGoBbFV0qyCW2CjFOkJBokpWFpJlEIOKpFU9D4RZ1q5ymJsNYLHR7fhaoo5c1HF2GoEj49uw9UUc+aiirHVCB4f3YarKebMRZVLs5XtHWowGNS4KFsVYpC9QysHdiYoPO7kdwui+sSoFQ6ZrA8D6i9fw4wwAltdbCZYObAzgXo8mIruHFMB9iNVwvZb6BDY9WR9GGBstSgYWw2G7KC8GOtxmhmp2YoF97AOJkRUk9V5VtQ403CtmC1bCS/A7sxSvlkevmwbK8WHx6gPMMhZ9C8VznJQwhUllWnNk3Vm9Iv3qiZ2W6LDllERJL0XULPXTYbfzxKKSEQzau7N8qieHJXaqknl+WhoyV2g5stWdMhJtuIee2c3Hz3u1ozHUk/Nt9AFmCM5lPQ3DYl9WA2SQmoM2zpZZ57aTrdblgr7NslsJfIa19oEP1Q1iCU1Q/OWdjr5nXi737TBAUqW9LfhuFtHfjnu1qmr4krYiv1VMxWLvs+jD0HBcbcWvXWmdCCYmmWr8BVEe88yGuqFtiJk9U/TmQ1Dstp7N0ls5XdWYyUPW4fD8rhbu+12i6JyAEtqhkZFmy7iH90GsQK26u95TldqpFfBVpyD8mwVuQWelYsHWGxzNrdiyasw/0qL9eLBaTqzNYT5pXv/JjCqbobXVMbvAoiD+YCIfL07Rg6qsoRDb4Vp70dHu+0hzAzxQKpsyCeMGNfAVuygs2yFzler5LB163U7a2fy1lyAOXm7Sy+WXWUvZ6tTLmOCYmo6K2GryTgz5pfoslA0gXSDIWbIVyj1AINrZsNQr84SAsp+5QqZ964wAAPP5lb9bShlzA7zZyvhdRJKtoLaiObz5VbnYyt6kUvTPZSmIc3pmeBUnMlmMPqmdlonTcq6mMfBHEbXLt1lCLHEEjENUSgsYatoYSvHVgob4isArOxf70xQcnuWrYTJC1aOlkbPum5FP5azFSuWniRK8qhVIsQJOpPJQEDy07/psHXO81Ui+Np5YRzMzfDCfYbuKK0lYgxrFObyGrz8nWOr4QZ1zetW4ticcpU9pf0CbOUKbuE5Ie1ij2Vrsv3SJqpnes4k/TK5j6opSgyRvOerHQnm427ttrtwU1SOdp2RtaMm7gdjJFSVtF9vA6vretlKmAWeTkXPW8Vuc9sDuoMaZcL0cCUSTzCccnwRPkKx8LGGrRKS0uFTcyZ3MTS96ppg5HArOLBj50gwH6OHrJjJsc4SBK1CfEYieknxEWOJ3gbMiz4Pu062Sk2+C9gqSlKjLKEBd1bOyVYl/58AK0HaCk0sB0mgktTgMrYa35lskMG7WT2btgeyJkwqoTwJZiYj45mgzBIG24NaYSznUhO3kF6GHuPWXZUNcYfbw5F9Rs9j1myVNKvgFtgokDwuMQVLKwkUclCJpKL3C8N+ebMoGFtdGhZgA8KcuSgYW10aFmADwpy5KBhbXRoWYAPCnLkoXJqtbO9Qg8GgxkXZqhCD7B06+jbS0t7SfQ9x8rsFUX1i1AqHTNaHNc60Mt8yAltdbCY4unMlj6OaYCq6c0wF2I9UCdtvoUNg15P1YcKZVq64GFsNVrKDCh6nx9LMSM1WbMGP0HCEiGqyOifrTCvXWubMVt2zbczjZGykFbwMvXmDdgv4lnAkiUt9gEHOon+pcJaDoFpFZVrzZJ3p32nOau7ZxL76/HHjXDTwSNK/eL19dfu/oR8iVf0toYh60Yyae7N87gSlXgc/kHtF/fNlK+anHgm22t/Rs/K4Ce57uW3P/fP9DX+BNpJfH1aCN3UB5kgOVchWqCQYjbZKCqkxbOtknfnadrq5WxFCUTTJbCUGHtfaBD9UNYgldaN+uYUm7e/C2WRPEBygZMlQ7r0+tkr90JRhK1+idODrw6r7dgo+er6/QV+M//W0X7mbh6fO7/y3hzrAgqlZtmJzHKREKqgX2oqQ1T9NZ75+fVjdPDxF9qib5HDa3zpe8nHjcFg+7Vfu7jZSNYwlNUOjnm+6EE5QAVsN6N5rYyv8a3f8i7M8W73cCmeF+Bp7c+gAa0thbsWSV2H+lRbrxYPTdOb+zq32z96G1f65rglEjp/n3j2GSpCMkGB+gWHpE8woCKss4UpvhSyniCcozOjxQAZzb9TjNbLVKfwgUtjfKh1gaNmldejjxq1W7WoLDaSn/YqsSkQB5uTtLqUAe83xVGIel86YoJiazkrYajLOjPmlI1BdE0g3mMwRUi1KPUDm4tOKKAh1lhAQO3sofLmVPC+coGxuNdCgGk7k7ZkvW4GMqmDdqjTA4EoKXVWJp/psgCUgBFjHCOdgK/56AEkZkqSdsjZM1Jkc11Q0tdM6af7SxTwO5uCQp/0qEHeCEEssEXMrhcIStopOUI6tBhvUVeZWh+gFBXThKstWwuQlKm2O0B6bzMbVbJUloxK2YsUkoknLo1aJECfozG75P6C1UNX0uHHO3dxu5PnL/s7nOCSYm6lWuM/QHaW1RHSXRmFuJkhOUIathhvUNbJV9u0ZTrnKzgdYNrrUAfbak55e5bSLPZatyfZLm6ie6TmT9MvkPqqmKDFE8o8b51b7BxLMz/c3brP308BktOuMrB01+UYBY+ROUJqtBhzUNbJV+g0FRWzF3XSPVihCJpycs/QtiScYJGqgMlAsfKxhq4SkdPjUnBnfzOqsWu2fdU0wcrgVnLZEDyigQ0JSxt5x01jCnAWNQvkJBv4Epdhq0EFdJVud+M0q+7AV+0Bjc5G57vpjUll0y0MdYK9l0zopt4K0FZpYDpJAJanBZWw1vjM3nKpgQP+m230UOf6+GKqE8iSYmYzsUWWk75TB5kWtMFjYQp64hdt5oce49aFiUMthq7RZBbfARinSEwwSU7C0kiiFHFQiqeh9Is60cpXF2GoEj49uw9UUc+aiirHVCB4f3YarKebMRRVjqxE8ProNV1PMmYsql2Yr2zvUYDCocVG2KsQge4dWDuxMUHjcye8WRPWJUSscMlkfBtRfvoYZYQS2uthMsHJgZwL1eDAV3TmmAuxHqoTtt9AhsOvJ+jDA2GpRMLYaDNlBeTHW4zQzUrMVC+5hHUyIqCar86yocabhWjFntuqeDmU2YWAjreBl6PBl2y7sSpp4Q3pAfYBBzqJ/qXCWgxKuKKlMa56sM8M74KubmH3TmnFiFUHSewE1e92Rqv6WUEQimlFzb5ZH9eQo1ifqQYmqWMyWrcCvbbgf3uDA45iN3X30uFsTXXCPB9nDugBzJIcqZCuEBKPRVkkhNYZtnawzT22n2y2z5Vn/JpmtxMDjWpvgh6oGsaRmaN7STie/FW8XWnCAkiWDDwpjrmwVf7Hze4dmjoo+wK392O8GvmMIdYAFU7NsxeY4ifEmeqGtCFn903Rmw5Cs5t5NElutdzu0SVEUzCgsj7u1224jVcNYUjM0Ktp0EX/3B7ECthp8UATXwVaMh/JsFfkKnpVUgLF5nIc+wGKbs7kVS16F+VdarBcPTtOZrSGM7v5NYFTdDK+pjDdVi4P5gIh8vTtGDqqyhENvhfL3BFHstocwM8QDqbJhOWxF9mBgdozhD4JrKswOWYetW6/bWXsun4/gLXfydpdeLLvKXs5Wp1zGBMXUdFbCVpNxZswvkXpFE0g3GGJm57T+H+CPZjYM9eosIaDsV66Q28CSAgw8m1vp3VuO2bLVCZzB9XZL6FzJVrmNaBL5QHZQXuzCbEUvcmm6h9I0pJnqn6IzE8GgaWqnddL8pYt5HMzBIe3SXVnEJi0RA1uhsIStooWtHFsNPigOc2arDgPOBCPI6xa48jTEuhX9WM5WrJhENGl51CoR4gSdyWQgIPnp33TYMt+FJOeJUic46dkeuvsM3VFaS8TA1ijMzQTJdCXDVoMPisVVsJWwGx8vmFkYjsDVivnAIGzlCm7hOSHtYo9la7L90iaqZ3rOJD0wuY+qKTITyXu+2pFgPu7WbrsLN0XlaNcZWTtqQlfoJru09FT4pVM7KB6zZSuQyrJZbZ6tOBXRCkX7vclWqpF4guGU44vwEYqFjzVslZCUDp+aMznmazrQNcFw4lZwYMfOkWA+Rg9ZMZNjnSUIWoXY+RGHpPiIsWTwQUmYLVvBR9i4IRewVZSkRlkC0ctW6pB93ir9/wmwEqSt0MRykAQqSQ0uY6vxnckGGbyb1bNpe4jC6dg+3iiEKw1mJiPjmaDMEgbbg1phLOdSE7eQXoYe49ZdxaAWw1YZswpugY0CyeMSU7C0kkAhB5VIKnq/MOyXN4uCsdWlYQE2IMyZi4Kx1aVhATYgzJmLgrHVpWEBNiDMmYvCpdnK9g41GAxqXJStCjHI3qGjbyMt7S3d9xAnv1sQ1SdGrXDIZH1Y40wr8y0jsNXFZoKjO1fyOKoJpqI7x1SA/UiVsP0WOgR2PVkfJpxp5YqLsdVgJTuo4HF6LM2M1GzFFu5hHUyIqCarc7LOtHKtZU5sVfI4YpqtCl6G3rxBuwV6yXXqtdf1AQY5i/6lwlkOgmoVlWnNk3Wmf6d5eLt9RZP06nMXDTyS9C9eb1/d/m/oh0hVf0sool40o+beLI/qyVGps6bzfFZtKPNgq46XMptVimy1v6Nn5XET3Pdy25775/sb0Wv7OxpytQHmSA5VyFaoJBiNtkoKqTFs62Sd+dp2urlbEUJRNMlsJfIa19oEP1Q1iCV1o365hSbt78LZBKfy68OqGxf6ZwgbegywOd0zYCuPXj+jZQMySge+Pqy6b6fgrOf7G/TF2B272j+cIx0IpmbZis1xkBKpoF5oK0JW/zSd+fr1YXXz8BTZo26S2Gp1v791vOTjxuGwfNqv3N1tpGoYS2qG9nx/wxPu037lbh6esFgBW+k8XzjA9nTPk61yW5Tk2erlVjgrnEO9u6cxE2TJqzD/Sov14sFpOnN/51b7Z2/Dav9c1wQs9PPcu8dQCZIREswvMCx9ghkNtsoSrvRWmCIOWHyeFWb0eCD1ni8cYDjds2QrYbPKHmyFll1ahz5u3GrVrraA9ZdsGtwEmJO3u5QC7DXHU4l5XDpjgmJqOithq8k4M+aXjkB1TSDdYDJHMGPCqQfIXBhq1llCQOzsofDlliyuCae4EcvmVjrPczJyMbaKA6ybqHeT9qf9qv1COFdudT62ohe5NN1DaRrSnJ4JTsWZHNdUNLXTOmlS1sU8DubgkHa8GUIssUQMZoXCEraKFrZybKXzPOtVucyVrc42E4zK/s6t9o/xjS3nHJ/NqtkqS0YlbMWKSUSTlketEiFO0Jnd8n9Aa6Gq6XHjnLu53ciTsv2dz3FIMDdTLSaR1FqSvl/RU2FuJvi0X8W3BTJspfM8KNfNVudaZacB9lzo00HYyhXcwnNC2sUey9Zk+6VNVM/0nEkUMrmPqgkmiVj+ceMcuGMA7zC4zd5PA5PRrjOydtTkGwWMkVBV0n61DfCaKVtHmy1b9XyCgQkw7qZ7tEIR3+LNBlhhSTzBIFEDlYFi4WMNWyUkpcOn5sz4ZlZn1Wr/rGuCFnIrOG2JHlBAhzg07a23hDkLGoXyEwzMmfqvNFtVDApcM/x6Fj7dM2WrMz0d2lxkrrv+zhhgr2XTOim3grQVmlgOkkAlqcFlbDW+MzfcpDIY0L/pdh9Z6O+LoUooT4KZycgeVUb6ThlsXtQKg4Ut5IlbuJ0XeoxbH/Q2dAYUXQlzYqt+ZhXcAhulSE8wSEzB0kqiFHJQiaSi94k408pVFmOrETw+ug1XU8yZiyrGViN4fHQbrqaYMxdVjK1G8PjoNlxNMWcuqlyarWzvUIPBoMZF2aoQg+wdWjmwM0HhcSe/WxDVJ0atcMhkfRhQf/kaZoQR2OpiM8HKgZ0J1OPBVHTnmAqwH6kStt9Ch8CuJ+vDAGOrRcHYajBkB+XFWI/TzEjNVizoozqUEFFNVudZUeNMw7ViTmzF/BpQqDzp3ywPX7bt2tdis5UY9QEGOYv+pcJZDkq4oqQyrXmyzgzvgK9uYl99ftgyKoKk9wJq9rojVf0toYhENKPm3iyP6slRqdfBV7mXcRLGPNiK2zuUr+zMikOrePfR425NHcZWYugCzJEcSvqbhsQ+rAZJITWGbZ2sM4P+7Zb9DuvbJLOVGHhcaxP8UNUgltQMzVva6eR/yHbcrbtxoX/qbYCqYmsEzIOtwoiHzK3430Ufd2uqjq3EUAdYMDXLVuGLsHC8iV5oK0JW/zSd2ZChdK30a5LYar3boZ+mRsGMwvK4W7vtFucRA1hSMzQq2nTREVQkVsBW+kEdd2shJYuxYLbi95w5bBl1bCWGPsBim7O5FUtehflXWqwXD07Tma0hcdApm8CouhleUxn/lD4O5gMi8vXuGDmoyhIOvRVKYcModttDmBnigVTZAD2Zz7ZPpyWzlbCf32Hr1ut21t62s5UY3nInb3fpxbKr7OVsdcplTFBMTWclbDUZZ8b8EsWAogmkGwwxQ75CqQfwRzPxRbMehSUElP3KFXLbllCAgWdzK6V7t9vsalUHY6sGTB4c/mcrCbKD8mIXZit6kUvTPZSmIc1U/xSdyWYw+qYQTsKkrIt5HMzBIe0qXYYQSywRI1qhsIStopwnx1bKQbk2dSviq+WylTB5iSCvW+DK0xDrVvRjOVuxYhLRpOVRq0SIE3Qmk4GA5Kd/02HrnOerRPC1s5k4mBsfhFsK3VFaS8R41ijMzQSPu3Wc8WTYqnJQhZPBBbOVHG0Bl2crV3ALzwlpF3ssW5PtlzZRPdNzJlHG5D6qpujLH8n7QNuRYD7u1m67C/c/5WjXGVk7ahI3YIyEqpL2623oPTVdMFtBB7X/RisULeGzlWoknmA45fgifIRi4WMNWyUkpcOn5kxuPtF0oGuC4cSt4MCOnSPBHD8/xEyOdZYgaBVi50cckuIjxpJhBlXAV0tmqyhJjbKEBvHchlTqkH3eKv3/CbASpK3QxHKQBCpJDS5jq/GdyQYZvJvVs2l7iMLp2D7eKIQrDWYmI+OZoMwSBtuDWmEs51ITt5Behh7j1l3FoGBj8LCIObFVP7MKboGNAsnjElOwtJJAIQeVSCp6vzDslzeLgrHVpWEBNiDMmYuCsdWlYQE2IMyZi4Kx1aVhATYgzJmLwqXZyvYONRgMalyUrQoxyN6ho28jLe0t3fcQJ79bENUnRq1wyGR9WONMK/MtI7DVxWaCoztX8jiqCaaiO8dUgP1IlbD9FjoEdj1ZHyacaeWKi7HVYCU7qOBxeizNjNRsxRbuYR1MiKgmq3OyzrRyrWVObMVt0dOAPlLGRlrBy9CbN2i3QC8Wd457U7Yv9QEGOYv+pcJZDoJqFZVpzZN1pn+neXi7fUUT8xL5V/+SdzjwSNK/eL19dfu/4XgjVf0toYh60Yyae7M8qidHsT4Z0L2pMg+26p6fZX/qwT3ej0Jrf0fPyuMmuO/ltj33z/c3jAf3d+FAcNQQAeZIDlXIVqhI7MNqkBRSY9jWyTrzte10c7cihKJoktlKDDyutQl+qGoQS+pG/XILTeJPyteHVTcu9E+9DVfKVqdASvA3A8kf/bMBGaUDXx9W3bdTcNzz/Q36YoTnLFXUARZMzbIVm+MgJVJBvdBWhKz+aTrz9evD6ubhKbJH3SSx1ep+f+t4yceNw2H5tF+5u9tI1TCW1Azt+f6GJ9yn/crdPDxhsQK2GnxQpMyVrWIwP4jMs9XLrXBWiK8jyTMEWFsKcyuWvArzr7RYLx6cpjP3d352+Xx/g6eZ/ZtAOPl57t1jqATJCAnmFxiWPsGMIrPKEq70VshyClN8nhVm7nggg7m3rFwDW7G7OmfZCi27tA593LjVql1V8V8+/tvm/i6qlALMydtdSgH2muOpxDwunTFBMTWdlbDVZJwZ80tEi4omkG4wmSOcxqLUA2QuPq2IIlNnCQGxs4fCl1uyuCac4kYsm1vp3Zu9LEOZP1sJu44o2QrOU9r/owVCeSKTHZQQYB0jnIOt6EUuTfdQmoY0U/1TdGYiGDRN7bROmr90MY+DOTjkab8KxJ2P2KQlYmArFJawVbSwlWOrwQfFlXmzFbdtWClbCZOXqDRRF39XtInDQAFWQEYlbMWKSUSTlketEiFO0Jnd8n9Aa6Gq6XHjnLu53cjzl/2dz3FIMDdTrXCfoTtKa4kY2BqFuZng034V3xbIsNXgg2LLjNkqQVVFbMUvDHMBFp/as7KVK7iF54S0iz2Wrcn2S5uonuk5k/TL5D6qpigHRPKPG+dW+wcSzM/3N26z99PAZLTrjKwdNflGAWMkVJW0f0DP58ps2Sq37WSerbib7tEKRZcJg9XBsltaaY/DjxIxsXwRPkKx8LGGrRKS0uFTc2Z8M6uzarV/1jXBcOJWcNoSPaCADglczN5x01jCnAWNQvkJhrgeHCiy1eCDSpzuWbKVsMNhL7ZiH2hsLjLXXX+di5FkfYC9lk3rpNwK0lZoYjlIApWkBpex1fjO3HDPmgYD+jfd7qNw8vfFUCWUJ8HMZGSPKiN9pww2L2qFwcIW8sQt3M4LPcatD0MNSnpUGJ7u2bBVP7MKboGNUqQnGCSmYGklUQo5qERS0ftEnGnlKoux1QgeH92GqynmzEUVY6sRPD66DVdTzJmLKsZWI3h8dBuuppgzF1UuzVa2d6jBYFDjomxViEH2Dq0c2Jmg8LiT3y2I6hOjVjhksj4MqL98DTPCCGx1sZlg5cDOBOrxYCq6c0wF2I9UCdtvoUNg15P1YYCx1aJgbDUYsoPyYqzHaWakZisW+BEajhBRTVbnWVHjTMO1Yk5sxf3yxoP/VTO1teBl6PBl263m7KOo8r6z9AAAGflJREFUp9NpiACDnEX/UuEsByVcUVKZ1jxZZybeUN6ziXmJfDMArCJI+uGhZq87UtXfEopIRDNq7s3yqJ4cxfqkZlB5XwXMg62YvUPhllacA1FoZXYf7f497tapH/RI3Z20AeZIDiX9TUNiH1aDpJAaw7ZO1pmnttPtlt1cqG+TzFYir3GtTfBDVYNYUjM0/Ns19vyBTS/hACVLFIMq8VWHebBVNxCRt5n9rTKC+GeH3kHH3Zrf8S9AOl3qAAumZtkqfBHS3rOMhnqhrQhZ/dN0ZsOQ7LXSu0liq/Vuh/Z/jIIZheVxt3bbbaRqGEtqhkZFmy6EXXkL2Eo1qLyvAK6Brbht2QvYKnI7PCvJAJM3MNUHWGxzNrdiyasw/0qL9eLBaTqzNYS5KPo3gVF1s5amMt6vNg7mAyLy9e4YOajKEg69FcqeJ4rd9hBmhnggVTaU+Qpi5mwl541ZtkLaWg8dtm69bmft7N5/0lXjLXfydpdeLLvKXs5Wp1zGBMXUdFbCVpNxZswvkXZFE0g3GGJmFyP8P8AfzWwY6tVZQkDZr1whszc4AzDwbG6ldm/aVxFmzlZdA/POG14wHWBQFVXLZnEtsoPyYhdmK3qRS9M9lKYhzemZ4FScyWYw+qZ2qiJNyrqYx8EcHNIu3WUIscQSMbdSKCxhq2hhK8dWFYNK+SrGVbAVNz7tTDClNn2K1WyVJaMStmLF0pNESR61SoQ4QWcyGYi8xVBB02HrnOerRPC188I4mBsfhPsM3VFaS0S20ijMzQTJVpcZtqoalOwrhOtgK+Zr2ilX2SMkviMoBmErV3ALzwlpF3ssW5PtlzZRPdNzJtHJ5D6qpuj6Ylh3vduRYD7u1m67CzdF5WjXGVk7ahJMYIyEqpL2623I+gpjrmwVLSVEKWtrVv55K/Dt3v6bUJucuPRA4gmGU44vwkcoFj7WsFVCUjp8as7kdDa96ppg2HArOLBj50gwH6MHh5jJsc4SBK1CfEYiDknxEWPJQO4V170C5spWYYTOOd0q++kUJalRlsCoLZnoFyH7vFX6/xNgJUhboYnlIAlUkhpcxlbjO5MNMng3q2fT9hCFzbF9vFEIVxrMTEbGM0GZJQy2B7XCWM6lJm4hvQw9xq27ikElfHWimBNb9TOr4BbYKJA8LjEFSysJFHJQiaSi9wvDfnmzKBhbXRoWYAPCnLkoGFtdGhZgA8KcuSgYW10aFmADwpy5KFyarWzvUIPBoMZF2aoQg+wdOvo20tLe0n0PcfK7BVF9YtQKh0zWhzXOtDLfMgJbXWwmOLpzJY+jmmAqunNMBdiPVAnbb6FDYNeT9WHCmVauuBhbDVaygwoep8fSzEjNVmzhHtbBhIhqsjon60wr11rmxFbCL2/4Z8nYSCt4GXrzBu0W8C3hcQ0p9QEGOYv+pcJZDoJqFZVpzZN1pn+nOfvO+p5NzEvkX/370OHAI0n/tvT21e3/hn6IVPW3hCLqRTNq7s3yqJ4cxfqkYlCiJ5kyD7bqnp8lbOV/eJplq/0dPSuPm+C+l9v23D/f3/AXKJEcJsAcyaGkv+kisQ+rQVJIjWFbJ+vM17bTzd2KhIGiSWYrkde41ib4oapBLKkb9cstNGl/F84mOEFfH1bduNA/9TakPcmUebCVB82tjrs1+EFpiq18idKBrw+rLlSCj57vb0j8dOcs5U11gAVTs2zF5jhIiVRQL7QVIat/ms58/fqwunl4iuxRN0lstbrfI56NghmF5dN+5e5uI1XDWFIztOf7G54mnvYrd/PwhMUK2Eo3KNGTTJkzWyX37sqz1cutcFaYb/v9nVvtn7GGoQKsLYW5FUtehflXWqwXD07Tma3y5/ubppeKJhA5fp579xgqQTJCgvkFhqVPMKMgrLKEK70VspzCFJ9nhRk9Hsgg7hU8yZT5slVmN5wsW6FQaR36uHGrVbvaAr98mumPEF0hwJy83aUUYK85nkrM49IZExRT01kJW03GmTG/dASqawLpBpM5ghkTTj1A5uLTiigIdZYQEDt7KJTn4PgUN2LZ3ErvXsGTTJkrWwWuGpit4Dyl+x9cfGdZajkjW9GLXJruoTQNaab6p+hMPhjUTe20TpqqdPbjYA4OedqvAnEnIzZviZhbKRSWsFW0sJVjq8pBMZ5kykzZCm510YDuxkdHWzB5iUoTdS+3XOIwUIAVkFEJW7FiEtGk5VGrRIgTdGa3/B/Q9qVqetw4525uN/KkbH/ncxwSzM1UK9xn6I7SWiLGsEZhbib4tF/FtwUybFU/KOLJ62ErCO26Fb8wzARYvO54XrZyBbfwnJB2sceyNdl+aRPVMz1nkn4T39i9mlJ3Bh43zq32DySYn+9v3Gbvp4HJaNcZWTtq8o0CxkioKmn/YJ5HnmTKgtmKu5UerVCETJif0ShL4gmGLF+Ej1AsfKxhq4SkdPjUnIl4EAQApsjCJhhO3ApOW6IHFNAhgYvZO24aS5izoFEoP8EQ14MDRbYabFDMox74dC+WrdgHGpuLzCGvcZL1AfZaNq2TcitIW6GJ5SAJVJIaXMZW4zuzi0NkpO++d9PtPgonf18MVUJ5EsxMRvaoMtJ3ymDzolYYLGwhT9zC7bzQY9z6UDGohCf50z0btupnVsEtsFGK9ASDxBQsrSRKIQeVSCp6n4gzrVxlMbYaweOj23A1xZy5qGJsNYLHR7fhaoo5c1HF2GoEj49uw9UUc+aiyqXZyvYONRgMalyUrQoxyN6hlQM7ExQed/K7BVF9YtQKh0zWhwH1l69hRhiBrS42E6wc2JlAPR5MRXeOqQD7kSph+y10COx6sj4MMLZaFIytBkN2UF6M9TjNjNRsxYJ7WAcTIqrJ6jwrapxpuFbMia3IHgww7vADomykFbwMXVCb2A+wRX2AQc6if6lwloMSriipTGuerDPDO+Crm9gHjw9bRkWQ9GNDzV53pKq/JRSRiGbU3JvlUT23/SX/2nelDdHQxOvBYx5sxV3eYBcG1qw4tDgNh2341P3LqT3u1u0ZAv9i6ALMkRxK+puGxD6sBkkhNYZtnawz2w7W2y37s4e+TTJbibzGtTbBD1UNYknN0LylnU72/IEzBAcoWdLfhuNuDYyIPzGYB1t1g4nYKsXEbEBGGqIP4RwwauN+xbOlDrBgapatwndQ4XgTvdBWhKz+aTqzYUj2V1q9myS2Wu92W8dLHrYOh+Vxt3bbbaRqGEtqhkZFmy7ir5AgVsBW/T1/2HI5pBzW82WrwzaZN+bZKnI7PCvpABN+rXjBmSBLXoX5V1qsFw9O05mtIUze1r8JjKqb4TWVcVzFwXxARL7eHSMHVVnCobdC0fFUsdsewswQD6TKBpaaknQ1a7Zar9vpNR1flq3Q+WodyqmFTpazVW+5k7e79GLZVfZytjrlMiYopqazEraajDNjfolUK5pAusEQMwwslHrEW7Hh/bh1lhBQ9itXmM5hWoCBZ3Or/jawCwGJ1YEZsxW+6HuvsvMBJqkNV8t6uxXcmR2UF7swW9GLXJruoTQNaab6p+hMNoPRN7XTOmlS1sU8DubgkHbpLkOIJZaIuZVCYQlbRQtbObZS2LAgtopBXZhlK2HyklF7jslLloxK2IoVk4gmLY9aJUKcoDOZDAQkP/2bDluGUknOE6VOcNKzPXT3GbqjtJaIMaxRmJsJkqw3w1Zq9y5kJojH2Jut5GhLqE1w/yBs5Qpu4Tkh7WKPZWuy/dImqmd6ziQ9MLmPqimyE8l7vtqRYD7u1m67CzdF5WjXGVk7ahJM6F6ttPTEW6KzgaGmdM43V7aKlhKilLU1K/+8FeM2Xm3Sv32ReILhlOOL8BGKhY81bJWQlA6fmjM56mt61TXBSONWcGDHzpFgPkYPWTGTY50lCFqFOGoieknxUeGXTpkNi3mCob1InGNHWMBWUZIaZQlEbVeZcmYRss9bpf8/AVaCtBWaWA6SQCWpwWVsNb4z2SCDd7N6Nm0PZE2YVEJ5EsxMRsYzQZklDLYHtcJYzsVfKzFCehl6jFt3VTZEHWa+u+bEVv3MKrgFNgokj0tMwdJKAoUcVCKp6P3CsF/eLArGVpeGBdiAMGcuCsZWl4YF2IAwZy4KxlaXhgXYgDBnLgqXZivbO9RgMKhxUbYqxCB7h46+jbS0t3TfQ5z8bkFUnxi1wiGT9WGNM63Mt4zAVhebCY7uXMnjqCaYiu4cUwH2I1XC9lvoENj1ZH2YcKaVKy7GVoOV7KCCx+mxNDNSsxVb8CM0HCGimqzOyTrTyrWWObEV+2MB6Qk0NtJKXoYeXqLt4EuxC16GXh9gkLPoXyqc5SCoVlGZ1jxZZ/p3mrOaezYxrz5/9S95hwOPJP2L19tXt0dOiFT1t4Qi6kUzau7N8qieHMX6ZKhBIb/hMg+26h53jX/on/gJBwqt/R09K4+b4L6X2+Cp/V2QCQK85CAB5kgOJf1NF4l9WA2SQmoM2zpZZ7421LDa3K0IoSiaZLYSeY1rbYIfqhrEkrpRv9xCk7gz5S0P40L/1NuAVT3tV+7m4Um+yOfBVh7ijjGsWdnc6uvDqguV1nHd6UFXG5EcLsCCqVm2Ct9BtPcso6FeaCtCVv80nfn69WF18/AU9aJukthqdb9HPBsFMwrLp/3K3d1GqoaxpGZoz/c3POHGlBHECtiqflDsBQPKbNkqueFPEVu93DJnJar8r5TkgAHWlsLciiWvwvwrLdaLB6fpzP2dn3I+39+AuaeyCYSTn73ePYZKkIyQYH6BYfl8f7O6/xpFZpUlXOmtkOUUpvg8K0zn8UAGc2+ZVXNlK59a7doZIrt3aDrA0LKLd6j/YrlvZzo+kFhJKcCcvN2lFGCvOZ5KzOPSGRMUU9NZCVtNxpkxv0RcqWgC6QaTD4IZE049AAv7tCKKTJ0lBMTOHgrlOTg+xY1YNrfSuxdeDNc5Ewy/iO+o6zgQW5FJe68AS0AIsI4RzsFW9CKXpnsoTUOaqf4pOjMRDJqmdlonzV+6mMfBHIb5tF+t9s+lEZu0RMytFApL2Cpa2MqxlXJQEv/yZa5sldpMtYytSiYvTSydefKSJaMStmLFJKJJy6NWiRAn6Mxu+T+gtVDV9Lhxzt3cbuT5S5sOkGBuJjV+GhgdpbVEZCuNwtyc62m/im8LZNhq8EGxZbZsRV8p0ZetxIXh7iw2AXapVfbXAnp6ldMu9li2JtsvbaJ6pudMoo3JfVRN0eovkn/cOLfaP5Bgfr6/cZu9nwYmo11nZO2oyfcEGCOhqqT9A3o+V2bLVnhn1t4zQeFWOlgIjG7f5m+6l3tcoowsX4SPUCx8rGGrhKR0+NScyd3/9lTyrGuC4cSt4LQlekABHRKSMvaOm8YS5ixoFMpPMMT14ECRrQYfVOJ0z5StTsJjWOVsJT2m2E2nu8qCBxoVAfZaNq2TcitIW6GJ5SAJVJIaXMZW4ztz45glME8ZTtN0u4/Cyd8XQ5VQngQzk5E9qoz0nTLYvKgVBgtbyBO3cDsv9Bi3PlQM6nrZqp9ZBbfARinSEwwSU7C0kiiFHFQiqeh9Is60cpXF2GoEj49uw9UUc+aiirHVCB4f3YarKebMRRVjqxE8ProNV1PMmYsql2Yr2zvUYDCocVG2KsQge4dWDuxMUHjcye8WRPWJUSscMlkfBtRfvoYZYQS2uthMsHJgZwL1eDAV3TmmAuxHqoTtt9AhsOvJ+jDA2GpRMLYaDNlBeTHW4zQzUrMVC+5hHUyIqCar86yocabhWjEntsK/E0SIn2ZnI63kZeiJLUnJ46kR6gMMchb9S4WzHJRwRUllWvNknRn94r2qid2W6LBlVARJ7wXU7HVHqvpbQsFspNtv1Nyb5VE9OSq1VZPK81f3ZvnUQ+tBIslWnAZ+81H237wB2gBzJIeS/qYhsQ+rQVJIjWFbJ+vM0+l0Oh136/V2y1Jh3yaZrURe41qb4IeqBrGkZmje0k4nf9K637TBAUqW9LfhuFsDXx13a27T8g7zYKtuMML1zf6qmYrJv4tuFSS3JD1TOhBMzbJV+A6ivWcZDfVCWxGy+qfpzNNxt17vjqz23k0SW/md1VjJw9bhsDzu1m67jVQNY0nN0Kho00V80oJYAVv19zzVlb4qroKtuIY8W0WualuSV8VEZoIseRXmX2mxXjw4TWcmmLJ/ExhAN8NrKuN3AcTBfEBEvt4dI19UWcKht8K096Oj3fYQZoZ4IFU2sINKGnYNbMX6L8tWSJtXkt6StCTAnLzdpRfLrrKXs9UplzFBMTWdlbDVZJwZ80t0WSiaQLrBEDPkK5R6gMF5sor06iwhoOxXrpB57woDMPBsbtXfBv4KSPHy/NlKmG7o2UrekvR8udX52Ipe5NJ0D6VpSHN6JjgVZ7IZjL6pndZJk7JoLS4K5jC6hqxyhFhiiZhbKRSWsFW0sJVjK4UNC2Qrye2DzASR5869bkU/lrMVK5aeJEryqFUixAk6k8lAQPLTv+mwdc7zVSL42nlhHMzN8FqyAkdpLRFjWKMwNxMkC94ZthpsUFc9ExTPotOvsjOrEbIBHQZhK1dwC88JaRd7LFuT7Zc2UT3Tcya5GJjcR9UUJYZI3vPVjgTzcbd2211LVolo1xlZO2rifjBG7t5cmq10NjDzwmteZU/cdMqzFXIbOIvgpPWYvBQi8QTDKccX4SMUCx9r2CohKR0+NWdyF0OT+uiaYDRxKziwY+dIMB+jh6zADLHOEgStQjTRi+klxUeMJXobohXB2GEcZs1Wqcl3AVtFSWq86kIrWQM0yD5vlf7/BFgJ0lZoYjlIApWkBpex1fjOZIMM3s3q2bQ9kO9+UgnlSTAzGRnPBGWWMNge1ApjOZeauIX0MvQYt+6qbIg63G65h2sD5sRW/cwquAU2CiSPS0zB0koChRxUIqno/cKwX95cH47Ho9RkbHVpWIANCHPmomBsdWlYgA0Ic+aiYGx1aViADQhz5qJwabayvUMNBoMaF2WrQgyyd+jo20hLe0v3PcTJ7xZE9YlRKxwyWR/WONPKfMsIbHWxmeDozpU8jmqCqejOMRVgP1IlbL+FDoFdT9aHCWdaueJibDVYyQ4qeJweSzMjNVuxBT9CwxEiqsnqnKwzrVxrmRNb4ecJu2fbmOdf2Ugrexl68xJtB1+KDd7BLb0MvT7AIGfRv1Q4y0FQraIyrXmyzvTvNGc192xiX33+uHEuGngk6V+83r66PXJCpKq/JRRRL5pRc2+Wz52g1OvgBxjUzcOTEB2vc2Er7oFo9qceIlvt7+hZedwE973chnO/vwsyQQBIfn1YCWdLF2CO5FDS33SR2IfVICmkxrCtk3Xma0MNq83dihCKoklmK5HXuNYm+KGqQSypG/XLLTSJO1PwBMEBSpYMMChgBlPmwVYe5Ge0qf002ICM0oGvD6vu26l1HBc/T/sVoPzn+xv+20MdYMHULFuFbyDae5bRUC+0FSGrf5rOfP36sLp5eIrsUTdJbLW63986XvJx43BYPu1X7u42UjWMJTVDo55vuhBOUAFbDTIo9vC2zJat8K/d8S+L8mz1csuclaiSLeCbZ6gAa0thbsWSV2H+lRbrxYPTdOb+zk85n+9vwNxT2QTCyc9z7x5DZZwFxMH8AkPu+f5mdf81iswqS7jSW2GSFMgJCtN5PJDB3BvKtbLVKcwQhf2t0gGGll28Q/0Xy30706GB9LRfkVWJKMCcvN2lFGCvOZ5KzOPSGRMUU9NZCVtNxpkxv0RcqWgC6QbNHCOqRakHyFx8WhFFps4SAmJnD4Uvt5LnhROUza307oV6rnQmCD8VrFv1CLDEqko81WcDLAEhwDpGOAdb0Ytcmu6hNA1pTs8Ep+LMRDBomtppnTR/6WIeB3NwyNN+tdo/l0Zs0hIxt1IoLGGr6ATl2Eo5KAyUlKEyW7Y6bNlZYTlblUxe2gy2PTaZjavZKktGJWzFiklEk5ZHrRIhTtCZ3fJ/QGuhqulx45y7ud3I85f9nc9xSDA3Mxo/DYyO0loiukujMDcTJCcow1aDDKp15tWxVfbtGU6/yt6dxRBg2ehSB9hrT3p6ldMu9li2JtsvbaJ6pudMEkhM7qNqihJDJP+4cW61fyDB/Hx/4zZ7Pw1MRrvOyNpRk1V2MEbuBKXZaqhBieuY4XTPkq0iuuI2KMyzFX/THSwEhvOXnLP0LYknGCRqoDJQLHysYauEpHT41JwZ38zqrAoraH2bYDhxKzhtiR5QQIeEpIy946axhDkLGoXyEwz8CUqx1YCD4uSj0z1PtjpJm1WWs5X0QGM3nfaVNJVNz67LA+y1bFon5VaQtkITy0ESqCQ1uIytxnfmhlPlKYPtJdd0u4/Cyd8XQ5VQngQzk5E9qoz0nTLYvKgVBgtbyBO3cDsv9Bi3PlQMir0nKKZXc2KrfmYV3AIbpUhPMEhMwdJKohRyUImkoveJONPKVRZjqxE8ProNV1PMmYsqxlYjeHx0G66mmDMXVYytRvD46DZcTTFnLqpcmq1s71CDwaDGRdmqEIPsHVo5sDNB4XEnv1sQ1SdGrXDIZH0YUH/5GmaEEdjqYjPByoGdCdTjwVR055gKsB+pErbfQofArifrwwBjq0XB2GowZAflxViP08xIzVYsuId1MCGimqzOs6LGmYZrxZzYSn46lNmEgY20sudLmT1JwSu4mX1KPeoDDHIW/UuFsxyUcEVJZVrzZJ0Z3gFf3cTsm9aME6sIkgfu1ehed6SqvyUUkYhm1Nyb5VE9OYr1id6G6L3ywgvlA+bBVgwvgV/bcD+8wYFXvvso8y/c40E+WboAcySHkv6mIbEPq0FSSI1hWyfrzNPpdDodd+v1dstseda/SWYrkde41ib4oapBLKkZmre008mftC604AAlS/racNyt8SWUHmQ9W/1f3whvO2VVyVcAAAAASUVORK5CYII=" alt="" />

注意事项:

  需要修改自己的数据库连接信息和指定导入文本文件的路径,insertCustInfo方法需要自己修改实现

JAVA从文本文件(txt)读取一百万条数据保存到数据库的更多相关文章

  1. .NET 一次读取几百条数据优化,从原来30分钟优化到30秒

    1.全部数据读取到内存, 不要使用string,而是使用stringbuilder,stringbuilder的效率非常高 2.添加到数据库 不要使用excute,而是使用事务,几百万条数据会请求数据 ...

  2. php使用cvs导出百万条数据,大量数据

    MySQL CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(45) NOT NULL DEFAUL ...

  3. 提高MYSQL百万条数据的查询速度

    提高MYSQL百万条数据的查询速度 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 nul ...

  4. 实现java 中 list集合中有几十万条数据,每100条为一组取出

    解决"java 中 list集合中有几十万条数据,每100条为一组取出来如何实现,求代码!!!"的问题. 具体解决方案如下: /** * 实现java 中 list集合中有几十万条 ...

  5. 问问题_Java一次导出百万条数据生成excel(web操作)

    需求:在web页面操作,一次导出百万条数据并生成excel 分析: 1.异步生成Excel,非实时,完成后使用某种方式通知用户 2.生成多个excel文件,并打包成zip文件,因为一个excel容纳不 ...

  6. POI读取Excel数据保存到数据库,并反馈给用户处理信息(导入带模板的数据)

    今天遇到这么一个需求,将课程信息以Excel的形式导入数据库,并且课程编号再数据库中不能重复,也就是我们需要先读取Excel提取信息之后保存到数据库,并将处理的信息反馈给用户.于是想到了POI读取文件 ...

  7. Java 线程池 +生产者消费者+MySQL读取300 万条数据

    1.1需求 数据库300 万条用户数据 ,遍历获取所有用户, 各种组合关联, 获取到一个新的json ,存到redis 上. 1.2 难点 数据库比较多, 不可能单线程查询所有的数据到内存. 1.3解 ...

  8. jdbc读取百万条数据出现内存溢出的解决办法

    本人在做项目实施时,我们使用的是mysql数据库,在不到一个月的时间已经有了2千万条数据,查询的时候非常慢,就写了一个数据迁移的小项目,将这两千万条数据存放到MongoDB中看效率怎么样,再读取数据时 ...

  9. 查询优化百万条数据量的MySQL表

    转自https://www.cnblogs.com/llzhang123/p/9239682.html 1.两种查询引擎查询速度(myIsam 引擎 ) InnoDB 中不保存表的具体行数,也就是说, ...

随机推荐

  1. 2018-2019-2 《网络对抗技术》Exp8 Web基础 20165326

    Web基础 实验要求 本实践的要求: Web前端HTML,能正常安装.启停Apache.理解HTML,理解表单,理解GET与POST方法,编写一个含有表单的HTML. Web前端javascipt.理 ...

  2. 【转】iPhone手机获取uuid 安装测试app

    iPhone手机获取uuid 安装测试app UDID是一种iOS设备的特殊识别码.除序号之外,每台ios装置都另有一组独一无二的号码,我们就称之为识别码( Unique Device Identif ...

  3. Tosca 给定义变量,取内容放到变量里

    可以在TOOLS里 buffer viewer里面搜索查自己的变量

  4. android -------- java.net.UnknownServiceException

    最近升级了Android的API版本时 ,导致我的网络请求失败了, 出现了这个错误 java.net.UnknownServiceException, 这个错误,我在网上查到这个主要是由于,我们的Ok ...

  5. MySQL not equal to operator <> && !=

    MySQL :: MySQL 5.7 Reference Manual :: 12.3.2 Comparison Functions and Operatorshttps://dev.mysql.co ...

  6. shell编程系列20--文本处理三剑客之awk常用选项

    shell编程系列20--文本处理三剑客之awk常用选项 awk选项总结 选项 解释 -v 参数传递 -f 指定脚本文件 -F 指定分隔符 -V 查看awk的版本号 [root@localhost s ...

  7. git git push某一次的commit记录

    $ git push <remote name> <commit hash>:<remote branch name> # Example:$ git push o ...

  8. pytorch torch.nn 实现上采样——nn.Upsample

    Vision layers 1)Upsample CLASS torch.nn.Upsample(size=None, scale_factor=None, mode='nearest', align ...

  9. springboot中使用mybatis的分页插件pageHelper

    首先在pom.xml中配置 <!-- https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot ...

  10. windows系统中在jupyter安装虚拟环境内核

    一.在jupyter中安装虚拟环境内核 1.创建Python3虚拟环境 参考本文其他博客 2.进入虚拟环境 3.安装jupyter pip install jupyter 4.添加当前环境到jupyt ...